{{-- v4.17.0 §A1.5 — LA COQUILLE DE STUDIO : une seule, responsive. Au téléphone : l'en-tête (wordmark de l'installation + « Studio », thème, cloche, avatar), la ligne de contexte, la zone défilante, la barre du bas — Espaces · Le point · Publications · Livrables · Demandes · Compte, avec les badges. Sur ordinateur (≥ 1024 px) : la barre latérale (Vue d'ensemble, Réunions, Demandes, puis la liste des espaces avec badges, pied = utilisateur + thème), la barre du haut (recherche, « Nouveau », cloche), et pour un espace la rangée d'onglets. C'est le MÊME HTML : la feuille décide de ce qui se montre. ⚠️ v4.17.4 §A — La barre du bas a DEUX états : hors espace elle ne montre que Espaces · Demandes · Compte ; dans un espace, les trois onglets de l'espace (Le point · Publications · Livrables) s'y ajoutent. Un onglet qui ne mène nulle part n'est pas un onglet. ⚠️ v4.17.3 §B1 — Tous les liens de navigation interne portent `wire:navigate` : la barre du bas, la barre latérale, la rangée d'onglets, l'avatar, « Nouveau ». Le changement d'écran est côté client, sans rechargement complet — donc sans repasser par le service worker. ⚠️ La palette est celle de l'INSTALLATION (`PaletteTheme::deLInstallation()`), posée PAR THÈME (§C) : Studio naît avec le mode sombre juste. Un logo est TOUJOURS sur plaque. --}} @props([ 'espace' => null, 'espaces' => null, 'badges' => [], 'onglet' => 'espaces', 'titre' => 'Vos espaces', 'contexte' => '', ]) @php use App\Support\EspaceClient\AppClient; use App\Support\EspaceClient\PaletteTheme; use App\Support\Identite; $palette = PaletteTheme::style(PaletteTheme::deLInstallation()); $espaces = $espaces ?? collect(); $user = auth()->user(); $logo = Identite::logoRecadre(); $marque = Identite::marque(); $parEspace = $badges['par_espace'] ?? []; $nBadge = fn (?int $n): ?int => ($n ?? 0) > 0 ? $n : null; // ⚠️ v4.17.4 §A — LA BARRE DU BAS A DEUX ÉTATS. « Le point », « Publications » et « Livrables » // sont les écrans d'UN espace : hors espace ils n'avaient rien à montrer et renvoyaient tous // les trois à la liste — des boutons qui ne mènent nulle part. Ils ne sont donc plus // construits du tout tant qu'aucun espace n'est ouvert ; ouvrir un espace les fait paraître, // et la barre raconte alors elle-même où l'on est. $navigation = [ ['cle' => 'espaces', 'libelle' => 'Espaces', 'url' => route('studio.espaces'), 'icone' => 'grille', 'badge' => $nBadge($badges['total'] ?? 0)], ]; if ($espace !== null) { $navigation[] = ['cle' => 'point', 'libelle' => 'Le point', 'url' => route('studio.point', ['espace' => $espace->id]), 'icone' => 'accueil', 'badge' => $nBadge($parEspace[$espace->id] ?? 0)]; $navigation[] = ['cle' => 'publications', 'libelle' => 'Publications', 'url' => route('studio.publications', ['espace' => $espace->id]), 'icone' => 'publications', 'badge' => $nBadge($badges['publications'][$espace->id] ?? 0)]; $navigation[] = ['cle' => 'livrables', 'libelle' => 'Livrables', 'url' => route('studio.livrables', ['espace' => $espace->id]), 'icone' => 'livrables', 'badge' => $nBadge($badges['livrables'][$espace->id] ?? 0)]; } $navigation[] = ['cle' => 'demandes', 'libelle' => 'Demandes', 'url' => $espace ? route('studio.demandes-espace', ['espace' => $espace->id]) : route('studio.demandes'), 'icone' => 'bulle', 'badge' => $nBadge($badges['demandes'] ?? 0)]; $navigation[] = ['cle' => 'compte', 'libelle' => 'Compte', 'url' => route('studio.compte'), 'icone' => 'compte', 'badge' => null]; $onglets = $espace === null ? [] : [ ['cle' => 'point', 'libelle' => 'Le point', 'url' => route('studio.point', ['espace' => $espace->id]), 'badge' => null], ['cle' => 'publications', 'libelle' => 'Publications', 'url' => route('studio.publications', ['espace' => $espace->id]), 'badge' => $nBadge($badges['publications'][$espace->id] ?? 0)], ['cle' => 'livrables', 'libelle' => 'Livrables', 'url' => route('studio.livrables', ['espace' => $espace->id]), 'badge' => $nBadge($badges['livrables'][$espace->id] ?? 0)], ['cle' => 'documents', 'libelle' => 'Documents', 'url' => route('studio.documents', ['espace' => $espace->id]), 'badge' => null], ['cle' => 'reunions', 'libelle' => 'Réunions', 'url' => route('studio.reunions-espace', ['espace' => $espace->id]), 'badge' => null], ['cle' => 'demandes', 'libelle' => 'Demandes', 'url' => route('studio.demandes-espace', ['espace' => $espace->id]), 'badge' => null], ['cle' => 'quantites', 'libelle' => 'Quantités', 'url' => route('studio.quantites', ['espace' => $espace->id]), 'badge' => null], ]; @endphp
{{-- ═══ ORDINATEUR : la barre latérale ═══ --}}
{{-- ═══ TÉLÉPHONE : l'en-tête ═══ --}}
@if ($logo) {{ $marque }} @else {{ $marque }} @endif Studio

{{ $titre }}

@if ($contexte !== '') {{ $contexte }} @endif
{{-- ═══ ORDINATEUR : la barre du haut ═══ --}}
{{ $titre }}{{ $contexte !== '' ? ' · '.$contexte : '' }}
Nouveau @auth @endauth
@if ($onglets !== [])
@if ($espace->logoDuClient()) @else {{ AppClient::initiales($espace->nomCourtDuClient()) }} @endif

{{ $espace->nomCourtDuClient() }}

{{ $contexte }}

@endif {{ $slot }}
{{-- ═══ TÉLÉPHONE : la barre du bas ═══ --}}