@php $nobleManifestPath = public_path('NobleUI/public/build/manifest.json'); $nobleManifest = is_file($nobleManifestPath) ? json_decode(file_get_contents($nobleManifestPath), true) : []; $nobleBuildPath = function (string $key) use ($nobleManifest): ?string { $file = $nobleManifest[$key]['file'] ?? null; return $file ? asset('NobleUI/public/build/' . $file) : null; }; @endphp @if ($nobleBuildPath('resources/sass/app.scss')) @endif @if ($nobleBuildPath('resources/css/custom.css')) @endif @stack('plugin-styles') @stack('style') {{-- NobleUI color-modes.js deliberately NOT loaded — we enforce light mode only. Loading it causes a flash-of-dark when the OS is in dark mode (it reads prefers-color-scheme and overrides data-bs-theme after paint). When dark mode is implemented later, re-enable with a user-preference override instead of the OS preference. --}}
@php /* ── Determine active primary section from current URL ── */ /* Call Flow: applications sub-paths that are routing/scheduling features */ $callFlowPaths = [ 'applications/ivrs*', 'applications/timeconditions*', 'applications/timegroups*', 'applications/holidays*', 'applications/holiday-calendars*', 'applications/flowswitches*', 'applications/ring-groups*', 'trunks/inbound*', 'trunks/outbound*', 'call-center/queues*', ]; /* PBX: applications sub-paths that are PBX config features */ $pbxAppPaths = [ 'applications/pickup-groups*', 'applications/speed-dials*', 'applications/pins*', 'applications/feature-codes*', 'applications/parking*', 'applications/voice-prompts*', 'applications/departments*', 'applications/phonebook*', 'applications', ]; $navActive = 'home'; if (request()->is('dashboard', 'system-health*', 'activity*')) { $navActive = 'home'; } elseif (request()->is(...$callFlowPaths)) { $navActive = 'callflow'; } elseif ( request()->is('extensions*', 'trunks*', 'webphone*', 'call-center*', 'provisioning*', 'blacklist*', 'dect*') || request()->is(...$pbxAppPaths) ) { $navActive = 'pbx'; } elseif (request()->is('cdr*', 'audit-logs*', 'recordings*')) { $navActive = 'monitoring'; } elseif (request()->is('reports*')) { $navActive = 'reports'; } elseif (request()->is('dialer*')) { $navActive = 'dialer'; } elseif (request()->is('users*', 'roles*', 'integrations*', 'backup*', 'firewall*', 'fail2ban*', 'system/release-center*', 'system/release-center/changes*')) { $navActive = 'admin'; } elseif (request()->is('settings*', 'diagnostics*')) { $navActive = 'settings'; } @endphp
{{-- ══ PRIMARY RAIL ══ --}} {{-- ══ SECONDARY PANEL ══ --}}
@if(Auth::user() && Auth::user()->extension) @endif
{{ $slot ?? '' }} @yield('content')

Copyright {{ date('Y') }}.

VConnect

VConnect
@if ($nobleBuildPath('resources/js/app.js')) @endif @stack('plugin-scripts') {{-- TEMPORARILY DISABLED TO DEBUG JS ERROR --}} {{-- @if ($nobleBuildPath('resources/js/pages/template.js')) @endif --}} @stack('custom-scripts') @stack('scripts') {{-- Click-to-dial: available app-wide. Rings the logged-in user's own extension, then dials the number out when they answer. --}}