updated gitignore

This commit is contained in:
Mark Gregory
2026-06-11 12:13:16 +01:00
parent 638ff7eeea
commit 29004e46c2
79 changed files with 2 additions and 6452 deletions
@@ -1,252 +0,0 @@
## Filament
- Filament is a Laravel UI framework built on Livewire, Alpine.js, and Tailwind CSS. UIs are defined in PHP via fluent, chainable components. Follow existing conventions in this app.
- Use the ___SINGLE_BACKTICK___search-docs___SINGLE_BACKTICK___ tool for official documentation on Artisan commands, code examples, testing, relationships, and idiomatic practices. If ___SINGLE_BACKTICK___search-docs___SINGLE_BACKTICK___ is unavailable, refer to https://filamentphp.com/docs.
### Artisan
- Always use Filament-specific Artisan commands to create files. Find available commands with the ___SINGLE_BACKTICK___list-artisan-commands___SINGLE_BACKTICK___ tool, or run ___SINGLE_BACKTICK___php artisan --help___SINGLE_BACKTICK___.
- Inspect required options before running, and always pass ___SINGLE_BACKTICK___--no-interaction___SINGLE_BACKTICK___.
### Patterns
Always use static ___SINGLE_BACKTICK___make()___SINGLE_BACKTICK___ methods to initialize components. Most configuration methods accept a ___SINGLE_BACKTICK___Closure___SINGLE_BACKTICK___ for dynamic values.
Use ___SINGLE_BACKTICK___Get $get___SINGLE_BACKTICK___ to read other form field values for conditional logic:
<code-snippet name="Conditional form field visibility" lang="php">
use Filament\Forms\Components\Select;
use Filament\Forms\Components\TextInput;
use Filament\Schemas\Components\Utilities\Get;
Select::make('type')
->options(CompanyType::class)
->required()
->live(),
TextInput::make('company_name')
->required()
->visible(fn (Get $get): bool => $get('type') === 'business'),
</code-snippet>
Use ___SINGLE_BACKTICK___Set $set___SINGLE_BACKTICK___ inside ___SINGLE_BACKTICK___->afterStateUpdated()___SINGLE_BACKTICK___ on a ___SINGLE_BACKTICK___->live()___SINGLE_BACKTICK___ field to mutate another field reactively. Prefer ___SINGLE_BACKTICK___->live(onBlur: true)___SINGLE_BACKTICK___ on text inputs to avoid per-keystroke updates:
<code-snippet name="Reactive field update" lang="php">
use Filament\Schemas\Components\Utilities\Set;
use Illuminate\Support\Str;
TextInput::make('title')
->required()
->live(onBlur: true)
->afterStateUpdated(fn (Set $set, ?string $state) => $set(
'slug',
Str::slug($state ?? ''),
)),
TextInput::make('slug')
->required(),
</code-snippet>
Compose layout by nesting ___SINGLE_BACKTICK___Section___SINGLE_BACKTICK___ and ___SINGLE_BACKTICK___Grid___SINGLE_BACKTICK___. Children need explicit ___SINGLE_BACKTICK___->columnSpan()___SINGLE_BACKTICK___ or ___SINGLE_BACKTICK___->columnSpanFull()___SINGLE_BACKTICK___:
<code-snippet name="Section and Grid layout" lang="php">
use Filament\Schemas\Components\Grid;
use Filament\Schemas\Components\Section;
Section::make('Details')
->schema([
Grid::make(2)->schema([
TextInput::make('first_name')
->columnSpan(1),
TextInput::make('last_name')
->columnSpan(1),
TextInput::make('bio')
->columnSpanFull(),
]),
]),
</code-snippet>
Use ___SINGLE_BACKTICK___Repeater___SINGLE_BACKTICK___ for inline ___SINGLE_BACKTICK___HasMany___SINGLE_BACKTICK___ management. ___SINGLE_BACKTICK___->relationship()___SINGLE_BACKTICK___ with no args binds to the relationship matching the field name:
<code-snippet name="Repeater for HasMany" lang="php">
use Filament\Forms\Components\Repeater;
Repeater::make('qualifications')
->relationship()
->schema([
TextInput::make('institution')
->required(),
TextInput::make('qualification')
->required(),
])
->columns(2),
</code-snippet>
Use ___SINGLE_BACKTICK___state()___SINGLE_BACKTICK___ with a ___SINGLE_BACKTICK___Closure___SINGLE_BACKTICK___ to compute derived column values:
<code-snippet name="Computed table column value" lang="php">
use Filament\Tables\Columns\TextColumn;
TextColumn::make('full_name')
->state(fn (User $record): string => "{$record->first_name} {$record->last_name}"),
</code-snippet>
Use ___SINGLE_BACKTICK___SelectFilter___SINGLE_BACKTICK___ for enum or relationship filters, and ___SINGLE_BACKTICK___Filter___SINGLE_BACKTICK___ with a ___SINGLE_BACKTICK___->query()___SINGLE_BACKTICK___ closure for custom logic:
<code-snippet name="Table filters" lang="php">
use Filament\Tables\Filters\Filter;
use Filament\Tables\Filters\SelectFilter;
use Illuminate\Database\Eloquent\Builder;
SelectFilter::make('status')
->options(UserStatus::class),
SelectFilter::make('author')
->relationship('author', 'name'),
Filter::make('verified')
->query(fn (Builder $query) => $query->whereNotNull('email_verified_at')),
</code-snippet>
Actions are buttons that encapsulate optional modal forms and behavior:
<code-snippet name="Action with modal form" lang="php">
use Filament\Actions\Action;
Action::make('updateEmail')
->schema([
TextInput::make('email')
->email()
->required(),
])
->action(fn (array $data, User $record) => $record->update($data)),
</code-snippet>
### Testing
Testing setup (requires ___SINGLE_BACKTICK___pestphp/pest-plugin-livewire___SINGLE_BACKTICK___ in ___SINGLE_BACKTICK___composer.json___SINGLE_BACKTICK___):
- Always call ___SINGLE_BACKTICK___$this->actingAs(User::factory()->create())___SINGLE_BACKTICK___ before testing panel functionality.
- For edit pages, pass ___SINGLE_BACKTICK___['record' => $user->id]___SINGLE_BACKTICK___, use ___SINGLE_BACKTICK___->call('save')___SINGLE_BACKTICK___ (not ___SINGLE_BACKTICK___->call('create')___SINGLE_BACKTICK___), and do not assert ___SINGLE_BACKTICK___->assertRedirect()___SINGLE_BACKTICK___ (edit pages do not redirect after save).
<code-snippet name="Table test" lang="php">
use function Pest\Livewire\livewire;
livewire(ListUsers::class)
->assertCanSeeTableRecords($users)
->searchTable($users->first()->name)
->assertCanSeeTableRecords($users->take(1))
->assertCanNotSeeTableRecords($users->skip(1));
</code-snippet>
<code-snippet name="Create resource test" lang="php">
use function Pest\Laravel\assertDatabaseHas;
livewire(CreateUser::class)
->fillForm([
'name' => 'Test',
'email' => 'test@example.com',
])
->call('create')
->assertNotified()
->assertHasNoFormErrors()
->assertRedirect();
assertDatabaseHas(User::class, [
'name' => 'Test',
'email' => 'test@example.com',
]);
</code-snippet>
<code-snippet name="Edit resource test" lang="php">
livewire(EditUser::class, ['record' => $user->id])
->fillForm(['name' => 'Updated'])
->call('save')
->assertNotified()
->assertHasNoFormErrors();
assertDatabaseHas(User::class, [
'id' => $user->id,
'name' => 'Updated',
]);
</code-snippet>
<code-snippet name="Testing validation" lang="php">
livewire(CreateUser::class)
->fillForm([
'name' => null,
'email' => 'invalid-email',
])
->call('create')
->assertHasFormErrors([
'name' => 'required',
'email' => 'email',
])
->assertNotNotified();
</code-snippet>
Use ___SINGLE_BACKTICK___->callAction(DeleteAction::class)___SINGLE_BACKTICK___ for page actions, or ___SINGLE_BACKTICK___->callAction(TestAction::make('name')->table($record))___SINGLE_BACKTICK___ for table actions:
<code-snippet name="Calling actions" lang="php">
use Filament\Actions\Testing\TestAction;
livewire(ListUsers::class)
->callAction(TestAction::make('promote')->table($user), [
'role' => 'admin',
])
->assertNotified();
</code-snippet>
### Correct Namespaces
- Form fields (___SINGLE_BACKTICK___TextInput___SINGLE_BACKTICK___, ___SINGLE_BACKTICK___Select___SINGLE_BACKTICK___, ___SINGLE_BACKTICK___Repeater___SINGLE_BACKTICK___, etc.): ___SINGLE_BACKTICK___Filament\Forms\Components\___SINGLE_BACKTICK___
- Infolist entries (___SINGLE_BACKTICK___TextEntry___SINGLE_BACKTICK___, ___SINGLE_BACKTICK___IconEntry___SINGLE_BACKTICK___, etc.): ___SINGLE_BACKTICK___Filament\Infolists\Components\___SINGLE_BACKTICK___
- Layout components (___SINGLE_BACKTICK___Grid___SINGLE_BACKTICK___, ___SINGLE_BACKTICK___Section___SINGLE_BACKTICK___, ___SINGLE_BACKTICK___Fieldset___SINGLE_BACKTICK___, ___SINGLE_BACKTICK___Tabs___SINGLE_BACKTICK___, ___SINGLE_BACKTICK___Wizard___SINGLE_BACKTICK___, etc.): ___SINGLE_BACKTICK___Filament\Schemas\Components\___SINGLE_BACKTICK___
- Schema utilities (___SINGLE_BACKTICK___Get___SINGLE_BACKTICK___, ___SINGLE_BACKTICK___Set___SINGLE_BACKTICK___, etc.): ___SINGLE_BACKTICK___Filament\Schemas\Components\Utilities\___SINGLE_BACKTICK___
- Table columns (___SINGLE_BACKTICK___TextColumn___SINGLE_BACKTICK___, ___SINGLE_BACKTICK___IconColumn___SINGLE_BACKTICK___, etc.): ___SINGLE_BACKTICK___Filament\Tables\Columns\___SINGLE_BACKTICK___
- Table filters (___SINGLE_BACKTICK___SelectFilter___SINGLE_BACKTICK___, ___SINGLE_BACKTICK___Filter___SINGLE_BACKTICK___, etc.): ___SINGLE_BACKTICK___Filament\Tables\Filters\___SINGLE_BACKTICK___
- Actions (___SINGLE_BACKTICK___DeleteAction___SINGLE_BACKTICK___, ___SINGLE_BACKTICK___CreateAction___SINGLE_BACKTICK___, etc.): ___SINGLE_BACKTICK___Filament\Actions\___SINGLE_BACKTICK___. Never use ___SINGLE_BACKTICK___Filament\Tables\Actions\___SINGLE_BACKTICK___, ___SINGLE_BACKTICK___Filament\Forms\Actions\___SINGLE_BACKTICK___, or any other sub-namespace for actions.
- Icons: ___SINGLE_BACKTICK___Filament\Support\Icons\Heroicon___SINGLE_BACKTICK___ enum (e.g., ___SINGLE_BACKTICK___Heroicon::PencilSquare___SINGLE_BACKTICK___)
### Common Mistakes
- **Never assume public file visibility.** File visibility is ___SINGLE_BACKTICK___private___SINGLE_BACKTICK___ by default. Always use ___SINGLE_BACKTICK___->visibility('public')___SINGLE_BACKTICK___ when public access is needed.
- **Never assume full-width layout.** ___SINGLE_BACKTICK___Grid___SINGLE_BACKTICK___, ___SINGLE_BACKTICK___Section___SINGLE_BACKTICK___, ___SINGLE_BACKTICK___Fieldset___SINGLE_BACKTICK___, and ___SINGLE_BACKTICK___Repeater___SINGLE_BACKTICK___ do not span all columns by default.
- **Use ___SINGLE_BACKTICK___Select::make('author_id')->relationship('author', 'name')___SINGLE_BACKTICK___ for BelongsTo fields.** ___SINGLE_BACKTICK___BelongsToSelect___SINGLE_BACKTICK___ does not exist in v4.
- **___SINGLE_BACKTICK___Repeater___SINGLE_BACKTICK___ uses ___SINGLE_BACKTICK___->schema()___SINGLE_BACKTICK___, not ___SINGLE_BACKTICK___->fields()___SINGLE_BACKTICK___.**
- **Never add ___SINGLE_BACKTICK___->dehydrated(false)___SINGLE_BACKTICK___ to fields that need to be saved.** It strips the value from form state before ___SINGLE_BACKTICK___->action()___SINGLE_BACKTICK___ or the save handler runs. Only use it for helper/UI-only fields.
- **Use correct property types when overriding ___SINGLE_BACKTICK___Page___SINGLE_BACKTICK___, ___SINGLE_BACKTICK___Resource___SINGLE_BACKTICK___, and ___SINGLE_BACKTICK___Widget___SINGLE_BACKTICK___ properties.** These properties have union types or changed modifiers that must be preserved:
- ___SINGLE_BACKTICK___$navigationIcon___SINGLE_BACKTICK___: ___SINGLE_BACKTICK___protected static string | BackedEnum | null___SINGLE_BACKTICK___ (not ___SINGLE_BACKTICK___?string___SINGLE_BACKTICK___)
- ___SINGLE_BACKTICK___$navigationGroup___SINGLE_BACKTICK___: ___SINGLE_BACKTICK___protected static string | UnitEnum | null___SINGLE_BACKTICK___ (not ___SINGLE_BACKTICK___?string___SINGLE_BACKTICK___)
- ___SINGLE_BACKTICK___$view___SINGLE_BACKTICK___: ___SINGLE_BACKTICK___protected string___SINGLE_BACKTICK___ (not ___SINGLE_BACKTICK___protected static string___SINGLE_BACKTICK___) on ___SINGLE_BACKTICK___Page___SINGLE_BACKTICK___ and ___SINGLE_BACKTICK___Widget___SINGLE_BACKTICK___ classes
<?php /**PATH /Users/mag/Sites/WMS/Core/storage/framework/views/db800410232a09db40ffd9b85b3884fa.blade.php ENDPATH**/ ?>
@@ -1,18 +0,0 @@
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>
<?php echo e(filled($title ?? null) ? $title.' - '.config('app.name', 'Laravel') : config('app.name', 'Laravel')); ?>
</title>
<link rel="icon" href="/favicon.ico" sizes="any">
<link rel="icon" href="/favicon.svg" type="image/svg+xml">
<link rel="apple-touch-icon" href="/apple-touch-icon.png">
<?php echo app('Illuminate\Foundation\Vite')->fonts(); ?>
<?php echo app('Illuminate\Foundation\Vite')(['resources/css/app.css', 'resources/js/app.js']); ?>
<?php echo app('flux')->fluxAppearance(); ?>
<?php /**PATH /Users/mag/Sites/WMS/Core/resources/views/partials/head.blade.php ENDPATH**/ ?>
@@ -1,38 +0,0 @@
# Laravel Boost
<?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if BLOCK]><![endif]--><?php endif; ?><?php if($assist->hasMcpEnabled()): ?>
## Tools
- Laravel Boost is an MCP server with tools designed specifically for this application. Prefer Boost tools over manual alternatives like shell commands or file reads.
- Use ___SINGLE_BACKTICK___database-query___SINGLE_BACKTICK___ to run read-only queries against the database instead of writing raw SQL in tinker.
- Use ___SINGLE_BACKTICK___database-schema___SINGLE_BACKTICK___ to inspect table structure before writing migrations or models.
- Use ___SINGLE_BACKTICK___get-absolute-url___SINGLE_BACKTICK___ to resolve the correct scheme, domain, and port for project URLs. Always use this before sharing a URL with the user.
<?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if BLOCK]><![endif]--><?php endif; ?><?php if(config('boost.browser_logs', false) !== false || config('boost.browser_logs_watcher', true) !== false): ?>
- Use ___SINGLE_BACKTICK___browser-logs___SINGLE_BACKTICK___ to read browser logs, errors, and exceptions. Only recent logs are useful, ignore old entries.
<?php endif; ?><?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if ENDBLOCK]><![endif]--><?php endif; ?>
## Searching Documentation (IMPORTANT)
- Always use ___SINGLE_BACKTICK___search-docs___SINGLE_BACKTICK___ before making code changes. Do not skip this step. It returns version-specific docs based on installed packages automatically.
- Pass a ___SINGLE_BACKTICK___packages___SINGLE_BACKTICK___ array to scope results when you know which packages are relevant.
- Use multiple broad, topic-based queries: ___SINGLE_BACKTICK___['rate limiting', 'routing rate limiting', 'routing']___SINGLE_BACKTICK___. Expect the most relevant results first.
- Do not add package names to queries because package info is already shared. Use ___SINGLE_BACKTICK___test resource table___SINGLE_BACKTICK___, not ___SINGLE_BACKTICK___filament 4 test resource table___SINGLE_BACKTICK___.
### Search Syntax
1. Use words for auto-stemmed AND logic: ___SINGLE_BACKTICK___rate limit___SINGLE_BACKTICK___ matches both "rate" AND "limit".
2. Use ___SINGLE_BACKTICK___"quoted phrases"___SINGLE_BACKTICK___ for exact position matching: ___SINGLE_BACKTICK___"infinite scroll"___SINGLE_BACKTICK___ requires adjacent words in order.
3. Combine words and phrases for mixed queries: ___SINGLE_BACKTICK___middleware "rate limit"___SINGLE_BACKTICK___.
4. Use multiple queries for OR logic: ___SINGLE_BACKTICK___queries=["authentication", "middleware"]___SINGLE_BACKTICK___.
<?php endif; ?><?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if ENDBLOCK]><![endif]--><?php endif; ?>
## Artisan
- Run Artisan commands directly via the command line (e.g., ___SINGLE_BACKTICK___<?php echo e($assist->artisanCommand('route:list')); ?>___SINGLE_BACKTICK___). Use ___SINGLE_BACKTICK___<?php echo e($assist->artisanCommand('list')); ?>___SINGLE_BACKTICK___ to discover available commands and ___SINGLE_BACKTICK___<?php echo e($assist->artisanCommand('[command] --help')); ?>___SINGLE_BACKTICK___ to check parameters.
- Inspect routes with ___SINGLE_BACKTICK___<?php echo e($assist->artisanCommand('route:list')); ?>___SINGLE_BACKTICK___. Filter with: ___SINGLE_BACKTICK___--method=GET___SINGLE_BACKTICK___, ___SINGLE_BACKTICK___--name=users___SINGLE_BACKTICK___, ___SINGLE_BACKTICK___--path=api___SINGLE_BACKTICK___, ___SINGLE_BACKTICK___--except-vendor___SINGLE_BACKTICK___, ___SINGLE_BACKTICK___--only-vendor___SINGLE_BACKTICK___.
- Read configuration values using dot notation: ___SINGLE_BACKTICK___<?php echo e($assist->artisanCommand('config:show app.name')); ?>___SINGLE_BACKTICK___, ___SINGLE_BACKTICK___<?php echo e($assist->artisanCommand('config:show database.default')); ?>___SINGLE_BACKTICK___. Or read config files directly from the ___SINGLE_BACKTICK___config/___SINGLE_BACKTICK___ directory.
## Tinker
- Execute PHP in app context for debugging and testing code. Do not create models without user approval, prefer tests with factories instead. Prefer existing Artisan commands over custom tinker code.
<?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if BLOCK]><![endif]--><?php endif; ?><?php if($assist->hasMcpEnabled() && config('boost.tinker_tool_enabled', false)): ?>
- Use the ___SINGLE_BACKTICK___tinker___SINGLE_BACKTICK___ MCP tool to execute PHP code instead of the CLI. It avoids shell escaping issues and runs the snippet in the Laravel application context.
<?php else: ?>
- Always use single quotes to prevent shell expansion: ___SINGLE_BACKTICK___<?php echo e($assist->artisanCommand("tinker --execute 'Your::code();'")); ?>___SINGLE_BACKTICK___
- Double quotes for PHP strings inside: ___SINGLE_BACKTICK___<?php echo e($assist->artisanCommand("tinker --execute 'User::where(\"active\", true)->count();'")); ?>___SINGLE_BACKTICK___
<?php endif; ?><?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if ENDBLOCK]><![endif]--><?php endif; ?>
<?php /**PATH /Users/mag/Sites/WMS/Core/storage/framework/views/e3b9888097c7ff3c001c6cdebb490dc0.blade.php ENDPATH**/ ?>
@@ -1,86 +0,0 @@
<?php
if (!function_exists('_0ce2b11ed180c4dc0167f11a527ecb34')):
function _0ce2b11ed180c4dc0167f11a527ecb34($__blaze, $__data = [], $__slots = [], $__bound = [], $__keys = [], $__this = null) {
$__env = $__blaze->env;
$__slots['slot'] ??= new \Illuminate\View\ComponentSlot('');
if (($__data['attributes'] ?? null) instanceof \Illuminate\View\ComponentAttributeBag) { $__data = $__data + $__data['attributes']->all(); unset($__data['attributes']); }
extract($__slots, EXTR_SKIP); unset($__slots);
extract($__data, EXTR_SKIP);
$attributes = \Livewire\Blaze\Runtime\BlazeAttributeBag::make($__data, $__bound, $__keys);
unset($__data, $__bound, $__keys);
ob_start();
?>
<?php
extract(Flux::forwardedAttributes($attributes, [
'type',
'current',
'href',
'as',
]));
?>
<?php
$__defaults = [
'type' => 'button',
'current' => null,
'href' => null,
'as' => null,
];
$type ??= $attributes['type'] ?? $__defaults['type']; unset($attributes['type']);
$current ??= $attributes['current'] ?? $__defaults['current']; unset($attributes['current']);
$href ??= $attributes['href'] ?? $__defaults['href']; unset($attributes['href']);
$as ??= $attributes['as'] ?? $__defaults['as']; unset($attributes['as']);
unset($__defaults);
?>
<?php
if ($as !== 'div' || $href) {
if ($current !== null) {
// If the user manually specified :current="true/false", we need to stop Livewire from managing
// the data-current attribute as it would be automatically added/removed when using wire:navigate...
$attributes = $attributes->merge(['data-current' => $current, 'wire:current.ignore' => true]);
} else {
$hrefForCurrentDetection = str($href)->startsWith(trim(config('app.url')))
? (string) str($href)->after(trim(config('app.url'), '/'))
: $href;
if ($hrefForCurrentDetection === '') $hrefForCurrentDetection = '/';
$requestIs = function ($pattern) {
// Support current route detection during Livewire update requests as well...
return app('livewire')?->isLivewireRequest()
? str()->is($pattern, app('livewire')->originalPath())
: request()->is($pattern);
};
$current = $hrefForCurrentDetection
? $requestIs($hrefForCurrentDetection === '/' ? '/' : trim($hrefForCurrentDetection, '/'))
: false;
$attributes = $attributes->merge(['data-current' => $current]);
}
}
?>
<?php if ($as === 'div' && ! $href): ?>
<div <?php echo e($attributes); ?>>
<?php echo e($slot); ?>
</div>
<?php elseif ($as === 'a' || $href): ?>
<a href="<?php echo e($href); ?>" <?php echo e($attributes); ?>>
<?php echo e($slot); ?>
</a>
<?php else: ?>
<button <?php echo e($attributes->merge(['type' => $type])); ?>>
<?php echo e($slot); ?>
</button>
<?php endif; ?>
<?php
echo ltrim(ob_get_clean());
} endif; ?><?php /**PATH /Users/mag/Sites/WMS/Core/vendor/livewire/flux/src/../stubs/resources/views/flux/button-or-link.blade.php ENDPATH**/ ?>
@@ -1,26 +0,0 @@
<?php
/** @var \Laravel\Boost\Install\GuidelineAssist $assist */
?>
# Do Things the Laravel Way
- Use ___SINGLE_BACKTICK___<?php echo e($assist->artisanCommand('make:')); ?>___SINGLE_BACKTICK___ commands to create new files (i.e. migrations, controllers, models, etc.). You can list available Artisan commands using ___SINGLE_BACKTICK___<?php echo e($assist->artisanCommand('list')); ?>___SINGLE_BACKTICK___ and check their parameters with ___SINGLE_BACKTICK___<?php echo e($assist->artisanCommand('[command] --help')); ?>___SINGLE_BACKTICK___.
- If you're creating a generic PHP class, use ___SINGLE_BACKTICK___<?php echo e($assist->artisanCommand('make:class')); ?>___SINGLE_BACKTICK___.
- Pass ___SINGLE_BACKTICK___--no-interaction___SINGLE_BACKTICK___ to all Artisan commands to ensure they work without user input. You should also pass the correct ___SINGLE_BACKTICK___--options___SINGLE_BACKTICK___ to ensure correct behavior.
### Model Creation
- When creating new models, create useful factories and seeders for them too. Ask the user if they need any other things, using ___SINGLE_BACKTICK___<?php echo e($assist->artisanCommand('make:model --help')); ?>___SINGLE_BACKTICK___ to check the available options.
## APIs & Eloquent Resources
- For APIs, default to using Eloquent API Resources and API versioning unless existing API routes do not, then you should follow existing application convention.
## URL Generation
- When generating links to other pages, prefer named routes and the ___SINGLE_BACKTICK___route()___SINGLE_BACKTICK___ function.
## Testing
- When creating models for tests, use the factories for the models. Check if the factory has custom states that can be used before manually setting up the model.
- Faker: Use methods such as ___SINGLE_BACKTICK___$this->faker->word()___SINGLE_BACKTICK___ or ___SINGLE_BACKTICK___fake()->randomDigit()___SINGLE_BACKTICK___. Follow existing conventions whether to use ___SINGLE_BACKTICK___$this->faker___SINGLE_BACKTICK___ or ___SINGLE_BACKTICK___fake()___SINGLE_BACKTICK___.
- When creating tests, make use of ___SINGLE_BACKTICK___<?php echo e($assist->artisanCommand('make:test [options] {name}')); ?>___SINGLE_BACKTICK___ to create a feature test, and pass ___SINGLE_BACKTICK___--unit___SINGLE_BACKTICK___ to create a unit test. Most tests should be feature tests.
## Vite Error
- If you receive an "Illuminate\Foundation\ViteException: Unable to locate file in Vite manifest" error, you can run ___SINGLE_BACKTICK___<?php echo e($assist->nodePackageManagerCommand('run build')); ?>___SINGLE_BACKTICK___ or ask the user to run ___SINGLE_BACKTICK___<?php echo e($assist->nodePackageManagerCommand('run dev')); ?>___SINGLE_BACKTICK___ or ___SINGLE_BACKTICK___<?php echo e($assist->composerCommand('run dev')); ?>___SINGLE_BACKTICK___.
<?php /**PATH /Users/mag/Sites/WMS/Core/storage/framework/views/d1640c796ea7d658f5d537a146d3b49c.blade.php ENDPATH**/ ?>
@@ -1,245 +0,0 @@
<?php
if (!function_exists('_110c1c2a55a80ff8b2b4fbed62b1a7d3')):
function _110c1c2a55a80ff8b2b4fbed62b1a7d3($__blaze, $__data = [], $__slots = [], $__bound = [], $__keys = [], $__this = null) {
$__env = $__blaze->env;
$__slots['slot'] ??= new \Illuminate\View\ComponentSlot('');
if (($__data['attributes'] ?? null) instanceof \Illuminate\View\ComponentAttributeBag) { $__data = $__data + $__data['attributes']->all(); unset($__data['attributes']); }
extract($__slots, EXTR_SKIP); unset($__slots);
extract($__data, EXTR_SKIP);
$attributes = \Livewire\Blaze\Runtime\BlazeAttributeBag::make($__data, $__bound, $__keys);
unset($__data, $__bound, $__keys);
ob_start();
?>
<?php $iconVariant ??= $attributes->pluck('icon:variant'); ?>
<?php
$__defaults = [
'iconVariant' => 'solid',
'initials' => null,
'tooltip' => null,
'circle' => null,
'color' => null,
'badge' => null,
'name' => null,
'icon' => null,
'size' => 'md',
'src' => null,
'href' => null,
'alt' => null,
'as' => 'div',
];
$iconVariant ??= $attributes['icon-variant'] ?? $attributes['iconVariant'] ?? $__defaults['iconVariant']; unset($attributes['iconVariant'], $attributes['icon-variant']);
$initials ??= $attributes['initials'] ?? $__defaults['initials']; unset($attributes['initials']);
$tooltip ??= $attributes['tooltip'] ?? $__defaults['tooltip']; unset($attributes['tooltip']);
$circle ??= $attributes['circle'] ?? $__defaults['circle']; unset($attributes['circle']);
$color ??= $attributes['color'] ?? $__defaults['color']; unset($attributes['color']);
$badge ??= $attributes['badge'] ?? $__defaults['badge']; unset($attributes['badge']);
$name ??= $attributes['name'] ?? $__defaults['name']; unset($attributes['name']);
$icon ??= $attributes['icon'] ?? $__defaults['icon']; unset($attributes['icon']);
$size ??= $attributes['size'] ?? $__defaults['size']; unset($attributes['size']);
$src ??= $attributes['src'] ?? $__defaults['src']; unset($attributes['src']);
$href ??= $attributes['href'] ?? $__defaults['href']; unset($attributes['href']);
$alt ??= $attributes['alt'] ?? $__defaults['alt']; unset($attributes['alt']);
$as ??= $attributes['as'] ?? $__defaults['as']; unset($attributes['as']);
unset($__defaults);
?>
<?php
if ($name && ! $initials) {
$parts = explode(' ', trim($name));
if ($attributes->pluck('initials:single')) {
$initials = strtoupper(mb_substr($parts[0], 0, 1));
} else {
// Remove empty strings from the array...
$parts = collect($parts)->filter()->values()->all();
if (count($parts) > 1) {
$initials = strtoupper(mb_substr($parts[0], 0, 1) . mb_substr($parts[1], 0, 1));
} else if (count($parts) === 1) {
$initials = strtoupper(mb_substr($parts[0], 0, 1)) . strtolower(mb_substr($parts[0], 1, 1));
}
}
}
if ($name && $tooltip === true) {
$tooltip = $name;
}
$hasTextContent = $icon ?? $initials ?? $slot->isNotEmpty();
// If there's no text content, we'll fallback to using the user icon otherwise there will be an empty white square...
if (! $hasTextContent) {
$icon = 'user';
$hasTextContent = true;
}
// Be careful not to change the order of these colors.
// They're used in the hash function below and changing them would change actual user avatar colors that they might have grown to identify with.
$colors = ['red', 'orange', 'amber', 'yellow', 'lime', 'green', 'emerald', 'teal', 'cyan', 'sky', 'blue', 'indigo', 'violet', 'purple', 'fuchsia', 'pink', 'rose'];
if ($hasTextContent && $color === 'auto') {
$colorSeed = $attributes->pluck('color:seed') ?? $name ?? $icon ?? $initials ?? $slot;
$hash = crc32((string) $colorSeed);
$color = $colors[$hash % count($colors)];
}
$classes = Flux::classes()
->add(match($size) {
'xl' => '[:where(&)]:size-16 [:where(&)]:text-base',
'lg' => '[:where(&)]:size-12 [:where(&)]:text-base',
default => '[:where(&)]:size-10 [:where(&)]:text-sm',
'sm' => '[:where(&)]:size-8 [:where(&)]:text-sm',
'xs' => '[:where(&)]:size-6 [:where(&)]:text-xs',
})
->add($circle ? '[--avatar-radius:calc(infinity*1px)]' : match($size) {
'xl' => '[--avatar-radius:var(--radius-xl)]',
'lg' => '[--avatar-radius:var(--radius-lg)]',
default => '[--avatar-radius:var(--radius-lg)]',
'sm' => '[--avatar-radius:var(--radius-md)]',
'xs' => '[--avatar-radius:var(--radius-sm)]',
})
->add('relative flex-none isolate flex items-center justify-center')
->add('[:where(&)]:font-medium')
->add('rounded-[var(--avatar-radius)]')
->add($hasTextContent ? '[:where(&)]:bg-zinc-200 [:where(&)]:dark:bg-zinc-600 [:where(&)]:text-zinc-800 [:where(&)]:dark:text-white' : '')
->add(match($color) {
'red' => 'bg-red-200 text-red-800',
'orange' => 'bg-orange-200 text-orange-800',
'amber' => 'bg-amber-200 text-amber-800',
'yellow' => 'bg-yellow-200 text-yellow-800',
'lime' => 'bg-lime-200 text-lime-800',
'green' => 'bg-green-200 text-green-800',
'emerald' => 'bg-emerald-200 text-emerald-800',
'teal' => 'bg-teal-200 text-teal-800',
'cyan' => 'bg-cyan-200 text-cyan-800',
'sky' => 'bg-sky-200 text-sky-800',
'blue' => 'bg-blue-200 text-blue-800',
'indigo' => 'bg-indigo-200 text-indigo-800',
'violet' => 'bg-violet-200 text-violet-800',
'purple' => 'bg-purple-200 text-purple-800',
'fuchsia' => 'bg-fuchsia-200 text-fuchsia-800',
'pink' => 'bg-pink-200 text-pink-800',
'rose' => 'bg-rose-200 text-rose-800',
default => '',
})
->add(true ? [
'after:absolute after:inset-0 after:inset-ring-[1px] after:inset-ring-black/7 dark:after:inset-ring-white/10',
$circle ? 'after:rounded-full' : match($size) {
'xl' => 'after:rounded-xl',
'lg' => 'after:rounded-lg',
default => 'after:rounded-lg',
'sm' => 'after:rounded-md',
'xs' => 'after:rounded-sm',
},
] : []);
$iconClasses = Flux::classes()
->add('opacity-75')
->add(match($size) {
'lg' => 'size-8',
default => 'size-6',
'sm' => 'size-5',
'xs' => 'size-4',
});
$badgeColor = $attributes->pluck('badge:color') ?: (is_object($badge) ? $badge?->attributes?->pluck('color') : null);
$badgeCircle = $attributes->pluck('badge:circle') ?: (is_object($badge) ? $badge?->attributes?->pluck('circle') : null);
$badgePosition = $attributes->pluck('badge:position') ?: (is_object($badge) ? $badge?->attributes?->pluck('position') : null);
$badgeVariant = $attributes->pluck('badge:variant') ?: (is_object($badge) ? $badge?->attributes?->pluck('variant') : null);
$badgeClasses = Flux::classes()
->add('absolute ring-[2px] ring-white dark:ring-zinc-900 z-10')
->add(match($size) {
default => 'h-3 min-w-3',
'sm' => 'h-2 min-w-2',
'xs' => 'h-2 min-w-2',
})
->add('flex items-center justify-center tabular-nums overflow-hidden')
->add('text-[.625rem] text-zinc-800 dark:text-white font-medium')
->add($badgeCircle ? 'rounded-full' : 'rounded-[3px]')
->add($badgeVariant === 'outline' ? [
'after:absolute after:inset-[3px] after:bg-white dark:after:bg-zinc-900',
$badgeCircle ? 'after:rounded-full' : 'after:rounded-[1px]',
] : [])
->add(match($badgePosition) {
'top left' => 'top-0 left-0',
'top right' => 'top-0 right-0',
'bottom left' => 'bottom-0 left-0',
'bottom right' => 'bottom-0 right-0',
default => 'bottom-0 right-0',
})
->add(match($badgeColor) {
'red' => 'bg-red-500 dark:bg-red-400',
'orange' => 'bg-orange-500 dark:bg-orange-400',
'amber' => 'bg-amber-500 dark:bg-amber-400',
'yellow' => 'bg-yellow-500 dark:bg-yellow-400',
'lime' => 'bg-lime-500 dark:bg-lime-400',
'green' => 'bg-green-500 dark:bg-green-400',
'emerald' => 'bg-emerald-500 dark:bg-emerald-400',
'teal' => 'bg-teal-500 dark:bg-teal-400',
'cyan' => 'bg-cyan-500 dark:bg-cyan-400',
'sky' => 'bg-sky-500 dark:bg-sky-400',
'blue' => 'bg-blue-500 dark:bg-blue-400',
'indigo' => 'bg-indigo-500 dark:bg-indigo-400',
'violet' => 'bg-violet-500 dark:bg-violet-400',
'purple' => 'bg-purple-500 dark:bg-purple-400',
'fuchsia' => 'bg-fuchsia-500 dark:bg-fuchsia-400',
'pink' => 'bg-pink-500 dark:bg-pink-400',
'rose' => 'bg-rose-500 dark:bg-rose-400',
'zinc' => 'bg-zinc-400 dark:bg-zinc-300',
'gray' => 'bg-zinc-400 dark:bg-zinc-300',
default => 'bg-white dark:bg-zinc-900',
})
;
$label = $alt ?? $name;
?>
<?php $__blaze->ensureRequired('/Users/mag/Sites/WMS/Core/vendor/livewire/flux/src/../stubs/resources/views/flux/with-tooltip.blade.php', $__blaze->compiledPath.'/3e67020b08ceeca960cbb88b2dabc310.php'); ?>
<?php if (isset($__slots3e67020b08ceeca960cbb88b2dabc310)) { $__slotsStack3e67020b08ceeca960cbb88b2dabc310[] = $__slots3e67020b08ceeca960cbb88b2dabc310; } ?>
<?php if (isset($__attrs3e67020b08ceeca960cbb88b2dabc310)) { $__attrsStack3e67020b08ceeca960cbb88b2dabc310[] = $__attrs3e67020b08ceeca960cbb88b2dabc310; } ?>
<?php $__attrs3e67020b08ceeca960cbb88b2dabc310 = ['tooltip' => $tooltip,'attributes' => $attributes]; ?>
<?php $__slots3e67020b08ceeca960cbb88b2dabc310 = []; ?>
<?php $__blaze->pushData($__attrs3e67020b08ceeca960cbb88b2dabc310); ?>
<?php ob_start(); ?>
<?php $__blaze->ensureRequired('/Users/mag/Sites/WMS/Core/vendor/livewire/flux/src/../stubs/resources/views/flux/button-or-link.blade.php', $__blaze->compiledPath.'/0ce2b11ed180c4dc0167f11a527ecb34.php'); ?>
<?php if (isset($__slots0ce2b11ed180c4dc0167f11a527ecb34)) { $__slotsStack0ce2b11ed180c4dc0167f11a527ecb34[] = $__slots0ce2b11ed180c4dc0167f11a527ecb34; } ?>
<?php if (isset($__attrs0ce2b11ed180c4dc0167f11a527ecb34)) { $__attrsStack0ce2b11ed180c4dc0167f11a527ecb34[] = $__attrs0ce2b11ed180c4dc0167f11a527ecb34; } ?>
<?php $__attrs0ce2b11ed180c4dc0167f11a527ecb34 = ['attributes' => $attributes->class($classes)->merge($circle ? ['data-circle' => 'true'] : []),'as' => $as,'href' => $href,'dataFluxAvatar' => true,'dataSlot' => 'avatar','dataSize' => e($size)]; ?>
<?php $__slots0ce2b11ed180c4dc0167f11a527ecb34 = []; ?>
<?php $__blaze->pushData($__attrs0ce2b11ed180c4dc0167f11a527ecb34); ?>
<?php ob_start(); ?>
<?php if ($src): ?>
<img src="<?php echo e($src); ?>" alt="<?php echo e($alt ?? $name); ?>" class="rounded-[var(--avatar-radius)] size-full object-cover">
<?php elseif ($icon): ?>
<?php $blaze_memoized_key = \Livewire\Blaze\Memoizer\Memo::key("flux::icon", ['name' => $icon, 'variant' => $iconVariant, 'class' => $iconClasses]); ?><?php if ($blaze_memoized_key !== null && \Livewire\Blaze\Memoizer\Memo::has($blaze_memoized_key)) : ?><?php echo \Livewire\Blaze\Memoizer\Memo::get($blaze_memoized_key); ?><?php else : ?><?php ob_start(); ?><?php $__blaze->ensureRequired('/Users/mag/Sites/WMS/Core/vendor/livewire/flux/src/../stubs/resources/views/flux/icon/index.blade.php', $__blaze->compiledPath.'/50d7e9e02b0a09ef19c84ebdf6a22b69.php'); ?>
<?php $__blaze->pushData(['name' => $icon,'variant' => $iconVariant,'class' => $iconClasses]); ?>
<?php _50d7e9e02b0a09ef19c84ebdf6a22b69($__blaze, ['name' => $icon,'variant' => $iconVariant,'class' => $iconClasses], [], ['name', 'variant', 'class'], [], $__this ?? (isset($this) ? $this : null)); ?>
<?php $__blaze->popData(); ?><?php $blaze_memoized_html = ob_get_clean(); ?><?php if ($blaze_memoized_key !== null) { \Livewire\Blaze\Memoizer\Memo::put($blaze_memoized_key, $blaze_memoized_html); } ?><?php echo $blaze_memoized_html; ?><?php endif; ?>
<?php elseif ($hasTextContent): ?>
<span class="select-none"><?php echo e($initials ?? $slot); ?></span>
<?php endif; ?>
<?php if ($badge instanceof \Illuminate\View\ComponentSlot): ?>
<div <?php echo e($badge->attributes->class($badgeClasses)); ?> aria-hidden="true"><?php echo e($badge); ?></div>
<?php elseif ($badge): ?>
<div class="<?php echo e($badgeClasses); ?>" aria-hidden="true"><?php echo e(is_string($badge) ? $badge : ''); ?></div>
<?php endif; ?>
<?php $__slots0ce2b11ed180c4dc0167f11a527ecb34['slot'] = new \Illuminate\View\ComponentSlot(trim(ob_get_clean()), []); ?>
<?php $__blaze->pushSlots($__slots0ce2b11ed180c4dc0167f11a527ecb34); ?>
<?php _0ce2b11ed180c4dc0167f11a527ecb34($__blaze, $__attrs0ce2b11ed180c4dc0167f11a527ecb34, $__slots0ce2b11ed180c4dc0167f11a527ecb34, ['attributes', 'as', 'href', 'dataFluxAvatar'], ['dataFluxAvatar' => 'data-flux-avatar', 'dataSlot' => 'data-slot', 'dataSize' => 'data-size'], $__this ?? (isset($this) ? $this : null)); ?>
<?php if (! empty($__slotsStack0ce2b11ed180c4dc0167f11a527ecb34)) { $__slots0ce2b11ed180c4dc0167f11a527ecb34 = array_pop($__slotsStack0ce2b11ed180c4dc0167f11a527ecb34); } ?>
<?php if (! empty($__attrsStack0ce2b11ed180c4dc0167f11a527ecb34)) { $__attrs0ce2b11ed180c4dc0167f11a527ecb34 = array_pop($__attrsStack0ce2b11ed180c4dc0167f11a527ecb34); } ?>
<?php $__blaze->popData(); ?>
<?php $__slots3e67020b08ceeca960cbb88b2dabc310['slot'] = new \Illuminate\View\ComponentSlot(trim(ob_get_clean()), []); ?>
<?php $__blaze->pushSlots($__slots3e67020b08ceeca960cbb88b2dabc310); ?>
<?php _3e67020b08ceeca960cbb88b2dabc310($__blaze, $__attrs3e67020b08ceeca960cbb88b2dabc310, $__slots3e67020b08ceeca960cbb88b2dabc310, ['tooltip', 'attributes'], [], $__this ?? (isset($this) ? $this : null)); ?>
<?php if (! empty($__slotsStack3e67020b08ceeca960cbb88b2dabc310)) { $__slots3e67020b08ceeca960cbb88b2dabc310 = array_pop($__slotsStack3e67020b08ceeca960cbb88b2dabc310); } ?>
<?php if (! empty($__attrsStack3e67020b08ceeca960cbb88b2dabc310)) { $__attrs3e67020b08ceeca960cbb88b2dabc310 = array_pop($__attrsStack3e67020b08ceeca960cbb88b2dabc310); } ?>
<?php $__blaze->popData(); ?>
<?php
echo ltrim(ob_get_clean());
} endif; ?><?php /**PATH /Users/mag/Sites/WMS/Core/vendor/livewire/flux/src/../stubs/resources/views/flux/avatar/index.blade.php ENDPATH**/ ?>
@@ -1,148 +0,0 @@
---
name: livewire-development
description: "Use for any task or question involving Livewire. Activate if user mentions Livewire, wire: directives, or Livewire-specific concepts like wire:model, wire:click, wire:sort, or islands, invoke this skill. Covers building new components, debugging reactivity issues, real-time form validation, drag-and-drop, loading states, migrating from Livewire 3 to 4, converting component formats (SFC/MFC/class-based), and performance optimization. Do not use for non-Livewire reactive UI (React, Vue, Alpine-only, Inertia.js) or standard Laravel forms without Livewire."
license: MIT
metadata:
author: laravel
---
<?php
/** @var \Laravel\Boost\Install\GuidelineAssist $assist */
?>
# Livewire Development
## Documentation
Use ___SINGLE_BACKTICK___search-docs___SINGLE_BACKTICK___ for detailed Livewire 4 patterns and documentation.
## Basic Usage
### Creating Components
___SINGLE_BACKTICK______SINGLE_BACKTICK______SINGLE_BACKTICK___bash
# Single-file component (SFC - default in v4)
# Creates: resources/views/components/⚡create-post.blade.php
<?php echo e($assist->artisanCommand('make:livewire create-post')); ?>
# Page component (SFC - Full Page in v4)
# Creates: resources/views/pages/⚡create-post.blade.php
<?php echo e($assist->artisanCommand('make:livewire pages::create-post')); ?>
# Multi-file component (MFC)
# Creates: resources/views/components/⚡create-post/create-post.php
# resources/views/components/⚡create-post/create-post.blade.php
<?php echo e($assist->artisanCommand('make:livewire create-post --mfc')); ?>
# Class-based component (v3 style)
# Creates: app/Livewire/CreatePost.php AND resources/views/livewire/create-post.blade.php
<?php echo e($assist->artisanCommand('make:livewire create-post --class')); ?>
# With namespace
<?php echo e($assist->artisanCommand('make:livewire Posts/CreatePost')); ?>
___SINGLE_BACKTICK______SINGLE_BACKTICK______SINGLE_BACKTICK___
### Converting Between Formats
Use ___SINGLE_BACKTICK___<?php echo e($assist->artisanCommand('livewire:convert create-post')); ?>___SINGLE_BACKTICK___ to convert between single-file, multi-file, and class-based formats.
### Choosing a Component Format
> **Always follow the project's existing conventions first.** Before creating any component, inspect the project's existing Livewire components to determine the established format (SFC, MFC, or class-based) and directory structure. Check ___SINGLE_BACKTICK___<?php echo e($assist->appPath('Livewire/')); ?>___SINGLE_BACKTICK___, ___SINGLE_BACKTICK___resources/views/components/___SINGLE_BACKTICK___, and ___SINGLE_BACKTICK___resources/views/livewire/___SINGLE_BACKTICK___ for existing components. If the project already uses a consistent format, **use that same format** — even if it differs from the Livewire v4 defaults below. Only fall back to the v4 defaults (SFC in ___SINGLE_BACKTICK___resources/views/components/___SINGLE_BACKTICK___) when no existing convention is established.
Also check ___SINGLE_BACKTICK___config/livewire.php___SINGLE_BACKTICK___ for ___SINGLE_BACKTICK___make_command.type___SINGLE_BACKTICK___, ___SINGLE_BACKTICK___make_command.emoji___SINGLE_BACKTICK___, ___SINGLE_BACKTICK___component_locations___SINGLE_BACKTICK___, and ___SINGLE_BACKTICK___component_namespaces___SINGLE_BACKTICK___ overrides, which change the default format and where files are stored.
### Component Format Reference
| Format | Flag | Class Path | View Path |
|--------|------|------------|-----------|
| Single-file (SFC) | default | — | ___SINGLE_BACKTICK___resources/views/components/⚡create-post.blade.php___SINGLE_BACKTICK___ (PHP + Blade in one file) |
| Full Page SFC | ___SINGLE_BACKTICK___pages::name___SINGLE_BACKTICK___ | — | ___SINGLE_BACKTICK___resources/views/pages/⚡create-post.blade.php___SINGLE_BACKTICK___ |
| Multi-file (MFC) | ___SINGLE_BACKTICK___--mfc___SINGLE_BACKTICK___ | ___SINGLE_BACKTICK___resources/views/components/⚡create-post/create-post.php___SINGLE_BACKTICK___ | ___SINGLE_BACKTICK___resources/views/components/⚡create-post/create-post.blade.php___SINGLE_BACKTICK___ |
| Class-based | ___SINGLE_BACKTICK___--class___SINGLE_BACKTICK___ | ___SINGLE_BACKTICK___<?php echo e($assist->appPath('Livewire/CreatePost.php')); ?>___SINGLE_BACKTICK___ | ___SINGLE_BACKTICK___resources/views/livewire/create-post.blade.php___SINGLE_BACKTICK___ |
| View-based | default (Blade-only) | — | ___SINGLE_BACKTICK___resources/views/components/⚡create-post.blade.php___SINGLE_BACKTICK___ (Blade-only with functional state) |
> **Important:** The ⚡ prefix shown above is the **default** behavior in Livewire v4 — it is **configurable**. Check ___SINGLE_BACKTICK___config/livewire.php___SINGLE_BACKTICK___ for the ___SINGLE_BACKTICK___make_command.emoji___SINGLE_BACKTICK___ setting. When ___SINGLE_BACKTICK___true___SINGLE_BACKTICK___ (default), always include the ⚡ prefix in filenames you create. When ___SINGLE_BACKTICK___false___SINGLE_BACKTICK___, omit the ⚡ prefix from all paths above.
Namespaced components map to subdirectories: ___SINGLE_BACKTICK___make:livewire Posts/CreatePost___SINGLE_BACKTICK___ creates ___SINGLE_BACKTICK___resources/views/components/posts/⚡create-post.blade.php___SINGLE_BACKTICK___ (single-file by default). Use ___SINGLE_BACKTICK___make:livewire Posts/CreatePost --mfc___SINGLE_BACKTICK___ for multi-file output at ___SINGLE_BACKTICK___resources/views/components/posts/⚡create-post/create-post.php___SINGLE_BACKTICK___ and ___SINGLE_BACKTICK___resources/views/components/posts/⚡create-post/create-post.blade.php___SINGLE_BACKTICK___.
### Single-File Component Example
___BOOST_SNIPPET_0___
## Livewire 4 Specifics
### Key Changes From Livewire 3
These things changed in Livewire 4, but may not have been updated in this application. Verify this application's setup to ensure you follow existing conventions.
- Use ___SINGLE_BACKTICK___Route::livewire()___SINGLE_BACKTICK___ for full-page components (e.g., ___SINGLE_BACKTICK___Route::livewire('/posts/create', CreatePost::class)___SINGLE_BACKTICK___); config keys renamed: ___SINGLE_BACKTICK___layout___SINGLE_BACKTICK___ → ___SINGLE_BACKTICK___component_layout___SINGLE_BACKTICK___, ___SINGLE_BACKTICK___lazy_placeholder___SINGLE_BACKTICK___ → ___SINGLE_BACKTICK___component_placeholder___SINGLE_BACKTICK___.
- ___SINGLE_BACKTICK___wire:model___SINGLE_BACKTICK___ now ignores child events by default (use ___SINGLE_BACKTICK___wire:model.deep___SINGLE_BACKTICK___ for old behavior); ___SINGLE_BACKTICK___wire:scroll___SINGLE_BACKTICK___ renamed to ___SINGLE_BACKTICK___wire:navigate:scroll___SINGLE_BACKTICK___.
- Component tags must be properly closed; ___SINGLE_BACKTICK___wire:transition___SINGLE_BACKTICK___ now uses View Transitions API (modifiers removed).
- JavaScript: ___SINGLE_BACKTICK___$wire.$js('name', fn)___SINGLE_BACKTICK___ → ___SINGLE_BACKTICK___$wire.$js.name = fn___SINGLE_BACKTICK___; ___SINGLE_BACKTICK___commit___SINGLE_BACKTICK___/___SINGLE_BACKTICK___request___SINGLE_BACKTICK___ hooks → ___SINGLE_BACKTICK___interceptMessage()___SINGLE_BACKTICK___/___SINGLE_BACKTICK___interceptRequest()___SINGLE_BACKTICK___.
### New Features
- Component formats: single-file (SFC), multi-file (MFC), view-based components.
- Islands (___SINGLE_BACKTICK___@island___SINGLE_BACKTICK___) for isolated updates; async actions (___SINGLE_BACKTICK___wire:click.async___SINGLE_BACKTICK___, ___SINGLE_BACKTICK___#[Async]___SINGLE_BACKTICK___) for parallel execution.
- Deferred/bundled loading: ___SINGLE_BACKTICK___defer___SINGLE_BACKTICK___, ___SINGLE_BACKTICK___lazy.bundle___SINGLE_BACKTICK___ for optimized component loading.
| Feature | Usage | Purpose |
|---------|-------|---------|
| Islands | ___SINGLE_BACKTICK___@island(name: 'stats')___SINGLE_BACKTICK___ | Isolated update regions |
| Async | ___SINGLE_BACKTICK___wire:click.async___SINGLE_BACKTICK___ or ___SINGLE_BACKTICK___#[Async]___SINGLE_BACKTICK___ | Non-blocking actions |
| Deferred | ___SINGLE_BACKTICK___defer___SINGLE_BACKTICK___ attribute | Load after page render |
| Bundled | ___SINGLE_BACKTICK___lazy.bundle___SINGLE_BACKTICK___ | Load multiple together |
### New Directives
- ___SINGLE_BACKTICK___wire:sort___SINGLE_BACKTICK___, ___SINGLE_BACKTICK___wire:intersect___SINGLE_BACKTICK___, ___SINGLE_BACKTICK___wire:ref___SINGLE_BACKTICK___, ___SINGLE_BACKTICK___.renderless___SINGLE_BACKTICK___, ___SINGLE_BACKTICK___.preserve-scroll___SINGLE_BACKTICK___ are available for use.
- ___SINGLE_BACKTICK___data-loading___SINGLE_BACKTICK___ attribute automatically added to elements triggering network requests.
| Directive | Purpose |
|-----------|---------|
| ___SINGLE_BACKTICK___wire:sort___SINGLE_BACKTICK___ | Drag-and-drop sorting |
| ___SINGLE_BACKTICK___wire:intersect___SINGLE_BACKTICK___ | Viewport intersection detection |
| ___SINGLE_BACKTICK___wire:ref___SINGLE_BACKTICK___ | Element references for JS |
| ___SINGLE_BACKTICK___.renderless___SINGLE_BACKTICK___ | Component without rendering |
| ___SINGLE_BACKTICK___.preserve-scroll___SINGLE_BACKTICK___ | Preserve scroll position |
## Best Practices
- Always use ___SINGLE_BACKTICK___wire:key___SINGLE_BACKTICK___ in loops
- Use ___SINGLE_BACKTICK___wire:loading___SINGLE_BACKTICK___ for loading states
- Use ___SINGLE_BACKTICK___wire:model.live___SINGLE_BACKTICK___ for instant updates (default is debounced)
- Validate and authorize in actions (treat like HTTP requests)
## Configuration
- ___SINGLE_BACKTICK___smart_wire_keys___SINGLE_BACKTICK___ defaults to ___SINGLE_BACKTICK___true___SINGLE_BACKTICK___; new configs: ___SINGLE_BACKTICK___component_locations___SINGLE_BACKTICK___, ___SINGLE_BACKTICK___component_namespaces___SINGLE_BACKTICK___, ___SINGLE_BACKTICK___make_command___SINGLE_BACKTICK___, ___SINGLE_BACKTICK___csp_safe___SINGLE_BACKTICK___.
## Alpine & JavaScript
- ___SINGLE_BACKTICK___wire:transition___SINGLE_BACKTICK___ uses browser View Transitions API; ___SINGLE_BACKTICK___$errors___SINGLE_BACKTICK___ and ___SINGLE_BACKTICK___$intercept___SINGLE_BACKTICK___ magic properties available.
- Non-blocking ___SINGLE_BACKTICK___wire:poll___SINGLE_BACKTICK___ and parallel ___SINGLE_BACKTICK___wire:model.live___SINGLE_BACKTICK___ updates improve performance.
For interceptors and hooks, see [reference/javascript-hooks.md](reference/javascript-hooks.md).
## Testing
___BOOST_SNIPPET_1___
## Verification
1. Browser console: Check for JS errors
2. Network tab: Verify Livewire requests return 200
3. Ensure ___SINGLE_BACKTICK___wire:key___SINGLE_BACKTICK___ on all ___SINGLE_BACKTICK___@foreach___SINGLE_BACKTICK___ loops
## Common Pitfalls
- Missing ___SINGLE_BACKTICK___wire:key___SINGLE_BACKTICK___ in loops → unexpected re-rendering
- Expecting ___SINGLE_BACKTICK___wire:model___SINGLE_BACKTICK___ real-time → use ___SINGLE_BACKTICK___wire:model.live___SINGLE_BACKTICK___
- Unclosed component tags → syntax errors in v4
- Using deprecated config keys or JS hooks
- Including Alpine.js separately (already bundled in Livewire 4)
<?php /**PATH /Users/mag/Sites/WMS/Core/storage/framework/views/ad752539cb081521e34bf58da7d63fe0.blade.php ENDPATH**/ ?>
@@ -1,78 +0,0 @@
<?php $attributes ??= new \Illuminate\View\ComponentAttributeBag;
$__newAttributes = [];
$__propNames = \Illuminate\View\ComponentAttributeBag::extractPropNames(([
'eyebrow' => 'MPBA WMS',
'title',
'description' => null,
'icon' => null,
'stats' => [],
]));
foreach ($attributes->all() as $__key => $__value) {
if (in_array($__key, $__propNames)) {
$$__key = $$__key ?? $__value;
} else {
$__newAttributes[$__key] = $__value;
}
}
$attributes = new \Illuminate\View\ComponentAttributeBag($__newAttributes);
unset($__propNames);
unset($__newAttributes);
foreach (array_filter(([
'eyebrow' => 'MPBA WMS',
'title',
'description' => null,
'icon' => null,
'stats' => [],
]), 'is_string', ARRAY_FILTER_USE_KEY) as $__key => $__value) {
$$__key = $$__key ?? $__value;
}
$__defined_vars = get_defined_vars();
foreach ($attributes->all() as $__key => $__value) {
if (array_key_exists($__key, $__defined_vars)) unset($$__key);
}
unset($__defined_vars, $__key, $__value); ?>
<section <?php echo e($attributes->merge(['class' => 'wms-page-hero'])); ?>>
<div class="wms-page-hero-copy">
<p class="wms-page-hero-kicker"><?php echo e($eyebrow); ?></p>
<h1 class="wms-page-hero-title"><?php echo e($title); ?></h1>
<?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if BLOCK]><![endif]--><?php endif; ?><?php if($description): ?>
<p class="wms-page-hero-description"><?php echo e($description); ?></p>
<?php endif; ?><?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if ENDBLOCK]><![endif]--><?php endif; ?>
</div>
<div class="wms-page-hero-actions">
<?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if BLOCK]><![endif]--><?php \Livewire\Features\SupportCompiledWireKeys\SupportCompiledWireKeys::openLoop(); ?><?php endif; ?><?php $__currentLoopData = $stats; $__env->addLoop($__currentLoopData); foreach($__currentLoopData as $stat): $__env->incrementLoopIndices(); $loop = $__env->getLastLoop(); ?><?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><?php \Livewire\Features\SupportCompiledWireKeys\SupportCompiledWireKeys::startLoopIteration(); ?><?php endif; ?>
<article class="wms-page-hero-stat">
<span><?php echo e($stat['label'] ?? ''); ?></span>
<strong>
<?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if BLOCK]><![endif]--><?php endif; ?><?php if(! empty($stat['icon'])): ?>
<i class="<?php echo e($stat['icon']); ?>" aria-hidden="true"></i>
<?php endif; ?><?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if ENDBLOCK]><![endif]--><?php endif; ?>
<?php echo e($stat['value'] ?? ''); ?>
</strong>
</article>
<?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><?php \Livewire\Features\SupportCompiledWireKeys\SupportCompiledWireKeys::endLoop(); ?><?php endif; ?><?php endforeach; $__env->popLoop(); $loop = $__env->getLastLoop(); ?><?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if ENDBLOCK]><![endif]--><?php \Livewire\Features\SupportCompiledWireKeys\SupportCompiledWireKeys::closeLoop(); ?><?php endif; ?>
<?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if BLOCK]><![endif]--><?php endif; ?><?php if($icon && count($stats) === 0): ?>
<article class="wms-page-hero-stat wms-page-hero-icon-card" aria-hidden="true">
<strong><i class="<?php echo e($icon); ?>"></i></strong>
</article>
<?php endif; ?><?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if ENDBLOCK]><![endif]--><?php endif; ?>
<?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if BLOCK]><![endif]--><?php endif; ?><?php if($slot->isNotEmpty()): ?>
<?php echo e($slot); ?>
<?php endif; ?><?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if ENDBLOCK]><![endif]--><?php endif; ?>
</div>
</section>
<?php /**PATH /Users/mag/Sites/WMS/Core/resources/views/components/wms/page-hero.blade.php ENDPATH**/ ?>
@@ -1,84 +0,0 @@
---
name: cashier-stripe-development
description: "Handles Laravel Cashier Stripe integration including subscriptions, webhooks, Stripe Checkout, invoices, charges, refunds, trials, coupons, metered billing, and payment failure handling. Triggered when a user mentions Cashier, Billable, IncompletePayment, stripe_id, newSubscription, Stripe subscriptions, or billing. Also applies when setting up webhooks, handling SCA/3DS payment failures, testing with Stripe test cards, or troubleshooting incomplete subscriptions, CSRF webhook errors, or migration publish issues."
license: MIT
metadata:
author: laravel
---
<?php
/** @var \Laravel\Boost\Install\GuidelineAssist $assist */
?>
# Cashier Stripe Development
## Documentation
Use ___SINGLE_BACKTICK___search-docs___SINGLE_BACKTICK___ for detailed Cashier patterns and documentation covering subscriptions, webhooks, Stripe Checkout, invoices, payment methods, and testing.
For deeper guidance on specific topics, read the relevant reference file before implementing:
- ___SINGLE_BACKTICK___references/subscriptions.md___SINGLE_BACKTICK___ covers subscription creation, status checks, swapping, trials, quantities, and multiple products
- ___SINGLE_BACKTICK___references/webhooks.md___SINGLE_BACKTICK___ covers webhook setup, custom handlers, CSRF exclusion, and local development with the Stripe CLI
- ___SINGLE_BACKTICK___references/testing.md___SINGLE_BACKTICK___ covers Stripe test cards, payment method tokens, and feature test patterns
## Basic Usage
### Installation
___SINGLE_BACKTICK______SINGLE_BACKTICK______SINGLE_BACKTICK___bash
<?php echo e($assist->artisanCommand('vendor:publish --tag="cashier-migrations"')); ?>
<?php echo e($assist->artisanCommand('migrate')); ?>
<?php echo e($assist->artisanCommand('vendor:publish --tag="cashier-config"')); ?>
___SINGLE_BACKTICK______SINGLE_BACKTICK______SINGLE_BACKTICK___
### Environment Variables
___SINGLE_BACKTICK______SINGLE_BACKTICK______SINGLE_BACKTICK___
STRIPE_KEY=pk_test_...
STRIPE_SECRET=sk_test_...
STRIPE_WEBHOOK_SECRET=whsec_...
CASHIER_CURRENCY=usd
CASHIER_CURRENCY_LOCALE=en_US
___SINGLE_BACKTICK______SINGLE_BACKTICK______SINGLE_BACKTICK___
### Billable Model
___BOOST_SNIPPET_0___
For a non-User model, register it in a service provider:
___BOOST_SNIPPET_1___
### Creating a Subscription
___BOOST_SNIPPET_2___
Always wrap subscription creation in a try/catch for ___SINGLE_BACKTICK___IncompletePayment___SINGLE_BACKTICK___. When a card requires 3DS authentication, Cashier throws this exception. The ___SINGLE_BACKTICK___cashier.payment___SINGLE_BACKTICK___ route is auto-registered and handles the confirmation flow.
## Verification
1. Run migrations and confirm ___SINGLE_BACKTICK___stripe_id___SINGLE_BACKTICK___, ___SINGLE_BACKTICK___pm_type___SINGLE_BACKTICK___, ___SINGLE_BACKTICK___pm_last_four___SINGLE_BACKTICK___, and ___SINGLE_BACKTICK___trial_ends_at___SINGLE_BACKTICK___ columns exist on the billable model table
2. Test the webhook endpoint with ___SINGLE_BACKTICK___stripe listen --forward-to localhost/stripe/webhook___SINGLE_BACKTICK___ if you use the default path, or swap ___SINGLE_BACKTICK___stripe___SINGLE_BACKTICK___ for your configured ___SINGLE_BACKTICK___CASHIER_PATH___SINGLE_BACKTICK___
3. Confirm ___SINGLE_BACKTICK___$user->subscribed('default')___SINGLE_BACKTICK___ returns the expected value for active and incomplete subscriptions
## Common Pitfalls
- The migration publish tag is ___SINGLE_BACKTICK___cashier-migrations___SINGLE_BACKTICK___, not ___SINGLE_BACKTICK___cashier___SINGLE_BACKTICK___. Running ___SINGLE_BACKTICK___migrate___SINGLE_BACKTICK___ before publishing results in missing columns and tables.
- ___SINGLE_BACKTICK___CASHIER_CURRENCY___SINGLE_BACKTICK___ must be set explicitly. It defaults to USD, which silently breaks non-US apps.
- The Stripe CLI generates its own webhook signing secret. It is different from the Dashboard endpoint secret. Using the wrong one causes signature verification failures.
- The webhook route must be excluded from CSRF verification using your configured ___SINGLE_BACKTICK___cashier.path___SINGLE_BACKTICK___. If you change ___SINGLE_BACKTICK___CASHIER_PATH___SINGLE_BACKTICK___ from ___SINGLE_BACKTICK___stripe___SINGLE_BACKTICK___ to ___SINGLE_BACKTICK___billing___SINGLE_BACKTICK___, exclude ___SINGLE_BACKTICK___billing/*___SINGLE_BACKTICK___, not ___SINGLE_BACKTICK___stripe/*___SINGLE_BACKTICK___.
- ___SINGLE_BACKTICK___canceled()___SINGLE_BACKTICK___ returns true as soon as ___SINGLE_BACKTICK___cancel()___SINGLE_BACKTICK___ is called, but the user still has access during the grace period. Use ___SINGLE_BACKTICK___ended()___SINGLE_BACKTICK___ to confirm access is fully revoked.
- ___SINGLE_BACKTICK___subscribed()___SINGLE_BACKTICK___ returns true during the grace period even though the subscription is canceled.
- ___SINGLE_BACKTICK___subscribed()___SINGLE_BACKTICK___ returns false for ___SINGLE_BACKTICK___incomplete___SINGLE_BACKTICK___ and ___SINGLE_BACKTICK___past_due___SINGLE_BACKTICK___ subscriptions by default.
- Prices cannot be swapped and quantity cannot be updated while a subscription has an incomplete payment.
- When extending ___SINGLE_BACKTICK___WebhookController___SINGLE_BACKTICK___, call ___SINGLE_BACKTICK___Cashier::ignoreRoutes()___SINGLE_BACKTICK___ in a service provider and re-register both ___SINGLE_BACKTICK___cashier.payment___SINGLE_BACKTICK___ and ___SINGLE_BACKTICK___cashier.webhook___SINGLE_BACKTICK___ under the configured ___SINGLE_BACKTICK___cashier.path___SINGLE_BACKTICK___.
- Use ___SINGLE_BACKTICK___Cashier::useCustomerModel()___SINGLE_BACKTICK___ in a service provider to set a custom billable model. There is no ___SINGLE_BACKTICK___CASHIER_MODEL___SINGLE_BACKTICK___ env var.
- ___SINGLE_BACKTICK___trial_ends_at___SINGLE_BACKTICK___ is a local database column synced via webhooks. It will be stale if webhooks are not configured in production.
- In MySQL, the ___SINGLE_BACKTICK___stripe_id___SINGLE_BACKTICK___ column must use ___SINGLE_BACKTICK___utf8_bin___SINGLE_BACKTICK___ collation to avoid case-sensitivity issues.
- ___SINGLE_BACKTICK___noProrate()___SINGLE_BACKTICK___ has no effect when combined with ___SINGLE_BACKTICK___swapAndInvoice()___SINGLE_BACKTICK___. That method always prorates.
- Methods like ___SINGLE_BACKTICK___withPromotionCode()___SINGLE_BACKTICK___ require the Stripe API ID such as ___SINGLE_BACKTICK___promo_xxxx___SINGLE_BACKTICK___, not the customer-facing code. Use ___SINGLE_BACKTICK___findPromotionCode()___SINGLE_BACKTICK___ to resolve a code to its ID.
- Always use ___SINGLE_BACKTICK___search-docs___SINGLE_BACKTICK___ for the latest Cashier documentation rather than relying on this skill alone.
<?php /**PATH /Users/mag/Sites/WMS/Core/storage/framework/views/e7f4a27e96bdd0635d8dc5b91b4bf6df.blade.php ENDPATH**/ ?>
@@ -1,6 +0,0 @@
# Livewire
- Livewire allow to build dynamic, reactive interfaces in PHP without writing JavaScript.
- You can use Alpine.js for client-side interactions instead of JavaScript frameworks.
- Keep state server-side so the UI reflects it. Validate and authorize in actions as you would in HTTP requests.
<?php /**PATH /Users/mag/Sites/WMS/Core/storage/framework/views/535d56990e285f39e3e99bf188f787e4.blade.php ENDPATH**/ ?>
@@ -1,147 +0,0 @@
<?php if (isset($component)) { $__componentOriginal81a506f898233b9e7d58286e6bea3c18 = $component; } ?>
<?php if (isset($attributes)) { $__attributesOriginal81a506f898233b9e7d58286e6bea3c18 = $attributes; } ?>
<?php $component = Illuminate\View\AnonymousComponent::resolve(['view' => 'f4ac99e09542ff494432bc959d4fee61::app','data' => ['title' => __('Security')]] + (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag ? $attributes->all() : [])); ?>
<?php $component->withName('layouts::app'); ?>
<?php if ($component->shouldRender()): ?>
<?php $__env->startComponent($component->resolveView(), $component->data()); ?>
<?php if (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag): ?>
<?php $attributes = $attributes->except(\Illuminate\View\AnonymousComponent::ignoredParameterNames()); ?>
<?php endif; ?>
<?php $component->withAttributes(['title' => \Illuminate\View\Compilers\BladeCompiler::sanitizeComponentAttribute(__('Security'))]); ?>
<?php \Livewire\Features\SupportCompiledWireKeys\SupportCompiledWireKeys::processComponentKey($component); ?>
<div class="container-fluid py-4 module-page module-security">
<div class="row g-4">
<div class="col-12">
<?php if (isset($component)) { $__componentOriginal9c6e3f23e2ced4034a039852a77e1e96 = $component; } ?>
<?php if (isset($attributes)) { $__attributesOriginal9c6e3f23e2ced4034a039852a77e1e96 = $attributes; } ?>
<?php $component = Illuminate\View\AnonymousComponent::resolve(['view' => 'components.wms.page-hero','data' => ['eyebrow' => 'Operations','title' => 'Security','description' => 'Control roles, permissions, audit visibility, and protected administration actions.','icon' => 'fa-solid fa-shield-halved']] + (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag ? $attributes->all() : [])); ?>
<?php $component->withName('wms.page-hero'); ?>
<?php if ($component->shouldRender()): ?>
<?php $__env->startComponent($component->resolveView(), $component->data()); ?>
<?php if (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag): ?>
<?php $attributes = $attributes->except(\Illuminate\View\AnonymousComponent::ignoredParameterNames()); ?>
<?php endif; ?>
<?php $component->withAttributes(['eyebrow' => 'Operations','title' => 'Security','description' => 'Control roles, permissions, audit visibility, and protected administration actions.','icon' => 'fa-solid fa-shield-halved']); ?>
<?php \Livewire\Features\SupportCompiledWireKeys\SupportCompiledWireKeys::processComponentKey($component); ?>
<?php echo $__env->renderComponent(); ?>
<?php endif; ?>
<?php if (isset($__attributesOriginal9c6e3f23e2ced4034a039852a77e1e96)): ?>
<?php $attributes = $__attributesOriginal9c6e3f23e2ced4034a039852a77e1e96; ?>
<?php unset($__attributesOriginal9c6e3f23e2ced4034a039852a77e1e96); ?>
<?php endif; ?>
<?php if (isset($__componentOriginal9c6e3f23e2ced4034a039852a77e1e96)): ?>
<?php $component = $__componentOriginal9c6e3f23e2ced4034a039852a77e1e96; ?>
<?php unset($__componentOriginal9c6e3f23e2ced4034a039852a77e1e96); ?>
<?php endif; ?>
</div>
<div class="col-md-6 col-xl-3">
<div class="card h-100 border-0 shadow-sm module-metric-card">
<div class="card-body">
<div class="small text-uppercase text-muted fw-semibold mb-2">01</div>
<h3 class="h6 mb-2">Roles</h3>
<p class="small text-muted mb-0">Placeholder area for roles.</p>
</div>
</div>
</div>
<div class="col-md-6 col-xl-3">
<div class="card h-100 border-0 shadow-sm module-metric-card">
<div class="card-body">
<div class="small text-uppercase text-muted fw-semibold mb-2">02</div>
<h3 class="h6 mb-2">Permissions</h3>
<p class="small text-muted mb-0">Placeholder area for permissions.</p>
</div>
</div>
</div>
<div class="col-md-6 col-xl-3">
<div class="card h-100 border-0 shadow-sm module-metric-card">
<div class="card-body">
<div class="small text-uppercase text-muted fw-semibold mb-2">03</div>
<h3 class="h6 mb-2">Admin Access</h3>
<p class="small text-muted mb-0">Placeholder area for admin access.</p>
</div>
</div>
</div>
<div class="col-md-6 col-xl-3">
<div class="card h-100 border-0 shadow-sm module-metric-card">
<div class="card-body">
<div class="small text-uppercase text-muted fw-semibold mb-2">04</div>
<h3 class="h6 mb-2">Security Audit</h3>
<p class="small text-muted mb-0">Placeholder area for security audit.</p>
</div>
</div>
</div>
<div class="col-12">
<section class="card border-0 shadow-sm">
<div class="card-header bg-white border-bottom">
<div class="d-flex flex-column flex-md-row justify-content-between gap-2">
<div>
<h2 class="h5 mb-1">Security workbench</h2>
<p class="small text-muted mb-0">Sample table layout ready to wire into controllers, queries, DataTables, or Livewire.</p>
</div>
<div class="d-flex gap-2">
<button type="button" class="btn btn-outline-secondary btn-sm">Export</button>
<button type="button" class="btn btn-primary btn-sm">Create</button>
</div>
</div>
</div>
<div class="card-body">
<div class="table-responsive">
<table class="table table-hover align-middle mb-0">
<thead class="table-light">
<tr>
<th>Area</th>
<th>Permission</th>
<th>Role</th>
<th class="text-end">Action</th>
</tr>
</thead>
<tbody>
<tr>
<td>Roles</td>
<td>Sample 1</td>
<td><span class="badge bg-success-subtle text-success border border-success-subtle">Active</span></td>
<td class="text-end"><a href="#" class="btn btn-sm btn-outline-primary">Open</a></td>
</tr>
<tr>
<td>Permissions</td>
<td>Sample 2</td>
<td><span class="badge bg-success-subtle text-success border border-success-subtle">Active</span></td>
<td class="text-end"><a href="#" class="btn btn-sm btn-outline-primary">Open</a></td>
</tr>
<tr>
<td>Admin Access</td>
<td>Sample 3</td>
<td><span class="badge bg-success-subtle text-success border border-success-subtle">Active</span></td>
<td class="text-end"><a href="#" class="btn btn-sm btn-outline-primary">Open</a></td>
</tr>
<tr>
<td>Security Audit</td>
<td>Sample 4</td>
<td><span class="badge bg-success-subtle text-success border border-success-subtle">Active</span></td>
<td class="text-end"><a href="#" class="btn btn-sm btn-outline-primary">Open</a></td>
</tr>
</tbody>
</table>
</div>
</div>
</section>
</div>
</div>
</div>
<?php echo $__env->renderComponent(); ?>
<?php endif; ?>
<?php if (isset($__attributesOriginal81a506f898233b9e7d58286e6bea3c18)): ?>
<?php $attributes = $__attributesOriginal81a506f898233b9e7d58286e6bea3c18; ?>
<?php unset($__attributesOriginal81a506f898233b9e7d58286e6bea3c18); ?>
<?php endif; ?>
<?php if (isset($__componentOriginal81a506f898233b9e7d58286e6bea3c18)): ?>
<?php $component = $__componentOriginal81a506f898233b9e7d58286e6bea3c18; ?>
<?php unset($__componentOriginal81a506f898233b9e7d58286e6bea3c18); ?>
<?php endif; ?>
<?php /**PATH /Users/mag/Sites/WMS/Core/Modules/Security/Providers/../Resources/views/index.blade.php ENDPATH**/ ?>
@@ -1,12 +0,0 @@
@php
/** @var \Laravel\Boost\Install\GuidelineAssist $assist */
@endphp
# Laravel Pint Code Formatter
@if($assist->supportsPintAgentFormatter())
- If you have modified any PHP files, you must run ___SINGLE_BACKTICK___{{ $assist->binCommand('pint') }} --dirty --format agent___SINGLE_BACKTICK___ before finalizing changes to ensure your code matches the project's expected style.
- Do not run ___SINGLE_BACKTICK___{{ $assist->binCommand('pint') }} --test --format agent___SINGLE_BACKTICK___, simply run ___SINGLE_BACKTICK___{{ $assist->binCommand('pint') }} --format agent___SINGLE_BACKTICK___ to fix any formatting issues.
@else
- If you have modified any PHP files, you must run ___SINGLE_BACKTICK___{{ $assist->binCommand('pint') }} --dirty___SINGLE_BACKTICK___ before finalizing changes to ensure your code matches the project's expected style.
- Do not run ___SINGLE_BACKTICK___{{ $assist->binCommand('pint') }} --test___SINGLE_BACKTICK___, simply run ___SINGLE_BACKTICK___{{ $assist->binCommand('pint') }}___SINGLE_BACKTICK___ to fix any formatting issues.
@endif
@@ -1,3 +0,0 @@
# Deployment
- Laravel can be deployed using [Laravel Cloud](https://cloud.laravel.com/), which is the fastest way to deploy and scale production Laravel applications.
@@ -1,104 +0,0 @@
<?php if (isset($component)) { $__componentOriginal81a506f898233b9e7d58286e6bea3c18 = $component; } ?>
<?php if (isset($attributes)) { $__attributesOriginal81a506f898233b9e7d58286e6bea3c18 = $attributes; } ?>
<?php $component = Illuminate\View\AnonymousComponent::resolve(['view' => 'f4ac99e09542ff494432bc959d4fee61::app','data' => ['title' => __('Pricing')]] + (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag ? $attributes->all() : [])); ?>
<?php $component->withName('layouts::app'); ?>
<?php if ($component->shouldRender()): ?>
<?php $__env->startComponent($component->resolveView(), $component->data()); ?>
<?php if (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag): ?>
<?php $attributes = $attributes->except(\Illuminate\View\AnonymousComponent::ignoredParameterNames()); ?>
<?php endif; ?>
<?php $component->withAttributes(['title' => \Illuminate\View\Compilers\BladeCompiler::sanitizeComponentAttribute(__('Pricing'))]); ?>
<?php \Livewire\Features\SupportCompiledWireKeys\SupportCompiledWireKeys::processComponentKey($component); ?>
<div class="space-y-6">
<?php if (isset($component)) { $__componentOriginal9c6e3f23e2ced4034a039852a77e1e96 = $component; } ?>
<?php if (isset($attributes)) { $__attributesOriginal9c6e3f23e2ced4034a039852a77e1e96 = $attributes; } ?>
<?php $component = Illuminate\View\AnonymousComponent::resolve(['view' => 'components.wms.page-hero','data' => ['eyebrow' => 'Platform','title' => 'Pricing','description' => 'Clear platform pricing for Basic, Advanced and Pro access.','icon' => 'fa-solid fa-tags']] + (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag ? $attributes->all() : [])); ?>
<?php $component->withName('wms.page-hero'); ?>
<?php if ($component->shouldRender()): ?>
<?php $__env->startComponent($component->resolveView(), $component->data()); ?>
<?php if (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag): ?>
<?php $attributes = $attributes->except(\Illuminate\View\AnonymousComponent::ignoredParameterNames()); ?>
<?php endif; ?>
<?php $component->withAttributes(['eyebrow' => 'Platform','title' => 'Pricing','description' => 'Clear platform pricing for Basic, Advanced and Pro access.','icon' => 'fa-solid fa-tags']); ?>
<?php \Livewire\Features\SupportCompiledWireKeys\SupportCompiledWireKeys::processComponentKey($component); ?>
<?php echo $__env->renderComponent(); ?>
<?php endif; ?>
<?php if (isset($__attributesOriginal9c6e3f23e2ced4034a039852a77e1e96)): ?>
<?php $attributes = $__attributesOriginal9c6e3f23e2ced4034a039852a77e1e96; ?>
<?php unset($__attributesOriginal9c6e3f23e2ced4034a039852a77e1e96); ?>
<?php endif; ?>
<?php if (isset($__componentOriginal9c6e3f23e2ced4034a039852a77e1e96)): ?>
<?php $component = $__componentOriginal9c6e3f23e2ced4034a039852a77e1e96; ?>
<?php unset($__componentOriginal9c6e3f23e2ced4034a039852a77e1e96); ?>
<?php endif; ?>
<section class="grid gap-5 lg:grid-cols-3">
<?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if BLOCK]><![endif]--><?php \Livewire\Features\SupportCompiledWireKeys\SupportCompiledWireKeys::openLoop(); ?><?php endif; ?><?php $__empty_1 = true; $__currentLoopData = $prices; $__env->addLoop($__currentLoopData); foreach($__currentLoopData as $price): $__env->incrementLoopIndices(); $loop = $__env->getLastLoop(); $__empty_1 = false; ?><?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><?php \Livewire\Features\SupportCompiledWireKeys\SupportCompiledWireKeys::startLoopIteration(); ?><?php endif; ?>
<?php
$isBasic = $price->code === 'basic';
$isAdvanced = $price->code === 'advanced';
$headerClass = $isAdvanced
? 'from-cyan-500 to-blue-600'
: ($isBasic ? 'from-slate-700 to-slate-950' : 'from-indigo-600 to-violet-700');
?>
<article class="relative overflow-hidden rounded-3xl border border-zinc-200 bg-white shadow-sm transition hover:-translate-y-0.5 hover:shadow-xl dark:border-zinc-800 dark:bg-zinc-900">
<?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if BLOCK]><![endif]--><?php endif; ?><?php if($price->is_featured): ?>
<div class="absolute right-4 top-4 z-10 rounded-full bg-white px-3 py-1 text-xs font-extrabold uppercase tracking-wide text-cyan-700 shadow"><?php echo e($price->badge_label ?: 'Popular'); ?></div>
<?php endif; ?><?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if ENDBLOCK]><![endif]--><?php endif; ?>
<div class="bg-gradient-to-br <?php echo e($headerClass); ?> p-6 text-white">
<div class="flex items-start justify-between gap-4">
<div>
<p class="text-xs font-bold uppercase tracking-[0.24em] text-white/70"><?php echo e($price->badge_label ?: 'Plan'); ?></p>
<h2 class="mt-2 text-3xl font-black tracking-tight"><?php echo e($price->name); ?></h2>
</div>
<span class="grid h-12 w-12 place-items-center rounded-2xl bg-white/15 text-xl backdrop-blur">
<i class="fa-solid <?php echo e($isBasic ? 'fa-box' : ($isAdvanced ? 'fa-layer-group' : 'fa-crown')); ?>" aria-hidden="true"></i>
</span>
</div>
<p class="mt-4 text-sm leading-6 text-white/80"><?php echo e($price->strapline); ?></p>
</div>
<div class="p-6">
<div class="flex items-end gap-2">
<span class="text-4xl font-black tracking-tight text-zinc-950 dark:text-white"><?php echo e($price->formatAmount($price->monthly_amount)); ?></span>
<span class="pb-1 text-sm font-semibold text-zinc-500">/ month</span>
</div>
<?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if BLOCK]><![endif]--><?php endif; ?><?php if($price->annual_amount): ?>
<p class="mt-2 text-sm text-zinc-500">Annual: <span class="font-semibold text-zinc-700 dark:text-zinc-200"><?php echo e($price->formatAmount($price->annual_amount)); ?></span></p>
<?php endif; ?><?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if ENDBLOCK]><![endif]--><?php endif; ?>
<p class="mt-4 min-h-12 text-sm leading-6 text-zinc-600 dark:text-zinc-300"><?php echo e($price->description); ?></p>
<ul class="mt-5 space-y-3 text-sm text-zinc-700 dark:text-zinc-200">
<?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if BLOCK]><![endif]--><?php \Livewire\Features\SupportCompiledWireKeys\SupportCompiledWireKeys::openLoop(); ?><?php endif; ?><?php $__currentLoopData = $price->featureRows(); $__env->addLoop($__currentLoopData); foreach($__currentLoopData as $feature): $__env->incrementLoopIndices(); $loop = $__env->getLastLoop(); ?><?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><?php \Livewire\Features\SupportCompiledWireKeys\SupportCompiledWireKeys::startLoopIteration(); ?><?php endif; ?>
<li class="flex gap-3">
<i class="fa-solid fa-check mt-1 text-cyan-500" aria-hidden="true"></i>
<span><?php echo e($feature); ?></span>
</li>
<?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><?php \Livewire\Features\SupportCompiledWireKeys\SupportCompiledWireKeys::endLoop(); ?><?php endif; ?><?php endforeach; $__env->popLoop(); $loop = $__env->getLastLoop(); ?><?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if ENDBLOCK]><![endif]--><?php \Livewire\Features\SupportCompiledWireKeys\SupportCompiledWireKeys::closeLoop(); ?><?php endif; ?>
</ul>
</div>
</article>
<?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><?php \Livewire\Features\SupportCompiledWireKeys\SupportCompiledWireKeys::endLoop(); ?><?php endif; ?><?php endforeach; $__env->popLoop(); $loop = $__env->getLastLoop(); if ($__empty_1): ?><?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><?php \Livewire\Features\SupportCompiledWireKeys\SupportCompiledWireKeys::closeLoop(); ?><?php endif; ?>
<article class="rounded-3xl border border-zinc-200 bg-white p-6 shadow-sm dark:border-zinc-800 dark:bg-zinc-900">
<h2 class="text-xl font-bold">No active prices</h2>
<p class="mt-2 text-sm text-zinc-500">Add active pricing records from Administration to populate this page.</p>
</article>
<?php endif; ?><?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if ENDBLOCK]><![endif]--><?php endif; ?>
</section>
</div>
<?php echo $__env->renderComponent(); ?>
<?php endif; ?>
<?php if (isset($__attributesOriginal81a506f898233b9e7d58286e6bea3c18)): ?>
<?php $attributes = $__attributesOriginal81a506f898233b9e7d58286e6bea3c18; ?>
<?php unset($__attributesOriginal81a506f898233b9e7d58286e6bea3c18); ?>
<?php endif; ?>
<?php if (isset($__componentOriginal81a506f898233b9e7d58286e6bea3c18)): ?>
<?php $component = $__componentOriginal81a506f898233b9e7d58286e6bea3c18; ?>
<?php unset($__componentOriginal81a506f898233b9e7d58286e6bea3c18); ?>
<?php endif; ?>
<?php /**PATH /Users/mag/Sites/WMS/Core/Modules/Platform/Providers/../resources/views/prices/public.blade.php ENDPATH**/ ?>
@@ -1,507 +0,0 @@
<?php # [BlazeFolded]:{flux::heading}:{/Users/mag/Sites/WMS/Core/vendor/livewire/flux/src/../stubs/resources/views/flux/heading.blade.php}:{1776985208} ?>
<?php # [BlazeFolded]:{flux::text}:{/Users/mag/Sites/WMS/Core/vendor/livewire/flux/src/../stubs/resources/views/flux/text.blade.php}:{1776985208} ?>
<?php # [BlazeFolded]:{flux::menu.radio.group}:{/Users/mag/Sites/WMS/Core/vendor/livewire/flux/src/../stubs/resources/views/flux/menu/radio/group.blade.php}:{1776985208} ?>
<?php # [BlazeFolded]:{flux::menu.separator}:{/Users/mag/Sites/WMS/Core/vendor/livewire/flux/src/../stubs/resources/views/flux/menu/separator.blade.php}:{1776985208} ?>
<?php # [BlazeFolded]:{flux::menu.item}:{/Users/mag/Sites/WMS/Core/vendor/livewire/flux/src/../stubs/resources/views/flux/menu/item.blade.php}:{1776985208} ?>
<?php # [BlazeFolded]:{flux::menu.separator}:{/Users/mag/Sites/WMS/Core/vendor/livewire/flux/src/../stubs/resources/views/flux/menu/separator.blade.php}:{1776985208} ?>
<?php # [BlazeFolded]:{flux::menu.item}:{/Users/mag/Sites/WMS/Core/vendor/livewire/flux/src/../stubs/resources/views/flux/menu/item.blade.php}:{1776985208} ?>
<?php # [BlazeFolded]:{flux::menu}:{/Users/mag/Sites/WMS/Core/vendor/livewire/flux/src/../stubs/resources/views/flux/menu/index.blade.php}:{1776985208} ?>
<?php # [BlazeFolded]:{flux::dropdown}:{/Users/mag/Sites/WMS/Core/vendor/livewire/flux/src/../stubs/resources/views/flux/dropdown.blade.php}:{1776985208} ?>
<?php # [BlazeFolded]:{flux::menu.item}:{/Users/mag/Sites/WMS/Core/vendor/livewire/flux/src/../stubs/resources/views/flux/menu/item.blade.php}:{1776985208} ?>
<?php # [BlazeFolded]:{flux::menu.separator}:{/Users/mag/Sites/WMS/Core/vendor/livewire/flux/src/../stubs/resources/views/flux/menu/separator.blade.php}:{1776985208} ?>
<?php # [BlazeFolded]:{flux::menu.item}:{/Users/mag/Sites/WMS/Core/vendor/livewire/flux/src/../stubs/resources/views/flux/menu/item.blade.php}:{1776985208} ?>
<?php # [BlazeFolded]:{flux::menu}:{/Users/mag/Sites/WMS/Core/vendor/livewire/flux/src/../stubs/resources/views/flux/menu/index.blade.php}:{1776985208} ?>
<?php # [BlazeFolded]:{flux::dropdown}:{/Users/mag/Sites/WMS/Core/vendor/livewire/flux/src/../stubs/resources/views/flux/dropdown.blade.php}:{1776985208} ?>
<?php # [BlazeFolded]:{flux::toast}:{/Users/mag/Sites/WMS/Core/vendor/livewire/flux/src/../stubs/resources/views/flux/toast/index.blade.php}:{1776985208} ?>
<?php # [BlazeFolded]:{flux::toast.group}:{/Users/mag/Sites/WMS/Core/vendor/livewire/flux/src/../stubs/resources/views/flux/toast/group.blade.php}:{1776985208} ?>
<!DOCTYPE html>
<html lang="<?php echo e(str_replace('_', '-', app()->getLocale())); ?>" class="dark">
<head>
<?php echo $__env->make('partials.head', array_diff_key(get_defined_vars(), ['__data' => 1, '__path' => 1]))->render(); ?>
</head>
<body class="min-h-screen bg-white text-zinc-950 antialiased dark:bg-zinc-950 dark:text-zinc-100">
<div class="wms-app-shell" data-wms-shell data-wms-mobile-shell>
<button type="button" class="wms-mobile-overlay" data-wms-mobile-close aria-label="<?php echo e(__('Close navigation menu')); ?>"></button>
<aside id="wms-main-sidebar" class="wms-sidebar" data-wms-sidebar aria-label="<?php echo e(__('Main navigation')); ?>">
<div class="wms-sidebar-header">
<a href="<?php echo e(auth()->user()?->isMpbaPlatformAdmin() && Route::has('platform.dashboard') ? route('platform.dashboard') : route('dashboard')); ?>" wire:navigate class="wms-brand" aria-label="<?php echo e(__('Warehouse Management System')); ?>">
<span class="wms-brand-mark" data-wms-brand-toggle title="<?php echo e(__('Expand sidebar')); ?>"><span class="wms-brand-mark-inner">W</span></span>
<span class="wms-brand-copy" data-wms-sidebar-label>
<span class="wms-brand-title"><?php echo e(__('Warehouse Management System')); ?></span>
<span class="wms-brand-subtitle">MPBA</span>
</span>
</a>
<button type="button" class="wms-sidebar-toggle" data-wms-sidebar-toggle aria-label="<?php echo e(__('Collapse sidebar')); ?>" aria-expanded="true">
<span class="wms-toggle-expanded">‹</span>
</button>
<button type="button" class="wms-mobile-close" data-wms-mobile-close aria-label="<?php echo e(__('Close navigation')); ?>">×</button>
</div>
<nav class="wms-sidebar-nav" aria-label="<?php echo e(__('Main navigation')); ?>">
<div class="wms-sidebar-group">
<div class="wms-sidebar-heading" data-wms-sidebar-label><?php echo e(__('Platform')); ?></div>
<?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if BLOCK]><![endif]--><?php endif; ?><?php if(auth()->user()?->isMpbaPlatformAdmin() && Route::has('platform.dashboard')): ?>
<a href="<?php echo e(route('platform.dashboard')); ?>" wire:navigate class="wms-sidebar-link <?php if(request()->routeIs('platform.dashboard')): ?> is-active <?php endif; ?>" title="<?php echo e(__('Platform')); ?>">
<i class="fa-solid fa-screwdriver-wrench wms-sidebar-icon" aria-hidden="true"></i>
<span data-wms-sidebar-label><?php echo e(__('Platform')); ?></span>
</a>
<?php elseif(Route::has('dashboard')): ?>
<a href="<?php echo e(route('dashboard')); ?>" wire:navigate class="wms-sidebar-link <?php if(request()->routeIs('dashboard')): ?> is-active <?php endif; ?>" title="<?php echo e(__('Dashboard')); ?>">
<i class="fa-solid fa-gauge-high wms-sidebar-icon" aria-hidden="true"></i>
<span data-wms-sidebar-label><?php echo e(__('Dashboard')); ?></span>
</a>
<?php endif; ?><?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if ENDBLOCK]><![endif]--><?php endif; ?>
</div>
<div class="wms-sidebar-group">
<div class="wms-sidebar-heading" data-wms-sidebar-label><?php echo e(__('Operations')); ?></div>
<?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if BLOCK]><![endif]--><?php endif; ?><?php if(Route::has('analytics.index')): ?>
<a href="<?php echo e(route('analytics.index')); ?>" wire:navigate class="wms-sidebar-link <?php if(request()->routeIs('analytics.*')): ?> is-active <?php endif; ?>" title="<?php echo e(__('Analytics')); ?>">
<i class="fa-solid fa-chart-line wms-sidebar-icon" aria-hidden="true"></i>
<span data-wms-sidebar-label><?php echo e(__('Analytics')); ?></span>
</a>
<?php endif; ?><?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if ENDBLOCK]><![endif]--><?php endif; ?>
<?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if BLOCK]><![endif]--><?php endif; ?><?php if(Route::has('inventory-management.index')): ?>
<a href="<?php echo e(route('inventory-management.index')); ?>" wire:navigate class="wms-sidebar-link <?php if(request()->routeIs('inventory-management.*')): ?> is-active <?php endif; ?>" title="<?php echo e(__('Inventory')); ?>">
<i class="fa-solid fa-boxes-stacked wms-sidebar-icon" aria-hidden="true"></i>
<span data-wms-sidebar-label><?php echo e(__('Inventory')); ?></span>
</a>
<?php endif; ?><?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if ENDBLOCK]><![endif]--><?php endif; ?>
<?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if BLOCK]><![endif]--><?php endif; ?><?php if(Route::has('replenishment.index')): ?>
<a href="<?php echo e(route('replenishment.index')); ?>" wire:navigate class="wms-sidebar-link <?php if(request()->routeIs('replenishment.*')): ?> is-active <?php endif; ?>" title="<?php echo e(__('Replenishment')); ?>">
<i class="fa-solid fa-arrows-rotate wms-sidebar-icon" aria-hidden="true"></i>
<span data-wms-sidebar-label><?php echo e(__('Replenishment')); ?></span>
</a>
<?php endif; ?><?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if ENDBLOCK]><![endif]--><?php endif; ?>
<?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if BLOCK]><![endif]--><?php endif; ?><?php if(Route::has('shipping.index')): ?>
<a href="<?php echo e(route('shipping.index')); ?>" wire:navigate class="wms-sidebar-link <?php if(request()->routeIs('shipping.*')): ?> is-active <?php endif; ?>" title="<?php echo e(__('Shipping')); ?>">
<i class="fa-solid fa-truck-fast wms-sidebar-icon" aria-hidden="true"></i>
<span data-wms-sidebar-label><?php echo e(__('Shipping')); ?></span>
</a>
<?php endif; ?><?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if ENDBLOCK]><![endif]--><?php endif; ?>
<?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if BLOCK]><![endif]--><?php endif; ?><?php if(Route::has('transportation.index')): ?>
<a href="<?php echo e(route('transportation.index')); ?>" wire:navigate class="wms-sidebar-link <?php if(request()->routeIs('transportation.*')): ?> is-active <?php endif; ?>" title="<?php echo e(__('Transportation')); ?>">
<i class="fa-solid fa-truck-ramp-box wms-sidebar-icon" aria-hidden="true"></i>
<span data-wms-sidebar-label><?php echo e(__('Transportation')); ?></span>
</a>
<?php endif; ?><?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if ENDBLOCK]><![endif]--><?php endif; ?>
<?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if BLOCK]><![endif]--><?php endif; ?><?php if(Route::has('carrier-management.index')): ?>
<a href="<?php echo e(route('carrier-management.index')); ?>" wire:navigate class="wms-sidebar-link <?php if(request()->routeIs('carrier-management.*')): ?> is-active <?php endif; ?>" title="<?php echo e(__('Carriers')); ?>">
<i class="fa-solid fa-route wms-sidebar-icon" aria-hidden="true"></i>
<span data-wms-sidebar-label><?php echo e(__('Carriers')); ?></span>
</a>
<?php endif; ?><?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if ENDBLOCK]><![endif]--><?php endif; ?>
</div>
<div class="wms-sidebar-group">
<div class="wms-sidebar-heading" data-wms-sidebar-label><?php echo e(__('Integration & Reporting')); ?></div>
<?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if BLOCK]><![endif]--><?php endif; ?><?php if(Route::has('m3-integration.index')): ?>
<a href="<?php echo e(route('m3-integration.index')); ?>" wire:navigate class="wms-sidebar-link <?php if(request()->routeIs('m3-integration.*')): ?> is-active <?php endif; ?>" title="<?php echo e(__('M3 Integration')); ?>">
<i class="fa-solid fa-plug-circle-bolt wms-sidebar-icon" aria-hidden="true"></i>
<span data-wms-sidebar-label><?php echo e(__('M3 Integration')); ?></span>
</a>
<?php endif; ?><?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if ENDBLOCK]><![endif]--><?php endif; ?>
<?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if BLOCK]><![endif]--><?php endif; ?><?php if(Route::has('sentinel-integration.index')): ?>
<a href="<?php echo e(route('sentinel-integration.index')); ?>" wire:navigate class="wms-sidebar-link <?php if(request()->routeIs('sentinel-integration.*')): ?> is-active <?php endif; ?>" title="<?php echo e(__('Sentinel')); ?>">
<i class="fa-solid fa-satellite-dish wms-sidebar-icon" aria-hidden="true"></i>
<span data-wms-sidebar-label><?php echo e(__('Sentinel')); ?></span>
</a>
<?php endif; ?><?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if ENDBLOCK]><![endif]--><?php endif; ?>
<?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if BLOCK]><![endif]--><?php endif; ?><?php if(Route::has('document-archive.index')): ?>
<a href="<?php echo e(route('document-archive.index')); ?>" wire:navigate class="wms-sidebar-link <?php if(request()->routeIs('document-archive.*')): ?> is-active <?php endif; ?>" title="<?php echo e(__('Documents')); ?>">
<i class="fa-solid fa-box-archive wms-sidebar-icon" aria-hidden="true"></i>
<span data-wms-sidebar-label><?php echo e(__('Documents')); ?></span>
</a>
<?php endif; ?><?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if ENDBLOCK]><![endif]--><?php endif; ?>
<?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if BLOCK]><![endif]--><?php endif; ?><?php if(Route::has('reporting.index')): ?>
<a href="<?php echo e(route('reporting.index')); ?>" wire:navigate class="wms-sidebar-link <?php if(request()->routeIs('reporting.*')): ?> is-active <?php endif; ?>" title="<?php echo e(__('Reporting')); ?>">
<i class="fa-solid fa-file-lines wms-sidebar-icon" aria-hidden="true"></i>
<span data-wms-sidebar-label><?php echo e(__('Reporting')); ?></span>
</a>
<?php endif; ?><?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if ENDBLOCK]><![endif]--><?php endif; ?>
</div>
<div class="wms-sidebar-group">
<div class="wms-sidebar-heading" data-wms-sidebar-label><?php echo e(__('Administration')); ?></div>
<?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if BLOCK]><![endif]--><?php endif; ?><?php if(Route::has('warehouses.index')): ?>
<a href="<?php echo e(route('warehouses.index')); ?>" wire:navigate class="wms-sidebar-link <?php if(request()->routeIs('warehouses.*')): ?> is-active <?php endif; ?>" title="<?php echo e(__('Warehouses')); ?>">
<i class="fa-solid fa-warehouse wms-sidebar-icon" aria-hidden="true"></i>
<span data-wms-sidebar-label><?php echo e(__('Warehouses')); ?></span>
</a>
<?php endif; ?><?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if ENDBLOCK]><![endif]--><?php endif; ?>
<?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if BLOCK]><![endif]--><?php endif; ?><?php if(Route::has('warehouse-rules.index')): ?>
<a href="<?php echo e(route('warehouse-rules.index')); ?>" wire:navigate class="wms-sidebar-link <?php if(request()->routeIs('warehouse-rules.*')): ?> is-active <?php endif; ?>" title="<?php echo e(__('Validation Rules')); ?>">
<i class="fa-solid fa-shield-halved wms-sidebar-icon" aria-hidden="true"></i>
<span data-wms-sidebar-label><?php echo e(__('Validation Rules')); ?></span>
</a>
<?php endif; ?><?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if ENDBLOCK]><![endif]--><?php endif; ?>
<?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if BLOCK]><![endif]--><?php endif; ?><?php if(auth()->user()?->isMpbaPlatformAdmin() && Route::has('platform.prices.index')): ?>
<a href="<?php echo e(route('platform.prices.index')); ?>" wire:navigate class="wms-sidebar-link <?php if(request()->routeIs('platform.prices.*')): ?> is-active <?php endif; ?>" title="<?php echo e(__('Prices')); ?>">
<i class="fa-solid fa-tags wms-sidebar-icon" aria-hidden="true"></i>
<span data-wms-sidebar-label><?php echo e(__('Prices')); ?></span>
</a>
<?php endif; ?><?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if ENDBLOCK]><![endif]--><?php endif; ?>
<?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if BLOCK]><![endif]--><?php endif; ?><?php if(Route::has('configuration.index')): ?>
<a href="<?php echo e(route('configuration.index')); ?>" wire:navigate class="wms-sidebar-link <?php if(request()->routeIs('configuration.*')): ?> is-active <?php endif; ?>" title="<?php echo e(__('Configuration')); ?>">
<i class="fa-solid fa-sliders wms-sidebar-icon" aria-hidden="true"></i>
<span data-wms-sidebar-label><?php echo e(__('Configuration')); ?></span>
</a>
<?php endif; ?><?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if ENDBLOCK]><![endif]--><?php endif; ?>
<?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if BLOCK]><![endif]--><?php endif; ?><?php if(Route::has('security.index')): ?>
<a href="<?php echo e(route('security.index')); ?>" wire:navigate class="wms-sidebar-link <?php if(request()->routeIs('security.*')): ?> is-active <?php endif; ?>" title="<?php echo e(__('Security')); ?>">
<i class="fa-solid fa-user-shield wms-sidebar-icon" aria-hidden="true"></i>
<span data-wms-sidebar-label><?php echo e(__('Security')); ?></span>
</a>
<?php endif; ?><?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if ENDBLOCK]><![endif]--><?php endif; ?>
<?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if BLOCK]><![endif]--><?php endif; ?><?php if(Route::has('audit.index')): ?>
<a href="<?php echo e(route('audit.index')); ?>" wire:navigate class="wms-sidebar-link <?php if(request()->routeIs('audit.*')): ?> is-active <?php endif; ?>" title="<?php echo e(__('Audit')); ?>">
<i class="fa-solid fa-clipboard-check wms-sidebar-icon" aria-hidden="true"></i>
<span data-wms-sidebar-label><?php echo e(__('Audit')); ?></span>
</a>
<?php endif; ?><?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if ENDBLOCK]><![endif]--><?php endif; ?>
</div>
<?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if BLOCK]><![endif]--><?php endif; ?><?php if(auth()->user()?->isMpbaPlatformAdmin()): ?>
<div class="wms-sidebar-group">
<div class="wms-sidebar-heading" data-wms-sidebar-label><?php echo e(__('Platform Administration')); ?></div>
<?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if BLOCK]><![endif]--><?php endif; ?><?php if(Route::has('platform.companies.index')): ?>
<a href="<?php echo e(route('platform.companies.index')); ?>" wire:navigate class="wms-sidebar-link <?php if(request()->routeIs('platform.companies.*')): ?> is-active <?php endif; ?>" title="<?php echo e(__('Companies')); ?>">
<i class="fa-solid fa-building wms-sidebar-icon" aria-hidden="true"></i>
<span data-wms-sidebar-label><?php echo e(__('Companies')); ?></span>
</a>
<?php endif; ?><?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if ENDBLOCK]><![endif]--><?php endif; ?>
<?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if BLOCK]><![endif]--><?php endif; ?><?php if(Route::has('platform.licenses.index')): ?>
<a href="<?php echo e(route('platform.licenses.index')); ?>" wire:navigate class="wms-sidebar-link <?php if(request()->routeIs('platform.licenses.*')): ?> is-active <?php endif; ?>" title="<?php echo e(__('Licences')); ?>">
<i class="fa-solid fa-key wms-sidebar-icon" aria-hidden="true"></i>
<span data-wms-sidebar-label><?php echo e(__('Licences')); ?></span>
</a>
<?php endif; ?><?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if ENDBLOCK]><![endif]--><?php endif; ?>
<?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if BLOCK]><![endif]--><?php endif; ?><?php if(Route::has('platform.payments.index')): ?>
<a href="<?php echo e(route('platform.payments.index')); ?>" wire:navigate class="wms-sidebar-link <?php if(request()->routeIs('platform.payments.*')): ?> is-active <?php endif; ?>" title="<?php echo e(__('Payments')); ?>">
<i class="fa-solid fa-credit-card wms-sidebar-icon" aria-hidden="true"></i>
<span data-wms-sidebar-label><?php echo e(__('Payments')); ?></span>
</a>
<?php endif; ?><?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if ENDBLOCK]><![endif]--><?php endif; ?>
</div>
<?php endif; ?><?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if ENDBLOCK]><![endif]--><?php endif; ?>
</nav>
<div class="wms-sidebar-footer">
<?php ob_start(); ?><ui-dropdown position="top start" data-flux-dropdown>
<?php ob_start(); ?>
<button type="button" class="wms-user-card wms-user-card-button" data-wms-sidebar-label>
<div class="wms-user-avatar"><?php echo e(auth()->user()?->initials() ?? 'U'); ?></div>
<div class="wms-user-copy">
<div class="wms-user-name"><?php echo e(auth()->user()?->name ?? __('User')); ?></div>
<div class="wms-user-email"><?php echo e(auth()->user()?->email ?? ''); ?></div>
</div>
<i class="fa-solid fa-chevron-up wms-user-chevron" aria-hidden="true"></i>
</button>
<?php ob_start(); ?><ui-menu
class="[:where(&amp;)]:min-w-48 p-[.3125rem] rounded-lg shadow-xs border border-zinc-200 dark:border-zinc-600 bg-white dark:bg-zinc-700 focus:outline-hidden"
popover="manual"
data-flux-menu
>
<?php ob_start(); ?>
<?php ob_start(); ?><ui-menu-radio-group data-flux-menu-radio-group>
<?php ob_start(); ?>
<div class="p-0 text-sm font-normal">
<div class="flex items-center gap-2 px-1 py-1.5 text-start text-sm">
<?php $blaze_memoized_key = \Livewire\Blaze\Memoizer\Memo::key("flux::avatar", ['name' => auth()->user()?->name ?? 'User', 'initials' => auth()->user()?->initials() ?? 'U']); ?><?php if ($blaze_memoized_key !== null && \Livewire\Blaze\Memoizer\Memo::has($blaze_memoized_key)) : ?><?php echo \Livewire\Blaze\Memoizer\Memo::get($blaze_memoized_key); ?><?php else : ?><?php ob_start(); ?><?php $__blaze->ensureRequired('/Users/mag/Sites/WMS/Core/vendor/livewire/flux/src/../stubs/resources/views/flux/avatar/index.blade.php', $__blaze->compiledPath.'/110c1c2a55a80ff8b2b4fbed62b1a7d3.php'); ?>
<?php $__blaze->pushData(['name' => auth()->user()?->name ?? 'User','initials' => auth()->user()?->initials() ?? 'U']); ?>
<?php _110c1c2a55a80ff8b2b4fbed62b1a7d3($__blaze, ['name' => auth()->user()?->name ?? 'User','initials' => auth()->user()?->initials() ?? 'U'], [], ['name', 'initials'], [], $__this ?? (isset($this) ? $this : null)); ?>
<?php $__blaze->popData(); ?><?php $blaze_memoized_html = ob_get_clean(); ?><?php if ($blaze_memoized_key !== null) { \Livewire\Blaze\Memoizer\Memo::put($blaze_memoized_key, $blaze_memoized_html); } ?><?php echo $blaze_memoized_html; ?><?php endif; ?>
<div class="grid flex-1 text-start text-sm leading-tight">
<?php ob_start(); ?><div class="font-medium [:where(&amp;)]:text-zinc-800 [:where(&amp;)]:dark:text-white text-sm [&amp;:has(+[data-flux-subheading])]:mb-2 [[data-flux-subheading]+&amp;]:mt-2 truncate" data-flux-heading><?php ob_start(); ?><?php echo e(auth()->user()?->name ?? __('User')); ?><?php echo trim(ob_get_clean()); ?></div>
<?php echo ltrim(ob_get_clean()); ?>
<?php ob_start(); ?><p class="[:where(&amp;)]:font-normal [:where(&amp;)]:text-sm [:where(&amp;)]:text-zinc-500 [:where(&amp;)]:dark:text-white/70 truncate" data-flux-text ><?php ob_start(); ?><?php echo e(auth()->user()?->email ?? ''); ?><?php echo trim(ob_get_clean()); ?></p><?php echo ltrim(ob_get_clean()); ?>
</div>
</div>
</div>
<?php echo trim(ob_get_clean()); ?>
</ui-menu-radio-group>
<?php echo ltrim(ob_get_clean()); ?>
<?php ob_start(); ?><div class="-mx-[.3125rem] my-[.3125rem] h-px" data-flux-menu-separator>
<div data-orientation="horizontal" role="none" class="border-0 [print-color-adjust:exact] bg-zinc-800/15 dark:bg-white/20 h-px w-full dark:bg-zinc-600!" data-flux-separator></div>
</div>
<?php echo ltrim(ob_get_clean()); ?>
<?php ob_start(); ?><a href="<?php echo e(route('profile.edit')); ?>" data-flux-menu-item="data-flux-menu-item" data-flux-menu-item-has-icon="data-flux-menu-item-has-icon" class="flex items-center px-2 py-1.5 w-full focus:outline-hidden rounded-md text-start text-sm font-medium [&amp;[disabled]]:opacity-50 text-zinc-800 data-active:bg-zinc-50 dark:text-white dark:data-active:bg-zinc-600 **:data-flux-menu-item-icon:text-zinc-400 dark:**:data-flux-menu-item-icon:text-white/60 [&amp;[data-active]_[data-flux-menu-item-icon]]:text-current" wire:navigate="">
<svg class="shrink-0 [:where(&amp;)]:size-5 me-2" data-flux-menu-item-icon="data-flux-menu-item-icon" data-flux-icon xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20" fill="currentColor" aria-hidden="true" data-slot="icon">
<path d="M13.024 9.25c.47 0 .827-.433.637-.863a4 4 0 0 0-4.094-2.364c-.468.05-.665.576-.43.984l1.08 1.868a.75.75 0 0 0 .649.375h2.158ZM7.84 7.758c-.236-.408-.79-.5-1.068-.12A3.982 3.982 0 0 0 6 10c0 .884.287 1.7.772 2.363.278.38.832.287 1.068-.12l1.078-1.868a.75.75 0 0 0 0-.75L7.839 7.758ZM9.138 12.993c-.235.408-.039.934.43.984a4 4 0 0 0 4.094-2.364c.19-.43-.168-.863-.638-.863h-2.158a.75.75 0 0 0-.65.375l-1.078 1.868Z"/>
<path fill-rule="evenodd" d="m14.13 4.347.644-1.117a.75.75 0 0 0-1.299-.75l-.644 1.116a6.954 6.954 0 0 0-2.081-.556V1.75a.75.75 0 0 0-1.5 0v1.29a6.954 6.954 0 0 0-2.081.556L6.525 2.48a.75.75 0 1 0-1.3.75l.645 1.117A7.04 7.04 0 0 0 4.347 5.87L3.23 5.225a.75.75 0 1 0-.75 1.3l1.116.644A6.954 6.954 0 0 0 3.04 9.25H1.75a.75.75 0 0 0 0 1.5h1.29c.078.733.27 1.433.556 2.081l-1.116.645a.75.75 0 1 0 .75 1.298l1.117-.644a7.04 7.04 0 0 0 1.523 1.523l-.645 1.117a.75.75 0 1 0 1.3.75l.644-1.116a6.954 6.954 0 0 0 2.081.556v1.29a.75.75 0 0 0 1.5 0v-1.29a6.954 6.954 0 0 0 2.081-.556l.645 1.116a.75.75 0 0 0 1.299-.75l-.645-1.117a7.042 7.042 0 0 0 1.523-1.523l1.117.644a.75.75 0 0 0 .75-1.298l-1.116-.645a6.954 6.954 0 0 0 .556-2.081h1.29a.75.75 0 0 0 0-1.5h-1.29a6.954 6.954 0 0 0-.556-2.081l1.116-.644a.75.75 0 0 0-.75-1.3l-1.117.645a7.04 7.04 0 0 0-1.524-1.523ZM10 4.5a5.475 5.475 0 0 0-2.781.754A5.527 5.527 0 0 0 5.22 7.277 5.475 5.475 0 0 0 4.5 10a5.475 5.475 0 0 0 .752 2.777 5.527 5.527 0 0 0 2.028 2.004c.802.458 1.73.719 2.72.719a5.474 5.474 0 0 0 2.78-.753 5.527 5.527 0 0 0 2.001-2.027c.458-.802.719-1.73.719-2.72a5.475 5.475 0 0 0-.753-2.78 5.528 5.528 0 0 0-2.028-2.002A5.475 5.475 0 0 0 10 4.5Z" clip-rule="evenodd"/>
</svg>
<?php ob_start(); ?><?php echo e(__('Settings')); ?><?php echo trim(ob_get_clean()); ?>
</a>
<?php echo ltrim(ob_get_clean()); ?>
<?php ob_start(); ?><div class="-mx-[.3125rem] my-[.3125rem] h-px" data-flux-menu-separator>
<div data-orientation="horizontal" role="none" class="border-0 [print-color-adjust:exact] bg-zinc-800/15 dark:bg-white/20 h-px w-full dark:bg-zinc-600!" data-flux-separator></div>
</div>
<?php echo ltrim(ob_get_clean()); ?>
<form method="POST" action="<?php echo e(route('logout')); ?>" class="w-full">
<?php echo csrf_field(); ?>
<?php ob_start(); ?><button type="submit" class="flex items-center px-2 py-1.5 w-full focus:outline-hidden rounded-md text-start text-sm font-medium [&amp;[disabled]]:opacity-50 text-zinc-800 data-active:bg-zinc-50 dark:text-white dark:data-active:bg-zinc-600 **:data-flux-menu-item-icon:text-zinc-400 dark:**:data-flux-menu-item-icon:text-white/60 [&amp;[data-active]_[data-flux-menu-item-icon]]:text-current w-full cursor-pointer" data-flux-menu-item="data-flux-menu-item" data-flux-menu-item-has-icon="data-flux-menu-item-has-icon" data-test="logout-button">
<svg class="shrink-0 [:where(&amp;)]:size-5 me-2" data-flux-menu-item-icon="data-flux-menu-item-icon" data-flux-icon xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20" fill="currentColor" aria-hidden="true" data-slot="icon">
<path fill-rule="evenodd" d="M3 4.25A2.25 2.25 0 0 1 5.25 2h5.5A2.25 2.25 0 0 1 13 4.25v2a.75.75 0 0 1-1.5 0v-2a.75.75 0 0 0-.75-.75h-5.5a.75.75 0 0 0-.75.75v11.5c0 .414.336.75.75.75h5.5a.75.75 0 0 0 .75-.75v-2a.75.75 0 0 1 1.5 0v2A2.25 2.25 0 0 1 10.75 18h-5.5A2.25 2.25 0 0 1 3 15.75V4.25Z" clip-rule="evenodd"/>
<path fill-rule="evenodd" d="M6 10a.75.75 0 0 1 .75-.75h9.546l-1.048-.943a.75.75 0 1 1 1.004-1.114l2.5 2.25a.75.75 0 0 1 0 1.114l-2.5 2.25a.75.75 0 1 1-1.004-1.114l1.048-.943H6.75A.75.75 0 0 1 6 10Z" clip-rule="evenodd"/>
</svg>
<?php ob_start(); ?><?php echo e(__('Log out')); ?><?php echo trim(ob_get_clean()); ?>
</button>
<?php echo ltrim(ob_get_clean()); ?>
</form>
<?php echo trim(ob_get_clean()); ?>
</ui-menu>
<?php echo ltrim(ob_get_clean()); ?>
<?php echo trim(ob_get_clean()); ?>
</ui-dropdown>
<?php echo ltrim(ob_get_clean()); ?>
<?php ob_start(); ?><ui-dropdown position="top start" data-flux-dropdown>
<?php ob_start(); ?>
<button type="button" class="wms-user-rail-button" title="<?php echo e(__('Account')); ?>"><?php echo e(auth()->user()?->initials() ?? 'U'); ?></button>
<?php ob_start(); ?><ui-menu
class="[:where(&amp;)]:min-w-48 p-[.3125rem] rounded-lg shadow-xs border border-zinc-200 dark:border-zinc-600 bg-white dark:bg-zinc-700 focus:outline-hidden"
popover="manual"
data-flux-menu
>
<?php ob_start(); ?>
<?php ob_start(); ?><a href="<?php echo e(route('profile.edit')); ?>" data-flux-menu-item="data-flux-menu-item" data-flux-menu-item-has-icon="data-flux-menu-item-has-icon" class="flex items-center px-2 py-1.5 w-full focus:outline-hidden rounded-md text-start text-sm font-medium [&amp;[disabled]]:opacity-50 text-zinc-800 data-active:bg-zinc-50 dark:text-white dark:data-active:bg-zinc-600 **:data-flux-menu-item-icon:text-zinc-400 dark:**:data-flux-menu-item-icon:text-white/60 [&amp;[data-active]_[data-flux-menu-item-icon]]:text-current" wire:navigate="">
<svg class="shrink-0 [:where(&amp;)]:size-5 me-2" data-flux-menu-item-icon="data-flux-menu-item-icon" data-flux-icon xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20" fill="currentColor" aria-hidden="true" data-slot="icon">
<path d="M13.024 9.25c.47 0 .827-.433.637-.863a4 4 0 0 0-4.094-2.364c-.468.05-.665.576-.43.984l1.08 1.868a.75.75 0 0 0 .649.375h2.158ZM7.84 7.758c-.236-.408-.79-.5-1.068-.12A3.982 3.982 0 0 0 6 10c0 .884.287 1.7.772 2.363.278.38.832.287 1.068-.12l1.078-1.868a.75.75 0 0 0 0-.75L7.839 7.758ZM9.138 12.993c-.235.408-.039.934.43.984a4 4 0 0 0 4.094-2.364c.19-.43-.168-.863-.638-.863h-2.158a.75.75 0 0 0-.65.375l-1.078 1.868Z"/>
<path fill-rule="evenodd" d="m14.13 4.347.644-1.117a.75.75 0 0 0-1.299-.75l-.644 1.116a6.954 6.954 0 0 0-2.081-.556V1.75a.75.75 0 0 0-1.5 0v1.29a6.954 6.954 0 0 0-2.081.556L6.525 2.48a.75.75 0 1 0-1.3.75l.645 1.117A7.04 7.04 0 0 0 4.347 5.87L3.23 5.225a.75.75 0 1 0-.75 1.3l1.116.644A6.954 6.954 0 0 0 3.04 9.25H1.75a.75.75 0 0 0 0 1.5h1.29c.078.733.27 1.433.556 2.081l-1.116.645a.75.75 0 1 0 .75 1.298l1.117-.644a7.04 7.04 0 0 0 1.523 1.523l-.645 1.117a.75.75 0 1 0 1.3.75l.644-1.116a6.954 6.954 0 0 0 2.081.556v1.29a.75.75 0 0 0 1.5 0v-1.29a6.954 6.954 0 0 0 2.081-.556l.645 1.116a.75.75 0 0 0 1.299-.75l-.645-1.117a7.042 7.042 0 0 0 1.523-1.523l1.117.644a.75.75 0 0 0 .75-1.298l-1.116-.645a6.954 6.954 0 0 0 .556-2.081h1.29a.75.75 0 0 0 0-1.5h-1.29a6.954 6.954 0 0 0-.556-2.081l1.116-.644a.75.75 0 0 0-.75-1.3l-1.117.645a7.04 7.04 0 0 0-1.524-1.523ZM10 4.5a5.475 5.475 0 0 0-2.781.754A5.527 5.527 0 0 0 5.22 7.277 5.475 5.475 0 0 0 4.5 10a5.475 5.475 0 0 0 .752 2.777 5.527 5.527 0 0 0 2.028 2.004c.802.458 1.73.719 2.72.719a5.474 5.474 0 0 0 2.78-.753 5.527 5.527 0 0 0 2.001-2.027c.458-.802.719-1.73.719-2.72a5.475 5.475 0 0 0-.753-2.78 5.528 5.528 0 0 0-2.028-2.002A5.475 5.475 0 0 0 10 4.5Z" clip-rule="evenodd"/>
</svg>
<?php ob_start(); ?><?php echo e(__('Settings')); ?><?php echo trim(ob_get_clean()); ?>
</a>
<?php echo ltrim(ob_get_clean()); ?>
<?php ob_start(); ?><div class="-mx-[.3125rem] my-[.3125rem] h-px" data-flux-menu-separator>
<div data-orientation="horizontal" role="none" class="border-0 [print-color-adjust:exact] bg-zinc-800/15 dark:bg-white/20 h-px w-full dark:bg-zinc-600!" data-flux-separator></div>
</div>
<?php echo ltrim(ob_get_clean()); ?>
<form method="POST" action="<?php echo e(route('logout')); ?>" class="w-full">
<?php echo csrf_field(); ?>
<?php ob_start(); ?><button type="submit" class="flex items-center px-2 py-1.5 w-full focus:outline-hidden rounded-md text-start text-sm font-medium [&amp;[disabled]]:opacity-50 text-zinc-800 data-active:bg-zinc-50 dark:text-white dark:data-active:bg-zinc-600 **:data-flux-menu-item-icon:text-zinc-400 dark:**:data-flux-menu-item-icon:text-white/60 [&amp;[data-active]_[data-flux-menu-item-icon]]:text-current w-full cursor-pointer" data-flux-menu-item="data-flux-menu-item" data-flux-menu-item-has-icon="data-flux-menu-item-has-icon">
<svg class="shrink-0 [:where(&amp;)]:size-5 me-2" data-flux-menu-item-icon="data-flux-menu-item-icon" data-flux-icon xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20" fill="currentColor" aria-hidden="true" data-slot="icon">
<path fill-rule="evenodd" d="M3 4.25A2.25 2.25 0 0 1 5.25 2h5.5A2.25 2.25 0 0 1 13 4.25v2a.75.75 0 0 1-1.5 0v-2a.75.75 0 0 0-.75-.75h-5.5a.75.75 0 0 0-.75.75v11.5c0 .414.336.75.75.75h5.5a.75.75 0 0 0 .75-.75v-2a.75.75 0 0 1 1.5 0v2A2.25 2.25 0 0 1 10.75 18h-5.5A2.25 2.25 0 0 1 3 15.75V4.25Z" clip-rule="evenodd"/>
<path fill-rule="evenodd" d="M6 10a.75.75 0 0 1 .75-.75h9.546l-1.048-.943a.75.75 0 1 1 1.004-1.114l2.5 2.25a.75.75 0 0 1 0 1.114l-2.5 2.25a.75.75 0 1 1-1.004-1.114l1.048-.943H6.75A.75.75 0 0 1 6 10Z" clip-rule="evenodd"/>
</svg>
<?php ob_start(); ?><?php echo e(__('Log out')); ?><?php echo trim(ob_get_clean()); ?>
</button>
<?php echo ltrim(ob_get_clean()); ?>
</form>
<?php echo trim(ob_get_clean()); ?>
</ui-menu>
<?php echo ltrim(ob_get_clean()); ?>
<?php echo trim(ob_get_clean()); ?>
</ui-dropdown>
<?php echo ltrim(ob_get_clean()); ?>
</div>
</aside>
<div class="wms-main-panel">
<header class="wms-mobile-header" role="banner">
<button type="button" class="wms-mobile-menu" data-wms-mobile-open aria-label="<?php echo e(__('Open navigation menu')); ?>" aria-controls="wms-main-sidebar" aria-expanded="false">
<i class="fa-solid fa-bars" aria-hidden="true"></i>
</button>
<a href="<?php echo e(auth()->user()?->isMpbaPlatformAdmin() && Route::has('platform.dashboard') ? route('platform.dashboard') : route('dashboard')); ?>" wire:navigate class="wms-mobile-title">
<?php echo e(__('Warehouse Management System')); ?>
</a>
<span class="wms-mobile-badge">MPBA</span>
</header>
<main class="wms-content">
<?php echo e($slot); ?>
</main>
</div>
</div>
<?php app("livewire")->forceAssetInjection(); ?><div x-persist="<?php echo e('toast'); ?>">
<?php ob_start(); ?><ui-toast-group x-data x-on:toast-show.document="$el.showToast($event.detail)" popover="manual" position="bottom end" wire:ignore>
<?php ob_start(); ?><?php ob_start(); ?><ui-toast x-data x-on:toast-show.document="! $el.closest('ui-toast-group') && $el.showToast($event.detail)" popover="manual" position="bottom end" wire:ignore>
<template>
<div class="max-w-sm in-[ui-toast-group]:max-w-auto in-[ui-toast-group]:w-xs sm:in-[ui-toast-group]:w-sm" data-variant="" data-flux-toast-dialog>
<div class="p-2 flex rounded-xl shadow-lg bg-white border border-zinc-200 border-b-zinc-300/80 dark:bg-zinc-700 dark:border-zinc-600">
<div class="flex-1 flex items-start gap-4 overflow-hidden">
<div class="flex-1 py-1.5 ps-2.5 flex gap-2">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16" fill="currentColor" class="hidden [[data-flux-toast-dialog][data-variant=success]_&]:block shrink-0 mt-0.5 size-4 text-lime-600 dark:text-lime-400">
<path fill-rule="evenodd" d="M8 15A7 7 0 1 0 8 1a7 7 0 0 0 0 14Zm3.844-8.791a.75.75 0 0 0-1.188-.918l-3.7 4.79-1.649-1.833a.75.75 0 1 0-1.114 1.004l2.25 2.5a.75.75 0 0 0 1.15-.043l4.25-5.5Z" clip-rule="evenodd" />
</svg>
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16" fill="currentColor" class="hidden [[data-flux-toast-dialog][data-variant=warning]_&]:block shrink-0 mt-0.5 size-4 text-amber-500 dark:text-amber-400">
<path fill-rule="evenodd" d="M6.701 2.25c.577-1 2.02-1 2.598 0l5.196 9a1.5 1.5 0 0 1-1.299 2.25H2.804a1.5 1.5 0 0 1-1.3-2.25l5.197-9ZM8 4a.75.75 0 0 1 .75.75v3a.75.75 0 1 1-1.5 0v-3A.75.75 0 0 1 8 4Zm0 8a1 1 0 1 0 0-2 1 1 0 0 0 0 2Z" clip-rule="evenodd" />
</svg>
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16" fill="currentColor" class="hidden [[data-flux-toast-dialog][data-variant=info]_&]:block shrink-0 mt-0.5 size-4 text-cyan-500 dark:text-cyan-400">
<path fill-rule="evenodd" d="M15 8A7 7 0 1 1 1 8a7 7 0 0 1 14 0ZM9 5a1 1 0 1 1-2 0 1 1 0 0 1 2 0ZM6.75 8a.75.75 0 0 0 0 1.5h.75v1.75a.75.75 0 0 0 1.5 0v-2.5A.75.75 0 0 0 8.25 8h-1.5Z" clip-rule="evenodd" />
</svg>
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16" fill="currentColor" class="hidden [[data-flux-toast-dialog][data-variant=danger]_&]:block shrink-0 mt-0.5 size-4 text-rose-500 dark:text-rose-400">
<path fill-rule="evenodd" d="M8 15A7 7 0 1 0 8 1a7 7 0 0 0 0 14ZM8 4a.75.75 0 0 1 .75.75v3a.75.75 0 0 1-1.5 0v-3A.75.75 0 0 1 8 4Zm0 8a1 1 0 1 0 0-2 1 1 0 0 0 0 2Z" clip-rule="evenodd" />
</svg>
<div>
<div class="font-medium text-sm text-zinc-800 dark:text-white [&:not(:empty)+div]:font-normal [&:not(:empty)+div]:text-zinc-500 [&:not(:empty)+div]:dark:text-zinc-300 [&:not(:empty)]:pb-2"><slot name="heading"></slot></div>
<div class="font-medium text-sm text-zinc-800 dark:text-white"><slot name="text"></slot></div>
</div>
</div>
<ui-close class="flex items-center">
<button type="button" class="inline-flex items-center font-medium justify-center gap-2 truncate disabled:opacity-50 dark:disabled:opacity-75 disabled:cursor-default h-8 text-sm rounded-md w-8 bg-transparent hover:bg-zinc-800/5 dark:hover:bg-white/15 text-zinc-400 hover:text-zinc-800 dark:text-zinc-400 dark:hover:text-white" as="button">
<div>
<svg class="[:where(&)]:size-5" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20" fill="currentColor" aria-hidden="true" data-slot="icon">
<path d="M6.28 5.22a.75.75 0 0 0-1.06 1.06L8.94 10l-3.72 3.72a.75.75 0 1 0 1.06 1.06L10 11.06l3.72 3.72a.75.75 0 1 0 1.06-1.06L11.06 10l3.72-3.72a.75.75 0 0 0-1.06-1.06L10 8.94 6.28 5.22Z"></path>
</svg>
</div>
</button>
</ui-close>
</div>
</div>
</div>
</template>
</ui-toast>
<?php echo ltrim(ob_get_clean()); ?><?php echo trim(ob_get_clean()); ?>
</ui-toast-group>
<?php echo ltrim(ob_get_clean()); ?>
</div>
<?php app('livewire')->forceAssetInjection(); ?>
<?php echo app('flux')->scripts(); ?>
<script>
(function () {
const STORAGE_KEY = 'wms-sidebar-state';
function applySidebarState() {
const root = document.documentElement;
const saved = localStorage.getItem(STORAGE_KEY) || 'expanded';
root.dataset.wmsSidebar = saved === 'collapsed' ? 'collapsed' : 'expanded';
document.querySelectorAll('[data-wms-sidebar-toggle]').forEach((button) => {
const expanded = root.dataset.wmsSidebar !== 'collapsed';
button.setAttribute('aria-expanded', expanded ? 'true' : 'false');
button.setAttribute('aria-label', expanded ? '<?php echo e(__('Collapse sidebar')); ?>' : '<?php echo e(__('Expand sidebar')); ?>');
});
}
function setMobileToggleState(isOpen) {
document.querySelectorAll('[data-wms-mobile-open]').forEach((button) => {
button.setAttribute('aria-expanded', isOpen ? 'true' : 'false');
});
document.body.classList.toggle('wms-mobile-nav-open', isOpen);
}
function closeMobileSidebar() {
document.documentElement.dataset.wmsMobileSidebar = 'closed';
setMobileToggleState(false);
}
function openMobileSidebar() {
document.documentElement.dataset.wmsMobileSidebar = 'open';
setMobileToggleState(true);
}
function toggleMobileSidebar() {
if (document.documentElement.dataset.wmsMobileSidebar === 'open') {
closeMobileSidebar();
return;
}
openMobileSidebar();
}
function bindSidebarControls() {
applySidebarState();
document.querySelectorAll('[data-wms-sidebar-toggle]').forEach((button) => {
if (button.dataset.wmsBound === '1') return;
button.dataset.wmsBound = '1';
button.addEventListener('click', function () {
const root = document.documentElement;
const next = root.dataset.wmsSidebar === 'collapsed' ? 'expanded' : 'collapsed';
root.dataset.wmsSidebar = next;
localStorage.setItem(STORAGE_KEY, next);
applySidebarState();
});
});
document.querySelectorAll('[data-wms-brand-toggle]').forEach((button) => {
if (button.dataset.wmsBound === '1') return;
button.dataset.wmsBound = '1';
button.addEventListener('click', function (event) {
const root = document.documentElement;
if (root.dataset.wmsSidebar !== 'collapsed') return;
event.preventDefault();
event.stopPropagation();
root.dataset.wmsSidebar = 'expanded';
localStorage.setItem(STORAGE_KEY, 'expanded');
applySidebarState();
});
});
closeMobileSidebar();
document.querySelectorAll('[data-wms-mobile-open]').forEach((button) => {
if (button.dataset.wmsBound === '1') return;
button.dataset.wmsBound = '1';
button.addEventListener('click', function (event) {
event.preventDefault();
toggleMobileSidebar();
});
});
document.querySelectorAll('[data-wms-mobile-close]').forEach((button) => {
if (button.dataset.wmsBound === '1') return;
button.dataset.wmsBound = '1';
button.addEventListener('click', closeMobileSidebar);
});
document.querySelectorAll('.wms-sidebar-link[wire\\:navigate]').forEach((link) => {
if (link.dataset.wmsMobileBound === '1') return;
link.dataset.wmsMobileBound = '1';
link.addEventListener('click', closeMobileSidebar);
});
}
document.addEventListener('DOMContentLoaded', bindSidebarControls);
document.addEventListener('livewire:navigated', bindSidebarControls);
})();
</script>
</body>
</html>
<?php /**PATH /Users/mag/Sites/WMS/Core/resources/views/layouts/app/sidebar.blade.php ENDPATH**/ ?>
@@ -1,61 +0,0 @@
<?php
if (!function_exists('_3e67020b08ceeca960cbb88b2dabc310')):
function _3e67020b08ceeca960cbb88b2dabc310($__blaze, $__data = [], $__slots = [], $__bound = [], $__keys = [], $__this = null) {
$__env = $__blaze->env;
$__slots['slot'] ??= new \Illuminate\View\ComponentSlot('');
if (($__data['attributes'] ?? null) instanceof \Illuminate\View\ComponentAttributeBag) { $__data = $__data + $__data['attributes']->all(); unset($__data['attributes']); }
extract($__slots, EXTR_SKIP); unset($__slots);
extract($__data, EXTR_SKIP);
$attributes = \Livewire\Blaze\Runtime\BlazeAttributeBag::make($__data, $__bound, $__keys);
unset($__data, $__bound, $__keys);
ob_start();
?>
<?php
extract(Flux::forwardedAttributes($attributes, [
'tooltipPosition',
'tooltipKbd',
'tooltip',
]));
?>
<?php $tooltipPosition = $tooltipPosition ??= $attributes->pluck('tooltip:position'); ?>
<?php $tooltipKbd = $tooltipKbd ??= $attributes->pluck('tooltip:kbd'); ?>
<?php $tooltip = $tooltip ??= $attributes->pluck('tooltip'); ?>
<?php
$__defaults = [
'tooltipPosition' => 'top',
'tooltipKbd' => null,
'tooltip' => null,
];
$tooltipPosition ??= $attributes['tooltip-position'] ?? $attributes['tooltipPosition'] ?? $__defaults['tooltipPosition']; unset($attributes['tooltipPosition'], $attributes['tooltip-position']);
$tooltipKbd ??= $attributes['tooltip-kbd'] ?? $attributes['tooltipKbd'] ?? $__defaults['tooltipKbd']; unset($attributes['tooltipKbd'], $attributes['tooltip-kbd']);
$tooltip ??= $attributes['tooltip'] ?? $__defaults['tooltip']; unset($attributes['tooltip']);
unset($__defaults);
?>
<?php if ($tooltip): ?>
<?php $__blaze->ensureRequired('/Users/mag/Sites/WMS/Core/vendor/livewire/flux/src/../stubs/resources/views/flux/tooltip/index.blade.php', $__blaze->compiledPath.'/d2493bdc3defe8869c6c05a47a680be0.php'); ?>
<?php if (isset($__slotsd2493bdc3defe8869c6c05a47a680be0)) { $__slotsStackd2493bdc3defe8869c6c05a47a680be0[] = $__slotsd2493bdc3defe8869c6c05a47a680be0; } ?>
<?php if (isset($__attrsd2493bdc3defe8869c6c05a47a680be0)) { $__attrsStackd2493bdc3defe8869c6c05a47a680be0[] = $__attrsd2493bdc3defe8869c6c05a47a680be0; } ?>
<?php $__attrsd2493bdc3defe8869c6c05a47a680be0 = ['content' => $tooltip,'position' => $tooltipPosition,'kbd' => $tooltipKbd]; ?>
<?php $__slotsd2493bdc3defe8869c6c05a47a680be0 = []; ?>
<?php $__blaze->pushData($__attrsd2493bdc3defe8869c6c05a47a680be0); ?>
<?php ob_start(); ?>
<?php echo e($slot); ?>
<?php $__slotsd2493bdc3defe8869c6c05a47a680be0['slot'] = new \Illuminate\View\ComponentSlot(trim(ob_get_clean()), []); ?>
<?php $__blaze->pushSlots($__slotsd2493bdc3defe8869c6c05a47a680be0); ?>
<?php _d2493bdc3defe8869c6c05a47a680be0($__blaze, $__attrsd2493bdc3defe8869c6c05a47a680be0, $__slotsd2493bdc3defe8869c6c05a47a680be0, ['content', 'position', 'kbd'], [], $__this ?? (isset($this) ? $this : null)); ?>
<?php if (! empty($__slotsStackd2493bdc3defe8869c6c05a47a680be0)) { $__slotsd2493bdc3defe8869c6c05a47a680be0 = array_pop($__slotsStackd2493bdc3defe8869c6c05a47a680be0); } ?>
<?php if (! empty($__attrsStackd2493bdc3defe8869c6c05a47a680be0)) { $__attrsd2493bdc3defe8869c6c05a47a680be0 = array_pop($__attrsStackd2493bdc3defe8869c6c05a47a680be0); } ?>
<?php $__blaze->popData(); ?>
<?php else: ?>
<?php echo e($slot); ?>
<?php endif; ?>
<?php
echo ltrim(ob_get_clean());
} endif; ?><?php /**PATH /Users/mag/Sites/WMS/Core/vendor/livewire/flux/src/../stubs/resources/views/flux/with-tooltip.blade.php ENDPATH**/ ?>
@@ -1,147 +0,0 @@
<?php if (isset($component)) { $__componentOriginal81a506f898233b9e7d58286e6bea3c18 = $component; } ?>
<?php if (isset($attributes)) { $__attributesOriginal81a506f898233b9e7d58286e6bea3c18 = $attributes; } ?>
<?php $component = Illuminate\View\AnonymousComponent::resolve(['view' => 'f4ac99e09542ff494432bc959d4fee61::app','data' => ['title' => __('Shipping')]] + (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag ? $attributes->all() : [])); ?>
<?php $component->withName('layouts::app'); ?>
<?php if ($component->shouldRender()): ?>
<?php $__env->startComponent($component->resolveView(), $component->data()); ?>
<?php if (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag): ?>
<?php $attributes = $attributes->except(\Illuminate\View\AnonymousComponent::ignoredParameterNames()); ?>
<?php endif; ?>
<?php $component->withAttributes(['title' => \Illuminate\View\Compilers\BladeCompiler::sanitizeComponentAttribute(__('Shipping'))]); ?>
<?php \Livewire\Features\SupportCompiledWireKeys\SupportCompiledWireKeys::processComponentKey($component); ?>
<div class="container-fluid py-4 module-page module-shipping">
<div class="row g-4">
<div class="col-12">
<?php if (isset($component)) { $__componentOriginal9c6e3f23e2ced4034a039852a77e1e96 = $component; } ?>
<?php if (isset($attributes)) { $__attributesOriginal9c6e3f23e2ced4034a039852a77e1e96 = $attributes; } ?>
<?php $component = Illuminate\View\AnonymousComponent::resolve(['view' => 'components.wms.page-hero','data' => ['eyebrow' => 'Operations','title' => 'Shipping','description' => 'Monitor shipment activity, closed orders, pending loads, and dispatch status.','icon' => 'fa-solid fa-truck-fast']] + (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag ? $attributes->all() : [])); ?>
<?php $component->withName('wms.page-hero'); ?>
<?php if ($component->shouldRender()): ?>
<?php $__env->startComponent($component->resolveView(), $component->data()); ?>
<?php if (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag): ?>
<?php $attributes = $attributes->except(\Illuminate\View\AnonymousComponent::ignoredParameterNames()); ?>
<?php endif; ?>
<?php $component->withAttributes(['eyebrow' => 'Operations','title' => 'Shipping','description' => 'Monitor shipment activity, closed orders, pending loads, and dispatch status.','icon' => 'fa-solid fa-truck-fast']); ?>
<?php \Livewire\Features\SupportCompiledWireKeys\SupportCompiledWireKeys::processComponentKey($component); ?>
<?php echo $__env->renderComponent(); ?>
<?php endif; ?>
<?php if (isset($__attributesOriginal9c6e3f23e2ced4034a039852a77e1e96)): ?>
<?php $attributes = $__attributesOriginal9c6e3f23e2ced4034a039852a77e1e96; ?>
<?php unset($__attributesOriginal9c6e3f23e2ced4034a039852a77e1e96); ?>
<?php endif; ?>
<?php if (isset($__componentOriginal9c6e3f23e2ced4034a039852a77e1e96)): ?>
<?php $component = $__componentOriginal9c6e3f23e2ced4034a039852a77e1e96; ?>
<?php unset($__componentOriginal9c6e3f23e2ced4034a039852a77e1e96); ?>
<?php endif; ?>
</div>
<div class="col-md-6 col-xl-3">
<div class="card h-100 border-0 shadow-sm module-metric-card">
<div class="card-body">
<div class="small text-uppercase text-muted fw-semibold mb-2">01</div>
<h3 class="h6 mb-2">Open Shipments</h3>
<p class="small text-muted mb-0">Placeholder area for open shipments.</p>
</div>
</div>
</div>
<div class="col-md-6 col-xl-3">
<div class="card h-100 border-0 shadow-sm module-metric-card">
<div class="card-body">
<div class="small text-uppercase text-muted fw-semibold mb-2">02</div>
<h3 class="h6 mb-2">Closed Orders</h3>
<p class="small text-muted mb-0">Placeholder area for closed orders.</p>
</div>
</div>
</div>
<div class="col-md-6 col-xl-3">
<div class="card h-100 border-0 shadow-sm module-metric-card">
<div class="card-body">
<div class="small text-uppercase text-muted fw-semibold mb-2">03</div>
<h3 class="h6 mb-2">Shipment Close Calls</h3>
<p class="small text-muted mb-0">Placeholder area for shipment close calls.</p>
</div>
</div>
</div>
<div class="col-md-6 col-xl-3">
<div class="card h-100 border-0 shadow-sm module-metric-card">
<div class="card-body">
<div class="small text-uppercase text-muted fw-semibold mb-2">04</div>
<h3 class="h6 mb-2">Dispatch Exceptions</h3>
<p class="small text-muted mb-0">Placeholder area for dispatch exceptions.</p>
</div>
</div>
</div>
<div class="col-12">
<section class="card border-0 shadow-sm">
<div class="card-header bg-white border-bottom">
<div class="d-flex flex-column flex-md-row justify-content-between gap-2">
<div>
<h2 class="h5 mb-1">Shipping workbench</h2>
<p class="small text-muted mb-0">Sample table layout ready to wire into controllers, queries, DataTables, or Livewire.</p>
</div>
<div class="d-flex gap-2">
<button type="button" class="btn btn-outline-secondary btn-sm">Export</button>
<button type="button" class="btn btn-primary btn-sm">Create</button>
</div>
</div>
</div>
<div class="card-body">
<div class="table-responsive">
<table class="table table-hover align-middle mb-0">
<thead class="table-light">
<tr>
<th>Shipment</th>
<th>Order</th>
<th>Customer</th>
<th class="text-end">Action</th>
</tr>
</thead>
<tbody>
<tr>
<td>Open Shipments</td>
<td>Sample 1</td>
<td><span class="badge bg-success-subtle text-success border border-success-subtle">Active</span></td>
<td class="text-end"><a href="#" class="btn btn-sm btn-outline-primary">Open</a></td>
</tr>
<tr>
<td>Closed Orders</td>
<td>Sample 2</td>
<td><span class="badge bg-success-subtle text-success border border-success-subtle">Active</span></td>
<td class="text-end"><a href="#" class="btn btn-sm btn-outline-primary">Open</a></td>
</tr>
<tr>
<td>Shipment Close Calls</td>
<td>Sample 3</td>
<td><span class="badge bg-success-subtle text-success border border-success-subtle">Active</span></td>
<td class="text-end"><a href="#" class="btn btn-sm btn-outline-primary">Open</a></td>
</tr>
<tr>
<td>Dispatch Exceptions</td>
<td>Sample 4</td>
<td><span class="badge bg-success-subtle text-success border border-success-subtle">Active</span></td>
<td class="text-end"><a href="#" class="btn btn-sm btn-outline-primary">Open</a></td>
</tr>
</tbody>
</table>
</div>
</div>
</section>
</div>
</div>
</div>
<?php echo $__env->renderComponent(); ?>
<?php endif; ?>
<?php if (isset($__attributesOriginal81a506f898233b9e7d58286e6bea3c18)): ?>
<?php $attributes = $__attributesOriginal81a506f898233b9e7d58286e6bea3c18; ?>
<?php unset($__attributesOriginal81a506f898233b9e7d58286e6bea3c18); ?>
<?php endif; ?>
<?php if (isset($__componentOriginal81a506f898233b9e7d58286e6bea3c18)): ?>
<?php $component = $__componentOriginal81a506f898233b9e7d58286e6bea3c18; ?>
<?php unset($__componentOriginal81a506f898233b9e7d58286e6bea3c18); ?>
<?php endif; ?>
<?php /**PATH /Users/mag/Sites/WMS/Core/Modules/Shipping/Providers/../Resources/views/index.blade.php ENDPATH**/ ?>
@@ -1,64 +0,0 @@
---
name: fluxui-development
description: "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."
license: MIT
metadata:
author: laravel
---
@php
/** @var \Laravel\Boost\Install\GuidelineAssist $assist */
@endphp
# Flux UI Development
## Documentation
Use ___SINGLE_BACKTICK___search-docs___SINGLE_BACKTICK___ for detailed Flux UI patterns and documentation.
## Basic Usage
This project uses the free edition of Flux UI, which includes all free components and variants but not Pro components.
Flux UI is a component library for Livewire built with Tailwind CSS. It provides components that are easy to use and customize.
Use Flux UI components when available. Fall back to standard Blade components when no Flux component exists for your needs.
___BOOST_SNIPPET_0___
## Available Components (Free Edition)
Available: avatar, badge, brand, breadcrumbs, button, callout, card, checkbox, dropdown, field, heading, icon, input, modal, navbar, otp-input, pagination, profile, progress, radio, select, separator, skeleton, switch, table, text, textarea, toast, tooltip
## Icons
Flux includes [Heroicons](https://heroicons.com/) as its default icon set. Search for exact icon names on the Heroicons site - do not guess or invent icon names.
___BOOST_SNIPPET_1___
For icons not available in Heroicons, use [Lucide](https://lucide.dev/). Import the icons you need with the Artisan command:
___SINGLE_BACKTICK______SINGLE_BACKTICK______SINGLE_BACKTICK___bash
{{ $assist->artisanCommand('flux:icon crown grip-vertical github') }}
___SINGLE_BACKTICK______SINGLE_BACKTICK______SINGLE_BACKTICK___
## Common Patterns
### Form Fields
___BOOST_SNIPPET_2___
### Modals
___BOOST_SNIPPET_3___
## Verification
1. Check component renders correctly
2. Test interactive states
3. Verify mobile responsiveness
## Common Pitfalls
- Trying to use Pro-only components in the free edition
- Not checking if a Flux component exists before creating custom implementations
- Forgetting to use the ___SINGLE_BACKTICK___search-docs___SINGLE_BACKTICK___ tool for component-specific documentation
- Not following existing project patterns for Flux usage
@@ -1,62 +0,0 @@
<?php if (isset($component)) { $__componentOriginal81a506f898233b9e7d58286e6bea3c18 = $component; } ?>
<?php if (isset($attributes)) { $__attributesOriginal81a506f898233b9e7d58286e6bea3c18 = $attributes; } ?>
<?php $component = Illuminate\View\AnonymousComponent::resolve(['view' => 'f4ac99e09542ff494432bc959d4fee61::app','data' => ['title' => __('Licence Keys')]] + (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag ? $attributes->all() : [])); ?>
<?php $component->withName('layouts::app'); ?>
<?php if ($component->shouldRender()): ?>
<?php $__env->startComponent($component->resolveView(), $component->data()); ?>
<?php if (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag): ?>
<?php $attributes = $attributes->except(\Illuminate\View\AnonymousComponent::ignoredParameterNames()); ?>
<?php endif; ?>
<?php $component->withAttributes(['title' => \Illuminate\View\Compilers\BladeCompiler::sanitizeComponentAttribute(__('Licence Keys'))]); ?>
<?php \Livewire\Features\SupportCompiledWireKeys\SupportCompiledWireKeys::processComponentKey($component); ?>
<div class="space-y-6">
<?php if (isset($component)) { $__componentOriginal9c6e3f23e2ced4034a039852a77e1e96 = $component; } ?>
<?php if (isset($attributes)) { $__attributesOriginal9c6e3f23e2ced4034a039852a77e1e96 = $attributes; } ?>
<?php $component = Illuminate\View\AnonymousComponent::resolve(['view' => 'components.wms.page-hero','data' => ['eyebrow' => 'Platform Administration','title' => 'Licence Keys','description' => 'Issue and monitor company licence keys, limits and platform access plans.','icon' => 'fa-solid fa-key']] + (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag ? $attributes->all() : [])); ?>
<?php $component->withName('wms.page-hero'); ?>
<?php if ($component->shouldRender()): ?>
<?php $__env->startComponent($component->resolveView(), $component->data()); ?>
<?php if (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag): ?>
<?php $attributes = $attributes->except(\Illuminate\View\AnonymousComponent::ignoredParameterNames()); ?>
<?php endif; ?>
<?php $component->withAttributes(['eyebrow' => 'Platform Administration','title' => 'Licence Keys','description' => 'Issue and monitor company licence keys, limits and platform access plans.','icon' => 'fa-solid fa-key']); ?>
<?php \Livewire\Features\SupportCompiledWireKeys\SupportCompiledWireKeys::processComponentKey($component); ?>
<?php echo $__env->renderComponent(); ?>
<?php endif; ?>
<?php if (isset($__attributesOriginal9c6e3f23e2ced4034a039852a77e1e96)): ?>
<?php $attributes = $__attributesOriginal9c6e3f23e2ced4034a039852a77e1e96; ?>
<?php unset($__attributesOriginal9c6e3f23e2ced4034a039852a77e1e96); ?>
<?php endif; ?>
<?php if (isset($__componentOriginal9c6e3f23e2ced4034a039852a77e1e96)): ?>
<?php $component = $__componentOriginal9c6e3f23e2ced4034a039852a77e1e96; ?>
<?php unset($__componentOriginal9c6e3f23e2ced4034a039852a77e1e96); ?>
<?php endif; ?>
<?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if BLOCK]><![endif]--><?php endif; ?><?php if($plainKey): ?><div class="rounded-2xl bg-emerald-50 p-4 text-emerald-900 ring-1 ring-emerald-200">New key: <code class="font-bold"><?php echo e($plainKey); ?></code></div><?php endif; ?><?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if ENDBLOCK]><![endif]--><?php endif; ?>
<div class="rounded-3xl bg-white p-6 shadow-sm ring-1 ring-zinc-200 dark:bg-zinc-900 dark:ring-zinc-800">
<h2 class="text-lg font-bold text-zinc-900 dark:text-white">Issue licence key</h2>
<form method="POST" action="<?php echo e(route('platform.licenses.store')); ?>" class="mt-5 grid gap-4 md:grid-cols-5">
<?php echo csrf_field(); ?>
<select name="company_id" class="rounded-xl border-zinc-300 dark:border-zinc-700 dark:bg-zinc-950"><?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if BLOCK]><![endif]--><?php \Livewire\Features\SupportCompiledWireKeys\SupportCompiledWireKeys::openLoop(); ?><?php endif; ?><?php $__currentLoopData = $companies; $__env->addLoop($__currentLoopData); foreach($__currentLoopData as $company): $__env->incrementLoopIndices(); $loop = $__env->getLastLoop(); ?><?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><?php \Livewire\Features\SupportCompiledWireKeys\SupportCompiledWireKeys::startLoopIteration(); ?><?php endif; ?><option value="<?php echo e($company->id); ?>"><?php echo e($company->name); ?></option><?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><?php \Livewire\Features\SupportCompiledWireKeys\SupportCompiledWireKeys::endLoop(); ?><?php endif; ?><?php endforeach; $__env->popLoop(); $loop = $__env->getLastLoop(); ?><?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if ENDBLOCK]><![endif]--><?php \Livewire\Features\SupportCompiledWireKeys\SupportCompiledWireKeys::closeLoop(); ?><?php endif; ?></select>
<input name="label" placeholder="Licence label" class="rounded-xl border-zinc-300 dark:border-zinc-700 dark:bg-zinc-950" required>
<select name="plan" class="rounded-xl border-zinc-300 dark:border-zinc-700 dark:bg-zinc-950"><option>standard</option><option>professional</option><option>enterprise</option></select>
<input name="max_users" type="number" value="10" class="rounded-xl border-zinc-300 dark:border-zinc-700 dark:bg-zinc-950" required>
<button class="rounded-xl bg-zinc-900 px-4 py-2 font-semibold text-white dark:bg-white dark:text-zinc-900">Issue</button>
</form>
</div>
<div class="overflow-x-auto rounded-2xl bg-white shadow-sm ring-1 ring-zinc-200 dark:bg-zinc-900 dark:ring-zinc-800"><table class="min-w-full text-sm"><thead><tr class="border-b"><th class="p-4 text-left">Company</th><th class="p-4 text-left">Label</th><th class="p-4 text-left">Plan</th><th class="p-4 text-left">Prefix</th><th class="p-4 text-left">Expires</th></tr></thead><tbody><?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if BLOCK]><![endif]--><?php \Livewire\Features\SupportCompiledWireKeys\SupportCompiledWireKeys::openLoop(); ?><?php endif; ?><?php $__currentLoopData = $licenses; $__env->addLoop($__currentLoopData); foreach($__currentLoopData as $license): $__env->incrementLoopIndices(); $loop = $__env->getLastLoop(); ?><?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><?php \Livewire\Features\SupportCompiledWireKeys\SupportCompiledWireKeys::startLoopIteration(); ?><?php endif; ?><tr class="border-b border-zinc-100 dark:border-zinc-800"><td class="p-4"><?php echo e($license->company->name); ?></td><td class="p-4 font-semibold"><?php echo e($license->label); ?></td><td class="p-4"><?php echo e($license->plan); ?></td><td class="p-4"><code><?php echo e($license->key_prefix); ?></code></td><td class="p-4"><?php echo e(optional($license->expires_at)->toDateString()); ?></td></tr><?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><?php \Livewire\Features\SupportCompiledWireKeys\SupportCompiledWireKeys::endLoop(); ?><?php endif; ?><?php endforeach; $__env->popLoop(); $loop = $__env->getLastLoop(); ?><?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if ENDBLOCK]><![endif]--><?php \Livewire\Features\SupportCompiledWireKeys\SupportCompiledWireKeys::closeLoop(); ?><?php endif; ?></tbody></table></div>
<?php echo e($licenses->links()); ?>
</div>
<?php echo $__env->renderComponent(); ?>
<?php endif; ?>
<?php if (isset($__attributesOriginal81a506f898233b9e7d58286e6bea3c18)): ?>
<?php $attributes = $__attributesOriginal81a506f898233b9e7d58286e6bea3c18; ?>
<?php unset($__attributesOriginal81a506f898233b9e7d58286e6bea3c18); ?>
<?php endif; ?>
<?php if (isset($__componentOriginal81a506f898233b9e7d58286e6bea3c18)): ?>
<?php $component = $__componentOriginal81a506f898233b9e7d58286e6bea3c18; ?>
<?php unset($__componentOriginal81a506f898233b9e7d58286e6bea3c18); ?>
<?php endif; ?>
<?php /**PATH /Users/mag/Sites/WMS/Core/Modules/Platform/Providers/../resources/views/licenses/index.blade.php ENDPATH**/ ?>
@@ -1,147 +0,0 @@
<?php if (isset($component)) { $__componentOriginal81a506f898233b9e7d58286e6bea3c18 = $component; } ?>
<?php if (isset($attributes)) { $__attributesOriginal81a506f898233b9e7d58286e6bea3c18 = $attributes; } ?>
<?php $component = Illuminate\View\AnonymousComponent::resolve(['view' => 'f4ac99e09542ff494432bc959d4fee61::app','data' => ['title' => __('M3 Integration')]] + (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag ? $attributes->all() : [])); ?>
<?php $component->withName('layouts::app'); ?>
<?php if ($component->shouldRender()): ?>
<?php $__env->startComponent($component->resolveView(), $component->data()); ?>
<?php if (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag): ?>
<?php $attributes = $attributes->except(\Illuminate\View\AnonymousComponent::ignoredParameterNames()); ?>
<?php endif; ?>
<?php $component->withAttributes(['title' => \Illuminate\View\Compilers\BladeCompiler::sanitizeComponentAttribute(__('M3 Integration'))]); ?>
<?php \Livewire\Features\SupportCompiledWireKeys\SupportCompiledWireKeys::processComponentKey($component); ?>
<div class="container-fluid py-4 module-page module-m3-integration">
<div class="row g-4">
<div class="col-12">
<?php if (isset($component)) { $__componentOriginal9c6e3f23e2ced4034a039852a77e1e96 = $component; } ?>
<?php if (isset($attributes)) { $__attributesOriginal9c6e3f23e2ced4034a039852a77e1e96 = $attributes; } ?>
<?php $component = Illuminate\View\AnonymousComponent::resolve(['view' => 'components.wms.page-hero','data' => ['eyebrow' => 'Operations','title' => 'M3 Integration','description' => 'Observe M3 transactions, delivery methods, close shipment calls, and API exchanges.','icon' => 'fa-solid fa-server']] + (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag ? $attributes->all() : [])); ?>
<?php $component->withName('wms.page-hero'); ?>
<?php if ($component->shouldRender()): ?>
<?php $__env->startComponent($component->resolveView(), $component->data()); ?>
<?php if (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag): ?>
<?php $attributes = $attributes->except(\Illuminate\View\AnonymousComponent::ignoredParameterNames()); ?>
<?php endif; ?>
<?php $component->withAttributes(['eyebrow' => 'Operations','title' => 'M3 Integration','description' => 'Observe M3 transactions, delivery methods, close shipment calls, and API exchanges.','icon' => 'fa-solid fa-server']); ?>
<?php \Livewire\Features\SupportCompiledWireKeys\SupportCompiledWireKeys::processComponentKey($component); ?>
<?php echo $__env->renderComponent(); ?>
<?php endif; ?>
<?php if (isset($__attributesOriginal9c6e3f23e2ced4034a039852a77e1e96)): ?>
<?php $attributes = $__attributesOriginal9c6e3f23e2ced4034a039852a77e1e96; ?>
<?php unset($__attributesOriginal9c6e3f23e2ced4034a039852a77e1e96); ?>
<?php endif; ?>
<?php if (isset($__componentOriginal9c6e3f23e2ced4034a039852a77e1e96)): ?>
<?php $component = $__componentOriginal9c6e3f23e2ced4034a039852a77e1e96; ?>
<?php unset($__componentOriginal9c6e3f23e2ced4034a039852a77e1e96); ?>
<?php endif; ?>
</div>
<div class="col-md-6 col-xl-3">
<div class="card h-100 border-0 shadow-sm module-metric-card">
<div class="card-body">
<div class="small text-uppercase text-muted fw-semibold mb-2">01</div>
<h3 class="h6 mb-2">M3 Transaction Log</h3>
<p class="small text-muted mb-0">Placeholder area for m3 transaction log.</p>
</div>
</div>
</div>
<div class="col-md-6 col-xl-3">
<div class="card h-100 border-0 shadow-sm module-metric-card">
<div class="card-body">
<div class="small text-uppercase text-muted fw-semibold mb-2">02</div>
<h3 class="h6 mb-2">M3 Delivery Methods</h3>
<p class="small text-muted mb-0">Placeholder area for m3 delivery methods.</p>
</div>
</div>
</div>
<div class="col-md-6 col-xl-3">
<div class="card h-100 border-0 shadow-sm module-metric-card">
<div class="card-body">
<div class="small text-uppercase text-muted fw-semibold mb-2">03</div>
<h3 class="h6 mb-2">Close Shipment API</h3>
<p class="small text-muted mb-0">Placeholder area for close shipment api.</p>
</div>
</div>
</div>
<div class="col-md-6 col-xl-3">
<div class="card h-100 border-0 shadow-sm module-metric-card">
<div class="card-body">
<div class="small text-uppercase text-muted fw-semibold mb-2">04</div>
<h3 class="h6 mb-2">M3 Error Queue</h3>
<p class="small text-muted mb-0">Placeholder area for m3 error queue.</p>
</div>
</div>
</div>
<div class="col-12">
<section class="card border-0 shadow-sm">
<div class="card-header bg-white border-bottom">
<div class="d-flex flex-column flex-md-row justify-content-between gap-2">
<div>
<h2 class="h5 mb-1">M3 Integration workbench</h2>
<p class="small text-muted mb-0">Sample table layout ready to wire into controllers, queries, DataTables, or Livewire.</p>
</div>
<div class="d-flex gap-2">
<button type="button" class="btn btn-outline-secondary btn-sm">Export</button>
<button type="button" class="btn btn-primary btn-sm">Create</button>
</div>
</div>
</div>
<div class="card-body">
<div class="table-responsive">
<table class="table table-hover align-middle mb-0">
<thead class="table-light">
<tr>
<th>Transaction</th>
<th>Program</th>
<th>Message</th>
<th class="text-end">Action</th>
</tr>
</thead>
<tbody>
<tr>
<td>M3 Transaction Log</td>
<td>Sample 1</td>
<td><span class="badge bg-success-subtle text-success border border-success-subtle">Active</span></td>
<td class="text-end"><a href="#" class="btn btn-sm btn-outline-primary">Open</a></td>
</tr>
<tr>
<td>M3 Delivery Methods</td>
<td>Sample 2</td>
<td><span class="badge bg-success-subtle text-success border border-success-subtle">Active</span></td>
<td class="text-end"><a href="#" class="btn btn-sm btn-outline-primary">Open</a></td>
</tr>
<tr>
<td>Close Shipment API</td>
<td>Sample 3</td>
<td><span class="badge bg-success-subtle text-success border border-success-subtle">Active</span></td>
<td class="text-end"><a href="#" class="btn btn-sm btn-outline-primary">Open</a></td>
</tr>
<tr>
<td>M3 Error Queue</td>
<td>Sample 4</td>
<td><span class="badge bg-success-subtle text-success border border-success-subtle">Active</span></td>
<td class="text-end"><a href="#" class="btn btn-sm btn-outline-primary">Open</a></td>
</tr>
</tbody>
</table>
</div>
</div>
</section>
</div>
</div>
</div>
<?php echo $__env->renderComponent(); ?>
<?php endif; ?>
<?php if (isset($__attributesOriginal81a506f898233b9e7d58286e6bea3c18)): ?>
<?php $attributes = $__attributesOriginal81a506f898233b9e7d58286e6bea3c18; ?>
<?php unset($__attributesOriginal81a506f898233b9e7d58286e6bea3c18); ?>
<?php endif; ?>
<?php if (isset($__componentOriginal81a506f898233b9e7d58286e6bea3c18)): ?>
<?php $component = $__componentOriginal81a506f898233b9e7d58286e6bea3c18; ?>
<?php unset($__componentOriginal81a506f898233b9e7d58286e6bea3c18); ?>
<?php endif; ?>
<?php /**PATH /Users/mag/Sites/WMS/Core/Modules/M3Integration/Providers/../Resources/views/index.blade.php ENDPATH**/ ?>
@@ -1,5 +0,0 @@
# Livewire
- Livewire allow to build dynamic, reactive interfaces in PHP without writing JavaScript.
- You can use Alpine.js for client-side interactions instead of JavaScript frameworks.
- Keep state server-side so the UI reflects it. Validate and authorize in actions as you would in HTTP requests.
@@ -1,45 +0,0 @@
@php
/** @var \Laravel\Boost\Install\GuidelineAssist $assist */
@endphp
# Laravel Boost Guidelines
The Laravel Boost guidelines are specifically curated by Laravel maintainers for this application. These guidelines should be followed closely to ensure the best experience when building Laravel applications.
## Foundational Context
This application is a Laravel application and its main Laravel ecosystems package & versions are below. You are an expert with them all. Ensure you abide by these specific packages & versions.
- php - {{ PHP_MAJOR_VERSION }}.{{ PHP_MINOR_VERSION }}
@foreach (app(\Laravel\Roster\Roster::class)->packages()->unique(fn ($package) => $package->rawName()) as $package)
- {{ $package->rawName() }} ({{ $package->name() }}) - v{{ $package->majorVersion() }}
@endforeach
@if (! empty(config('boost.purpose')))
Application purpose: {!! config('boost.purpose') !!}
@endif
@if($assist->hasSkillsEnabled())
## Skills Activation
This project has domain-specific skills available in ___SINGLE_BACKTICK___**/skills/**___SINGLE_BACKTICK___. You MUST activate the relevant skill whenever you work in that domain—don't wait until you're stuck.
@endif
## Conventions
- You must follow all existing code conventions used in this application. When creating or editing a file, check sibling files for the correct structure, approach, and naming.
- Use descriptive names for variables and methods. For example, ___SINGLE_BACKTICK___isRegisteredForDiscounts___SINGLE_BACKTICK___, not ___SINGLE_BACKTICK___discount()___SINGLE_BACKTICK___.
- Check for existing components to reuse before writing a new one.
## Verification Scripts
- Do not create verification scripts or tinker when tests cover that functionality and prove they work. Unit and feature tests are more important.
## Application Structure & Architecture
- Stick to existing directory structure; don't create new base folders without approval.
- Do not change the application's dependencies without approval.
## Frontend Bundling
- If the user doesn't see a frontend change reflected in the UI, it could mean they need to run ___SINGLE_BACKTICK___{{ $assist->nodePackageManagerCommand('run build') }}___SINGLE_BACKTICK___, ___SINGLE_BACKTICK___{{ $assist->nodePackageManagerCommand('run dev') }}___SINGLE_BACKTICK___, or ___SINGLE_BACKTICK___{{ $assist->composerCommand('run dev') }}___SINGLE_BACKTICK___. Ask them.
## Documentation Files
- You must only create documentation files if explicitly requested by the user.
## Replies
- Be concise in your explanations - focus on what's important rather than explaining obvious details.
@@ -1,167 +0,0 @@
<?php if (isset($component)) { $__componentOriginal81a506f898233b9e7d58286e6bea3c18 = $component; } ?>
<?php if (isset($attributes)) { $__attributesOriginal81a506f898233b9e7d58286e6bea3c18 = $attributes; } ?>
<?php $component = Illuminate\View\AnonymousComponent::resolve(['view' => 'f4ac99e09542ff494432bc959d4fee61::app','data' => ['title' => __('Platform')]] + (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag ? $attributes->all() : [])); ?>
<?php $component->withName('layouts::app'); ?>
<?php if ($component->shouldRender()): ?>
<?php $__env->startComponent($component->resolveView(), $component->data()); ?>
<?php if (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag): ?>
<?php $attributes = $attributes->except(\Illuminate\View\AnonymousComponent::ignoredParameterNames()); ?>
<?php endif; ?>
<?php $component->withAttributes(['title' => \Illuminate\View\Compilers\BladeCompiler::sanitizeComponentAttribute(__('Platform'))]); ?>
<?php \Livewire\Features\SupportCompiledWireKeys\SupportCompiledWireKeys::processComponentKey($component); ?>
<div class="space-y-6">
<?php if (isset($component)) { $__componentOriginal9c6e3f23e2ced4034a039852a77e1e96 = $component; } ?>
<?php if (isset($attributes)) { $__attributesOriginal9c6e3f23e2ced4034a039852a77e1e96 = $attributes; } ?>
<?php $component = Illuminate\View\AnonymousComponent::resolve(['view' => 'components.wms.page-hero','data' => ['eyebrow' => 'Platform','title' => 'Platform Dashboard','description' => 'System-level tenant, licensing, warehouse and pricing overview for MPBA administrators.','stats' => [
['label' => 'Companies', 'value' => $companiesCount, 'icon' => 'fa-solid fa-building'],
['label' => 'Active', 'value' => $activeCompaniesCount, 'icon' => 'fa-solid fa-circle-check'],
['label' => 'Prices', 'value' => $pricesCount, 'icon' => 'fa-solid fa-tags'],
]]] + (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag ? $attributes->all() : [])); ?>
<?php $component->withName('wms.page-hero'); ?>
<?php if ($component->shouldRender()): ?>
<?php $__env->startComponent($component->resolveView(), $component->data()); ?>
<?php if (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag): ?>
<?php $attributes = $attributes->except(\Illuminate\View\AnonymousComponent::ignoredParameterNames()); ?>
<?php endif; ?>
<?php $component->withAttributes(['eyebrow' => 'Platform','title' => 'Platform Dashboard','description' => 'System-level tenant, licensing, warehouse and pricing overview for MPBA administrators.','stats' => \Illuminate\View\Compilers\BladeCompiler::sanitizeComponentAttribute([
['label' => 'Companies', 'value' => $companiesCount, 'icon' => 'fa-solid fa-building'],
['label' => 'Active', 'value' => $activeCompaniesCount, 'icon' => 'fa-solid fa-circle-check'],
['label' => 'Prices', 'value' => $pricesCount, 'icon' => 'fa-solid fa-tags'],
])]); ?>
<?php \Livewire\Features\SupportCompiledWireKeys\SupportCompiledWireKeys::processComponentKey($component); ?>
<?php echo $__env->renderComponent(); ?>
<?php endif; ?>
<?php if (isset($__attributesOriginal9c6e3f23e2ced4034a039852a77e1e96)): ?>
<?php $attributes = $__attributesOriginal9c6e3f23e2ced4034a039852a77e1e96; ?>
<?php unset($__attributesOriginal9c6e3f23e2ced4034a039852a77e1e96); ?>
<?php endif; ?>
<?php if (isset($__componentOriginal9c6e3f23e2ced4034a039852a77e1e96)): ?>
<?php $component = $__componentOriginal9c6e3f23e2ced4034a039852a77e1e96; ?>
<?php unset($__componentOriginal9c6e3f23e2ced4034a039852a77e1e96); ?>
<?php endif; ?>
<section class="grid gap-4 sm:grid-cols-2 xl:grid-cols-5">
<?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if BLOCK]><![endif]--><?php \Livewire\Features\SupportCompiledWireKeys\SupportCompiledWireKeys::openLoop(); ?><?php endif; ?><?php $__currentLoopData = [['Companies', $companiesCount], ['Active', $activeCompaniesCount], ['Warehouses', $warehousesCount], ['Prices', $pricesCount], ['Licences', $licensesCount]]; $__env->addLoop($__currentLoopData); foreach($__currentLoopData as [$label, $value]): $__env->incrementLoopIndices(); $loop = $__env->getLastLoop(); ?><?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><?php \Livewire\Features\SupportCompiledWireKeys\SupportCompiledWireKeys::startLoopIteration(); ?><?php endif; ?>
<article class="rounded-2xl border border-zinc-200 bg-white p-5 shadow-sm dark:border-zinc-800 dark:bg-zinc-900">
<p class="text-sm text-zinc-500 dark:text-zinc-400"><?php echo e($label); ?></p>
<p class="mt-2 text-3xl font-bold text-zinc-900 dark:text-white"><?php echo e($value); ?></p>
</article>
<?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><?php \Livewire\Features\SupportCompiledWireKeys\SupportCompiledWireKeys::endLoop(); ?><?php endif; ?><?php endforeach; $__env->popLoop(); $loop = $__env->getLastLoop(); ?><?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if ENDBLOCK]><![endif]--><?php \Livewire\Features\SupportCompiledWireKeys\SupportCompiledWireKeys::closeLoop(); ?><?php endif; ?>
</section>
<section class="rounded-3xl border border-zinc-200 bg-white shadow-sm dark:border-zinc-800 dark:bg-zinc-900">
<div class="flex flex-col gap-3 border-b border-zinc-200 p-5 sm:flex-row sm:items-center sm:justify-between dark:border-zinc-800">
<div>
<p class="text-xs font-bold uppercase tracking-[0.28em] text-cyan-500">Platform</p>
<h2 class="mt-2 text-xl font-bold text-zinc-900 dark:text-white">Pricing plans</h2>
<p class="text-sm text-zinc-500">Customer-facing Basic, Advanced and Pro plan cards shown under Platform.</p>
</div>
<div class="flex flex-wrap gap-2">
<a href="<?php echo e(route('platform.pricing.index')); ?>" wire:navigate class="rounded-xl border border-zinc-200 px-4 py-2 text-sm font-semibold text-zinc-700 hover:border-cyan-400 hover:text-cyan-700 dark:border-zinc-700 dark:text-zinc-200">
View pricing
</a>
<a href="<?php echo e(route('platform.prices.index')); ?>" wire:navigate class="rounded-xl bg-cyan-500 px-4 py-2 text-sm font-bold text-slate-950 hover:bg-cyan-400">
Manage prices
</a>
</div>
</div>
<div class="grid gap-5 p-5 lg:grid-cols-3">
<?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if BLOCK]><![endif]--><?php \Livewire\Features\SupportCompiledWireKeys\SupportCompiledWireKeys::openLoop(); ?><?php endif; ?><?php $__empty_1 = true; $__currentLoopData = $prices; $__env->addLoop($__currentLoopData); foreach($__currentLoopData as $price): $__env->incrementLoopIndices(); $loop = $__env->getLastLoop(); $__empty_1 = false; ?><?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><?php \Livewire\Features\SupportCompiledWireKeys\SupportCompiledWireKeys::startLoopIteration(); ?><?php endif; ?>
<?php
$isBasic = $price->code === 'basic';
$isAdvanced = $price->code === 'advanced';
$headerClass = $isAdvanced
? 'from-cyan-500 to-blue-600'
: ($isBasic ? 'from-slate-700 to-slate-950' : 'from-indigo-600 to-violet-700');
$features = array_slice($price->featureRows(), 0, 3);
?>
<article class="overflow-hidden rounded-3xl border border-zinc-200 bg-white shadow-sm dark:border-zinc-800 dark:bg-zinc-950">
<div class="bg-gradient-to-br <?php echo e($headerClass); ?> p-5 text-white">
<div class="flex items-start justify-between gap-4">
<div>
<p class="text-xs font-bold uppercase tracking-[0.24em] text-white/70"><?php echo e($price->badge_label ?: 'Plan'); ?></p>
<h3 class="mt-2 text-2xl font-black tracking-tight"><?php echo e($price->name); ?></h3>
</div>
<span class="grid h-11 w-11 place-items-center rounded-2xl bg-white/15 text-lg backdrop-blur">
<i class="fa-solid <?php echo e($isBasic ? 'fa-box' : ($isAdvanced ? 'fa-layer-group' : 'fa-crown')); ?>" aria-hidden="true"></i>
</span>
</div>
<p class="mt-3 text-sm leading-6 text-white/80"><?php echo e($price->strapline); ?></p>
</div>
<div class="p-5">
<div class="flex items-end gap-2">
<span class="text-3xl font-black tracking-tight text-zinc-950 dark:text-white"><?php echo e($price->formatAmount($price->monthly_amount)); ?></span>
<span class="pb-1 text-xs font-semibold text-zinc-500">/ month</span>
</div>
<p class="mt-3 line-clamp-2 text-sm leading-6 text-zinc-600 dark:text-zinc-300"><?php echo e($price->description); ?></p>
<ul class="mt-4 space-y-2 text-sm text-zinc-700 dark:text-zinc-200">
<?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if BLOCK]><![endif]--><?php \Livewire\Features\SupportCompiledWireKeys\SupportCompiledWireKeys::openLoop(); ?><?php endif; ?><?php $__currentLoopData = $features; $__env->addLoop($__currentLoopData); foreach($__currentLoopData as $feature): $__env->incrementLoopIndices(); $loop = $__env->getLastLoop(); ?><?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><?php \Livewire\Features\SupportCompiledWireKeys\SupportCompiledWireKeys::startLoopIteration(); ?><?php endif; ?>
<li class="flex gap-3">
<i class="fa-solid fa-check mt-1 text-cyan-500" aria-hidden="true"></i>
<span><?php echo e($feature); ?></span>
</li>
<?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><?php \Livewire\Features\SupportCompiledWireKeys\SupportCompiledWireKeys::endLoop(); ?><?php endif; ?><?php endforeach; $__env->popLoop(); $loop = $__env->getLastLoop(); ?><?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if ENDBLOCK]><![endif]--><?php \Livewire\Features\SupportCompiledWireKeys\SupportCompiledWireKeys::closeLoop(); ?><?php endif; ?>
</ul>
</div>
</article>
<?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><?php \Livewire\Features\SupportCompiledWireKeys\SupportCompiledWireKeys::endLoop(); ?><?php endif; ?><?php endforeach; $__env->popLoop(); $loop = $__env->getLastLoop(); if ($__empty_1): ?><?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><?php \Livewire\Features\SupportCompiledWireKeys\SupportCompiledWireKeys::closeLoop(); ?><?php endif; ?>
<article class="rounded-2xl border border-dashed border-zinc-300 p-6 text-sm text-zinc-500 dark:border-zinc-700 lg:col-span-3">
No platform pricing plans have been published yet.
</article>
<?php endif; ?><?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if ENDBLOCK]><![endif]--><?php endif; ?>
</div>
</section>
<section class="rounded-2xl border border-zinc-200 bg-white shadow-sm dark:border-zinc-800 dark:bg-zinc-900">
<div class="flex flex-col gap-3 border-b border-zinc-200 p-5 sm:flex-row sm:items-center sm:justify-between dark:border-zinc-800">
<div>
<h2 class="text-lg font-semibold text-zinc-900 dark:text-white">Recent companies</h2>
<p class="text-sm text-zinc-500">Tenant isolation is enforced by company ownership on every warehouse record.</p>
</div>
<a href="<?php echo e(route('platform.companies.index')); ?>" wire:navigate class="rounded-lg bg-zinc-900 px-4 py-2 text-sm font-semibold text-white dark:bg-white dark:text-zinc-900">
Manage companies
</a>
</div>
<div class="overflow-x-auto">
<table class="min-w-full divide-y divide-zinc-200 text-sm dark:divide-zinc-800">
<thead class="bg-zinc-50 dark:bg-zinc-950">
<tr>
<th class="px-5 py-3 text-left font-semibold">Company</th>
<th class="px-5 py-3 text-left font-semibold">Users</th>
<th class="px-5 py-3 text-left font-semibold">Warehouses</th>
<th class="px-5 py-3 text-left font-semibold">Licences</th>
<th class="px-5 py-3 text-left font-semibold">Status</th>
</tr>
</thead>
<tbody class="divide-y divide-zinc-200 dark:divide-zinc-800">
<?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if BLOCK]><![endif]--><?php \Livewire\Features\SupportCompiledWireKeys\SupportCompiledWireKeys::openLoop(); ?><?php endif; ?><?php $__currentLoopData = $companies; $__env->addLoop($__currentLoopData); foreach($__currentLoopData as $company): $__env->incrementLoopIndices(); $loop = $__env->getLastLoop(); ?><?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><?php \Livewire\Features\SupportCompiledWireKeys\SupportCompiledWireKeys::startLoopIteration(); ?><?php endif; ?>
<tr>
<td class="px-5 py-4 font-medium"><?php echo e($company->name); ?></td>
<td class="px-5 py-4"><?php echo e($company->users_count); ?></td>
<td class="px-5 py-4"><?php echo e($company->warehouses_count); ?></td>
<td class="px-5 py-4"><?php echo e($company->license_keys_count); ?></td>
<td class="px-5 py-4"><?php echo e($company->is_system_company ? 'System' : ucfirst($company->status)); ?></td>
</tr>
<?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><?php \Livewire\Features\SupportCompiledWireKeys\SupportCompiledWireKeys::endLoop(); ?><?php endif; ?><?php endforeach; $__env->popLoop(); $loop = $__env->getLastLoop(); ?><?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if ENDBLOCK]><![endif]--><?php \Livewire\Features\SupportCompiledWireKeys\SupportCompiledWireKeys::closeLoop(); ?><?php endif; ?>
</tbody>
</table>
</div>
</section>
</div>
<?php echo $__env->renderComponent(); ?>
<?php endif; ?>
<?php if (isset($__attributesOriginal81a506f898233b9e7d58286e6bea3c18)): ?>
<?php $attributes = $__attributesOriginal81a506f898233b9e7d58286e6bea3c18; ?>
<?php unset($__attributesOriginal81a506f898233b9e7d58286e6bea3c18); ?>
<?php endif; ?>
<?php if (isset($__componentOriginal81a506f898233b9e7d58286e6bea3c18)): ?>
<?php $component = $__componentOriginal81a506f898233b9e7d58286e6bea3c18; ?>
<?php unset($__componentOriginal81a506f898233b9e7d58286e6bea3c18); ?>
<?php endif; ?>
<?php /**PATH /Users/mag/Sites/WMS/Core/Modules/Platform/Providers/../resources/views/dashboard/index.blade.php ENDPATH**/ ?>
@@ -1,62 +0,0 @@
<?php if (isset($component)) { $__componentOriginal81a506f898233b9e7d58286e6bea3c18 = $component; } ?>
<?php if (isset($attributes)) { $__attributesOriginal81a506f898233b9e7d58286e6bea3c18 = $attributes; } ?>
<?php $component = Illuminate\View\AnonymousComponent::resolve(['view' => 'f4ac99e09542ff494432bc959d4fee61::app','data' => ['title' => __('Validation Rules')]] + (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag ? $attributes->all() : [])); ?>
<?php $component->withName('layouts::app'); ?>
<?php if ($component->shouldRender()): ?>
<?php $__env->startComponent($component->resolveView(), $component->data()); ?>
<?php if (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag): ?>
<?php $attributes = $attributes->except(\Illuminate\View\AnonymousComponent::ignoredParameterNames()); ?>
<?php endif; ?>
<?php $component->withAttributes(['title' => \Illuminate\View\Compilers\BladeCompiler::sanitizeComponentAttribute(__('Validation Rules'))]); ?>
<?php \Livewire\Features\SupportCompiledWireKeys\SupportCompiledWireKeys::processComponentKey($component); ?>
<div class="space-y-6">
<?php if (isset($component)) { $__componentOriginal9c6e3f23e2ced4034a039852a77e1e96 = $component; } ?>
<?php if (isset($attributes)) { $__attributesOriginal9c6e3f23e2ced4034a039852a77e1e96 = $attributes; } ?>
<?php $component = Illuminate\View\AnonymousComponent::resolve(['view' => 'components.wms.page-hero','data' => ['eyebrow' => 'Administration','title' => 'Validation Rules','description' => 'Configure warehouse validation controls, severity levels and operational rule keys.','icon' => 'fa-solid fa-shield-halved']] + (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag ? $attributes->all() : [])); ?>
<?php $component->withName('wms.page-hero'); ?>
<?php if ($component->shouldRender()): ?>
<?php $__env->startComponent($component->resolveView(), $component->data()); ?>
<?php if (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag): ?>
<?php $attributes = $attributes->except(\Illuminate\View\AnonymousComponent::ignoredParameterNames()); ?>
<?php endif; ?>
<?php $component->withAttributes(['eyebrow' => 'Administration','title' => 'Validation Rules','description' => 'Configure warehouse validation controls, severity levels and operational rule keys.','icon' => 'fa-solid fa-shield-halved']); ?>
<?php \Livewire\Features\SupportCompiledWireKeys\SupportCompiledWireKeys::processComponentKey($component); ?>
<?php echo $__env->renderComponent(); ?>
<?php endif; ?>
<?php if (isset($__attributesOriginal9c6e3f23e2ced4034a039852a77e1e96)): ?>
<?php $attributes = $__attributesOriginal9c6e3f23e2ced4034a039852a77e1e96; ?>
<?php unset($__attributesOriginal9c6e3f23e2ced4034a039852a77e1e96); ?>
<?php endif; ?>
<?php if (isset($__componentOriginal9c6e3f23e2ced4034a039852a77e1e96)): ?>
<?php $component = $__componentOriginal9c6e3f23e2ced4034a039852a77e1e96; ?>
<?php unset($__componentOriginal9c6e3f23e2ced4034a039852a77e1e96); ?>
<?php endif; ?>
<div class="rounded-3xl bg-white p-6 shadow-sm ring-1 ring-zinc-200 dark:bg-zinc-900 dark:ring-zinc-800">
<h2 class="text-lg font-bold text-zinc-900 dark:text-white">Add validation rule</h2>
<form method="POST" action="<?php echo e(route('warehouse-rules.store')); ?>" class="mt-5 grid gap-4 md:grid-cols-6">
<?php echo csrf_field(); ?>
<select name="warehouse_id" class="rounded-xl border-zinc-300 dark:border-zinc-700 dark:bg-zinc-950"><?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if BLOCK]><![endif]--><?php \Livewire\Features\SupportCompiledWireKeys\SupportCompiledWireKeys::openLoop(); ?><?php endif; ?><?php $__currentLoopData = $warehouses; $__env->addLoop($__currentLoopData); foreach($__currentLoopData as $warehouse): $__env->incrementLoopIndices(); $loop = $__env->getLastLoop(); ?><?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><?php \Livewire\Features\SupportCompiledWireKeys\SupportCompiledWireKeys::startLoopIteration(); ?><?php endif; ?><option value="<?php echo e($warehouse->id); ?>"><?php echo e($warehouse->name); ?></option><?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><?php \Livewire\Features\SupportCompiledWireKeys\SupportCompiledWireKeys::endLoop(); ?><?php endif; ?><?php endforeach; $__env->popLoop(); $loop = $__env->getLastLoop(); ?><?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if ENDBLOCK]><![endif]--><?php \Livewire\Features\SupportCompiledWireKeys\SupportCompiledWireKeys::closeLoop(); ?><?php endif; ?></select>
<input name="name" placeholder="Rule name" class="rounded-xl border-zinc-300 dark:border-zinc-700 dark:bg-zinc-950" required>
<input name="rule_key" placeholder="stock.location.required" class="rounded-xl border-zinc-300 dark:border-zinc-700 dark:bg-zinc-950" required>
<select name="severity" class="rounded-xl border-zinc-300 dark:border-zinc-700 dark:bg-zinc-950"><option>error</option><option>warning</option><option>blocker</option><option>info</option></select>
<input name="configuration" placeholder='{"min": 1}' class="rounded-xl border-zinc-300 dark:border-zinc-700 dark:bg-zinc-950">
<button class="rounded-xl bg-zinc-900 px-4 py-2 font-semibold text-white dark:bg-white dark:text-zinc-900">Add rule</button>
</form>
</div>
<div class="overflow-x-auto rounded-2xl bg-white shadow-sm ring-1 ring-zinc-200 dark:bg-zinc-900 dark:ring-zinc-800"><table class="min-w-full text-sm"><thead><tr class="border-b"><th class="p-4 text-left">Warehouse</th><th class="p-4 text-left">Rule</th><th class="p-4 text-left">Key</th><th class="p-4 text-left">Severity</th></tr></thead><tbody><?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if BLOCK]><![endif]--><?php \Livewire\Features\SupportCompiledWireKeys\SupportCompiledWireKeys::openLoop(); ?><?php endif; ?><?php $__currentLoopData = $rules; $__env->addLoop($__currentLoopData); foreach($__currentLoopData as $rule): $__env->incrementLoopIndices(); $loop = $__env->getLastLoop(); ?><?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><?php \Livewire\Features\SupportCompiledWireKeys\SupportCompiledWireKeys::startLoopIteration(); ?><?php endif; ?><tr class="border-b border-zinc-100 dark:border-zinc-800"><td class="p-4"><?php echo e($rule->warehouse->name); ?></td><td class="p-4 font-semibold"><?php echo e($rule->name); ?></td><td class="p-4"><code><?php echo e($rule->rule_key); ?></code></td><td class="p-4"><?php echo e($rule->severity); ?></td></tr><?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><?php \Livewire\Features\SupportCompiledWireKeys\SupportCompiledWireKeys::endLoop(); ?><?php endif; ?><?php endforeach; $__env->popLoop(); $loop = $__env->getLastLoop(); ?><?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if ENDBLOCK]><![endif]--><?php \Livewire\Features\SupportCompiledWireKeys\SupportCompiledWireKeys::closeLoop(); ?><?php endif; ?></tbody></table></div>
<?php echo e($rules->links()); ?>
</div>
<?php echo $__env->renderComponent(); ?>
<?php endif; ?>
<?php if (isset($__attributesOriginal81a506f898233b9e7d58286e6bea3c18)): ?>
<?php $attributes = $__attributesOriginal81a506f898233b9e7d58286e6bea3c18; ?>
<?php unset($__attributesOriginal81a506f898233b9e7d58286e6bea3c18); ?>
<?php endif; ?>
<?php if (isset($__componentOriginal81a506f898233b9e7d58286e6bea3c18)): ?>
<?php $component = $__componentOriginal81a506f898233b9e7d58286e6bea3c18; ?>
<?php unset($__componentOriginal81a506f898233b9e7d58286e6bea3c18); ?>
<?php endif; ?>
<?php /**PATH /Users/mag/Sites/WMS/Core/Modules/Warehouse/Providers/../resources/views/rules/index.blade.php ENDPATH**/ ?>
@@ -1,147 +0,0 @@
<?php if (isset($component)) { $__componentOriginal81a506f898233b9e7d58286e6bea3c18 = $component; } ?>
<?php if (isset($attributes)) { $__attributesOriginal81a506f898233b9e7d58286e6bea3c18 = $attributes; } ?>
<?php $component = Illuminate\View\AnonymousComponent::resolve(['view' => 'f4ac99e09542ff494432bc959d4fee61::app','data' => ['title' => __('Document Archive')]] + (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag ? $attributes->all() : [])); ?>
<?php $component->withName('layouts::app'); ?>
<?php if ($component->shouldRender()): ?>
<?php $__env->startComponent($component->resolveView(), $component->data()); ?>
<?php if (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag): ?>
<?php $attributes = $attributes->except(\Illuminate\View\AnonymousComponent::ignoredParameterNames()); ?>
<?php endif; ?>
<?php $component->withAttributes(['title' => \Illuminate\View\Compilers\BladeCompiler::sanitizeComponentAttribute(__('Document Archive'))]); ?>
<?php \Livewire\Features\SupportCompiledWireKeys\SupportCompiledWireKeys::processComponentKey($component); ?>
<div class="container-fluid py-4 module-page module-document-archive">
<div class="row g-4">
<div class="col-12">
<?php if (isset($component)) { $__componentOriginal9c6e3f23e2ced4034a039852a77e1e96 = $component; } ?>
<?php if (isset($attributes)) { $__attributesOriginal9c6e3f23e2ced4034a039852a77e1e96 = $attributes; } ?>
<?php $component = Illuminate\View\AnonymousComponent::resolve(['view' => 'components.wms.page-hero','data' => ['eyebrow' => 'Operations','title' => 'Document Archive','description' => 'Search cached Sentinel documents, shipment PDFs, labels, and BOL records.','icon' => 'fa-solid fa-file-lines']] + (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag ? $attributes->all() : [])); ?>
<?php $component->withName('wms.page-hero'); ?>
<?php if ($component->shouldRender()): ?>
<?php $__env->startComponent($component->resolveView(), $component->data()); ?>
<?php if (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag): ?>
<?php $attributes = $attributes->except(\Illuminate\View\AnonymousComponent::ignoredParameterNames()); ?>
<?php endif; ?>
<?php $component->withAttributes(['eyebrow' => 'Operations','title' => 'Document Archive','description' => 'Search cached Sentinel documents, shipment PDFs, labels, and BOL records.','icon' => 'fa-solid fa-file-lines']); ?>
<?php \Livewire\Features\SupportCompiledWireKeys\SupportCompiledWireKeys::processComponentKey($component); ?>
<?php echo $__env->renderComponent(); ?>
<?php endif; ?>
<?php if (isset($__attributesOriginal9c6e3f23e2ced4034a039852a77e1e96)): ?>
<?php $attributes = $__attributesOriginal9c6e3f23e2ced4034a039852a77e1e96; ?>
<?php unset($__attributesOriginal9c6e3f23e2ced4034a039852a77e1e96); ?>
<?php endif; ?>
<?php if (isset($__componentOriginal9c6e3f23e2ced4034a039852a77e1e96)): ?>
<?php $component = $__componentOriginal9c6e3f23e2ced4034a039852a77e1e96; ?>
<?php unset($__componentOriginal9c6e3f23e2ced4034a039852a77e1e96); ?>
<?php endif; ?>
</div>
<div class="col-md-6 col-xl-3">
<div class="card h-100 border-0 shadow-sm module-metric-card">
<div class="card-body">
<div class="small text-uppercase text-muted fw-semibold mb-2">01</div>
<h3 class="h6 mb-2">Sentinel Doc Archive</h3>
<p class="small text-muted mb-0">Placeholder area for sentinel doc archive.</p>
</div>
</div>
</div>
<div class="col-md-6 col-xl-3">
<div class="card h-100 border-0 shadow-sm module-metric-card">
<div class="card-body">
<div class="small text-uppercase text-muted fw-semibold mb-2">02</div>
<h3 class="h6 mb-2">Shipment PDFs</h3>
<p class="small text-muted mb-0">Placeholder area for shipment pdfs.</p>
</div>
</div>
</div>
<div class="col-md-6 col-xl-3">
<div class="card h-100 border-0 shadow-sm module-metric-card">
<div class="card-body">
<div class="small text-uppercase text-muted fw-semibold mb-2">03</div>
<h3 class="h6 mb-2">Bill of Lading</h3>
<p class="small text-muted mb-0">Placeholder area for bill of lading.</p>
</div>
</div>
</div>
<div class="col-md-6 col-xl-3">
<div class="card h-100 border-0 shadow-sm module-metric-card">
<div class="card-body">
<div class="small text-uppercase text-muted fw-semibold mb-2">04</div>
<h3 class="h6 mb-2">Document Search</h3>
<p class="small text-muted mb-0">Placeholder area for document search.</p>
</div>
</div>
</div>
<div class="col-12">
<section class="card border-0 shadow-sm">
<div class="card-header bg-white border-bottom">
<div class="d-flex flex-column flex-md-row justify-content-between gap-2">
<div>
<h2 class="h5 mb-1">Document Archive workbench</h2>
<p class="small text-muted mb-0">Sample table layout ready to wire into controllers, queries, DataTables, or Livewire.</p>
</div>
<div class="d-flex gap-2">
<button type="button" class="btn btn-outline-secondary btn-sm">Export</button>
<button type="button" class="btn btn-primary btn-sm">Create</button>
</div>
</div>
</div>
<div class="card-body">
<div class="table-responsive">
<table class="table table-hover align-middle mb-0">
<thead class="table-light">
<tr>
<th>Document</th>
<th>Shipment</th>
<th>Type</th>
<th class="text-end">Action</th>
</tr>
</thead>
<tbody>
<tr>
<td>Sentinel Doc Archive</td>
<td>Sample 1</td>
<td><span class="badge bg-success-subtle text-success border border-success-subtle">Active</span></td>
<td class="text-end"><a href="#" class="btn btn-sm btn-outline-primary">Open</a></td>
</tr>
<tr>
<td>Shipment PDFs</td>
<td>Sample 2</td>
<td><span class="badge bg-success-subtle text-success border border-success-subtle">Active</span></td>
<td class="text-end"><a href="#" class="btn btn-sm btn-outline-primary">Open</a></td>
</tr>
<tr>
<td>Bill of Lading</td>
<td>Sample 3</td>
<td><span class="badge bg-success-subtle text-success border border-success-subtle">Active</span></td>
<td class="text-end"><a href="#" class="btn btn-sm btn-outline-primary">Open</a></td>
</tr>
<tr>
<td>Document Search</td>
<td>Sample 4</td>
<td><span class="badge bg-success-subtle text-success border border-success-subtle">Active</span></td>
<td class="text-end"><a href="#" class="btn btn-sm btn-outline-primary">Open</a></td>
</tr>
</tbody>
</table>
</div>
</div>
</section>
</div>
</div>
</div>
<?php echo $__env->renderComponent(); ?>
<?php endif; ?>
<?php if (isset($__attributesOriginal81a506f898233b9e7d58286e6bea3c18)): ?>
<?php $attributes = $__attributesOriginal81a506f898233b9e7d58286e6bea3c18; ?>
<?php unset($__attributesOriginal81a506f898233b9e7d58286e6bea3c18); ?>
<?php endif; ?>
<?php if (isset($__componentOriginal81a506f898233b9e7d58286e6bea3c18)): ?>
<?php $component = $__componentOriginal81a506f898233b9e7d58286e6bea3c18; ?>
<?php unset($__componentOriginal81a506f898233b9e7d58286e6bea3c18); ?>
<?php endif; ?>
<?php /**PATH /Users/mag/Sites/WMS/Core/Modules/DocumentArchive/Providers/../Resources/views/index.blade.php ENDPATH**/ ?>
@@ -1,13 +0,0 @@
<?php
/** @var \Laravel\Boost\Install\GuidelineAssist $assist */
?>
# Laravel Pint Code Formatter
<?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if BLOCK]><![endif]--><?php endif; ?><?php if($assist->supportsPintAgentFormatter()): ?>
- If you have modified any PHP files, you must run ___SINGLE_BACKTICK___<?php echo e($assist->binCommand('pint')); ?> --dirty --format agent___SINGLE_BACKTICK___ before finalizing changes to ensure your code matches the project's expected style.
- Do not run ___SINGLE_BACKTICK___<?php echo e($assist->binCommand('pint')); ?> --test --format agent___SINGLE_BACKTICK___, simply run ___SINGLE_BACKTICK___<?php echo e($assist->binCommand('pint')); ?> --format agent___SINGLE_BACKTICK___ to fix any formatting issues.
<?php else: ?>
- If you have modified any PHP files, you must run ___SINGLE_BACKTICK___<?php echo e($assist->binCommand('pint')); ?> --dirty___SINGLE_BACKTICK___ before finalizing changes to ensure your code matches the project's expected style.
- Do not run ___SINGLE_BACKTICK___<?php echo e($assist->binCommand('pint')); ?> --test___SINGLE_BACKTICK___, simply run ___SINGLE_BACKTICK___<?php echo e($assist->binCommand('pint')); ?>___SINGLE_BACKTICK___ to fix any formatting issues.
<?php endif; ?><?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if ENDBLOCK]><![endif]--><?php endif; ?>
<?php /**PATH /Users/mag/Sites/WMS/Core/storage/framework/views/2b3b75ec9892892981b355f1d066492b.blade.php ENDPATH**/ ?>
@@ -1,65 +0,0 @@
<?php if (isset($component)) { $__componentOriginal81a506f898233b9e7d58286e6bea3c18 = $component; } ?>
<?php if (isset($attributes)) { $__attributesOriginal81a506f898233b9e7d58286e6bea3c18 = $attributes; } ?>
<?php $component = Illuminate\View\AnonymousComponent::resolve(['view' => 'f4ac99e09542ff494432bc959d4fee61::app','data' => ['title' => __('Companies')]] + (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag ? $attributes->all() : [])); ?>
<?php $component->withName('layouts::app'); ?>
<?php if ($component->shouldRender()): ?>
<?php $__env->startComponent($component->resolveView(), $component->data()); ?>
<?php if (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag): ?>
<?php $attributes = $attributes->except(\Illuminate\View\AnonymousComponent::ignoredParameterNames()); ?>
<?php endif; ?>
<?php $component->withAttributes(['title' => \Illuminate\View\Compilers\BladeCompiler::sanitizeComponentAttribute(__('Companies'))]); ?>
<?php \Livewire\Features\SupportCompiledWireKeys\SupportCompiledWireKeys::processComponentKey($component); ?>
<div class="space-y-6">
<?php if (isset($component)) { $__componentOriginal9c6e3f23e2ced4034a039852a77e1e96 = $component; } ?>
<?php if (isset($attributes)) { $__attributesOriginal9c6e3f23e2ced4034a039852a77e1e96 = $attributes; } ?>
<?php $component = Illuminate\View\AnonymousComponent::resolve(['view' => 'components.wms.page-hero','data' => ['eyebrow' => 'Platform Administration','title' => 'Companies','description' => 'Manage tenant companies and keep every company’s users, warehouses and records isolated.','icon' => 'fa-solid fa-building']] + (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag ? $attributes->all() : [])); ?>
<?php $component->withName('wms.page-hero'); ?>
<?php if ($component->shouldRender()): ?>
<?php $__env->startComponent($component->resolveView(), $component->data()); ?>
<?php if (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag): ?>
<?php $attributes = $attributes->except(\Illuminate\View\AnonymousComponent::ignoredParameterNames()); ?>
<?php endif; ?>
<?php $component->withAttributes(['eyebrow' => 'Platform Administration','title' => 'Companies','description' => 'Manage tenant companies and keep every company’s users, warehouses and records isolated.','icon' => 'fa-solid fa-building']); ?>
<?php \Livewire\Features\SupportCompiledWireKeys\SupportCompiledWireKeys::processComponentKey($component); ?>
<?php echo $__env->renderComponent(); ?>
<?php endif; ?>
<?php if (isset($__attributesOriginal9c6e3f23e2ced4034a039852a77e1e96)): ?>
<?php $attributes = $__attributesOriginal9c6e3f23e2ced4034a039852a77e1e96; ?>
<?php unset($__attributesOriginal9c6e3f23e2ced4034a039852a77e1e96); ?>
<?php endif; ?>
<?php if (isset($__componentOriginal9c6e3f23e2ced4034a039852a77e1e96)): ?>
<?php $component = $__componentOriginal9c6e3f23e2ced4034a039852a77e1e96; ?>
<?php unset($__componentOriginal9c6e3f23e2ced4034a039852a77e1e96); ?>
<?php endif; ?>
<div class="rounded-3xl bg-white p-6 shadow-sm ring-1 ring-zinc-200 dark:bg-zinc-900 dark:ring-zinc-800">
<h2 class="text-lg font-bold text-zinc-900 dark:text-white">Create company</h2>
<form method="POST" action="<?php echo e(route('platform.companies.store')); ?>" class="mt-5 grid gap-4 md:grid-cols-4">
<?php echo csrf_field(); ?>
<input name="name" placeholder="Company name" class="rounded-xl border-zinc-300 dark:border-zinc-700 dark:bg-zinc-950" required>
<input name="billing_email" placeholder="billing@example.com" class="rounded-xl border-zinc-300 dark:border-zinc-700 dark:bg-zinc-950">
<select name="status" class="rounded-xl border-zinc-300 dark:border-zinc-700 dark:bg-zinc-950"><option value="active">Active</option><option value="suspended">Suspended</option></select>
<button class="rounded-xl bg-zinc-900 px-4 py-2 font-semibold text-white dark:bg-white dark:text-zinc-900">Create</button>
</form>
</div>
<div class="overflow-x-auto rounded-2xl bg-white shadow-sm ring-1 ring-zinc-200 dark:bg-zinc-900 dark:ring-zinc-800">
<table class="min-w-full text-sm">
<thead><tr class="border-b"><th class="p-4 text-left">Name</th><th class="p-4 text-left">Users</th><th class="p-4 text-left">Warehouses</th><th class="p-4 text-left">Licences</th><th class="p-4 text-left">Status</th></tr></thead>
<tbody><?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if BLOCK]><![endif]--><?php \Livewire\Features\SupportCompiledWireKeys\SupportCompiledWireKeys::openLoop(); ?><?php endif; ?><?php $__currentLoopData = $companies; $__env->addLoop($__currentLoopData); foreach($__currentLoopData as $company): $__env->incrementLoopIndices(); $loop = $__env->getLastLoop(); ?><?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><?php \Livewire\Features\SupportCompiledWireKeys\SupportCompiledWireKeys::startLoopIteration(); ?><?php endif; ?><tr class="border-b border-zinc-100 dark:border-zinc-800"><td class="p-4 font-semibold"><?php echo e($company->name); ?></td><td class="p-4"><?php echo e($company->users_count); ?></td><td class="p-4"><?php echo e($company->warehouses_count); ?></td><td class="p-4"><?php echo e($company->license_keys_count); ?></td><td class="p-4"><?php echo e($company->is_system_company ? 'System' : $company->status); ?></td></tr><?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><?php \Livewire\Features\SupportCompiledWireKeys\SupportCompiledWireKeys::endLoop(); ?><?php endif; ?><?php endforeach; $__env->popLoop(); $loop = $__env->getLastLoop(); ?><?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if ENDBLOCK]><![endif]--><?php \Livewire\Features\SupportCompiledWireKeys\SupportCompiledWireKeys::closeLoop(); ?><?php endif; ?></tbody>
</table>
</div>
<?php echo e($companies->links()); ?>
</div>
<?php echo $__env->renderComponent(); ?>
<?php endif; ?>
<?php if (isset($__attributesOriginal81a506f898233b9e7d58286e6bea3c18)): ?>
<?php $attributes = $__attributesOriginal81a506f898233b9e7d58286e6bea3c18; ?>
<?php unset($__attributesOriginal81a506f898233b9e7d58286e6bea3c18); ?>
<?php endif; ?>
<?php if (isset($__componentOriginal81a506f898233b9e7d58286e6bea3c18)): ?>
<?php $component = $__componentOriginal81a506f898233b9e7d58286e6bea3c18; ?>
<?php unset($__componentOriginal81a506f898233b9e7d58286e6bea3c18); ?>
<?php endif; ?>
<?php /**PATH /Users/mag/Sites/WMS/Core/Modules/Platform/Providers/../resources/views/companies/index.blade.php ENDPATH**/ ?>
@@ -1,4 +0,0 @@
# Deployment
- Laravel can be deployed using [Laravel Cloud](https://cloud.laravel.com/), which is the fastest way to deploy and scale production Laravel applications.
<?php /**PATH /Users/mag/Sites/WMS/Core/storage/framework/views/2d21c7721a51fb6d42304f35ce55c99a.blade.php ENDPATH**/ ?>
@@ -1,9 +0,0 @@
## Media Library
- ___SINGLE_BACKTICK___spatie/laravel-medialibrary___SINGLE_BACKTICK___ associates files with Eloquent models, with support for collections, conversions, and responsive images.
- Always activate the ___SINGLE_BACKTICK___medialibrary-development___SINGLE_BACKTICK___ skill when working with media uploads, conversions, collections, responsive images, or any code that uses the ___SINGLE_BACKTICK___HasMedia___SINGLE_BACKTICK___ interface or ___SINGLE_BACKTICK___InteractsWithMedia___SINGLE_BACKTICK___ trait.
<?php /**PATH /Users/mag/Sites/WMS/Core/storage/framework/views/bcf59257f6020c74ea42048c26530074.blade.php ENDPATH**/ ?>
@@ -1,147 +0,0 @@
<?php if (isset($component)) { $__componentOriginal81a506f898233b9e7d58286e6bea3c18 = $component; } ?>
<?php if (isset($attributes)) { $__attributesOriginal81a506f898233b9e7d58286e6bea3c18 = $attributes; } ?>
<?php $component = Illuminate\View\AnonymousComponent::resolve(['view' => 'f4ac99e09542ff494432bc959d4fee61::app','data' => ['title' => __('Replenishment')]] + (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag ? $attributes->all() : [])); ?>
<?php $component->withName('layouts::app'); ?>
<?php if ($component->shouldRender()): ?>
<?php $__env->startComponent($component->resolveView(), $component->data()); ?>
<?php if (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag): ?>
<?php $attributes = $attributes->except(\Illuminate\View\AnonymousComponent::ignoredParameterNames()); ?>
<?php endif; ?>
<?php $component->withAttributes(['title' => \Illuminate\View\Compilers\BladeCompiler::sanitizeComponentAttribute(__('Replenishment'))]); ?>
<?php \Livewire\Features\SupportCompiledWireKeys\SupportCompiledWireKeys::processComponentKey($component); ?>
<div class="container-fluid py-4 module-page module-replenishment">
<div class="row g-4">
<div class="col-12">
<?php if (isset($component)) { $__componentOriginal9c6e3f23e2ced4034a039852a77e1e96 = $component; } ?>
<?php if (isset($attributes)) { $__attributesOriginal9c6e3f23e2ced4034a039852a77e1e96 = $attributes; } ?>
<?php $component = Illuminate\View\AnonymousComponent::resolve(['view' => 'components.wms.page-hero','data' => ['eyebrow' => 'Operations','title' => 'Replenishment','description' => 'Configure replenishment thresholds, review stock gaps, and monitor refill activity.','icon' => 'fa-solid fa-arrows-rotate']] + (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag ? $attributes->all() : [])); ?>
<?php $component->withName('wms.page-hero'); ?>
<?php if ($component->shouldRender()): ?>
<?php $__env->startComponent($component->resolveView(), $component->data()); ?>
<?php if (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag): ?>
<?php $attributes = $attributes->except(\Illuminate\View\AnonymousComponent::ignoredParameterNames()); ?>
<?php endif; ?>
<?php $component->withAttributes(['eyebrow' => 'Operations','title' => 'Replenishment','description' => 'Configure replenishment thresholds, review stock gaps, and monitor refill activity.','icon' => 'fa-solid fa-arrows-rotate']); ?>
<?php \Livewire\Features\SupportCompiledWireKeys\SupportCompiledWireKeys::processComponentKey($component); ?>
<?php echo $__env->renderComponent(); ?>
<?php endif; ?>
<?php if (isset($__attributesOriginal9c6e3f23e2ced4034a039852a77e1e96)): ?>
<?php $attributes = $__attributesOriginal9c6e3f23e2ced4034a039852a77e1e96; ?>
<?php unset($__attributesOriginal9c6e3f23e2ced4034a039852a77e1e96); ?>
<?php endif; ?>
<?php if (isset($__componentOriginal9c6e3f23e2ced4034a039852a77e1e96)): ?>
<?php $component = $__componentOriginal9c6e3f23e2ced4034a039852a77e1e96; ?>
<?php unset($__componentOriginal9c6e3f23e2ced4034a039852a77e1e96); ?>
<?php endif; ?>
</div>
<div class="col-md-6 col-xl-3">
<div class="card h-100 border-0 shadow-sm module-metric-card">
<div class="card-body">
<div class="small text-uppercase text-muted fw-semibold mb-2">01</div>
<h3 class="h6 mb-2">Replenishment Rules</h3>
<p class="small text-muted mb-0">Placeholder area for replenishment rules.</p>
</div>
</div>
</div>
<div class="col-md-6 col-xl-3">
<div class="card h-100 border-0 shadow-sm module-metric-card">
<div class="card-body">
<div class="small text-uppercase text-muted fw-semibold mb-2">02</div>
<h3 class="h6 mb-2">Minimum Stock</h3>
<p class="small text-muted mb-0">Placeholder area for minimum stock.</p>
</div>
</div>
</div>
<div class="col-md-6 col-xl-3">
<div class="card h-100 border-0 shadow-sm module-metric-card">
<div class="card-body">
<div class="small text-uppercase text-muted fw-semibold mb-2">03</div>
<h3 class="h6 mb-2">Suggested Transfers</h3>
<p class="small text-muted mb-0">Placeholder area for suggested transfers.</p>
</div>
</div>
</div>
<div class="col-md-6 col-xl-3">
<div class="card h-100 border-0 shadow-sm module-metric-card">
<div class="card-body">
<div class="small text-uppercase text-muted fw-semibold mb-2">04</div>
<h3 class="h6 mb-2">Exception Queue</h3>
<p class="small text-muted mb-0">Placeholder area for exception queue.</p>
</div>
</div>
</div>
<div class="col-12">
<section class="card border-0 shadow-sm">
<div class="card-header bg-white border-bottom">
<div class="d-flex flex-column flex-md-row justify-content-between gap-2">
<div>
<h2 class="h5 mb-1">Replenishment workbench</h2>
<p class="small text-muted mb-0">Sample table layout ready to wire into controllers, queries, DataTables, or Livewire.</p>
</div>
<div class="d-flex gap-2">
<button type="button" class="btn btn-outline-secondary btn-sm">Export</button>
<button type="button" class="btn btn-primary btn-sm">Create</button>
</div>
</div>
</div>
<div class="card-body">
<div class="table-responsive">
<table class="table table-hover align-middle mb-0">
<thead class="table-light">
<tr>
<th>Item</th>
<th>Minimum</th>
<th>Current</th>
<th class="text-end">Action</th>
</tr>
</thead>
<tbody>
<tr>
<td>Replenishment Rules</td>
<td>Sample 1</td>
<td><span class="badge bg-success-subtle text-success border border-success-subtle">Active</span></td>
<td class="text-end"><a href="#" class="btn btn-sm btn-outline-primary">Open</a></td>
</tr>
<tr>
<td>Minimum Stock</td>
<td>Sample 2</td>
<td><span class="badge bg-success-subtle text-success border border-success-subtle">Active</span></td>
<td class="text-end"><a href="#" class="btn btn-sm btn-outline-primary">Open</a></td>
</tr>
<tr>
<td>Suggested Transfers</td>
<td>Sample 3</td>
<td><span class="badge bg-success-subtle text-success border border-success-subtle">Active</span></td>
<td class="text-end"><a href="#" class="btn btn-sm btn-outline-primary">Open</a></td>
</tr>
<tr>
<td>Exception Queue</td>
<td>Sample 4</td>
<td><span class="badge bg-success-subtle text-success border border-success-subtle">Active</span></td>
<td class="text-end"><a href="#" class="btn btn-sm btn-outline-primary">Open</a></td>
</tr>
</tbody>
</table>
</div>
</div>
</section>
</div>
</div>
</div>
<?php echo $__env->renderComponent(); ?>
<?php endif; ?>
<?php if (isset($__attributesOriginal81a506f898233b9e7d58286e6bea3c18)): ?>
<?php $attributes = $__attributesOriginal81a506f898233b9e7d58286e6bea3c18; ?>
<?php unset($__attributesOriginal81a506f898233b9e7d58286e6bea3c18); ?>
<?php endif; ?>
<?php if (isset($__componentOriginal81a506f898233b9e7d58286e6bea3c18)): ?>
<?php $component = $__componentOriginal81a506f898233b9e7d58286e6bea3c18; ?>
<?php unset($__componentOriginal81a506f898233b9e7d58286e6bea3c18); ?>
<?php endif; ?>
<?php /**PATH /Users/mag/Sites/WMS/Core/Modules/Replenishment/Providers/../Resources/views/index.blade.php ENDPATH**/ ?>
@@ -1,18 +0,0 @@
<?php
/** @var \Laravel\Boost\Install\GuidelineAssist $assist */
?>
# PHPUnit
- This application uses PHPUnit for testing. All tests must be written as PHPUnit classes. Use ___SINGLE_BACKTICK___<?php echo e($assist->artisanCommand('make:test --phpunit {name}')); ?>___SINGLE_BACKTICK___ to create a new test.
- If you see a test using "Pest", convert it to PHPUnit.
- Every time a test has been updated, run that singular test.
- When the tests relating to your feature are passing, ask the user if they would like to also run the entire test suite to make sure everything is still passing.
- Tests should cover all happy paths, failure paths, and edge cases.
- You must not remove any tests or test files from the tests directory without approval. These are not temporary or helper files; these are core to the application.
## Running Tests
- Run the minimal number of tests, using an appropriate filter, before finalizing.
- To run all tests: ___SINGLE_BACKTICK___<?php echo e($assist->artisanCommand('test --compact')); ?>___SINGLE_BACKTICK___.
- To run all tests in a file: ___SINGLE_BACKTICK___<?php echo e($assist->artisanCommand('test --compact tests/Feature/ExampleTest.php')); ?>___SINGLE_BACKTICK___.
- To filter on a particular test name: ___SINGLE_BACKTICK___<?php echo e($assist->artisanCommand('test --compact --filter=testName')); ?>___SINGLE_BACKTICK___ (recommended after making a change to a related file).
<?php /**PATH /Users/mag/Sites/WMS/Core/storage/framework/views/ad027bc1f4f77db585097342990de57b.blade.php ENDPATH**/ ?>
@@ -1,147 +0,0 @@
<?php if (isset($component)) { $__componentOriginal81a506f898233b9e7d58286e6bea3c18 = $component; } ?>
<?php if (isset($attributes)) { $__attributesOriginal81a506f898233b9e7d58286e6bea3c18 = $attributes; } ?>
<?php $component = Illuminate\View\AnonymousComponent::resolve(['view' => 'f4ac99e09542ff494432bc959d4fee61::app','data' => ['title' => __('Carrier Management')]] + (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag ? $attributes->all() : [])); ?>
<?php $component->withName('layouts::app'); ?>
<?php if ($component->shouldRender()): ?>
<?php $__env->startComponent($component->resolveView(), $component->data()); ?>
<?php if (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag): ?>
<?php $attributes = $attributes->except(\Illuminate\View\AnonymousComponent::ignoredParameterNames()); ?>
<?php endif; ?>
<?php $component->withAttributes(['title' => \Illuminate\View\Compilers\BladeCompiler::sanitizeComponentAttribute(__('Carrier Management'))]); ?>
<?php \Livewire\Features\SupportCompiledWireKeys\SupportCompiledWireKeys::processComponentKey($component); ?>
<div class="container-fluid py-4 module-page module-carrier-management">
<div class="row g-4">
<div class="col-12">
<?php if (isset($component)) { $__componentOriginal9c6e3f23e2ced4034a039852a77e1e96 = $component; } ?>
<?php if (isset($attributes)) { $__attributesOriginal9c6e3f23e2ced4034a039852a77e1e96 = $attributes; } ?>
<?php $component = Illuminate\View\AnonymousComponent::resolve(['view' => 'components.wms.page-hero','data' => ['eyebrow' => 'Operations','title' => 'Carrier Management','description' => 'Maintain carriers, services, and shipment routing master data.','icon' => 'fa-solid fa-id-card']] + (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag ? $attributes->all() : [])); ?>
<?php $component->withName('wms.page-hero'); ?>
<?php if ($component->shouldRender()): ?>
<?php $__env->startComponent($component->resolveView(), $component->data()); ?>
<?php if (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag): ?>
<?php $attributes = $attributes->except(\Illuminate\View\AnonymousComponent::ignoredParameterNames()); ?>
<?php endif; ?>
<?php $component->withAttributes(['eyebrow' => 'Operations','title' => 'Carrier Management','description' => 'Maintain carriers, services, and shipment routing master data.','icon' => 'fa-solid fa-id-card']); ?>
<?php \Livewire\Features\SupportCompiledWireKeys\SupportCompiledWireKeys::processComponentKey($component); ?>
<?php echo $__env->renderComponent(); ?>
<?php endif; ?>
<?php if (isset($__attributesOriginal9c6e3f23e2ced4034a039852a77e1e96)): ?>
<?php $attributes = $__attributesOriginal9c6e3f23e2ced4034a039852a77e1e96; ?>
<?php unset($__attributesOriginal9c6e3f23e2ced4034a039852a77e1e96); ?>
<?php endif; ?>
<?php if (isset($__componentOriginal9c6e3f23e2ced4034a039852a77e1e96)): ?>
<?php $component = $__componentOriginal9c6e3f23e2ced4034a039852a77e1e96; ?>
<?php unset($__componentOriginal9c6e3f23e2ced4034a039852a77e1e96); ?>
<?php endif; ?>
</div>
<div class="col-md-6 col-xl-3">
<div class="card h-100 border-0 shadow-sm module-metric-card">
<div class="card-body">
<div class="small text-uppercase text-muted fw-semibold mb-2">01</div>
<h3 class="h6 mb-2">Carrier Directory</h3>
<p class="small text-muted mb-0">Placeholder area for carrier directory.</p>
</div>
</div>
</div>
<div class="col-md-6 col-xl-3">
<div class="card h-100 border-0 shadow-sm module-metric-card">
<div class="card-body">
<div class="small text-uppercase text-muted fw-semibold mb-2">02</div>
<h3 class="h6 mb-2">Carrier Service Levels</h3>
<p class="small text-muted mb-0">Placeholder area for carrier service levels.</p>
</div>
</div>
</div>
<div class="col-md-6 col-xl-3">
<div class="card h-100 border-0 shadow-sm module-metric-card">
<div class="card-body">
<div class="small text-uppercase text-muted fw-semibold mb-2">03</div>
<h3 class="h6 mb-2">Carrier Rules</h3>
<p class="small text-muted mb-0">Placeholder area for carrier rules.</p>
</div>
</div>
</div>
<div class="col-md-6 col-xl-3">
<div class="card h-100 border-0 shadow-sm module-metric-card">
<div class="card-body">
<div class="small text-uppercase text-muted fw-semibold mb-2">04</div>
<h3 class="h6 mb-2">Carrier Audit</h3>
<p class="small text-muted mb-0">Placeholder area for carrier audit.</p>
</div>
</div>
</div>
<div class="col-12">
<section class="card border-0 shadow-sm">
<div class="card-header bg-white border-bottom">
<div class="d-flex flex-column flex-md-row justify-content-between gap-2">
<div>
<h2 class="h5 mb-1">Carrier Management workbench</h2>
<p class="small text-muted mb-0">Sample table layout ready to wire into controllers, queries, DataTables, or Livewire.</p>
</div>
<div class="d-flex gap-2">
<button type="button" class="btn btn-outline-secondary btn-sm">Export</button>
<button type="button" class="btn btn-primary btn-sm">Create</button>
</div>
</div>
</div>
<div class="card-body">
<div class="table-responsive">
<table class="table table-hover align-middle mb-0">
<thead class="table-light">
<tr>
<th>Carrier</th>
<th>Service</th>
<th>Enabled</th>
<th class="text-end">Action</th>
</tr>
</thead>
<tbody>
<tr>
<td>Carrier Directory</td>
<td>Sample 1</td>
<td><span class="badge bg-success-subtle text-success border border-success-subtle">Active</span></td>
<td class="text-end"><a href="#" class="btn btn-sm btn-outline-primary">Open</a></td>
</tr>
<tr>
<td>Carrier Service Levels</td>
<td>Sample 2</td>
<td><span class="badge bg-success-subtle text-success border border-success-subtle">Active</span></td>
<td class="text-end"><a href="#" class="btn btn-sm btn-outline-primary">Open</a></td>
</tr>
<tr>
<td>Carrier Rules</td>
<td>Sample 3</td>
<td><span class="badge bg-success-subtle text-success border border-success-subtle">Active</span></td>
<td class="text-end"><a href="#" class="btn btn-sm btn-outline-primary">Open</a></td>
</tr>
<tr>
<td>Carrier Audit</td>
<td>Sample 4</td>
<td><span class="badge bg-success-subtle text-success border border-success-subtle">Active</span></td>
<td class="text-end"><a href="#" class="btn btn-sm btn-outline-primary">Open</a></td>
</tr>
</tbody>
</table>
</div>
</div>
</section>
</div>
</div>
</div>
<?php echo $__env->renderComponent(); ?>
<?php endif; ?>
<?php if (isset($__attributesOriginal81a506f898233b9e7d58286e6bea3c18)): ?>
<?php $attributes = $__attributesOriginal81a506f898233b9e7d58286e6bea3c18; ?>
<?php unset($__attributesOriginal81a506f898233b9e7d58286e6bea3c18); ?>
<?php endif; ?>
<?php if (isset($__componentOriginal81a506f898233b9e7d58286e6bea3c18)): ?>
<?php $component = $__componentOriginal81a506f898233b9e7d58286e6bea3c18; ?>
<?php unset($__componentOriginal81a506f898233b9e7d58286e6bea3c18); ?>
<?php endif; ?>
<?php /**PATH /Users/mag/Sites/WMS/Core/Modules/CarrierManagement/Providers/../Resources/views/index.blade.php ENDPATH**/ ?>
@@ -1,66 +0,0 @@
<?php if (isset($component)) { $__componentOriginal81a506f898233b9e7d58286e6bea3c18 = $component; } ?>
<?php if (isset($attributes)) { $__attributesOriginal81a506f898233b9e7d58286e6bea3c18 = $attributes; } ?>
<?php $component = Illuminate\View\AnonymousComponent::resolve(['view' => 'f4ac99e09542ff494432bc959d4fee61::app','data' => ['title' => __('Edit Price')]] + (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag ? $attributes->all() : [])); ?>
<?php $component->withName('layouts::app'); ?>
<?php if ($component->shouldRender()): ?>
<?php $__env->startComponent($component->resolveView(), $component->data()); ?>
<?php if (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag): ?>
<?php $attributes = $attributes->except(\Illuminate\View\AnonymousComponent::ignoredParameterNames()); ?>
<?php endif; ?>
<?php $component->withAttributes(['title' => \Illuminate\View\Compilers\BladeCompiler::sanitizeComponentAttribute(__('Edit Price'))]); ?>
<?php \Livewire\Features\SupportCompiledWireKeys\SupportCompiledWireKeys::processComponentKey($component); ?>
<div class="space-y-6">
<?php if (isset($component)) { $__componentOriginal9c6e3f23e2ced4034a039852a77e1e96 = $component; } ?>
<?php if (isset($attributes)) { $__attributesOriginal9c6e3f23e2ced4034a039852a77e1e96 = $attributes; } ?>
<?php $component = Illuminate\View\AnonymousComponent::resolve(['view' => 'components.wms.page-hero','data' => ['eyebrow' => 'Administration','title' => 'Edit ' . $price->name,'description' => 'Update pricing, feature text and card visibility while keeping the platform pricing display consistent.','icon' => 'fa-solid fa-pen-to-square']] + (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag ? $attributes->all() : [])); ?>
<?php $component->withName('wms.page-hero'); ?>
<?php if ($component->shouldRender()): ?>
<?php $__env->startComponent($component->resolveView(), $component->data()); ?>
<?php if (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag): ?>
<?php $attributes = $attributes->except(\Illuminate\View\AnonymousComponent::ignoredParameterNames()); ?>
<?php endif; ?>
<?php $component->withAttributes(['eyebrow' => 'Administration','title' => \Illuminate\View\Compilers\BladeCompiler::sanitizeComponentAttribute('Edit ' . $price->name),'description' => 'Update pricing, feature text and card visibility while keeping the platform pricing display consistent.','icon' => 'fa-solid fa-pen-to-square']); ?>
<?php \Livewire\Features\SupportCompiledWireKeys\SupportCompiledWireKeys::processComponentKey($component); ?>
<a href="<?php echo e(route('platform.prices.index')); ?>" wire:navigate class="rounded-xl bg-white px-4 py-3 text-sm font-bold text-slate-950 shadow-lg hover:bg-cyan-50">
Back to prices
</a>
<?php echo $__env->renderComponent(); ?>
<?php endif; ?>
<?php if (isset($__attributesOriginal9c6e3f23e2ced4034a039852a77e1e96)): ?>
<?php $attributes = $__attributesOriginal9c6e3f23e2ced4034a039852a77e1e96; ?>
<?php unset($__attributesOriginal9c6e3f23e2ced4034a039852a77e1e96); ?>
<?php endif; ?>
<?php if (isset($__componentOriginal9c6e3f23e2ced4034a039852a77e1e96)): ?>
<?php $component = $__componentOriginal9c6e3f23e2ced4034a039852a77e1e96; ?>
<?php unset($__componentOriginal9c6e3f23e2ced4034a039852a77e1e96); ?>
<?php endif; ?>
<section class="rounded-3xl border border-zinc-200 bg-white p-6 shadow-sm dark:border-zinc-800 dark:bg-zinc-900">
<form method="POST" action="<?php echo e(route('platform.prices.update', $price)); ?>" class="space-y-6">
<?php echo csrf_field(); ?>
<?php echo method_field('PUT'); ?>
<?php echo $__env->make('platform::prices._form', array_diff_key(get_defined_vars(), ['__data' => 1, '__path' => 1]))->render(); ?>
<div class="flex flex-wrap justify-end gap-3 border-t border-zinc-100 pt-5 dark:border-zinc-800">
<a href="<?php echo e(route('platform.prices.index')); ?>" wire:navigate class="rounded-xl border border-zinc-200 px-5 py-3 text-sm font-semibold text-zinc-700 dark:border-zinc-700 dark:text-zinc-200">
Cancel
</a>
<button type="submit" class="rounded-xl bg-cyan-600 px-5 py-3 text-sm font-bold text-white shadow-lg shadow-cyan-950/20 hover:bg-cyan-500">
Save changes
</button>
</div>
</form>
</section>
</div>
<?php echo $__env->renderComponent(); ?>
<?php endif; ?>
<?php if (isset($__attributesOriginal81a506f898233b9e7d58286e6bea3c18)): ?>
<?php $attributes = $__attributesOriginal81a506f898233b9e7d58286e6bea3c18; ?>
<?php unset($__attributesOriginal81a506f898233b9e7d58286e6bea3c18); ?>
<?php endif; ?>
<?php if (isset($__componentOriginal81a506f898233b9e7d58286e6bea3c18)): ?>
<?php $component = $__componentOriginal81a506f898233b9e7d58286e6bea3c18; ?>
<?php unset($__componentOriginal81a506f898233b9e7d58286e6bea3c18); ?>
<?php endif; ?>
<?php /**PATH /Users/mag/Sites/WMS/Core/Modules/Platform/Providers/../resources/views/prices/edit.blade.php ENDPATH**/ ?>
@@ -1,147 +0,0 @@
<?php if (isset($component)) { $__componentOriginal81a506f898233b9e7d58286e6bea3c18 = $component; } ?>
<?php if (isset($attributes)) { $__attributesOriginal81a506f898233b9e7d58286e6bea3c18 = $attributes; } ?>
<?php $component = Illuminate\View\AnonymousComponent::resolve(['view' => 'f4ac99e09542ff494432bc959d4fee61::app','data' => ['title' => __('Transportation')]] + (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag ? $attributes->all() : [])); ?>
<?php $component->withName('layouts::app'); ?>
<?php if ($component->shouldRender()): ?>
<?php $__env->startComponent($component->resolveView(), $component->data()); ?>
<?php if (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag): ?>
<?php $attributes = $attributes->except(\Illuminate\View\AnonymousComponent::ignoredParameterNames()); ?>
<?php endif; ?>
<?php $component->withAttributes(['title' => \Illuminate\View\Compilers\BladeCompiler::sanitizeComponentAttribute(__('Transportation'))]); ?>
<?php \Livewire\Features\SupportCompiledWireKeys\SupportCompiledWireKeys::processComponentKey($component); ?>
<div class="container-fluid py-4 module-page module-transportation">
<div class="row g-4">
<div class="col-12">
<?php if (isset($component)) { $__componentOriginal9c6e3f23e2ced4034a039852a77e1e96 = $component; } ?>
<?php if (isset($attributes)) { $__attributesOriginal9c6e3f23e2ced4034a039852a77e1e96 = $attributes; } ?>
<?php $component = Illuminate\View\AnonymousComponent::resolve(['view' => 'components.wms.page-hero','data' => ['eyebrow' => 'Operations','title' => 'Transportation','description' => 'Manage truck closure, freight terms, trailers, and transport operations.','icon' => 'fa-solid fa-route']] + (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag ? $attributes->all() : [])); ?>
<?php $component->withName('wms.page-hero'); ?>
<?php if ($component->shouldRender()): ?>
<?php $__env->startComponent($component->resolveView(), $component->data()); ?>
<?php if (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag): ?>
<?php $attributes = $attributes->except(\Illuminate\View\AnonymousComponent::ignoredParameterNames()); ?>
<?php endif; ?>
<?php $component->withAttributes(['eyebrow' => 'Operations','title' => 'Transportation','description' => 'Manage truck closure, freight terms, trailers, and transport operations.','icon' => 'fa-solid fa-route']); ?>
<?php \Livewire\Features\SupportCompiledWireKeys\SupportCompiledWireKeys::processComponentKey($component); ?>
<?php echo $__env->renderComponent(); ?>
<?php endif; ?>
<?php if (isset($__attributesOriginal9c6e3f23e2ced4034a039852a77e1e96)): ?>
<?php $attributes = $__attributesOriginal9c6e3f23e2ced4034a039852a77e1e96; ?>
<?php unset($__attributesOriginal9c6e3f23e2ced4034a039852a77e1e96); ?>
<?php endif; ?>
<?php if (isset($__componentOriginal9c6e3f23e2ced4034a039852a77e1e96)): ?>
<?php $component = $__componentOriginal9c6e3f23e2ced4034a039852a77e1e96; ?>
<?php unset($__componentOriginal9c6e3f23e2ced4034a039852a77e1e96); ?>
<?php endif; ?>
</div>
<div class="col-md-6 col-xl-3">
<div class="card h-100 border-0 shadow-sm module-metric-card">
<div class="card-body">
<div class="small text-uppercase text-muted fw-semibold mb-2">01</div>
<h3 class="h6 mb-2">Pending Truck Closure</h3>
<p class="small text-muted mb-0">Placeholder area for pending truck closure.</p>
</div>
</div>
</div>
<div class="col-md-6 col-xl-3">
<div class="card h-100 border-0 shadow-sm module-metric-card">
<div class="card-body">
<div class="small text-uppercase text-muted fw-semibold mb-2">02</div>
<h3 class="h6 mb-2">Trailer Activity</h3>
<p class="small text-muted mb-0">Placeholder area for trailer activity.</p>
</div>
</div>
</div>
<div class="col-md-6 col-xl-3">
<div class="card h-100 border-0 shadow-sm module-metric-card">
<div class="card-body">
<div class="small text-uppercase text-muted fw-semibold mb-2">03</div>
<h3 class="h6 mb-2">Freight Terms</h3>
<p class="small text-muted mb-0">Placeholder area for freight terms.</p>
</div>
</div>
</div>
<div class="col-md-6 col-xl-3">
<div class="card h-100 border-0 shadow-sm module-metric-card">
<div class="card-body">
<div class="small text-uppercase text-muted fw-semibold mb-2">04</div>
<h3 class="h6 mb-2">Transport Exceptions</h3>
<p class="small text-muted mb-0">Placeholder area for transport exceptions.</p>
</div>
</div>
</div>
<div class="col-12">
<section class="card border-0 shadow-sm">
<div class="card-header bg-white border-bottom">
<div class="d-flex flex-column flex-md-row justify-content-between gap-2">
<div>
<h2 class="h5 mb-1">Transportation workbench</h2>
<p class="small text-muted mb-0">Sample table layout ready to wire into controllers, queries, DataTables, or Livewire.</p>
</div>
<div class="d-flex gap-2">
<button type="button" class="btn btn-outline-secondary btn-sm">Export</button>
<button type="button" class="btn btn-primary btn-sm">Create</button>
</div>
</div>
</div>
<div class="card-body">
<div class="table-responsive">
<table class="table table-hover align-middle mb-0">
<thead class="table-light">
<tr>
<th>Trailer</th>
<th>Carrier</th>
<th>Close Status</th>
<th class="text-end">Action</th>
</tr>
</thead>
<tbody>
<tr>
<td>Pending Truck Closure</td>
<td>Sample 1</td>
<td><span class="badge bg-success-subtle text-success border border-success-subtle">Active</span></td>
<td class="text-end"><a href="#" class="btn btn-sm btn-outline-primary">Open</a></td>
</tr>
<tr>
<td>Trailer Activity</td>
<td>Sample 2</td>
<td><span class="badge bg-success-subtle text-success border border-success-subtle">Active</span></td>
<td class="text-end"><a href="#" class="btn btn-sm btn-outline-primary">Open</a></td>
</tr>
<tr>
<td>Freight Terms</td>
<td>Sample 3</td>
<td><span class="badge bg-success-subtle text-success border border-success-subtle">Active</span></td>
<td class="text-end"><a href="#" class="btn btn-sm btn-outline-primary">Open</a></td>
</tr>
<tr>
<td>Transport Exceptions</td>
<td>Sample 4</td>
<td><span class="badge bg-success-subtle text-success border border-success-subtle">Active</span></td>
<td class="text-end"><a href="#" class="btn btn-sm btn-outline-primary">Open</a></td>
</tr>
</tbody>
</table>
</div>
</div>
</section>
</div>
</div>
</div>
<?php echo $__env->renderComponent(); ?>
<?php endif; ?>
<?php if (isset($__attributesOriginal81a506f898233b9e7d58286e6bea3c18)): ?>
<?php $attributes = $__attributesOriginal81a506f898233b9e7d58286e6bea3c18; ?>
<?php unset($__attributesOriginal81a506f898233b9e7d58286e6bea3c18); ?>
<?php endif; ?>
<?php if (isset($__componentOriginal81a506f898233b9e7d58286e6bea3c18)): ?>
<?php $component = $__componentOriginal81a506f898233b9e7d58286e6bea3c18; ?>
<?php unset($__componentOriginal81a506f898233b9e7d58286e6bea3c18); ?>
<?php endif; ?>
<?php /**PATH /Users/mag/Sites/WMS/Core/Modules/Transportation/Providers/../Resources/views/index.blade.php ENDPATH**/ ?>
@@ -1,62 +0,0 @@
<?php if (isset($component)) { $__componentOriginal81a506f898233b9e7d58286e6bea3c18 = $component; } ?>
<?php if (isset($attributes)) { $__attributesOriginal81a506f898233b9e7d58286e6bea3c18 = $attributes; } ?>
<?php $component = Illuminate\View\AnonymousComponent::resolve(['view' => 'f4ac99e09542ff494432bc959d4fee61::app','data' => ['title' => __('Payments')]] + (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag ? $attributes->all() : [])); ?>
<?php $component->withName('layouts::app'); ?>
<?php if ($component->shouldRender()): ?>
<?php $__env->startComponent($component->resolveView(), $component->data()); ?>
<?php if (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag): ?>
<?php $attributes = $attributes->except(\Illuminate\View\AnonymousComponent::ignoredParameterNames()); ?>
<?php endif; ?>
<?php $component->withAttributes(['title' => \Illuminate\View\Compilers\BladeCompiler::sanitizeComponentAttribute(__('Payments'))]); ?>
<?php \Livewire\Features\SupportCompiledWireKeys\SupportCompiledWireKeys::processComponentKey($component); ?>
<div class="space-y-6">
<?php if (isset($component)) { $__componentOriginal9c6e3f23e2ced4034a039852a77e1e96 = $component; } ?>
<?php if (isset($attributes)) { $__attributesOriginal9c6e3f23e2ced4034a039852a77e1e96 = $attributes; } ?>
<?php $component = Illuminate\View\AnonymousComponent::resolve(['view' => 'components.wms.page-hero','data' => ['eyebrow' => 'Platform Administration','title' => 'Payments and Overrides','description' => 'Record platform payments, manual overrides and billing status by company.','icon' => 'fa-solid fa-credit-card']] + (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag ? $attributes->all() : [])); ?>
<?php $component->withName('wms.page-hero'); ?>
<?php if ($component->shouldRender()): ?>
<?php $__env->startComponent($component->resolveView(), $component->data()); ?>
<?php if (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag): ?>
<?php $attributes = $attributes->except(\Illuminate\View\AnonymousComponent::ignoredParameterNames()); ?>
<?php endif; ?>
<?php $component->withAttributes(['eyebrow' => 'Platform Administration','title' => 'Payments and Overrides','description' => 'Record platform payments, manual overrides and billing status by company.','icon' => 'fa-solid fa-credit-card']); ?>
<?php \Livewire\Features\SupportCompiledWireKeys\SupportCompiledWireKeys::processComponentKey($component); ?>
<?php echo $__env->renderComponent(); ?>
<?php endif; ?>
<?php if (isset($__attributesOriginal9c6e3f23e2ced4034a039852a77e1e96)): ?>
<?php $attributes = $__attributesOriginal9c6e3f23e2ced4034a039852a77e1e96; ?>
<?php unset($__attributesOriginal9c6e3f23e2ced4034a039852a77e1e96); ?>
<?php endif; ?>
<?php if (isset($__componentOriginal9c6e3f23e2ced4034a039852a77e1e96)): ?>
<?php $component = $__componentOriginal9c6e3f23e2ced4034a039852a77e1e96; ?>
<?php unset($__componentOriginal9c6e3f23e2ced4034a039852a77e1e96); ?>
<?php endif; ?>
<div class="rounded-3xl bg-white p-6 shadow-sm ring-1 ring-zinc-200 dark:bg-zinc-900 dark:ring-zinc-800">
<h2 class="text-lg font-bold text-zinc-900 dark:text-white">Add payment or override</h2>
<form method="POST" action="<?php echo e(route('platform.payments.store')); ?>" class="mt-5 grid gap-4 md:grid-cols-6">
<?php echo csrf_field(); ?>
<select name="company_id" class="rounded-xl border-zinc-300 dark:border-zinc-700 dark:bg-zinc-950"><?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if BLOCK]><![endif]--><?php \Livewire\Features\SupportCompiledWireKeys\SupportCompiledWireKeys::openLoop(); ?><?php endif; ?><?php $__currentLoopData = $companies; $__env->addLoop($__currentLoopData); foreach($__currentLoopData as $company): $__env->incrementLoopIndices(); $loop = $__env->getLastLoop(); ?><?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><?php \Livewire\Features\SupportCompiledWireKeys\SupportCompiledWireKeys::startLoopIteration(); ?><?php endif; ?><option value="<?php echo e($company->id); ?>"><?php echo e($company->name); ?></option><?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><?php \Livewire\Features\SupportCompiledWireKeys\SupportCompiledWireKeys::endLoop(); ?><?php endif; ?><?php endforeach; $__env->popLoop(); $loop = $__env->getLastLoop(); ?><?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if ENDBLOCK]><![endif]--><?php \Livewire\Features\SupportCompiledWireKeys\SupportCompiledWireKeys::closeLoop(); ?><?php endif; ?></select>
<input name="amount" type="number" value="0" class="rounded-xl border-zinc-300 dark:border-zinc-700 dark:bg-zinc-950" required>
<input name="currency" value="gbp" class="rounded-xl border-zinc-300 dark:border-zinc-700 dark:bg-zinc-950" required>
<select name="status" class="rounded-xl border-zinc-300 dark:border-zinc-700 dark:bg-zinc-950"><option>paid</option><option>pending</option><option>failed</option><option>refunded</option><option>override</option></select>
<input name="description" placeholder="Description" class="rounded-xl border-zinc-300 dark:border-zinc-700 dark:bg-zinc-950">
<button class="rounded-xl bg-zinc-900 px-4 py-2 font-semibold text-white dark:bg-white dark:text-zinc-900">Add</button>
</form>
</div>
<div class="overflow-x-auto rounded-2xl bg-white shadow-sm ring-1 ring-zinc-200 dark:bg-zinc-900 dark:ring-zinc-800"><table class="min-w-full text-sm"><thead><tr class="border-b"><th class="p-4 text-left">Company</th><th class="p-4 text-left">Amount</th><th class="p-4 text-left">Status</th><th class="p-4 text-left">Description</th></tr></thead><tbody><?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if BLOCK]><![endif]--><?php \Livewire\Features\SupportCompiledWireKeys\SupportCompiledWireKeys::openLoop(); ?><?php endif; ?><?php $__currentLoopData = $payments; $__env->addLoop($__currentLoopData); foreach($__currentLoopData as $payment): $__env->incrementLoopIndices(); $loop = $__env->getLastLoop(); ?><?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><?php \Livewire\Features\SupportCompiledWireKeys\SupportCompiledWireKeys::startLoopIteration(); ?><?php endif; ?><tr class="border-b border-zinc-100 dark:border-zinc-800"><td class="p-4"><?php echo e($payment->company->name); ?></td><td class="p-4 font-semibold"><?php echo e(strtoupper($payment->currency)); ?> <?php echo e(number_format($payment->amount / 100, 2)); ?></td><td class="p-4"><?php echo e($payment->status); ?></td><td class="p-4"><?php echo e($payment->description); ?></td></tr><?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><?php \Livewire\Features\SupportCompiledWireKeys\SupportCompiledWireKeys::endLoop(); ?><?php endif; ?><?php endforeach; $__env->popLoop(); $loop = $__env->getLastLoop(); ?><?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if ENDBLOCK]><![endif]--><?php \Livewire\Features\SupportCompiledWireKeys\SupportCompiledWireKeys::closeLoop(); ?><?php endif; ?></tbody></table></div>
<?php echo e($payments->links()); ?>
</div>
<?php echo $__env->renderComponent(); ?>
<?php endif; ?>
<?php if (isset($__attributesOriginal81a506f898233b9e7d58286e6bea3c18)): ?>
<?php $attributes = $__attributesOriginal81a506f898233b9e7d58286e6bea3c18; ?>
<?php unset($__attributesOriginal81a506f898233b9e7d58286e6bea3c18); ?>
<?php endif; ?>
<?php if (isset($__componentOriginal81a506f898233b9e7d58286e6bea3c18)): ?>
<?php $component = $__componentOriginal81a506f898233b9e7d58286e6bea3c18; ?>
<?php unset($__componentOriginal81a506f898233b9e7d58286e6bea3c18); ?>
<?php endif; ?>
<?php /**PATH /Users/mag/Sites/WMS/Core/Modules/Platform/Providers/../resources/views/payments/index.blade.php ENDPATH**/ ?>
@@ -1,58 +0,0 @@
---
name: configuring-horizon
description: "Use this skill whenever the user mentions Horizon by name in a Laravel context. Covers the full Horizon lifecycle: installing Horizon (horizon:install, Sail setup), configuring config/horizon.php (supervisor blocks, queue assignments, balancing strategies, minProcesses/maxProcesses), fixing the dashboard (authorization via Gate::define viewHorizon, blank metrics, horizon:snapshot scheduling), and troubleshooting production issues (worker crashes, timeout chain ordering, LongWaitDetected notifications, waits config). Also covers job tagging and silencing. Do not use for generic Laravel queues without Horizon, SQS or database drivers, standalone Redis setup, Linux supervisord, Telescope, or job batching."
license: MIT
metadata:
author: laravel
---
@php
/** @var \Laravel\Boost\Install\GuidelineAssist $assist */
@endphp
# Horizon Configuration
## Documentation
Use ___SINGLE_BACKTICK___search-docs___SINGLE_BACKTICK___ for detailed Horizon patterns and documentation covering configuration, supervisors, balancing, dashboard authorization, tags, notifications, metrics, and deployment.
For deeper guidance on specific topics, read the relevant reference file before implementing:
- ___SINGLE_BACKTICK___references/supervisors.md___SINGLE_BACKTICK___ covers supervisor blocks, balancing strategies, multi-queue setups, and auto-scaling
- ___SINGLE_BACKTICK___references/notifications.md___SINGLE_BACKTICK___ covers LongWaitDetected alerts, notification routing, and the ___SINGLE_BACKTICK___waits___SINGLE_BACKTICK___ config
- ___SINGLE_BACKTICK___references/tags.md___SINGLE_BACKTICK___ covers job tagging, dashboard filtering, and silencing noisy jobs
- ___SINGLE_BACKTICK___references/metrics.md___SINGLE_BACKTICK___ covers the blank metrics dashboard, snapshot scheduling, and retention config
## Basic Usage
### Installation
___SINGLE_BACKTICK______SINGLE_BACKTICK______SINGLE_BACKTICK___bash
{{ $assist->artisanCommand('horizon:install') }}
___SINGLE_BACKTICK______SINGLE_BACKTICK______SINGLE_BACKTICK___
### Supervisor Configuration
Define supervisors in ___SINGLE_BACKTICK___config/horizon.php___SINGLE_BACKTICK___. The ___SINGLE_BACKTICK___environments___SINGLE_BACKTICK___ array merges into ___SINGLE_BACKTICK___defaults___SINGLE_BACKTICK___ and does not replace the whole supervisor block:
___BOOST_SNIPPET_0___
### Dashboard Authorization
Restrict access in ___SINGLE_BACKTICK___App\Providers\HorizonServiceProvider___SINGLE_BACKTICK___:
___BOOST_SNIPPET_1___
## Verification
1. Run ___SINGLE_BACKTICK___{{ $assist->artisanCommand('horizon') }}___SINGLE_BACKTICK___ and visit ___SINGLE_BACKTICK___/horizon___SINGLE_BACKTICK___
2. Confirm dashboard access is restricted as expected
3. Check that metrics populate after scheduling ___SINGLE_BACKTICK___horizon:snapshot___SINGLE_BACKTICK___
## Common Pitfalls
- Horizon only works with the Redis queue driver. Other drivers such as database and SQS are not supported.
- Redis Cluster is not supported. Horizon requires a standalone Redis connection.
- Always check ___SINGLE_BACKTICK___config/horizon.php___SINGLE_BACKTICK___ before making changes to understand the current supervisor and environment configuration.
- The ___SINGLE_BACKTICK___environments___SINGLE_BACKTICK___ array overrides only the keys you specify. It merges into ___SINGLE_BACKTICK___defaults___SINGLE_BACKTICK___ and does not replace it.
- The timeout chain must be ordered: job ___SINGLE_BACKTICK___timeout___SINGLE_BACKTICK___ less than supervisor ___SINGLE_BACKTICK___timeout___SINGLE_BACKTICK___ less than ___SINGLE_BACKTICK___retry_after___SINGLE_BACKTICK___. The wrong order can cause jobs to be retried before Horizon finishes timing them out.
- The metrics dashboard stays blank until ___SINGLE_BACKTICK___horizon:snapshot___SINGLE_BACKTICK___ is scheduled. Running ___SINGLE_BACKTICK___{{ $assist->artisanCommand('horizon') }}___SINGLE_BACKTICK___ alone does not populate metrics.
- Always use ___SINGLE_BACKTICK___search-docs___SINGLE_BACKTICK___ for the latest Horizon documentation rather than relying on this skill alone.
@@ -1,17 +0,0 @@
@php
/** @var \Laravel\Boost\Install\GuidelineAssist $assist */
@endphp
# PHPUnit
- This application uses PHPUnit for testing. All tests must be written as PHPUnit classes. Use ___SINGLE_BACKTICK___{{ $assist->artisanCommand('make:test --phpunit {name}') }}___SINGLE_BACKTICK___ to create a new test.
- If you see a test using "Pest", convert it to PHPUnit.
- Every time a test has been updated, run that singular test.
- When the tests relating to your feature are passing, ask the user if they would like to also run the entire test suite to make sure everything is still passing.
- Tests should cover all happy paths, failure paths, and edge cases.
- You must not remove any tests or test files from the tests directory without approval. These are not temporary or helper files; these are core to the application.
## Running Tests
- Run the minimal number of tests, using an appropriate filter, before finalizing.
- To run all tests: ___SINGLE_BACKTICK___{{ $assist->artisanCommand('test --compact') }}___SINGLE_BACKTICK___.
- To run all tests in a file: ___SINGLE_BACKTICK___{{ $assist->artisanCommand('test --compact tests/Feature/ExampleTest.php') }}___SINGLE_BACKTICK___.
- To filter on a particular test name: ___SINGLE_BACKTICK___{{ $assist->artisanCommand('test --compact --filter=testName') }}___SINGLE_BACKTICK___ (recommended after making a change to a related file).
@@ -1,142 +0,0 @@
---
name: livewire-development
description: "Use for any task or question involving Livewire. Activate if user mentions Livewire, wire: directives, or Livewire-specific concepts like wire:model, wire:click, wire:sort, or islands, invoke this skill. Covers building new components, debugging reactivity issues, real-time form validation, drag-and-drop, loading states, migrating from Livewire 3 to 4, converting component formats (SFC/MFC/class-based), and performance optimization. Do not use for non-Livewire reactive UI (React, Vue, Alpine-only, Inertia.js) or standard Laravel forms without Livewire."
license: MIT
metadata:
author: laravel
---
@php
/** @var \Laravel\Boost\Install\GuidelineAssist $assist */
@endphp
# Livewire Development
## Documentation
Use ___SINGLE_BACKTICK___search-docs___SINGLE_BACKTICK___ for detailed Livewire 4 patterns and documentation.
## Basic Usage
### Creating Components
___SINGLE_BACKTICK______SINGLE_BACKTICK______SINGLE_BACKTICK___bash
# Single-file component (SFC - default in v4)
# Creates: resources/views/components/⚡create-post.blade.php
{{ $assist->artisanCommand('make:livewire create-post') }}
# Page component (SFC - Full Page in v4)
# Creates: resources/views/pages/⚡create-post.blade.php
{{ $assist->artisanCommand('make:livewire pages::create-post') }}
# Multi-file component (MFC)
# Creates: resources/views/components/⚡create-post/create-post.php
# resources/views/components/⚡create-post/create-post.blade.php
{{ $assist->artisanCommand('make:livewire create-post --mfc') }}
# Class-based component (v3 style)
# Creates: app/Livewire/CreatePost.php AND resources/views/livewire/create-post.blade.php
{{ $assist->artisanCommand('make:livewire create-post --class') }}
# With namespace
{{ $assist->artisanCommand('make:livewire Posts/CreatePost') }}
___SINGLE_BACKTICK______SINGLE_BACKTICK______SINGLE_BACKTICK___
### Converting Between Formats
Use ___SINGLE_BACKTICK___{{ $assist->artisanCommand('livewire:convert create-post') }}___SINGLE_BACKTICK___ to convert between single-file, multi-file, and class-based formats.
### Choosing a Component Format
> **Always follow the project's existing conventions first.** Before creating any component, inspect the project's existing Livewire components to determine the established format (SFC, MFC, or class-based) and directory structure. Check ___SINGLE_BACKTICK___{{ $assist->appPath('Livewire/') }}___SINGLE_BACKTICK___, ___SINGLE_BACKTICK___resources/views/components/___SINGLE_BACKTICK___, and ___SINGLE_BACKTICK___resources/views/livewire/___SINGLE_BACKTICK___ for existing components. If the project already uses a consistent format, **use that same format** — even if it differs from the Livewire v4 defaults below. Only fall back to the v4 defaults (SFC in ___SINGLE_BACKTICK___resources/views/components/___SINGLE_BACKTICK___) when no existing convention is established.
Also check ___SINGLE_BACKTICK___config/livewire.php___SINGLE_BACKTICK___ for ___SINGLE_BACKTICK___make_command.type___SINGLE_BACKTICK___, ___SINGLE_BACKTICK___make_command.emoji___SINGLE_BACKTICK___, ___SINGLE_BACKTICK___component_locations___SINGLE_BACKTICK___, and ___SINGLE_BACKTICK___component_namespaces___SINGLE_BACKTICK___ overrides, which change the default format and where files are stored.
### Component Format Reference
| Format | Flag | Class Path | View Path |
|--------|------|------------|-----------|
| Single-file (SFC) | default | — | ___SINGLE_BACKTICK___resources/views/components/⚡create-post.blade.php___SINGLE_BACKTICK___ (PHP + Blade in one file) |
| Full Page SFC | ___SINGLE_BACKTICK___pages::name___SINGLE_BACKTICK___ | — | ___SINGLE_BACKTICK___resources/views/pages/⚡create-post.blade.php___SINGLE_BACKTICK___ |
| Multi-file (MFC) | ___SINGLE_BACKTICK___--mfc___SINGLE_BACKTICK___ | ___SINGLE_BACKTICK___resources/views/components/⚡create-post/create-post.php___SINGLE_BACKTICK___ | ___SINGLE_BACKTICK___resources/views/components/⚡create-post/create-post.blade.php___SINGLE_BACKTICK___ |
| Class-based | ___SINGLE_BACKTICK___--class___SINGLE_BACKTICK___ | ___SINGLE_BACKTICK___{{ $assist->appPath('Livewire/CreatePost.php') }}___SINGLE_BACKTICK___ | ___SINGLE_BACKTICK___resources/views/livewire/create-post.blade.php___SINGLE_BACKTICK___ |
| View-based | default (Blade-only) | — | ___SINGLE_BACKTICK___resources/views/components/⚡create-post.blade.php___SINGLE_BACKTICK___ (Blade-only with functional state) |
> **Important:** The ⚡ prefix shown above is the **default** behavior in Livewire v4 — it is **configurable**. Check ___SINGLE_BACKTICK___config/livewire.php___SINGLE_BACKTICK___ for the ___SINGLE_BACKTICK___make_command.emoji___SINGLE_BACKTICK___ setting. When ___SINGLE_BACKTICK___true___SINGLE_BACKTICK___ (default), always include the ⚡ prefix in filenames you create. When ___SINGLE_BACKTICK___false___SINGLE_BACKTICK___, omit the ⚡ prefix from all paths above.
Namespaced components map to subdirectories: ___SINGLE_BACKTICK___make:livewire Posts/CreatePost___SINGLE_BACKTICK___ creates ___SINGLE_BACKTICK___resources/views/components/posts/⚡create-post.blade.php___SINGLE_BACKTICK___ (single-file by default). Use ___SINGLE_BACKTICK___make:livewire Posts/CreatePost --mfc___SINGLE_BACKTICK___ for multi-file output at ___SINGLE_BACKTICK___resources/views/components/posts/⚡create-post/create-post.php___SINGLE_BACKTICK___ and ___SINGLE_BACKTICK___resources/views/components/posts/⚡create-post/create-post.blade.php___SINGLE_BACKTICK___.
### Single-File Component Example
___BOOST_SNIPPET_0___
## Livewire 4 Specifics
### Key Changes From Livewire 3
These things changed in Livewire 4, but may not have been updated in this application. Verify this application's setup to ensure you follow existing conventions.
- Use ___SINGLE_BACKTICK___Route::livewire()___SINGLE_BACKTICK___ for full-page components (e.g., ___SINGLE_BACKTICK___Route::livewire('/posts/create', CreatePost::class)___SINGLE_BACKTICK___); config keys renamed: ___SINGLE_BACKTICK___layout___SINGLE_BACKTICK___ → ___SINGLE_BACKTICK___component_layout___SINGLE_BACKTICK___, ___SINGLE_BACKTICK___lazy_placeholder___SINGLE_BACKTICK___ → ___SINGLE_BACKTICK___component_placeholder___SINGLE_BACKTICK___.
- ___SINGLE_BACKTICK___wire:model___SINGLE_BACKTICK___ now ignores child events by default (use ___SINGLE_BACKTICK___wire:model.deep___SINGLE_BACKTICK___ for old behavior); ___SINGLE_BACKTICK___wire:scroll___SINGLE_BACKTICK___ renamed to ___SINGLE_BACKTICK___wire:navigate:scroll___SINGLE_BACKTICK___.
- Component tags must be properly closed; ___SINGLE_BACKTICK___wire:transition___SINGLE_BACKTICK___ now uses View Transitions API (modifiers removed).
- JavaScript: ___SINGLE_BACKTICK___$wire.$js('name', fn)___SINGLE_BACKTICK___ → ___SINGLE_BACKTICK___$wire.$js.name = fn___SINGLE_BACKTICK___; ___SINGLE_BACKTICK___commit___SINGLE_BACKTICK___/___SINGLE_BACKTICK___request___SINGLE_BACKTICK___ hooks → ___SINGLE_BACKTICK___interceptMessage()___SINGLE_BACKTICK___/___SINGLE_BACKTICK___interceptRequest()___SINGLE_BACKTICK___.
### New Features
- Component formats: single-file (SFC), multi-file (MFC), view-based components.
- Islands (___SINGLE_BACKTICK___@island___SINGLE_BACKTICK___) for isolated updates; async actions (___SINGLE_BACKTICK___wire:click.async___SINGLE_BACKTICK___, ___SINGLE_BACKTICK___#[Async]___SINGLE_BACKTICK___) for parallel execution.
- Deferred/bundled loading: ___SINGLE_BACKTICK___defer___SINGLE_BACKTICK___, ___SINGLE_BACKTICK___lazy.bundle___SINGLE_BACKTICK___ for optimized component loading.
| Feature | Usage | Purpose |
|---------|-------|---------|
| Islands | ___SINGLE_BACKTICK___@island(name: 'stats')___SINGLE_BACKTICK___ | Isolated update regions |
| Async | ___SINGLE_BACKTICK___wire:click.async___SINGLE_BACKTICK___ or ___SINGLE_BACKTICK___#[Async]___SINGLE_BACKTICK___ | Non-blocking actions |
| Deferred | ___SINGLE_BACKTICK___defer___SINGLE_BACKTICK___ attribute | Load after page render |
| Bundled | ___SINGLE_BACKTICK___lazy.bundle___SINGLE_BACKTICK___ | Load multiple together |
### New Directives
- ___SINGLE_BACKTICK___wire:sort___SINGLE_BACKTICK___, ___SINGLE_BACKTICK___wire:intersect___SINGLE_BACKTICK___, ___SINGLE_BACKTICK___wire:ref___SINGLE_BACKTICK___, ___SINGLE_BACKTICK___.renderless___SINGLE_BACKTICK___, ___SINGLE_BACKTICK___.preserve-scroll___SINGLE_BACKTICK___ are available for use.
- ___SINGLE_BACKTICK___data-loading___SINGLE_BACKTICK___ attribute automatically added to elements triggering network requests.
| Directive | Purpose |
|-----------|---------|
| ___SINGLE_BACKTICK___wire:sort___SINGLE_BACKTICK___ | Drag-and-drop sorting |
| ___SINGLE_BACKTICK___wire:intersect___SINGLE_BACKTICK___ | Viewport intersection detection |
| ___SINGLE_BACKTICK___wire:ref___SINGLE_BACKTICK___ | Element references for JS |
| ___SINGLE_BACKTICK___.renderless___SINGLE_BACKTICK___ | Component without rendering |
| ___SINGLE_BACKTICK___.preserve-scroll___SINGLE_BACKTICK___ | Preserve scroll position |
## Best Practices
- Always use ___SINGLE_BACKTICK___wire:key___SINGLE_BACKTICK___ in loops
- Use ___SINGLE_BACKTICK___wire:loading___SINGLE_BACKTICK___ for loading states
- Use ___SINGLE_BACKTICK___wire:model.live___SINGLE_BACKTICK___ for instant updates (default is debounced)
- Validate and authorize in actions (treat like HTTP requests)
## Configuration
- ___SINGLE_BACKTICK___smart_wire_keys___SINGLE_BACKTICK___ defaults to ___SINGLE_BACKTICK___true___SINGLE_BACKTICK___; new configs: ___SINGLE_BACKTICK___component_locations___SINGLE_BACKTICK___, ___SINGLE_BACKTICK___component_namespaces___SINGLE_BACKTICK___, ___SINGLE_BACKTICK___make_command___SINGLE_BACKTICK___, ___SINGLE_BACKTICK___csp_safe___SINGLE_BACKTICK___.
## Alpine & JavaScript
- ___SINGLE_BACKTICK___wire:transition___SINGLE_BACKTICK___ uses browser View Transitions API; ___SINGLE_BACKTICK___$errors___SINGLE_BACKTICK___ and ___SINGLE_BACKTICK___$intercept___SINGLE_BACKTICK___ magic properties available.
- Non-blocking ___SINGLE_BACKTICK___wire:poll___SINGLE_BACKTICK___ and parallel ___SINGLE_BACKTICK___wire:model.live___SINGLE_BACKTICK___ updates improve performance.
For interceptors and hooks, see [reference/javascript-hooks.md](reference/javascript-hooks.md).
## Testing
___BOOST_SNIPPET_1___
## Verification
1. Browser console: Check for JS errors
2. Network tab: Verify Livewire requests return 200
3. Ensure ___SINGLE_BACKTICK___wire:key___SINGLE_BACKTICK___ on all ___SINGLE_BACKTICK___@foreach___SINGLE_BACKTICK___ loops
## Common Pitfalls
- Missing ___SINGLE_BACKTICK___wire:key___SINGLE_BACKTICK___ in loops → unexpected re-rendering
- Expecting ___SINGLE_BACKTICK___wire:model___SINGLE_BACKTICK___ real-time → use ___SINGLE_BACKTICK___wire:model.live___SINGLE_BACKTICK___
- Unclosed component tags → syntax errors in v4
- Using deprecated config keys or JS hooks
- Including Alpine.js separately (already bundled in Livewire 4)
@@ -1,16 +0,0 @@
# PHP
<?php
/** @var \Laravel\Boost\Install\GuidelineAssist $assist */
?>
- Always use curly braces for control structures, even for single-line bodies.
- Use PHP 8 constructor property promotion: ___SINGLE_BACKTICK___public function __construct(public GitHub $github) { }___SINGLE_BACKTICK___. Do not leave empty zero-parameter ___SINGLE_BACKTICK_____construct()___SINGLE_BACKTICK___ methods unless the constructor is private.
- Use explicit return type declarations and type hints for all method parameters: ___SINGLE_BACKTICK___function isAccessible(User $user, ?string $path = null): bool___SINGLE_BACKTICK___
<?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if BLOCK]><![endif]--><?php endif; ?><?php if(empty($assist->enums()) || !preg_match('/[A-Z]{3,8}/', $assist->enumContents())): ?>
- Use TitleCase for Enum keys: ___SINGLE_BACKTICK___FavoritePerson___SINGLE_BACKTICK___, ___SINGLE_BACKTICK___BestLake___SINGLE_BACKTICK___, ___SINGLE_BACKTICK___Monthly___SINGLE_BACKTICK___.
<?php else: ?>
- Follow existing application Enum naming conventions.
<?php endif; ?><?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if ENDBLOCK]><![endif]--><?php endif; ?>
- Prefer PHPDoc blocks over inline comments. Only add inline comments for exceptionally complex logic.
- Use array shape type definitions in PHPDoc blocks.
<?php /**PATH /Users/mag/Sites/WMS/Core/storage/framework/views/efe75c7c0953490022ba5bd3c31dea8d.blade.php ENDPATH**/ ?>
@@ -1,66 +0,0 @@
---
name: fluxui-development
description: "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."
license: MIT
metadata:
author: laravel
---
<?php
/** @var \Laravel\Boost\Install\GuidelineAssist $assist */
?>
# Flux UI Development
## Documentation
Use ___SINGLE_BACKTICK___search-docs___SINGLE_BACKTICK___ for detailed Flux UI patterns and documentation.
## Basic Usage
This project uses the free edition of Flux UI, which includes all free components and variants but not Pro components.
Flux UI is a component library for Livewire built with Tailwind CSS. It provides components that are easy to use and customize.
Use Flux UI components when available. Fall back to standard Blade components when no Flux component exists for your needs.
___BOOST_SNIPPET_0___
## Available Components (Free Edition)
Available: avatar, badge, brand, breadcrumbs, button, callout, card, checkbox, dropdown, field, heading, icon, input, modal, navbar, otp-input, pagination, profile, progress, radio, select, separator, skeleton, switch, table, text, textarea, toast, tooltip
## Icons
Flux includes [Heroicons](https://heroicons.com/) as its default icon set. Search for exact icon names on the Heroicons site - do not guess or invent icon names.
___BOOST_SNIPPET_1___
For icons not available in Heroicons, use [Lucide](https://lucide.dev/). Import the icons you need with the Artisan command:
___SINGLE_BACKTICK______SINGLE_BACKTICK______SINGLE_BACKTICK___bash
<?php echo e($assist->artisanCommand('flux:icon crown grip-vertical github')); ?>
___SINGLE_BACKTICK______SINGLE_BACKTICK______SINGLE_BACKTICK___
## Common Patterns
### Form Fields
___BOOST_SNIPPET_2___
### Modals
___BOOST_SNIPPET_3___
## Verification
1. Check component renders correctly
2. Test interactive states
3. Verify mobile responsiveness
## Common Pitfalls
- Trying to use Pro-only components in the free edition
- Not checking if a Flux component exists before creating custom implementations
- Forgetting to use the ___SINGLE_BACKTICK___search-docs___SINGLE_BACKTICK___ tool for component-specific documentation
- Not following existing project patterns for Flux usage
<?php /**PATH /Users/mag/Sites/WMS/Core/storage/framework/views/4ac1e3a0546377b4cde6befc3251bc22.blade.php ENDPATH**/ ?>
@@ -1,10 +0,0 @@
# Laravel Octane
This application uses Laravel Octane, a long-running PHP server. The application bootstraps once and handles many requests within the same process.
- Never store request-specific state in singletons or static properties, because it can leak across requests.
- Use ___SINGLE_BACKTICK___config('octane.server')___SINGLE_BACKTICK___ to detect the active driver (___SINGLE_BACKTICK___swoole___SINGLE_BACKTICK___, ___SINGLE_BACKTICK___roadrunner___SINGLE_BACKTICK___, or ___SINGLE_BACKTICK___frankenphp___SINGLE_BACKTICK___).
- Prefer scoped bindings (___SINGLE_BACKTICK___$this->app->scoped()___SINGLE_BACKTICK___) over singletons for per-request services.
When working on Octane-specific features (concurrency, shared tables, memory, driver configuration, testing), invoke ___SINGLE_BACKTICK___octane-development___SINGLE_BACKTICK___ for detailed rules.
<?php /**PATH /Users/mag/Sites/WMS/Core/storage/framework/views/e55f8fc118663131a1d9c997ae16233b.blade.php ENDPATH**/ ?>
@@ -1,65 +0,0 @@
<?php if (isset($component)) { $__componentOriginal81a506f898233b9e7d58286e6bea3c18 = $component; } ?>
<?php if (isset($attributes)) { $__attributesOriginal81a506f898233b9e7d58286e6bea3c18 = $attributes; } ?>
<?php $component = Illuminate\View\AnonymousComponent::resolve(['view' => 'f4ac99e09542ff494432bc959d4fee61::app','data' => ['title' => __('Create Price')]] + (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag ? $attributes->all() : [])); ?>
<?php $component->withName('layouts::app'); ?>
<?php if ($component->shouldRender()): ?>
<?php $__env->startComponent($component->resolveView(), $component->data()); ?>
<?php if (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag): ?>
<?php $attributes = $attributes->except(\Illuminate\View\AnonymousComponent::ignoredParameterNames()); ?>
<?php endif; ?>
<?php $component->withAttributes(['title' => \Illuminate\View\Compilers\BladeCompiler::sanitizeComponentAttribute(__('Create Price'))]); ?>
<?php \Livewire\Features\SupportCompiledWireKeys\SupportCompiledWireKeys::processComponentKey($component); ?>
<div class="space-y-6">
<?php if (isset($component)) { $__componentOriginal9c6e3f23e2ced4034a039852a77e1e96 = $component; } ?>
<?php if (isset($attributes)) { $__attributesOriginal9c6e3f23e2ced4034a039852a77e1e96 = $attributes; } ?>
<?php $component = Illuminate\View\AnonymousComponent::resolve(['view' => 'components.wms.page-hero','data' => ['eyebrow' => 'Administration','title' => 'Create Price','description' => 'Add a professional pricing card with billing values, feature bullets and visibility controls.','icon' => 'fa-solid fa-circle-plus']] + (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag ? $attributes->all() : [])); ?>
<?php $component->withName('wms.page-hero'); ?>
<?php if ($component->shouldRender()): ?>
<?php $__env->startComponent($component->resolveView(), $component->data()); ?>
<?php if (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag): ?>
<?php $attributes = $attributes->except(\Illuminate\View\AnonymousComponent::ignoredParameterNames()); ?>
<?php endif; ?>
<?php $component->withAttributes(['eyebrow' => 'Administration','title' => 'Create Price','description' => 'Add a professional pricing card with billing values, feature bullets and visibility controls.','icon' => 'fa-solid fa-circle-plus']); ?>
<?php \Livewire\Features\SupportCompiledWireKeys\SupportCompiledWireKeys::processComponentKey($component); ?>
<a href="<?php echo e(route('platform.prices.index')); ?>" wire:navigate class="rounded-xl bg-white px-4 py-3 text-sm font-bold text-slate-950 shadow-lg hover:bg-cyan-50">
Back to prices
</a>
<?php echo $__env->renderComponent(); ?>
<?php endif; ?>
<?php if (isset($__attributesOriginal9c6e3f23e2ced4034a039852a77e1e96)): ?>
<?php $attributes = $__attributesOriginal9c6e3f23e2ced4034a039852a77e1e96; ?>
<?php unset($__attributesOriginal9c6e3f23e2ced4034a039852a77e1e96); ?>
<?php endif; ?>
<?php if (isset($__componentOriginal9c6e3f23e2ced4034a039852a77e1e96)): ?>
<?php $component = $__componentOriginal9c6e3f23e2ced4034a039852a77e1e96; ?>
<?php unset($__componentOriginal9c6e3f23e2ced4034a039852a77e1e96); ?>
<?php endif; ?>
<section class="rounded-3xl border border-zinc-200 bg-white p-6 shadow-sm dark:border-zinc-800 dark:bg-zinc-900">
<form method="POST" action="<?php echo e(route('platform.prices.store')); ?>" class="space-y-6">
<?php echo csrf_field(); ?>
<?php echo $__env->make('platform::prices._form', array_diff_key(get_defined_vars(), ['__data' => 1, '__path' => 1]))->render(); ?>
<div class="flex flex-wrap justify-end gap-3 border-t border-zinc-100 pt-5 dark:border-zinc-800">
<a href="<?php echo e(route('platform.prices.index')); ?>" wire:navigate class="rounded-xl border border-zinc-200 px-5 py-3 text-sm font-semibold text-zinc-700 dark:border-zinc-700 dark:text-zinc-200">
Cancel
</a>
<button type="submit" class="rounded-xl bg-cyan-600 px-5 py-3 text-sm font-bold text-white shadow-lg shadow-cyan-950/20 hover:bg-cyan-500">
Create price
</button>
</div>
</form>
</section>
</div>
<?php echo $__env->renderComponent(); ?>
<?php endif; ?>
<?php if (isset($__attributesOriginal81a506f898233b9e7d58286e6bea3c18)): ?>
<?php $attributes = $__attributesOriginal81a506f898233b9e7d58286e6bea3c18; ?>
<?php unset($__attributesOriginal81a506f898233b9e7d58286e6bea3c18); ?>
<?php endif; ?>
<?php if (isset($__componentOriginal81a506f898233b9e7d58286e6bea3c18)): ?>
<?php $component = $__componentOriginal81a506f898233b9e7d58286e6bea3c18; ?>
<?php unset($__componentOriginal81a506f898233b9e7d58286e6bea3c18); ?>
<?php endif; ?>
<?php /**PATH /Users/mag/Sites/WMS/Core/Modules/Platform/Providers/../resources/views/prices/create.blade.php ENDPATH**/ ?>
@@ -1,147 +0,0 @@
<?php if (isset($component)) { $__componentOriginal81a506f898233b9e7d58286e6bea3c18 = $component; } ?>
<?php if (isset($attributes)) { $__attributesOriginal81a506f898233b9e7d58286e6bea3c18 = $attributes; } ?>
<?php $component = Illuminate\View\AnonymousComponent::resolve(['view' => 'f4ac99e09542ff494432bc959d4fee61::app','data' => ['title' => __('Configuration')]] + (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag ? $attributes->all() : [])); ?>
<?php $component->withName('layouts::app'); ?>
<?php if ($component->shouldRender()): ?>
<?php $__env->startComponent($component->resolveView(), $component->data()); ?>
<?php if (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag): ?>
<?php $attributes = $attributes->except(\Illuminate\View\AnonymousComponent::ignoredParameterNames()); ?>
<?php endif; ?>
<?php $component->withAttributes(['title' => \Illuminate\View\Compilers\BladeCompiler::sanitizeComponentAttribute(__('Configuration'))]); ?>
<?php \Livewire\Features\SupportCompiledWireKeys\SupportCompiledWireKeys::processComponentKey($component); ?>
<div class="container-fluid py-4 module-page module-configuration">
<div class="row g-4">
<div class="col-12">
<?php if (isset($component)) { $__componentOriginal9c6e3f23e2ced4034a039852a77e1e96 = $component; } ?>
<?php if (isset($attributes)) { $__attributesOriginal9c6e3f23e2ced4034a039852a77e1e96 = $attributes; } ?>
<?php $component = Illuminate\View\AnonymousComponent::resolve(['view' => 'components.wms.page-hero','data' => ['eyebrow' => 'Operations','title' => 'Configuration','description' => 'Centralise system settings, warehouse defaults, interface flags, and feature switches.','icon' => 'fa-solid fa-sliders']] + (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag ? $attributes->all() : [])); ?>
<?php $component->withName('wms.page-hero'); ?>
<?php if ($component->shouldRender()): ?>
<?php $__env->startComponent($component->resolveView(), $component->data()); ?>
<?php if (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag): ?>
<?php $attributes = $attributes->except(\Illuminate\View\AnonymousComponent::ignoredParameterNames()); ?>
<?php endif; ?>
<?php $component->withAttributes(['eyebrow' => 'Operations','title' => 'Configuration','description' => 'Centralise system settings, warehouse defaults, interface flags, and feature switches.','icon' => 'fa-solid fa-sliders']); ?>
<?php \Livewire\Features\SupportCompiledWireKeys\SupportCompiledWireKeys::processComponentKey($component); ?>
<?php echo $__env->renderComponent(); ?>
<?php endif; ?>
<?php if (isset($__attributesOriginal9c6e3f23e2ced4034a039852a77e1e96)): ?>
<?php $attributes = $__attributesOriginal9c6e3f23e2ced4034a039852a77e1e96; ?>
<?php unset($__attributesOriginal9c6e3f23e2ced4034a039852a77e1e96); ?>
<?php endif; ?>
<?php if (isset($__componentOriginal9c6e3f23e2ced4034a039852a77e1e96)): ?>
<?php $component = $__componentOriginal9c6e3f23e2ced4034a039852a77e1e96; ?>
<?php unset($__componentOriginal9c6e3f23e2ced4034a039852a77e1e96); ?>
<?php endif; ?>
</div>
<div class="col-md-6 col-xl-3">
<div class="card h-100 border-0 shadow-sm module-metric-card">
<div class="card-body">
<div class="small text-uppercase text-muted fw-semibold mb-2">01</div>
<h3 class="h6 mb-2">System Settings</h3>
<p class="small text-muted mb-0">Placeholder area for system settings.</p>
</div>
</div>
</div>
<div class="col-md-6 col-xl-3">
<div class="card h-100 border-0 shadow-sm module-metric-card">
<div class="card-body">
<div class="small text-uppercase text-muted fw-semibold mb-2">02</div>
<h3 class="h6 mb-2">Feature Flags</h3>
<p class="small text-muted mb-0">Placeholder area for feature flags.</p>
</div>
</div>
</div>
<div class="col-md-6 col-xl-3">
<div class="card h-100 border-0 shadow-sm module-metric-card">
<div class="card-body">
<div class="small text-uppercase text-muted fw-semibold mb-2">03</div>
<h3 class="h6 mb-2">Warehouse Defaults</h3>
<p class="small text-muted mb-0">Placeholder area for warehouse defaults.</p>
</div>
</div>
</div>
<div class="col-md-6 col-xl-3">
<div class="card h-100 border-0 shadow-sm module-metric-card">
<div class="card-body">
<div class="small text-uppercase text-muted fw-semibold mb-2">04</div>
<h3 class="h6 mb-2">Interface Settings</h3>
<p class="small text-muted mb-0">Placeholder area for interface settings.</p>
</div>
</div>
</div>
<div class="col-12">
<section class="card border-0 shadow-sm">
<div class="card-header bg-white border-bottom">
<div class="d-flex flex-column flex-md-row justify-content-between gap-2">
<div>
<h2 class="h5 mb-1">Configuration workbench</h2>
<p class="small text-muted mb-0">Sample table layout ready to wire into controllers, queries, DataTables, or Livewire.</p>
</div>
<div class="d-flex gap-2">
<button type="button" class="btn btn-outline-secondary btn-sm">Export</button>
<button type="button" class="btn btn-primary btn-sm">Create</button>
</div>
</div>
</div>
<div class="card-body">
<div class="table-responsive">
<table class="table table-hover align-middle mb-0">
<thead class="table-light">
<tr>
<th>Setting</th>
<th>Value</th>
<th>Scope</th>
<th class="text-end">Action</th>
</tr>
</thead>
<tbody>
<tr>
<td>System Settings</td>
<td>Sample 1</td>
<td><span class="badge bg-success-subtle text-success border border-success-subtle">Active</span></td>
<td class="text-end"><a href="#" class="btn btn-sm btn-outline-primary">Open</a></td>
</tr>
<tr>
<td>Feature Flags</td>
<td>Sample 2</td>
<td><span class="badge bg-success-subtle text-success border border-success-subtle">Active</span></td>
<td class="text-end"><a href="#" class="btn btn-sm btn-outline-primary">Open</a></td>
</tr>
<tr>
<td>Warehouse Defaults</td>
<td>Sample 3</td>
<td><span class="badge bg-success-subtle text-success border border-success-subtle">Active</span></td>
<td class="text-end"><a href="#" class="btn btn-sm btn-outline-primary">Open</a></td>
</tr>
<tr>
<td>Interface Settings</td>
<td>Sample 4</td>
<td><span class="badge bg-success-subtle text-success border border-success-subtle">Active</span></td>
<td class="text-end"><a href="#" class="btn btn-sm btn-outline-primary">Open</a></td>
</tr>
</tbody>
</table>
</div>
</div>
</section>
</div>
</div>
</div>
<?php echo $__env->renderComponent(); ?>
<?php endif; ?>
<?php if (isset($__attributesOriginal81a506f898233b9e7d58286e6bea3c18)): ?>
<?php $attributes = $__attributesOriginal81a506f898233b9e7d58286e6bea3c18; ?>
<?php unset($__attributesOriginal81a506f898233b9e7d58286e6bea3c18); ?>
<?php endif; ?>
<?php if (isset($__componentOriginal81a506f898233b9e7d58286e6bea3c18)): ?>
<?php $component = $__componentOriginal81a506f898233b9e7d58286e6bea3c18; ?>
<?php unset($__componentOriginal81a506f898233b9e7d58286e6bea3c18); ?>
<?php endif; ?>
<?php /**PATH /Users/mag/Sites/WMS/Core/Modules/Configuration/Providers/../Resources/views/index.blade.php ENDPATH**/ ?>
@@ -1,8 +0,0 @@
{{-- Laravel Media Library Guidelines for AI Code Assistants --}}
{{-- Source: https://spatie.be/docs/laravel-medialibrary --}}
{{-- License: MIT | (c) Spatie --}}
## Media Library
- ___SINGLE_BACKTICK___spatie/laravel-medialibrary___SINGLE_BACKTICK___ associates files with Eloquent models, with support for collections, conversions, and responsive images.
- Always activate the ___SINGLE_BACKTICK___medialibrary-development___SINGLE_BACKTICK___ skill when working with media uploads, conversions, collections, responsive images, or any code that uses the ___SINGLE_BACKTICK___HasMedia___SINGLE_BACKTICK___ interface or ___SINGLE_BACKTICK___InteractsWithMedia___SINGLE_BACKTICK___ trait.
@@ -1,147 +0,0 @@
<?php if (isset($component)) { $__componentOriginal81a506f898233b9e7d58286e6bea3c18 = $component; } ?>
<?php if (isset($attributes)) { $__attributesOriginal81a506f898233b9e7d58286e6bea3c18 = $attributes; } ?>
<?php $component = Illuminate\View\AnonymousComponent::resolve(['view' => 'f4ac99e09542ff494432bc959d4fee61::app','data' => ['title' => __('Reporting')]] + (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag ? $attributes->all() : [])); ?>
<?php $component->withName('layouts::app'); ?>
<?php if ($component->shouldRender()): ?>
<?php $__env->startComponent($component->resolveView(), $component->data()); ?>
<?php if (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag): ?>
<?php $attributes = $attributes->except(\Illuminate\View\AnonymousComponent::ignoredParameterNames()); ?>
<?php endif; ?>
<?php $component->withAttributes(['title' => \Illuminate\View\Compilers\BladeCompiler::sanitizeComponentAttribute(__('Reporting'))]); ?>
<?php \Livewire\Features\SupportCompiledWireKeys\SupportCompiledWireKeys::processComponentKey($component); ?>
<div class="container-fluid py-4 module-page module-reporting">
<div class="row g-4">
<div class="col-12">
<?php if (isset($component)) { $__componentOriginal9c6e3f23e2ced4034a039852a77e1e96 = $component; } ?>
<?php if (isset($attributes)) { $__attributesOriginal9c6e3f23e2ced4034a039852a77e1e96 = $attributes; } ?>
<?php $component = Illuminate\View\AnonymousComponent::resolve(['view' => 'components.wms.page-hero','data' => ['eyebrow' => 'Operations','title' => 'Reporting','description' => 'Provide operational reports for closed orders, user efficiency, and transaction history.','icon' => 'fa-solid fa-chart-column']] + (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag ? $attributes->all() : [])); ?>
<?php $component->withName('wms.page-hero'); ?>
<?php if ($component->shouldRender()): ?>
<?php $__env->startComponent($component->resolveView(), $component->data()); ?>
<?php if (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag): ?>
<?php $attributes = $attributes->except(\Illuminate\View\AnonymousComponent::ignoredParameterNames()); ?>
<?php endif; ?>
<?php $component->withAttributes(['eyebrow' => 'Operations','title' => 'Reporting','description' => 'Provide operational reports for closed orders, user efficiency, and transaction history.','icon' => 'fa-solid fa-chart-column']); ?>
<?php \Livewire\Features\SupportCompiledWireKeys\SupportCompiledWireKeys::processComponentKey($component); ?>
<?php echo $__env->renderComponent(); ?>
<?php endif; ?>
<?php if (isset($__attributesOriginal9c6e3f23e2ced4034a039852a77e1e96)): ?>
<?php $attributes = $__attributesOriginal9c6e3f23e2ced4034a039852a77e1e96; ?>
<?php unset($__attributesOriginal9c6e3f23e2ced4034a039852a77e1e96); ?>
<?php endif; ?>
<?php if (isset($__componentOriginal9c6e3f23e2ced4034a039852a77e1e96)): ?>
<?php $component = $__componentOriginal9c6e3f23e2ced4034a039852a77e1e96; ?>
<?php unset($__componentOriginal9c6e3f23e2ced4034a039852a77e1e96); ?>
<?php endif; ?>
</div>
<div class="col-md-6 col-xl-3">
<div class="card h-100 border-0 shadow-sm module-metric-card">
<div class="card-body">
<div class="small text-uppercase text-muted fw-semibold mb-2">01</div>
<h3 class="h6 mb-2">Closed Order Lines</h3>
<p class="small text-muted mb-0">Placeholder area for closed order lines.</p>
</div>
</div>
</div>
<div class="col-md-6 col-xl-3">
<div class="card h-100 border-0 shadow-sm module-metric-card">
<div class="card-body">
<div class="small text-uppercase text-muted fw-semibold mb-2">02</div>
<h3 class="h6 mb-2">Daily User Efficiency</h3>
<p class="small text-muted mb-0">Placeholder area for daily user efficiency.</p>
</div>
</div>
</div>
<div class="col-md-6 col-xl-3">
<div class="card h-100 border-0 shadow-sm module-metric-card">
<div class="card-body">
<div class="small text-uppercase text-muted fw-semibold mb-2">03</div>
<h3 class="h6 mb-2">Export Centre</h3>
<p class="small text-muted mb-0">Placeholder area for export centre.</p>
</div>
</div>
</div>
<div class="col-md-6 col-xl-3">
<div class="card h-100 border-0 shadow-sm module-metric-card">
<div class="card-body">
<div class="small text-uppercase text-muted fw-semibold mb-2">04</div>
<h3 class="h6 mb-2">Report Filters</h3>
<p class="small text-muted mb-0">Placeholder area for report filters.</p>
</div>
</div>
</div>
<div class="col-12">
<section class="card border-0 shadow-sm">
<div class="card-header bg-white border-bottom">
<div class="d-flex flex-column flex-md-row justify-content-between gap-2">
<div>
<h2 class="h5 mb-1">Reporting workbench</h2>
<p class="small text-muted mb-0">Sample table layout ready to wire into controllers, queries, DataTables, or Livewire.</p>
</div>
<div class="d-flex gap-2">
<button type="button" class="btn btn-outline-secondary btn-sm">Export</button>
<button type="button" class="btn btn-primary btn-sm">Create</button>
</div>
</div>
</div>
<div class="card-body">
<div class="table-responsive">
<table class="table table-hover align-middle mb-0">
<thead class="table-light">
<tr>
<th>Report</th>
<th>Period</th>
<th>Rows</th>
<th class="text-end">Action</th>
</tr>
</thead>
<tbody>
<tr>
<td>Closed Order Lines</td>
<td>Sample 1</td>
<td><span class="badge bg-success-subtle text-success border border-success-subtle">Active</span></td>
<td class="text-end"><a href="#" class="btn btn-sm btn-outline-primary">Open</a></td>
</tr>
<tr>
<td>Daily User Efficiency</td>
<td>Sample 2</td>
<td><span class="badge bg-success-subtle text-success border border-success-subtle">Active</span></td>
<td class="text-end"><a href="#" class="btn btn-sm btn-outline-primary">Open</a></td>
</tr>
<tr>
<td>Export Centre</td>
<td>Sample 3</td>
<td><span class="badge bg-success-subtle text-success border border-success-subtle">Active</span></td>
<td class="text-end"><a href="#" class="btn btn-sm btn-outline-primary">Open</a></td>
</tr>
<tr>
<td>Report Filters</td>
<td>Sample 4</td>
<td><span class="badge bg-success-subtle text-success border border-success-subtle">Active</span></td>
<td class="text-end"><a href="#" class="btn btn-sm btn-outline-primary">Open</a></td>
</tr>
</tbody>
</table>
</div>
</div>
</section>
</div>
</div>
</div>
<?php echo $__env->renderComponent(); ?>
<?php endif; ?>
<?php if (isset($__attributesOriginal81a506f898233b9e7d58286e6bea3c18)): ?>
<?php $attributes = $__attributesOriginal81a506f898233b9e7d58286e6bea3c18; ?>
<?php unset($__attributesOriginal81a506f898233b9e7d58286e6bea3c18); ?>
<?php endif; ?>
<?php if (isset($__componentOriginal81a506f898233b9e7d58286e6bea3c18)): ?>
<?php $component = $__componentOriginal81a506f898233b9e7d58286e6bea3c18; ?>
<?php unset($__componentOriginal81a506f898233b9e7d58286e6bea3c18); ?>
<?php endif; ?>
<?php /**PATH /Users/mag/Sites/WMS/Core/Modules/Reporting/Providers/../Resources/views/index.blade.php ENDPATH**/ ?>
@@ -1,36 +0,0 @@
<?php
if (!function_exists('__147c6d348fe7591335f1e77fa45170f8')):
function __147c6d348fe7591335f1e77fa45170f8($__blaze, $__data = [], $__slots = [], $__bound = [], $__keys = [], $__this = null) {
$__env = $__blaze->env;
$__slots['slot'] ??= new \Illuminate\View\ComponentSlot('');
if (($__data['attributes'] ?? null) instanceof \Illuminate\View\ComponentAttributeBag) { $__data = $__data + $__data['attributes']->all(); unset($__data['attributes']); }
extract($__slots, EXTR_SKIP); unset($__slots);
extract($__data, EXTR_SKIP);
$attributes = \Livewire\Blaze\Runtime\BlazeAttributeBag::make($__data, $__bound, $__keys);
unset($__data, $__bound, $__keys);
ob_start();
?>
<?php
$classes = Flux::classes()
->add('[:where(&)]:min-w-48 p-[.3125rem]')
->add('rounded-lg shadow-xs')
->add('border border-zinc-200 dark:border-zinc-600')
->add('bg-white dark:bg-zinc-700')
->add('focus:outline-hidden')
;
?>
<ui-menu
<?php echo e($attributes->class($classes)); ?>
popover="manual"
data-flux-menu
>
<?php echo e($slot); ?>
</ui-menu>
<?php
echo $__blaze->processPassthroughContent('ltrim', ltrim(ob_get_clean()));
} endif; ?><?php /**PATH /Users/mag/Sites/WMS/Core/vendor/livewire/flux/src/../stubs/resources/views/flux/menu/index.blade.php ENDPATH**/ ?>
@@ -1,31 +0,0 @@
<?php
if (!function_exists('__15ed795fbba84c4429b2df05ca4431d3')):
function __15ed795fbba84c4429b2df05ca4431d3($__blaze, $__data = [], $__slots = [], $__bound = [], $__keys = [], $__this = null) {
$__env = $__blaze->env;
$__slots['slot'] ??= new \Illuminate\View\ComponentSlot('');
if (($__data['attributes'] ?? null) instanceof \Illuminate\View\ComponentAttributeBag) { $__data = $__data + $__data['attributes']->all(); unset($__data['attributes']); }
extract($__slots, EXTR_SKIP); unset($__slots);
extract($__data, EXTR_SKIP);
$attributes = \Livewire\Blaze\Runtime\BlazeAttributeBag::make($__data, $__bound, $__keys);
unset($__data, $__bound, $__keys);
ob_start();
?>
<?php
$__defaults = [
'position' => 'bottom end',
'expanded' => false,
];
$position ??= $attributes['position'] ?? $__defaults['position']; unset($attributes['position']);
$expanded ??= $attributes['expanded'] ?? $__defaults['expanded']; unset($attributes['expanded']);
unset($__defaults);
?>
<ui-toast-group x-data x-on:toast-show.document="$el.showToast($event.detail)" popover="manual" position="<?php echo e($position); ?>" <?php echo e($expanded ? 'expanded' : ''); ?> wire:ignore>
<?php echo e($slot); ?>
</ui-toast-group>
<?php
echo $__blaze->processPassthroughContent('ltrim', ltrim(ob_get_clean()));
} endif; ?><?php /**PATH /Users/mag/Sites/WMS/Core/vendor/livewire/flux/src/../stubs/resources/views/flux/toast/group.blade.php ENDPATH**/ ?>
@@ -1,23 +0,0 @@
<?php
if (!function_exists('__23fd5eb35fc9b151168d38378f7c1716')):
function __23fd5eb35fc9b151168d38378f7c1716($__blaze, $__data = [], $__slots = [], $__bound = [], $__keys = [], $__this = null) {
$__env = $__blaze->env;
if (($__data['attributes'] ?? null) instanceof \Illuminate\View\ComponentAttributeBag) { $__data = $__data + $__data['attributes']->all(); unset($__data['attributes']); }
extract($__slots, EXTR_SKIP); unset($__slots);
extract($__data, EXTR_SKIP);
$attributes = \Livewire\Blaze\Runtime\BlazeAttributeBag::make($__data, $__bound, $__keys);
unset($__data, $__bound, $__keys);
ob_start();
?>
<div class="-mx-[.3125rem] my-[.3125rem] h-px" <?php echo e($attributes); ?> data-flux-menu-separator>
<?php $__blaze->ensureRequired('/Users/mag/Sites/WMS/Core/vendor/livewire/flux/src/../stubs/resources/views/flux/separator.blade.php', $__blaze->compiledPath.'/ead59bb73ece9c4532f875b4b481ffe6.php'); ?>
<?php $__blaze->pushData(['class' => 'dark:bg-zinc-600!']); ?>
<?php __ead59bb73ece9c4532f875b4b481ffe6($__blaze, ['class' => 'dark:bg-zinc-600!'], [], [], [], $__this ?? (isset($this) ? $this : null)); ?>
<?php $__blaze->popData(); ?>
</div>
<?php
echo $__blaze->processPassthroughContent('ltrim', ltrim(ob_get_clean()));
} endif; ?><?php /**PATH /Users/mag/Sites/WMS/Core/vendor/livewire/flux/src/../stubs/resources/views/flux/menu/separator.blade.php ENDPATH**/ ?>
@@ -1,75 +0,0 @@
<?php
if (!function_exists('__2b27ee0d9a529bfbbe608705842d31d3')):
function __2b27ee0d9a529bfbbe608705842d31d3($__blaze, $__data = [], $__slots = [], $__bound = [], $__keys = [], $__this = null) {
$__env = $__blaze->env;
if (($__data['attributes'] ?? null) instanceof \Illuminate\View\ComponentAttributeBag) { $__data = $__data + $__data['attributes']->all(); unset($__data['attributes']); }
extract($__slots, EXTR_SKIP); unset($__slots);
extract($__data, EXTR_SKIP);
$attributes = \Livewire\Blaze\Runtime\BlazeAttributeBag::make($__data, $__bound, $__keys);
unset($__data, $__bound, $__keys);
ob_start();
?>
<?php
$__defaults = [
'position' => 'bottom end',
];
$position ??= $attributes['position'] ?? $__defaults['position']; unset($attributes['position']);
unset($__defaults);
?>
<ui-toast x-data x-on:toast-show.document="! $el.closest('ui-toast-group') && $el.showToast($event.detail)" popover="manual" position="<?php echo e($position); ?>" wire:ignore>
<template>
<div <?php echo e($attributes->only(['class'])->class('max-w-sm in-[ui-toast-group]:max-w-auto in-[ui-toast-group]:w-xs sm:in-[ui-toast-group]:w-sm')); ?> data-variant="" data-flux-toast-dialog>
<div class="p-2 flex rounded-xl shadow-lg bg-white border border-zinc-200 border-b-zinc-300/80 dark:bg-zinc-700 dark:border-zinc-600">
<div class="flex-1 flex items-start gap-4 overflow-hidden">
<div class="flex-1 py-1.5 ps-2.5 flex gap-2">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16" fill="currentColor" class="hidden [[data-flux-toast-dialog][data-variant=success]_&]:block shrink-0 mt-0.5 size-4 text-lime-600 dark:text-lime-400">
<path fill-rule="evenodd" d="M8 15A7 7 0 1 0 8 1a7 7 0 0 0 0 14Zm3.844-8.791a.75.75 0 0 0-1.188-.918l-3.7 4.79-1.649-1.833a.75.75 0 1 0-1.114 1.004l2.25 2.5a.75.75 0 0 0 1.15-.043l4.25-5.5Z" clip-rule="evenodd" />
</svg>
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16" fill="currentColor" class="hidden [[data-flux-toast-dialog][data-variant=warning]_&]:block shrink-0 mt-0.5 size-4 text-amber-500 dark:text-amber-400">
<path fill-rule="evenodd" d="M6.701 2.25c.577-1 2.02-1 2.598 0l5.196 9a1.5 1.5 0 0 1-1.299 2.25H2.804a1.5 1.5 0 0 1-1.3-2.25l5.197-9ZM8 4a.75.75 0 0 1 .75.75v3a.75.75 0 1 1-1.5 0v-3A.75.75 0 0 1 8 4Zm0 8a1 1 0 1 0 0-2 1 1 0 0 0 0 2Z" clip-rule="evenodd" />
</svg>
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16" fill="currentColor" class="hidden [[data-flux-toast-dialog][data-variant=info]_&]:block shrink-0 mt-0.5 size-4 text-cyan-500 dark:text-cyan-400">
<path fill-rule="evenodd" d="M15 8A7 7 0 1 1 1 8a7 7 0 0 1 14 0ZM9 5a1 1 0 1 1-2 0 1 1 0 0 1 2 0ZM6.75 8a.75.75 0 0 0 0 1.5h.75v1.75a.75.75 0 0 0 1.5 0v-2.5A.75.75 0 0 0 8.25 8h-1.5Z" clip-rule="evenodd" />
</svg>
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16" fill="currentColor" class="hidden [[data-flux-toast-dialog][data-variant=danger]_&]:block shrink-0 mt-0.5 size-4 text-rose-500 dark:text-rose-400">
<path fill-rule="evenodd" d="M8 15A7 7 0 1 0 8 1a7 7 0 0 0 0 14ZM8 4a.75.75 0 0 1 .75.75v3a.75.75 0 0 1-1.5 0v-3A.75.75 0 0 1 8 4Zm0 8a1 1 0 1 0 0-2 1 1 0 0 0 0 2Z" clip-rule="evenodd" />
</svg>
<div>
<div class="font-medium text-sm text-zinc-800 dark:text-white [&:not(:empty)+div]:font-normal [&:not(:empty)+div]:text-zinc-500 [&:not(:empty)+div]:dark:text-zinc-300 [&:not(:empty)]:pb-2"><slot name="heading"></slot></div>
<div class="font-medium text-sm text-zinc-800 dark:text-white"><slot name="text"></slot></div>
</div>
</div>
<ui-close class="flex items-center">
<button type="button" class="inline-flex items-center font-medium justify-center gap-2 truncate disabled:opacity-50 dark:disabled:opacity-75 disabled:cursor-default h-8 text-sm rounded-md w-8 bg-transparent hover:bg-zinc-800/5 dark:hover:bg-white/15 text-zinc-400 hover:text-zinc-800 dark:text-zinc-400 dark:hover:text-white" as="button">
<div>
<svg class="[:where(&)]:size-5" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20" fill="currentColor" aria-hidden="true" data-slot="icon">
<path d="M6.28 5.22a.75.75 0 0 0-1.06 1.06L8.94 10l-3.72 3.72a.75.75 0 1 0 1.06 1.06L10 11.06l3.72 3.72a.75.75 0 1 0 1.06-1.06L11.06 10l3.72-3.72a.75.75 0 0 0-1.06-1.06L10 8.94 6.28 5.22Z"></path>
</svg>
</div>
</button>
</ui-close>
</div>
</div>
</div>
</template>
</ui-toast>
<?php
echo $__blaze->processPassthroughContent('ltrim', ltrim(ob_get_clean()));
} endif; ?><?php /**PATH /Users/mag/Sites/WMS/Core/vendor/livewire/flux/src/../stubs/resources/views/flux/toast/index.blade.php ENDPATH**/ ?>
@@ -1,42 +0,0 @@
<?php
if (!function_exists('__3b2703952fe1f03fa6fc92947a043f23')):
function __3b2703952fe1f03fa6fc92947a043f23($__blaze, $__data = [], $__slots = [], $__bound = [], $__keys = [], $__this = null) {
$__env = $__blaze->env;
$__slots['slot'] ??= new \Illuminate\View\ComponentSlot('');
if (($__data['attributes'] ?? null) instanceof \Illuminate\View\ComponentAttributeBag) { $__data = $__data + $__data['attributes']->all(); unset($__data['attributes']); }
extract($__slots, EXTR_SKIP); unset($__slots);
extract($__data, EXTR_SKIP);
$attributes = \Livewire\Blaze\Runtime\BlazeAttributeBag::make($__data, $__bound, $__keys);
unset($__data, $__bound, $__keys);
ob_start();
?>
<?php
$__defaults = [
'position' => 'bottom',
'align' => 'start',
];
$position ??= $attributes['position'] ?? $__defaults['position']; unset($attributes['position']);
$align ??= $attributes['align'] ?? $__defaults['align']; unset($attributes['align']);
unset($__defaults);
?>
<?php
// Support adding the .self modifier to the wire:model directive...
if (($wireModel = $attributes->wire('model')) && $wireModel->directive && ! $wireModel->hasModifier('self')) {
unset($attributes[$wireModel->directive]);
$wireModel->directive .= '.self';
$attributes = $attributes->merge([$wireModel->directive => $wireModel->value]);
}
?>
<ui-dropdown position="<?php echo e($position); ?> <?php echo e($align); ?>" <?php echo e($attributes); ?> data-flux-dropdown>
<?php echo e($slot); ?>
</ui-dropdown>
<?php
echo $__blaze->processPassthroughContent('ltrim', ltrim(ob_get_clean()));
} endif; ?><?php /**PATH /Users/mag/Sites/WMS/Core/vendor/livewire/flux/src/../stubs/resources/views/flux/dropdown.blade.php ENDPATH**/ ?>
@@ -1,68 +0,0 @@
<?php
if (!function_exists('__48a8f1ad0f7cf4cc954cd51c38d5b63e')):
function __48a8f1ad0f7cf4cc954cd51c38d5b63e($__blaze, $__data = [], $__slots = [], $__bound = [], $__keys = [], $__this = null) {
$__env = $__blaze->env;
if (($__data['attributes'] ?? null) instanceof \Illuminate\View\ComponentAttributeBag) { $__data = $__data + $__data['attributes']->all(); unset($__data['attributes']); }
extract($__slots, EXTR_SKIP); unset($__slots);
extract($__data, EXTR_SKIP);
$attributes = \Livewire\Blaze\Runtime\BlazeAttributeBag::make($__data, $__bound, $__keys);
unset($__data, $__bound, $__keys);
ob_start();
?>
<?php
$__defaults = [
'variant' => 'outline',
];
$variant ??= $attributes['variant'] ?? $__defaults['variant']; unset($attributes['variant']);
unset($__defaults);
?>
<?php
$classes = Flux::classes('shrink-0')
->add(match($variant) {
'outline' => '[:where(&)]:size-6',
'solid' => '[:where(&)]:size-6',
'mini' => '[:where(&)]:size-5',
'micro' => '[:where(&)]:size-4',
});
?>
<?php switch ($variant): case ('outline'): ?>
<svg <?php echo e($attributes->class($classes)); ?> data-flux-icon xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="1.5" stroke="currentColor" aria-hidden="true" data-slot="icon">
<path stroke-linecap="round" stroke-linejoin="round" d="M4.5 12a7.5 7.5 0 0 0 15 0m-15 0a7.5 7.5 0 1 1 15 0m-15 0H3m16.5 0H21m-1.5 0H12m-8.457 3.077 1.41-.513m14.095-5.13 1.41-.513M5.106 17.785l1.15-.964m11.49-9.642 1.149-.964M7.501 19.795l.75-1.3m7.5-12.99.75-1.3m-6.063 16.658.26-1.477m2.605-14.772.26-1.477m0 17.726-.26-1.477M10.698 4.614l-.26-1.477M16.5 19.794l-.75-1.299M7.5 4.205 12 12m6.894 5.785-1.149-.964M6.256 7.178l-1.15-.964m15.352 8.864-1.41-.513M4.954 9.435l-1.41-.514M12.002 12l-3.75 6.495"/>
</svg>
<?php break; ?>
<?php case ('solid'): ?>
<svg <?php echo e($attributes->class($classes)); ?> data-flux-icon xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="currentColor" aria-hidden="true" data-slot="icon">
<path d="M17.004 10.407c.138.435-.216.842-.672.842h-3.465a.75.75 0 0 1-.65-.375l-1.732-3c-.229-.396-.053-.907.393-1.004a5.252 5.252 0 0 1 6.126 3.537ZM8.12 8.464c.307-.338.838-.235 1.066.16l1.732 3a.75.75 0 0 1 0 .75l-1.732 3c-.229.397-.76.5-1.067.161A5.23 5.23 0 0 1 6.75 12a5.23 5.23 0 0 1 1.37-3.536ZM10.878 17.13c-.447-.098-.623-.608-.394-1.004l1.733-3.002a.75.75 0 0 1 .65-.375h3.465c.457 0 .81.407.672.842a5.252 5.252 0 0 1-6.126 3.539Z"/>
<path fill-rule="evenodd" d="M21 12.75a.75.75 0 1 0 0-1.5h-.783a8.22 8.22 0 0 0-.237-1.357l.734-.267a.75.75 0 1 0-.513-1.41l-.735.268a8.24 8.24 0 0 0-.689-1.192l.6-.503a.75.75 0 1 0-.964-1.149l-.6.504a8.3 8.3 0 0 0-1.054-.885l.391-.678a.75.75 0 1 0-1.299-.75l-.39.676a8.188 8.188 0 0 0-1.295-.47l.136-.77a.75.75 0 0 0-1.477-.26l-.136.77a8.36 8.36 0 0 0-1.377 0l-.136-.77a.75.75 0 1 0-1.477.26l.136.77c-.448.121-.88.28-1.294.47l-.39-.676a.75.75 0 0 0-1.3.75l.392.678a8.29 8.29 0 0 0-1.054.885l-.6-.504a.75.75 0 1 0-.965 1.149l.6.503a8.243 8.243 0 0 0-.689 1.192L3.8 8.216a.75.75 0 1 0-.513 1.41l.735.267a8.222 8.222 0 0 0-.238 1.356h-.783a.75.75 0 0 0 0 1.5h.783c.042.464.122.917.238 1.356l-.735.268a.75.75 0 0 0 .513 1.41l.735-.268c.197.417.428.816.69 1.191l-.6.504a.75.75 0 0 0 .963 1.15l.601-.505c.326.323.679.62 1.054.885l-.392.68a.75.75 0 0 0 1.3.75l.39-.679c.414.192.847.35 1.294.471l-.136.77a.75.75 0 0 0 1.477.261l.137-.772a8.332 8.332 0 0 0 1.376 0l.136.772a.75.75 0 1 0 1.477-.26l-.136-.771a8.19 8.19 0 0 0 1.294-.47l.391.677a.75.75 0 0 0 1.3-.75l-.393-.679a8.29 8.29 0 0 0 1.054-.885l.601.504a.75.75 0 0 0 .964-1.15l-.6-.503c.261-.375.492-.774.69-1.191l.735.267a.75.75 0 1 0 .512-1.41l-.734-.267c.115-.439.195-.892.237-1.356h.784Zm-2.657-3.06a6.744 6.744 0 0 0-1.19-2.053 6.784 6.784 0 0 0-1.82-1.51A6.705 6.705 0 0 0 12 5.25a6.8 6.8 0 0 0-1.225.11 6.7 6.7 0 0 0-2.15.793 6.784 6.784 0 0 0-2.952 3.489.76.76 0 0 1-.036.098A6.74 6.74 0 0 0 5.251 12a6.74 6.74 0 0 0 3.366 5.842l.009.005a6.704 6.704 0 0 0 2.18.798l.022.003a6.792 6.792 0 0 0 2.368-.004 6.704 6.704 0 0 0 2.205-.811 6.785 6.785 0 0 0 1.762-1.484l.009-.01.009-.01a6.743 6.743 0 0 0 1.18-2.066c.253-.707.39-1.469.39-2.263a6.74 6.74 0 0 0-.408-2.309Z" clip-rule="evenodd"/>
</svg>
<?php break; ?>
<?php case ('mini'): ?>
<svg <?php echo e($attributes->class($classes)); ?> data-flux-icon xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20" fill="currentColor" aria-hidden="true" data-slot="icon">
<path d="M13.024 9.25c.47 0 .827-.433.637-.863a4 4 0 0 0-4.094-2.364c-.468.05-.665.576-.43.984l1.08 1.868a.75.75 0 0 0 .649.375h2.158ZM7.84 7.758c-.236-.408-.79-.5-1.068-.12A3.982 3.982 0 0 0 6 10c0 .884.287 1.7.772 2.363.278.38.832.287 1.068-.12l1.078-1.868a.75.75 0 0 0 0-.75L7.839 7.758ZM9.138 12.993c-.235.408-.039.934.43.984a4 4 0 0 0 4.094-2.364c.19-.43-.168-.863-.638-.863h-2.158a.75.75 0 0 0-.65.375l-1.078 1.868Z"/>
<path fill-rule="evenodd" d="m14.13 4.347.644-1.117a.75.75 0 0 0-1.299-.75l-.644 1.116a6.954 6.954 0 0 0-2.081-.556V1.75a.75.75 0 0 0-1.5 0v1.29a6.954 6.954 0 0 0-2.081.556L6.525 2.48a.75.75 0 1 0-1.3.75l.645 1.117A7.04 7.04 0 0 0 4.347 5.87L3.23 5.225a.75.75 0 1 0-.75 1.3l1.116.644A6.954 6.954 0 0 0 3.04 9.25H1.75a.75.75 0 0 0 0 1.5h1.29c.078.733.27 1.433.556 2.081l-1.116.645a.75.75 0 1 0 .75 1.298l1.117-.644a7.04 7.04 0 0 0 1.523 1.523l-.645 1.117a.75.75 0 1 0 1.3.75l.644-1.116a6.954 6.954 0 0 0 2.081.556v1.29a.75.75 0 0 0 1.5 0v-1.29a6.954 6.954 0 0 0 2.081-.556l.645 1.116a.75.75 0 0 0 1.299-.75l-.645-1.117a7.042 7.042 0 0 0 1.523-1.523l1.117.644a.75.75 0 0 0 .75-1.298l-1.116-.645a6.954 6.954 0 0 0 .556-2.081h1.29a.75.75 0 0 0 0-1.5h-1.29a6.954 6.954 0 0 0-.556-2.081l1.116-.644a.75.75 0 0 0-.75-1.3l-1.117.645a7.04 7.04 0 0 0-1.524-1.523ZM10 4.5a5.475 5.475 0 0 0-2.781.754A5.527 5.527 0 0 0 5.22 7.277 5.475 5.475 0 0 0 4.5 10a5.475 5.475 0 0 0 .752 2.777 5.527 5.527 0 0 0 2.028 2.004c.802.458 1.73.719 2.72.719a5.474 5.474 0 0 0 2.78-.753 5.527 5.527 0 0 0 2.001-2.027c.458-.802.719-1.73.719-2.72a5.475 5.475 0 0 0-.753-2.78 5.528 5.528 0 0 0-2.028-2.002A5.475 5.475 0 0 0 10 4.5Z" clip-rule="evenodd"/>
</svg>
<?php break; ?>
<?php case ('micro'): ?>
<svg <?php echo e($attributes->class($classes)); ?> data-flux-icon xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16" fill="currentColor" aria-hidden="true" data-slot="icon">
<path fill-rule="evenodd" d="M4.5 1.938a.75.75 0 0 1 1.025.274l.652 1.131c.351-.138.71-.233 1.073-.288V1.75a.75.75 0 0 1 1.5 0v1.306a5.03 5.03 0 0 1 1.072.288l.654-1.132a.75.75 0 1 1 1.298.75l-.652 1.13c.286.23.55.492.785.786l1.13-.653a.75.75 0 1 1 .75 1.3l-1.13.652c.137.351.233.71.288 1.073h1.305a.75.75 0 0 1 0 1.5h-1.306a5.032 5.032 0 0 1-.288 1.072l1.132.654a.75.75 0 0 1-.75 1.298l-1.13-.652c-.23.286-.492.55-.786.785l.652 1.13a.75.75 0 0 1-1.298.75l-.653-1.13c-.351.137-.71.233-1.073.288v1.305a.75.75 0 0 1-1.5 0v-1.306a5.032 5.032 0 0 1-1.072-.288l-.653 1.132a.75.75 0 0 1-1.3-.75l.653-1.13a4.966 4.966 0 0 1-.785-.786l-1.13.652a.75.75 0 0 1-.75-1.298l1.13-.653a4.965 4.965 0 0 1-.288-1.073H1.75a.75.75 0 0 1 0-1.5h1.306a5.03 5.03 0 0 1 .288-1.072l-1.132-.653a.75.75 0 0 1 .75-1.3l1.13.653c.23-.286.492-.55.786-.785l-.653-1.13A.75.75 0 0 1 4.5 1.937Zm1.14 3.476a3.501 3.501 0 0 0 0 5.172L7.135 8 5.641 5.414ZM8.434 8.75 6.94 11.336a3.491 3.491 0 0 0 2.81-.305 3.49 3.49 0 0 0 1.669-2.281H8.433Zm2.987-1.5H8.433L6.94 4.664a3.501 3.501 0 0 1 4.48 2.586Z" clip-rule="evenodd"/>
</svg>
<?php break; ?>
<?php endswitch; ?>
<?php
echo $__blaze->processPassthroughContent('ltrim', ltrim(ob_get_clean()));
} endif; ?><?php /**PATH /Users/mag/Sites/WMS/Core/vendor/livewire/flux/src/../stubs/resources/views/flux/icon/cog.blade.php ENDPATH**/ ?>
@@ -1,65 +0,0 @@
<?php
if (!function_exists('__50d7e9e02b0a09ef19c84ebdf6a22b69')):
function __50d7e9e02b0a09ef19c84ebdf6a22b69($__blaze, $__data = [], $__slots = [], $__bound = [], $__keys = [], $__this = null) {
$__env = $__blaze->env;
$__slots['slot'] ??= new \Illuminate\View\ComponentSlot('');
if (($__data['attributes'] ?? null) instanceof \Illuminate\View\ComponentAttributeBag) { $__data = $__data + $__data['attributes']->all(); unset($__data['attributes']); }
extract($__slots, EXTR_SKIP); unset($__slots);
extract($__data, EXTR_SKIP);
$attributes = \Livewire\Blaze\Runtime\BlazeAttributeBag::make($__data, $__bound, $__keys);
unset($__data, $__bound, $__keys);
ob_start();
?>
<?php
$__defaults = [
'icon' => null,
'name' => null,
];
$icon ??= $attributes['icon'] ?? $__defaults['icon']; unset($attributes['icon']);
$name ??= $attributes['name'] ?? $__defaults['name']; unset($attributes['name']);
unset($__defaults);
?>
<?php
$icon = $name ?? $icon;
?>
<?php $__resolved = $__blaze->resolve('flux::' . 'icon.' . $icon); ?>
<?php $__blaze->pushData($attributes->all()); ?>
<?php if ($__resolved !== false): ?>
<?php if (isset($__slotsa4ee29fd1f7dc8668566bb29201d64b5)) { $__slotsStacka4ee29fd1f7dc8668566bb29201d64b5[] = $__slotsa4ee29fd1f7dc8668566bb29201d64b5; } ?>
<?php $__slotsa4ee29fd1f7dc8668566bb29201d64b5 = []; ?>
<?php ob_start(); ?><?php echo e($slot); ?><?php $__slotsa4ee29fd1f7dc8668566bb29201d64b5['slot'] = new \Illuminate\View\ComponentSlot($__blaze->processPassthroughContent('trim', trim(ob_get_clean())), []); ?>
<?php $__slotsa4ee29fd1f7dc8668566bb29201d64b5 = array_merge($__blaze->mergedComponentSlots(), $__slotsa4ee29fd1f7dc8668566bb29201d64b5); ?>
<?php ('__' . $__resolved)($__blaze, $attributes->all(), $__slotsa4ee29fd1f7dc8668566bb29201d64b5, [], [], $__this ?? (isset($this) ? $this : null)); ?>
<?php if (! empty($__slotsStacka4ee29fd1f7dc8668566bb29201d64b5)) { $__slotsa4ee29fd1f7dc8668566bb29201d64b5 = array_pop($__slotsStacka4ee29fd1f7dc8668566bb29201d64b5); } ?>
<?php else: ?>
<?php if (!Flux::componentExists($name = 'icon.' . $icon)) throw new \Exception("Flux component [{$name}] does not exist."); ?><?php if (isset($component)) { $__componentOriginal99f5bdde02e072cb5fe2c95dd124b389 = $component; } ?>
<?php if (isset($attributes)) { $__attributesOriginal99f5bdde02e072cb5fe2c95dd124b389 = $attributes; } ?>
<?php $component = Illuminate\View\AnonymousComponent::resolve([
'view' => (app()->version() >= 12 ? hash('xxh128', 'flux') : md5('flux')) . '::' . 'icon.' . $icon,
'data' => $__env->getCurrentComponentData(),
] + (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag ? $attributes->all() : [])); ?>
<?php $component->withName('flux::' . 'icon.' . $icon); ?>
<?php if ($component->shouldRender()): ?>
<?php $__env->startComponent($component->resolveView(), $component->data()); ?>
<?php $component->withAttributes($attributes->getAttributes()); ?><?php echo e($slot); ?> <?php echo $__env->renderComponent(); ?>
<?php endif; ?>
<?php if (isset($__attributesOriginal99f5bdde02e072cb5fe2c95dd124b389)): ?>
<?php $attributes = $__attributesOriginal99f5bdde02e072cb5fe2c95dd124b389; ?>
<?php unset($__attributesOriginal99f5bdde02e072cb5fe2c95dd124b389); ?>
<?php endif; ?>
<?php if (isset($__componentOriginal99f5bdde02e072cb5fe2c95dd124b389)): ?>
<?php $component = $__componentOriginal99f5bdde02e072cb5fe2c95dd124b389; ?>
<?php unset($__componentOriginal99f5bdde02e072cb5fe2c95dd124b389); ?>
<?php endif; ?>
<?php endif; ?>
<?php $__blaze->popData(); ?>
<?php unset($__resolved) ?>
<?php
echo $__blaze->processPassthroughContent('ltrim', ltrim(ob_get_clean()));
} endif; ?><?php /**PATH /Users/mag/Sites/WMS/Core/vendor/livewire/flux/src/../stubs/resources/views/flux/icon/index.blade.php ENDPATH**/ ?>
@@ -1,129 +0,0 @@
<?php
if (!function_exists('__5de4404d35aff8d63a15337c594f4e87')):
function __5de4404d35aff8d63a15337c594f4e87($__blaze, $__data = [], $__slots = [], $__bound = [], $__keys = [], $__this = null) {
$__env = $__blaze->env;
$__slots['slot'] ??= new \Illuminate\View\ComponentSlot('');
if (($__data['attributes'] ?? null) instanceof \Illuminate\View\ComponentAttributeBag) { $__data = $__data + $__data['attributes']->all(); unset($__data['attributes']); }
extract($__slots, EXTR_SKIP); unset($__slots);
extract($__data, EXTR_SKIP);
$attributes = \Livewire\Blaze\Runtime\BlazeAttributeBag::make($__data, $__bound, $__keys);
unset($__data, $__bound, $__keys);
ob_start();
?>
<?php $iconTrailing ??= $attributes->pluck('icon:trailing'); ?>
<?php $iconVariant ??= $attributes->pluck('icon:variant'); ?>
<?php
$__defaults = [
'iconTrailing' => null,
'iconVariant' => 'mini',
'variant' => 'default',
'suffix' => null,
'value' => null,
'icon' => null,
'kbd' => null,
];
$iconTrailing ??= $attributes['icon-trailing'] ?? $attributes['iconTrailing'] ?? $__defaults['iconTrailing']; unset($attributes['iconTrailing'], $attributes['icon-trailing']);
$iconVariant ??= $attributes['icon-variant'] ?? $attributes['iconVariant'] ?? $__defaults['iconVariant']; unset($attributes['iconVariant'], $attributes['icon-variant']);
$variant ??= $attributes['variant'] ?? $__defaults['variant']; unset($attributes['variant']);
$suffix ??= $attributes['suffix'] ?? $__defaults['suffix']; unset($attributes['suffix']);
$value ??= $attributes['value'] ?? $__defaults['value']; unset($attributes['value']);
$icon ??= $attributes['icon'] ?? $__defaults['icon']; unset($attributes['icon']);
$kbd ??= $attributes['kbd'] ?? $__defaults['kbd']; unset($attributes['kbd']);
unset($__defaults);
?>
<?php
if ($kbd) $suffix = $kbd;
$iconClasses = Flux::classes()
->add('me-2')
// When using the outline icon variant, we need to size it down to match the default icon sizes...
->add($iconVariant === 'outline' ? 'size-5' : null)
;
$trailingIconClasses = Flux::classes()
->add('ms-auto text-zinc-400 [[data-flux-menu-item-icon]:hover_&]:text-current')
// When using the outline icon variant, we need to size it down to match the default icon sizes...
->add($iconVariant === 'outline' ? 'size-5' : null)
;
$classes = Flux::classes()
->add('flex items-center px-2 py-1.5 w-full focus:outline-hidden')
->add('rounded-md')
->add('text-start text-sm font-medium')
->add('[&[disabled]]:opacity-50')
->add(match ($variant) {
'danger' => [
'text-zinc-800 data-active:text-red-600 data-active:bg-red-50 dark:text-white dark:data-active:bg-red-400/20 dark:data-active:text-red-400',
'**:data-flux-menu-item-icon:text-zinc-400 dark:**:data-flux-menu-item-icon:text-white/60 [&[data-active]_[data-flux-menu-item-icon]]:text-current',
],
'default' => [
'text-zinc-800 data-active:bg-zinc-50 dark:text-white dark:data-active:bg-zinc-600',
'**:data-flux-menu-item-icon:text-zinc-400 dark:**:data-flux-menu-item-icon:text-white/60 [&[data-active]_[data-flux-menu-item-icon]]:text-current',
]
})
;
$suffixClasses = Flux::classes()
->add('ms-auto text-xs text-zinc-400')
;
?>
<?php $__blaze->ensureRequired('/Users/mag/Sites/WMS/Core/vendor/livewire/flux/src/../stubs/resources/views/flux/button-or-link-pure.blade.php', $__blaze->compiledPath.'/a0ec3a97dd1bc9937073b6e6643ed4b8.php'); ?>
<?php if (isset($__slotsa0ec3a97dd1bc9937073b6e6643ed4b8)) { $__slotsStacka0ec3a97dd1bc9937073b6e6643ed4b8[] = $__slotsa0ec3a97dd1bc9937073b6e6643ed4b8; } ?>
<?php if (isset($__attrsa0ec3a97dd1bc9937073b6e6643ed4b8)) { $__attrsStacka0ec3a97dd1bc9937073b6e6643ed4b8[] = $__attrsa0ec3a97dd1bc9937073b6e6643ed4b8; } ?>
<?php $__attrsa0ec3a97dd1bc9937073b6e6643ed4b8 = ['attributes' => $attributes->class($classes),'dataFluxMenuItem' => true,'dataFluxMenuItemHasIcon' => !! $icon]; ?>
<?php $__slotsa0ec3a97dd1bc9937073b6e6643ed4b8 = []; ?>
<?php $__blaze->pushData($__attrsa0ec3a97dd1bc9937073b6e6643ed4b8); ?>
<?php ob_start(); ?>
<?php if (is_string($icon) && $icon !== ''): ?>
<?php $__blaze->ensureRequired('/Users/mag/Sites/WMS/Core/vendor/livewire/flux/src/../stubs/resources/views/flux/icon/index.blade.php', $__blaze->compiledPath.'/50d7e9e02b0a09ef19c84ebdf6a22b69.php'); ?>
<?php $__blaze->pushData(['icon' => $icon,'variant' => $iconVariant,'class' => $iconClasses,'dataFluxMenuItemIcon' => true]); ?>
<?php __50d7e9e02b0a09ef19c84ebdf6a22b69($__blaze, ['icon' => $icon,'variant' => $iconVariant,'class' => $iconClasses,'dataFluxMenuItemIcon' => true], [], ['icon', 'variant', 'class', 'dataFluxMenuItemIcon'], ['dataFluxMenuItemIcon' => 'data-flux-menu-item-icon'], $__this ?? (isset($this) ? $this : null)); ?>
<?php $__blaze->popData(); ?>
<?php elseif ($icon): ?>
<?php echo e($icon); ?>
<?php else: ?>
<div class="w-7 hidden [[data-flux-menu]:has(>[data-flux-menu-item-has-icon])_&]:block"></div>
<?php endif; ?>
<?php echo e($slot); ?>
<?php if ($suffix): ?>
<?php if (is_string($suffix)): ?>
<div class="<?php echo e($suffixClasses); ?>">
<?php echo e($suffix); ?>
</div>
<?php else: ?>
<?php echo e($suffix); ?>
<?php endif; ?>
<?php endif; ?>
<?php if (is_string($iconTrailing) && $iconTrailing !== ''): ?>
<?php $__blaze->ensureRequired('/Users/mag/Sites/WMS/Core/vendor/livewire/flux/src/../stubs/resources/views/flux/icon/index.blade.php', $__blaze->compiledPath.'/50d7e9e02b0a09ef19c84ebdf6a22b69.php'); ?>
<?php $__blaze->pushData(['icon' => $iconTrailing,'variant' => $iconVariant,'class' => $trailingIconClasses,'dataFluxMenuItemIcon' => true]); ?>
<?php __50d7e9e02b0a09ef19c84ebdf6a22b69($__blaze, ['icon' => $iconTrailing,'variant' => $iconVariant,'class' => $trailingIconClasses,'dataFluxMenuItemIcon' => true], [], ['icon', 'variant', 'class', 'dataFluxMenuItemIcon'], ['dataFluxMenuItemIcon' => 'data-flux-menu-item-icon'], $__this ?? (isset($this) ? $this : null)); ?>
<?php $__blaze->popData(); ?>
<?php elseif ($iconTrailing): ?>
<?php echo e($iconTrailing); ?>
<?php endif; ?>
<?php echo e($submenu ?? ''); ?>
<?php $__slotsa0ec3a97dd1bc9937073b6e6643ed4b8['slot'] = new \Illuminate\View\ComponentSlot($__blaze->processPassthroughContent('trim', trim(ob_get_clean())), []); ?>
<?php $__blaze->pushSlots($__slotsa0ec3a97dd1bc9937073b6e6643ed4b8); ?>
<?php __a0ec3a97dd1bc9937073b6e6643ed4b8($__blaze, $__attrsa0ec3a97dd1bc9937073b6e6643ed4b8, $__slotsa0ec3a97dd1bc9937073b6e6643ed4b8, ['attributes', 'dataFluxMenuItem', 'dataFluxMenuItemHasIcon'], ['dataFluxMenuItem' => 'data-flux-menu-item', 'dataFluxMenuItemHasIcon' => 'data-flux-menu-item-has-icon'], $__this ?? (isset($this) ? $this : null)); ?>
<?php if (! empty($__slotsStacka0ec3a97dd1bc9937073b6e6643ed4b8)) { $__slotsa0ec3a97dd1bc9937073b6e6643ed4b8 = array_pop($__slotsStacka0ec3a97dd1bc9937073b6e6643ed4b8); } ?>
<?php if (! empty($__attrsStacka0ec3a97dd1bc9937073b6e6643ed4b8)) { $__attrsa0ec3a97dd1bc9937073b6e6643ed4b8 = array_pop($__attrsStacka0ec3a97dd1bc9937073b6e6643ed4b8); } ?>
<?php $__blaze->popData(); ?>
<?php
echo $__blaze->processPassthroughContent('ltrim', ltrim(ob_get_clean()));
} endif; ?><?php /**PATH /Users/mag/Sites/WMS/Core/vendor/livewire/flux/src/../stubs/resources/views/flux/menu/item.blade.php ENDPATH**/ ?>
@@ -1,66 +0,0 @@
<?php
if (!function_exists('__7c1662e234cb708866e5f77b89eee4d0')):
function __7c1662e234cb708866e5f77b89eee4d0($__blaze, $__data = [], $__slots = [], $__bound = [], $__keys = [], $__this = null) {
$__env = $__blaze->env;
$__slots['slot'] ??= new \Illuminate\View\ComponentSlot('');
if (($__data['attributes'] ?? null) instanceof \Illuminate\View\ComponentAttributeBag) { $__data = $__data + $__data['attributes']->all(); unset($__data['attributes']); }
extract($__slots, EXTR_SKIP); unset($__slots);
extract($__data, EXTR_SKIP);
$attributes = \Livewire\Blaze\Runtime\BlazeAttributeBag::make($__data, $__bound, $__keys);
unset($__data, $__bound, $__keys);
ob_start();
?>
<?php
$__defaults = [
'inline' => false,
'variant' => null,
'color' => null,
'size' => null,
];
$inline ??= $attributes['inline'] ?? $__defaults['inline']; unset($attributes['inline']);
$variant ??= $attributes['variant'] ?? $__defaults['variant']; unset($attributes['variant']);
$color ??= $attributes['color'] ?? $__defaults['color']; unset($attributes['color']);
$size ??= $attributes['size'] ?? $__defaults['size']; unset($attributes['size']);
unset($__defaults);
?>
<?php
$classes = Flux::classes()
->add('[:where(&)]:font-normal')
->add(match ($size) {
'xl' => 'text-lg',
'lg' => 'text-base',
default => '[:where(&)]:text-sm',
'sm' => 'text-xs',
})
->add($color ? match($color) {
'red' => 'text-red-600 dark:text-red-400',
'orange' => 'text-orange-600 dark:text-orange-400',
'amber' => 'text-amber-600 dark:text-amber-500',
'yellow' => 'text-yellow-600 dark:text-yellow-500',
'lime' => 'text-lime-600 dark:text-lime-500',
'green' => 'text-green-600 dark:text-green-500',
'emerald' => 'text-emerald-600 dark:text-emerald-400',
'teal' => 'text-teal-600 dark:text-teal-400',
'cyan' => 'text-cyan-600 dark:text-cyan-400',
'sky' => 'text-sky-600 dark:text-sky-400',
'blue' => 'text-blue-600 dark:text-blue-400',
'indigo' => 'text-indigo-600 dark:text-indigo-400',
'violet' => 'text-violet-600 dark:text-violet-400',
'purple' => 'text-purple-600 dark:text-purple-400',
'fuchsia' => 'text-fuchsia-600 dark:text-fuchsia-400',
'pink' => 'text-pink-600 dark:text-pink-400',
'rose' => 'text-rose-600 dark:text-rose-400',
} : match ($variant) {
'strong' => '[:where(&)]:text-zinc-800 [:where(&)]:dark:text-white',
'subtle' => '[:where(&)]:text-zinc-400 [:where(&)]:dark:text-white/50',
default => '[:where(&)]:text-zinc-500 [:where(&)]:dark:text-white/70',
})
;
?>
<?php if ($inline) : ?><span <?php echo e($attributes->class($classes)); ?> data-flux-text <?php if($color): ?> color="<?php echo e($color); ?>" <?php endif; ?>><?php echo e($slot); ?></span><?php else: ?><p <?php echo e($attributes->class($classes)); ?> data-flux-text <?php if($color): ?> data-color="<?php echo e($color); ?>" <?php endif; ?>><?php echo e($slot); ?></p><?php endif; ?><?php
echo $__blaze->processPassthroughContent('ltrim', ltrim(ob_get_clean()));
} endif; ?><?php /**PATH /Users/mag/Sites/WMS/Core/vendor/livewire/flux/src/../stubs/resources/views/flux/text.blade.php ENDPATH**/ ?>
@@ -1,67 +0,0 @@
<?php
if (!function_exists('__9a6540f2523fd3551129978328b3eb40')):
function __9a6540f2523fd3551129978328b3eb40($__blaze, $__data = [], $__slots = [], $__bound = [], $__keys = [], $__this = null) {
$__env = $__blaze->env;
if (($__data['attributes'] ?? null) instanceof \Illuminate\View\ComponentAttributeBag) { $__data = $__data + $__data['attributes']->all(); unset($__data['attributes']); }
extract($__slots, EXTR_SKIP); unset($__slots);
extract($__data, EXTR_SKIP);
$attributes = \Livewire\Blaze\Runtime\BlazeAttributeBag::make($__data, $__bound, $__keys);
unset($__data, $__bound, $__keys);
ob_start();
?>
<?php
$__defaults = [
'variant' => 'outline',
];
$variant ??= $attributes['variant'] ?? $__defaults['variant']; unset($attributes['variant']);
unset($__defaults);
?>
<?php
$classes = Flux::classes('shrink-0')
->add(match($variant) {
'outline' => '[:where(&)]:size-6',
'solid' => '[:where(&)]:size-6',
'mini' => '[:where(&)]:size-5',
'micro' => '[:where(&)]:size-4',
});
?>
<?php switch ($variant): case ('outline'): ?>
<svg <?php echo e($attributes->class($classes)); ?> data-flux-icon xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="1.5" stroke="currentColor" aria-hidden="true" data-slot="icon">
<path stroke-linecap="round" stroke-linejoin="round" d="M15.75 9V5.25A2.25 2.25 0 0 0 13.5 3h-6a2.25 2.25 0 0 0-2.25 2.25v13.5A2.25 2.25 0 0 0 7.5 21h6a2.25 2.25 0 0 0 2.25-2.25V15m3 0 3-3m0 0-3-3m3 3H9"/>
</svg>
<?php break; ?>
<?php case ('solid'): ?>
<svg <?php echo e($attributes->class($classes)); ?> data-flux-icon xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="currentColor" aria-hidden="true" data-slot="icon">
<path fill-rule="evenodd" d="M7.5 3.75A1.5 1.5 0 0 0 6 5.25v13.5a1.5 1.5 0 0 0 1.5 1.5h6a1.5 1.5 0 0 0 1.5-1.5V15a.75.75 0 0 1 1.5 0v3.75a3 3 0 0 1-3 3h-6a3 3 0 0 1-3-3V5.25a3 3 0 0 1 3-3h6a3 3 0 0 1 3 3V9A.75.75 0 0 1 15 9V5.25a1.5 1.5 0 0 0-1.5-1.5h-6Zm10.72 4.72a.75.75 0 0 1 1.06 0l3 3a.75.75 0 0 1 0 1.06l-3 3a.75.75 0 1 1-1.06-1.06l1.72-1.72H9a.75.75 0 0 1 0-1.5h10.94l-1.72-1.72a.75.75 0 0 1 0-1.06Z" clip-rule="evenodd"/>
</svg>
<?php break; ?>
<?php case ('mini'): ?>
<svg <?php echo e($attributes->class($classes)); ?> data-flux-icon xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20" fill="currentColor" aria-hidden="true" data-slot="icon">
<path fill-rule="evenodd" d="M3 4.25A2.25 2.25 0 0 1 5.25 2h5.5A2.25 2.25 0 0 1 13 4.25v2a.75.75 0 0 1-1.5 0v-2a.75.75 0 0 0-.75-.75h-5.5a.75.75 0 0 0-.75.75v11.5c0 .414.336.75.75.75h5.5a.75.75 0 0 0 .75-.75v-2a.75.75 0 0 1 1.5 0v2A2.25 2.25 0 0 1 10.75 18h-5.5A2.25 2.25 0 0 1 3 15.75V4.25Z" clip-rule="evenodd"/>
<path fill-rule="evenodd" d="M6 10a.75.75 0 0 1 .75-.75h9.546l-1.048-.943a.75.75 0 1 1 1.004-1.114l2.5 2.25a.75.75 0 0 1 0 1.114l-2.5 2.25a.75.75 0 1 1-1.004-1.114l1.048-.943H6.75A.75.75 0 0 1 6 10Z" clip-rule="evenodd"/>
</svg>
<?php break; ?>
<?php case ('micro'): ?>
<svg <?php echo e($attributes->class($classes)); ?> data-flux-icon xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16" fill="currentColor" aria-hidden="true" data-slot="icon">
<path fill-rule="evenodd" d="M2 4.75A2.75 2.75 0 0 1 4.75 2h3a2.75 2.75 0 0 1 2.75 2.75v.5a.75.75 0 0 1-1.5 0v-.5c0-.69-.56-1.25-1.25-1.25h-3c-.69 0-1.25.56-1.25 1.25v6.5c0 .69.56 1.25 1.25 1.25h3c.69 0 1.25-.56 1.25-1.25v-.5a.75.75 0 0 1 1.5 0v.5A2.75 2.75 0 0 1 7.75 14h-3A2.75 2.75 0 0 1 2 11.25v-6.5Zm9.47.47a.75.75 0 0 1 1.06 0l2.25 2.25a.75.75 0 0 1 0 1.06l-2.25 2.25a.75.75 0 1 1-1.06-1.06l.97-.97H5.25a.75.75 0 0 1 0-1.5h7.19l-.97-.97a.75.75 0 0 1 0-1.06Z" clip-rule="evenodd"/>
</svg>
<?php break; ?>
<?php endswitch; ?>
<?php
echo $__blaze->processPassthroughContent('ltrim', ltrim(ob_get_clean()));
} endif; ?><?php /**PATH /Users/mag/Sites/WMS/Core/vendor/livewire/flux/src/../stubs/resources/views/flux/icon/arrow-right-start-on-rectangle.blade.php ENDPATH**/ ?>
@@ -1,54 +0,0 @@
<?php
if (!function_exists('__a0ec3a97dd1bc9937073b6e6643ed4b8')):
function __a0ec3a97dd1bc9937073b6e6643ed4b8($__blaze, $__data = [], $__slots = [], $__bound = [], $__keys = [], $__this = null) {
$__env = $__blaze->env;
$__slots['slot'] ??= new \Illuminate\View\ComponentSlot('');
if (($__data['attributes'] ?? null) instanceof \Illuminate\View\ComponentAttributeBag) { $__data = $__data + $__data['attributes']->all(); unset($__data['attributes']); }
extract($__slots, EXTR_SKIP); unset($__slots);
extract($__data, EXTR_SKIP);
$attributes = \Livewire\Blaze\Runtime\BlazeAttributeBag::make($__data, $__bound, $__keys);
unset($__data, $__bound, $__keys);
ob_start();
?>
<?php
extract(Flux::forwardedAttributes($attributes, [
'type',
'href',
'as',
]));
?>
<?php
$__defaults = [
'type' => 'button',
'href' => null,
'as' => null,
];
$type ??= $attributes['type'] ?? $__defaults['type']; unset($attributes['type']);
$href ??= $attributes['href'] ?? $__defaults['href']; unset($attributes['href']);
$as ??= $attributes['as'] ?? $__defaults['as']; unset($attributes['as']);
unset($__defaults);
?>
<?php if ($as === 'div' && ! $href): ?>
<div <?php echo e($attributes); ?>>
<?php echo e($slot); ?>
</div>
<?php elseif ($as === 'a' || $href): ?>
<a href="<?php echo e($href); ?>" <?php echo e($attributes); ?>>
<?php echo e($slot); ?>
</a>
<?php else: ?>
<button <?php echo e($attributes->merge(['type' => $type])); ?>>
<?php echo e($slot); ?>
</button>
<?php endif; ?>
<?php
echo $__blaze->processPassthroughContent('ltrim', ltrim(ob_get_clean()));
} endif; ?><?php /**PATH /Users/mag/Sites/WMS/Core/vendor/livewire/flux/src/../stubs/resources/views/flux/button-or-link-pure.blade.php ENDPATH**/ ?>
@@ -1,63 +0,0 @@
<?php
if (!function_exists('__d4e7ffd9fb9de1969a2cdd73bc211803')):
function __d4e7ffd9fb9de1969a2cdd73bc211803($__blaze, $__data = [], $__slots = [], $__bound = [], $__keys = [], $__this = null) {
$__env = $__blaze->env;
$__slots['slot'] ??= new \Illuminate\View\ComponentSlot('');
if (($__data['attributes'] ?? null) instanceof \Illuminate\View\ComponentAttributeBag) { $__data = $__data + $__data['attributes']->all(); unset($__data['attributes']); }
extract($__slots, EXTR_SKIP); unset($__slots);
extract($__data, EXTR_SKIP);
$attributes = \Livewire\Blaze\Runtime\BlazeAttributeBag::make($__data, $__bound, $__keys);
unset($__data, $__bound, $__keys);
ob_start();
?>
<?php
$__defaults = [
'size' => 'base',
'accent' => false,
'level' => null,
];
$size ??= $attributes['size'] ?? $__defaults['size']; unset($attributes['size']);
$accent ??= $attributes['accent'] ?? $__defaults['accent']; unset($attributes['accent']);
$level ??= $attributes['level'] ?? $__defaults['level']; unset($attributes['level']);
unset($__defaults);
?>
<?php
$classes = Flux::classes()
->add('font-medium')
->add(match ($accent) {
true => 'text-[var(--color-accent-content)]',
default => '[:where(&)]:text-zinc-800 [:where(&)]:dark:text-white',
})
->add(match ($size) {
'xl' => 'text-2xl [&:has(+[data-flux-subheading])]:mb-2 [[data-flux-subheading]+&]:mt-2',
'lg' => 'text-base [&:has(+[data-flux-subheading])]:mb-2 [[data-flux-subheading]+&]:mt-2',
default => 'text-sm [&:has(+[data-flux-subheading])]:mb-2 [[data-flux-subheading]+&]:mt-2',
})
;
?>
<?php switch ((int) $level): case(1): ?>
<h1 <?php echo e($attributes->class($classes)); ?> data-flux-heading><?php echo e($slot); ?></h1>
<?php break; ?>
<?php case(2): ?>
<h2 <?php echo e($attributes->class($classes)); ?> data-flux-heading><?php echo e($slot); ?></h2>
<?php break; ?>
<?php case(3): ?>
<h3 <?php echo e($attributes->class($classes)); ?> data-flux-heading><?php echo e($slot); ?></h3>
<?php break; ?>
<?php case(4): ?>
<h4 <?php echo e($attributes->class($classes)); ?> data-flux-heading><?php echo e($slot); ?></h4>
<?php break; ?>
<?php default: ?>
<div <?php echo e($attributes->class($classes)); ?> data-flux-heading><?php echo e($slot); ?></div>
<?php endswitch; ?>
<?php
echo $__blaze->processPassthroughContent('ltrim', ltrim(ob_get_clean()));
} endif; ?><?php /**PATH /Users/mag/Sites/WMS/Core/vendor/livewire/flux/src/../stubs/resources/views/flux/heading.blade.php ENDPATH**/ ?>
@@ -1,21 +0,0 @@
<?php
if (!function_exists('__dc37e44ba76be4edbfb196d052a57385')):
function __dc37e44ba76be4edbfb196d052a57385($__blaze, $__data = [], $__slots = [], $__bound = [], $__keys = [], $__this = null) {
$__env = $__blaze->env;
$__slots['slot'] ??= new \Illuminate\View\ComponentSlot('');
if (($__data['attributes'] ?? null) instanceof \Illuminate\View\ComponentAttributeBag) { $__data = $__data + $__data['attributes']->all(); unset($__data['attributes']); }
extract($__slots, EXTR_SKIP); unset($__slots);
extract($__data, EXTR_SKIP);
$attributes = \Livewire\Blaze\Runtime\BlazeAttributeBag::make($__data, $__bound, $__keys);
unset($__data, $__bound, $__keys);
ob_start();
?>
<ui-menu-radio-group <?php echo e($attributes); ?> data-flux-menu-radio-group>
<?php echo e($slot); ?>
</ui-menu-radio-group>
<?php
echo $__blaze->processPassthroughContent('ltrim', ltrim(ob_get_clean()));
} endif; ?><?php /**PATH /Users/mag/Sites/WMS/Core/vendor/livewire/flux/src/../stubs/resources/views/flux/menu/radio/group.blade.php ENDPATH**/ ?>
@@ -1,59 +0,0 @@
<?php
if (!function_exists('__ead59bb73ece9c4532f875b4b481ffe6')):
function __ead59bb73ece9c4532f875b4b481ffe6($__blaze, $__data = [], $__slots = [], $__bound = [], $__keys = [], $__this = null) {
$__env = $__blaze->env;
if (($__data['attributes'] ?? null) instanceof \Illuminate\View\ComponentAttributeBag) { $__data = $__data + $__data['attributes']->all(); unset($__data['attributes']); }
extract($__slots, EXTR_SKIP); unset($__slots);
extract($__data, EXTR_SKIP);
$attributes = \Livewire\Blaze\Runtime\BlazeAttributeBag::make($__data, $__bound, $__keys);
unset($__data, $__bound, $__keys);
ob_start();
?>
<?php
$__defaults = [
'orientation' => null,
'vertical' => false,
'variant' => null,
'faint' => false,
'text' => null,
];
$orientation ??= $attributes['orientation'] ?? $__defaults['orientation']; unset($attributes['orientation']);
$vertical ??= $attributes['vertical'] ?? $__defaults['vertical']; unset($attributes['vertical']);
$variant ??= $attributes['variant'] ?? $__defaults['variant']; unset($attributes['variant']);
$faint ??= $attributes['faint'] ?? $__defaults['faint']; unset($attributes['faint']);
$text ??= $attributes['text'] ?? $__defaults['text']; unset($attributes['text']);
unset($__defaults);
?>
<?php
$orientation ??= $vertical ? 'vertical' : 'horizontal';
$classes = Flux::classes('border-0 [print-color-adjust:exact]')
->add(match ($variant) {
'subtle' => 'bg-zinc-800/5 dark:bg-white/10',
default => 'bg-zinc-800/15 dark:bg-white/20',
})
->add(match ($orientation) {
'horizontal' => 'h-px w-full',
'vertical' => 'self-stretch self-center w-px',
})
;
?>
<?php if ($text): ?>
<div data-orientation="<?php echo e($orientation); ?>" class="flex items-center w-full" role="none" data-flux-separator>
<div <?php echo e($attributes->class([$classes, 'grow'])); ?>></div>
<span class="shrink mx-6 font-medium text-sm text-zinc-500 dark:text-zinc-300 whitespace-nowrap"><?php echo e($text); ?></span>
<div <?php echo e($attributes->class([$classes, 'grow'])); ?>></div>
</div>
<?php else: ?>
<div data-orientation="<?php echo e($orientation); ?>" role="none" <?php echo e($attributes->class($classes, 'shrink-0')); ?> data-flux-separator></div>
<?php endif; ?>
<?php
echo $__blaze->processPassthroughContent('ltrim', ltrim(ob_get_clean()));
} endif; ?><?php /**PATH /Users/mag/Sites/WMS/Core/vendor/livewire/flux/src/../stubs/resources/views/flux/separator.blade.php ENDPATH**/ ?>
@@ -1,60 +0,0 @@
---
name: configuring-horizon
description: "Use this skill whenever the user mentions Horizon by name in a Laravel context. Covers the full Horizon lifecycle: installing Horizon (horizon:install, Sail setup), configuring config/horizon.php (supervisor blocks, queue assignments, balancing strategies, minProcesses/maxProcesses), fixing the dashboard (authorization via Gate::define viewHorizon, blank metrics, horizon:snapshot scheduling), and troubleshooting production issues (worker crashes, timeout chain ordering, LongWaitDetected notifications, waits config). Also covers job tagging and silencing. Do not use for generic Laravel queues without Horizon, SQS or database drivers, standalone Redis setup, Linux supervisord, Telescope, or job batching."
license: MIT
metadata:
author: laravel
---
<?php
/** @var \Laravel\Boost\Install\GuidelineAssist $assist */
?>
# Horizon Configuration
## Documentation
Use ___SINGLE_BACKTICK___search-docs___SINGLE_BACKTICK___ for detailed Horizon patterns and documentation covering configuration, supervisors, balancing, dashboard authorization, tags, notifications, metrics, and deployment.
For deeper guidance on specific topics, read the relevant reference file before implementing:
- ___SINGLE_BACKTICK___references/supervisors.md___SINGLE_BACKTICK___ covers supervisor blocks, balancing strategies, multi-queue setups, and auto-scaling
- ___SINGLE_BACKTICK___references/notifications.md___SINGLE_BACKTICK___ covers LongWaitDetected alerts, notification routing, and the ___SINGLE_BACKTICK___waits___SINGLE_BACKTICK___ config
- ___SINGLE_BACKTICK___references/tags.md___SINGLE_BACKTICK___ covers job tagging, dashboard filtering, and silencing noisy jobs
- ___SINGLE_BACKTICK___references/metrics.md___SINGLE_BACKTICK___ covers the blank metrics dashboard, snapshot scheduling, and retention config
## Basic Usage
### Installation
___SINGLE_BACKTICK______SINGLE_BACKTICK______SINGLE_BACKTICK___bash
<?php echo e($assist->artisanCommand('horizon:install')); ?>
___SINGLE_BACKTICK______SINGLE_BACKTICK______SINGLE_BACKTICK___
### Supervisor Configuration
Define supervisors in ___SINGLE_BACKTICK___config/horizon.php___SINGLE_BACKTICK___. The ___SINGLE_BACKTICK___environments___SINGLE_BACKTICK___ array merges into ___SINGLE_BACKTICK___defaults___SINGLE_BACKTICK___ and does not replace the whole supervisor block:
___BOOST_SNIPPET_0___
### Dashboard Authorization
Restrict access in ___SINGLE_BACKTICK___App\Providers\HorizonServiceProvider___SINGLE_BACKTICK___:
___BOOST_SNIPPET_1___
## Verification
1. Run ___SINGLE_BACKTICK___<?php echo e($assist->artisanCommand('horizon')); ?>___SINGLE_BACKTICK___ and visit ___SINGLE_BACKTICK___/horizon___SINGLE_BACKTICK___
2. Confirm dashboard access is restricted as expected
3. Check that metrics populate after scheduling ___SINGLE_BACKTICK___horizon:snapshot___SINGLE_BACKTICK___
## Common Pitfalls
- Horizon only works with the Redis queue driver. Other drivers such as database and SQS are not supported.
- Redis Cluster is not supported. Horizon requires a standalone Redis connection.
- Always check ___SINGLE_BACKTICK___config/horizon.php___SINGLE_BACKTICK___ before making changes to understand the current supervisor and environment configuration.
- The ___SINGLE_BACKTICK___environments___SINGLE_BACKTICK___ array overrides only the keys you specify. It merges into ___SINGLE_BACKTICK___defaults___SINGLE_BACKTICK___ and does not replace it.
- The timeout chain must be ordered: job ___SINGLE_BACKTICK___timeout___SINGLE_BACKTICK___ less than supervisor ___SINGLE_BACKTICK___timeout___SINGLE_BACKTICK___ less than ___SINGLE_BACKTICK___retry_after___SINGLE_BACKTICK___. The wrong order can cause jobs to be retried before Horizon finishes timing them out.
- The metrics dashboard stays blank until ___SINGLE_BACKTICK___horizon:snapshot___SINGLE_BACKTICK___ is scheduled. Running ___SINGLE_BACKTICK___<?php echo e($assist->artisanCommand('horizon')); ?>___SINGLE_BACKTICK___ alone does not populate metrics.
- Always use ___SINGLE_BACKTICK___search-docs___SINGLE_BACKTICK___ for the latest Horizon documentation rather than relying on this skill alone.
<?php /**PATH /Users/mag/Sites/WMS/Core/storage/framework/views/a75c31620703fd46512c58163b252a63.blade.php ENDPATH**/ ?>
@@ -1,7 +0,0 @@
@php
/** @var \Laravel\Boost\Install\GuidelineAssist $assist */
@endphp
# Test Enforcement
- Every change must be programmatically tested. Write a new test or update an existing test, then run the affected tests to make sure they pass.
- Run the minimum number of tests needed to ensure code quality and speed. Use ___SINGLE_BACKTICK___{{ $assist->artisanCommand('test --compact') }}___SINGLE_BACKTICK___ with a specific filename or filter.
@@ -1,8 +0,0 @@
<?php
/** @var \Laravel\Boost\Install\GuidelineAssist $assist */
?>
# Test Enforcement
- Every change must be programmatically tested. Write a new test or update an existing test, then run the affected tests to make sure they pass.
- Run the minimum number of tests needed to ensure code quality and speed. Use ___SINGLE_BACKTICK___<?php echo e($assist->artisanCommand('test --compact')); ?>___SINGLE_BACKTICK___ with a specific filename or filter.
<?php /**PATH /Users/mag/Sites/WMS/Core/storage/framework/views/c171fffd32ee4668d0f75682681d7fac.blade.php ENDPATH**/ ?>
@@ -1,25 +0,0 @@
<?php if (isset($component)) { $__componentOriginal23399719f391f3076fe3bf0929a84741 = $component; } ?>
<?php if (isset($attributes)) { $__attributesOriginal23399719f391f3076fe3bf0929a84741 = $attributes; } ?>
<?php $component = Illuminate\View\AnonymousComponent::resolve(['view' => 'f4ac99e09542ff494432bc959d4fee61::app.sidebar','data' => ['title' => $title ?? null]] + (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag ? $attributes->all() : [])); ?>
<?php $component->withName('layouts::app.sidebar'); ?>
<?php if ($component->shouldRender()): ?>
<?php $__env->startComponent($component->resolveView(), $component->data()); ?>
<?php if (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag): ?>
<?php $attributes = $attributes->except(\Illuminate\View\AnonymousComponent::ignoredParameterNames()); ?>
<?php endif; ?>
<?php $component->withAttributes(['title' => \Illuminate\View\Compilers\BladeCompiler::sanitizeComponentAttribute($title ?? null)]); ?>
<?php \Livewire\Features\SupportCompiledWireKeys\SupportCompiledWireKeys::processComponentKey($component); ?>
<?php echo e($slot); ?>
<?php echo $__env->renderComponent(); ?>
<?php endif; ?>
<?php if (isset($__attributesOriginal23399719f391f3076fe3bf0929a84741)): ?>
<?php $attributes = $__attributesOriginal23399719f391f3076fe3bf0929a84741; ?>
<?php unset($__attributesOriginal23399719f391f3076fe3bf0929a84741); ?>
<?php endif; ?>
<?php if (isset($__componentOriginal23399719f391f3076fe3bf0929a84741)): ?>
<?php $component = $__componentOriginal23399719f391f3076fe3bf0929a84741; ?>
<?php unset($__componentOriginal23399719f391f3076fe3bf0929a84741); ?>
<?php endif; ?>
<?php /**PATH /Users/mag/Sites/WMS/Core/resources/views/layouts/app.blade.php ENDPATH**/ ?>
@@ -1,122 +0,0 @@
<?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if BLOCK]><![endif]--><?php endif; ?><?php if($paginator->hasPages()): ?>
<nav role="navigation" aria-label="<?php echo e(__('Pagination Navigation')); ?>">
<div class="flex gap-2 items-center justify-between sm:hidden">
<?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if BLOCK]><![endif]--><?php endif; ?><?php if($paginator->onFirstPage()): ?>
<span class="inline-flex items-center px-4 py-2 text-sm font-medium text-gray-600 bg-white border border-gray-300 cursor-not-allowed leading-5 rounded-md dark:text-gray-300 dark:bg-gray-700 dark:border-gray-600">
<?php echo __('pagination.previous'); ?>
</span>
<?php else: ?>
<a href="<?php echo e($paginator->previousPageUrl()); ?>" rel="prev" class="inline-flex items-center px-4 py-2 text-sm font-medium text-gray-800 bg-white border border-gray-300 leading-5 rounded-md hover:text-gray-700 focus:outline-none focus:ring ring-gray-300 focus:border-blue-300 active:bg-gray-100 active:text-gray-800 transition ease-in-out duration-150 dark:bg-gray-800 dark:border-gray-600 dark:text-gray-200 dark:focus:border-blue-700 dark:active:bg-gray-700 dark:active:text-gray-300 hover:bg-gray-100 dark:hover:bg-gray-900 dark:hover:text-gray-200">
<?php echo __('pagination.previous'); ?>
</a>
<?php endif; ?><?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if ENDBLOCK]><![endif]--><?php endif; ?>
<?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if BLOCK]><![endif]--><?php endif; ?><?php if($paginator->hasMorePages()): ?>
<a href="<?php echo e($paginator->nextPageUrl()); ?>" rel="next" class="inline-flex items-center px-4 py-2 text-sm font-medium text-gray-800 bg-white border border-gray-300 leading-5 rounded-md hover:text-gray-700 focus:outline-none focus:ring ring-gray-300 focus:border-blue-300 active:bg-gray-100 active:text-gray-800 transition ease-in-out duration-150 dark:bg-gray-800 dark:border-gray-600 dark:text-gray-200 dark:focus:border-blue-700 dark:active:bg-gray-700 dark:active:text-gray-300 hover:bg-gray-100 dark:hover:bg-gray-900 dark:hover:text-gray-200">
<?php echo __('pagination.next'); ?>
</a>
<?php else: ?>
<span class="inline-flex items-center px-4 py-2 text-sm font-medium text-gray-600 bg-white border border-gray-300 cursor-not-allowed leading-5 rounded-md dark:text-gray-300 dark:bg-gray-700 dark:border-gray-600">
<?php echo __('pagination.next'); ?>
</span>
<?php endif; ?><?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if ENDBLOCK]><![endif]--><?php endif; ?>
</div>
<div class="hidden sm:flex-1 sm:flex sm:gap-2 sm:items-center sm:justify-between">
<div>
<p class="text-sm text-gray-700 leading-5 dark:text-gray-600">
<?php echo __('Showing'); ?>
<?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if BLOCK]><![endif]--><?php endif; ?><?php if($paginator->firstItem()): ?>
<span class="font-medium"><?php echo e($paginator->firstItem()); ?></span>
<?php echo __('to'); ?>
<span class="font-medium"><?php echo e($paginator->lastItem()); ?></span>
<?php else: ?>
<?php echo e($paginator->count()); ?>
<?php endif; ?><?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if ENDBLOCK]><![endif]--><?php endif; ?>
<?php echo __('of'); ?>
<span class="font-medium"><?php echo e($paginator->total()); ?></span>
<?php echo __('results'); ?>
</p>
</div>
<div>
<span class="inline-flex rtl:flex-row-reverse shadow-sm rounded-md">
<?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if BLOCK]><![endif]--><?php endif; ?><?php if($paginator->onFirstPage()): ?>
<span aria-disabled="true" aria-label="<?php echo e(__('pagination.previous')); ?>">
<span class="inline-flex items-center px-2 py-2 text-sm font-medium text-gray-500 bg-white border border-gray-300 cursor-not-allowed rounded-l-md leading-5 dark:bg-gray-700 dark:border-gray-600 dark:text-gray-400" aria-hidden="true">
<svg class="w-5 h-5" fill="currentColor" viewBox="0 0 20 20">
<path fill-rule="evenodd" d="M12.707 5.293a1 1 0 010 1.414L9.414 10l3.293 3.293a1 1 0 01-1.414 1.414l-4-4a1 1 0 010-1.414l4-4a1 1 0 011.414 0z" clip-rule="evenodd" />
</svg>
</span>
</span>
<?php else: ?>
<a href="<?php echo e($paginator->previousPageUrl()); ?>" rel="prev" class="inline-flex items-center px-2 py-2 text-sm font-medium text-gray-500 bg-white border border-gray-300 rounded-l-md leading-5 hover:text-gray-400 focus:outline-none focus:ring ring-gray-300 focus:border-blue-300 active:bg-gray-100 active:text-gray-500 transition ease-in-out duration-150 dark:bg-gray-800 dark:border-gray-600 dark:active:bg-gray-700 dark:focus:border-blue-800 dark:text-gray-300 dark:hover:bg-gray-900 dark:hover:text-gray-300" aria-label="<?php echo e(__('pagination.previous')); ?>">
<svg class="w-5 h-5" fill="currentColor" viewBox="0 0 20 20">
<path fill-rule="evenodd" d="M12.707 5.293a1 1 0 010 1.414L9.414 10l3.293 3.293a1 1 0 01-1.414 1.414l-4-4a1 1 0 010-1.414l4-4a1 1 0 011.414 0z" clip-rule="evenodd" />
</svg>
</a>
<?php endif; ?><?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if ENDBLOCK]><![endif]--><?php endif; ?>
<?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if BLOCK]><![endif]--><?php \Livewire\Features\SupportCompiledWireKeys\SupportCompiledWireKeys::openLoop(); ?><?php endif; ?><?php $__currentLoopData = $elements; $__env->addLoop($__currentLoopData); foreach($__currentLoopData as $element): $__env->incrementLoopIndices(); $loop = $__env->getLastLoop(); ?><?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><?php \Livewire\Features\SupportCompiledWireKeys\SupportCompiledWireKeys::startLoopIteration(); ?><?php endif; ?>
<?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if BLOCK]><![endif]--><?php endif; ?><?php if(is_string($element)): ?>
<span aria-disabled="true">
<span class="inline-flex items-center px-4 py-2 -ml-px text-sm font-medium text-gray-700 bg-white border border-gray-300 cursor-default leading-5 dark:bg-gray-800 dark:border-gray-600 dark:text-gray-300"><?php echo e($element); ?></span>
</span>
<?php endif; ?><?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if ENDBLOCK]><![endif]--><?php endif; ?>
<?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if BLOCK]><![endif]--><?php endif; ?><?php if(is_array($element)): ?>
<?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if BLOCK]><![endif]--><?php \Livewire\Features\SupportCompiledWireKeys\SupportCompiledWireKeys::openLoop(); ?><?php endif; ?><?php $__currentLoopData = $element; $__env->addLoop($__currentLoopData); foreach($__currentLoopData as $page => $url): $__env->incrementLoopIndices(); $loop = $__env->getLastLoop(); ?><?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><?php \Livewire\Features\SupportCompiledWireKeys\SupportCompiledWireKeys::startLoopIteration(); ?><?php endif; ?>
<?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if BLOCK]><![endif]--><?php endif; ?><?php if($page == $paginator->currentPage()): ?>
<span aria-current="page">
<span class="inline-flex items-center px-4 py-2 -ml-px text-sm font-medium text-gray-700 bg-gray-200 border border-gray-300 cursor-default leading-5 dark:bg-gray-700 dark:border-gray-600 dark:text-gray-300"><?php echo e($page); ?></span>
</span>
<?php else: ?>
<a href="<?php echo e($url); ?>" class="inline-flex items-center px-4 py-2 -ml-px text-sm font-medium text-gray-700 bg-white border border-gray-300 leading-5 hover:text-gray-700 focus:outline-none focus:ring ring-gray-300 focus:border-blue-300 active:bg-gray-100 active:text-gray-700 transition ease-in-out duration-150 dark:bg-gray-800 dark:border-gray-600 dark:text-gray-300 dark:hover:text-gray-300 dark:active:bg-gray-700 dark:focus:border-blue-800 hover:bg-gray-100 dark:hover:bg-gray-900" aria-label="<?php echo e(__('Go to page :page', ['page' => $page])); ?>">
<?php echo e($page); ?>
</a>
<?php endif; ?><?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if ENDBLOCK]><![endif]--><?php endif; ?>
<?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><?php \Livewire\Features\SupportCompiledWireKeys\SupportCompiledWireKeys::endLoop(); ?><?php endif; ?><?php endforeach; $__env->popLoop(); $loop = $__env->getLastLoop(); ?><?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if ENDBLOCK]><![endif]--><?php \Livewire\Features\SupportCompiledWireKeys\SupportCompiledWireKeys::closeLoop(); ?><?php endif; ?>
<?php endif; ?><?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if ENDBLOCK]><![endif]--><?php endif; ?>
<?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><?php \Livewire\Features\SupportCompiledWireKeys\SupportCompiledWireKeys::endLoop(); ?><?php endif; ?><?php endforeach; $__env->popLoop(); $loop = $__env->getLastLoop(); ?><?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if ENDBLOCK]><![endif]--><?php \Livewire\Features\SupportCompiledWireKeys\SupportCompiledWireKeys::closeLoop(); ?><?php endif; ?>
<?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if BLOCK]><![endif]--><?php endif; ?><?php if($paginator->hasMorePages()): ?>
<a href="<?php echo e($paginator->nextPageUrl()); ?>" rel="next" class="inline-flex items-center px-2 py-2 -ml-px text-sm font-medium text-gray-500 bg-white border border-gray-300 rounded-r-md leading-5 hover:text-gray-400 focus:outline-none focus:ring ring-gray-300 focus:border-blue-300 active:bg-gray-100 active:text-gray-500 transition ease-in-out duration-150 dark:bg-gray-800 dark:border-gray-600 dark:active:bg-gray-700 dark:focus:border-blue-800 dark:text-gray-300 dark:hover:bg-gray-900 dark:hover:text-gray-300" aria-label="<?php echo e(__('pagination.next')); ?>">
<svg class="w-5 h-5" fill="currentColor" viewBox="0 0 20 20">
<path fill-rule="evenodd" d="M7.293 14.707a1 1 0 010-1.414L10.586 10 7.293 6.707a1 1 0 011.414-1.414l4 4a1 1 0 010 1.414l-4 4a1 1 0 01-1.414 0z" clip-rule="evenodd" />
</svg>
</a>
<?php else: ?>
<span aria-disabled="true" aria-label="<?php echo e(__('pagination.next')); ?>">
<span class="inline-flex items-center px-2 py-2 -ml-px text-sm font-medium text-gray-500 bg-white border border-gray-300 cursor-not-allowed rounded-r-md leading-5 dark:bg-gray-700 dark:border-gray-600 dark:text-gray-400" aria-hidden="true">
<svg class="w-5 h-5" fill="currentColor" viewBox="0 0 20 20">
<path fill-rule="evenodd" d="M7.293 14.707a1 1 0 010-1.414L10.586 10 7.293 6.707a1 1 0 011.414-1.414l4 4a1 1 0 010 1.414l-4 4a1 1 0 01-1.414 0z" clip-rule="evenodd" />
</svg>
</span>
</span>
<?php endif; ?><?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if ENDBLOCK]><![endif]--><?php endif; ?>
</span>
</div>
</div>
</nav>
<?php endif; ?><?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if ENDBLOCK]><![endif]--><?php endif; ?>
<?php /**PATH /Users/mag/Sites/WMS/Core/resources/views/vendor/pagination/tailwind.blade.php ENDPATH**/ ?>
@@ -1,25 +0,0 @@
@php
/** @var \Laravel\Boost\Install\GuidelineAssist $assist */
@endphp
# Do Things the Laravel Way
- Use ___SINGLE_BACKTICK___{{ $assist->artisanCommand('make:') }}___SINGLE_BACKTICK___ commands to create new files (i.e. migrations, controllers, models, etc.). You can list available Artisan commands using ___SINGLE_BACKTICK___{{ $assist->artisanCommand('list') }}___SINGLE_BACKTICK___ and check their parameters with ___SINGLE_BACKTICK___{{ $assist->artisanCommand('[command] --help') }}___SINGLE_BACKTICK___.
- If you're creating a generic PHP class, use ___SINGLE_BACKTICK___{{ $assist->artisanCommand('make:class') }}___SINGLE_BACKTICK___.
- Pass ___SINGLE_BACKTICK___--no-interaction___SINGLE_BACKTICK___ to all Artisan commands to ensure they work without user input. You should also pass the correct ___SINGLE_BACKTICK___--options___SINGLE_BACKTICK___ to ensure correct behavior.
### Model Creation
- When creating new models, create useful factories and seeders for them too. Ask the user if they need any other things, using ___SINGLE_BACKTICK___{{ $assist->artisanCommand('make:model --help') }}___SINGLE_BACKTICK___ to check the available options.
## APIs & Eloquent Resources
- For APIs, default to using Eloquent API Resources and API versioning unless existing API routes do not, then you should follow existing application convention.
## URL Generation
- When generating links to other pages, prefer named routes and the ___SINGLE_BACKTICK___route()___SINGLE_BACKTICK___ function.
## Testing
- When creating models for tests, use the factories for the models. Check if the factory has custom states that can be used before manually setting up the model.
- Faker: Use methods such as ___SINGLE_BACKTICK___$this->faker->word()___SINGLE_BACKTICK___ or ___SINGLE_BACKTICK___fake()->randomDigit()___SINGLE_BACKTICK___. Follow existing conventions whether to use ___SINGLE_BACKTICK___$this->faker___SINGLE_BACKTICK___ or ___SINGLE_BACKTICK___fake()___SINGLE_BACKTICK___.
- When creating tests, make use of ___SINGLE_BACKTICK___{{ $assist->artisanCommand('make:test [options] {name}') }}___SINGLE_BACKTICK___ to create a feature test, and pass ___SINGLE_BACKTICK___--unit___SINGLE_BACKTICK___ to create a unit test. Most tests should be feature tests.
## Vite Error
- If you receive an "Illuminate\Foundation\ViteException: Unable to locate file in Vite manifest" error, you can run ___SINGLE_BACKTICK___{{ $assist->nodePackageManagerCommand('run build') }}___SINGLE_BACKTICK___ or ask the user to run ___SINGLE_BACKTICK___{{ $assist->nodePackageManagerCommand('run dev') }}___SINGLE_BACKTICK___ or ___SINGLE_BACKTICK___{{ $assist->composerCommand('run dev') }}___SINGLE_BACKTICK___.
@@ -1,150 +0,0 @@
<?php if (isset($component)) { $__componentOriginal81a506f898233b9e7d58286e6bea3c18 = $component; } ?>
<?php if (isset($attributes)) { $__attributesOriginal81a506f898233b9e7d58286e6bea3c18 = $attributes; } ?>
<?php $component = Illuminate\View\AnonymousComponent::resolve(['view' => 'f4ac99e09542ff494432bc959d4fee61::app','data' => ['title' => __('Platform Prices')]] + (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag ? $attributes->all() : [])); ?>
<?php $component->withName('layouts::app'); ?>
<?php if ($component->shouldRender()): ?>
<?php $__env->startComponent($component->resolveView(), $component->data()); ?>
<?php if (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag): ?>
<?php $attributes = $attributes->except(\Illuminate\View\AnonymousComponent::ignoredParameterNames()); ?>
<?php endif; ?>
<?php $component->withAttributes(['title' => \Illuminate\View\Compilers\BladeCompiler::sanitizeComponentAttribute(__('Platform Prices'))]); ?>
<?php \Livewire\Features\SupportCompiledWireKeys\SupportCompiledWireKeys::processComponentKey($component); ?>
<div class="space-y-6">
<?php if (isset($component)) { $__componentOriginal9c6e3f23e2ced4034a039852a77e1e96 = $component; } ?>
<?php if (isset($attributes)) { $__attributesOriginal9c6e3f23e2ced4034a039852a77e1e96 = $attributes; } ?>
<?php $component = Illuminate\View\AnonymousComponent::resolve(['view' => 'components.wms.page-hero','data' => ['eyebrow' => 'Administration','title' => 'Pricing Administration','description' => 'Create, edit and publish the platform pricing cards shown under Platform.','icon' => 'fa-solid fa-tags']] + (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag ? $attributes->all() : [])); ?>
<?php $component->withName('wms.page-hero'); ?>
<?php if ($component->shouldRender()): ?>
<?php $__env->startComponent($component->resolveView(), $component->data()); ?>
<?php if (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag): ?>
<?php $attributes = $attributes->except(\Illuminate\View\AnonymousComponent::ignoredParameterNames()); ?>
<?php endif; ?>
<?php $component->withAttributes(['eyebrow' => 'Administration','title' => 'Pricing Administration','description' => 'Create, edit and publish the platform pricing cards shown under Platform.','icon' => 'fa-solid fa-tags']); ?>
<?php \Livewire\Features\SupportCompiledWireKeys\SupportCompiledWireKeys::processComponentKey($component); ?>
<a href="<?php echo e(route('platform.prices.create')); ?>" wire:navigate class="rounded-xl bg-white px-4 py-3 text-sm font-bold text-slate-950 shadow-lg hover:bg-cyan-50">
Add price
</a>
<?php echo $__env->renderComponent(); ?>
<?php endif; ?>
<?php if (isset($__attributesOriginal9c6e3f23e2ced4034a039852a77e1e96)): ?>
<?php $attributes = $__attributesOriginal9c6e3f23e2ced4034a039852a77e1e96; ?>
<?php unset($__attributesOriginal9c6e3f23e2ced4034a039852a77e1e96); ?>
<?php endif; ?>
<?php if (isset($__componentOriginal9c6e3f23e2ced4034a039852a77e1e96)): ?>
<?php $component = $__componentOriginal9c6e3f23e2ced4034a039852a77e1e96; ?>
<?php unset($__componentOriginal9c6e3f23e2ced4034a039852a77e1e96); ?>
<?php endif; ?>
<?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if BLOCK]><![endif]--><?php endif; ?><?php if(session('status')): ?>
<div class="rounded-2xl border border-emerald-200 bg-emerald-50 px-5 py-4 text-sm font-semibold text-emerald-800 dark:border-emerald-900/60 dark:bg-emerald-950/40 dark:text-emerald-200">
<?php echo e(session('status')); ?>
</div>
<?php endif; ?><?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if ENDBLOCK]><![endif]--><?php endif; ?>
<section class="grid gap-5 lg:grid-cols-3">
<?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if BLOCK]><![endif]--><?php \Livewire\Features\SupportCompiledWireKeys\SupportCompiledWireKeys::openLoop(); ?><?php endif; ?><?php $__empty_1 = true; $__currentLoopData = $prices; $__env->addLoop($__currentLoopData); foreach($__currentLoopData as $price): $__env->incrementLoopIndices(); $loop = $__env->getLastLoop(); $__empty_1 = false; ?><?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><?php \Livewire\Features\SupportCompiledWireKeys\SupportCompiledWireKeys::startLoopIteration(); ?><?php endif; ?>
<?php
$isBasic = $price->code === 'basic';
$isAdvanced = $price->code === 'advanced';
$headerClass = $isAdvanced
? 'from-cyan-500 to-blue-600'
: ($isBasic ? 'from-slate-700 to-slate-900' : 'from-indigo-600 to-violet-700');
?>
<article class="relative overflow-hidden rounded-3xl border border-zinc-200 bg-white shadow-sm transition hover:-translate-y-0.5 hover:shadow-xl dark:border-zinc-800 dark:bg-zinc-900">
<?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if BLOCK]><![endif]--><?php endif; ?><?php if($price->is_featured): ?>
<div class="absolute right-4 top-4 z-10 rounded-full bg-white px-3 py-1 text-xs font-extrabold uppercase tracking-wide text-cyan-700 shadow">
Featured
</div>
<?php endif; ?><?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if ENDBLOCK]><![endif]--><?php endif; ?>
<div class="bg-gradient-to-br <?php echo e($headerClass); ?> p-5 text-white">
<div class="flex items-start justify-between gap-4">
<div>
<p class="text-xs font-bold uppercase tracking-[0.24em] text-white/70">
<?php echo e($price->badge_label ?: 'Plan'); ?>
</p>
<h2 class="mt-2 text-2xl font-black tracking-tight"><?php echo e($price->name); ?></h2>
</div>
<span class="grid h-11 w-11 place-items-center rounded-2xl bg-white/15 text-lg backdrop-blur">
<i class="fa-solid <?php echo e($isBasic ? 'fa-box' : ($isAdvanced ? 'fa-layer-group' : 'fa-crown')); ?>" aria-hidden="true"></i>
</span>
</div>
<p class="mt-3 text-sm leading-6 text-white/80"><?php echo e($price->strapline); ?></p>
</div>
<div class="p-5">
<div class="flex items-end gap-2">
<span class="text-4xl font-black tracking-tight text-zinc-950 dark:text-white">
<?php echo e($price->formatAmount($price->monthly_amount)); ?>
</span>
<span class="pb-1 text-sm font-semibold text-zinc-500">/ month</span>
</div>
<p class="mt-2 text-sm text-zinc-500">
Annual:
<span class="font-semibold text-zinc-700 dark:text-zinc-200">
<?php echo e($price->formatAmount($price->annual_amount)); ?>
</span>
</p>
<p class="mt-4 min-h-12 text-sm leading-6 text-zinc-600 dark:text-zinc-300">
<?php echo e($price->description); ?>
</p>
<ul class="mt-5 space-y-3 text-sm text-zinc-700 dark:text-zinc-200">
<?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if BLOCK]><![endif]--><?php \Livewire\Features\SupportCompiledWireKeys\SupportCompiledWireKeys::openLoop(); ?><?php endif; ?><?php $__currentLoopData = $price->featureRows(); $__env->addLoop($__currentLoopData); foreach($__currentLoopData as $feature): $__env->incrementLoopIndices(); $loop = $__env->getLastLoop(); ?><?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><?php \Livewire\Features\SupportCompiledWireKeys\SupportCompiledWireKeys::startLoopIteration(); ?><?php endif; ?>
<li class="flex gap-3">
<i class="fa-solid fa-check mt-1 text-cyan-500" aria-hidden="true"></i>
<span><?php echo e($feature); ?></span>
</li>
<?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><?php \Livewire\Features\SupportCompiledWireKeys\SupportCompiledWireKeys::endLoop(); ?><?php endif; ?><?php endforeach; $__env->popLoop(); $loop = $__env->getLastLoop(); ?><?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if ENDBLOCK]><![endif]--><?php \Livewire\Features\SupportCompiledWireKeys\SupportCompiledWireKeys::closeLoop(); ?><?php endif; ?>
</ul>
<div class="mt-6 flex items-center justify-between gap-3 border-t border-zinc-100 pt-4 dark:border-zinc-800">
<span class="rounded-full px-3 py-1 text-xs font-bold <?php echo e($price->is_active ? 'bg-emerald-100 text-emerald-700 dark:bg-emerald-950 dark:text-emerald-200' : 'bg-zinc-100 text-zinc-600 dark:bg-zinc-800 dark:text-zinc-300'); ?>">
<?php echo e($price->is_active ? 'Active' : 'Hidden'); ?>
</span>
<div class="flex items-center gap-2">
<a href="<?php echo e(route('platform.prices.edit', $price)); ?>" wire:navigate class="rounded-lg border border-zinc-200 px-3 py-2 text-sm font-semibold text-zinc-700 hover:border-cyan-400 hover:text-cyan-700 dark:border-zinc-700 dark:text-zinc-200">
Edit
</a>
<form method="POST" action="<?php echo e(route('platform.prices.destroy', $price)); ?>" onsubmit="return confirm('Delete this price?');">
<?php echo csrf_field(); ?>
<?php echo method_field('DELETE'); ?>
<button type="submit" class="rounded-lg border border-red-200 px-3 py-2 text-sm font-semibold text-red-600 hover:bg-red-50 dark:border-red-900/70 dark:hover:bg-red-950/40">
Delete
</button>
</form>
</div>
</div>
</div>
</article>
<?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><?php \Livewire\Features\SupportCompiledWireKeys\SupportCompiledWireKeys::endLoop(); ?><?php endif; ?><?php endforeach; $__env->popLoop(); $loop = $__env->getLastLoop(); if ($__empty_1): ?><?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><?php \Livewire\Features\SupportCompiledWireKeys\SupportCompiledWireKeys::closeLoop(); ?><?php endif; ?>
<article class="rounded-3xl border border-dashed border-zinc-300 bg-white p-6 text-sm text-zinc-500 shadow-sm dark:border-zinc-700 dark:bg-zinc-900 lg:col-span-3">
No pricing plans have been created yet.
</article>
<?php endif; ?><?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if ENDBLOCK]><![endif]--><?php endif; ?>
</section>
</div>
<?php echo $__env->renderComponent(); ?>
<?php endif; ?>
<?php if (isset($__attributesOriginal81a506f898233b9e7d58286e6bea3c18)): ?>
<?php $attributes = $__attributesOriginal81a506f898233b9e7d58286e6bea3c18; ?>
<?php unset($__attributesOriginal81a506f898233b9e7d58286e6bea3c18); ?>
<?php endif; ?>
<?php if (isset($__componentOriginal81a506f898233b9e7d58286e6bea3c18)): ?>
<?php $component = $__componentOriginal81a506f898233b9e7d58286e6bea3c18; ?>
<?php unset($__componentOriginal81a506f898233b9e7d58286e6bea3c18); ?>
<?php endif; ?>
<?php /**PATH /Users/mag/Sites/WMS/Core/Modules/Platform/Providers/../resources/views/prices/index.blade.php ENDPATH**/ ?>
@@ -1,251 +0,0 @@
## Filament
- Filament is a Laravel UI framework built on Livewire, Alpine.js, and Tailwind CSS. UIs are defined in PHP via fluent, chainable components. Follow existing conventions in this app.
- Use the ___SINGLE_BACKTICK___search-docs___SINGLE_BACKTICK___ tool for official documentation on Artisan commands, code examples, testing, relationships, and idiomatic practices. If ___SINGLE_BACKTICK___search-docs___SINGLE_BACKTICK___ is unavailable, refer to https://filamentphp.com/docs.
### Artisan
- Always use Filament-specific Artisan commands to create files. Find available commands with the ___SINGLE_BACKTICK___list-artisan-commands___SINGLE_BACKTICK___ tool, or run ___SINGLE_BACKTICK___php artisan --help___SINGLE_BACKTICK___.
- Inspect required options before running, and always pass ___SINGLE_BACKTICK___--no-interaction___SINGLE_BACKTICK___.
### Patterns
Always use static ___SINGLE_BACKTICK___make()___SINGLE_BACKTICK___ methods to initialize components. Most configuration methods accept a ___SINGLE_BACKTICK___Closure___SINGLE_BACKTICK___ for dynamic values.
Use ___SINGLE_BACKTICK___Get $get___SINGLE_BACKTICK___ to read other form field values for conditional logic:
@verbatim
<code-snippet name="Conditional form field visibility" lang="php">
use Filament\Forms\Components\Select;
use Filament\Forms\Components\TextInput;
use Filament\Schemas\Components\Utilities\Get;
Select::make('type')
->options(CompanyType::class)
->required()
->live(),
TextInput::make('company_name')
->required()
->visible(fn (Get $get): bool => $get('type') === 'business'),
</code-snippet>
@endverbatim
Use ___SINGLE_BACKTICK___Set $set___SINGLE_BACKTICK___ inside ___SINGLE_BACKTICK___->afterStateUpdated()___SINGLE_BACKTICK___ on a ___SINGLE_BACKTICK___->live()___SINGLE_BACKTICK___ field to mutate another field reactively. Prefer ___SINGLE_BACKTICK___->live(onBlur: true)___SINGLE_BACKTICK___ on text inputs to avoid per-keystroke updates:
@verbatim
<code-snippet name="Reactive field update" lang="php">
use Filament\Schemas\Components\Utilities\Set;
use Illuminate\Support\Str;
TextInput::make('title')
->required()
->live(onBlur: true)
->afterStateUpdated(fn (Set $set, ?string $state) => $set(
'slug',
Str::slug($state ?? ''),
)),
TextInput::make('slug')
->required(),
</code-snippet>
@endverbatim
Compose layout by nesting ___SINGLE_BACKTICK___Section___SINGLE_BACKTICK___ and ___SINGLE_BACKTICK___Grid___SINGLE_BACKTICK___. Children need explicit ___SINGLE_BACKTICK___->columnSpan()___SINGLE_BACKTICK___ or ___SINGLE_BACKTICK___->columnSpanFull()___SINGLE_BACKTICK___:
@verbatim
<code-snippet name="Section and Grid layout" lang="php">
use Filament\Schemas\Components\Grid;
use Filament\Schemas\Components\Section;
Section::make('Details')
->schema([
Grid::make(2)->schema([
TextInput::make('first_name')
->columnSpan(1),
TextInput::make('last_name')
->columnSpan(1),
TextInput::make('bio')
->columnSpanFull(),
]),
]),
</code-snippet>
@endverbatim
Use ___SINGLE_BACKTICK___Repeater___SINGLE_BACKTICK___ for inline ___SINGLE_BACKTICK___HasMany___SINGLE_BACKTICK___ management. ___SINGLE_BACKTICK___->relationship()___SINGLE_BACKTICK___ with no args binds to the relationship matching the field name:
@verbatim
<code-snippet name="Repeater for HasMany" lang="php">
use Filament\Forms\Components\Repeater;
Repeater::make('qualifications')
->relationship()
->schema([
TextInput::make('institution')
->required(),
TextInput::make('qualification')
->required(),
])
->columns(2),
</code-snippet>
@endverbatim
Use ___SINGLE_BACKTICK___state()___SINGLE_BACKTICK___ with a ___SINGLE_BACKTICK___Closure___SINGLE_BACKTICK___ to compute derived column values:
@verbatim
<code-snippet name="Computed table column value" lang="php">
use Filament\Tables\Columns\TextColumn;
TextColumn::make('full_name')
->state(fn (User $record): string => "{$record->first_name} {$record->last_name}"),
</code-snippet>
@endverbatim
Use ___SINGLE_BACKTICK___SelectFilter___SINGLE_BACKTICK___ for enum or relationship filters, and ___SINGLE_BACKTICK___Filter___SINGLE_BACKTICK___ with a ___SINGLE_BACKTICK___->query()___SINGLE_BACKTICK___ closure for custom logic:
@verbatim
<code-snippet name="Table filters" lang="php">
use Filament\Tables\Filters\Filter;
use Filament\Tables\Filters\SelectFilter;
use Illuminate\Database\Eloquent\Builder;
SelectFilter::make('status')
->options(UserStatus::class),
SelectFilter::make('author')
->relationship('author', 'name'),
Filter::make('verified')
->query(fn (Builder $query) => $query->whereNotNull('email_verified_at')),
</code-snippet>
@endverbatim
Actions are buttons that encapsulate optional modal forms and behavior:
@verbatim
<code-snippet name="Action with modal form" lang="php">
use Filament\Actions\Action;
Action::make('updateEmail')
->schema([
TextInput::make('email')
->email()
->required(),
])
->action(fn (array $data, User $record) => $record->update($data)),
</code-snippet>
@endverbatim
### Testing
Testing setup (requires ___SINGLE_BACKTICK___pestphp/pest-plugin-livewire___SINGLE_BACKTICK___ in ___SINGLE_BACKTICK___composer.json___SINGLE_BACKTICK___):
- Always call ___SINGLE_BACKTICK___$this->actingAs(User::factory()->create())___SINGLE_BACKTICK___ before testing panel functionality.
- For edit pages, pass ___SINGLE_BACKTICK___['record' => $user->id]___SINGLE_BACKTICK___, use ___SINGLE_BACKTICK___->call('save')___SINGLE_BACKTICK___ (not ___SINGLE_BACKTICK___->call('create')___SINGLE_BACKTICK___), and do not assert ___SINGLE_BACKTICK___->assertRedirect()___SINGLE_BACKTICK___ (edit pages do not redirect after save).
@verbatim
<code-snippet name="Table test" lang="php">
use function Pest\Livewire\livewire;
livewire(ListUsers::class)
->assertCanSeeTableRecords($users)
->searchTable($users->first()->name)
->assertCanSeeTableRecords($users->take(1))
->assertCanNotSeeTableRecords($users->skip(1));
</code-snippet>
<code-snippet name="Create resource test" lang="php">
use function Pest\Laravel\assertDatabaseHas;
livewire(CreateUser::class)
->fillForm([
'name' => 'Test',
'email' => 'test@example.com',
])
->call('create')
->assertNotified()
->assertHasNoFormErrors()
->assertRedirect();
assertDatabaseHas(User::class, [
'name' => 'Test',
'email' => 'test@example.com',
]);
</code-snippet>
<code-snippet name="Edit resource test" lang="php">
livewire(EditUser::class, ['record' => $user->id])
->fillForm(['name' => 'Updated'])
->call('save')
->assertNotified()
->assertHasNoFormErrors();
assertDatabaseHas(User::class, [
'id' => $user->id,
'name' => 'Updated',
]);
</code-snippet>
<code-snippet name="Testing validation" lang="php">
livewire(CreateUser::class)
->fillForm([
'name' => null,
'email' => 'invalid-email',
])
->call('create')
->assertHasFormErrors([
'name' => 'required',
'email' => 'email',
])
->assertNotNotified();
</code-snippet>
@endverbatim
Use ___SINGLE_BACKTICK___->callAction(DeleteAction::class)___SINGLE_BACKTICK___ for page actions, or ___SINGLE_BACKTICK___->callAction(TestAction::make('name')->table($record))___SINGLE_BACKTICK___ for table actions:
@verbatim
<code-snippet name="Calling actions" lang="php">
use Filament\Actions\Testing\TestAction;
livewire(ListUsers::class)
->callAction(TestAction::make('promote')->table($user), [
'role' => 'admin',
])
->assertNotified();
</code-snippet>
@endverbatim
### Correct Namespaces
- Form fields (___SINGLE_BACKTICK___TextInput___SINGLE_BACKTICK___, ___SINGLE_BACKTICK___Select___SINGLE_BACKTICK___, ___SINGLE_BACKTICK___Repeater___SINGLE_BACKTICK___, etc.): ___SINGLE_BACKTICK___Filament\Forms\Components\___SINGLE_BACKTICK___
- Infolist entries (___SINGLE_BACKTICK___TextEntry___SINGLE_BACKTICK___, ___SINGLE_BACKTICK___IconEntry___SINGLE_BACKTICK___, etc.): ___SINGLE_BACKTICK___Filament\Infolists\Components\___SINGLE_BACKTICK___
- Layout components (___SINGLE_BACKTICK___Grid___SINGLE_BACKTICK___, ___SINGLE_BACKTICK___Section___SINGLE_BACKTICK___, ___SINGLE_BACKTICK___Fieldset___SINGLE_BACKTICK___, ___SINGLE_BACKTICK___Tabs___SINGLE_BACKTICK___, ___SINGLE_BACKTICK___Wizard___SINGLE_BACKTICK___, etc.): ___SINGLE_BACKTICK___Filament\Schemas\Components\___SINGLE_BACKTICK___
- Schema utilities (___SINGLE_BACKTICK___Get___SINGLE_BACKTICK___, ___SINGLE_BACKTICK___Set___SINGLE_BACKTICK___, etc.): ___SINGLE_BACKTICK___Filament\Schemas\Components\Utilities\___SINGLE_BACKTICK___
- Table columns (___SINGLE_BACKTICK___TextColumn___SINGLE_BACKTICK___, ___SINGLE_BACKTICK___IconColumn___SINGLE_BACKTICK___, etc.): ___SINGLE_BACKTICK___Filament\Tables\Columns\___SINGLE_BACKTICK___
- Table filters (___SINGLE_BACKTICK___SelectFilter___SINGLE_BACKTICK___, ___SINGLE_BACKTICK___Filter___SINGLE_BACKTICK___, etc.): ___SINGLE_BACKTICK___Filament\Tables\Filters\___SINGLE_BACKTICK___
- Actions (___SINGLE_BACKTICK___DeleteAction___SINGLE_BACKTICK___, ___SINGLE_BACKTICK___CreateAction___SINGLE_BACKTICK___, etc.): ___SINGLE_BACKTICK___Filament\Actions\___SINGLE_BACKTICK___. Never use ___SINGLE_BACKTICK___Filament\Tables\Actions\___SINGLE_BACKTICK___, ___SINGLE_BACKTICK___Filament\Forms\Actions\___SINGLE_BACKTICK___, or any other sub-namespace for actions.
- Icons: ___SINGLE_BACKTICK___Filament\Support\Icons\Heroicon___SINGLE_BACKTICK___ enum (e.g., ___SINGLE_BACKTICK___Heroicon::PencilSquare___SINGLE_BACKTICK___)
### Common Mistakes
- **Never assume public file visibility.** File visibility is ___SINGLE_BACKTICK___private___SINGLE_BACKTICK___ by default. Always use ___SINGLE_BACKTICK___->visibility('public')___SINGLE_BACKTICK___ when public access is needed.
- **Never assume full-width layout.** ___SINGLE_BACKTICK___Grid___SINGLE_BACKTICK___, ___SINGLE_BACKTICK___Section___SINGLE_BACKTICK___, ___SINGLE_BACKTICK___Fieldset___SINGLE_BACKTICK___, and ___SINGLE_BACKTICK___Repeater___SINGLE_BACKTICK___ do not span all columns by default.
- **Use ___SINGLE_BACKTICK___Select::make('author_id')->relationship('author', 'name')___SINGLE_BACKTICK___ for BelongsTo fields.** ___SINGLE_BACKTICK___BelongsToSelect___SINGLE_BACKTICK___ does not exist in v4.
- **___SINGLE_BACKTICK___Repeater___SINGLE_BACKTICK___ uses ___SINGLE_BACKTICK___->schema()___SINGLE_BACKTICK___, not ___SINGLE_BACKTICK___->fields()___SINGLE_BACKTICK___.**
- **Never add ___SINGLE_BACKTICK___->dehydrated(false)___SINGLE_BACKTICK___ to fields that need to be saved.** It strips the value from form state before ___SINGLE_BACKTICK___->action()___SINGLE_BACKTICK___ or the save handler runs. Only use it for helper/UI-only fields.
- **Use correct property types when overriding ___SINGLE_BACKTICK___Page___SINGLE_BACKTICK___, ___SINGLE_BACKTICK___Resource___SINGLE_BACKTICK___, and ___SINGLE_BACKTICK___Widget___SINGLE_BACKTICK___ properties.** These properties have union types or changed modifiers that must be preserved:
- ___SINGLE_BACKTICK___$navigationIcon___SINGLE_BACKTICK___: ___SINGLE_BACKTICK___protected static string | BackedEnum | null___SINGLE_BACKTICK___ (not ___SINGLE_BACKTICK___?string___SINGLE_BACKTICK___)
- ___SINGLE_BACKTICK___$navigationGroup___SINGLE_BACKTICK___: ___SINGLE_BACKTICK___protected static string | UnitEnum | null___SINGLE_BACKTICK___ (not ___SINGLE_BACKTICK___?string___SINGLE_BACKTICK___)
- ___SINGLE_BACKTICK___$view___SINGLE_BACKTICK___: ___SINGLE_BACKTICK___protected string___SINGLE_BACKTICK___ (not ___SINGLE_BACKTICK___protected static string___SINGLE_BACKTICK___) on ___SINGLE_BACKTICK___Page___SINGLE_BACKTICK___ and ___SINGLE_BACKTICK___Widget___SINGLE_BACKTICK___ classes
@@ -1,148 +0,0 @@
<?php
$featuresText = old('features', implode("\n", $price->featureRows()));
?>
<div class="grid gap-5 lg:grid-cols-2">
<div>
<label for="name" class="text-sm font-semibold text-zinc-700 dark:text-zinc-200">Name</label>
<input id="name" name="name" value="<?php echo e(old('name', $price->name)); ?>" required class="mt-2 w-full rounded-xl border-zinc-300 bg-white px-4 py-3 text-sm dark:border-zinc-700 dark:bg-zinc-950" placeholder="Basic">
<?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if BLOCK]><![endif]--><?php endif; ?><?php $__errorArgs = ['name'];
$__bag = $errors->getBag($__errorArgs[1] ?? 'default');
if ($__bag->has($__errorArgs[0])) :
if (isset($message)) { $__messageOriginal = $message; }
$message = $__bag->first($__errorArgs[0]); ?><p class="mt-1 text-sm text-red-500"><?php echo e($message); ?></p><?php unset($message);
if (isset($__messageOriginal)) { $message = $__messageOriginal; }
endif;
unset($__errorArgs, $__bag); ?><?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if ENDBLOCK]><![endif]--><?php endif; ?>
</div>
<div>
<label for="code" class="text-sm font-semibold text-zinc-700 dark:text-zinc-200">Code</label>
<input id="code" name="code" value="<?php echo e(old('code', $price->code)); ?>" class="mt-2 w-full rounded-xl border-zinc-300 bg-white px-4 py-3 text-sm dark:border-zinc-700 dark:bg-zinc-950" placeholder="basic">
<?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if BLOCK]><![endif]--><?php endif; ?><?php $__errorArgs = ['code'];
$__bag = $errors->getBag($__errorArgs[1] ?? 'default');
if ($__bag->has($__errorArgs[0])) :
if (isset($message)) { $__messageOriginal = $message; }
$message = $__bag->first($__errorArgs[0]); ?><p class="mt-1 text-sm text-red-500"><?php echo e($message); ?></p><?php unset($message);
if (isset($__messageOriginal)) { $message = $__messageOriginal; }
endif;
unset($__errorArgs, $__bag); ?><?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if ENDBLOCK]><![endif]--><?php endif; ?>
</div>
<div>
<label for="strapline" class="text-sm font-semibold text-zinc-700 dark:text-zinc-200">Strapline</label>
<input id="strapline" name="strapline" value="<?php echo e(old('strapline', $price->strapline)); ?>" class="mt-2 w-full rounded-xl border-zinc-300 bg-white px-4 py-3 text-sm dark:border-zinc-700 dark:bg-zinc-950" placeholder="Core warehouse visibility">
<?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if BLOCK]><![endif]--><?php endif; ?><?php $__errorArgs = ['strapline'];
$__bag = $errors->getBag($__errorArgs[1] ?? 'default');
if ($__bag->has($__errorArgs[0])) :
if (isset($message)) { $__messageOriginal = $message; }
$message = $__bag->first($__errorArgs[0]); ?><p class="mt-1 text-sm text-red-500"><?php echo e($message); ?></p><?php unset($message);
if (isset($__messageOriginal)) { $message = $__messageOriginal; }
endif;
unset($__errorArgs, $__bag); ?><?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if ENDBLOCK]><![endif]--><?php endif; ?>
</div>
<div>
<label for="badge_label" class="text-sm font-semibold text-zinc-700 dark:text-zinc-200">Badge label</label>
<input id="badge_label" name="badge_label" value="<?php echo e(old('badge_label', $price->badge_label)); ?>" class="mt-2 w-full rounded-xl border-zinc-300 bg-white px-4 py-3 text-sm dark:border-zinc-700 dark:bg-zinc-950" placeholder="Popular">
<?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if BLOCK]><![endif]--><?php endif; ?><?php $__errorArgs = ['badge_label'];
$__bag = $errors->getBag($__errorArgs[1] ?? 'default');
if ($__bag->has($__errorArgs[0])) :
if (isset($message)) { $__messageOriginal = $message; }
$message = $__bag->first($__errorArgs[0]); ?><p class="mt-1 text-sm text-red-500"><?php echo e($message); ?></p><?php unset($message);
if (isset($__messageOriginal)) { $message = $__messageOriginal; }
endif;
unset($__errorArgs, $__bag); ?><?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if ENDBLOCK]><![endif]--><?php endif; ?>
</div>
<div>
<label for="monthly_amount" class="text-sm font-semibold text-zinc-700 dark:text-zinc-200">Monthly price</label>
<input id="monthly_amount" name="monthly_amount" type="number" step="0.01" min="0" value="<?php echo e(old('monthly_amount', $price->exists ? number_format($price->monthly_amount / 100, 2, '.', '') : '0.00')); ?>" required class="mt-2 w-full rounded-xl border-zinc-300 bg-white px-4 py-3 text-sm dark:border-zinc-700 dark:bg-zinc-950" placeholder="99.00">
<?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if BLOCK]><![endif]--><?php endif; ?><?php $__errorArgs = ['monthly_amount'];
$__bag = $errors->getBag($__errorArgs[1] ?? 'default');
if ($__bag->has($__errorArgs[0])) :
if (isset($message)) { $__messageOriginal = $message; }
$message = $__bag->first($__errorArgs[0]); ?><p class="mt-1 text-sm text-red-500"><?php echo e($message); ?></p><?php unset($message);
if (isset($__messageOriginal)) { $message = $__messageOriginal; }
endif;
unset($__errorArgs, $__bag); ?><?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if ENDBLOCK]><![endif]--><?php endif; ?>
</div>
<div>
<label for="annual_amount" class="text-sm font-semibold text-zinc-700 dark:text-zinc-200">Annual price</label>
<input id="annual_amount" name="annual_amount" type="number" step="0.01" min="0" value="<?php echo e(old('annual_amount', $price->annual_amount !== null ? number_format($price->annual_amount / 100, 2, '.', '') : '')); ?>" class="mt-2 w-full rounded-xl border-zinc-300 bg-white px-4 py-3 text-sm dark:border-zinc-700 dark:bg-zinc-950" placeholder="990.00">
<?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if BLOCK]><![endif]--><?php endif; ?><?php $__errorArgs = ['annual_amount'];
$__bag = $errors->getBag($__errorArgs[1] ?? 'default');
if ($__bag->has($__errorArgs[0])) :
if (isset($message)) { $__messageOriginal = $message; }
$message = $__bag->first($__errorArgs[0]); ?><p class="mt-1 text-sm text-red-500"><?php echo e($message); ?></p><?php unset($message);
if (isset($__messageOriginal)) { $message = $__messageOriginal; }
endif;
unset($__errorArgs, $__bag); ?><?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if ENDBLOCK]><![endif]--><?php endif; ?>
</div>
<div>
<label for="currency" class="text-sm font-semibold text-zinc-700 dark:text-zinc-200">Currency</label>
<input id="currency" name="currency" value="<?php echo e(old('currency', $price->currency ?: 'gbp')); ?>" maxlength="3" required class="mt-2 w-full rounded-xl border-zinc-300 bg-white px-4 py-3 text-sm uppercase dark:border-zinc-700 dark:bg-zinc-950" placeholder="gbp">
<?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if BLOCK]><![endif]--><?php endif; ?><?php $__errorArgs = ['currency'];
$__bag = $errors->getBag($__errorArgs[1] ?? 'default');
if ($__bag->has($__errorArgs[0])) :
if (isset($message)) { $__messageOriginal = $message; }
$message = $__bag->first($__errorArgs[0]); ?><p class="mt-1 text-sm text-red-500"><?php echo e($message); ?></p><?php unset($message);
if (isset($__messageOriginal)) { $message = $__messageOriginal; }
endif;
unset($__errorArgs, $__bag); ?><?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if ENDBLOCK]><![endif]--><?php endif; ?>
</div>
<div>
<label for="sort_order" class="text-sm font-semibold text-zinc-700 dark:text-zinc-200">Sort order</label>
<input id="sort_order" name="sort_order" type="number" min="0" value="<?php echo e(old('sort_order', $price->sort_order ?? 0)); ?>" required class="mt-2 w-full rounded-xl border-zinc-300 bg-white px-4 py-3 text-sm dark:border-zinc-700 dark:bg-zinc-950">
<?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if BLOCK]><![endif]--><?php endif; ?><?php $__errorArgs = ['sort_order'];
$__bag = $errors->getBag($__errorArgs[1] ?? 'default');
if ($__bag->has($__errorArgs[0])) :
if (isset($message)) { $__messageOriginal = $message; }
$message = $__bag->first($__errorArgs[0]); ?><p class="mt-1 text-sm text-red-500"><?php echo e($message); ?></p><?php unset($message);
if (isset($__messageOriginal)) { $message = $__messageOriginal; }
endif;
unset($__errorArgs, $__bag); ?><?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if ENDBLOCK]><![endif]--><?php endif; ?>
</div>
<div class="lg:col-span-2">
<label for="description" class="text-sm font-semibold text-zinc-700 dark:text-zinc-200">Description</label>
<textarea id="description" name="description" rows="3" class="mt-2 w-full rounded-xl border-zinc-300 bg-white px-4 py-3 text-sm dark:border-zinc-700 dark:bg-zinc-950" placeholder="Short customer-facing description"><?php echo e(old('description', $price->description)); ?></textarea>
<?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if BLOCK]><![endif]--><?php endif; ?><?php $__errorArgs = ['description'];
$__bag = $errors->getBag($__errorArgs[1] ?? 'default');
if ($__bag->has($__errorArgs[0])) :
if (isset($message)) { $__messageOriginal = $message; }
$message = $__bag->first($__errorArgs[0]); ?><p class="mt-1 text-sm text-red-500"><?php echo e($message); ?></p><?php unset($message);
if (isset($__messageOriginal)) { $message = $__messageOriginal; }
endif;
unset($__errorArgs, $__bag); ?><?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if ENDBLOCK]><![endif]--><?php endif; ?>
</div>
<div class="lg:col-span-2">
<label for="features" class="text-sm font-semibold text-zinc-700 dark:text-zinc-200">Features</label>
<textarea id="features" name="features" rows="6" class="mt-2 w-full rounded-xl border-zinc-300 bg-white px-4 py-3 text-sm dark:border-zinc-700 dark:bg-zinc-950" placeholder="One feature per line"><?php echo e($featuresText); ?></textarea>
<?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if BLOCK]><![endif]--><?php endif; ?><?php $__errorArgs = ['features'];
$__bag = $errors->getBag($__errorArgs[1] ?? 'default');
if ($__bag->has($__errorArgs[0])) :
if (isset($message)) { $__messageOriginal = $message; }
$message = $__bag->first($__errorArgs[0]); ?><p class="mt-1 text-sm text-red-500"><?php echo e($message); ?></p><?php unset($message);
if (isset($__messageOriginal)) { $message = $__messageOriginal; }
endif;
unset($__errorArgs, $__bag); ?><?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if ENDBLOCK]><![endif]--><?php endif; ?>
</div>
<div class="flex flex-wrap gap-4 lg:col-span-2">
<label class="inline-flex items-center gap-2 rounded-xl border border-zinc-200 bg-zinc-50 px-4 py-3 text-sm font-semibold dark:border-zinc-800 dark:bg-zinc-950">
<input type="checkbox" name="is_featured" value="1" <?php if(old('is_featured', $price->is_featured)): echo 'checked'; endif; ?> class="rounded border-zinc-300">
Featured price
</label>
<label class="inline-flex items-center gap-2 rounded-xl border border-zinc-200 bg-zinc-50 px-4 py-3 text-sm font-semibold dark:border-zinc-800 dark:bg-zinc-950">
<input type="checkbox" name="is_active" value="1" <?php if(old('is_active', $price->is_active ?? true)): echo 'checked'; endif; ?> class="rounded border-zinc-300">
Active
</label>
</div>
</div>
<?php /**PATH /Users/mag/Sites/WMS/Core/Modules/Platform/Providers/../resources/views/prices/_form.blade.php ENDPATH**/ ?>
@@ -1,37 +0,0 @@
# Laravel Boost
@if($assist->hasMcpEnabled())
## Tools
- Laravel Boost is an MCP server with tools designed specifically for this application. Prefer Boost tools over manual alternatives like shell commands or file reads.
- Use ___SINGLE_BACKTICK___database-query___SINGLE_BACKTICK___ to run read-only queries against the database instead of writing raw SQL in tinker.
- Use ___SINGLE_BACKTICK___database-schema___SINGLE_BACKTICK___ to inspect table structure before writing migrations or models.
- Use ___SINGLE_BACKTICK___get-absolute-url___SINGLE_BACKTICK___ to resolve the correct scheme, domain, and port for project URLs. Always use this before sharing a URL with the user.
@if (config('boost.browser_logs', false) !== false || config('boost.browser_logs_watcher', true) !== false)
- Use ___SINGLE_BACKTICK___browser-logs___SINGLE_BACKTICK___ to read browser logs, errors, and exceptions. Only recent logs are useful, ignore old entries.
@endif
## Searching Documentation (IMPORTANT)
- Always use ___SINGLE_BACKTICK___search-docs___SINGLE_BACKTICK___ before making code changes. Do not skip this step. It returns version-specific docs based on installed packages automatically.
- Pass a ___SINGLE_BACKTICK___packages___SINGLE_BACKTICK___ array to scope results when you know which packages are relevant.
- Use multiple broad, topic-based queries: ___SINGLE_BACKTICK___['rate limiting', 'routing rate limiting', 'routing']___SINGLE_BACKTICK___. Expect the most relevant results first.
- Do not add package names to queries because package info is already shared. Use ___SINGLE_BACKTICK___test resource table___SINGLE_BACKTICK___, not ___SINGLE_BACKTICK___filament 4 test resource table___SINGLE_BACKTICK___.
### Search Syntax
1. Use words for auto-stemmed AND logic: ___SINGLE_BACKTICK___rate limit___SINGLE_BACKTICK___ matches both "rate" AND "limit".
2. Use ___SINGLE_BACKTICK___"quoted phrases"___SINGLE_BACKTICK___ for exact position matching: ___SINGLE_BACKTICK___"infinite scroll"___SINGLE_BACKTICK___ requires adjacent words in order.
3. Combine words and phrases for mixed queries: ___SINGLE_BACKTICK___middleware "rate limit"___SINGLE_BACKTICK___.
4. Use multiple queries for OR logic: ___SINGLE_BACKTICK___queries=["authentication", "middleware"]___SINGLE_BACKTICK___.
@endif
## Artisan
- Run Artisan commands directly via the command line (e.g., ___SINGLE_BACKTICK___{{ $assist->artisanCommand('route:list') }}___SINGLE_BACKTICK___). Use ___SINGLE_BACKTICK___{{ $assist->artisanCommand('list') }}___SINGLE_BACKTICK___ to discover available commands and ___SINGLE_BACKTICK___{{ $assist->artisanCommand('[command] --help') }}___SINGLE_BACKTICK___ to check parameters.
- Inspect routes with ___SINGLE_BACKTICK___{{ $assist->artisanCommand('route:list') }}___SINGLE_BACKTICK___. Filter with: ___SINGLE_BACKTICK___--method=GET___SINGLE_BACKTICK___, ___SINGLE_BACKTICK___--name=users___SINGLE_BACKTICK___, ___SINGLE_BACKTICK___--path=api___SINGLE_BACKTICK___, ___SINGLE_BACKTICK___--except-vendor___SINGLE_BACKTICK___, ___SINGLE_BACKTICK___--only-vendor___SINGLE_BACKTICK___.
- Read configuration values using dot notation: ___SINGLE_BACKTICK___{{ $assist->artisanCommand('config:show app.name') }}___SINGLE_BACKTICK___, ___SINGLE_BACKTICK___{{ $assist->artisanCommand('config:show database.default') }}___SINGLE_BACKTICK___. Or read config files directly from the ___SINGLE_BACKTICK___config/___SINGLE_BACKTICK___ directory.
## Tinker
- Execute PHP in app context for debugging and testing code. Do not create models without user approval, prefer tests with factories instead. Prefer existing Artisan commands over custom tinker code.
@if($assist->hasMcpEnabled() && config('boost.tinker_tool_enabled', false))
- Use the ___SINGLE_BACKTICK___tinker___SINGLE_BACKTICK___ MCP tool to execute PHP code instead of the CLI. It avoids shell escaping issues and runs the snippet in the Laravel application context.
@else
- Always use single quotes to prevent shell expansion: ___SINGLE_BACKTICK___{{ $assist->artisanCommand("tinker --execute 'Your::code();'") }}___SINGLE_BACKTICK___
- Double quotes for PHP strings inside: ___SINGLE_BACKTICK___{{ $assist->artisanCommand("tinker --execute 'User::where(\"active\", true)->count();'") }}___SINGLE_BACKTICK___
@endif
@@ -1,49 +0,0 @@
<?php
/** @var \Laravel\Boost\Install\GuidelineAssist $assist */
?>
# Laravel Boost Guidelines
The Laravel Boost guidelines are specifically curated by Laravel maintainers for this application. These guidelines should be followed closely to ensure the best experience when building Laravel applications.
## Foundational Context
This application is a Laravel application and its main Laravel ecosystems package & versions are below. You are an expert with them all. Ensure you abide by these specific packages & versions.
- php - <?php echo e(PHP_MAJOR_VERSION); ?>.<?php echo e(PHP_MINOR_VERSION); ?>
<?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if BLOCK]><![endif]--><?php \Livewire\Features\SupportCompiledWireKeys\SupportCompiledWireKeys::openLoop(); ?><?php endif; ?><?php $__currentLoopData = app(\Laravel\Roster\Roster::class)->packages()->unique(fn ($package) => $package->rawName()); $__env->addLoop($__currentLoopData); foreach($__currentLoopData as $package): $__env->incrementLoopIndices(); $loop = $__env->getLastLoop(); ?><?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><?php \Livewire\Features\SupportCompiledWireKeys\SupportCompiledWireKeys::startLoopIteration(); ?><?php endif; ?>
- <?php echo e($package->rawName()); ?> (<?php echo e($package->name()); ?>) - v<?php echo e($package->majorVersion()); ?>
<?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><?php \Livewire\Features\SupportCompiledWireKeys\SupportCompiledWireKeys::endLoop(); ?><?php endif; ?><?php endforeach; $__env->popLoop(); $loop = $__env->getLastLoop(); ?><?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if ENDBLOCK]><![endif]--><?php \Livewire\Features\SupportCompiledWireKeys\SupportCompiledWireKeys::closeLoop(); ?><?php endif; ?>
<?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if BLOCK]><![endif]--><?php endif; ?><?php if(! empty(config('boost.purpose'))): ?>
Application purpose: <?php echo config('boost.purpose'); ?>
<?php endif; ?><?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if ENDBLOCK]><![endif]--><?php endif; ?>
<?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if BLOCK]><![endif]--><?php endif; ?><?php if($assist->hasSkillsEnabled()): ?>
## Skills Activation
This project has domain-specific skills available in ___SINGLE_BACKTICK___**/skills/**___SINGLE_BACKTICK___. You MUST activate the relevant skill whenever you work in that domain—don't wait until you're stuck.
<?php endif; ?><?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if ENDBLOCK]><![endif]--><?php endif; ?>
## Conventions
- You must follow all existing code conventions used in this application. When creating or editing a file, check sibling files for the correct structure, approach, and naming.
- Use descriptive names for variables and methods. For example, ___SINGLE_BACKTICK___isRegisteredForDiscounts___SINGLE_BACKTICK___, not ___SINGLE_BACKTICK___discount()___SINGLE_BACKTICK___.
- Check for existing components to reuse before writing a new one.
## Verification Scripts
- Do not create verification scripts or tinker when tests cover that functionality and prove they work. Unit and feature tests are more important.
## Application Structure & Architecture
- Stick to existing directory structure; don't create new base folders without approval.
- Do not change the application's dependencies without approval.
## Frontend Bundling
- If the user doesn't see a frontend change reflected in the UI, it could mean they need to run ___SINGLE_BACKTICK___<?php echo e($assist->nodePackageManagerCommand('run build')); ?>___SINGLE_BACKTICK___, ___SINGLE_BACKTICK___<?php echo e($assist->nodePackageManagerCommand('run dev')); ?>___SINGLE_BACKTICK___, or ___SINGLE_BACKTICK___<?php echo e($assist->composerCommand('run dev')); ?>___SINGLE_BACKTICK___. Ask them.
## Documentation Files
- You must only create documentation files if explicitly requested by the user.
## Replies
- Be concise in your explanations - focus on what's important rather than explaining obvious details.
<?php /**PATH /Users/mag/Sites/WMS/Core/storage/framework/views/56412a9aeb6f1e81a1c3ce244096a4cf.blade.php ENDPATH**/ ?>
@@ -1,147 +0,0 @@
<?php if (isset($component)) { $__componentOriginal81a506f898233b9e7d58286e6bea3c18 = $component; } ?>
<?php if (isset($attributes)) { $__attributesOriginal81a506f898233b9e7d58286e6bea3c18 = $attributes; } ?>
<?php $component = Illuminate\View\AnonymousComponent::resolve(['view' => 'f4ac99e09542ff494432bc959d4fee61::app','data' => ['title' => __('Audit')]] + (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag ? $attributes->all() : [])); ?>
<?php $component->withName('layouts::app'); ?>
<?php if ($component->shouldRender()): ?>
<?php $__env->startComponent($component->resolveView(), $component->data()); ?>
<?php if (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag): ?>
<?php $attributes = $attributes->except(\Illuminate\View\AnonymousComponent::ignoredParameterNames()); ?>
<?php endif; ?>
<?php $component->withAttributes(['title' => \Illuminate\View\Compilers\BladeCompiler::sanitizeComponentAttribute(__('Audit'))]); ?>
<?php \Livewire\Features\SupportCompiledWireKeys\SupportCompiledWireKeys::processComponentKey($component); ?>
<div class="container-fluid py-4 module-page module-audit">
<div class="row g-4">
<div class="col-12">
<?php if (isset($component)) { $__componentOriginal9c6e3f23e2ced4034a039852a77e1e96 = $component; } ?>
<?php if (isset($attributes)) { $__attributesOriginal9c6e3f23e2ced4034a039852a77e1e96 = $attributes; } ?>
<?php $component = Illuminate\View\AnonymousComponent::resolve(['view' => 'components.wms.page-hero','data' => ['eyebrow' => 'Operations','title' => 'Audit','description' => 'Review activity logs, data changes, interface events, and administrative actions.','icon' => 'fa-solid fa-clipboard-check']] + (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag ? $attributes->all() : [])); ?>
<?php $component->withName('wms.page-hero'); ?>
<?php if ($component->shouldRender()): ?>
<?php $__env->startComponent($component->resolveView(), $component->data()); ?>
<?php if (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag): ?>
<?php $attributes = $attributes->except(\Illuminate\View\AnonymousComponent::ignoredParameterNames()); ?>
<?php endif; ?>
<?php $component->withAttributes(['eyebrow' => 'Operations','title' => 'Audit','description' => 'Review activity logs, data changes, interface events, and administrative actions.','icon' => 'fa-solid fa-clipboard-check']); ?>
<?php \Livewire\Features\SupportCompiledWireKeys\SupportCompiledWireKeys::processComponentKey($component); ?>
<?php echo $__env->renderComponent(); ?>
<?php endif; ?>
<?php if (isset($__attributesOriginal9c6e3f23e2ced4034a039852a77e1e96)): ?>
<?php $attributes = $__attributesOriginal9c6e3f23e2ced4034a039852a77e1e96; ?>
<?php unset($__attributesOriginal9c6e3f23e2ced4034a039852a77e1e96); ?>
<?php endif; ?>
<?php if (isset($__componentOriginal9c6e3f23e2ced4034a039852a77e1e96)): ?>
<?php $component = $__componentOriginal9c6e3f23e2ced4034a039852a77e1e96; ?>
<?php unset($__componentOriginal9c6e3f23e2ced4034a039852a77e1e96); ?>
<?php endif; ?>
</div>
<div class="col-md-6 col-xl-3">
<div class="card h-100 border-0 shadow-sm module-metric-card">
<div class="card-body">
<div class="small text-uppercase text-muted fw-semibold mb-2">01</div>
<h3 class="h6 mb-2">Activity Log</h3>
<p class="small text-muted mb-0">Placeholder area for activity log.</p>
</div>
</div>
</div>
<div class="col-md-6 col-xl-3">
<div class="card h-100 border-0 shadow-sm module-metric-card">
<div class="card-body">
<div class="small text-uppercase text-muted fw-semibold mb-2">02</div>
<h3 class="h6 mb-2">Data Changes</h3>
<p class="small text-muted mb-0">Placeholder area for data changes.</p>
</div>
</div>
</div>
<div class="col-md-6 col-xl-3">
<div class="card h-100 border-0 shadow-sm module-metric-card">
<div class="card-body">
<div class="small text-uppercase text-muted fw-semibold mb-2">03</div>
<h3 class="h6 mb-2">API Audit</h3>
<p class="small text-muted mb-0">Placeholder area for api audit.</p>
</div>
</div>
</div>
<div class="col-md-6 col-xl-3">
<div class="card h-100 border-0 shadow-sm module-metric-card">
<div class="card-body">
<div class="small text-uppercase text-muted fw-semibold mb-2">04</div>
<h3 class="h6 mb-2">User Actions</h3>
<p class="small text-muted mb-0">Placeholder area for user actions.</p>
</div>
</div>
</div>
<div class="col-12">
<section class="card border-0 shadow-sm">
<div class="card-header bg-white border-bottom">
<div class="d-flex flex-column flex-md-row justify-content-between gap-2">
<div>
<h2 class="h5 mb-1">Audit workbench</h2>
<p class="small text-muted mb-0">Sample table layout ready to wire into controllers, queries, DataTables, or Livewire.</p>
</div>
<div class="d-flex gap-2">
<button type="button" class="btn btn-outline-secondary btn-sm">Export</button>
<button type="button" class="btn btn-primary btn-sm">Create</button>
</div>
</div>
</div>
<div class="card-body">
<div class="table-responsive">
<table class="table table-hover align-middle mb-0">
<thead class="table-light">
<tr>
<th>When</th>
<th>User</th>
<th>Action</th>
<th class="text-end">Action</th>
</tr>
</thead>
<tbody>
<tr>
<td>Activity Log</td>
<td>Sample 1</td>
<td><span class="badge bg-success-subtle text-success border border-success-subtle">Active</span></td>
<td class="text-end"><a href="#" class="btn btn-sm btn-outline-primary">Open</a></td>
</tr>
<tr>
<td>Data Changes</td>
<td>Sample 2</td>
<td><span class="badge bg-success-subtle text-success border border-success-subtle">Active</span></td>
<td class="text-end"><a href="#" class="btn btn-sm btn-outline-primary">Open</a></td>
</tr>
<tr>
<td>API Audit</td>
<td>Sample 3</td>
<td><span class="badge bg-success-subtle text-success border border-success-subtle">Active</span></td>
<td class="text-end"><a href="#" class="btn btn-sm btn-outline-primary">Open</a></td>
</tr>
<tr>
<td>User Actions</td>
<td>Sample 4</td>
<td><span class="badge bg-success-subtle text-success border border-success-subtle">Active</span></td>
<td class="text-end"><a href="#" class="btn btn-sm btn-outline-primary">Open</a></td>
</tr>
</tbody>
</table>
</div>
</div>
</section>
</div>
</div>
</div>
<?php echo $__env->renderComponent(); ?>
<?php endif; ?>
<?php if (isset($__attributesOriginal81a506f898233b9e7d58286e6bea3c18)): ?>
<?php $attributes = $__attributesOriginal81a506f898233b9e7d58286e6bea3c18; ?>
<?php unset($__attributesOriginal81a506f898233b9e7d58286e6bea3c18); ?>
<?php endif; ?>
<?php if (isset($__componentOriginal81a506f898233b9e7d58286e6bea3c18)): ?>
<?php $component = $__componentOriginal81a506f898233b9e7d58286e6bea3c18; ?>
<?php unset($__componentOriginal81a506f898233b9e7d58286e6bea3c18); ?>
<?php endif; ?>
<?php /**PATH /Users/mag/Sites/WMS/Core/Modules/Audit/Providers/../Resources/views/index.blade.php ENDPATH**/ ?>
@@ -1,9 +0,0 @@
# Laravel Octane
This application uses Laravel Octane, a long-running PHP server. The application bootstraps once and handles many requests within the same process.
- Never store request-specific state in singletons or static properties, because it can leak across requests.
- Use ___SINGLE_BACKTICK___config('octane.server')___SINGLE_BACKTICK___ to detect the active driver (___SINGLE_BACKTICK___swoole___SINGLE_BACKTICK___, ___SINGLE_BACKTICK___roadrunner___SINGLE_BACKTICK___, or ___SINGLE_BACKTICK___frankenphp___SINGLE_BACKTICK___).
- Prefer scoped bindings (___SINGLE_BACKTICK___$this->app->scoped()___SINGLE_BACKTICK___) over singletons for per-request services.
When working on Octane-specific features (concurrency, shared tables, memory, driver configuration, testing), invoke ___SINGLE_BACKTICK___octane-development___SINGLE_BACKTICK___ for detailed rules.
@@ -1,80 +0,0 @@
---
name: cashier-stripe-development
description: "Handles Laravel Cashier Stripe integration including subscriptions, webhooks, Stripe Checkout, invoices, charges, refunds, trials, coupons, metered billing, and payment failure handling. Triggered when a user mentions Cashier, Billable, IncompletePayment, stripe_id, newSubscription, Stripe subscriptions, or billing. Also applies when setting up webhooks, handling SCA/3DS payment failures, testing with Stripe test cards, or troubleshooting incomplete subscriptions, CSRF webhook errors, or migration publish issues."
license: MIT
metadata:
author: laravel
---
@php
/** @var \Laravel\Boost\Install\GuidelineAssist $assist */
@endphp
# Cashier Stripe Development
## Documentation
Use ___SINGLE_BACKTICK___search-docs___SINGLE_BACKTICK___ for detailed Cashier patterns and documentation covering subscriptions, webhooks, Stripe Checkout, invoices, payment methods, and testing.
For deeper guidance on specific topics, read the relevant reference file before implementing:
- ___SINGLE_BACKTICK___references/subscriptions.md___SINGLE_BACKTICK___ covers subscription creation, status checks, swapping, trials, quantities, and multiple products
- ___SINGLE_BACKTICK___references/webhooks.md___SINGLE_BACKTICK___ covers webhook setup, custom handlers, CSRF exclusion, and local development with the Stripe CLI
- ___SINGLE_BACKTICK___references/testing.md___SINGLE_BACKTICK___ covers Stripe test cards, payment method tokens, and feature test patterns
## Basic Usage
### Installation
___SINGLE_BACKTICK______SINGLE_BACKTICK______SINGLE_BACKTICK___bash
{{ $assist->artisanCommand('vendor:publish --tag="cashier-migrations"') }}
{{ $assist->artisanCommand('migrate') }}
{{ $assist->artisanCommand('vendor:publish --tag="cashier-config"') }}
___SINGLE_BACKTICK______SINGLE_BACKTICK______SINGLE_BACKTICK___
### Environment Variables
___SINGLE_BACKTICK______SINGLE_BACKTICK______SINGLE_BACKTICK___
STRIPE_KEY=pk_test_...
STRIPE_SECRET=sk_test_...
STRIPE_WEBHOOK_SECRET=whsec_...
CASHIER_CURRENCY=usd
CASHIER_CURRENCY_LOCALE=en_US
___SINGLE_BACKTICK______SINGLE_BACKTICK______SINGLE_BACKTICK___
### Billable Model
___BOOST_SNIPPET_0___
For a non-User model, register it in a service provider:
___BOOST_SNIPPET_1___
### Creating a Subscription
___BOOST_SNIPPET_2___
Always wrap subscription creation in a try/catch for ___SINGLE_BACKTICK___IncompletePayment___SINGLE_BACKTICK___. When a card requires 3DS authentication, Cashier throws this exception. The ___SINGLE_BACKTICK___cashier.payment___SINGLE_BACKTICK___ route is auto-registered and handles the confirmation flow.
## Verification
1. Run migrations and confirm ___SINGLE_BACKTICK___stripe_id___SINGLE_BACKTICK___, ___SINGLE_BACKTICK___pm_type___SINGLE_BACKTICK___, ___SINGLE_BACKTICK___pm_last_four___SINGLE_BACKTICK___, and ___SINGLE_BACKTICK___trial_ends_at___SINGLE_BACKTICK___ columns exist on the billable model table
2. Test the webhook endpoint with ___SINGLE_BACKTICK___stripe listen --forward-to localhost/stripe/webhook___SINGLE_BACKTICK___ if you use the default path, or swap ___SINGLE_BACKTICK___stripe___SINGLE_BACKTICK___ for your configured ___SINGLE_BACKTICK___CASHIER_PATH___SINGLE_BACKTICK___
3. Confirm ___SINGLE_BACKTICK___$user->subscribed('default')___SINGLE_BACKTICK___ returns the expected value for active and incomplete subscriptions
## Common Pitfalls
- The migration publish tag is ___SINGLE_BACKTICK___cashier-migrations___SINGLE_BACKTICK___, not ___SINGLE_BACKTICK___cashier___SINGLE_BACKTICK___. Running ___SINGLE_BACKTICK___migrate___SINGLE_BACKTICK___ before publishing results in missing columns and tables.
- ___SINGLE_BACKTICK___CASHIER_CURRENCY___SINGLE_BACKTICK___ must be set explicitly. It defaults to USD, which silently breaks non-US apps.
- The Stripe CLI generates its own webhook signing secret. It is different from the Dashboard endpoint secret. Using the wrong one causes signature verification failures.
- The webhook route must be excluded from CSRF verification using your configured ___SINGLE_BACKTICK___cashier.path___SINGLE_BACKTICK___. If you change ___SINGLE_BACKTICK___CASHIER_PATH___SINGLE_BACKTICK___ from ___SINGLE_BACKTICK___stripe___SINGLE_BACKTICK___ to ___SINGLE_BACKTICK___billing___SINGLE_BACKTICK___, exclude ___SINGLE_BACKTICK___billing/*___SINGLE_BACKTICK___, not ___SINGLE_BACKTICK___stripe/*___SINGLE_BACKTICK___.
- ___SINGLE_BACKTICK___canceled()___SINGLE_BACKTICK___ returns true as soon as ___SINGLE_BACKTICK___cancel()___SINGLE_BACKTICK___ is called, but the user still has access during the grace period. Use ___SINGLE_BACKTICK___ended()___SINGLE_BACKTICK___ to confirm access is fully revoked.
- ___SINGLE_BACKTICK___subscribed()___SINGLE_BACKTICK___ returns true during the grace period even though the subscription is canceled.
- ___SINGLE_BACKTICK___subscribed()___SINGLE_BACKTICK___ returns false for ___SINGLE_BACKTICK___incomplete___SINGLE_BACKTICK___ and ___SINGLE_BACKTICK___past_due___SINGLE_BACKTICK___ subscriptions by default.
- Prices cannot be swapped and quantity cannot be updated while a subscription has an incomplete payment.
- When extending ___SINGLE_BACKTICK___WebhookController___SINGLE_BACKTICK___, call ___SINGLE_BACKTICK___Cashier::ignoreRoutes()___SINGLE_BACKTICK___ in a service provider and re-register both ___SINGLE_BACKTICK___cashier.payment___SINGLE_BACKTICK___ and ___SINGLE_BACKTICK___cashier.webhook___SINGLE_BACKTICK___ under the configured ___SINGLE_BACKTICK___cashier.path___SINGLE_BACKTICK___.
- Use ___SINGLE_BACKTICK___Cashier::useCustomerModel()___SINGLE_BACKTICK___ in a service provider to set a custom billable model. There is no ___SINGLE_BACKTICK___CASHIER_MODEL___SINGLE_BACKTICK___ env var.
- ___SINGLE_BACKTICK___trial_ends_at___SINGLE_BACKTICK___ is a local database column synced via webhooks. It will be stale if webhooks are not configured in production.
- In MySQL, the ___SINGLE_BACKTICK___stripe_id___SINGLE_BACKTICK___ column must use ___SINGLE_BACKTICK___utf8_bin___SINGLE_BACKTICK___ collation to avoid case-sensitivity issues.
- ___SINGLE_BACKTICK___noProrate()___SINGLE_BACKTICK___ has no effect when combined with ___SINGLE_BACKTICK___swapAndInvoice()___SINGLE_BACKTICK___. That method always prorates.
- Methods like ___SINGLE_BACKTICK___withPromotionCode()___SINGLE_BACKTICK___ require the Stripe API ID such as ___SINGLE_BACKTICK___promo_xxxx___SINGLE_BACKTICK___, not the customer-facing code. Use ___SINGLE_BACKTICK___findPromotionCode()___SINGLE_BACKTICK___ to resolve a code to its ID.
- Always use ___SINGLE_BACKTICK___search-docs___SINGLE_BACKTICK___ for the latest Cashier documentation rather than relying on this skill alone.
@@ -1,64 +0,0 @@
<?php if (isset($component)) { $__componentOriginal81a506f898233b9e7d58286e6bea3c18 = $component; } ?>
<?php if (isset($attributes)) { $__attributesOriginal81a506f898233b9e7d58286e6bea3c18 = $attributes; } ?>
<?php $component = Illuminate\View\AnonymousComponent::resolve(['view' => 'f4ac99e09542ff494432bc959d4fee61::app','data' => ['title' => __('Warehouses')]] + (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag ? $attributes->all() : [])); ?>
<?php $component->withName('layouts::app'); ?>
<?php if ($component->shouldRender()): ?>
<?php $__env->startComponent($component->resolveView(), $component->data()); ?>
<?php if (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag): ?>
<?php $attributes = $attributes->except(\Illuminate\View\AnonymousComponent::ignoredParameterNames()); ?>
<?php endif; ?>
<?php $component->withAttributes(['title' => \Illuminate\View\Compilers\BladeCompiler::sanitizeComponentAttribute(__('Warehouses'))]); ?>
<?php \Livewire\Features\SupportCompiledWireKeys\SupportCompiledWireKeys::processComponentKey($component); ?>
<div class="space-y-6">
<?php if (isset($component)) { $__componentOriginal9c6e3f23e2ced4034a039852a77e1e96 = $component; } ?>
<?php if (isset($attributes)) { $__attributesOriginal9c6e3f23e2ced4034a039852a77e1e96 = $attributes; } ?>
<?php $component = Illuminate\View\AnonymousComponent::resolve(['view' => 'components.wms.page-hero','data' => ['eyebrow' => 'Administration','title' => 'Warehouses','description' => 'Create and manage warehouse records, tenant ownership and operational locations.','icon' => 'fa-solid fa-warehouse']] + (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag ? $attributes->all() : [])); ?>
<?php $component->withName('wms.page-hero'); ?>
<?php if ($component->shouldRender()): ?>
<?php $__env->startComponent($component->resolveView(), $component->data()); ?>
<?php if (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag): ?>
<?php $attributes = $attributes->except(\Illuminate\View\AnonymousComponent::ignoredParameterNames()); ?>
<?php endif; ?>
<?php $component->withAttributes(['eyebrow' => 'Administration','title' => 'Warehouses','description' => 'Create and manage warehouse records, tenant ownership and operational locations.','icon' => 'fa-solid fa-warehouse']); ?>
<?php \Livewire\Features\SupportCompiledWireKeys\SupportCompiledWireKeys::processComponentKey($component); ?>
<?php echo $__env->renderComponent(); ?>
<?php endif; ?>
<?php if (isset($__attributesOriginal9c6e3f23e2ced4034a039852a77e1e96)): ?>
<?php $attributes = $__attributesOriginal9c6e3f23e2ced4034a039852a77e1e96; ?>
<?php unset($__attributesOriginal9c6e3f23e2ced4034a039852a77e1e96); ?>
<?php endif; ?>
<?php if (isset($__componentOriginal9c6e3f23e2ced4034a039852a77e1e96)): ?>
<?php $component = $__componentOriginal9c6e3f23e2ced4034a039852a77e1e96; ?>
<?php unset($__componentOriginal9c6e3f23e2ced4034a039852a77e1e96); ?>
<?php endif; ?>
<div class="rounded-3xl bg-white p-6 shadow-sm ring-1 ring-zinc-200 dark:bg-zinc-900 dark:ring-zinc-800">
<h2 class="text-lg font-bold text-zinc-900 dark:text-white">Create warehouse</h2>
<form method="POST" action="<?php echo e(route('warehouses.store')); ?>" class="mt-5 grid gap-4 md:grid-cols-4">
<?php echo csrf_field(); ?>
<input name="code" placeholder="Code" class="rounded-xl border-zinc-300 dark:border-zinc-700 dark:bg-zinc-950" required>
<input name="name" placeholder="Warehouse name" class="rounded-xl border-zinc-300 dark:border-zinc-700 dark:bg-zinc-950" required>
<input name="address" placeholder="Address" class="rounded-xl border-zinc-300 dark:border-zinc-700 dark:bg-zinc-950">
<button class="rounded-xl bg-zinc-900 px-4 py-2 font-semibold text-white dark:bg-white dark:text-zinc-900">Create</button>
</form>
</div>
<div class="grid gap-4 md:grid-cols-2 xl:grid-cols-3">
<?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if BLOCK]><![endif]--><?php \Livewire\Features\SupportCompiledWireKeys\SupportCompiledWireKeys::openLoop(); ?><?php endif; ?><?php $__currentLoopData = $warehouses; $__env->addLoop($__currentLoopData); foreach($__currentLoopData as $warehouse): $__env->incrementLoopIndices(); $loop = $__env->getLastLoop(); ?><?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><?php \Livewire\Features\SupportCompiledWireKeys\SupportCompiledWireKeys::startLoopIteration(); ?><?php endif; ?>
<article class="rounded-2xl border border-zinc-200 bg-white p-5 shadow-sm dark:border-zinc-800 dark:bg-zinc-900"><p class="text-sm text-cyan-600"><?php echo e($warehouse->code); ?></p><h2 class="mt-1 text-xl font-bold"><?php echo e($warehouse->name); ?></h2><p class="mt-3 text-sm text-zinc-500"><?php echo e($warehouse->validation_rules_count); ?> rules</p></article>
<?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><?php \Livewire\Features\SupportCompiledWireKeys\SupportCompiledWireKeys::endLoop(); ?><?php endif; ?><?php endforeach; $__env->popLoop(); $loop = $__env->getLastLoop(); ?><?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if ENDBLOCK]><![endif]--><?php \Livewire\Features\SupportCompiledWireKeys\SupportCompiledWireKeys::closeLoop(); ?><?php endif; ?>
</div>
<?php echo e($warehouses->links()); ?>
</div>
<?php echo $__env->renderComponent(); ?>
<?php endif; ?>
<?php if (isset($__attributesOriginal81a506f898233b9e7d58286e6bea3c18)): ?>
<?php $attributes = $__attributesOriginal81a506f898233b9e7d58286e6bea3c18; ?>
<?php unset($__attributesOriginal81a506f898233b9e7d58286e6bea3c18); ?>
<?php endif; ?>
<?php if (isset($__componentOriginal81a506f898233b9e7d58286e6bea3c18)): ?>
<?php $component = $__componentOriginal81a506f898233b9e7d58286e6bea3c18; ?>
<?php unset($__componentOriginal81a506f898233b9e7d58286e6bea3c18); ?>
<?php endif; ?>
<?php /**PATH /Users/mag/Sites/WMS/Core/Modules/Warehouse/Providers/../resources/views/warehouses/index.blade.php ENDPATH**/ ?>
@@ -1,15 +0,0 @@
# PHP
@php
/** @var \Laravel\Boost\Install\GuidelineAssist $assist */
@endphp
- Always use curly braces for control structures, even for single-line bodies.
- Use PHP 8 constructor property promotion: ___SINGLE_BACKTICK___public function __construct(public GitHub $github) { }___SINGLE_BACKTICK___. Do not leave empty zero-parameter ___SINGLE_BACKTICK_____construct()___SINGLE_BACKTICK___ methods unless the constructor is private.
- Use explicit return type declarations and type hints for all method parameters: ___SINGLE_BACKTICK___function isAccessible(User $user, ?string $path = null): bool___SINGLE_BACKTICK___
@if(empty($assist->enums()) || !preg_match('/[A-Z]{3,8}/', $assist->enumContents()))
- Use TitleCase for Enum keys: ___SINGLE_BACKTICK___FavoritePerson___SINGLE_BACKTICK___, ___SINGLE_BACKTICK___BestLake___SINGLE_BACKTICK___, ___SINGLE_BACKTICK___Monthly___SINGLE_BACKTICK___.
@else
- Follow existing application Enum naming conventions.
@endif
- Prefer PHPDoc blocks over inline comments. Only add inline comments for exceptionally complex logic.
- Use array shape type definitions in PHPDoc blocks.
@@ -1,147 +0,0 @@
<?php if (isset($component)) { $__componentOriginal81a506f898233b9e7d58286e6bea3c18 = $component; } ?>
<?php if (isset($attributes)) { $__attributesOriginal81a506f898233b9e7d58286e6bea3c18 = $attributes; } ?>
<?php $component = Illuminate\View\AnonymousComponent::resolve(['view' => 'f4ac99e09542ff494432bc959d4fee61::app','data' => ['title' => __('Sentinel Integration')]] + (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag ? $attributes->all() : [])); ?>
<?php $component->withName('layouts::app'); ?>
<?php if ($component->shouldRender()): ?>
<?php $__env->startComponent($component->resolveView(), $component->data()); ?>
<?php if (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag): ?>
<?php $attributes = $attributes->except(\Illuminate\View\AnonymousComponent::ignoredParameterNames()); ?>
<?php endif; ?>
<?php $component->withAttributes(['title' => \Illuminate\View\Compilers\BladeCompiler::sanitizeComponentAttribute(__('Sentinel Integration'))]); ?>
<?php \Livewire\Features\SupportCompiledWireKeys\SupportCompiledWireKeys::processComponentKey($component); ?>
<div class="container-fluid py-4 module-page module-sentinel-integration">
<div class="row g-4">
<div class="col-12">
<?php if (isset($component)) { $__componentOriginal9c6e3f23e2ced4034a039852a77e1e96 = $component; } ?>
<?php if (isset($attributes)) { $__attributesOriginal9c6e3f23e2ced4034a039852a77e1e96 = $attributes; } ?>
<?php $component = Illuminate\View\AnonymousComponent::resolve(['view' => 'components.wms.page-hero','data' => ['eyebrow' => 'Operations','title' => 'Sentinel Integration','description' => 'Track Sentinel API activity, inbound receiver events, and interface status.','icon' => 'fa-solid fa-satellite-dish']] + (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag ? $attributes->all() : [])); ?>
<?php $component->withName('wms.page-hero'); ?>
<?php if ($component->shouldRender()): ?>
<?php $__env->startComponent($component->resolveView(), $component->data()); ?>
<?php if (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag): ?>
<?php $attributes = $attributes->except(\Illuminate\View\AnonymousComponent::ignoredParameterNames()); ?>
<?php endif; ?>
<?php $component->withAttributes(['eyebrow' => 'Operations','title' => 'Sentinel Integration','description' => 'Track Sentinel API activity, inbound receiver events, and interface status.','icon' => 'fa-solid fa-satellite-dish']); ?>
<?php \Livewire\Features\SupportCompiledWireKeys\SupportCompiledWireKeys::processComponentKey($component); ?>
<?php echo $__env->renderComponent(); ?>
<?php endif; ?>
<?php if (isset($__attributesOriginal9c6e3f23e2ced4034a039852a77e1e96)): ?>
<?php $attributes = $__attributesOriginal9c6e3f23e2ced4034a039852a77e1e96; ?>
<?php unset($__attributesOriginal9c6e3f23e2ced4034a039852a77e1e96); ?>
<?php endif; ?>
<?php if (isset($__componentOriginal9c6e3f23e2ced4034a039852a77e1e96)): ?>
<?php $component = $__componentOriginal9c6e3f23e2ced4034a039852a77e1e96; ?>
<?php unset($__componentOriginal9c6e3f23e2ced4034a039852a77e1e96); ?>
<?php endif; ?>
</div>
<div class="col-md-6 col-xl-3">
<div class="card h-100 border-0 shadow-sm module-metric-card">
<div class="card-body">
<div class="small text-uppercase text-muted fw-semibold mb-2">01</div>
<h3 class="h6 mb-2">Sentinel Receiver</h3>
<p class="small text-muted mb-0">Placeholder area for sentinel receiver.</p>
</div>
</div>
</div>
<div class="col-md-6 col-xl-3">
<div class="card h-100 border-0 shadow-sm module-metric-card">
<div class="card-body">
<div class="small text-uppercase text-muted fw-semibold mb-2">02</div>
<h3 class="h6 mb-2">API Activity</h3>
<p class="small text-muted mb-0">Placeholder area for api activity.</p>
</div>
</div>
</div>
<div class="col-md-6 col-xl-3">
<div class="card h-100 border-0 shadow-sm module-metric-card">
<div class="card-body">
<div class="small text-uppercase text-muted fw-semibold mb-2">03</div>
<h3 class="h6 mb-2">Interface Health</h3>
<p class="small text-muted mb-0">Placeholder area for interface health.</p>
</div>
</div>
</div>
<div class="col-md-6 col-xl-3">
<div class="card h-100 border-0 shadow-sm module-metric-card">
<div class="card-body">
<div class="small text-uppercase text-muted fw-semibold mb-2">04</div>
<h3 class="h6 mb-2">Payload Archive</h3>
<p class="small text-muted mb-0">Placeholder area for payload archive.</p>
</div>
</div>
</div>
<div class="col-12">
<section class="card border-0 shadow-sm">
<div class="card-header bg-white border-bottom">
<div class="d-flex flex-column flex-md-row justify-content-between gap-2">
<div>
<h2 class="h5 mb-1">Sentinel Integration workbench</h2>
<p class="small text-muted mb-0">Sample table layout ready to wire into controllers, queries, DataTables, or Livewire.</p>
</div>
<div class="d-flex gap-2">
<button type="button" class="btn btn-outline-secondary btn-sm">Export</button>
<button type="button" class="btn btn-primary btn-sm">Create</button>
</div>
</div>
</div>
<div class="card-body">
<div class="table-responsive">
<table class="table table-hover align-middle mb-0">
<thead class="table-light">
<tr>
<th>Endpoint</th>
<th>Reference</th>
<th>HTTP</th>
<th class="text-end">Action</th>
</tr>
</thead>
<tbody>
<tr>
<td>Sentinel Receiver</td>
<td>Sample 1</td>
<td><span class="badge bg-success-subtle text-success border border-success-subtle">Active</span></td>
<td class="text-end"><a href="#" class="btn btn-sm btn-outline-primary">Open</a></td>
</tr>
<tr>
<td>API Activity</td>
<td>Sample 2</td>
<td><span class="badge bg-success-subtle text-success border border-success-subtle">Active</span></td>
<td class="text-end"><a href="#" class="btn btn-sm btn-outline-primary">Open</a></td>
</tr>
<tr>
<td>Interface Health</td>
<td>Sample 3</td>
<td><span class="badge bg-success-subtle text-success border border-success-subtle">Active</span></td>
<td class="text-end"><a href="#" class="btn btn-sm btn-outline-primary">Open</a></td>
</tr>
<tr>
<td>Payload Archive</td>
<td>Sample 4</td>
<td><span class="badge bg-success-subtle text-success border border-success-subtle">Active</span></td>
<td class="text-end"><a href="#" class="btn btn-sm btn-outline-primary">Open</a></td>
</tr>
</tbody>
</table>
</div>
</div>
</section>
</div>
</div>
</div>
<?php echo $__env->renderComponent(); ?>
<?php endif; ?>
<?php if (isset($__attributesOriginal81a506f898233b9e7d58286e6bea3c18)): ?>
<?php $attributes = $__attributesOriginal81a506f898233b9e7d58286e6bea3c18; ?>
<?php unset($__attributesOriginal81a506f898233b9e7d58286e6bea3c18); ?>
<?php endif; ?>
<?php if (isset($__componentOriginal81a506f898233b9e7d58286e6bea3c18)): ?>
<?php $component = $__componentOriginal81a506f898233b9e7d58286e6bea3c18; ?>
<?php unset($__componentOriginal81a506f898233b9e7d58286e6bea3c18); ?>
<?php endif; ?>
<?php /**PATH /Users/mag/Sites/WMS/Core/Modules/SentinelIntegration/Providers/../Resources/views/index.blade.php ENDPATH**/ ?>
@@ -1,147 +0,0 @@
<?php if (isset($component)) { $__componentOriginal81a506f898233b9e7d58286e6bea3c18 = $component; } ?>
<?php if (isset($attributes)) { $__attributesOriginal81a506f898233b9e7d58286e6bea3c18 = $attributes; } ?>
<?php $component = Illuminate\View\AnonymousComponent::resolve(['view' => 'f4ac99e09542ff494432bc959d4fee61::app','data' => ['title' => __('Analytics')]] + (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag ? $attributes->all() : [])); ?>
<?php $component->withName('layouts::app'); ?>
<?php if ($component->shouldRender()): ?>
<?php $__env->startComponent($component->resolveView(), $component->data()); ?>
<?php if (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag): ?>
<?php $attributes = $attributes->except(\Illuminate\View\AnonymousComponent::ignoredParameterNames()); ?>
<?php endif; ?>
<?php $component->withAttributes(['title' => \Illuminate\View\Compilers\BladeCompiler::sanitizeComponentAttribute(__('Analytics'))]); ?>
<?php \Livewire\Features\SupportCompiledWireKeys\SupportCompiledWireKeys::processComponentKey($component); ?>
<div class="container-fluid py-4 module-page module-analytics">
<div class="row g-4">
<div class="col-12">
<?php if (isset($component)) { $__componentOriginal9c6e3f23e2ced4034a039852a77e1e96 = $component; } ?>
<?php if (isset($attributes)) { $__attributesOriginal9c6e3f23e2ced4034a039852a77e1e96 = $attributes; } ?>
<?php $component = Illuminate\View\AnonymousComponent::resolve(['view' => 'components.wms.page-hero','data' => ['eyebrow' => 'Operations','title' => 'Analytics','description' => 'Display KPIs, warehouse performance trends, executive summaries, and OTTC analysis.','icon' => 'fa-solid fa-chart-line']] + (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag ? $attributes->all() : [])); ?>
<?php $component->withName('wms.page-hero'); ?>
<?php if ($component->shouldRender()): ?>
<?php $__env->startComponent($component->resolveView(), $component->data()); ?>
<?php if (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag): ?>
<?php $attributes = $attributes->except(\Illuminate\View\AnonymousComponent::ignoredParameterNames()); ?>
<?php endif; ?>
<?php $component->withAttributes(['eyebrow' => 'Operations','title' => 'Analytics','description' => 'Display KPIs, warehouse performance trends, executive summaries, and OTTC analysis.','icon' => 'fa-solid fa-chart-line']); ?>
<?php \Livewire\Features\SupportCompiledWireKeys\SupportCompiledWireKeys::processComponentKey($component); ?>
<?php echo $__env->renderComponent(); ?>
<?php endif; ?>
<?php if (isset($__attributesOriginal9c6e3f23e2ced4034a039852a77e1e96)): ?>
<?php $attributes = $__attributesOriginal9c6e3f23e2ced4034a039852a77e1e96; ?>
<?php unset($__attributesOriginal9c6e3f23e2ced4034a039852a77e1e96); ?>
<?php endif; ?>
<?php if (isset($__componentOriginal9c6e3f23e2ced4034a039852a77e1e96)): ?>
<?php $component = $__componentOriginal9c6e3f23e2ced4034a039852a77e1e96; ?>
<?php unset($__componentOriginal9c6e3f23e2ced4034a039852a77e1e96); ?>
<?php endif; ?>
</div>
<div class="col-md-6 col-xl-3">
<div class="card h-100 border-0 shadow-sm module-metric-card">
<div class="card-body">
<div class="small text-uppercase text-muted fw-semibold mb-2">01</div>
<h3 class="h6 mb-2">KPI1 Bar</h3>
<p class="small text-muted mb-0">Placeholder area for kpi1 bar.</p>
</div>
</div>
</div>
<div class="col-md-6 col-xl-3">
<div class="card h-100 border-0 shadow-sm module-metric-card">
<div class="card-body">
<div class="small text-uppercase text-muted fw-semibold mb-2">02</div>
<h3 class="h6 mb-2">KPI1 Line</h3>
<p class="small text-muted mb-0">Placeholder area for kpi1 line.</p>
</div>
</div>
</div>
<div class="col-md-6 col-xl-3">
<div class="card h-100 border-0 shadow-sm module-metric-card">
<div class="card-body">
<div class="small text-uppercase text-muted fw-semibold mb-2">03</div>
<h3 class="h6 mb-2">OTTC</h3>
<p class="small text-muted mb-0">Placeholder area for ottc.</p>
</div>
</div>
</div>
<div class="col-md-6 col-xl-3">
<div class="card h-100 border-0 shadow-sm module-metric-card">
<div class="card-body">
<div class="small text-uppercase text-muted fw-semibold mb-2">04</div>
<h3 class="h6 mb-2">Warehouse Performance</h3>
<p class="small text-muted mb-0">Placeholder area for warehouse performance.</p>
</div>
</div>
</div>
<div class="col-12">
<section class="card border-0 shadow-sm">
<div class="card-header bg-white border-bottom">
<div class="d-flex flex-column flex-md-row justify-content-between gap-2">
<div>
<h2 class="h5 mb-1">Analytics workbench</h2>
<p class="small text-muted mb-0">Sample table layout ready to wire into controllers, queries, DataTables, or Livewire.</p>
</div>
<div class="d-flex gap-2">
<button type="button" class="btn btn-outline-secondary btn-sm">Export</button>
<button type="button" class="btn btn-primary btn-sm">Create</button>
</div>
</div>
</div>
<div class="card-body">
<div class="table-responsive">
<table class="table table-hover align-middle mb-0">
<thead class="table-light">
<tr>
<th>Metric</th>
<th>Today</th>
<th>Week</th>
<th class="text-end">Action</th>
</tr>
</thead>
<tbody>
<tr>
<td>KPI1 Bar</td>
<td>Sample 1</td>
<td><span class="badge bg-success-subtle text-success border border-success-subtle">Active</span></td>
<td class="text-end"><a href="#" class="btn btn-sm btn-outline-primary">Open</a></td>
</tr>
<tr>
<td>KPI1 Line</td>
<td>Sample 2</td>
<td><span class="badge bg-success-subtle text-success border border-success-subtle">Active</span></td>
<td class="text-end"><a href="#" class="btn btn-sm btn-outline-primary">Open</a></td>
</tr>
<tr>
<td>OTTC</td>
<td>Sample 3</td>
<td><span class="badge bg-success-subtle text-success border border-success-subtle">Active</span></td>
<td class="text-end"><a href="#" class="btn btn-sm btn-outline-primary">Open</a></td>
</tr>
<tr>
<td>Warehouse Performance</td>
<td>Sample 4</td>
<td><span class="badge bg-success-subtle text-success border border-success-subtle">Active</span></td>
<td class="text-end"><a href="#" class="btn btn-sm btn-outline-primary">Open</a></td>
</tr>
</tbody>
</table>
</div>
</div>
</section>
</div>
</div>
</div>
<?php echo $__env->renderComponent(); ?>
<?php endif; ?>
<?php if (isset($__attributesOriginal81a506f898233b9e7d58286e6bea3c18)): ?>
<?php $attributes = $__attributesOriginal81a506f898233b9e7d58286e6bea3c18; ?>
<?php unset($__attributesOriginal81a506f898233b9e7d58286e6bea3c18); ?>
<?php endif; ?>
<?php if (isset($__componentOriginal81a506f898233b9e7d58286e6bea3c18)): ?>
<?php $component = $__componentOriginal81a506f898233b9e7d58286e6bea3c18; ?>
<?php unset($__componentOriginal81a506f898233b9e7d58286e6bea3c18); ?>
<?php endif; ?>
<?php /**PATH /Users/mag/Sites/WMS/Core/Modules/Analytics/Providers/../Resources/views/index.blade.php ENDPATH**/ ?>
@@ -1,147 +0,0 @@
<?php if (isset($component)) { $__componentOriginal81a506f898233b9e7d58286e6bea3c18 = $component; } ?>
<?php if (isset($attributes)) { $__attributesOriginal81a506f898233b9e7d58286e6bea3c18 = $attributes; } ?>
<?php $component = Illuminate\View\AnonymousComponent::resolve(['view' => 'f4ac99e09542ff494432bc959d4fee61::app','data' => ['title' => __('Inventory Management')]] + (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag ? $attributes->all() : [])); ?>
<?php $component->withName('layouts::app'); ?>
<?php if ($component->shouldRender()): ?>
<?php $__env->startComponent($component->resolveView(), $component->data()); ?>
<?php if (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag): ?>
<?php $attributes = $attributes->except(\Illuminate\View\AnonymousComponent::ignoredParameterNames()); ?>
<?php endif; ?>
<?php $component->withAttributes(['title' => \Illuminate\View\Compilers\BladeCompiler::sanitizeComponentAttribute(__('Inventory Management'))]); ?>
<?php \Livewire\Features\SupportCompiledWireKeys\SupportCompiledWireKeys::processComponentKey($component); ?>
<div class="container-fluid py-4 module-page module-inventory-management">
<div class="row g-4">
<div class="col-12">
<?php if (isset($component)) { $__componentOriginal9c6e3f23e2ced4034a039852a77e1e96 = $component; } ?>
<?php if (isset($attributes)) { $__attributesOriginal9c6e3f23e2ced4034a039852a77e1e96 = $attributes; } ?>
<?php $component = Illuminate\View\AnonymousComponent::resolve(['view' => 'components.wms.page-hero','data' => ['eyebrow' => 'Operations','title' => 'Inventory Management','description' => 'Track inventory movement, stock visibility, pallet quantities, and product availability.','icon' => 'fa-solid fa-boxes-stacked']] + (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag ? $attributes->all() : [])); ?>
<?php $component->withName('wms.page-hero'); ?>
<?php if ($component->shouldRender()): ?>
<?php $__env->startComponent($component->resolveView(), $component->data()); ?>
<?php if (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag): ?>
<?php $attributes = $attributes->except(\Illuminate\View\AnonymousComponent::ignoredParameterNames()); ?>
<?php endif; ?>
<?php $component->withAttributes(['eyebrow' => 'Operations','title' => 'Inventory Management','description' => 'Track inventory movement, stock visibility, pallet quantities, and product availability.','icon' => 'fa-solid fa-boxes-stacked']); ?>
<?php \Livewire\Features\SupportCompiledWireKeys\SupportCompiledWireKeys::processComponentKey($component); ?>
<?php echo $__env->renderComponent(); ?>
<?php endif; ?>
<?php if (isset($__attributesOriginal9c6e3f23e2ced4034a039852a77e1e96)): ?>
<?php $attributes = $__attributesOriginal9c6e3f23e2ced4034a039852a77e1e96; ?>
<?php unset($__attributesOriginal9c6e3f23e2ced4034a039852a77e1e96); ?>
<?php endif; ?>
<?php if (isset($__componentOriginal9c6e3f23e2ced4034a039852a77e1e96)): ?>
<?php $component = $__componentOriginal9c6e3f23e2ced4034a039852a77e1e96; ?>
<?php unset($__componentOriginal9c6e3f23e2ced4034a039852a77e1e96); ?>
<?php endif; ?>
</div>
<div class="col-md-6 col-xl-3">
<div class="card h-100 border-0 shadow-sm module-metric-card">
<div class="card-body">
<div class="small text-uppercase text-muted fw-semibold mb-2">01</div>
<h3 class="h6 mb-2">Stock Overview</h3>
<p class="small text-muted mb-0">Placeholder area for stock overview.</p>
</div>
</div>
</div>
<div class="col-md-6 col-xl-3">
<div class="card h-100 border-0 shadow-sm module-metric-card">
<div class="card-body">
<div class="small text-uppercase text-muted fw-semibold mb-2">02</div>
<h3 class="h6 mb-2">Pallet Quantity Rules</h3>
<p class="small text-muted mb-0">Placeholder area for pallet quantity rules.</p>
</div>
</div>
</div>
<div class="col-md-6 col-xl-3">
<div class="card h-100 border-0 shadow-sm module-metric-card">
<div class="card-body">
<div class="small text-uppercase text-muted fw-semibold mb-2">03</div>
<h3 class="h6 mb-2">Inventory Exceptions</h3>
<p class="small text-muted mb-0">Placeholder area for inventory exceptions.</p>
</div>
</div>
</div>
<div class="col-md-6 col-xl-3">
<div class="card h-100 border-0 shadow-sm module-metric-card">
<div class="card-body">
<div class="small text-uppercase text-muted fw-semibold mb-2">04</div>
<h3 class="h6 mb-2">Product Movement</h3>
<p class="small text-muted mb-0">Placeholder area for product movement.</p>
</div>
</div>
</div>
<div class="col-12">
<section class="card border-0 shadow-sm">
<div class="card-header bg-white border-bottom">
<div class="d-flex flex-column flex-md-row justify-content-between gap-2">
<div>
<h2 class="h5 mb-1">Inventory Management workbench</h2>
<p class="small text-muted mb-0">Sample table layout ready to wire into controllers, queries, DataTables, or Livewire.</p>
</div>
<div class="d-flex gap-2">
<button type="button" class="btn btn-outline-secondary btn-sm">Export</button>
<button type="button" class="btn btn-primary btn-sm">Create</button>
</div>
</div>
</div>
<div class="card-body">
<div class="table-responsive">
<table class="table table-hover align-middle mb-0">
<thead class="table-light">
<tr>
<th>Part Number</th>
<th>Description</th>
<th>Pallet Qty</th>
<th class="text-end">Action</th>
</tr>
</thead>
<tbody>
<tr>
<td>Stock Overview</td>
<td>Sample 1</td>
<td><span class="badge bg-success-subtle text-success border border-success-subtle">Active</span></td>
<td class="text-end"><a href="#" class="btn btn-sm btn-outline-primary">Open</a></td>
</tr>
<tr>
<td>Pallet Quantity Rules</td>
<td>Sample 2</td>
<td><span class="badge bg-success-subtle text-success border border-success-subtle">Active</span></td>
<td class="text-end"><a href="#" class="btn btn-sm btn-outline-primary">Open</a></td>
</tr>
<tr>
<td>Inventory Exceptions</td>
<td>Sample 3</td>
<td><span class="badge bg-success-subtle text-success border border-success-subtle">Active</span></td>
<td class="text-end"><a href="#" class="btn btn-sm btn-outline-primary">Open</a></td>
</tr>
<tr>
<td>Product Movement</td>
<td>Sample 4</td>
<td><span class="badge bg-success-subtle text-success border border-success-subtle">Active</span></td>
<td class="text-end"><a href="#" class="btn btn-sm btn-outline-primary">Open</a></td>
</tr>
</tbody>
</table>
</div>
</div>
</section>
</div>
</div>
</div>
<?php echo $__env->renderComponent(); ?>
<?php endif; ?>
<?php if (isset($__attributesOriginal81a506f898233b9e7d58286e6bea3c18)): ?>
<?php $attributes = $__attributesOriginal81a506f898233b9e7d58286e6bea3c18; ?>
<?php unset($__attributesOriginal81a506f898233b9e7d58286e6bea3c18); ?>
<?php endif; ?>
<?php if (isset($__componentOriginal81a506f898233b9e7d58286e6bea3c18)): ?>
<?php $component = $__componentOriginal81a506f898233b9e7d58286e6bea3c18; ?>
<?php unset($__componentOriginal81a506f898233b9e7d58286e6bea3c18); ?>
<?php endif; ?>
<?php /**PATH /Users/mag/Sites/WMS/Core/Modules/InventoryManagement/Providers/../Resources/views/index.blade.php ENDPATH**/ ?>