new gui layout

This commit is contained in:
Mark Gregory
2026-06-11 10:27:18 +01:00
parent 0445b71f33
commit 071a11bf13
9 changed files with 454 additions and 252 deletions
+126 -130
View File
@@ -389,6 +389,101 @@ select:focus[data-flux-control] {
padding: 1.5rem;
}
.wms-main-panel {
min-width: 0;
flex: 1;
display: flex;
min-height: 100vh;
flex-direction: column;
}
.wms-page-hero {
display: flex;
align-items: center;
justify-content: space-between;
gap: 2rem;
margin-bottom: 1.75rem;
border-radius: 1.35rem;
padding: 3rem 3.25rem;
background:
radial-gradient(circle at 95% 85%, rgb(8 145 178 / 0.62), transparent 36%),
linear-gradient(135deg, rgb(4 8 24), rgb(10 18 42) 54%, rgb(7 44 58));
color: white;
box-shadow: 0 24px 60px rgb(0 0 0 / 0.30);
}
.wms-page-hero-copy {
min-width: 0;
max-width: 58rem;
}
.wms-page-hero-kicker {
margin-bottom: 1rem;
color: rgb(103 232 249);
font-size: 0.9rem;
font-weight: 900;
letter-spacing: 0.42em;
}
.wms-page-hero-title {
margin: 0;
font-size: clamp(2.5rem, 5vw, 4.7rem);
font-weight: 900;
line-height: 0.98;
letter-spacing: -0.06em;
}
.wms-page-hero-description {
max-width: 52rem;
margin-top: 1.2rem;
color: rgb(203 213 225);
font-size: clamp(1rem, 1.55vw, 1.45rem);
line-height: 1.45;
}
.wms-page-hero-actions {
display: flex;
align-items: stretch;
gap: 1rem;
flex: 0 0 auto;
}
.wms-page-hero-stat {
display: grid;
min-width: 13.75rem;
gap: 1rem;
border-radius: 1.2rem;
background: rgb(51 65 85 / 0.72);
padding: 1.45rem 1.6rem;
color: rgb(203 213 225);
backdrop-filter: blur(10px);
}
.wms-page-hero-stat strong {
display: flex;
align-items: center;
gap: 0.75rem;
color: white;
font-size: 2rem;
font-weight: 900;
line-height: 1;
}
.wms-page-hero-stat strong i {
color: rgb(74 222 128);
}
.wms-hero-mobile-menu {
display: none;
width: 3rem;
height: 3rem;
place-items: center;
align-self: flex-start;
border-radius: 0.85rem;
background: rgb(255 255 255 / 0.12);
color: white;
}
.wms-mobile-header {
display: none;
}
@@ -438,12 +533,12 @@ select:focus[data-flux-control] {
justify-items: center;
}
html[data-wms-sidebar='collapsed'] .wms-toggle-expanded {
html[data-wms-sidebar='collapsed'] .wms-sidebar-toggle {
display: none;
}
html[data-wms-sidebar='collapsed'] .wms-toggle-collapsed {
display: inline;
html[data-wms-sidebar='collapsed'] .wms-brand-mark {
cursor: pointer;
}
@media (max-width: 1023px) {
@@ -537,135 +632,36 @@ select:focus[data-flux-control] {
text-decoration: none;
}
.wms-page-hero {
align-items: flex-start;
flex-direction: column;
gap: 1.5rem;
margin-bottom: 1rem;
border-radius: 1rem;
padding: 1.35rem;
}
.wms-page-hero-actions {
width: 100%;
flex-wrap: wrap;
}
.wms-page-hero-stat {
min-width: min(12rem, 100%);
flex: 1 1 12rem;
padding: 1rem;
}
.wms-page-hero-stat strong {
font-size: 1.45rem;
}
.wms-hero-mobile-menu {
display: inline-grid;
}
.wms-content {
padding: 1rem;
}
}
}
@layer components {
.wms-main-panel {
min-width: 0;
flex: 1;
display: flex;
min-height: 100vh;
flex-direction: column;
background: rgb(250 250 250);
}
.dark .wms-main-panel {
background: rgb(9 9 11);
}
.wms-page-hero {
margin: 0.75rem 1rem 0;
overflow: hidden;
border-radius: 1rem;
background: linear-gradient(135deg, rgb(2 6 23) 0%, rgb(15 23 42) 55%, rgb(8 80 104) 100%);
color: white;
box-shadow: 0 24px 50px rgb(0 0 0 / 0.22);
}
.wms-page-hero-content {
display: flex;
align-items: center;
justify-content: space-between;
gap: 1rem;
padding: clamp(1rem, 2vw, 1.5rem);
}
.wms-page-eyebrow {
margin: 0 0 1.15rem;
color: rgb(103 232 249);
font-size: 0.9rem;
font-weight: 800;
letter-spacing: 0.32em;
text-transform: uppercase;
}
.wms-page-title {
margin: 0;
max-width: 58rem;
color: white;
font-size: clamp(1.4rem, 2vw, 2rem);
font-weight: 850;
letter-spacing: -0.06em;
line-height: 0.96;
}
.wms-page-subtitle {
margin: 0.5rem 0 0;
max-width: 60rem;
color: rgb(203 213 225);
font-size: 0.95rem;
line-height: 1.55;
}
.wms-page-metrics {
display: grid;
min-width: min(32rem, 100%);
grid-template-columns: repeat(2, minmax(0, 1fr));
gap: 1rem;
}
.wms-page-metric-card {
border-radius: 1.35rem;
background: rgb(255 255 255 / 0.12);
padding: 1.55rem;
backdrop-filter: blur(16px);
}
.wms-page-metric-label {
display: block;
color: rgb(203 213 225);
font-size: 1rem;
line-height: 1.2;
}
.wms-page-metric-value {
display: flex;
align-items: center;
gap: 0.65rem;
margin-top: 1rem;
color: white;
font-size: clamp(1.6rem, 2.4vw, 2.25rem);
font-weight: 850;
line-height: 1;
}
.wms-page-metric-ok {
color: rgb(110 231 183);
}
.wms-content {
padding-top: 1.5rem;
}
.module-page > .row > .col-12:first-child:has(.module-hero) {
display: none;
}
@media (max-width: 1023px) {
.wms-page-hero {
margin: 1rem 1rem 0;
border-radius: 1.35rem;
}
.wms-page-hero-content {
align-items: flex-start;
flex-direction: column;
padding: 1.6rem;
}
.wms-page-metrics {
min-width: 0;
width: 100%;
}
}
@media (max-width: 640px) {
.wms-page-metrics {
grid-template-columns: 1fr;
}
}
}
@@ -0,0 +1,32 @@
@props([
'eyebrow' => 'MPBA WMS',
'title',
'description' => null,
'stats' => [],
])
<section class="wms-page-hero">
<div class="wms-page-hero-copy">
<p class="wms-page-hero-eyebrow">{{ $eyebrow }}</p>
<h1 class="wms-page-hero-title">{{ $title }}</h1>
@if($description)
<p class="wms-page-hero-description">{{ $description }}</p>
@endif
</div>
@if(count($stats))
<div class="wms-page-hero-stats">
@foreach($stats as $stat)
<article class="wms-page-hero-stat">
<p class="wms-page-hero-stat-label">{{ $stat['label'] ?? '' }}</p>
<p class="wms-page-hero-stat-value">
@if(! empty($stat['icon']))
<i class="{{ $stat['icon'] }}" aria-hidden="true"></i>
@endif
<span>{{ $stat['value'] ?? '' }}</span>
</p>
</article>
@endforeach
</div>
@endif
</section>
+71 -60
View File
@@ -11,7 +11,7 @@
<aside class="wms-sidebar" data-wms-sidebar aria-label="{{ __('Main navigation') }}">
<div class="wms-sidebar-header">
<a href="{{ auth()->user()?->isMpbaPlatformAdmin() && Route::has('platform.dashboard') ? route('platform.dashboard') : route('dashboard') }}" wire:navigate class="wms-brand" aria-label="{{ __('Warehouse Management System') }}">
<span class="wms-brand-mark"><span class="wms-brand-mark-inner">W</span></span>
<span class="wms-brand-mark" data-wms-brand-toggle title="{{ __('Expand sidebar') }}"><span class="wms-brand-mark-inner">W</span></span>
<span class="wms-brand-copy" data-wms-sidebar-label>
<span class="wms-brand-title">{{ __('Warehouse Management System') }}</span>
<span class="wms-brand-subtitle">MPBA</span>
@@ -20,25 +20,16 @@
<button type="button" class="wms-sidebar-toggle" data-wms-sidebar-toggle aria-label="{{ __('Collapse sidebar') }}" aria-expanded="true">
<span class="wms-toggle-expanded">‹</span>
<span class="wms-toggle-collapsed">›</span>
</button>
<button type="button" class="wms-mobile-close" data-wms-mobile-close aria-label="{{ __('Close navigation') }}">×</button>
</div>
<nav class="wms-sidebar-nav" aria-label="{{ __('Main navigation') }}">
@php
$moduleStatusesPath = base_path('modules_statuses.json');
$moduleStatuses = is_file($moduleStatusesPath)
? json_decode((string) file_get_contents($moduleStatusesPath), true)
: [];
$moduleEnabled = static fn (string $module): bool => ($moduleStatuses[$module] ?? false) === true;
@endphp
<div class="wms-sidebar-group">
<div class="wms-sidebar-heading" data-wms-sidebar-label>{{ __('Platform') }}</div>
@if($moduleEnabled('Platform') && auth()->user()?->isMpbaPlatformAdmin() && Route::has('platform.dashboard'))
@if(auth()->user()?->isMpbaPlatformAdmin() && Route::has('platform.dashboard'))
<a href="{{ route('platform.dashboard') }}" wire:navigate class="wms-sidebar-link @if(request()->routeIs('platform.dashboard')) is-active @endif" title="{{ __('Platform') }}">
<i class="fa-solid fa-screwdriver-wrench wms-sidebar-icon" aria-hidden="true"></i>
<span data-wms-sidebar-label>{{ __('Platform') }}</span>
@@ -54,37 +45,37 @@
<div class="wms-sidebar-group">
<div class="wms-sidebar-heading" data-wms-sidebar-label>{{ __('Operations') }}</div>
@if($moduleEnabled('Analytics') && Route::has('analytics.index'))
@if(Route::has('analytics.index'))
<a href="{{ route('analytics.index') }}" wire:navigate class="wms-sidebar-link @if(request()->routeIs('analytics.*')) is-active @endif" title="{{ __('Analytics') }}">
<i class="fa-solid fa-chart-line wms-sidebar-icon" aria-hidden="true"></i>
<span data-wms-sidebar-label>{{ __('Analytics') }}</span>
</a>
@endif
@if($moduleEnabled('InventoryManagement') && Route::has('inventory-management.index'))
@if(Route::has('inventory-management.index'))
<a href="{{ route('inventory-management.index') }}" wire:navigate class="wms-sidebar-link @if(request()->routeIs('inventory-management.*')) is-active @endif" title="{{ __('Inventory') }}">
<i class="fa-solid fa-boxes-stacked wms-sidebar-icon" aria-hidden="true"></i>
<span data-wms-sidebar-label>{{ __('Inventory') }}</span>
</a>
@endif
@if($moduleEnabled('Replenishment') && Route::has('replenishment.index'))
@if(Route::has('replenishment.index'))
<a href="{{ route('replenishment.index') }}" wire:navigate class="wms-sidebar-link @if(request()->routeIs('replenishment.*')) is-active @endif" title="{{ __('Replenishment') }}">
<i class="fa-solid fa-arrows-rotate wms-sidebar-icon" aria-hidden="true"></i>
<span data-wms-sidebar-label>{{ __('Replenishment') }}</span>
</a>
@endif
@if($moduleEnabled('Shipping') && Route::has('shipping.index'))
@if(Route::has('shipping.index'))
<a href="{{ route('shipping.index') }}" wire:navigate class="wms-sidebar-link @if(request()->routeIs('shipping.*')) is-active @endif" title="{{ __('Shipping') }}">
<i class="fa-solid fa-truck-fast wms-sidebar-icon" aria-hidden="true"></i>
<span data-wms-sidebar-label>{{ __('Shipping') }}</span>
</a>
@endif
@if($moduleEnabled('Transportation') && Route::has('transportation.index'))
@if(Route::has('transportation.index'))
<a href="{{ route('transportation.index') }}" wire:navigate class="wms-sidebar-link @if(request()->routeIs('transportation.*')) is-active @endif" title="{{ __('Transportation') }}">
<i class="fa-solid fa-truck-ramp-box wms-sidebar-icon" aria-hidden="true"></i>
<span data-wms-sidebar-label>{{ __('Transportation') }}</span>
</a>
@endif
@if($moduleEnabled('CarrierManagement') && Route::has('carrier-management.index'))
@if(Route::has('carrier-management.index'))
<a href="{{ route('carrier-management.index') }}" wire:navigate class="wms-sidebar-link @if(request()->routeIs('carrier-management.*')) is-active @endif" title="{{ __('Carriers') }}">
<i class="fa-solid fa-route wms-sidebar-icon" aria-hidden="true"></i>
<span data-wms-sidebar-label>{{ __('Carriers') }}</span>
@@ -95,25 +86,25 @@
<div class="wms-sidebar-group">
<div class="wms-sidebar-heading" data-wms-sidebar-label>{{ __('Integration & Reporting') }}</div>
@if($moduleEnabled('M3Integration') && Route::has('m3-integration.index'))
@if(Route::has('m3-integration.index'))
<a href="{{ route('m3-integration.index') }}" wire:navigate class="wms-sidebar-link @if(request()->routeIs('m3-integration.*')) is-active @endif" title="{{ __('M3 Integration') }}">
<i class="fa-solid fa-plug-circle-bolt wms-sidebar-icon" aria-hidden="true"></i>
<span data-wms-sidebar-label>{{ __('M3 Integration') }}</span>
</a>
@endif
@if($moduleEnabled('SentinelIntegration') && Route::has('sentinel-integration.index'))
@if(Route::has('sentinel-integration.index'))
<a href="{{ route('sentinel-integration.index') }}" wire:navigate class="wms-sidebar-link @if(request()->routeIs('sentinel-integration.*')) is-active @endif" title="{{ __('Sentinel') }}">
<i class="fa-solid fa-satellite-dish wms-sidebar-icon" aria-hidden="true"></i>
<span data-wms-sidebar-label>{{ __('Sentinel') }}</span>
</a>
@endif
@if($moduleEnabled('DocumentArchive') && Route::has('document-archive.index'))
@if(Route::has('document-archive.index'))
<a href="{{ route('document-archive.index') }}" wire:navigate class="wms-sidebar-link @if(request()->routeIs('document-archive.*')) is-active @endif" title="{{ __('Documents') }}">
<i class="fa-solid fa-box-archive wms-sidebar-icon" aria-hidden="true"></i>
<span data-wms-sidebar-label>{{ __('Documents') }}</span>
</a>
@endif
@if($moduleEnabled('Reporting') && Route::has('reporting.index'))
@if(Route::has('reporting.index'))
<a href="{{ route('reporting.index') }}" wire:navigate class="wms-sidebar-link @if(request()->routeIs('reporting.*')) is-active @endif" title="{{ __('Reporting') }}">
<i class="fa-solid fa-file-lines wms-sidebar-icon" aria-hidden="true"></i>
<span data-wms-sidebar-label>{{ __('Reporting') }}</span>
@@ -124,31 +115,31 @@
<div class="wms-sidebar-group">
<div class="wms-sidebar-heading" data-wms-sidebar-label>{{ __('Administration') }}</div>
@if($moduleEnabled('Warehouse') && Route::has('warehouses.index'))
@if(Route::has('warehouses.index'))
<a href="{{ route('warehouses.index') }}" wire:navigate class="wms-sidebar-link @if(request()->routeIs('warehouses.*')) is-active @endif" title="{{ __('Warehouses') }}">
<i class="fa-solid fa-warehouse wms-sidebar-icon" aria-hidden="true"></i>
<span data-wms-sidebar-label>{{ __('Warehouses') }}</span>
</a>
@endif
@if($moduleEnabled('Warehouse') && Route::has('warehouse-rules.index'))
@if(Route::has('warehouse-rules.index'))
<a href="{{ route('warehouse-rules.index') }}" wire:navigate class="wms-sidebar-link @if(request()->routeIs('warehouse-rules.*')) is-active @endif" title="{{ __('Validation Rules') }}">
<i class="fa-solid fa-shield-halved wms-sidebar-icon" aria-hidden="true"></i>
<span data-wms-sidebar-label>{{ __('Validation Rules') }}</span>
</a>
@endif
@if($moduleEnabled('Configuration') && Route::has('configuration.index'))
@if(Route::has('configuration.index'))
<a href="{{ route('configuration.index') }}" wire:navigate class="wms-sidebar-link @if(request()->routeIs('configuration.*')) is-active @endif" title="{{ __('Configuration') }}">
<i class="fa-solid fa-sliders wms-sidebar-icon" aria-hidden="true"></i>
<span data-wms-sidebar-label>{{ __('Configuration') }}</span>
</a>
@endif
@if($moduleEnabled('Security') && Route::has('security.index'))
@if(Route::has('security.index'))
<a href="{{ route('security.index') }}" wire:navigate class="wms-sidebar-link @if(request()->routeIs('security.*')) is-active @endif" title="{{ __('Security') }}">
<i class="fa-solid fa-user-shield wms-sidebar-icon" aria-hidden="true"></i>
<span data-wms-sidebar-label>{{ __('Security') }}</span>
</a>
@endif
@if($moduleEnabled('Audit') && Route::has('audit.index'))
@if(Route::has('audit.index'))
<a href="{{ route('audit.index') }}" wire:navigate class="wms-sidebar-link @if(request()->routeIs('audit.*')) is-active @endif" title="{{ __('Audit') }}">
<i class="fa-solid fa-clipboard-check wms-sidebar-icon" aria-hidden="true"></i>
<span data-wms-sidebar-label>{{ __('Audit') }}</span>
@@ -156,23 +147,23 @@
@endif
</div>
@if($moduleEnabled('Platform') && auth()->user()?->isMpbaPlatformAdmin())
@if(auth()->user()?->isMpbaPlatformAdmin())
<div class="wms-sidebar-group">
<div class="wms-sidebar-heading" data-wms-sidebar-label>{{ __('Platform Administration') }}</div>
@if($moduleEnabled('Platform') && Route::has('platform.companies.index'))
@if(Route::has('platform.companies.index'))
<a href="{{ route('platform.companies.index') }}" wire:navigate class="wms-sidebar-link @if(request()->routeIs('platform.companies.*')) is-active @endif" title="{{ __('Companies') }}">
<i class="fa-solid fa-building wms-sidebar-icon" aria-hidden="true"></i>
<span data-wms-sidebar-label>{{ __('Companies') }}</span>
</a>
@endif
@if($moduleEnabled('Platform') && Route::has('platform.licenses.index'))
@if(Route::has('platform.licenses.index'))
<a href="{{ route('platform.licenses.index') }}" wire:navigate class="wms-sidebar-link @if(request()->routeIs('platform.licenses.*')) is-active @endif" title="{{ __('Licences') }}">
<i class="fa-solid fa-key wms-sidebar-icon" aria-hidden="true"></i>
<span data-wms-sidebar-label>{{ __('Licences') }}</span>
</a>
@endif
@if($moduleEnabled('Platform') && Route::has('platform.payments.index'))
@if(Route::has('platform.payments.index'))
<a href="{{ route('platform.payments.index') }}" wire:navigate class="wms-sidebar-link @if(request()->routeIs('platform.payments.*')) is-active @endif" title="{{ __('Payments') }}">
<i class="fa-solid fa-credit-card wms-sidebar-icon" aria-hidden="true"></i>
<span data-wms-sidebar-label>{{ __('Payments') }}</span>
@@ -230,38 +221,45 @@
</aside>
<div class="wms-main-panel">
<section class="wms-page-hero" aria-labelledby="wms-page-title">
<div class="wms-page-hero-content">
<div>
<p class="wms-page-eyebrow">{{ __('MPBA WMS') }}</p>
<h1 id="wms-page-title" class="wms-page-title">{{ $title ?? __('Platform administration') }}</h1>
<p class="wms-page-subtitle">{{ __('Manage tenant companies, licences, payments, warehouses and internal API operations from one resilient control plane.') }}</p>
</div>
<div class="wms-page-metrics" aria-label="{{ __('Platform summary') }}">
<div class="wms-page-metric-card">
<span class="wms-page-metric-label">{{ __('System status') }}</span>
<span class="wms-page-metric-value wms-page-metric-ok">
<i class="fa-solid fa-heart-pulse" aria-hidden="true"></i>
{{ __('OK') }}
</span>
</div>
<div class="wms-page-metric-card">
<span class="wms-page-metric-label">{{ __('Paid £') }}</span>
<span class="wms-page-metric-value">
@isset($paymentsTotal)
{{ number_format($paymentsTotal / 100, 2) }}
@else
0.00
@endisset
</span>
</div>
</div>
</div>
</section>
@php
$pageTitle = $title ?? __('Warehouse Management System');
$pageDescription = match (true) {
request()->routeIs('platform.dashboard') => __('Manage tenant companies, licences, payments, warehouses and internal API operations from one resilient control plane.'),
request()->routeIs('platform.companies.*') => __('Manage tenant companies, ownership, users and the warehouse records attached to each organisation.'),
request()->routeIs('platform.licenses.*') => __('Review licence allocation, account status and platform access across MPBA tenants.'),
request()->routeIs('platform.payments.*') => __('Track payment activity, paid totals and tenant billing status from one administration screen.'),
request()->routeIs('warehouses.*') => __('Maintain warehouse locations, operational details and company ownership records.'),
request()->routeIs('inventory-management.*') => __('Monitor inventory activity, stock positions and warehouse item control.'),
request()->routeIs('analytics.*') => __('Review operational insight, warehouse trends and management reporting.'),
default => __('Manage tenant companies, licences, payments, warehouses and internal API operations from one resilient control plane.'),
};
@endphp
<main class="wms-content">
<section class="wms-page-hero" aria-labelledby="wms-page-title">
<div class="wms-page-hero-copy">
<div class="wms-page-hero-kicker">{{ __('MPBA WMS') }}</div>
<h1 id="wms-page-title" class="wms-page-hero-title">{{ $pageTitle }}</h1>
<p class="wms-page-hero-description">{{ $pageDescription }}</p>
</div>
<div class="wms-page-hero-actions">
<button type="button" class="wms-hero-mobile-menu" data-wms-mobile-open aria-label="{{ __('Open navigation') }}">
<i class="fa-solid fa-bars" aria-hidden="true"></i>
</button>
<div class="wms-page-hero-stat">
<span>{{ __('System status') }}</span>
<strong><i class="fa-solid fa-heart-pulse" aria-hidden="true"></i> {{ __('OK') }}</strong>
</div>
<div class="wms-page-hero-stat">
<span>{{ __('Paid £') }}</span>
<strong>0.00</strong>
</div>
</div>
</section>
{{ $slot }}
</main>
</div>
@@ -304,6 +302,19 @@
applySidebarState();
});
});
document.querySelectorAll('[data-wms-brand-toggle]').forEach((button) => {
if (button.dataset.wmsBound === '1') return;
button.dataset.wmsBound = '1';
button.addEventListener('click', function (event) {
const root = document.documentElement;
if (root.dataset.wmsSidebar !== 'collapsed') return;
event.preventDefault();
event.stopPropagation();
root.dataset.wmsSidebar = 'expanded';
localStorage.setItem(STORAGE_KEY, 'expanded');
applySidebarState();
});
});
document.querySelectorAll('[data-wms-mobile-open]').forEach((button) => {
if (button.dataset.wmsBound === '1') return;
button.dataset.wmsBound = '1';
View File
View File
View File
@@ -27,7 +27,7 @@
<aside class="wms-sidebar" data-wms-sidebar aria-label="<?php echo e(__('Main navigation')); ?>">
<div class="wms-sidebar-header">
<a href="<?php echo e(auth()->user()?->isMpbaPlatformAdmin() && Route::has('platform.dashboard') ? route('platform.dashboard') : route('dashboard')); ?>" wire:navigate class="wms-brand" aria-label="<?php echo e(__('Warehouse Management System')); ?>">
<span class="wms-brand-mark"><span class="wms-brand-mark-inner">W</span></span>
<span class="wms-brand-mark" data-wms-brand-toggle title="<?php echo e(__('Expand sidebar')); ?>"><span class="wms-brand-mark-inner">W</span></span>
<span class="wms-brand-copy" data-wms-sidebar-label>
<span class="wms-brand-title"><?php echo e(__('Warehouse Management System')); ?></span>
<span class="wms-brand-subtitle">MPBA</span>
@@ -36,25 +36,16 @@
<button type="button" class="wms-sidebar-toggle" data-wms-sidebar-toggle aria-label="<?php echo e(__('Collapse sidebar')); ?>" aria-expanded="true">
<span class="wms-toggle-expanded">‹</span>
<span class="wms-toggle-collapsed">›</span>
</button>
<button type="button" class="wms-mobile-close" data-wms-mobile-close aria-label="<?php echo e(__('Close navigation')); ?>">×</button>
</div>
<nav class="wms-sidebar-nav" aria-label="<?php echo e(__('Main navigation')); ?>">
<?php
$moduleStatusesPath = base_path('modules_statuses.json');
$moduleStatuses = is_file($moduleStatusesPath)
? json_decode((string) file_get_contents($moduleStatusesPath), true)
: [];
$moduleEnabled = static fn (string $module): bool => ($moduleStatuses[$module] ?? false) === true;
?>
<div class="wms-sidebar-group">
<div class="wms-sidebar-heading" data-wms-sidebar-label><?php echo e(__('Platform')); ?></div>
<?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if BLOCK]><![endif]--><?php endif; ?><?php if($moduleEnabled('Platform') && auth()->user()?->isMpbaPlatformAdmin() && Route::has('platform.dashboard')): ?>
<?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if BLOCK]><![endif]--><?php endif; ?><?php if(auth()->user()?->isMpbaPlatformAdmin() && Route::has('platform.dashboard')): ?>
<a href="<?php echo e(route('platform.dashboard')); ?>" wire:navigate class="wms-sidebar-link <?php if(request()->routeIs('platform.dashboard')): ?> is-active <?php endif; ?>" title="<?php echo e(__('Platform')); ?>">
<i class="fa-solid fa-screwdriver-wrench wms-sidebar-icon" aria-hidden="true"></i>
<span data-wms-sidebar-label><?php echo e(__('Platform')); ?></span>
@@ -70,37 +61,37 @@
<div class="wms-sidebar-group">
<div class="wms-sidebar-heading" data-wms-sidebar-label><?php echo e(__('Operations')); ?></div>
<?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if BLOCK]><![endif]--><?php endif; ?><?php if($moduleEnabled('Analytics') && Route::has('analytics.index')): ?>
<?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if BLOCK]><![endif]--><?php endif; ?><?php if(Route::has('analytics.index')): ?>
<a href="<?php echo e(route('analytics.index')); ?>" wire:navigate class="wms-sidebar-link <?php if(request()->routeIs('analytics.*')): ?> is-active <?php endif; ?>" title="<?php echo e(__('Analytics')); ?>">
<i class="fa-solid fa-chart-line wms-sidebar-icon" aria-hidden="true"></i>
<span data-wms-sidebar-label><?php echo e(__('Analytics')); ?></span>
</a>
<?php endif; ?><?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if ENDBLOCK]><![endif]--><?php endif; ?>
<?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if BLOCK]><![endif]--><?php endif; ?><?php if($moduleEnabled('InventoryManagement') && Route::has('inventory-management.index')): ?>
<?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if BLOCK]><![endif]--><?php endif; ?><?php if(Route::has('inventory-management.index')): ?>
<a href="<?php echo e(route('inventory-management.index')); ?>" wire:navigate class="wms-sidebar-link <?php if(request()->routeIs('inventory-management.*')): ?> is-active <?php endif; ?>" title="<?php echo e(__('Inventory')); ?>">
<i class="fa-solid fa-boxes-stacked wms-sidebar-icon" aria-hidden="true"></i>
<span data-wms-sidebar-label><?php echo e(__('Inventory')); ?></span>
</a>
<?php endif; ?><?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if ENDBLOCK]><![endif]--><?php endif; ?>
<?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if BLOCK]><![endif]--><?php endif; ?><?php if($moduleEnabled('Replenishment') && Route::has('replenishment.index')): ?>
<?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if BLOCK]><![endif]--><?php endif; ?><?php if(Route::has('replenishment.index')): ?>
<a href="<?php echo e(route('replenishment.index')); ?>" wire:navigate class="wms-sidebar-link <?php if(request()->routeIs('replenishment.*')): ?> is-active <?php endif; ?>" title="<?php echo e(__('Replenishment')); ?>">
<i class="fa-solid fa-arrows-rotate wms-sidebar-icon" aria-hidden="true"></i>
<span data-wms-sidebar-label><?php echo e(__('Replenishment')); ?></span>
</a>
<?php endif; ?><?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if ENDBLOCK]><![endif]--><?php endif; ?>
<?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if BLOCK]><![endif]--><?php endif; ?><?php if($moduleEnabled('Shipping') && Route::has('shipping.index')): ?>
<?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if BLOCK]><![endif]--><?php endif; ?><?php if(Route::has('shipping.index')): ?>
<a href="<?php echo e(route('shipping.index')); ?>" wire:navigate class="wms-sidebar-link <?php if(request()->routeIs('shipping.*')): ?> is-active <?php endif; ?>" title="<?php echo e(__('Shipping')); ?>">
<i class="fa-solid fa-truck-fast wms-sidebar-icon" aria-hidden="true"></i>
<span data-wms-sidebar-label><?php echo e(__('Shipping')); ?></span>
</a>
<?php endif; ?><?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if ENDBLOCK]><![endif]--><?php endif; ?>
<?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if BLOCK]><![endif]--><?php endif; ?><?php if($moduleEnabled('Transportation') && Route::has('transportation.index')): ?>
<?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if BLOCK]><![endif]--><?php endif; ?><?php if(Route::has('transportation.index')): ?>
<a href="<?php echo e(route('transportation.index')); ?>" wire:navigate class="wms-sidebar-link <?php if(request()->routeIs('transportation.*')): ?> is-active <?php endif; ?>" title="<?php echo e(__('Transportation')); ?>">
<i class="fa-solid fa-truck-ramp-box wms-sidebar-icon" aria-hidden="true"></i>
<span data-wms-sidebar-label><?php echo e(__('Transportation')); ?></span>
</a>
<?php endif; ?><?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if ENDBLOCK]><![endif]--><?php endif; ?>
<?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if BLOCK]><![endif]--><?php endif; ?><?php if($moduleEnabled('CarrierManagement') && Route::has('carrier-management.index')): ?>
<?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if BLOCK]><![endif]--><?php endif; ?><?php if(Route::has('carrier-management.index')): ?>
<a href="<?php echo e(route('carrier-management.index')); ?>" wire:navigate class="wms-sidebar-link <?php if(request()->routeIs('carrier-management.*')): ?> is-active <?php endif; ?>" title="<?php echo e(__('Carriers')); ?>">
<i class="fa-solid fa-route wms-sidebar-icon" aria-hidden="true"></i>
<span data-wms-sidebar-label><?php echo e(__('Carriers')); ?></span>
@@ -111,25 +102,25 @@
<div class="wms-sidebar-group">
<div class="wms-sidebar-heading" data-wms-sidebar-label><?php echo e(__('Integration & Reporting')); ?></div>
<?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if BLOCK]><![endif]--><?php endif; ?><?php if($moduleEnabled('M3Integration') && Route::has('m3-integration.index')): ?>
<?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if BLOCK]><![endif]--><?php endif; ?><?php if(Route::has('m3-integration.index')): ?>
<a href="<?php echo e(route('m3-integration.index')); ?>" wire:navigate class="wms-sidebar-link <?php if(request()->routeIs('m3-integration.*')): ?> is-active <?php endif; ?>" title="<?php echo e(__('M3 Integration')); ?>">
<i class="fa-solid fa-plug-circle-bolt wms-sidebar-icon" aria-hidden="true"></i>
<span data-wms-sidebar-label><?php echo e(__('M3 Integration')); ?></span>
</a>
<?php endif; ?><?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if ENDBLOCK]><![endif]--><?php endif; ?>
<?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if BLOCK]><![endif]--><?php endif; ?><?php if($moduleEnabled('SentinelIntegration') && Route::has('sentinel-integration.index')): ?>
<?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if BLOCK]><![endif]--><?php endif; ?><?php if(Route::has('sentinel-integration.index')): ?>
<a href="<?php echo e(route('sentinel-integration.index')); ?>" wire:navigate class="wms-sidebar-link <?php if(request()->routeIs('sentinel-integration.*')): ?> is-active <?php endif; ?>" title="<?php echo e(__('Sentinel')); ?>">
<i class="fa-solid fa-satellite-dish wms-sidebar-icon" aria-hidden="true"></i>
<span data-wms-sidebar-label><?php echo e(__('Sentinel')); ?></span>
</a>
<?php endif; ?><?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if ENDBLOCK]><![endif]--><?php endif; ?>
<?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if BLOCK]><![endif]--><?php endif; ?><?php if($moduleEnabled('DocumentArchive') && Route::has('document-archive.index')): ?>
<?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if BLOCK]><![endif]--><?php endif; ?><?php if(Route::has('document-archive.index')): ?>
<a href="<?php echo e(route('document-archive.index')); ?>" wire:navigate class="wms-sidebar-link <?php if(request()->routeIs('document-archive.*')): ?> is-active <?php endif; ?>" title="<?php echo e(__('Documents')); ?>">
<i class="fa-solid fa-box-archive wms-sidebar-icon" aria-hidden="true"></i>
<span data-wms-sidebar-label><?php echo e(__('Documents')); ?></span>
</a>
<?php endif; ?><?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if ENDBLOCK]><![endif]--><?php endif; ?>
<?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if BLOCK]><![endif]--><?php endif; ?><?php if($moduleEnabled('Reporting') && Route::has('reporting.index')): ?>
<?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if BLOCK]><![endif]--><?php endif; ?><?php if(Route::has('reporting.index')): ?>
<a href="<?php echo e(route('reporting.index')); ?>" wire:navigate class="wms-sidebar-link <?php if(request()->routeIs('reporting.*')): ?> is-active <?php endif; ?>" title="<?php echo e(__('Reporting')); ?>">
<i class="fa-solid fa-file-lines wms-sidebar-icon" aria-hidden="true"></i>
<span data-wms-sidebar-label><?php echo e(__('Reporting')); ?></span>
@@ -140,31 +131,31 @@
<div class="wms-sidebar-group">
<div class="wms-sidebar-heading" data-wms-sidebar-label><?php echo e(__('Administration')); ?></div>
<?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if BLOCK]><![endif]--><?php endif; ?><?php if($moduleEnabled('Warehouse') && Route::has('warehouses.index')): ?>
<?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if BLOCK]><![endif]--><?php endif; ?><?php if(Route::has('warehouses.index')): ?>
<a href="<?php echo e(route('warehouses.index')); ?>" wire:navigate class="wms-sidebar-link <?php if(request()->routeIs('warehouses.*')): ?> is-active <?php endif; ?>" title="<?php echo e(__('Warehouses')); ?>">
<i class="fa-solid fa-warehouse wms-sidebar-icon" aria-hidden="true"></i>
<span data-wms-sidebar-label><?php echo e(__('Warehouses')); ?></span>
</a>
<?php endif; ?><?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if ENDBLOCK]><![endif]--><?php endif; ?>
<?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if BLOCK]><![endif]--><?php endif; ?><?php if($moduleEnabled('Warehouse') && Route::has('warehouse-rules.index')): ?>
<?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if BLOCK]><![endif]--><?php endif; ?><?php if(Route::has('warehouse-rules.index')): ?>
<a href="<?php echo e(route('warehouse-rules.index')); ?>" wire:navigate class="wms-sidebar-link <?php if(request()->routeIs('warehouse-rules.*')): ?> is-active <?php endif; ?>" title="<?php echo e(__('Validation Rules')); ?>">
<i class="fa-solid fa-shield-halved wms-sidebar-icon" aria-hidden="true"></i>
<span data-wms-sidebar-label><?php echo e(__('Validation Rules')); ?></span>
</a>
<?php endif; ?><?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if ENDBLOCK]><![endif]--><?php endif; ?>
<?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if BLOCK]><![endif]--><?php endif; ?><?php if($moduleEnabled('Configuration') && Route::has('configuration.index')): ?>
<?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if BLOCK]><![endif]--><?php endif; ?><?php if(Route::has('configuration.index')): ?>
<a href="<?php echo e(route('configuration.index')); ?>" wire:navigate class="wms-sidebar-link <?php if(request()->routeIs('configuration.*')): ?> is-active <?php endif; ?>" title="<?php echo e(__('Configuration')); ?>">
<i class="fa-solid fa-sliders wms-sidebar-icon" aria-hidden="true"></i>
<span data-wms-sidebar-label><?php echo e(__('Configuration')); ?></span>
</a>
<?php endif; ?><?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if ENDBLOCK]><![endif]--><?php endif; ?>
<?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if BLOCK]><![endif]--><?php endif; ?><?php if($moduleEnabled('Security') && Route::has('security.index')): ?>
<?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if BLOCK]><![endif]--><?php endif; ?><?php if(Route::has('security.index')): ?>
<a href="<?php echo e(route('security.index')); ?>" wire:navigate class="wms-sidebar-link <?php if(request()->routeIs('security.*')): ?> is-active <?php endif; ?>" title="<?php echo e(__('Security')); ?>">
<i class="fa-solid fa-user-shield wms-sidebar-icon" aria-hidden="true"></i>
<span data-wms-sidebar-label><?php echo e(__('Security')); ?></span>
</a>
<?php endif; ?><?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if ENDBLOCK]><![endif]--><?php endif; ?>
<?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if BLOCK]><![endif]--><?php endif; ?><?php if($moduleEnabled('Audit') && Route::has('audit.index')): ?>
<?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if BLOCK]><![endif]--><?php endif; ?><?php if(Route::has('audit.index')): ?>
<a href="<?php echo e(route('audit.index')); ?>" wire:navigate class="wms-sidebar-link <?php if(request()->routeIs('audit.*')): ?> is-active <?php endif; ?>" title="<?php echo e(__('Audit')); ?>">
<i class="fa-solid fa-clipboard-check wms-sidebar-icon" aria-hidden="true"></i>
<span data-wms-sidebar-label><?php echo e(__('Audit')); ?></span>
@@ -172,23 +163,23 @@
<?php endif; ?><?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if ENDBLOCK]><![endif]--><?php endif; ?>
</div>
<?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if BLOCK]><![endif]--><?php endif; ?><?php if($moduleEnabled('Platform') && auth()->user()?->isMpbaPlatformAdmin()): ?>
<?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if BLOCK]><![endif]--><?php endif; ?><?php if(auth()->user()?->isMpbaPlatformAdmin()): ?>
<div class="wms-sidebar-group">
<div class="wms-sidebar-heading" data-wms-sidebar-label><?php echo e(__('Platform Administration')); ?></div>
<?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if BLOCK]><![endif]--><?php endif; ?><?php if($moduleEnabled('Platform') && Route::has('platform.companies.index')): ?>
<?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if BLOCK]><![endif]--><?php endif; ?><?php if(Route::has('platform.companies.index')): ?>
<a href="<?php echo e(route('platform.companies.index')); ?>" wire:navigate class="wms-sidebar-link <?php if(request()->routeIs('platform.companies.*')): ?> is-active <?php endif; ?>" title="<?php echo e(__('Companies')); ?>">
<i class="fa-solid fa-building wms-sidebar-icon" aria-hidden="true"></i>
<span data-wms-sidebar-label><?php echo e(__('Companies')); ?></span>
</a>
<?php endif; ?><?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if ENDBLOCK]><![endif]--><?php endif; ?>
<?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if BLOCK]><![endif]--><?php endif; ?><?php if($moduleEnabled('Platform') && Route::has('platform.licenses.index')): ?>
<?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if BLOCK]><![endif]--><?php endif; ?><?php if(Route::has('platform.licenses.index')): ?>
<a href="<?php echo e(route('platform.licenses.index')); ?>" wire:navigate class="wms-sidebar-link <?php if(request()->routeIs('platform.licenses.*')): ?> is-active <?php endif; ?>" title="<?php echo e(__('Licences')); ?>">
<i class="fa-solid fa-key wms-sidebar-icon" aria-hidden="true"></i>
<span data-wms-sidebar-label><?php echo e(__('Licences')); ?></span>
</a>
<?php endif; ?><?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if ENDBLOCK]><![endif]--><?php endif; ?>
<?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if BLOCK]><![endif]--><?php endif; ?><?php if($moduleEnabled('Platform') && Route::has('platform.payments.index')): ?>
<?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if BLOCK]><![endif]--><?php endif; ?><?php if(Route::has('platform.payments.index')): ?>
<a href="<?php echo e(route('platform.payments.index')); ?>" wire:navigate class="wms-sidebar-link <?php if(request()->routeIs('platform.payments.*')): ?> is-active <?php endif; ?>" title="<?php echo e(__('Payments')); ?>">
<i class="fa-solid fa-credit-card wms-sidebar-icon" aria-hidden="true"></i>
<span data-wms-sidebar-label><?php echo e(__('Payments')); ?></span>
@@ -327,40 +318,45 @@
</aside>
<div class="wms-main-panel">
<section class="wms-page-hero" aria-labelledby="wms-page-title">
<div class="wms-page-hero-content">
<div>
<p class="wms-page-eyebrow"><?php echo e(__('MPBA WMS')); ?></p>
<h1 id="wms-page-title" class="wms-page-title"><?php echo e($title ?? __('Platform administration')); ?></h1>
<p class="wms-page-subtitle"><?php echo e(__('Manage tenant companies, licences, payments, warehouses and internal API operations from one resilient control plane.')); ?></p>
</div>
<div class="wms-page-metrics" aria-label="<?php echo e(__('Platform summary')); ?>">
<div class="wms-page-metric-card">
<span class="wms-page-metric-label"><?php echo e(__('System status')); ?></span>
<span class="wms-page-metric-value wms-page-metric-ok">
<i class="fa-solid fa-heart-pulse" aria-hidden="true"></i>
<?php echo e(__('OK')); ?>
</span>
</div>
<div class="wms-page-metric-card">
<span class="wms-page-metric-label"><?php echo e(__('Paid £')); ?></span>
<span class="wms-page-metric-value">
<?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if BLOCK]><![endif]--><?php endif; ?><?php if(isset($paymentsTotal)): ?>
<?php echo e(number_format($paymentsTotal / 100, 2)); ?>
<?php else: ?>
0.00
<?php endif; ?><?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if ENDBLOCK]><![endif]--><?php endif; ?>
</span>
</div>
</div>
</div>
</section>
<?php
$pageTitle = $title ?? __('Warehouse Management System');
$pageDescription = match (true) {
request()->routeIs('platform.dashboard') => __('Manage tenant companies, licences, payments, warehouses and internal API operations from one resilient control plane.'),
request()->routeIs('platform.companies.*') => __('Manage tenant companies, ownership, users and the warehouse records attached to each organisation.'),
request()->routeIs('platform.licenses.*') => __('Review licence allocation, account status and platform access across MPBA tenants.'),
request()->routeIs('platform.payments.*') => __('Track payment activity, paid totals and tenant billing status from one administration screen.'),
request()->routeIs('warehouses.*') => __('Maintain warehouse locations, operational details and company ownership records.'),
request()->routeIs('inventory-management.*') => __('Monitor inventory activity, stock positions and warehouse item control.'),
request()->routeIs('analytics.*') => __('Review operational insight, warehouse trends and management reporting.'),
default => __('Manage tenant companies, licences, payments, warehouses and internal API operations from one resilient control plane.'),
};
?>
<main class="wms-content">
<section class="wms-page-hero" aria-labelledby="wms-page-title">
<div class="wms-page-hero-copy">
<div class="wms-page-hero-kicker"><?php echo e(__('MPBA WMS')); ?></div>
<h1 id="wms-page-title" class="wms-page-hero-title"><?php echo e($pageTitle); ?></h1>
<p class="wms-page-hero-description"><?php echo e($pageDescription); ?></p>
</div>
<div class="wms-page-hero-actions">
<button type="button" class="wms-hero-mobile-menu" data-wms-mobile-open aria-label="<?php echo e(__('Open navigation')); ?>">
<i class="fa-solid fa-bars" aria-hidden="true"></i>
</button>
<div class="wms-page-hero-stat">
<span><?php echo e(__('System status')); ?></span>
<strong><i class="fa-solid fa-heart-pulse" aria-hidden="true"></i> <?php echo e(__('OK')); ?></strong>
</div>
<div class="wms-page-hero-stat">
<span><?php echo e(__('Paid £')); ?></span>
<strong>0.00</strong>
</div>
</div>
</section>
<?php echo e($slot); ?>
</main>
@@ -460,6 +456,19 @@
applySidebarState();
});
});
document.querySelectorAll('[data-wms-brand-toggle]').forEach((button) => {
if (button.dataset.wmsBound === '1') return;
button.dataset.wmsBound = '1';
button.addEventListener('click', function (event) {
const root = document.documentElement;
if (root.dataset.wmsSidebar !== 'collapsed') return;
event.preventDefault();
event.stopPropagation();
root.dataset.wmsSidebar = 'expanded';
localStorage.setItem(STORAGE_KEY, 'expanded');
applySidebarState();
});
});
document.querySelectorAll('[data-wms-mobile-open]').forEach((button) => {
if (button.dataset.wmsBound === '1') return;
button.dataset.wmsBound = '1';
@@ -0,0 +1,66 @@
<?php
if (!function_exists('_3feb8572f4b247ceb864938a4490c071')):
function _3feb8572f4b247ceb864938a4490c071($__blaze, $__data = [], $__slots = [], $__bound = [], $__keys = [], $__this = null) {
$__env = $__blaze->env;
if (($__data['attributes'] ?? null) instanceof \Illuminate\View\ComponentAttributeBag) { $__data = $__data + $__data['attributes']->all(); unset($__data['attributes']); }
extract($__slots, EXTR_SKIP); unset($__slots);
extract($__data, EXTR_SKIP);
$attributes = \Livewire\Blaze\Runtime\BlazeAttributeBag::make($__data, $__bound, $__keys);
unset($__data, $__bound, $__keys);
ob_start();
?>
<?php
$__defaults = [
'variant' => 'outline',
];
$variant ??= $attributes['variant'] ?? $__defaults['variant']; unset($attributes['variant']);
unset($__defaults);
?>
<?php
$classes = Flux::classes('shrink-0')
->add(match($variant) {
'outline' => '[:where(&)]:size-6',
'solid' => '[:where(&)]:size-6',
'mini' => '[:where(&)]:size-5',
'micro' => '[:where(&)]:size-4',
});
?>
<?php switch ($variant): case ('outline'): ?>
<svg <?php echo e($attributes->class($classes)); ?> data-flux-icon xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="1.5" stroke="currentColor" aria-hidden="true" data-slot="icon">
<path stroke-linecap="round" stroke-linejoin="round" d="m19.5 8.25-7.5 7.5-7.5-7.5"/>
</svg>
<?php break; ?>
<?php case ('solid'): ?>
<svg <?php echo e($attributes->class($classes)); ?> data-flux-icon xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="currentColor" aria-hidden="true" data-slot="icon">
<path fill-rule="evenodd" d="M12.53 16.28a.75.75 0 0 1-1.06 0l-7.5-7.5a.75.75 0 0 1 1.06-1.06L12 14.69l6.97-6.97a.75.75 0 1 1 1.06 1.06l-7.5 7.5Z" clip-rule="evenodd"/>
</svg>
<?php break; ?>
<?php case ('mini'): ?>
<svg <?php echo e($attributes->class($classes)); ?> data-flux-icon xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20" fill="currentColor" aria-hidden="true" data-slot="icon">
<path fill-rule="evenodd" d="M5.22 8.22a.75.75 0 0 1 1.06 0L10 11.94l3.72-3.72a.75.75 0 1 1 1.06 1.06l-4.25 4.25a.75.75 0 0 1-1.06 0L5.22 9.28a.75.75 0 0 1 0-1.06Z" clip-rule="evenodd"/>
</svg>
<?php break; ?>
<?php case ('micro'): ?>
<svg <?php echo e($attributes->class($classes)); ?> data-flux-icon xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16" fill="currentColor" aria-hidden="true" data-slot="icon">
<path fill-rule="evenodd" d="M4.22 6.22a.75.75 0 0 1 1.06 0L8 8.94l2.72-2.72a.75.75 0 1 1 1.06 1.06l-3.25 3.25a.75.75 0 0 1-1.06 0L4.22 7.28a.75.75 0 0 1 0-1.06Z" clip-rule="evenodd"/>
</svg>
<?php break; ?>
<?php endswitch; ?>
<?php
echo ltrim(ob_get_clean());
} endif; ?><?php /**PATH /Users/mag/Sites/WMS/Core/vendor/livewire/flux/src/../stubs/resources/views/flux/icon/chevron-down.blade.php ENDPATH**/ ?>
@@ -0,0 +1,88 @@
<?php
if (!function_exists('_986fb95c0ca2c23afb55cc89b1b07e48')):
function _986fb95c0ca2c23afb55cc89b1b07e48($__blaze, $__data = [], $__slots = [], $__bound = [], $__keys = [], $__this = null) {
$__env = $__blaze->env;
if (($__data['attributes'] ?? null) instanceof \Illuminate\View\ComponentAttributeBag) { $__data = $__data + $__data['attributes']->all(); unset($__data['attributes']); }
extract($__slots, EXTR_SKIP); unset($__slots);
extract($__data, EXTR_SKIP);
$attributes = \Livewire\Blaze\Runtime\BlazeAttributeBag::make($__data, $__bound, $__keys);
unset($__data, $__bound, $__keys);
ob_start();
?>
<?php $iconVariant ??= $attributes->pluck('icon:variant'); ?>
<?php $iconTrailing ??= $attributes->pluck('icon:trailing'); ?>
<?php
$__defaults = [
'iconVariant' => 'micro',
'iconTrailing' => null,
'initials' => null,
'chevron' => true,
'circle' => null,
'avatar' => null,
'name' => null,
];
$iconVariant ??= $attributes['icon-variant'] ?? $attributes['iconVariant'] ?? $__defaults['iconVariant']; unset($attributes['iconVariant'], $attributes['icon-variant']);
$iconTrailing ??= $attributes['icon-trailing'] ?? $attributes['iconTrailing'] ?? $__defaults['iconTrailing']; unset($attributes['iconTrailing'], $attributes['icon-trailing']);
$initials ??= $attributes['initials'] ?? $__defaults['initials']; unset($attributes['initials']);
$chevron ??= $attributes['chevron'] ?? $__defaults['chevron']; unset($attributes['chevron']);
$circle ??= $attributes['circle'] ?? $__defaults['circle']; unset($attributes['circle']);
$avatar ??= $attributes['avatar'] ?? $__defaults['avatar']; unset($attributes['avatar']);
$name ??= $attributes['name'] ?? $__defaults['name']; unset($attributes['name']);
unset($__defaults);
?>
<?php
$iconTrailing = $iconTrailing ?? ($chevron ? 'chevron-down' : null);
// When using the outline icon variant, we need to size it down to match the default icon sizes...
$iconClasses = Flux::classes('text-zinc-400 dark:text-white/80 group-hover:text-zinc-800 dark:group-hover:text-white')
->add($iconVariant === 'outline' ? 'size-4' : '');
$classes = Flux::classes()
->add('group flex items-center')
->add('rounded-lg has-data-[circle=true]:rounded-full')
->add('[ui-dropdown>&]:w-full') // Without this, the "name" won't get truncated in a sidebar dropdown...
->add('p-1 hover:bg-zinc-800/5 dark:hover:bg-white/15')
;
?>
<button type="button" <?php echo e($attributes->class($classes)); ?> data-flux-profile>
<div class="shrink-0">
<?php if ($avatar instanceof \Illuminate\View\ComponentSlot): ?>
<?php echo e($avatar); ?>
<?php else: ?>
<?php $avatarAttributes = Flux::attributesAfter('avatar:', $attributes, ['src' => $avatar, 'size' => 'sm', 'circle' => $circle, 'name' => $name, 'initials' => $initials]); ?>
<?php $blaze_memoized_key = \Livewire\Blaze\Memoizer\Memo::key("flux::avatar", ['attributes' => $avatarAttributes]); ?><?php if ($blaze_memoized_key !== null && \Livewire\Blaze\Memoizer\Memo::has($blaze_memoized_key)) : ?><?php echo \Livewire\Blaze\Memoizer\Memo::get($blaze_memoized_key); ?><?php else : ?><?php ob_start(); ?><?php $__blaze->ensureRequired('/Users/mag/Sites/WMS/Core/vendor/livewire/flux/src/../stubs/resources/views/flux/avatar/index.blade.php', $__blaze->compiledPath.'/110c1c2a55a80ff8b2b4fbed62b1a7d3.php'); ?>
<?php $__blaze->pushData(['attributes' => $avatarAttributes]); ?>
<?php _110c1c2a55a80ff8b2b4fbed62b1a7d3($__blaze, ['attributes' => $avatarAttributes], [], ['attributes'], [], $__this ?? (isset($this) ? $this : null)); ?>
<?php $__blaze->popData(); ?><?php $blaze_memoized_html = ob_get_clean(); ?><?php if ($blaze_memoized_key !== null) { \Livewire\Blaze\Memoizer\Memo::put($blaze_memoized_key, $blaze_memoized_html); } ?><?php echo $blaze_memoized_html; ?><?php endif; ?>
<?php endif; ?>
</div>
<?php if ($name): ?>
<span class="mx-2 text-sm text-zinc-500 dark:text-white/80 group-hover:text-zinc-800 dark:group-hover:text-white font-medium truncate">
<?php echo e($name); ?>
</span>
<?php endif; ?>
<?php if (is_string($iconTrailing) && $iconTrailing !== ''): ?>
<div class="shrink-0 ms-auto size-8 flex justify-center items-center">
<?php $blaze_memoized_key = \Livewire\Blaze\Memoizer\Memo::key("flux::icon", ['icon' => $iconTrailing, 'variant' => $iconVariant, 'class' => $iconClasses]); ?><?php if ($blaze_memoized_key !== null && \Livewire\Blaze\Memoizer\Memo::has($blaze_memoized_key)) : ?><?php echo \Livewire\Blaze\Memoizer\Memo::get($blaze_memoized_key); ?><?php else : ?><?php ob_start(); ?><?php $__blaze->ensureRequired('/Users/mag/Sites/WMS/Core/vendor/livewire/flux/src/../stubs/resources/views/flux/icon/index.blade.php', $__blaze->compiledPath.'/50d7e9e02b0a09ef19c84ebdf6a22b69.php'); ?>
<?php $__blaze->pushData(['icon' => $iconTrailing,'variant' => $iconVariant,'class' => $iconClasses]); ?>
<?php _50d7e9e02b0a09ef19c84ebdf6a22b69($__blaze, ['icon' => $iconTrailing,'variant' => $iconVariant,'class' => $iconClasses], [], ['icon', 'variant', 'class'], [], $__this ?? (isset($this) ? $this : null)); ?>
<?php $__blaze->popData(); ?><?php $blaze_memoized_html = ob_get_clean(); ?><?php if ($blaze_memoized_key !== null) { \Livewire\Blaze\Memoizer\Memo::put($blaze_memoized_key, $blaze_memoized_html); } ?><?php echo $blaze_memoized_html; ?><?php endif; ?>
</div>
<?php elseif ($iconTrailing): ?>
<?php echo e($iconTrailing); ?>
<?php endif; ?>
</button>
<?php
echo ltrim(ob_get_clean());
} endif; ?><?php /**PATH /Users/mag/Sites/WMS/Core/vendor/livewire/flux/src/../stubs/resources/views/flux/profile.blade.php ENDPATH**/ ?>