feat(appshell): add org-switcher card and bump sidebar width to w-72

Introduces SidebarHeader.vue — a PrimeVue-only org-switcher that
replaces the centered Crewli wordmark at the top of the sidebar. The
component mirrors the legacy Vuetify OrganisationSwitcher (avatar with
org initials, organisation name, plan-tier placeholder, dropdown
chevron, PrimeVue Menu of available orgs) but cannot reuse it
directly per the R-10 layout-shell-isolation invariant.

Plan-tier shows a hardcoded "Pro" placeholder until the backend
Organisation resource exposes a plan field — tracked separately, not
in F3.5 scope. When the user has no active organisation (portal
users, fresh super_admin), the component degrades to the original
title block so PortalLayout continues to read "Crewli Portal".

Desktop sidebar width bumped w-64 → w-72 (256 → 288 px) to give the
org-switcher card breathing room and accommodate the user-info card
arriving in B3. Mobile Drawer width bumped 16rem → 18rem to match.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-05-12 00:41:09 +02:00
parent a17dbb7dfd
commit 8f3a404a42
2 changed files with 109 additions and 7 deletions

View File

@@ -94,10 +94,8 @@ function toggleUserMenu(event: Event) {
<template>
<div class="crewli-app-shell flex min-h-screen">
<!-- Desktop sidebar (lg+) -->
<aside class="hidden lg:flex w-64 flex-col border-r border-surface-200 bg-surface-0">
<div class="flex h-16 items-center justify-center border-b border-surface-200">
<span class="text-xl font-semibold text-primary-500">{{ title }}</span>
</div>
<aside class="hidden lg:flex w-72 flex-col border-r border-surface-200 bg-surface-0">
<SidebarHeader :title="title" />
<nav class="flex-1 overflow-y-auto p-3">
<template
v-for="(item, idx) in navItems"
@@ -130,12 +128,12 @@ function toggleUserMenu(event: Event) {
v-model:visible="mobileNavOpen"
position="left"
class="lg:hidden"
:pt="{ root: { style: { width: '16rem' } } }"
:pt="{ root: { style: { width: '18rem' } }, header: { class: 'p-0' } }"
>
<template #header>
<span class="text-lg font-semibold text-primary-500">{{ title }}</span>
<SidebarHeader :title="title" />
</template>
<nav class="flex flex-col">
<nav class="flex flex-col p-3">
<template
v-for="(item, idx) in navItems"
:key="idx"