diff --git a/.gitignore b/.gitignore index 4ebba4c6..f729da04 100644 --- a/.gitignore +++ b/.gitignore @@ -34,3 +34,5 @@ composer.lock **/.DS_Store /coverage/ /.scannerwork/ +/storage/framework/ +/storage/debugbar/ diff --git a/storage/framework/views/00bcf6a1c6a167e1a931476119802e49.php b/storage/framework/views/00bcf6a1c6a167e1a931476119802e49.php deleted file mode 100755 index 90928811..00000000 --- a/storage/framework/views/00bcf6a1c6a167e1a931476119802e49.php +++ /dev/null @@ -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: - - - -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'), - - - - -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: - - - -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(), - - - - -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___: - - - -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(), - ]), - ]), - - - - -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: - - - -use Filament\Forms\Components\Repeater; - -Repeater::make('qualifications') - ->relationship() - ->schema([ - TextInput::make('institution') - ->required(), - TextInput::make('qualification') - ->required(), - ]) - ->columns(2), - - - - -Use ___SINGLE_BACKTICK___state()___SINGLE_BACKTICK___ with a ___SINGLE_BACKTICK___Closure___SINGLE_BACKTICK___ to compute derived column values: - - - -use Filament\Tables\Columns\TextColumn; - -TextColumn::make('full_name') - ->state(fn (User $record): string => "{$record->first_name} {$record->last_name}"), - - - - -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: - - - -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')), - - - - -Actions are buttons that encapsulate optional modal forms and behavior: - - - -use Filament\Actions\Action; - -Action::make('updateEmail') - ->schema([ - TextInput::make('email') - ->email() - ->required(), - ]) - ->action(fn (array $data, User $record) => $record->update($data)), - - - - -### 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). - - - -use function Pest\Livewire\livewire; - -livewire(ListUsers::class) - ->assertCanSeeTableRecords($users) - ->searchTable($users->first()->name) - ->assertCanSeeTableRecords($users->take(1)) - ->assertCanNotSeeTableRecords($users->skip(1)); - - - - -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', -]); - - - - -livewire(EditUser::class, ['record' => $user->id]) - ->fillForm(['name' => 'Updated']) - ->call('save') - ->assertNotified() - ->assertHasNoFormErrors(); - -assertDatabaseHas(User::class, [ - 'id' => $user->id, - 'name' => 'Updated', -]); - - - - -livewire(CreateUser::class) - ->fillForm([ - 'name' => null, - 'email' => 'invalid-email', - ]) - ->call('create') - ->assertHasFormErrors([ - 'name' => 'required', - 'email' => 'email', - ]) - ->assertNotNotified(); - - - - -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: - - - -use Filament\Actions\Testing\TestAction; - -livewire(ListUsers::class) - ->callAction(TestAction::make('promote')->table($user), [ - 'role' => 'admin', - ]) - ->assertNotified(); - - - - -### 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 - \ No newline at end of file diff --git a/storage/framework/views/0671c1e4ad9ba3a0237dfc6bda5640d5.php b/storage/framework/views/0671c1e4ad9ba3a0237dfc6bda5640d5.php deleted file mode 100755 index c506b6b7..00000000 --- a/storage/framework/views/0671c1e4ad9ba3a0237dfc6bda5640d5.php +++ /dev/null @@ -1,18 +0,0 @@ - - - - - <?php echo e(filled($title ?? null) ? $title.' - '.config('app.name', 'Laravel') : config('app.name', 'Laravel')); ?> - - - - - - - -fonts(); ?> - - -fluxAppearance(); ?> - - \ No newline at end of file diff --git a/storage/framework/views/0c880df4a076afc425877ebf82522fdc.php b/storage/framework/views/0c880df4a076afc425877ebf82522fdc.php deleted file mode 100755 index 1f531024..00000000 --- a/storage/framework/views/0c880df4a076afc425877ebf82522fdc.php +++ /dev/null @@ -1,38 +0,0 @@ -# Laravel Boost -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. - -- Use ___SINGLE_BACKTICK___browser-logs___SINGLE_BACKTICK___ to read browser logs, errors, and exceptions. Only recent logs are useful, ignore old entries. - - -## 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___. - - -## Artisan -- Run Artisan commands directly via the command line (e.g., ___SINGLE_BACKTICK___artisanCommand('route:list')); ?>___SINGLE_BACKTICK___). Use ___SINGLE_BACKTICK___artisanCommand('list')); ?>___SINGLE_BACKTICK___ to discover available commands and ___SINGLE_BACKTICK___artisanCommand('[command] --help')); ?>___SINGLE_BACKTICK___ to check parameters. -- Inspect routes with ___SINGLE_BACKTICK___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___artisanCommand('config:show app.name')); ?>___SINGLE_BACKTICK___, ___SINGLE_BACKTICK___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. -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. - -- Always use single quotes to prevent shell expansion: ___SINGLE_BACKTICK___artisanCommand("tinker --execute 'Your::code();'")); ?>___SINGLE_BACKTICK___ - - Double quotes for PHP strings inside: ___SINGLE_BACKTICK___artisanCommand("tinker --execute 'User::where(\"active\", true)->count();'")); ?>___SINGLE_BACKTICK___ - - \ No newline at end of file diff --git a/storage/framework/views/0ce2b11ed180c4dc0167f11a527ecb34.php b/storage/framework/views/0ce2b11ed180c4dc0167f11a527ecb34.php deleted file mode 100755 index 76004cba..00000000 --- a/storage/framework/views/0ce2b11ed180c4dc0167f11a527ecb34.php +++ /dev/null @@ -1,86 +0,0 @@ -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(); -?> - - - - - '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); -?> - -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]); - } -} -?> - - -
> - - -
- - - > - - - - - - - \ No newline at end of file diff --git a/storage/framework/views/1080d1ecb37b757a938801fae1a2f203.php b/storage/framework/views/1080d1ecb37b757a938801fae1a2f203.php deleted file mode 100755 index 402a541d..00000000 --- a/storage/framework/views/1080d1ecb37b757a938801fae1a2f203.php +++ /dev/null @@ -1,26 +0,0 @@ - -# Do Things the Laravel Way - -- Use ___SINGLE_BACKTICK___artisanCommand('make:')); ?>___SINGLE_BACKTICK___ commands to create new files (i.e. migrations, controllers, models, etc.). You can list available Artisan commands using ___SINGLE_BACKTICK___artisanCommand('list')); ?>___SINGLE_BACKTICK___ and check their parameters with ___SINGLE_BACKTICK___artisanCommand('[command] --help')); ?>___SINGLE_BACKTICK___. -- If you're creating a generic PHP class, use ___SINGLE_BACKTICK___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___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___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___nodePackageManagerCommand('run build')); ?>___SINGLE_BACKTICK___ or ask the user to run ___SINGLE_BACKTICK___nodePackageManagerCommand('run dev')); ?>___SINGLE_BACKTICK___ or ___SINGLE_BACKTICK___composerCommand('run dev')); ?>___SINGLE_BACKTICK___. - \ No newline at end of file diff --git a/storage/framework/views/110c1c2a55a80ff8b2b4fbed62b1a7d3.php b/storage/framework/views/110c1c2a55a80ff8b2b4fbed62b1a7d3.php deleted file mode 100755 index 94caa800..00000000 --- a/storage/framework/views/110c1c2a55a80ff8b2b4fbed62b1a7d3.php +++ /dev/null @@ -1,245 +0,0 @@ -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(); -?> - - -pluck('icon:variant'); ?> - - '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); -?> - -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; -?> - -ensureRequired('/Users/mag/Sites/WMS/Core/vendor/livewire/flux/src/../stubs/resources/views/flux/with-tooltip.blade.php', $__blaze->compiledPath.'/3e67020b08ceeca960cbb88b2dabc310.php'); ?> - - - $tooltip,'attributes' => $attributes]; ?> - -pushData($__attrs3e67020b08ceeca960cbb88b2dabc310); ?> - - ensureRequired('/Users/mag/Sites/WMS/Core/vendor/livewire/flux/src/../stubs/resources/views/flux/button-or-link.blade.php', $__blaze->compiledPath.'/0ce2b11ed180c4dc0167f11a527ecb34.php'); ?> - - - $attributes->class($classes)->merge($circle ? ['data-circle' => 'true'] : []),'as' => $as,'href' => $href,'dataFluxAvatar' => true,'dataSlot' => 'avatar','dataSize' => e($size)]; ?> - -pushData($__attrs0ce2b11ed180c4dc0167f11a527ecb34); ?> - - - <?php echo e($alt ?? $name); ?> - - $icon, 'variant' => $iconVariant, 'class' => $iconClasses]); ?>ensureRequired('/Users/mag/Sites/WMS/Core/vendor/livewire/flux/src/../stubs/resources/views/flux/icon/index.blade.php', $__blaze->compiledPath.'/50d7e9e02b0a09ef19c84ebdf6a22b69.php'); ?> -pushData(['name' => $icon,'variant' => $iconVariant,'class' => $iconClasses]); ?> - $icon,'variant' => $iconVariant,'class' => $iconClasses], [], ['name', 'variant', 'class'], [], $__this ?? (isset($this) ? $this : null)); ?> -popData(); ?> - - - - - -
attributes->class($badgeClasses)); ?> aria-hidden="true">
- - - - -pushSlots($__slots0ce2b11ed180c4dc0167f11a527ecb34); ?> - 'data-flux-avatar', 'dataSlot' => 'data-slot', 'dataSize' => 'data-size'], $__this ?? (isset($this) ? $this : null)); ?> - - -popData(); ?> - -pushSlots($__slots3e67020b08ceeca960cbb88b2dabc310); ?> - - - -popData(); ?> - \ No newline at end of file diff --git a/storage/framework/views/142242dac4b1bbc6b836edeedb485a72.php b/storage/framework/views/142242dac4b1bbc6b836edeedb485a72.php deleted file mode 100755 index 448d587f..00000000 --- a/storage/framework/views/142242dac4b1bbc6b836edeedb485a72.php +++ /dev/null @@ -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 ---- - -# 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 -artisanCommand('make:livewire create-post')); ?> - - -# Page component (SFC - Full Page in v4) -# Creates: resources/views/pages/⚡create-post.blade.php -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 -artisanCommand('make:livewire create-post --mfc')); ?> - - -# Class-based component (v3 style) -# Creates: app/Livewire/CreatePost.php AND resources/views/livewire/create-post.blade.php -artisanCommand('make:livewire create-post --class')); ?> - - -# With namespace -artisanCommand('make:livewire Posts/CreatePost')); ?> - -___SINGLE_BACKTICK______SINGLE_BACKTICK______SINGLE_BACKTICK___ - -### Converting Between Formats - -Use ___SINGLE_BACKTICK___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___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___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) - \ No newline at end of file diff --git a/storage/framework/views/14e2054308d45dca1e211c6d71dcc3b1.php b/storage/framework/views/14e2054308d45dca1e211c6d71dcc3b1.php deleted file mode 100755 index 485da12f..00000000 --- a/storage/framework/views/14e2054308d45dca1e211c6d71dcc3b1.php +++ /dev/null @@ -1,78 +0,0 @@ - '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); ?> - -
merge(['class' => 'wms-page-hero'])); ?>> -
-

-

- -

- -
- -
- addLoop($__currentLoopData); foreach($__currentLoopData as $stat): $__env->incrementLoopIndices(); $loop = $__env->getLastLoop(); ?> -
- - - - - - - - -
- popLoop(); $loop = $__env->getLastLoop(); ?> - - - - - - isNotEmpty()): ?> - - - -
-
- \ No newline at end of file diff --git a/storage/framework/views/183fe0980b011f848fc9258f878ac458.php b/storage/framework/views/183fe0980b011f848fc9258f878ac458.php deleted file mode 100755 index 33c4ebb3..00000000 --- a/storage/framework/views/183fe0980b011f848fc9258f878ac458.php +++ /dev/null @@ -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 ---- - - -# 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 -artisanCommand('vendor:publish --tag="cashier-migrations"')); ?> - -artisanCommand('migrate')); ?> - -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. - \ No newline at end of file diff --git a/storage/framework/views/210e0d15181f473f1a807d8d0aff57f5.php b/storage/framework/views/210e0d15181f473f1a807d8d0aff57f5.php deleted file mode 100755 index a0c33533..00000000 --- a/storage/framework/views/210e0d15181f473f1a807d8d0aff57f5.php +++ /dev/null @@ -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. - \ No newline at end of file diff --git a/storage/framework/views/21f61e9ca584c89ec770720417f0530b.php b/storage/framework/views/21f61e9ca584c89ec770720417f0530b.php deleted file mode 100755 index ffdfc34b..00000000 --- a/storage/framework/views/21f61e9ca584c89ec770720417f0530b.php +++ /dev/null @@ -1,147 +0,0 @@ - - - 'f4ac99e09542ff494432bc959d4fee61::app','data' => ['title' => __('Security')]] + (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag ? $attributes->all() : [])); ?> -withName('layouts::app'); ?> -shouldRender()): ?> -startComponent($component->resolveView(), $component->data()); ?> - -except(\Illuminate\View\AnonymousComponent::ignoredParameterNames()); ?> - -withAttributes(['title' => \Illuminate\View\Compilers\BladeCompiler::sanitizeComponentAttribute(__('Security'))]); ?> - - -
-
-
- - - '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() : [])); ?> -withName('wms.page-hero'); ?> -shouldRender()): ?> -startComponent($component->resolveView(), $component->data()); ?> - -except(\Illuminate\View\AnonymousComponent::ignoredParameterNames()); ?> - -withAttributes(['eyebrow' => 'Operations','title' => 'Security','description' => 'Control roles, permissions, audit visibility, and protected administration actions.','icon' => 'fa-solid fa-shield-halved']); ?> - - -renderComponent(); ?> - - - - - - - - - -
- -
-
-
-
01
-

Roles

-

Placeholder area for roles.

-
-
-
-
-
-
-
02
-

Permissions

-

Placeholder area for permissions.

-
-
-
-
-
-
-
03
-

Admin Access

-

Placeholder area for admin access.

-
-
-
-
-
-
-
04
-

Security Audit

-

Placeholder area for security audit.

-
-
-
- -
-
-
-
-
-

Security workbench

-

Sample table layout ready to wire into controllers, queries, DataTables, or Livewire.

-
- -
- - -
-
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
AreaPermissionRoleAction
RolesSample 1ActiveOpen
PermissionsSample 2ActiveOpen
Admin AccessSample 3ActiveOpen
Security AuditSample 4ActiveOpen
-
-
-
-
-
-
- renderComponent(); ?> - - - - - - - - - - \ No newline at end of file diff --git a/storage/framework/views/2b3b75ec9892892981b355f1d066492b.blade.php b/storage/framework/views/2b3b75ec9892892981b355f1d066492b.blade.php deleted file mode 100755 index db546e28..00000000 --- a/storage/framework/views/2b3b75ec9892892981b355f1d066492b.blade.php +++ /dev/null @@ -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 diff --git a/storage/framework/views/2d21c7721a51fb6d42304f35ce55c99a.blade.php b/storage/framework/views/2d21c7721a51fb6d42304f35ce55c99a.blade.php deleted file mode 100755 index 2dc9bb23..00000000 --- a/storage/framework/views/2d21c7721a51fb6d42304f35ce55c99a.blade.php +++ /dev/null @@ -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. diff --git a/storage/framework/views/359ae57a7ef889ada0c6818b0f826987.php b/storage/framework/views/359ae57a7ef889ada0c6818b0f826987.php deleted file mode 100755 index 46ae6f9a..00000000 --- a/storage/framework/views/359ae57a7ef889ada0c6818b0f826987.php +++ /dev/null @@ -1,104 +0,0 @@ - - - 'f4ac99e09542ff494432bc959d4fee61::app','data' => ['title' => __('Pricing')]] + (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag ? $attributes->all() : [])); ?> -withName('layouts::app'); ?> -shouldRender()): ?> -startComponent($component->resolveView(), $component->data()); ?> - -except(\Illuminate\View\AnonymousComponent::ignoredParameterNames()); ?> - -withAttributes(['title' => \Illuminate\View\Compilers\BladeCompiler::sanitizeComponentAttribute(__('Pricing'))]); ?> - - -
- - - '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() : [])); ?> -withName('wms.page-hero'); ?> -shouldRender()): ?> -startComponent($component->resolveView(), $component->data()); ?> - -except(\Illuminate\View\AnonymousComponent::ignoredParameterNames()); ?> - -withAttributes(['eyebrow' => 'Platform','title' => 'Pricing','description' => 'Clear platform pricing for Basic, Advanced and Pro access.','icon' => 'fa-solid fa-tags']); ?> - - -renderComponent(); ?> - - - - - - - - - -
- addLoop($__currentLoopData); foreach($__currentLoopData as $price): $__env->incrementLoopIndices(); $loop = $__env->getLastLoop(); $__empty_1 = false; ?> - 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'); - ?> - -
- is_featured): ?> -
badge_label ?: 'Popular'); ?>
- - -
-
-
-

badge_label ?: 'Plan'); ?>

-

name); ?>

-
- - - -
-

strapline); ?>

-
- -
-
- formatAmount($price->monthly_amount)); ?> - / month -
- - annual_amount): ?> -

Annual: formatAmount($price->annual_amount)); ?>

- - -

description); ?>

- -
    - featureRows(); $__env->addLoop($__currentLoopData); foreach($__currentLoopData as $feature): $__env->incrementLoopIndices(); $loop = $__env->getLastLoop(); ?> -
  • - - -
  • - popLoop(); $loop = $__env->getLastLoop(); ?> -
-
-
- popLoop(); $loop = $__env->getLastLoop(); if ($__empty_1): ?> -
-

No active prices

-

Add active pricing records from Administration to populate this page.

-
- -
-
- renderComponent(); ?> - - - - - - - - - - \ No newline at end of file diff --git a/storage/framework/views/3d7c4a50df1d313410bd5444267891cf.php b/storage/framework/views/3d7c4a50df1d313410bd5444267891cf.php deleted file mode 100755 index 3f42b6f2..00000000 --- a/storage/framework/views/3d7c4a50df1d313410bd5444267891cf.php +++ /dev/null @@ -1,507 +0,0 @@ - - - - - - - - - - - - - - - - - - - - make('partials.head', array_diff_key(get_defined_vars(), ['__data' => 1, '__path' => 1]))->render(); ?> - - - -
- - - - -
- - -
- - -
-
-
- - forceAssetInjection(); ?>
- - - - - - - - -
- - forceAssetInjection(); ?> -scripts(); ?> - - - - - - \ No newline at end of file diff --git a/storage/framework/views/3e67020b08ceeca960cbb88b2dabc310.php b/storage/framework/views/3e67020b08ceeca960cbb88b2dabc310.php deleted file mode 100755 index 9a075626..00000000 --- a/storage/framework/views/3e67020b08ceeca960cbb88b2dabc310.php +++ /dev/null @@ -1,61 +0,0 @@ -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(); -?> - - - - -pluck('tooltip:position'); ?> -pluck('tooltip:kbd'); ?> -pluck('tooltip'); ?> - - '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); -?> - - - ensureRequired('/Users/mag/Sites/WMS/Core/vendor/livewire/flux/src/../stubs/resources/views/flux/tooltip/index.blade.php', $__blaze->compiledPath.'/d2493bdc3defe8869c6c05a47a680be0.php'); ?> - - - $tooltip,'position' => $tooltipPosition,'kbd' => $tooltipKbd]; ?> - -pushData($__attrsd2493bdc3defe8869c6c05a47a680be0); ?> - - - - -pushSlots($__slotsd2493bdc3defe8869c6c05a47a680be0); ?> - - - -popData(); ?> - - - - - \ No newline at end of file diff --git a/storage/framework/views/42634dc40de4b30dc1bfd8e4e5216a37.php b/storage/framework/views/42634dc40de4b30dc1bfd8e4e5216a37.php deleted file mode 100755 index e6f71498..00000000 --- a/storage/framework/views/42634dc40de4b30dc1bfd8e4e5216a37.php +++ /dev/null @@ -1,147 +0,0 @@ - - - 'f4ac99e09542ff494432bc959d4fee61::app','data' => ['title' => __('Shipping')]] + (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag ? $attributes->all() : [])); ?> -withName('layouts::app'); ?> -shouldRender()): ?> -startComponent($component->resolveView(), $component->data()); ?> - -except(\Illuminate\View\AnonymousComponent::ignoredParameterNames()); ?> - -withAttributes(['title' => \Illuminate\View\Compilers\BladeCompiler::sanitizeComponentAttribute(__('Shipping'))]); ?> - - -
-
-
- - - '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() : [])); ?> -withName('wms.page-hero'); ?> -shouldRender()): ?> -startComponent($component->resolveView(), $component->data()); ?> - -except(\Illuminate\View\AnonymousComponent::ignoredParameterNames()); ?> - -withAttributes(['eyebrow' => 'Operations','title' => 'Shipping','description' => 'Monitor shipment activity, closed orders, pending loads, and dispatch status.','icon' => 'fa-solid fa-truck-fast']); ?> - - -renderComponent(); ?> - - - - - - - - - -
- -
-
-
-
01
-

Open Shipments

-

Placeholder area for open shipments.

-
-
-
-
-
-
-
02
-

Closed Orders

-

Placeholder area for closed orders.

-
-
-
-
-
-
-
03
-

Shipment Close Calls

-

Placeholder area for shipment close calls.

-
-
-
-
-
-
-
04
-

Dispatch Exceptions

-

Placeholder area for dispatch exceptions.

-
-
-
- -
-
-
-
-
-

Shipping workbench

-

Sample table layout ready to wire into controllers, queries, DataTables, or Livewire.

-
- -
- - -
-
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
ShipmentOrderCustomerAction
Open ShipmentsSample 1ActiveOpen
Closed OrdersSample 2ActiveOpen
Shipment Close CallsSample 3ActiveOpen
Dispatch ExceptionsSample 4ActiveOpen
-
-
-
-
-
-
- renderComponent(); ?> - - - - - - - - - - \ No newline at end of file diff --git a/storage/framework/views/4ac1e3a0546377b4cde6befc3251bc22.blade.php b/storage/framework/views/4ac1e3a0546377b4cde6befc3251bc22.blade.php deleted file mode 100755 index 757e0c5d..00000000 --- a/storage/framework/views/4ac1e3a0546377b4cde6befc3251bc22.blade.php +++ /dev/null @@ -1,64 +0,0 @@ ---- -name: fluxui-development -description: "Use this skill for Flux UI development in Livewire applications only. Trigger when working with 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 diff --git a/storage/framework/views/4bee8597a13d4fcba1f6790419c82905.php b/storage/framework/views/4bee8597a13d4fcba1f6790419c82905.php deleted file mode 100755 index 204df93c..00000000 --- a/storage/framework/views/4bee8597a13d4fcba1f6790419c82905.php +++ /dev/null @@ -1,62 +0,0 @@ - - - 'f4ac99e09542ff494432bc959d4fee61::app','data' => ['title' => __('Licence Keys')]] + (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag ? $attributes->all() : [])); ?> -withName('layouts::app'); ?> -shouldRender()): ?> -startComponent($component->resolveView(), $component->data()); ?> - -except(\Illuminate\View\AnonymousComponent::ignoredParameterNames()); ?> - -withAttributes(['title' => \Illuminate\View\Compilers\BladeCompiler::sanitizeComponentAttribute(__('Licence Keys'))]); ?> - - -
- - - '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() : [])); ?> -withName('wms.page-hero'); ?> -shouldRender()): ?> -startComponent($component->resolveView(), $component->data()); ?> - -except(\Illuminate\View\AnonymousComponent::ignoredParameterNames()); ?> - -withAttributes(['eyebrow' => 'Platform Administration','title' => 'Licence Keys','description' => 'Issue and monitor company licence keys, limits and platform access plans.','icon' => 'fa-solid fa-key']); ?> - - -renderComponent(); ?> - - - - - - - - - -
New key:
-
-

Issue licence key

-
- - - - - - -
-
-
addLoop($__currentLoopData); foreach($__currentLoopData as $license): $__env->incrementLoopIndices(); $loop = $__env->getLastLoop(); ?>popLoop(); $loop = $__env->getLastLoop(); ?>
CompanyLabelPlanPrefixExpires
company->name); ?>label); ?>plan); ?>key_prefix); ?>expires_at)->toDateString()); ?>
- links()); ?> - -
- renderComponent(); ?> - - - - - - - - - - \ No newline at end of file diff --git a/storage/framework/views/52f11b25b837da8f038135d7f0333077.php b/storage/framework/views/52f11b25b837da8f038135d7f0333077.php deleted file mode 100755 index 59a79066..00000000 --- a/storage/framework/views/52f11b25b837da8f038135d7f0333077.php +++ /dev/null @@ -1,147 +0,0 @@ - - - 'f4ac99e09542ff494432bc959d4fee61::app','data' => ['title' => __('M3 Integration')]] + (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag ? $attributes->all() : [])); ?> -withName('layouts::app'); ?> -shouldRender()): ?> -startComponent($component->resolveView(), $component->data()); ?> - -except(\Illuminate\View\AnonymousComponent::ignoredParameterNames()); ?> - -withAttributes(['title' => \Illuminate\View\Compilers\BladeCompiler::sanitizeComponentAttribute(__('M3 Integration'))]); ?> - - -
-
-
- - - '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() : [])); ?> -withName('wms.page-hero'); ?> -shouldRender()): ?> -startComponent($component->resolveView(), $component->data()); ?> - -except(\Illuminate\View\AnonymousComponent::ignoredParameterNames()); ?> - -withAttributes(['eyebrow' => 'Operations','title' => 'M3 Integration','description' => 'Observe M3 transactions, delivery methods, close shipment calls, and API exchanges.','icon' => 'fa-solid fa-server']); ?> - - -renderComponent(); ?> - - - - - - - - - -
- -
-
-
-
01
-

M3 Transaction Log

-

Placeholder area for m3 transaction log.

-
-
-
-
-
-
-
02
-

M3 Delivery Methods

-

Placeholder area for m3 delivery methods.

-
-
-
-
-
-
-
03
-

Close Shipment API

-

Placeholder area for close shipment api.

-
-
-
-
-
-
-
04
-

M3 Error Queue

-

Placeholder area for m3 error queue.

-
-
-
- -
-
-
-
-
-

M3 Integration workbench

-

Sample table layout ready to wire into controllers, queries, DataTables, or Livewire.

-
- -
- - -
-
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
TransactionProgramMessageAction
M3 Transaction LogSample 1ActiveOpen
M3 Delivery MethodsSample 2ActiveOpen
Close Shipment APISample 3ActiveOpen
M3 Error QueueSample 4ActiveOpen
-
-
-
-
-
-
- renderComponent(); ?> - - - - - - - - - - \ No newline at end of file diff --git a/storage/framework/views/535d56990e285f39e3e99bf188f787e4.blade.php b/storage/framework/views/535d56990e285f39e3e99bf188f787e4.blade.php deleted file mode 100755 index 18fa2282..00000000 --- a/storage/framework/views/535d56990e285f39e3e99bf188f787e4.blade.php +++ /dev/null @@ -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. diff --git a/storage/framework/views/56412a9aeb6f1e81a1c3ce244096a4cf.blade.php b/storage/framework/views/56412a9aeb6f1e81a1c3ce244096a4cf.blade.php deleted file mode 100755 index f1a3296e..00000000 --- a/storage/framework/views/56412a9aeb6f1e81a1c3ce244096a4cf.blade.php +++ /dev/null @@ -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. diff --git a/storage/framework/views/5b5b77309f4b7f191045e5f4c576e279.php b/storage/framework/views/5b5b77309f4b7f191045e5f4c576e279.php deleted file mode 100755 index e0264ae8..00000000 --- a/storage/framework/views/5b5b77309f4b7f191045e5f4c576e279.php +++ /dev/null @@ -1,167 +0,0 @@ - - - 'f4ac99e09542ff494432bc959d4fee61::app','data' => ['title' => __('Platform')]] + (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag ? $attributes->all() : [])); ?> -withName('layouts::app'); ?> -shouldRender()): ?> -startComponent($component->resolveView(), $component->data()); ?> - -except(\Illuminate\View\AnonymousComponent::ignoredParameterNames()); ?> - -withAttributes(['title' => \Illuminate\View\Compilers\BladeCompiler::sanitizeComponentAttribute(__('Platform'))]); ?> - - -
- - - '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() : [])); ?> -withName('wms.page-hero'); ?> -shouldRender()): ?> -startComponent($component->resolveView(), $component->data()); ?> - -except(\Illuminate\View\AnonymousComponent::ignoredParameterNames()); ?> - -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'], - ])]); ?> - - -renderComponent(); ?> - - - - - - - - - -
- addLoop($__currentLoopData); foreach($__currentLoopData as [$label, $value]): $__env->incrementLoopIndices(); $loop = $__env->getLastLoop(); ?> -
-

-

-
- popLoop(); $loop = $__env->getLastLoop(); ?> -
- -
-
-
-

Platform

-

Pricing plans

-

Customer-facing Basic, Advanced and Pro plan cards shown under Platform.

-
- - -
- -
- addLoop($__currentLoopData); foreach($__currentLoopData as $price): $__env->incrementLoopIndices(); $loop = $__env->getLastLoop(); $__empty_1 = false; ?> - 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); - ?> - -
-
-
-
-

badge_label ?: 'Plan'); ?>

-

name); ?>

-
- - - -
-

strapline); ?>

-
- -
-
- formatAmount($price->monthly_amount)); ?> - / month -
-

description); ?>

- -
    - addLoop($__currentLoopData); foreach($__currentLoopData as $feature): $__env->incrementLoopIndices(); $loop = $__env->getLastLoop(); ?> -
  • - - -
  • - popLoop(); $loop = $__env->getLastLoop(); ?> -
-
-
- popLoop(); $loop = $__env->getLastLoop(); if ($__empty_1): ?> -
- No platform pricing plans have been published yet. -
- -
-
- -
-
-
-

Recent companies

-

Tenant isolation is enforced by company ownership on every warehouse record.

-
- - Manage companies - -
-
- - - - - - - - - - - - addLoop($__currentLoopData); foreach($__currentLoopData as $company): $__env->incrementLoopIndices(); $loop = $__env->getLastLoop(); ?> - - - - - - - - popLoop(); $loop = $__env->getLastLoop(); ?> - -
CompanyUsersWarehousesLicencesStatus
name); ?>users_count); ?>warehouses_count); ?>license_keys_count); ?>is_system_company ? 'System' : ucfirst($company->status)); ?>
-
-
-
- renderComponent(); ?> - - - - - - - - - - \ No newline at end of file diff --git a/storage/framework/views/687b0c1682775cfa7829813a7e91b808.php b/storage/framework/views/687b0c1682775cfa7829813a7e91b808.php deleted file mode 100755 index 177c653c..00000000 --- a/storage/framework/views/687b0c1682775cfa7829813a7e91b808.php +++ /dev/null @@ -1,62 +0,0 @@ - - - 'f4ac99e09542ff494432bc959d4fee61::app','data' => ['title' => __('Validation Rules')]] + (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag ? $attributes->all() : [])); ?> -withName('layouts::app'); ?> -shouldRender()): ?> -startComponent($component->resolveView(), $component->data()); ?> - -except(\Illuminate\View\AnonymousComponent::ignoredParameterNames()); ?> - -withAttributes(['title' => \Illuminate\View\Compilers\BladeCompiler::sanitizeComponentAttribute(__('Validation Rules'))]); ?> - - -
- - - '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() : [])); ?> -withName('wms.page-hero'); ?> -shouldRender()): ?> -startComponent($component->resolveView(), $component->data()); ?> - -except(\Illuminate\View\AnonymousComponent::ignoredParameterNames()); ?> - -withAttributes(['eyebrow' => 'Administration','title' => 'Validation Rules','description' => 'Configure warehouse validation controls, severity levels and operational rule keys.','icon' => 'fa-solid fa-shield-halved']); ?> - - -renderComponent(); ?> - - - - - - - - - -
-

Add validation rule

-
- - - - - - - -
-
-
addLoop($__currentLoopData); foreach($__currentLoopData as $rule): $__env->incrementLoopIndices(); $loop = $__env->getLastLoop(); ?>popLoop(); $loop = $__env->getLastLoop(); ?>
WarehouseRuleKeySeverity
warehouse->name); ?>name); ?>rule_key); ?>severity); ?>
- links()); ?> - -
- renderComponent(); ?> - - - - - - - - - - \ No newline at end of file diff --git a/storage/framework/views/6a3f8577bb5893d5c6b28206846a19c9.php b/storage/framework/views/6a3f8577bb5893d5c6b28206846a19c9.php deleted file mode 100755 index b7e94918..00000000 --- a/storage/framework/views/6a3f8577bb5893d5c6b28206846a19c9.php +++ /dev/null @@ -1,147 +0,0 @@ - - - 'f4ac99e09542ff494432bc959d4fee61::app','data' => ['title' => __('Document Archive')]] + (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag ? $attributes->all() : [])); ?> -withName('layouts::app'); ?> -shouldRender()): ?> -startComponent($component->resolveView(), $component->data()); ?> - -except(\Illuminate\View\AnonymousComponent::ignoredParameterNames()); ?> - -withAttributes(['title' => \Illuminate\View\Compilers\BladeCompiler::sanitizeComponentAttribute(__('Document Archive'))]); ?> - - -
-
-
- - - '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() : [])); ?> -withName('wms.page-hero'); ?> -shouldRender()): ?> -startComponent($component->resolveView(), $component->data()); ?> - -except(\Illuminate\View\AnonymousComponent::ignoredParameterNames()); ?> - -withAttributes(['eyebrow' => 'Operations','title' => 'Document Archive','description' => 'Search cached Sentinel documents, shipment PDFs, labels, and BOL records.','icon' => 'fa-solid fa-file-lines']); ?> - - -renderComponent(); ?> - - - - - - - - - -
- -
-
-
-
01
-

Sentinel Doc Archive

-

Placeholder area for sentinel doc archive.

-
-
-
-
-
-
-
02
-

Shipment PDFs

-

Placeholder area for shipment pdfs.

-
-
-
-
-
-
-
03
-

Bill of Lading

-

Placeholder area for bill of lading.

-
-
-
-
-
-
-
04
-

Document Search

-

Placeholder area for document search.

-
-
-
- -
-
-
-
-
-

Document Archive workbench

-

Sample table layout ready to wire into controllers, queries, DataTables, or Livewire.

-
- -
- - -
-
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
DocumentShipmentTypeAction
Sentinel Doc ArchiveSample 1ActiveOpen
Shipment PDFsSample 2ActiveOpen
Bill of LadingSample 3ActiveOpen
Document SearchSample 4ActiveOpen
-
-
-
-
-
-
- renderComponent(); ?> - - - - - - - - - - \ No newline at end of file diff --git a/storage/framework/views/6f15e83c86acd7436273741a85de3051.php b/storage/framework/views/6f15e83c86acd7436273741a85de3051.php deleted file mode 100755 index 8e84d89b..00000000 --- a/storage/framework/views/6f15e83c86acd7436273741a85de3051.php +++ /dev/null @@ -1,13 +0,0 @@ - -# Laravel Pint Code Formatter - -supportsPintAgentFormatter()): ?> -- If you have modified any PHP files, you must run ___SINGLE_BACKTICK___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___binCommand('pint')); ?> --test --format agent___SINGLE_BACKTICK___, simply run ___SINGLE_BACKTICK___binCommand('pint')); ?> --format agent___SINGLE_BACKTICK___ to fix any formatting issues. - -- If you have modified any PHP files, you must run ___SINGLE_BACKTICK___binCommand('pint')); ?> --dirty___SINGLE_BACKTICK___ before finalizing changes to ensure your code matches the project's expected style. -- Do not run ___SINGLE_BACKTICK___binCommand('pint')); ?> --test___SINGLE_BACKTICK___, simply run ___SINGLE_BACKTICK___binCommand('pint')); ?>___SINGLE_BACKTICK___ to fix any formatting issues. - - \ No newline at end of file diff --git a/storage/framework/views/7468e1d853e3c66e93478aa819947adf.php b/storage/framework/views/7468e1d853e3c66e93478aa819947adf.php deleted file mode 100755 index 1ad421ad..00000000 --- a/storage/framework/views/7468e1d853e3c66e93478aa819947adf.php +++ /dev/null @@ -1,65 +0,0 @@ - - - 'f4ac99e09542ff494432bc959d4fee61::app','data' => ['title' => __('Companies')]] + (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag ? $attributes->all() : [])); ?> -withName('layouts::app'); ?> -shouldRender()): ?> -startComponent($component->resolveView(), $component->data()); ?> - -except(\Illuminate\View\AnonymousComponent::ignoredParameterNames()); ?> - -withAttributes(['title' => \Illuminate\View\Compilers\BladeCompiler::sanitizeComponentAttribute(__('Companies'))]); ?> - - -
- - - '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() : [])); ?> -withName('wms.page-hero'); ?> -shouldRender()): ?> -startComponent($component->resolveView(), $component->data()); ?> - -except(\Illuminate\View\AnonymousComponent::ignoredParameterNames()); ?> - -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']); ?> - - -renderComponent(); ?> - - - - - - - - - -
-

Create company

-
- - - - - -
-
-
- - - addLoop($__currentLoopData); foreach($__currentLoopData as $company): $__env->incrementLoopIndices(); $loop = $__env->getLastLoop(); ?>popLoop(); $loop = $__env->getLastLoop(); ?> -
NameUsersWarehousesLicencesStatus
name); ?>users_count); ?>warehouses_count); ?>license_keys_count); ?>is_system_company ? 'System' : $company->status); ?>
-
- links()); ?> - -
- renderComponent(); ?> - - - - - - - - - - \ No newline at end of file diff --git a/storage/framework/views/74a86007379c6e7c115531e912e85abb.php b/storage/framework/views/74a86007379c6e7c115531e912e85abb.php deleted file mode 100755 index 84c1d178..00000000 --- a/storage/framework/views/74a86007379c6e7c115531e912e85abb.php +++ /dev/null @@ -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. - \ No newline at end of file diff --git a/storage/framework/views/753996bbd648e116cb8aa37a49ea12ad.php b/storage/framework/views/753996bbd648e116cb8aa37a49ea12ad.php deleted file mode 100755 index 23f857ec..00000000 --- a/storage/framework/views/753996bbd648e116cb8aa37a49ea12ad.php +++ /dev/null @@ -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. - \ No newline at end of file diff --git a/storage/framework/views/7c1cf9bb421fbf887cdff4ea5e33db8c.php b/storage/framework/views/7c1cf9bb421fbf887cdff4ea5e33db8c.php deleted file mode 100755 index e4cde6d0..00000000 --- a/storage/framework/views/7c1cf9bb421fbf887cdff4ea5e33db8c.php +++ /dev/null @@ -1,147 +0,0 @@ - - - 'f4ac99e09542ff494432bc959d4fee61::app','data' => ['title' => __('Replenishment')]] + (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag ? $attributes->all() : [])); ?> -withName('layouts::app'); ?> -shouldRender()): ?> -startComponent($component->resolveView(), $component->data()); ?> - -except(\Illuminate\View\AnonymousComponent::ignoredParameterNames()); ?> - -withAttributes(['title' => \Illuminate\View\Compilers\BladeCompiler::sanitizeComponentAttribute(__('Replenishment'))]); ?> - - -
-
-
- - - '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() : [])); ?> -withName('wms.page-hero'); ?> -shouldRender()): ?> -startComponent($component->resolveView(), $component->data()); ?> - -except(\Illuminate\View\AnonymousComponent::ignoredParameterNames()); ?> - -withAttributes(['eyebrow' => 'Operations','title' => 'Replenishment','description' => 'Configure replenishment thresholds, review stock gaps, and monitor refill activity.','icon' => 'fa-solid fa-arrows-rotate']); ?> - - -renderComponent(); ?> - - - - - - - - - -
- -
-
-
-
01
-

Replenishment Rules

-

Placeholder area for replenishment rules.

-
-
-
-
-
-
-
02
-

Minimum Stock

-

Placeholder area for minimum stock.

-
-
-
-
-
-
-
03
-

Suggested Transfers

-

Placeholder area for suggested transfers.

-
-
-
-
-
-
-
04
-

Exception Queue

-

Placeholder area for exception queue.

-
-
-
- -
-
-
-
-
-

Replenishment workbench

-

Sample table layout ready to wire into controllers, queries, DataTables, or Livewire.

-
- -
- - -
-
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
ItemMinimumCurrentAction
Replenishment RulesSample 1ActiveOpen
Minimum StockSample 2ActiveOpen
Suggested TransfersSample 3ActiveOpen
Exception QueueSample 4ActiveOpen
-
-
-
-
-
-
- renderComponent(); ?> - - - - - - - - - - \ No newline at end of file diff --git a/storage/framework/views/84fc001d690cedbaa499f9c1caf280dd.php b/storage/framework/views/84fc001d690cedbaa499f9c1caf280dd.php deleted file mode 100755 index a0151945..00000000 --- a/storage/framework/views/84fc001d690cedbaa499f9c1caf280dd.php +++ /dev/null @@ -1,18 +0,0 @@ - -# PHPUnit - -- This application uses PHPUnit for testing. All tests must be written as PHPUnit classes. Use ___SINGLE_BACKTICK___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___artisanCommand('test --compact')); ?>___SINGLE_BACKTICK___. -- To run all tests in a file: ___SINGLE_BACKTICK___artisanCommand('test --compact tests/Feature/ExampleTest.php')); ?>___SINGLE_BACKTICK___. -- To filter on a particular test name: ___SINGLE_BACKTICK___artisanCommand('test --compact --filter=testName')); ?>___SINGLE_BACKTICK___ (recommended after making a change to a related file). - \ No newline at end of file diff --git a/storage/framework/views/8738ae0d0151ba8518c373d30a966954.php b/storage/framework/views/8738ae0d0151ba8518c373d30a966954.php deleted file mode 100755 index cb931118..00000000 --- a/storage/framework/views/8738ae0d0151ba8518c373d30a966954.php +++ /dev/null @@ -1,147 +0,0 @@ - - - 'f4ac99e09542ff494432bc959d4fee61::app','data' => ['title' => __('Carrier Management')]] + (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag ? $attributes->all() : [])); ?> -withName('layouts::app'); ?> -shouldRender()): ?> -startComponent($component->resolveView(), $component->data()); ?> - -except(\Illuminate\View\AnonymousComponent::ignoredParameterNames()); ?> - -withAttributes(['title' => \Illuminate\View\Compilers\BladeCompiler::sanitizeComponentAttribute(__('Carrier Management'))]); ?> - - -
-
-
- - - '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() : [])); ?> -withName('wms.page-hero'); ?> -shouldRender()): ?> -startComponent($component->resolveView(), $component->data()); ?> - -except(\Illuminate\View\AnonymousComponent::ignoredParameterNames()); ?> - -withAttributes(['eyebrow' => 'Operations','title' => 'Carrier Management','description' => 'Maintain carriers, services, and shipment routing master data.','icon' => 'fa-solid fa-id-card']); ?> - - -renderComponent(); ?> - - - - - - - - - -
- -
-
-
-
01
-

Carrier Directory

-

Placeholder area for carrier directory.

-
-
-
-
-
-
-
02
-

Carrier Service Levels

-

Placeholder area for carrier service levels.

-
-
-
-
-
-
-
03
-

Carrier Rules

-

Placeholder area for carrier rules.

-
-
-
-
-
-
-
04
-

Carrier Audit

-

Placeholder area for carrier audit.

-
-
-
- -
-
-
-
-
-

Carrier Management workbench

-

Sample table layout ready to wire into controllers, queries, DataTables, or Livewire.

-
- -
- - -
-
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
CarrierServiceEnabledAction
Carrier DirectorySample 1ActiveOpen
Carrier Service LevelsSample 2ActiveOpen
Carrier RulesSample 3ActiveOpen
Carrier AuditSample 4ActiveOpen
-
-
-
-
-
-
- renderComponent(); ?> - - - - - - - - - - \ No newline at end of file diff --git a/storage/framework/views/8c7b5f457eff4f29cac4e3a7fd8bcad6.php b/storage/framework/views/8c7b5f457eff4f29cac4e3a7fd8bcad6.php deleted file mode 100755 index 50663c28..00000000 --- a/storage/framework/views/8c7b5f457eff4f29cac4e3a7fd8bcad6.php +++ /dev/null @@ -1,66 +0,0 @@ - - - 'f4ac99e09542ff494432bc959d4fee61::app','data' => ['title' => __('Edit Price')]] + (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag ? $attributes->all() : [])); ?> -withName('layouts::app'); ?> -shouldRender()): ?> -startComponent($component->resolveView(), $component->data()); ?> - -except(\Illuminate\View\AnonymousComponent::ignoredParameterNames()); ?> - -withAttributes(['title' => \Illuminate\View\Compilers\BladeCompiler::sanitizeComponentAttribute(__('Edit Price'))]); ?> - - -
- - - '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() : [])); ?> -withName('wms.page-hero'); ?> -shouldRender()): ?> -startComponent($component->resolveView(), $component->data()); ?> - -except(\Illuminate\View\AnonymousComponent::ignoredParameterNames()); ?> - -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']); ?> - - - - Back to prices - - renderComponent(); ?> - - - - - - - - - -
-
- - - make('platform::prices._form', array_diff_key(get_defined_vars(), ['__data' => 1, '__path' => 1]))->render(); ?> - -
- - Cancel - - -
-
-
-
- renderComponent(); ?> - - - - - - - - - - \ No newline at end of file diff --git a/storage/framework/views/96a1d29e16fe91252eff7ac360f0df68.php b/storage/framework/views/96a1d29e16fe91252eff7ac360f0df68.php deleted file mode 100755 index 164da0ae..00000000 --- a/storage/framework/views/96a1d29e16fe91252eff7ac360f0df68.php +++ /dev/null @@ -1,147 +0,0 @@ - - - 'f4ac99e09542ff494432bc959d4fee61::app','data' => ['title' => __('Transportation')]] + (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag ? $attributes->all() : [])); ?> -withName('layouts::app'); ?> -shouldRender()): ?> -startComponent($component->resolveView(), $component->data()); ?> - -except(\Illuminate\View\AnonymousComponent::ignoredParameterNames()); ?> - -withAttributes(['title' => \Illuminate\View\Compilers\BladeCompiler::sanitizeComponentAttribute(__('Transportation'))]); ?> - - -
-
-
- - - '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() : [])); ?> -withName('wms.page-hero'); ?> -shouldRender()): ?> -startComponent($component->resolveView(), $component->data()); ?> - -except(\Illuminate\View\AnonymousComponent::ignoredParameterNames()); ?> - -withAttributes(['eyebrow' => 'Operations','title' => 'Transportation','description' => 'Manage truck closure, freight terms, trailers, and transport operations.','icon' => 'fa-solid fa-route']); ?> - - -renderComponent(); ?> - - - - - - - - - -
- -
-
-
-
01
-

Pending Truck Closure

-

Placeholder area for pending truck closure.

-
-
-
-
-
-
-
02
-

Trailer Activity

-

Placeholder area for trailer activity.

-
-
-
-
-
-
-
03
-

Freight Terms

-

Placeholder area for freight terms.

-
-
-
-
-
-
-
04
-

Transport Exceptions

-

Placeholder area for transport exceptions.

-
-
-
- -
-
-
-
-
-

Transportation workbench

-

Sample table layout ready to wire into controllers, queries, DataTables, or Livewire.

-
- -
- - -
-
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
TrailerCarrierClose StatusAction
Pending Truck ClosureSample 1ActiveOpen
Trailer ActivitySample 2ActiveOpen
Freight TermsSample 3ActiveOpen
Transport ExceptionsSample 4ActiveOpen
-
-
-
-
-
-
- renderComponent(); ?> - - - - - - - - - - \ No newline at end of file diff --git a/storage/framework/views/9f8e6dc93448905d6bb35211fc874b65.php b/storage/framework/views/9f8e6dc93448905d6bb35211fc874b65.php deleted file mode 100755 index 4302dbab..00000000 --- a/storage/framework/views/9f8e6dc93448905d6bb35211fc874b65.php +++ /dev/null @@ -1,62 +0,0 @@ - - - 'f4ac99e09542ff494432bc959d4fee61::app','data' => ['title' => __('Payments')]] + (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag ? $attributes->all() : [])); ?> -withName('layouts::app'); ?> -shouldRender()): ?> -startComponent($component->resolveView(), $component->data()); ?> - -except(\Illuminate\View\AnonymousComponent::ignoredParameterNames()); ?> - -withAttributes(['title' => \Illuminate\View\Compilers\BladeCompiler::sanitizeComponentAttribute(__('Payments'))]); ?> - - -
- - - '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() : [])); ?> -withName('wms.page-hero'); ?> -shouldRender()): ?> -startComponent($component->resolveView(), $component->data()); ?> - -except(\Illuminate\View\AnonymousComponent::ignoredParameterNames()); ?> - -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']); ?> - - -renderComponent(); ?> - - - - - - - - - -
-

Add payment or override

-
- - - - - - - -
-
-
addLoop($__currentLoopData); foreach($__currentLoopData as $payment): $__env->incrementLoopIndices(); $loop = $__env->getLastLoop(); ?>popLoop(); $loop = $__env->getLastLoop(); ?>
CompanyAmountStatusDescription
company->name); ?>currency)); ?> amount / 100, 2)); ?>status); ?>description); ?>
- links()); ?> - -
- renderComponent(); ?> - - - - - - - - - - \ No newline at end of file diff --git a/storage/framework/views/a75c31620703fd46512c58163b252a63.blade.php b/storage/framework/views/a75c31620703fd46512c58163b252a63.blade.php deleted file mode 100755 index 227c7794..00000000 --- a/storage/framework/views/a75c31620703fd46512c58163b252a63.blade.php +++ /dev/null @@ -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. diff --git a/storage/framework/views/ad027bc1f4f77db585097342990de57b.blade.php b/storage/framework/views/ad027bc1f4f77db585097342990de57b.blade.php deleted file mode 100755 index bd0abd39..00000000 --- a/storage/framework/views/ad027bc1f4f77db585097342990de57b.blade.php +++ /dev/null @@ -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). diff --git a/storage/framework/views/ad752539cb081521e34bf58da7d63fe0.blade.php b/storage/framework/views/ad752539cb081521e34bf58da7d63fe0.blade.php deleted file mode 100755 index c11cd7ed..00000000 --- a/storage/framework/views/ad752539cb081521e34bf58da7d63fe0.blade.php +++ /dev/null @@ -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) diff --git a/storage/framework/views/b1fbbd8dddbe9c7327a829bf3acd4013.php b/storage/framework/views/b1fbbd8dddbe9c7327a829bf3acd4013.php deleted file mode 100755 index 431fe1e7..00000000 --- a/storage/framework/views/b1fbbd8dddbe9c7327a829bf3acd4013.php +++ /dev/null @@ -1,16 +0,0 @@ -# PHP - - -- 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___ -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___. - -- Follow existing application Enum naming conventions. - -- Prefer PHPDoc blocks over inline comments. Only add inline comments for exceptionally complex logic. -- Use array shape type definitions in PHPDoc blocks. - \ No newline at end of file diff --git a/storage/framework/views/b46c4d35241a5f83aea6336e7cbc611d.php b/storage/framework/views/b46c4d35241a5f83aea6336e7cbc611d.php deleted file mode 100755 index d21cfed9..00000000 --- a/storage/framework/views/b46c4d35241a5f83aea6336e7cbc611d.php +++ /dev/null @@ -1,66 +0,0 @@ ---- -name: fluxui-development -description: "Use this skill for Flux UI development in Livewire applications only. Trigger when working with 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 ---- - -# 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 -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 - \ No newline at end of file diff --git a/storage/framework/views/b698a480a96aefd505f4cf3d00c71166.php b/storage/framework/views/b698a480a96aefd505f4cf3d00c71166.php deleted file mode 100755 index 83abf784..00000000 --- a/storage/framework/views/b698a480a96aefd505f4cf3d00c71166.php +++ /dev/null @@ -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. - \ No newline at end of file diff --git a/storage/framework/views/b6bf7808e71752da1f56e5724e5c0501.php b/storage/framework/views/b6bf7808e71752da1f56e5724e5c0501.php deleted file mode 100755 index 44e35c8a..00000000 --- a/storage/framework/views/b6bf7808e71752da1f56e5724e5c0501.php +++ /dev/null @@ -1,65 +0,0 @@ - - - 'f4ac99e09542ff494432bc959d4fee61::app','data' => ['title' => __('Create Price')]] + (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag ? $attributes->all() : [])); ?> -withName('layouts::app'); ?> -shouldRender()): ?> -startComponent($component->resolveView(), $component->data()); ?> - -except(\Illuminate\View\AnonymousComponent::ignoredParameterNames()); ?> - -withAttributes(['title' => \Illuminate\View\Compilers\BladeCompiler::sanitizeComponentAttribute(__('Create Price'))]); ?> - - -
- - - '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() : [])); ?> -withName('wms.page-hero'); ?> -shouldRender()): ?> -startComponent($component->resolveView(), $component->data()); ?> - -except(\Illuminate\View\AnonymousComponent::ignoredParameterNames()); ?> - -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']); ?> - - - - Back to prices - - renderComponent(); ?> - - - - - - - - - -
-
- - make('platform::prices._form', array_diff_key(get_defined_vars(), ['__data' => 1, '__path' => 1]))->render(); ?> - -
- - Cancel - - -
-
-
-
- renderComponent(); ?> - - - - - - - - - - \ No newline at end of file diff --git a/storage/framework/views/baa1cf8b19011fad7a6a8433aa3f46a2.php b/storage/framework/views/baa1cf8b19011fad7a6a8433aa3f46a2.php deleted file mode 100755 index c735b065..00000000 --- a/storage/framework/views/baa1cf8b19011fad7a6a8433aa3f46a2.php +++ /dev/null @@ -1,147 +0,0 @@ - - - 'f4ac99e09542ff494432bc959d4fee61::app','data' => ['title' => __('Configuration')]] + (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag ? $attributes->all() : [])); ?> -withName('layouts::app'); ?> -shouldRender()): ?> -startComponent($component->resolveView(), $component->data()); ?> - -except(\Illuminate\View\AnonymousComponent::ignoredParameterNames()); ?> - -withAttributes(['title' => \Illuminate\View\Compilers\BladeCompiler::sanitizeComponentAttribute(__('Configuration'))]); ?> - - -
-
-
- - - '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() : [])); ?> -withName('wms.page-hero'); ?> -shouldRender()): ?> -startComponent($component->resolveView(), $component->data()); ?> - -except(\Illuminate\View\AnonymousComponent::ignoredParameterNames()); ?> - -withAttributes(['eyebrow' => 'Operations','title' => 'Configuration','description' => 'Centralise system settings, warehouse defaults, interface flags, and feature switches.','icon' => 'fa-solid fa-sliders']); ?> - - -renderComponent(); ?> - - - - - - - - - -
- -
-
-
-
01
-

System Settings

-

Placeholder area for system settings.

-
-
-
-
-
-
-
02
-

Feature Flags

-

Placeholder area for feature flags.

-
-
-
-
-
-
-
03
-

Warehouse Defaults

-

Placeholder area for warehouse defaults.

-
-
-
-
-
-
-
04
-

Interface Settings

-

Placeholder area for interface settings.

-
-
-
- -
-
-
-
-
-

Configuration workbench

-

Sample table layout ready to wire into controllers, queries, DataTables, or Livewire.

-
- -
- - -
-
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
SettingValueScopeAction
System SettingsSample 1ActiveOpen
Feature FlagsSample 2ActiveOpen
Warehouse DefaultsSample 3ActiveOpen
Interface SettingsSample 4ActiveOpen
-
-
-
-
-
-
- renderComponent(); ?> - - - - - - - - - - \ No newline at end of file diff --git a/storage/framework/views/bcf59257f6020c74ea42048c26530074.blade.php b/storage/framework/views/bcf59257f6020c74ea42048c26530074.blade.php deleted file mode 100755 index 97c35a80..00000000 --- a/storage/framework/views/bcf59257f6020c74ea42048c26530074.blade.php +++ /dev/null @@ -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. diff --git a/storage/framework/views/bd1292fcb4e235ced2c6a0e395decc9b.php b/storage/framework/views/bd1292fcb4e235ced2c6a0e395decc9b.php deleted file mode 100755 index b4df02ca..00000000 --- a/storage/framework/views/bd1292fcb4e235ced2c6a0e395decc9b.php +++ /dev/null @@ -1,147 +0,0 @@ - - - 'f4ac99e09542ff494432bc959d4fee61::app','data' => ['title' => __('Reporting')]] + (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag ? $attributes->all() : [])); ?> -withName('layouts::app'); ?> -shouldRender()): ?> -startComponent($component->resolveView(), $component->data()); ?> - -except(\Illuminate\View\AnonymousComponent::ignoredParameterNames()); ?> - -withAttributes(['title' => \Illuminate\View\Compilers\BladeCompiler::sanitizeComponentAttribute(__('Reporting'))]); ?> - - -
-
-
- - - '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() : [])); ?> -withName('wms.page-hero'); ?> -shouldRender()): ?> -startComponent($component->resolveView(), $component->data()); ?> - -except(\Illuminate\View\AnonymousComponent::ignoredParameterNames()); ?> - -withAttributes(['eyebrow' => 'Operations','title' => 'Reporting','description' => 'Provide operational reports for closed orders, user efficiency, and transaction history.','icon' => 'fa-solid fa-chart-column']); ?> - - -renderComponent(); ?> - - - - - - - - - -
- -
-
-
-
01
-

Closed Order Lines

-

Placeholder area for closed order lines.

-
-
-
-
-
-
-
02
-

Daily User Efficiency

-

Placeholder area for daily user efficiency.

-
-
-
-
-
-
-
03
-

Export Centre

-

Placeholder area for export centre.

-
-
-
-
-
-
-
04
-

Report Filters

-

Placeholder area for report filters.

-
-
-
- -
-
-
-
-
-

Reporting workbench

-

Sample table layout ready to wire into controllers, queries, DataTables, or Livewire.

-
- -
- - -
-
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
ReportPeriodRowsAction
Closed Order LinesSample 1ActiveOpen
Daily User EfficiencySample 2ActiveOpen
Export CentreSample 3ActiveOpen
Report FiltersSample 4ActiveOpen
-
-
-
-
-
-
- renderComponent(); ?> - - - - - - - - - - \ No newline at end of file diff --git a/storage/framework/views/blaze/147c6d348fe7591335f1e77fa45170f8.php b/storage/framework/views/blaze/147c6d348fe7591335f1e77fa45170f8.php deleted file mode 100755 index 34db7bb5..00000000 --- a/storage/framework/views/blaze/147c6d348fe7591335f1e77fa45170f8.php +++ /dev/null @@ -1,36 +0,0 @@ -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(); -?> - - -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') - ; -?> - -class($classes)); ?> - - popover="manual" - data-flux-menu -> - - - -processPassthroughContent('ltrim', ltrim(ob_get_clean())); -} endif; ?> \ No newline at end of file diff --git a/storage/framework/views/blaze/15ed795fbba84c4429b2df05ca4431d3.php b/storage/framework/views/blaze/15ed795fbba84c4429b2df05ca4431d3.php deleted file mode 100755 index 67d61871..00000000 --- a/storage/framework/views/blaze/15ed795fbba84c4429b2df05ca4431d3.php +++ /dev/null @@ -1,31 +0,0 @@ -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(); -?> - - - 'bottom end', - 'expanded' => false, -]; -$position ??= $attributes['position'] ?? $__defaults['position']; unset($attributes['position']); -$expanded ??= $attributes['expanded'] ?? $__defaults['expanded']; unset($attributes['expanded']); -unset($__defaults); -?> - - wire:ignore> - - - -processPassthroughContent('ltrim', ltrim(ob_get_clean())); -} endif; ?> \ No newline at end of file diff --git a/storage/framework/views/blaze/23fd5eb35fc9b151168d38378f7c1716.php b/storage/framework/views/blaze/23fd5eb35fc9b151168d38378f7c1716.php deleted file mode 100755 index 095b052a..00000000 --- a/storage/framework/views/blaze/23fd5eb35fc9b151168d38378f7c1716.php +++ /dev/null @@ -1,23 +0,0 @@ -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(); -?> - - -
data-flux-menu-separator> - ensureRequired('/Users/mag/Sites/WMS/Core/vendor/livewire/flux/src/../stubs/resources/views/flux/separator.blade.php', $__blaze->compiledPath.'/ead59bb73ece9c4532f875b4b481ffe6.php'); ?> -pushData(['class' => 'dark:bg-zinc-600!']); ?> - 'dark:bg-zinc-600!'], [], [], [], $__this ?? (isset($this) ? $this : null)); ?> -popData(); ?> -
-processPassthroughContent('ltrim', ltrim(ob_get_clean())); -} endif; ?> \ No newline at end of file diff --git a/storage/framework/views/blaze/2b27ee0d9a529bfbbe608705842d31d3.php b/storage/framework/views/blaze/2b27ee0d9a529bfbbe608705842d31d3.php deleted file mode 100755 index 4486c844..00000000 --- a/storage/framework/views/blaze/2b27ee0d9a529bfbbe608705842d31d3.php +++ /dev/null @@ -1,75 +0,0 @@ -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(); -?> - - - 'bottom end', -]; -$position ??= $attributes['position'] ?? $__defaults['position']; unset($attributes['position']); -unset($__defaults); -?> - - - - -processPassthroughContent('ltrim', ltrim(ob_get_clean())); -} endif; ?> \ No newline at end of file diff --git a/storage/framework/views/blaze/3b2703952fe1f03fa6fc92947a043f23.php b/storage/framework/views/blaze/3b2703952fe1f03fa6fc92947a043f23.php deleted file mode 100755 index c6ebea4f..00000000 --- a/storage/framework/views/blaze/3b2703952fe1f03fa6fc92947a043f23.php +++ /dev/null @@ -1,42 +0,0 @@ -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(); -?> - - - 'bottom', - 'align' => 'start', -]; -$position ??= $attributes['position'] ?? $__defaults['position']; unset($attributes['position']); -$align ??= $attributes['align'] ?? $__defaults['align']; unset($attributes['align']); -unset($__defaults); -?> - -wire('model')) && $wireModel->directive && ! $wireModel->hasModifier('self')) { - unset($attributes[$wireModel->directive]); - - $wireModel->directive .= '.self'; - - $attributes = $attributes->merge([$wireModel->directive => $wireModel->value]); -} -?> - - data-flux-dropdown> - - - -processPassthroughContent('ltrim', ltrim(ob_get_clean())); -} endif; ?> \ No newline at end of file diff --git a/storage/framework/views/blaze/48a8f1ad0f7cf4cc954cd51c38d5b63e.php b/storage/framework/views/blaze/48a8f1ad0f7cf4cc954cd51c38d5b63e.php deleted file mode 100755 index ae212b80..00000000 --- a/storage/framework/views/blaze/48a8f1ad0f7cf4cc954cd51c38d5b63e.php +++ /dev/null @@ -1,68 +0,0 @@ -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(); -?> - - - - - 'outline', -]; -$variant ??= $attributes['variant'] ?? $__defaults['variant']; unset($attributes['variant']); -unset($__defaults); -?> - -add(match($variant) { - 'outline' => '[:where(&)]:size-6', - 'solid' => '[:where(&)]:size-6', - 'mini' => '[:where(&)]:size-5', - 'micro' => '[:where(&)]:size-4', - }); -?> - - -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"> - - - - - - -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"> - - - - - - - -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"> - - - - - - - -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"> - - - - - - -processPassthroughContent('ltrim', ltrim(ob_get_clean())); -} endif; ?> \ No newline at end of file diff --git a/storage/framework/views/blaze/50d7e9e02b0a09ef19c84ebdf6a22b69.php b/storage/framework/views/blaze/50d7e9e02b0a09ef19c84ebdf6a22b69.php deleted file mode 100755 index f657a164..00000000 --- a/storage/framework/views/blaze/50d7e9e02b0a09ef19c84ebdf6a22b69.php +++ /dev/null @@ -1,65 +0,0 @@ -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(); -?> - - - - - null, - 'name' => null, -]; -$icon ??= $attributes['icon'] ?? $__defaults['icon']; unset($attributes['icon']); -$name ??= $attributes['name'] ?? $__defaults['name']; unset($attributes['name']); -unset($__defaults); -?> - - - -resolve('flux::' . 'icon.' . $icon); ?> -pushData($attributes->all()); ?> - - - -processPassthroughContent('trim', trim(ob_get_clean())), []); ?> -mergedComponentSlots(), $__slotsa4ee29fd1f7dc8668566bb29201d64b5); ?> -all(), $__slotsa4ee29fd1f7dc8668566bb29201d64b5, [], [], $__this ?? (isset($this) ? $this : null)); ?> - - - - - (app()->version() >= 12 ? hash('xxh128', 'flux') : md5('flux')) . '::' . 'icon.' . $icon, - 'data' => $__env->getCurrentComponentData(), -] + (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag ? $attributes->all() : [])); ?> -withName('flux::' . 'icon.' . $icon); ?> -shouldRender()): ?> -startComponent($component->resolveView(), $component->data()); ?> -withAttributes($attributes->getAttributes()); ?> renderComponent(); ?> - - - - - - - - - - -popData(); ?> - -processPassthroughContent('ltrim', ltrim(ob_get_clean())); -} endif; ?> \ No newline at end of file diff --git a/storage/framework/views/blaze/5de4404d35aff8d63a15337c594f4e87.php b/storage/framework/views/blaze/5de4404d35aff8d63a15337c594f4e87.php deleted file mode 100755 index c3892c91..00000000 --- a/storage/framework/views/blaze/5de4404d35aff8d63a15337c594f4e87.php +++ /dev/null @@ -1,129 +0,0 @@ -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(); -?> - - -pluck('icon:trailing'); ?> -pluck('icon:variant'); ?> - - 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); -?> - -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') - ; -?> - -ensureRequired('/Users/mag/Sites/WMS/Core/vendor/livewire/flux/src/../stubs/resources/views/flux/button-or-link-pure.blade.php', $__blaze->compiledPath.'/a0ec3a97dd1bc9937073b6e6643ed4b8.php'); ?> - - - $attributes->class($classes),'dataFluxMenuItem' => true,'dataFluxMenuItemHasIcon' => !! $icon]; ?> - -pushData($__attrsa0ec3a97dd1bc9937073b6e6643ed4b8); ?> - - - ensureRequired('/Users/mag/Sites/WMS/Core/vendor/livewire/flux/src/../stubs/resources/views/flux/icon/index.blade.php', $__blaze->compiledPath.'/50d7e9e02b0a09ef19c84ebdf6a22b69.php'); ?> -pushData(['icon' => $icon,'variant' => $iconVariant,'class' => $iconClasses,'dataFluxMenuItemIcon' => true]); ?> - $icon,'variant' => $iconVariant,'class' => $iconClasses,'dataFluxMenuItemIcon' => true], [], ['icon', 'variant', 'class', 'dataFluxMenuItemIcon'], ['dataFluxMenuItemIcon' => 'data-flux-menu-item-icon'], $__this ?? (isset($this) ? $this : null)); ?> -popData(); ?> - - - - - - - - - - - - -
- - -
- - - - - - - - ensureRequired('/Users/mag/Sites/WMS/Core/vendor/livewire/flux/src/../stubs/resources/views/flux/icon/index.blade.php', $__blaze->compiledPath.'/50d7e9e02b0a09ef19c84ebdf6a22b69.php'); ?> -pushData(['icon' => $iconTrailing,'variant' => $iconVariant,'class' => $trailingIconClasses,'dataFluxMenuItemIcon' => true]); ?> - $iconTrailing,'variant' => $iconVariant,'class' => $trailingIconClasses,'dataFluxMenuItemIcon' => true], [], ['icon', 'variant', 'class', 'dataFluxMenuItemIcon'], ['dataFluxMenuItemIcon' => 'data-flux-menu-item-icon'], $__this ?? (isset($this) ? $this : null)); ?> -popData(); ?> - - - - - - - -processPassthroughContent('trim', trim(ob_get_clean())), []); ?> -pushSlots($__slotsa0ec3a97dd1bc9937073b6e6643ed4b8); ?> - 'data-flux-menu-item', 'dataFluxMenuItemHasIcon' => 'data-flux-menu-item-has-icon'], $__this ?? (isset($this) ? $this : null)); ?> - - -popData(); ?> -processPassthroughContent('ltrim', ltrim(ob_get_clean())); -} endif; ?> \ No newline at end of file diff --git a/storage/framework/views/blaze/7c1662e234cb708866e5f77b89eee4d0.php b/storage/framework/views/blaze/7c1662e234cb708866e5f77b89eee4d0.php deleted file mode 100755 index c849c758..00000000 --- a/storage/framework/views/blaze/7c1662e234cb708866e5f77b89eee4d0.php +++ /dev/null @@ -1,66 +0,0 @@ -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(); -?> - - - 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); -?> - -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', - }) - ; -?> - -class($classes)); ?> data-flux-text color="" >

class($classes)); ?> data-flux-text data-color="" >

processPassthroughContent('ltrim', ltrim(ob_get_clean())); -} endif; ?> \ No newline at end of file diff --git a/storage/framework/views/blaze/9a6540f2523fd3551129978328b3eb40.php b/storage/framework/views/blaze/9a6540f2523fd3551129978328b3eb40.php deleted file mode 100755 index 3c78b0ca..00000000 --- a/storage/framework/views/blaze/9a6540f2523fd3551129978328b3eb40.php +++ /dev/null @@ -1,67 +0,0 @@ -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(); -?> - - - - - 'outline', -]; -$variant ??= $attributes['variant'] ?? $__defaults['variant']; unset($attributes['variant']); -unset($__defaults); -?> - -add(match($variant) { - 'outline' => '[:where(&)]:size-6', - 'solid' => '[:where(&)]:size-6', - 'mini' => '[:where(&)]:size-5', - 'micro' => '[:where(&)]:size-4', - }); -?> - - -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"> - - - - - - -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"> - - - - - - -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"> - - - - - - - -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"> - - - - - - -processPassthroughContent('ltrim', ltrim(ob_get_clean())); -} endif; ?> \ No newline at end of file diff --git a/storage/framework/views/blaze/a0ec3a97dd1bc9937073b6e6643ed4b8.php b/storage/framework/views/blaze/a0ec3a97dd1bc9937073b6e6643ed4b8.php deleted file mode 100755 index 77cae37e..00000000 --- a/storage/framework/views/blaze/a0ec3a97dd1bc9937073b6e6643ed4b8.php +++ /dev/null @@ -1,54 +0,0 @@ -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(); -?> - - - - - '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); -?> - - -
> - - -
- - - > - - - - - - -processPassthroughContent('ltrim', ltrim(ob_get_clean())); -} endif; ?> \ No newline at end of file diff --git a/storage/framework/views/blaze/d4e7ffd9fb9de1969a2cdd73bc211803.php b/storage/framework/views/blaze/d4e7ffd9fb9de1969a2cdd73bc211803.php deleted file mode 100755 index a050833a..00000000 --- a/storage/framework/views/blaze/d4e7ffd9fb9de1969a2cdd73bc211803.php +++ /dev/null @@ -1,63 +0,0 @@ -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(); -?> - - - '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); -?> - -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', - }) - ; -?> - - -

class($classes)); ?> data-flux-heading>

- - - -

class($classes)); ?> data-flux-heading>

- - - -

class($classes)); ?> data-flux-heading>

- - - -

class($classes)); ?> data-flux-heading>

- - - -
class($classes)); ?> data-flux-heading>
- -processPassthroughContent('ltrim', ltrim(ob_get_clean())); -} endif; ?> \ No newline at end of file diff --git a/storage/framework/views/blaze/dc37e44ba76be4edbfb196d052a57385.php b/storage/framework/views/blaze/dc37e44ba76be4edbfb196d052a57385.php deleted file mode 100755 index b58f26b6..00000000 --- a/storage/framework/views/blaze/dc37e44ba76be4edbfb196d052a57385.php +++ /dev/null @@ -1,21 +0,0 @@ -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(); -?> - - - data-flux-menu-radio-group> - - - -processPassthroughContent('ltrim', ltrim(ob_get_clean())); -} endif; ?> \ No newline at end of file diff --git a/storage/framework/views/blaze/ead59bb73ece9c4532f875b4b481ffe6.php b/storage/framework/views/blaze/ead59bb73ece9c4532f875b4b481ffe6.php deleted file mode 100755 index b3786c5d..00000000 --- a/storage/framework/views/blaze/ead59bb73ece9c4532f875b4b481ffe6.php +++ /dev/null @@ -1,59 +0,0 @@ -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(); -?> - - - 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); -?> - -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', - }) - ; -?> - - -
-
class([$classes, 'grow'])); ?>>
- - - -
class([$classes, 'grow'])); ?>>
-
- -
class($classes, 'shrink-0')); ?> data-flux-separator>
- -processPassthroughContent('ltrim', ltrim(ob_get_clean())); -} endif; ?> \ No newline at end of file diff --git a/storage/framework/views/c0c9cc362c3bfc74daeabdb8b3ec8e8b.php b/storage/framework/views/c0c9cc362c3bfc74daeabdb8b3ec8e8b.php deleted file mode 100755 index 6a8697c1..00000000 --- a/storage/framework/views/c0c9cc362c3bfc74daeabdb8b3ec8e8b.php +++ /dev/null @@ -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 ---- - -# 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 -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___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___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. - \ No newline at end of file diff --git a/storage/framework/views/c171fffd32ee4668d0f75682681d7fac.blade.php b/storage/framework/views/c171fffd32ee4668d0f75682681d7fac.blade.php deleted file mode 100755 index d2b1b1df..00000000 --- a/storage/framework/views/c171fffd32ee4668d0f75682681d7fac.blade.php +++ /dev/null @@ -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. diff --git a/storage/framework/views/c4177cbc2af591baa0d78df001ffb932.php b/storage/framework/views/c4177cbc2af591baa0d78df001ffb932.php deleted file mode 100755 index c78a52d8..00000000 --- a/storage/framework/views/c4177cbc2af591baa0d78df001ffb932.php +++ /dev/null @@ -1,8 +0,0 @@ - -# 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___artisanCommand('test --compact')); ?>___SINGLE_BACKTICK___ with a specific filename or filter. - \ No newline at end of file diff --git a/storage/framework/views/c7f53026ad75139e3c26853dfbb23abe.php b/storage/framework/views/c7f53026ad75139e3c26853dfbb23abe.php deleted file mode 100755 index 9465144f..00000000 --- a/storage/framework/views/c7f53026ad75139e3c26853dfbb23abe.php +++ /dev/null @@ -1,25 +0,0 @@ - - - 'f4ac99e09542ff494432bc959d4fee61::app.sidebar','data' => ['title' => $title ?? null]] + (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag ? $attributes->all() : [])); ?> -withName('layouts::app.sidebar'); ?> -shouldRender()): ?> -startComponent($component->resolveView(), $component->data()); ?> - -except(\Illuminate\View\AnonymousComponent::ignoredParameterNames()); ?> - -withAttributes(['title' => \Illuminate\View\Compilers\BladeCompiler::sanitizeComponentAttribute($title ?? null)]); ?> - - - - - renderComponent(); ?> - - - - - - - - - - \ No newline at end of file diff --git a/storage/framework/views/ca9c53653290cb4678caf81c165063e8.php b/storage/framework/views/ca9c53653290cb4678caf81c165063e8.php deleted file mode 100755 index ceb8dfba..00000000 --- a/storage/framework/views/ca9c53653290cb4678caf81c165063e8.php +++ /dev/null @@ -1,122 +0,0 @@ -hasPages()): ?> - - - \ No newline at end of file diff --git a/storage/framework/views/d1640c796ea7d658f5d537a146d3b49c.blade.php b/storage/framework/views/d1640c796ea7d658f5d537a146d3b49c.blade.php deleted file mode 100755 index 1e0b28c6..00000000 --- a/storage/framework/views/d1640c796ea7d658f5d537a146d3b49c.blade.php +++ /dev/null @@ -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___. diff --git a/storage/framework/views/d6ef292c8d20ba6f4cc3a4a821697bc7.php b/storage/framework/views/d6ef292c8d20ba6f4cc3a4a821697bc7.php deleted file mode 100755 index 973e1563..00000000 --- a/storage/framework/views/d6ef292c8d20ba6f4cc3a4a821697bc7.php +++ /dev/null @@ -1,150 +0,0 @@ - - - 'f4ac99e09542ff494432bc959d4fee61::app','data' => ['title' => __('Platform Prices')]] + (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag ? $attributes->all() : [])); ?> -withName('layouts::app'); ?> -shouldRender()): ?> -startComponent($component->resolveView(), $component->data()); ?> - -except(\Illuminate\View\AnonymousComponent::ignoredParameterNames()); ?> - -withAttributes(['title' => \Illuminate\View\Compilers\BladeCompiler::sanitizeComponentAttribute(__('Platform Prices'))]); ?> - - -
- - - '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() : [])); ?> -withName('wms.page-hero'); ?> -shouldRender()): ?> -startComponent($component->resolveView(), $component->data()); ?> - -except(\Illuminate\View\AnonymousComponent::ignoredParameterNames()); ?> - -withAttributes(['eyebrow' => 'Administration','title' => 'Pricing Administration','description' => 'Create, edit and publish the platform pricing cards shown under Platform.','icon' => 'fa-solid fa-tags']); ?> - - - - Add price - - renderComponent(); ?> - - - - - - - - - - -
- - -
- - -
- addLoop($__currentLoopData); foreach($__currentLoopData as $price): $__env->incrementLoopIndices(); $loop = $__env->getLastLoop(); $__empty_1 = false; ?> - 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'); - ?> - -
- is_featured): ?> -
- Featured -
- - -
-
-
-

- badge_label ?: 'Plan'); ?> - -

-

name); ?>

-
- - - - -
- -

strapline); ?>

-
- -
-
- - formatAmount($price->monthly_amount)); ?> - - - / month -
- -

- Annual: - - formatAmount($price->annual_amount)); ?> - - -

- -

- description); ?> - -

- -
    - featureRows(); $__env->addLoop($__currentLoopData); foreach($__currentLoopData as $feature): $__env->incrementLoopIndices(); $loop = $__env->getLastLoop(); ?> -
  • - - -
  • - popLoop(); $loop = $__env->getLastLoop(); ?> -
- -
- - is_active ? 'Active' : 'Hidden'); ?> - - - -
- - Edit - -
- - - -
-
-
-
-
- popLoop(); $loop = $__env->getLastLoop(); if ($__empty_1): ?> -
- No pricing plans have been created yet. -
- -
-
- renderComponent(); ?> - - - - - - - - - - \ No newline at end of file diff --git a/storage/framework/views/db800410232a09db40ffd9b85b3884fa.blade.php b/storage/framework/views/db800410232a09db40ffd9b85b3884fa.blade.php deleted file mode 100755 index 85a17c6d..00000000 --- a/storage/framework/views/db800410232a09db40ffd9b85b3884fa.blade.php +++ /dev/null @@ -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 - -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'), - - -@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 - -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(), - - -@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 - -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(), - ]), - ]), - - -@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 - -use Filament\Forms\Components\Repeater; - -Repeater::make('qualifications') - ->relationship() - ->schema([ - TextInput::make('institution') - ->required(), - TextInput::make('qualification') - ->required(), - ]) - ->columns(2), - - -@endverbatim - -Use ___SINGLE_BACKTICK___state()___SINGLE_BACKTICK___ with a ___SINGLE_BACKTICK___Closure___SINGLE_BACKTICK___ to compute derived column values: - -@verbatim - -use Filament\Tables\Columns\TextColumn; - -TextColumn::make('full_name') - ->state(fn (User $record): string => "{$record->first_name} {$record->last_name}"), - - -@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 - -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')), - - -@endverbatim - -Actions are buttons that encapsulate optional modal forms and behavior: - -@verbatim - -use Filament\Actions\Action; - -Action::make('updateEmail') - ->schema([ - TextInput::make('email') - ->email() - ->required(), - ]) - ->action(fn (array $data, User $record) => $record->update($data)), - - -@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 - -use function Pest\Livewire\livewire; - -livewire(ListUsers::class) - ->assertCanSeeTableRecords($users) - ->searchTable($users->first()->name) - ->assertCanSeeTableRecords($users->take(1)) - ->assertCanNotSeeTableRecords($users->skip(1)); - - - - -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', -]); - - - - -livewire(EditUser::class, ['record' => $user->id]) - ->fillForm(['name' => 'Updated']) - ->call('save') - ->assertNotified() - ->assertHasNoFormErrors(); - -assertDatabaseHas(User::class, [ - 'id' => $user->id, - 'name' => 'Updated', -]); - - - - -livewire(CreateUser::class) - ->fillForm([ - 'name' => null, - 'email' => 'invalid-email', - ]) - ->call('create') - ->assertHasFormErrors([ - 'name' => 'required', - 'email' => 'email', - ]) - ->assertNotNotified(); - - -@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 - -use Filament\Actions\Testing\TestAction; - -livewire(ListUsers::class) - ->callAction(TestAction::make('promote')->table($user), [ - 'role' => 'admin', - ]) - ->assertNotified(); - - -@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 diff --git a/storage/framework/views/dbb7a1bfde95abf3b0c094069cb87100.php b/storage/framework/views/dbb7a1bfde95abf3b0c094069cb87100.php deleted file mode 100755 index fa985d49..00000000 --- a/storage/framework/views/dbb7a1bfde95abf3b0c094069cb87100.php +++ /dev/null @@ -1,148 +0,0 @@ -featureRows())); -?> - -
-
- - - getBag($__errorArgs[1] ?? 'default'); -if ($__bag->has($__errorArgs[0])) : -if (isset($message)) { $__messageOriginal = $message; } -$message = $__bag->first($__errorArgs[0]); ?>

-
- -
- - - getBag($__errorArgs[1] ?? 'default'); -if ($__bag->has($__errorArgs[0])) : -if (isset($message)) { $__messageOriginal = $message; } -$message = $__bag->first($__errorArgs[0]); ?>

-
- -
- - - getBag($__errorArgs[1] ?? 'default'); -if ($__bag->has($__errorArgs[0])) : -if (isset($message)) { $__messageOriginal = $message; } -$message = $__bag->first($__errorArgs[0]); ?>

-
- -
- - - getBag($__errorArgs[1] ?? 'default'); -if ($__bag->has($__errorArgs[0])) : -if (isset($message)) { $__messageOriginal = $message; } -$message = $__bag->first($__errorArgs[0]); ?>

-
- -
- - - getBag($__errorArgs[1] ?? 'default'); -if ($__bag->has($__errorArgs[0])) : -if (isset($message)) { $__messageOriginal = $message; } -$message = $__bag->first($__errorArgs[0]); ?>

-
- -
- - - getBag($__errorArgs[1] ?? 'default'); -if ($__bag->has($__errorArgs[0])) : -if (isset($message)) { $__messageOriginal = $message; } -$message = $__bag->first($__errorArgs[0]); ?>

-
- -
- - - getBag($__errorArgs[1] ?? 'default'); -if ($__bag->has($__errorArgs[0])) : -if (isset($message)) { $__messageOriginal = $message; } -$message = $__bag->first($__errorArgs[0]); ?>

-
- -
- - - getBag($__errorArgs[1] ?? 'default'); -if ($__bag->has($__errorArgs[0])) : -if (isset($message)) { $__messageOriginal = $message; } -$message = $__bag->first($__errorArgs[0]); ?>

-
- -
- - - getBag($__errorArgs[1] ?? 'default'); -if ($__bag->has($__errorArgs[0])) : -if (isset($message)) { $__messageOriginal = $message; } -$message = $__bag->first($__errorArgs[0]); ?>

-
- -
- - - getBag($__errorArgs[1] ?? 'default'); -if ($__bag->has($__errorArgs[0])) : -if (isset($message)) { $__messageOriginal = $message; } -$message = $__bag->first($__errorArgs[0]); ?>

-
- -
- - - -
-
- \ No newline at end of file diff --git a/storage/framework/views/e3b9888097c7ff3c001c6cdebb490dc0.blade.php b/storage/framework/views/e3b9888097c7ff3c001c6cdebb490dc0.blade.php deleted file mode 100755 index ce218a08..00000000 --- a/storage/framework/views/e3b9888097c7ff3c001c6cdebb490dc0.blade.php +++ /dev/null @@ -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 diff --git a/storage/framework/views/e46ef76b42b01ec1e5dc49963318d7c4.php b/storage/framework/views/e46ef76b42b01ec1e5dc49963318d7c4.php deleted file mode 100755 index e249f281..00000000 --- a/storage/framework/views/e46ef76b42b01ec1e5dc49963318d7c4.php +++ /dev/null @@ -1,49 +0,0 @@ - -# 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 - . - -packages()->unique(fn ($package) => $package->rawName()); $__env->addLoop($__currentLoopData); foreach($__currentLoopData as $package): $__env->incrementLoopIndices(); $loop = $__env->getLastLoop(); ?> -- rawName()); ?> (name()); ?>) - vmajorVersion()); ?> - -popLoop(); $loop = $__env->getLastLoop(); ?> - - -Application purpose: - - - - -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. - - -## 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___nodePackageManagerCommand('run build')); ?>___SINGLE_BACKTICK___, ___SINGLE_BACKTICK___nodePackageManagerCommand('run dev')); ?>___SINGLE_BACKTICK___, or ___SINGLE_BACKTICK___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. - \ No newline at end of file diff --git a/storage/framework/views/e4a92aa5a75a7eea6a82c78a2f2a994e.php b/storage/framework/views/e4a92aa5a75a7eea6a82c78a2f2a994e.php deleted file mode 100755 index 52cc459c..00000000 --- a/storage/framework/views/e4a92aa5a75a7eea6a82c78a2f2a994e.php +++ /dev/null @@ -1,147 +0,0 @@ - - - 'f4ac99e09542ff494432bc959d4fee61::app','data' => ['title' => __('Audit')]] + (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag ? $attributes->all() : [])); ?> -withName('layouts::app'); ?> -shouldRender()): ?> -startComponent($component->resolveView(), $component->data()); ?> - -except(\Illuminate\View\AnonymousComponent::ignoredParameterNames()); ?> - -withAttributes(['title' => \Illuminate\View\Compilers\BladeCompiler::sanitizeComponentAttribute(__('Audit'))]); ?> - - -
-
-
- - - '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() : [])); ?> -withName('wms.page-hero'); ?> -shouldRender()): ?> -startComponent($component->resolveView(), $component->data()); ?> - -except(\Illuminate\View\AnonymousComponent::ignoredParameterNames()); ?> - -withAttributes(['eyebrow' => 'Operations','title' => 'Audit','description' => 'Review activity logs, data changes, interface events, and administrative actions.','icon' => 'fa-solid fa-clipboard-check']); ?> - - -renderComponent(); ?> - - - - - - - - - -
- -
-
-
-
01
-

Activity Log

-

Placeholder area for activity log.

-
-
-
-
-
-
-
02
-

Data Changes

-

Placeholder area for data changes.

-
-
-
-
-
-
-
03
-

API Audit

-

Placeholder area for api audit.

-
-
-
-
-
-
-
04
-

User Actions

-

Placeholder area for user actions.

-
-
-
- -
-
-
-
-
-

Audit workbench

-

Sample table layout ready to wire into controllers, queries, DataTables, or Livewire.

-
- -
- - -
-
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
WhenUserActionAction
Activity LogSample 1ActiveOpen
Data ChangesSample 2ActiveOpen
API AuditSample 3ActiveOpen
User ActionsSample 4ActiveOpen
-
-
-
-
-
-
- renderComponent(); ?> - - - - - - - - - - \ No newline at end of file diff --git a/storage/framework/views/e55f8fc118663131a1d9c997ae16233b.blade.php b/storage/framework/views/e55f8fc118663131a1d9c997ae16233b.blade.php deleted file mode 100755 index 849b24c4..00000000 --- a/storage/framework/views/e55f8fc118663131a1d9c997ae16233b.blade.php +++ /dev/null @@ -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. diff --git a/storage/framework/views/e7f4a27e96bdd0635d8dc5b91b4bf6df.blade.php b/storage/framework/views/e7f4a27e96bdd0635d8dc5b91b4bf6df.blade.php deleted file mode 100755 index cf46b88e..00000000 --- a/storage/framework/views/e7f4a27e96bdd0635d8dc5b91b4bf6df.blade.php +++ /dev/null @@ -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. diff --git a/storage/framework/views/ee034f19895af1b0d484543ea87b1fa4.php b/storage/framework/views/ee034f19895af1b0d484543ea87b1fa4.php deleted file mode 100755 index d6659c66..00000000 --- a/storage/framework/views/ee034f19895af1b0d484543ea87b1fa4.php +++ /dev/null @@ -1,64 +0,0 @@ - - - 'f4ac99e09542ff494432bc959d4fee61::app','data' => ['title' => __('Warehouses')]] + (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag ? $attributes->all() : [])); ?> -withName('layouts::app'); ?> -shouldRender()): ?> -startComponent($component->resolveView(), $component->data()); ?> - -except(\Illuminate\View\AnonymousComponent::ignoredParameterNames()); ?> - -withAttributes(['title' => \Illuminate\View\Compilers\BladeCompiler::sanitizeComponentAttribute(__('Warehouses'))]); ?> - - -
- - - '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() : [])); ?> -withName('wms.page-hero'); ?> -shouldRender()): ?> -startComponent($component->resolveView(), $component->data()); ?> - -except(\Illuminate\View\AnonymousComponent::ignoredParameterNames()); ?> - -withAttributes(['eyebrow' => 'Administration','title' => 'Warehouses','description' => 'Create and manage warehouse records, tenant ownership and operational locations.','icon' => 'fa-solid fa-warehouse']); ?> - - -renderComponent(); ?> - - - - - - - - - -
-

Create warehouse

-
- - - - - -
-
-
- addLoop($__currentLoopData); foreach($__currentLoopData as $warehouse): $__env->incrementLoopIndices(); $loop = $__env->getLastLoop(); ?> -

code); ?>

name); ?>

validation_rules_count); ?> rules

- popLoop(); $loop = $__env->getLastLoop(); ?> -
- links()); ?> - -
- renderComponent(); ?> - - - - - - - - - - \ No newline at end of file diff --git a/storage/framework/views/efe75c7c0953490022ba5bd3c31dea8d.blade.php b/storage/framework/views/efe75c7c0953490022ba5bd3c31dea8d.blade.php deleted file mode 100755 index 79f52070..00000000 --- a/storage/framework/views/efe75c7c0953490022ba5bd3c31dea8d.blade.php +++ /dev/null @@ -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. diff --git a/storage/framework/views/f407c5224019b100e738e4c1a2968ef4.php b/storage/framework/views/f407c5224019b100e738e4c1a2968ef4.php deleted file mode 100755 index 6599e59d..00000000 --- a/storage/framework/views/f407c5224019b100e738e4c1a2968ef4.php +++ /dev/null @@ -1,147 +0,0 @@ - - - 'f4ac99e09542ff494432bc959d4fee61::app','data' => ['title' => __('Sentinel Integration')]] + (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag ? $attributes->all() : [])); ?> -withName('layouts::app'); ?> -shouldRender()): ?> -startComponent($component->resolveView(), $component->data()); ?> - -except(\Illuminate\View\AnonymousComponent::ignoredParameterNames()); ?> - -withAttributes(['title' => \Illuminate\View\Compilers\BladeCompiler::sanitizeComponentAttribute(__('Sentinel Integration'))]); ?> - - -
-
-
- - - '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() : [])); ?> -withName('wms.page-hero'); ?> -shouldRender()): ?> -startComponent($component->resolveView(), $component->data()); ?> - -except(\Illuminate\View\AnonymousComponent::ignoredParameterNames()); ?> - -withAttributes(['eyebrow' => 'Operations','title' => 'Sentinel Integration','description' => 'Track Sentinel API activity, inbound receiver events, and interface status.','icon' => 'fa-solid fa-satellite-dish']); ?> - - -renderComponent(); ?> - - - - - - - - - -
- -
-
-
-
01
-

Sentinel Receiver

-

Placeholder area for sentinel receiver.

-
-
-
-
-
-
-
02
-

API Activity

-

Placeholder area for api activity.

-
-
-
-
-
-
-
03
-

Interface Health

-

Placeholder area for interface health.

-
-
-
-
-
-
-
04
-

Payload Archive

-

Placeholder area for payload archive.

-
-
-
- -
-
-
-
-
-

Sentinel Integration workbench

-

Sample table layout ready to wire into controllers, queries, DataTables, or Livewire.

-
- -
- - -
-
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
EndpointReferenceHTTPAction
Sentinel ReceiverSample 1ActiveOpen
API ActivitySample 2ActiveOpen
Interface HealthSample 3ActiveOpen
Payload ArchiveSample 4ActiveOpen
-
-
-
-
-
-
- renderComponent(); ?> - - - - - - - - - - \ No newline at end of file diff --git a/storage/framework/views/f7ba47728e3a16e6412f9c1cb6a08984.php b/storage/framework/views/f7ba47728e3a16e6412f9c1cb6a08984.php deleted file mode 100755 index 2a724dc2..00000000 --- a/storage/framework/views/f7ba47728e3a16e6412f9c1cb6a08984.php +++ /dev/null @@ -1,147 +0,0 @@ - - - 'f4ac99e09542ff494432bc959d4fee61::app','data' => ['title' => __('Analytics')]] + (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag ? $attributes->all() : [])); ?> -withName('layouts::app'); ?> -shouldRender()): ?> -startComponent($component->resolveView(), $component->data()); ?> - -except(\Illuminate\View\AnonymousComponent::ignoredParameterNames()); ?> - -withAttributes(['title' => \Illuminate\View\Compilers\BladeCompiler::sanitizeComponentAttribute(__('Analytics'))]); ?> - - -
-
-
- - - '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() : [])); ?> -withName('wms.page-hero'); ?> -shouldRender()): ?> -startComponent($component->resolveView(), $component->data()); ?> - -except(\Illuminate\View\AnonymousComponent::ignoredParameterNames()); ?> - -withAttributes(['eyebrow' => 'Operations','title' => 'Analytics','description' => 'Display KPIs, warehouse performance trends, executive summaries, and OTTC analysis.','icon' => 'fa-solid fa-chart-line']); ?> - - -renderComponent(); ?> - - - - - - - - - -
- -
-
-
-
01
-

KPI1 Bar

-

Placeholder area for kpi1 bar.

-
-
-
-
-
-
-
02
-

KPI1 Line

-

Placeholder area for kpi1 line.

-
-
-
-
-
-
-
03
-

OTTC

-

Placeholder area for ottc.

-
-
-
-
-
-
-
04
-

Warehouse Performance

-

Placeholder area for warehouse performance.

-
-
-
- -
-
-
-
-
-

Analytics workbench

-

Sample table layout ready to wire into controllers, queries, DataTables, or Livewire.

-
- -
- - -
-
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
MetricTodayWeekAction
KPI1 BarSample 1ActiveOpen
KPI1 LineSample 2ActiveOpen
OTTCSample 3ActiveOpen
Warehouse PerformanceSample 4ActiveOpen
-
-
-
-
-
-
- renderComponent(); ?> - - - - - - - - - - \ No newline at end of file diff --git a/storage/framework/views/fe6625f603a7e8e776c7e813e2f60270.php b/storage/framework/views/fe6625f603a7e8e776c7e813e2f60270.php deleted file mode 100755 index 5fb405a8..00000000 --- a/storage/framework/views/fe6625f603a7e8e776c7e813e2f60270.php +++ /dev/null @@ -1,147 +0,0 @@ - - - 'f4ac99e09542ff494432bc959d4fee61::app','data' => ['title' => __('Inventory Management')]] + (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag ? $attributes->all() : [])); ?> -withName('layouts::app'); ?> -shouldRender()): ?> -startComponent($component->resolveView(), $component->data()); ?> - -except(\Illuminate\View\AnonymousComponent::ignoredParameterNames()); ?> - -withAttributes(['title' => \Illuminate\View\Compilers\BladeCompiler::sanitizeComponentAttribute(__('Inventory Management'))]); ?> - - -
-
-
- - - '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() : [])); ?> -withName('wms.page-hero'); ?> -shouldRender()): ?> -startComponent($component->resolveView(), $component->data()); ?> - -except(\Illuminate\View\AnonymousComponent::ignoredParameterNames()); ?> - -withAttributes(['eyebrow' => 'Operations','title' => 'Inventory Management','description' => 'Track inventory movement, stock visibility, pallet quantities, and product availability.','icon' => 'fa-solid fa-boxes-stacked']); ?> - - -renderComponent(); ?> - - - - - - - - - -
- -
-
-
-
01
-

Stock Overview

-

Placeholder area for stock overview.

-
-
-
-
-
-
-
02
-

Pallet Quantity Rules

-

Placeholder area for pallet quantity rules.

-
-
-
-
-
-
-
03
-

Inventory Exceptions

-

Placeholder area for inventory exceptions.

-
-
-
-
-
-
-
04
-

Product Movement

-

Placeholder area for product movement.

-
-
-
- -
-
-
-
-
-

Inventory Management workbench

-

Sample table layout ready to wire into controllers, queries, DataTables, or Livewire.

-
- -
- - -
-
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Part NumberDescriptionPallet QtyAction
Stock OverviewSample 1ActiveOpen
Pallet Quantity RulesSample 2ActiveOpen
Inventory ExceptionsSample 3ActiveOpen
Product MovementSample 4ActiveOpen
-
-
-
-
-
-
- renderComponent(); ?> - - - - - - - - - - \ No newline at end of file