From 276f03a17be8de13059f53d9a4cef2fc2e5f8f51 Mon Sep 17 00:00:00 2001 From: Mark Gregory Date: Wed, 10 Jun 2026 14:04:49 +0100 Subject: [PATCH] major update --- FIX_NOTES.md | 22 +++++ artisan | 0 bootstrap/cache/.gitignore | 0 ..._add_two_factor_columns_to_users_table.php | 30 ++++--- ..._add_two_factor_columns_to_users_table.php | 42 +++------ public/.htaccess | 0 resources/css/app.css | 87 +++++++++++-------- resources/views/layouts/app.blade.php | 4 +- resources/views/layouts/app/sidebar.blade.php | 20 +++-- storage/app/.gitignore | 0 storage/app/private/.gitignore | 0 storage/app/public/.gitignore | 0 storage/debugbar/.gitignore | 0 storage/framework/.gitignore | 0 storage/framework/cache/data/.gitkeep | 0 storage/framework/sessions/.gitkeep | 0 storage/framework/testing/.gitignore | 0 storage/framework/views/.gitkeep | 0 .../0b021b1086678ed6dddc88da73604ad2.php | 9 +- .../3ff2ddb36f755add3b8b328d8cb6e0cb.php | 2 +- .../479cf094ff202d6db5679d5ffb675bf3.php | 37 -------- .../c47a7698d859fe0603a8ccaf476ef2fa.php | 2 +- .../e9fe329cbd986d5723d2692e449cddae.php | 2 +- .../db73a299c44034f39f71d9fea75fba3c.php | 24 ++--- storage/logs/.gitkeep | 0 storage/logs/laravel.log | 0 26 files changed, 129 insertions(+), 152 deletions(-) create mode 100644 FIX_NOTES.md mode change 100755 => 100644 artisan mode change 100755 => 100644 bootstrap/cache/.gitignore mode change 100755 => 100644 public/.htaccess mode change 100755 => 100644 storage/app/.gitignore mode change 100755 => 100644 storage/app/private/.gitignore mode change 100755 => 100644 storage/app/public/.gitignore mode change 100755 => 100644 storage/debugbar/.gitignore mode change 100755 => 100644 storage/framework/.gitignore create mode 100644 storage/framework/cache/data/.gitkeep create mode 100644 storage/framework/sessions/.gitkeep mode change 100755 => 100644 storage/framework/testing/.gitignore create mode 100644 storage/framework/views/.gitkeep delete mode 100755 storage/framework/views/blaze/479cf094ff202d6db5679d5ffb675bf3.php create mode 100644 storage/logs/.gitkeep mode change 100755 => 100644 storage/logs/laravel.log diff --git a/FIX_NOTES.md b/FIX_NOTES.md new file mode 100644 index 00000000..d31575b3 --- /dev/null +++ b/FIX_NOTES.md @@ -0,0 +1,22 @@ +# WMS Fix Notes + +This build patches only the current uploaded code. + +## Fixed + +- Duplicate two-factor migration made safe. +- Primary two-factor migration adds columns one at a time for SQLite safety. +- Module page slot is wrapped in a visible `.wms-content` main container. +- Sidebar remains traditional: desktop/tablet icon rail, mobile drawer. +- Sidebar widened for "Warehouse Management System". +- Laravel cache folders are included so "Please provide a valid cache path" does not recur after unzip. + +## After unzip + +```bash +composer install +npm install +php artisan optimize:clear +php artisan test +npm run build +``` diff --git a/artisan b/artisan old mode 100755 new mode 100644 diff --git a/bootstrap/cache/.gitignore b/bootstrap/cache/.gitignore old mode 100755 new mode 100644 diff --git a/database/migrations/2025_08_14_170933_add_two_factor_columns_to_users_table.php b/database/migrations/2025_08_14_170933_add_two_factor_columns_to_users_table.php index 2dc045a5..a8d3d7da 100644 --- a/database/migrations/2025_08_14_170933_add_two_factor_columns_to_users_table.php +++ b/database/migrations/2025_08_14_170933_add_two_factor_columns_to_users_table.php @@ -15,19 +15,23 @@ return new class extends Migration return; } - Schema::table('users', function (Blueprint $table): void { - if (! Schema::hasColumn('users', 'two_factor_secret')) { + if (! Schema::hasColumn('users', 'two_factor_secret')) { + Schema::table('users', function (Blueprint $table): void { $table->text('two_factor_secret')->nullable()->after('password'); - } + }); + } - if (! Schema::hasColumn('users', 'two_factor_recovery_codes')) { + if (! Schema::hasColumn('users', 'two_factor_recovery_codes')) { + Schema::table('users', function (Blueprint $table): void { $table->text('two_factor_recovery_codes')->nullable()->after('two_factor_secret'); - } + }); + } - if (! Schema::hasColumn('users', 'two_factor_confirmed_at')) { + if (! Schema::hasColumn('users', 'two_factor_confirmed_at')) { + Schema::table('users', function (Blueprint $table): void { $table->timestamp('two_factor_confirmed_at')->nullable()->after('two_factor_recovery_codes'); - } - }); + }); + } } /** @@ -39,12 +43,12 @@ return new class extends Migration return; } - Schema::table('users', function (Blueprint $table): void { - foreach (['two_factor_confirmed_at', 'two_factor_recovery_codes', 'two_factor_secret'] as $column) { - if (Schema::hasColumn('users', $column)) { + foreach (['two_factor_confirmed_at', 'two_factor_recovery_codes', 'two_factor_secret'] as $column) { + if (Schema::hasColumn('users', $column)) { + Schema::table('users', function (Blueprint $table) use ($column): void { $table->dropColumn($column); - } + }); } - }); + } } }; diff --git a/database/migrations/2026_06_10_123344_add_two_factor_columns_to_users_table.php b/database/migrations/2026_06_10_123344_add_two_factor_columns_to_users_table.php index 2dc045a5..7b8972f0 100644 --- a/database/migrations/2026_06_10_123344_add_two_factor_columns_to_users_table.php +++ b/database/migrations/2026_06_10_123344_add_two_factor_columns_to_users_table.php @@ -1,50 +1,28 @@ text('two_factor_secret')->nullable()->after('password'); - } - - if (! Schema::hasColumn('users', 'two_factor_recovery_codes')) { - $table->text('two_factor_recovery_codes')->nullable()->after('two_factor_secret'); - } - - if (! Schema::hasColumn('users', 'two_factor_confirmed_at')) { - $table->timestamp('two_factor_confirmed_at')->nullable()->after('two_factor_recovery_codes'); - } - }); + // } /** - * Reverse the migrations. + * Reverse the migration. */ public function down(): void { - if (! Schema::hasTable('users')) { - return; - } - - Schema::table('users', function (Blueprint $table): void { - foreach (['two_factor_confirmed_at', 'two_factor_recovery_codes', 'two_factor_secret'] as $column) { - if (Schema::hasColumn('users', $column)) { - $table->dropColumn($column); - } - } - }); + // } }; diff --git a/public/.htaccess b/public/.htaccess old mode 100755 new mode 100644 diff --git a/resources/css/app.css b/resources/css/app.css index d4e35559..fd378106 100644 --- a/resources/css/app.css +++ b/resources/css/app.css @@ -81,8 +81,8 @@ select:focus[data-flux-control] { top: 0; z-index: 40; display: flex; - width: 20rem; - min-width: 20rem; + width: 21.5rem; + min-width: 21.5rem; height: 100vh; flex-direction: column; border-right: 1px solid rgb(228 228 231); @@ -99,8 +99,8 @@ select:focus[data-flux-control] { display: flex; align-items: center; gap: 0.75rem; - min-height: 4.5rem; - padding: 0.875rem; + min-height: 4.75rem; + padding: 0.95rem; border-bottom: 1px solid rgb(228 228 231); } @@ -120,11 +120,11 @@ select:focus[data-flux-control] { .wms-brand-mark { display: grid; - width: 2.35rem; - height: 2.35rem; + width: 2.5rem; + height: 2.5rem; flex: 0 0 auto; place-items: center; - border-radius: 0.75rem; + border-radius: 0.85rem; background: linear-gradient(135deg, rgb(15 23 42), rgb(14 116 144)); color: white; box-shadow: 0 12px 24px rgb(15 23 42 / 0.22); @@ -143,12 +143,12 @@ select:focus[data-flux-control] { } .wms-brand-title { - max-width: 14rem; + max-width: 16rem; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; - font-size: 0.94rem; - font-weight: 750; + font-size: 0.98rem; + font-weight: 800; color: rgb(24 24 27); } @@ -157,9 +157,9 @@ select:focus[data-flux-control] { } .wms-brand-subtitle { - margin-top: 0.15rem; + margin-top: 0.18rem; font-size: 0.72rem; - font-weight: 700; + font-weight: 800; letter-spacing: 0.14em; color: rgb(8 145 178); } @@ -177,8 +177,9 @@ select:focus[data-flux-control] { } .wms-sidebar-toggle { - width: 2rem; - height: 2rem; + width: 2.15rem; + height: 2.15rem; + flex: 0 0 auto; font-size: 1.35rem; font-weight: 800; line-height: 1; @@ -205,8 +206,8 @@ select:focus[data-flux-control] { .wms-mobile-close { display: none; - width: 2rem; - height: 2rem; + width: 2.15rem; + height: 2.15rem; font-size: 1.4rem; line-height: 1; } @@ -214,7 +215,7 @@ select:focus[data-flux-control] { .wms-sidebar-nav { flex: 1; overflow-y: auto; - padding: 0.85rem; + padding: 0.9rem; } .wms-sidebar-group + .wms-sidebar-group { @@ -233,13 +234,13 @@ select:focus[data-flux-control] { .wms-sidebar-link { position: relative; display: flex; - min-height: 2.55rem; + min-height: 2.65rem; align-items: center; - gap: 0.75rem; - border-radius: 0.75rem; - padding: 0.625rem 0.7rem; + gap: 0.78rem; + border-radius: 0.8rem; + padding: 0.65rem 0.75rem; color: rgb(63 63 70); - font-size: 0.9rem; + font-size: 0.92rem; font-weight: 650; text-decoration: none; transition: background 120ms ease, color 120ms ease; @@ -270,8 +271,8 @@ select:focus[data-flux-control] { } .wms-sidebar-icon { - width: 1.2rem; - min-width: 1.2rem; + width: 1.25rem; + min-width: 1.25rem; text-align: center; font-size: 1rem; } @@ -280,7 +281,7 @@ select:focus[data-flux-control] { display: grid; gap: 0.25rem; border-top: 1px solid rgb(228 228 231); - padding: 0.85rem; + padding: 0.9rem; } .dark .wms-sidebar-footer { @@ -341,6 +342,17 @@ select:focus[data-flux-control] { .wms-main-column { min-width: 0; flex: 1; + display: flex; + min-height: 100vh; + flex-direction: column; + } + + .wms-content { + display: block; + width: 100%; + min-width: 0; + flex: 1; + padding: 1.5rem; } .wms-mobile-header { @@ -352,8 +364,8 @@ select:focus[data-flux-control] { } html[data-wms-sidebar='collapsed'] .wms-sidebar { - width: 5.25rem; - min-width: 5.25rem; + width: 5.5rem; + min-width: 5.5rem; } html[data-wms-sidebar='collapsed'] [data-wms-sidebar-label] { @@ -364,8 +376,8 @@ select:focus[data-flux-control] { html[data-wms-sidebar='collapsed'] .wms-sidebar-footer, html[data-wms-sidebar='collapsed'] .wms-sidebar-nav { align-items: center; - padding-left: 0.65rem; - padding-right: 0.65rem; + padding-left: 0.7rem; + padding-right: 0.7rem; } html[data-wms-sidebar='collapsed'] .wms-brand { @@ -379,8 +391,8 @@ select:focus[data-flux-control] { html[data-wms-sidebar='collapsed'] .wms-sidebar-link { justify-content: center; - padding-left: 0.65rem; - padding-right: 0.65rem; + padding-left: 0.7rem; + padding-right: 0.7rem; } html[data-wms-sidebar='collapsed'] .wms-toggle-expanded { @@ -399,8 +411,8 @@ select:focus[data-flux-control] { .wms-sidebar { position: fixed; inset: 0 auto 0 0; - width: min(21rem, calc(100vw - 2.5rem)); - min-width: min(21rem, calc(100vw - 2.5rem)); + width: min(21.5rem, calc(100vw - 2.5rem)); + min-width: min(21.5rem, calc(100vw - 2.5rem)); transform: translateX(-105%); box-shadow: 22px 0 60px rgb(0 0 0 / 0.24); } @@ -419,8 +431,8 @@ select:focus[data-flux-control] { } html[data-wms-sidebar='collapsed'] .wms-sidebar { - width: min(21rem, calc(100vw - 2.5rem)); - min-width: min(21rem, calc(100vw - 2.5rem)); + width: min(21.5rem, calc(100vw - 2.5rem)); + min-width: min(21.5rem, calc(100vw - 2.5rem)); } html[data-wms-sidebar='collapsed'] [data-wms-sidebar-label] { @@ -429,7 +441,6 @@ select:focus[data-flux-control] { html[data-wms-sidebar='collapsed'] .wms-brand-copy, html[data-wms-sidebar='collapsed'] .wms-sidebar-heading, - html[data-wms-sidebar='collapsed'] .wms-user-card span, html[data-wms-sidebar='collapsed'] .wms-sidebar-link span { display: block !important; } @@ -482,5 +493,9 @@ select:focus[data-flux-control] { font-weight: 800; text-decoration: none; } + + .wms-content { + padding: 1rem; + } } } diff --git a/resources/views/layouts/app.blade.php b/resources/views/layouts/app.blade.php index 037dd1bd..f2e85e61 100644 --- a/resources/views/layouts/app.blade.php +++ b/resources/views/layouts/app.blade.php @@ -1,5 +1,3 @@ - - {{ $slot }} - + {{ $slot }} diff --git a/resources/views/layouts/app/sidebar.blade.php b/resources/views/layouts/app/sidebar.blade.php index c171ee8d..08411c7b 100644 --- a/resources/views/layouts/app/sidebar.blade.php +++ b/resources/views/layouts/app/sidebar.blade.php @@ -101,10 +101,10 @@
-
{{ auth()->user()->initials() }}
+
{{ auth()->user()?->initials() ?? 'U' }}
-
{{ auth()->user()->name }}
-
{{ auth()->user()->email }}
+
{{ auth()->user()?->name ?? __('User') }}
+
{{ auth()->user()?->email ?? '' }}
@@ -122,7 +122,7 @@ @@ -131,13 +131,13 @@
- {{ auth()->user()->name }} - {{ auth()->user()->email }} + {{ auth()->user()?->name ?? __('User') }} + {{ auth()->user()?->email ?? '' }}
@@ -169,7 +169,9 @@
- {{ $slot }} +
+ {{ $slot }} +
diff --git a/storage/app/.gitignore b/storage/app/.gitignore old mode 100755 new mode 100644 diff --git a/storage/app/private/.gitignore b/storage/app/private/.gitignore old mode 100755 new mode 100644 diff --git a/storage/app/public/.gitignore b/storage/app/public/.gitignore old mode 100755 new mode 100644 diff --git a/storage/debugbar/.gitignore b/storage/debugbar/.gitignore old mode 100755 new mode 100644 diff --git a/storage/framework/.gitignore b/storage/framework/.gitignore old mode 100755 new mode 100644 diff --git a/storage/framework/cache/data/.gitkeep b/storage/framework/cache/data/.gitkeep new file mode 100644 index 00000000..e69de29b diff --git a/storage/framework/sessions/.gitkeep b/storage/framework/sessions/.gitkeep new file mode 100644 index 00000000..e69de29b diff --git a/storage/framework/testing/.gitignore b/storage/framework/testing/.gitignore old mode 100755 new mode 100644 diff --git a/storage/framework/views/.gitkeep b/storage/framework/views/.gitkeep new file mode 100644 index 00000000..e69de29b diff --git a/storage/framework/views/0b021b1086678ed6dddc88da73604ad2.php b/storage/framework/views/0b021b1086678ed6dddc88da73604ad2.php index 5dad6b4f..bc8ed5fa 100755 --- a/storage/framework/views/0b021b1086678ed6dddc88da73604ad2.php +++ b/storage/framework/views/0b021b1086678ed6dddc88da73604ad2.php @@ -1,4 +1,3 @@ - 'f4ac99e09542ff494432bc959d4fee61::app.sidebar','data' => ['title' => $title ?? null]] + (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag ? $attributes->all() : [])); ?> @@ -11,14 +10,8 @@ withAttributes(['title' => \Illuminate\View\Compilers\BladeCompiler::sanitizeComponentAttribute($title ?? null)]); ?> -
- - + - - -
- renderComponent(); ?> diff --git a/storage/framework/views/blaze/3ff2ddb36f755add3b8b328d8cb6e0cb.php b/storage/framework/views/blaze/3ff2ddb36f755add3b8b328d8cb6e0cb.php index 6692ee80..8eaf1508 100755 --- a/storage/framework/views/blaze/3ff2ddb36f755add3b8b328d8cb6e0cb.php +++ b/storage/framework/views/blaze/3ff2ddb36f755add3b8b328d8cb6e0cb.php @@ -140,7 +140,7 @@ if (! $overflow) { data-modal="" data-flux-flyout data-flux-modal-overflow - [STARTCOMPILEDUNBLAZE:KUz7elYtTH] $name]) ?>[ENDCOMPILEDUNBLAZE:KUz7elYtTH] + [STARTCOMPILEDUNBLAZE:uSVaNUUEkT] $name]) ?>[ENDCOMPILEDUNBLAZE:uSVaNUUEkT] x-on:modal-show.document="handleShow($event)" x-on:modal-close.document="handleClose($event)" > diff --git a/storage/framework/views/blaze/479cf094ff202d6db5679d5ffb675bf3.php b/storage/framework/views/blaze/479cf094ff202d6db5679d5ffb675bf3.php deleted file mode 100755 index 1e45edc9..00000000 --- a/storage/framework/views/blaze/479cf094ff202d6db5679d5ffb675bf3.php +++ /dev/null @@ -1,37 +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, -]; -$container ??= $attributes['container'] ?? $__defaults['container']; unset($attributes['container']); -unset($__defaults); -?> - -add('p-6 lg:p-8') - ->add('[[data-flux-container]_&]:px-0') // If there is a wrapping container, let IT handle the x padding... - ->add($container ? 'mx-auto w-full [:where(&)]:max-w-7xl' : '') - ; -?> - -
class($classes)); ?> data-flux-main> - - -
-processPassthroughContent('ltrim', ltrim(ob_get_clean())); -} endif; ?> \ No newline at end of file diff --git a/storage/framework/views/blaze/c47a7698d859fe0603a8ccaf476ef2fa.php b/storage/framework/views/blaze/c47a7698d859fe0603a8ccaf476ef2fa.php index 2d60677e..a779545a 100755 --- a/storage/framework/views/blaze/c47a7698d859fe0603a8ccaf476ef2fa.php +++ b/storage/framework/views/blaze/c47a7698d859fe0603a8ccaf476ef2fa.php @@ -89,7 +89,7 @@ unset($__defaults); - [STARTCOMPILEDUNBLAZE:zdSLnBCXT5] $errorAttributes->getAttributes()]) ?>[ENDCOMPILEDUNBLAZE:zdSLnBCXT5] + [STARTCOMPILEDUNBLAZE:BBYZS6M6TE] $errorAttributes->getAttributes()]) ?>[ENDCOMPILEDUNBLAZE:BBYZS6M6TE] ensureRequired('/Users/mag/Sites/WMS/Concepts/WMS_Core/vendor/livewire/flux/src/../stubs/resources/views/flux/description.blade.php', $__blaze->compiledPath.'/28fe7d5cd6608b5b07e3a8f31e8619b9.php'); ?> diff --git a/storage/framework/views/blaze/e9fe329cbd986d5723d2692e449cddae.php b/storage/framework/views/blaze/e9fe329cbd986d5723d2692e449cddae.php index 3558c5f4..05bcf967 100755 --- a/storage/framework/views/blaze/e9fe329cbd986d5723d2692e449cddae.php +++ b/storage/framework/views/blaze/e9fe329cbd986d5723d2692e449cddae.php @@ -205,7 +205,7 @@ $classes = Flux::classes() name="" x-mask:dynamic="" x-mask="" size="" - [STARTCOMPILEDUNBLAZE:HQePYZMT6f] $name ?? null, 'invalid' => $invalid ?? false]) ?>[ENDCOMPILEDUNBLAZE:HQePYZMT6f] + [STARTCOMPILEDUNBLAZE:pR9HiWyohS] $name ?? null, 'invalid' => $invalid ?? false]) ?>[ENDCOMPILEDUNBLAZE:pR9HiWyohS] data-flux-control data-flux-group-target wire:loading.class="" diff --git a/storage/framework/views/db73a299c44034f39f71d9fea75fba3c.php b/storage/framework/views/db73a299c44034f39f71d9fea75fba3c.php index bcce637b..b0036c09 100755 --- a/storage/framework/views/db73a299c44034f39f71d9fea75fba3c.php +++ b/storage/framework/views/db73a299c44034f39f71d9fea75fba3c.php @@ -113,10 +113,10 @@
-
user()->initials()); ?>
+
user()?->initials() ?? 'U'); ?>
-
user()->name); ?>
-
user()->email); ?>
+
user()?->name ?? __('User')); ?>
+
user()?->email ?? ''); ?>
@@ -136,8 +136,8 @@ ensureRequired('/Users/mag/Sites/WMS/Concepts/WMS_Core/vendor/livewire/flux/src/../stubs/resources/views/flux/profile.blade.php', $__blaze->compiledPath.'/136cb3dd3f602ba4df5729c573589639.php'); ?> -pushData(['initials' => auth()->user()->initials(),'iconTrailing' => 'chevron-down']); ?> - auth()->user()->initials(),'iconTrailing' => 'chevron-down'], [], ['initials'], ['iconTrailing' => 'icon-trailing'], $__this ?? (isset($this) ? $this : null)); ?> +pushData(['initials' => auth()->user()?->initials() ?? 'U','iconTrailing' => 'chevron-down']); ?> + auth()->user()?->initials() ?? 'U','iconTrailing' => 'chevron-down'], [], ['initials'], ['iconTrailing' => 'icon-trailing'], $__this ?? (isset($this) ? $this : null)); ?> popData(); ?>
- auth()->user()->name, 'initials' => auth()->user()->initials()]); ?>ensureRequired('/Users/mag/Sites/WMS/Concepts/WMS_Core/vendor/livewire/flux/src/../stubs/resources/views/flux/avatar/index.blade.php', $__blaze->compiledPath.'/c62016d9aaa9eefc3be8277726982d94.php'); ?> -pushData(['name' => auth()->user()->name,'initials' => auth()->user()->initials()]); ?> - auth()->user()->name,'initials' => auth()->user()->initials()], [], ['name', 'initials'], [], $__this ?? (isset($this) ? $this : null)); ?> + auth()->user()?->name ?? 'User', 'initials' => auth()->user()?->initials() ?? 'U']); ?>ensureRequired('/Users/mag/Sites/WMS/Concepts/WMS_Core/vendor/livewire/flux/src/../stubs/resources/views/flux/avatar/index.blade.php', $__blaze->compiledPath.'/c62016d9aaa9eefc3be8277726982d94.php'); ?> +pushData(['name' => auth()->user()?->name ?? 'User','initials' => auth()->user()?->initials() ?? 'U']); ?> + auth()->user()?->name ?? 'User','initials' => auth()->user()?->initials() ?? 'U'], [], ['name', 'initials'], [], $__this ?? (isset($this) ? $this : null)); ?> popData(); ?>
-
user()->name); ?>
+
user()?->name ?? __('User')); ?>
-

user()->email); ?>

+

user()?->email ?? ''); ?>

@@ -225,8 +225,10 @@ - +
+ +
diff --git a/storage/logs/.gitkeep b/storage/logs/.gitkeep new file mode 100644 index 00000000..e69de29b diff --git a/storage/logs/laravel.log b/storage/logs/laravel.log old mode 100755 new mode 100644