@s3pweb/shell-ui 0.1.0 → 0.1.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.js +2544 -1926
- package/dist/index.js.map +1 -1
- package/dist/themes/s3pweb.css +122 -51
- package/package.json +8 -5
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../../../node_modules/.pnpm/react@19.2.4/node_modules/react/cjs/react-compiler-runtime.production.js","../../../node_modules/.pnpm/react@19.2.4/node_modules/react/cjs/react-compiler-runtime.development.js","../../../node_modules/.pnpm/react@19.2.4/node_modules/react/compiler-runtime.js","../src/lib/utils.ts","../src/components/button.tsx","../src/components/hover-card.tsx","../src/components/popover.tsx","../src/components/tooltip.tsx","../src/i18n.ts","../src/lib/popover-offsets.ts","../src/lib/use-media-query.ts","../src/lib/sidebar-layout-context.tsx","../src/types.ts","../src/sidebar.tsx","../src/shell.tsx","../src/components/partner-cluster.tsx","../src/components/ecosystem-mega-panel.tsx","../src/components/user-menu.tsx","../src/components/layout-switcher.tsx","../src/components/actions-menu.tsx","../src/components/realtime-pulse.tsx"],"sourcesContent":["/**\n * @license React\n * react-compiler-runtime.production.js\n *\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n\"use strict\";\nvar ReactSharedInternals =\n require(\"react\").__CLIENT_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE;\nexports.c = function (size) {\n return ReactSharedInternals.H.useMemoCache(size);\n};\n","/**\n * @license React\n * react-compiler-runtime.development.js\n *\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n\"use strict\";\n\"production\" !== process.env.NODE_ENV &&\n (function () {\n var ReactSharedInternals =\n require(\"react\").__CLIENT_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE;\n exports.c = function (size) {\n var dispatcher = ReactSharedInternals.H;\n null === dispatcher &&\n console.error(\n \"Invalid hook call. Hooks can only be called inside of the body of a function component. This could happen for one of the following reasons:\\n1. You might have mismatching versions of React and the renderer (such as React DOM)\\n2. You might be breaking the Rules of Hooks\\n3. You might have more than one copy of React in the same app\\nSee https://react.dev/link/invalid-hook-call for tips about how to debug and fix this problem.\"\n );\n return dispatcher.useMemoCache(size);\n };\n })();\n","/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n'use strict';\n\nif (process.env.NODE_ENV === 'production') {\n module.exports = require('./cjs/react-compiler-runtime.production.js');\n} else {\n module.exports = require('./cjs/react-compiler-runtime.development.js');\n}\n","import { clsx, type ClassValue } from 'clsx';\nimport { twMerge } from 'tailwind-merge';\n\nexport function cn(...inputs: ClassValue[]) {\n return twMerge(clsx(inputs));\n}\n","/* eslint-disable react-refresh/only-export-components -- Exports CVA variants intentionally (shadcn/ui pattern) */\nimport * as React from 'react';\nimport { cva, type VariantProps } from 'class-variance-authority';\nimport { Slot } from 'radix-ui';\n\nimport { cn } from '../lib/utils';\n\n/**\n * Button — shadcn/ui Button installed via `npx shadcn@latest add button`,\n * customized with the s3pweb design-system values (rounded-sm, font-semibold,\n * 38px icon size, brand-tuned ghost hover) so the shell's top-bar / footer\n * buttons render identically to the live SaaS shell.\n */\nconst buttonVariants = cva(\n \"inline-flex items-center justify-center gap-2 whitespace-nowrap rounded-sm text-sm font-semibold transition-colors disabled:pointer-events-none disabled:opacity-45 [&_svg]:pointer-events-none [&_svg:not([class*='size-'])]:size-4 shrink-0 [&_svg]:shrink-0 outline-none focus-visible:outline-2 focus-visible:outline-cta focus-visible:outline-offset-2 aria-invalid:outline-destructive\",\n {\n variants: {\n variant: {\n default: 'bg-primary text-primary-foreground hover:bg-primary/90',\n destructive: 'bg-destructive text-destructive-foreground hover:bg-destructive/90',\n outline: 'border border-input bg-background text-foreground hover:bg-primary hover:text-primary-foreground',\n secondary: 'bg-secondary text-secondary-foreground hover:bg-cta hover:text-cta-foreground',\n ghost: 'bg-transparent text-foreground hover:bg-secondary hover:text-secondary-foreground dark:hover:bg-primary dark:hover:text-primary-foreground',\n link: 'text-primary underline underline-offset-4 hover:underline',\n },\n size: {\n 'default': 'h-[38px] px-[18px]',\n 'xs': \"h-[26px] gap-1 px-[9px] text-[11px] has-[>svg]:px-2 [&_svg:not([class*='size-'])]:size-3\",\n 'sm': 'h-8 gap-1.5 px-[13px] text-xs',\n 'lg': 'h-11 px-[22px] text-sm',\n 'icon': 'size-[38px] px-0',\n 'icon-xs': \"size-[26px] [&_svg:not([class*='size-'])]:size-3\",\n 'icon-sm': 'size-8 px-0',\n 'icon-lg': 'size-11 px-0',\n },\n },\n defaultVariants: {\n variant: 'default',\n size: 'default',\n },\n },\n);\n\nfunction Button({\n className,\n variant = 'default',\n size = 'default',\n asChild = false,\n ...props\n}: React.ComponentProps<'button'> &\n VariantProps<typeof buttonVariants> & {\n asChild?: boolean;\n }) {\n const Comp = asChild ? Slot.Root : 'button';\n\n return <Comp data-slot=\"button\" data-variant={variant} data-size={size} className={cn(buttonVariants({ variant, size, className }))} {...props} />;\n}\n\nexport { Button, buttonVariants };\n","import * as React from 'react';\nimport { HoverCard as HoverCardPrimitive } from 'radix-ui';\n\nimport { cn } from '../lib/utils';\n\n/**\n * HoverCard — shadcn-style wrapper around Radix HoverCard, mirroring the\n * brand-themed Tooltip in `./tooltip.tsx`. Use it for any rich-content popup\n * that should open on hover (e.g. a partners list, user-profile preview,\n * avatar tooltip with metadata). When you need keyboard-equivalent click\n * semantics or a focus-trapped menu, reach for DropdownMenu instead.\n *\n * Defaults: openDelay 200ms / closeDelay 100ms — felt right against the\n * existing Tooltip's instant open. Override per-instance when needed.\n */\n\nfunction HoverCard({ openDelay = 200, closeDelay = 100, ...props }: React.ComponentProps<typeof HoverCardPrimitive.Root>) {\n return <HoverCardPrimitive.Root data-slot=\"hover-card\" openDelay={openDelay} closeDelay={closeDelay} {...props} />;\n}\n\nfunction HoverCardTrigger({ ...props }: React.ComponentProps<typeof HoverCardPrimitive.Trigger>) {\n return <HoverCardPrimitive.Trigger data-slot=\"hover-card-trigger\" {...props} />;\n}\n\nfunction HoverCardContent({ className, align = 'center', sideOffset = 6, children, ...props }: React.ComponentProps<typeof HoverCardPrimitive.Content>) {\n return (\n <HoverCardPrimitive.Portal>\n <HoverCardPrimitive.Content\n data-slot=\"hover-card-content\"\n align={align}\n sideOffset={sideOffset}\n className={cn(\n 'z-50 w-64 origin-(--radix-hover-card-content-transform-origin) animate-in overflow-hidden rounded-md border bg-popover text-popover-foreground shadow-md outline-none fade-in-0 zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95',\n className,\n )}\n {...props}\n >\n {children}\n </HoverCardPrimitive.Content>\n </HoverCardPrimitive.Portal>\n );\n}\n\nexport { HoverCard, HoverCardTrigger, HoverCardContent };\n","import * as React from 'react';\nimport { Popover as PopoverPrimitive } from 'radix-ui';\n\nimport { cn } from '../lib/utils';\n\n/**\n * Popover — shadcn-style wrapper around Radix Popover, mirroring the\n * brand-themed Tooltip + HoverCard primitives. Use it for click-triggered\n * rich-content popups (vs. HoverCard's hover semantics).\n */\n\nfunction Popover({ ...props }: React.ComponentProps<typeof PopoverPrimitive.Root>) {\n return <PopoverPrimitive.Root data-slot=\"popover\" {...props} />;\n}\n\nfunction PopoverTrigger({ ...props }: React.ComponentProps<typeof PopoverPrimitive.Trigger>) {\n return <PopoverPrimitive.Trigger data-slot=\"popover-trigger\" {...props} />;\n}\n\n/**\n * Use to decouple the popover's positioning anchor from its click trigger.\n * Typical case: a row of items where ONE small button opens the popover, but\n * the popover should anchor to the whole row so it doesn't move when the\n * trigger's `transform` changes on hover.\n */\nfunction PopoverAnchor({ ...props }: React.ComponentProps<typeof PopoverPrimitive.Anchor>) {\n return <PopoverPrimitive.Anchor data-slot=\"popover-anchor\" {...props} />;\n}\n\n/**\n * Wraps a child element so clicking it closes the popover (Radix forwards the\n * click + close to the underlying element via `asChild`). Use to make\n * panel-internal links / buttons dismiss the popover before navigating.\n */\nfunction PopoverClose({ ...props }: React.ComponentProps<typeof PopoverPrimitive.Close>) {\n return <PopoverPrimitive.Close data-slot=\"popover-close\" {...props} />;\n}\n\nfunction PopoverContent({ className, align = 'center', sideOffset = 6, children, ...props }: React.ComponentProps<typeof PopoverPrimitive.Content>) {\n return (\n <PopoverPrimitive.Portal>\n <PopoverPrimitive.Content\n data-slot=\"popover-content\"\n align={align}\n sideOffset={sideOffset}\n className={cn(\n // Default width is `w-auto` — the inner content drives the size.\n // Pass `className='w-72'` (or whatever) on the consumer side when you\n // want a fixed shape, mirroring the HoverCardContent ergonomics.\n 'z-50 w-auto origin-(--radix-popover-content-transform-origin) animate-in overflow-hidden rounded-md border bg-popover text-popover-foreground shadow-md outline-none fade-in-0 zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95',\n className,\n )}\n {...props}\n >\n {children}\n </PopoverPrimitive.Content>\n </PopoverPrimitive.Portal>\n );\n}\n\nexport { Popover, PopoverTrigger, PopoverAnchor, PopoverClose, PopoverContent };\n","import * as React from 'react';\nimport { Tooltip as TooltipPrimitive } from 'radix-ui';\n\nimport { cn } from '../lib/utils';\n\n/**\n * Tooltip — shadcn/ui (added via `npx shadcn@latest add tooltip`),\n * customized for the s3pweb shell to match the SaaS app's tooltip:\n * - light popover surface (bg-popover / text-popover-foreground / border)\n * instead of shadcn's default dark inverted tooltip\n * - no arrow\n */\n\nfunction TooltipProvider({ delayDuration = 0, ...props }: React.ComponentProps<typeof TooltipPrimitive.Provider>) {\n return <TooltipPrimitive.Provider data-slot=\"tooltip-provider\" delayDuration={delayDuration} {...props} />;\n}\n\nfunction Tooltip({ ...props }: React.ComponentProps<typeof TooltipPrimitive.Root>) {\n return (\n <TooltipProvider>\n <TooltipPrimitive.Root data-slot=\"tooltip\" {...props} />\n </TooltipProvider>\n );\n}\n\nfunction TooltipTrigger({ ...props }: React.ComponentProps<typeof TooltipPrimitive.Trigger>) {\n return <TooltipPrimitive.Trigger data-slot=\"tooltip-trigger\" {...props} />;\n}\n\nfunction TooltipContent({ className, sideOffset = 0, children, ...props }: React.ComponentProps<typeof TooltipPrimitive.Content>) {\n return (\n <TooltipPrimitive.Portal>\n <TooltipPrimitive.Content\n data-slot=\"tooltip-content\"\n sideOffset={sideOffset}\n className={cn(\n 'z-50 w-fit origin-(--radix-tooltip-content-transform-origin) animate-in rounded-md border bg-popover px-3 py-1.5 text-xs text-balance text-popover-foreground shadow-md fade-in-0 zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95',\n className,\n )}\n {...props}\n >\n {children}\n </TooltipPrimitive.Content>\n </TooltipPrimitive.Portal>\n );\n}\n\nexport { Tooltip, TooltipTrigger, TooltipContent, TooltipProvider };\n","/**\n * Built-in translations for shell-ui's chrome (sidebar collapse, theme toggle,\n * nav-mode toggle, logout). Consumers pass a `locale` prop to <Shell> and the\n * component picks the right strings — no need to wire up an external i18n\n * library just to label four buttons.\n */\n\nexport type ShellLocale = 'fr' | 'en';\n\nexport interface ShellStrings {\n collapse: string;\n expand: string;\n logout: string;\n themeDarkMode: string;\n themeLightMode: string;\n navUseTop: string;\n navUseSidebar: string;\n moreLabel: string;\n}\n\nconst STRINGS: Record<ShellLocale, ShellStrings> = {\n fr: {\n collapse: 'Réduire le menu',\n expand: 'Étendre le menu',\n logout: 'Déconnexion',\n themeDarkMode: 'Mode sombre',\n themeLightMode: 'Mode clair',\n navUseTop: 'Navigation en haut',\n navUseSidebar: 'Navigation à gauche',\n moreLabel: 'Plus',\n },\n en: {\n collapse: 'Collapse menu',\n expand: 'Expand menu',\n logout: 'Log out',\n themeDarkMode: 'Dark mode',\n themeLightMode: 'Light mode',\n navUseTop: 'Top navigation',\n navUseSidebar: 'Sidebar navigation',\n moreLabel: 'More',\n },\n};\n\nexport function getShellStrings(locale: ShellLocale = 'fr'): ShellStrings {\n return STRINGS[locale] ?? STRINGS.fr;\n}\n","/**\n * Single source of truth for every popover/tooltip `sideOffset` in shell-ui.\n *\n * The goal: regardless of the trigger element's actual size, every popover\n * lands the same visual distance past the row's edge (top-bar) or past the\n * sidebar's right edge (sidebar). Without these constants, each call site\n * tunes its own number and they drift apart as triggers get added or resized.\n *\n * If you find yourself hardcoding a `sideOffset` somewhere, add a new entry\n * here instead. Document what the trigger's geometry is so the value is\n * recomputable when the trigger changes.\n */\n\n/** Visual gap between any popover and the trigger's containing row / column edge. */\nexport const POPOVER_GAP = 8;\n\n/**\n * Top-bar popovers (open downward).\n *\n * The header row is 38 px tall (h-10 ghost icon Button). Triggers that fill\n * that height (38 px Button) need offset = `POPOVER_GAP`. Shorter triggers\n * (30 px nav buttons with `my-1`, 30 px partners chip centered in the row)\n * sit 4 px above the row's bottom, so they need offset = `POPOVER_GAP + 4`\n * to land at the same Y.\n */\nexport const TOPBAR_OFFSET = {\n /** Trigger fills the row vertically — 38 px ghost icon Button. */\n fullRow: POPOVER_GAP, // = 8\n /** Trigger is shorter than the row — 30 px nav button or partners chip. */\n shortRow: POPOVER_GAP + 4, // = 12\n} as const;\n\n/**\n * Sidebar popovers (open to the right).\n *\n * Geometry math (collapsed sidebar = 64 px wide):\n * - Nav-group / nav-item button: `w-full` inside the nav's `p-2`\n * → right edge at `64 - 8 = 56` (no scrollbar) or `64 - 8 - scrollbarWidth`\n * (with scrollbar). The `navGroup` constant assumes no scrollbar; for\n * dynamic compensation use `useSidebarScrollbarWidth()` and add the\n * measured width.\n * - Footer ActionButton (collapsed): 32×32 centered inside the footer's\n * `p-2` → right edge at `8 + (48 - 32) / 2 + 32 = 48`.\n * - User-section avatar: has its own `p-1` padding inside `p-2`, so the\n * visible avatar circle is further left — needs a much higher offset.\n *\n * All values land the popover at `sidebar_right + POPOVER_GAP` = 72.\n */\nexport const SIDEBAR_OFFSET = {\n /** Nav-group / nav-item button — collapsed sidebar fly-out. */\n navGroup: 16,\n /** Footer ActionButton — expanded mode (full-width row, right at sidebar_right − 8). */\n actionExpanded: 16,\n /** Footer ActionButton — collapsed mode (centered 32 px button). */\n actionCollapsed: 24,\n /** User-section avatar — expanded mode (full-width row with inner p-1). */\n userExpanded: 48,\n /** User-section avatar — collapsed mode. */\n userCollapsed: 20,\n} as const;\n","import { useSyncExternalStore } from 'react';\n\n/**\n * Subscribe to a CSS media query. Returns `true` when the query matches.\n *\n * Uses `useSyncExternalStore` to bridge `MediaQueryList` to React's\n * concurrent-render-safe subscription model — no `setState` inside `useEffect`\n * and no extra render on mount.\n *\n * SSR-safe: the server snapshot returns `false`.\n */\nexport function useMediaQuery(query: string): boolean {\n return useSyncExternalStore(\n callback => {\n if (typeof window === 'undefined' || typeof window.matchMedia !== 'function') return () => {};\n const mql = window.matchMedia(query);\n mql.addEventListener('change', callback);\n return () => mql.removeEventListener('change', callback);\n },\n () => (typeof window === 'undefined' || typeof window.matchMedia !== 'function' ? false : window.matchMedia(query).matches),\n () => false,\n );\n}\n","/* eslint-disable react-refresh/only-export-components -- the hook is the\n primary public API of this module; splitting the Provider into its own\n file would force consumers to import two paths for one concept. Fast\n refresh impact is negligible (file changes rarely). */\nimport { createContext, useContext } from 'react';\n\n/**\n * SidebarLayoutContext — provides live layout measurements from the Sidebar\n * to its descendants. Currently exposes the nav scroll container's vertical\n * scrollbar width so collapsed-mode flyouts can compensate their `sideOffset`\n * and stay anchored at the sidebar's right edge regardless of scrollbar\n * presence.\n */\nexport interface SidebarLayout {\n /** 0 when no scrollbar; ~6–17 px depending on OS / theme when present. */\n scrollbarWidth: number;\n}\n\nconst SidebarLayoutCtx = createContext<SidebarLayout>({ scrollbarWidth: 0 });\n\nexport const SidebarLayoutProvider = SidebarLayoutCtx.Provider;\n\nexport function useSidebarLayout(): SidebarLayout {\n return useContext(SidebarLayoutCtx);\n}\n","import type { ReactNode } from 'react';\n\nexport interface NavItem {\n id: string;\n label: string;\n icon?: ReactNode;\n active?: boolean;\n badge?: ReactNode;\n /**\n * When set, the item renders as an `<a href>` instead of a `<button>` so\n * native browser semantics work (right-click → Open in new tab, middle-click,\n * keyboard navigation as a link). The default `onClick` still calls\n * `onItemSelect` with `event.preventDefault()` on plain left-click so SPA\n * routers stay in control. Modifier keys (cmd/ctrl/shift/middle button) are\n * allowed through to the browser.\n */\n href?: string;\n /** Free-form payload — passed back to onItemSelect (handy for routing metadata). */\n meta?: unknown;\n /**\n * Theme hook — rendered as `data-shell-ui-nav-slug` on the item's root.\n * Defaults to `id` when omitted. Override only when you need a CSS-friendly\n * theme key that's different from your `id` (e.g. when `id` is a UUID or\n * a route path that doesn't make a stable CSS selector).\n */\n slug?: string;\n}\n\nexport interface NavGroup {\n id: string;\n label: string;\n icon?: ReactNode;\n items: NavItem[];\n active?: boolean;\n expanded?: boolean;\n /**\n * Theme hook — rendered as `data-shell-ui-nav-slug` on the group's root.\n * Defaults to `id` when omitted. Brand themes use it to apply per-module\n * decoration (e.g. coloured icon chips in the s3pweb theme).\n */\n slug?: string;\n}\n\nexport type NavEntry = NavItem | NavGroup;\n\nexport function isNavGroup(entry: NavEntry): entry is NavGroup {\n return 'items' in entry;\n}\n\n/**\n * Action button rendered alongside the built-in theme / nav-mode / logout\n * controls (sidebar footer cluster + top-bar right cluster). Use for things\n * like fullscreen, mobile-mode, density toggles, etc. — Shell paints them\n * with the same look as the built-in toggles in both layouts.\n *\n * When `hoverContent` is provided, the action button becomes a HoverCard\n * trigger and `hoverContent` is rendered in the popover on hover (e.g. a\n * partners list, user-profile preview). `onClick` is optional in that case\n * — hover-only actions don't need a click handler.\n */\nexport interface ShellAction {\n id: string;\n label: string;\n icon: ReactNode;\n onClick?: () => void;\n /** Toggle-button-style active state — applies a subtle highlight when true. */\n active?: boolean;\n /**\n * When set, the trigger opens a **HoverCard** with this content on hover.\n * Shell handles placement automatically: opens downward in the top-bar,\n * sideways in the sidebar footer. Mutually exclusive with `clickContent`\n * — pick the trigger semantics, not both.\n */\n hoverContent?: ReactNode;\n /**\n * When set, the trigger opens a **Popover** with this content on click\n * (focus-trapping, stays open until dismissed). Use this when the\n * popover holds interactive controls (buttons, links, forms) — hover\n * dismissal would be too fragile for that case.\n */\n clickContent?: ReactNode;\n /**\n * Override the default icon-button rendering with a self-contained widget\n * (e.g. a `<PartnerCluster>` that owns its own popover, a status panel,\n * an avatar with menu).\n *\n * - **Top-bar mode**: rendered AS-IS, regardless of width.\n * - **Sidebar mode (expanded)**: rendered AS-IS — falls back to\n * `customTrigger` when `customSidebarTrigger` is not set. The widget\n * should fit the sidebar width (~256px).\n * - **Sidebar mode (collapsed, ~32px)**: fallback to the standard icon\n * button + `hoverContent` / `clickContent` wrap, since the custom\n * widget likely won't fit. Make sure to set a reasonable `icon` and\n * pair the action with `clickContent` for the collapsed popup.\n *\n * When `customTrigger` renders, `hoverContent` and `clickContent` are\n * NOT wrapped around it — the widget owns its own popup wiring.\n */\n customTrigger?: ReactNode;\n /**\n * Sidebar-expanded override for `customTrigger`. Use when the widget\n * needs different layout / popover positioning in the sidebar than in\n * the top-bar (e.g. label visible, popover side='right'). When omitted,\n * sidebar-expanded falls back to `customTrigger`.\n */\n customSidebarTrigger?: ReactNode;\n /**\n * Where the action renders relative to the built-in cluster:\n * - 'leading' — before the nav-mode toggle (or top of footer in sidebar)\n * - 'trailing' (default) — after theme toggle, before user avatar\n * (or below built-in toggles in sidebar)\n * Within a placement bucket, actions render in array order.\n */\n placement?: 'leading' | 'trailing';\n /**\n * Draw a separator immediately after this action — a vertical 1px line\n * in the top-bar right cluster, a horizontal 1px line spanning the full\n * footer width in the sidebar. Handy for visually grouping an action\n * (e.g. an ecosystem cluster) apart from the rest.\n */\n dividerAfter?: boolean;\n /**\n * When the top-bar collapses its actions cluster (narrow viewport), this\n * action stays inline instead of moving into the \"…\" overflow popover.\n * Use for widgets whose `customTrigger` is already responsive on its own\n * (e.g. a partners cluster that swaps to a \"+N\" chip via its own internal\n * media query). Default false — every action collapses.\n */\n keepInlineWhenCompact?: boolean;\n}\n","import clsx from 'clsx';\nimport { ChevronDown, ChevronLeft, ChevronRight, LogOut, Moon, MoreHorizontal, PanelLeft, PanelTop, Sun } from 'lucide-react';\nimport { useEffect, useRef, useState, type ReactNode } from 'react';\nimport { HoverCard, HoverCardContent, HoverCardTrigger } from './components/hover-card';\nimport { Popover, PopoverContent, PopoverTrigger } from './components/popover';\nimport { Tooltip, TooltipContent, TooltipTrigger } from './components/tooltip';\nimport { getShellStrings, type ShellLocale, type ShellStrings } from './i18n';\nimport { SIDEBAR_OFFSET } from './lib/popover-offsets';\nimport { SidebarLayoutProvider, useSidebarLayout, type SidebarLayout } from './lib/sidebar-layout-context';\nimport { useMediaQuery } from './lib/use-media-query';\nimport { cn } from './lib/utils';\nimport type { NavEntry, NavGroup, NavItem, ShellAction } from './types';\nimport { isNavGroup } from './types';\n\n/* ============================================================================\n Public types\n ============================================================================ */\n\nexport interface SidebarUser {\n /** Display name (e.g. \"Addwyn Lelann\"). */\n name: string;\n /** Secondary line shown under the name (e.g. an email or role). */\n subtitle?: string;\n /** Initials shown in the avatar; defaults to first letter of the first two words of `name`. */\n initials?: string;\n}\n\n/**\n * Render-prop for wrapping a leaf item or group button in a tooltip when the\n * sidebar is collapsed. Omit to fall back to the native `title` attribute.\n */\nexport type RenderCollapsedTooltip = (props: { trigger: ReactNode; entry: NavEntry; isGroup: boolean; onItemSelect?: (item: NavItem, group?: NavGroup) => void }) => ReactNode;\n\nexport interface SidebarProps {\n /** Navigation entries to render. */\n items: NavEntry[];\n\n /** Collapsed state — controlled. Consumer owns this. */\n collapsed?: boolean;\n /** Called when the user clicks the collapse toggle. Consumer flips its own state. */\n onCollapseToggle?: () => void;\n\n /** Called when the user clicks a leaf nav item. Consumer wires this to its router. */\n onItemSelect?: (item: NavItem, group?: NavGroup) => void;\n /** Called when the user clicks a group header. Consumer flips group.expanded in its own state. */\n onGroupToggle?: (group: NavGroup) => void;\n\n /** Logo at the top of the sidebar. */\n logo?: ReactNode;\n /** Optional alternate logo shown when collapsed (smaller variant). */\n collapsedLogo?: ReactNode;\n /** Slot under the logo — typically an entity / structure picker. */\n topSlot?: ReactNode;\n\n /* ---- Built-in feature buttons (stateless: pass data + callback) ---- */\n\n /** When set, renders the built-in user section (avatar + name + subtitle + logout). */\n user?: SidebarUser;\n /** Called when the user clicks the logout button in the built-in user section. */\n onLogout?: () => void;\n\n /** Current theme. When `onThemeToggle` is provided, renders a Sun/Moon toggle button. */\n theme?: 'light' | 'dark';\n /** Called when the user clicks the theme toggle. */\n onThemeToggle?: () => void;\n\n /** Current navigation mode. When `onNavModeChange` is provided, renders a PanelLeft/PanelTop toggle. */\n navMode?: 'sidebar' | 'top';\n /** Called with the new mode when the user clicks the nav-mode toggle. */\n onNavModeChange?: (mode: 'sidebar' | 'top') => void;\n\n /* ---- Built-in button visibility (all default to true) ---- */\n\n /** Show the theme toggle when `onThemeToggle` is wired. Default: true. */\n enableThemeToggle?: boolean;\n /** Show the nav-mode toggle when `onNavModeChange` is wired. Default: true. */\n enableNavModeToggle?: boolean;\n /** Show the logout button when `onLogout` is wired. Default: true. */\n enableLogoutButton?: boolean;\n /**\n * Show the decorative `data-shell-ui-nav-has-children` ChevronRight on\n * collapsed nav groups. The expanded-sidebar accordion caret is NOT\n * gated by this flag — it always renders because it doubles as the\n * open/close indicator. Default: false.\n */\n showSubmenuIndicator?: boolean;\n /**\n * Collapse the footer into a single \"Plus\" / \"…\" popover row below\n * `max-height: 820px`. Default: true. Pass `false` to keep every footer\n * control inline regardless of viewport height.\n */\n enablePlusOverflow?: boolean;\n\n /** Extra action buttons rendered in the footer cluster (after theme/nav-mode, before user section). */\n actions?: ShellAction[];\n\n /** Locale for the built-in button labels (collapse / logout / theme / nav-mode). Default: `fr`. */\n locale?: ShellLocale;\n\n /* ---- Escape hatches (override the built-in renderers) ---- */\n\n /** Replace the entire built-in user section with custom content. */\n userSection?: ReactNode;\n /**\n * When set, wraps the avatar+name region in a click-Popover trigger\n * with this content. The region picks up cursor-pointer + ghost-button\n * hover styling. Doesn't apply when `userSection` is set (custom override).\n */\n userMenu?: ReactNode;\n /** Replace the entire built-in footer (theme + nav-mode + any custom extras) with custom content. */\n footer?: ReactNode;\n /** Extra elements rendered above the built-in theme/nav-mode toggles (e.g. brand-specific actions). */\n footerExtra?: ReactNode;\n\n /* ---- Misc ---- */\n\n /** Auto-scroll the active item into view on first render. Default: true. */\n scrollActiveIntoView?: boolean;\n\n /** Render-prop for tooltips on collapsed items / groups. */\n renderCollapsedTooltip?: RenderCollapsedTooltip;\n\n /** Extra classes applied to the root <aside>. */\n className?: string;\n}\n\n/**\n * Stateless sidebar with built-in feature buttons (user / theme / nav-mode).\n * The consumer owns:\n * - the router (active state is passed in via `item.active` / `group.active`)\n * - the collapsed / expanded / theme / nav-mode state (controlled props + callbacks)\n * - i18n (labels come in as props)\n *\n * Style: assumes Tailwind v4. Import `@s3pweb/shell-ui/preset.css` for neutral\n * defaults or `@s3pweb/shell-ui/themes/{s3pweb,aftral}.css` for a brand theme.\n */\nexport function Sidebar({\n items,\n collapsed: collapsedProp,\n onCollapseToggle,\n onItemSelect,\n onGroupToggle,\n logo,\n collapsedLogo,\n topSlot,\n user,\n onLogout,\n theme,\n onThemeToggle,\n navMode,\n onNavModeChange,\n enableThemeToggle = true,\n enableNavModeToggle = true,\n enableLogoutButton = true,\n showSubmenuIndicator = false,\n enablePlusOverflow = true,\n actions,\n locale = 'fr',\n userSection,\n userMenu,\n footer,\n footerExtra,\n scrollActiveIntoView = true,\n renderCollapsedTooltip,\n className,\n}: SidebarProps) {\n const strings = getShellStrings(locale);\n\n // `collapsed` is hybrid controlled/uncontrolled — consumers that need to\n // persist the state (e.g. Zustand) pass `collapsed` + `onCollapseToggle`;\n // anyone else (storybook, ad-hoc usage) lets the component manage it.\n const [internalCollapsed, setInternalCollapsed] = useState(false);\n const isCollapsedControlled = collapsedProp !== undefined;\n const collapsed = isCollapsedControlled ? collapsedProp : internalCollapsed;\n const handleCollapseToggle = () => {\n if (!isCollapsedControlled) setInternalCollapsed(c => !c);\n onCollapseToggle?.();\n };\n\n // Collapse the bulk of the footer into a \"…\" row below 820px tall, matching\n // the topbar's compact-actions pattern. Applies in both expanded and\n // collapsed modes — the trigger renders as a full-width row when expanded\n // and as a single icon button when collapsed. The brand can opt out via\n // `enablePlusOverflow={false}` to keep every footer control inline.\n const compactFooterRaw = useMediaQuery('(max-height: 820px)');\n const compactFooter = enablePlusOverflow && compactFooterRaw;\n\n const builtInFooter = footer ?? (\n <BuiltInFooter\n collapsed={collapsed}\n compact={compactFooter}\n strings={strings}\n theme={theme}\n onThemeToggle={enableThemeToggle ? onThemeToggle : undefined}\n navMode={navMode}\n onNavModeChange={enableNavModeToggle ? onNavModeChange : undefined}\n actions={actions}\n extra={footerExtra}\n />\n );\n\n const builtInUserSection =\n userSection ??\n (user ? (\n <BuiltInUserSection user={user} collapsed={collapsed} logoutLabel={strings.logout} onLogout={enableLogoutButton ? onLogout : undefined} userMenu={userMenu} />\n ) : undefined);\n\n // Measure the nav scroll container's vertical scrollbar so collapsed-mode\n // fly-outs can compensate their `sideOffset`. Without this the popover's\n // X position varies by ~12 px depending on whether the scrollbar is\n // currently rendered. The ResizeObserver fires its initial callback as\n // soon as it observes — no synchronous setState in the effect body.\n const scrollRef = useRef<HTMLDivElement>(null);\n const [scrollbarWidth, setScrollbarWidth] = useState(0);\n useEffect(() => {\n const el = scrollRef.current;\n if (!el) return;\n const update = () => setScrollbarWidth(el.offsetWidth - el.clientWidth);\n const ro = new ResizeObserver(update);\n ro.observe(el);\n const mo = new MutationObserver(update);\n mo.observe(el, { childList: true, subtree: true });\n return () => {\n ro.disconnect();\n mo.disconnect();\n };\n }, [collapsed]);\n const layout: SidebarLayout = { scrollbarWidth };\n\n return (\n <aside\n data-shell-ui-sidebar\n data-collapsed={collapsed || undefined}\n data-has-scrollbar={scrollbarWidth > 0 || undefined}\n className={cn('relative flex h-full flex-col overflow-visible border-r bg-background transition-[width] duration-200', collapsed ? 'w-16' : 'w-64', className)}\n >\n <button\n type=\"button\"\n onClick={handleCollapseToggle}\n className=\"absolute -right-3 top-1/2 z-10 flex h-6 w-6 -translate-y-1/2 cursor-pointer items-center justify-center rounded-full border bg-background text-foreground shadow-sm transition-colors hover:bg-accent\"\n title={collapsed ? strings.expand : strings.collapse}\n aria-label={collapsed ? strings.expand : strings.collapse}\n >\n {collapsed ? <ChevronRight className=\"h-3.5 w-3.5\" /> : <ChevronLeft className=\"h-3.5 w-3.5\" />}\n </button>\n\n {(logo || collapsedLogo) && (\n <div data-shell-ui-logo className={clsx('relative flex items-center justify-center border-b py-4', collapsed ? 'px-2' : 'px-4')}>\n {collapsed && collapsedLogo ? collapsedLogo : logo}\n </div>\n )}\n\n <SidebarLayoutProvider value={layout}>\n {topSlot}\n\n <div ref={scrollRef} className=\"min-h-0 flex-1 overflow-y-auto\">\n <SidebarItems\n items={items}\n collapsed={collapsed}\n onItemSelect={onItemSelect}\n onGroupToggle={onGroupToggle}\n scrollActiveIntoView={scrollActiveIntoView}\n renderCollapsedTooltip={renderCollapsedTooltip}\n showSubmenuIndicator={showSubmenuIndicator}\n />\n </div>\n\n {(builtInFooter || builtInUserSection) && (\n <div className=\"mt-auto space-y-1\">\n {builtInFooter && <div className=\"border-t p-2\">{builtInFooter}</div>}\n {builtInUserSection}\n </div>\n )}\n </SidebarLayoutProvider>\n </aside>\n );\n}\n\n/* ============================================================================\n Built-in footer (theme + nav-mode toggles + optional extras)\n ============================================================================ */\n\nconst GHOST_BTN =\n 'inline-flex cursor-pointer items-center gap-1.5 whitespace-nowrap rounded-sm font-semibold transition-colors ' +\n 'bg-transparent text-foreground hover:bg-secondary hover:text-secondary-foreground dark:hover:bg-primary dark:hover:text-primary-foreground';\n\nfunction BuiltInFooter({\n collapsed,\n compact = false,\n strings,\n theme,\n onThemeToggle,\n navMode,\n onNavModeChange,\n actions,\n extra,\n}: {\n collapsed: boolean;\n compact?: boolean;\n strings: ShellStrings;\n theme?: 'light' | 'dark';\n onThemeToggle?: () => void;\n navMode?: 'sidebar' | 'top';\n onNavModeChange?: (mode: 'sidebar' | 'top') => void;\n actions?: ShellAction[];\n extra?: ReactNode;\n}) {\n const hasNavMode = !!onNavModeChange;\n const hasTheme = !!onThemeToggle;\n const hasActions = !!actions && actions.length > 0;\n if (!hasNavMode && !hasTheme && !hasActions && !extra) return null;\n\n const leadingActions = actions?.filter(a => a.placement === 'leading') ?? [];\n const trailingActions = actions?.filter(a => a.placement !== 'leading') ?? [];\n // Compact mode collapses every action that isn't `keepInlineWhenCompact`\n // into a single \"…\" Popover row, mirroring the topbar's compact-actions\n // cluster. Applies in both modes — the trigger reshapes for collapsed.\n const compactActive = compact;\n const leadingInline = compactActive ? leadingActions.filter(a => a.keepInlineWhenCompact) : leadingActions;\n const leadingCollapsed = compactActive ? leadingActions.filter(a => !a.keepInlineWhenCompact) : [];\n const trailingInline = compactActive ? trailingActions.filter(a => a.keepInlineWhenCompact) : trailingActions;\n const trailingCollapsed = compactActive ? trailingActions.filter(a => !a.keepInlineWhenCompact) : [];\n const hasCompactEntries = compactActive && (leadingCollapsed.length > 0 || trailingCollapsed.length > 0 || hasNavMode || hasTheme);\n\n return (\n <div data-shell-ui-footer className={clsx('flex flex-col gap-1', collapsed && 'items-center')}>\n {extra && <div data-shell-ui-footer-extra>{extra}</div>}\n {leadingInline.flatMap(action => [\n <span key={action.id} className=\"animate-in fade-in-0 slide-in-from-bottom-1 duration-200\">\n <ActionButton action={action} collapsed={collapsed} />\n </span>,\n action.dividerAfter ? <div key={`${action.id}-div`} aria-hidden className=\"my-1 h-px w-full bg-border\" /> : null,\n ])}\n {!compactActive && hasNavMode && (\n <span className=\"animate-in fade-in-0 slide-in-from-bottom-1 duration-200\">\n <NavModeToggle collapsed={collapsed} navMode={navMode} onNavModeChange={onNavModeChange} strings={strings} />\n </span>\n )}\n {!compactActive && hasTheme && (\n <span className=\"animate-in fade-in-0 slide-in-from-bottom-1 duration-200\">\n <ThemeToggle collapsed={collapsed} theme={theme} onThemeToggle={onThemeToggle} strings={strings} />\n </span>\n )}\n {trailingInline.flatMap(action => [\n <span key={action.id} className=\"animate-in fade-in-0 slide-in-from-bottom-1 duration-200\">\n <ActionButton action={action} collapsed={collapsed} />\n </span>,\n action.dividerAfter ? <div key={`${action.id}-div`} aria-hidden className=\"my-1 h-px w-full bg-border\" /> : null,\n ])}\n {hasCompactEntries && (\n <span className=\"animate-in fade-in-0 slide-in-from-bottom-1 duration-200\">\n <CompactFooterMenu\n collapsed={collapsed}\n entries={[\n ...leadingCollapsed.map(a => ({ kind: 'action' as const, action: a })),\n ...(hasNavMode\n ? [\n {\n kind: 'navMode' as const,\n onClick: () => onNavModeChange?.(navMode === 'top' ? 'sidebar' : 'top'),\n label: navMode === 'top' ? strings.navUseSidebar : strings.navUseTop,\n },\n ]\n : []),\n ...(hasTheme\n ? [{ kind: 'theme' as const, onClick: () => onThemeToggle?.(), label: theme === 'dark' ? strings.themeLightMode : strings.themeDarkMode, isDark: theme === 'dark' }]\n : []),\n ...trailingCollapsed.map(a => ({ kind: 'action' as const, action: a })),\n ]}\n label={strings.moreLabel}\n />\n </span>\n )}\n </div>\n );\n}\n\nfunction ActionButton({ action, collapsed }: { action: ShellAction; collapsed: boolean }) {\n // When `customSidebarTrigger` (or `customTrigger` as a fallback) is set\n // AND the sidebar is expanded, render it as-is (self-contained widget).\n // When the sidebar is collapsed, the custom widget likely doesn't fit\n // in 32px — fall back to the standard icon button + hover/click wrap\n // so the action still works in collapsed mode.\n const sidebarCustom = action.customSidebarTrigger ?? action.customTrigger;\n if (sidebarCustom && !collapsed) {\n return <>{sidebarCustom}</>;\n }\n const button = (\n <button\n type=\"button\"\n onClick={action.onClick}\n data-shell-ui-footer-action\n data-shell-ui-action-id={action.id}\n data-active={action.active || undefined}\n className={clsx(\n GHOST_BTN,\n collapsed ? 'h-8 w-8 justify-center text-xs' : 'h-8 w-full justify-start px-3.25 text-xs',\n action.active && 'bg-secondary text-secondary-foreground',\n )}\n // The Radix popup IS the tooltip only when it opens on hover —\n // suppress the native `title` to avoid doubling up. `clickContent`\n // opens on click, so the native title is still needed for hover\n // (e.g. when the sidebar is collapsed and the icon button is the\n // only thing the user sees).\n title={action.label}\n aria-label={action.label}\n aria-pressed={action.active}\n >\n <span className={clsx('flex h-4 w-4 shrink-0 items-center justify-center [&_svg]:h-4 [&_svg]:w-4', !collapsed && 'mr-2')}>{action.icon}</span>\n {!collapsed && <span>{action.label}</span>}\n </button>\n );\n const sideOffset = collapsed ? SIDEBAR_OFFSET.actionCollapsed : SIDEBAR_OFFSET.actionExpanded;\n if (action.clickContent) {\n return (\n <Popover>\n <PopoverTrigger asChild>{button}</PopoverTrigger>\n <PopoverContent side=\"right\" align=\"end\" sideOffset={sideOffset} className=\"p-0\">\n {action.clickContent}\n </PopoverContent>\n </Popover>\n );\n }\n if (action.hoverContent) {\n return (\n <HoverCard>\n <HoverCardTrigger asChild>{button}</HoverCardTrigger>\n <HoverCardContent side=\"right\" align=\"end\" sideOffset={sideOffset} className=\"w-auto p-0\">\n {action.hoverContent}\n </HoverCardContent>\n </HoverCard>\n );\n }\n return button;\n}\n\nfunction NavModeToggle({\n collapsed,\n navMode,\n onNavModeChange,\n strings,\n}: {\n collapsed: boolean;\n navMode?: 'sidebar' | 'top';\n onNavModeChange?: (mode: 'sidebar' | 'top') => void;\n strings: ShellStrings;\n}) {\n const isTop = navMode === 'top';\n const label = isTop ? strings.navUseSidebar : strings.navUseTop;\n return (\n <button\n type=\"button\"\n onClick={() => onNavModeChange?.(isTop ? 'sidebar' : 'top')}\n className={clsx(GHOST_BTN, collapsed ? 'h-8 w-8 justify-center text-xs' : 'h-8 w-full justify-start px-3.25 text-xs')}\n title={label}\n aria-label={collapsed ? label : undefined}\n >\n <span className={clsx('flex h-4 w-4 shrink-0 items-center justify-center', !collapsed && 'mr-2')}>\n {isTop ? <PanelLeft className=\"h-4 w-4\" /> : <PanelTop className=\"h-4 w-4\" />}\n </span>\n {!collapsed && <span>{label}</span>}\n </button>\n );\n}\n\nfunction ThemeToggle({ collapsed, theme, onThemeToggle, strings }: { collapsed: boolean; theme?: 'light' | 'dark'; onThemeToggle?: () => void; strings: ShellStrings }) {\n const isDark = theme === 'dark';\n const label = isDark ? strings.themeLightMode : strings.themeDarkMode;\n return (\n <button\n type=\"button\"\n onClick={() => onThemeToggle?.()}\n className={clsx(GHOST_BTN, collapsed ? 'h-8 w-8 justify-center text-xs' : 'h-8 w-full justify-start px-3.25 text-xs')}\n title={label}\n aria-label={collapsed ? label : undefined}\n >\n <span className={clsx('flex h-4 w-4 shrink-0 items-center justify-center', !collapsed && 'mr-2')}>{isDark ? <Sun className=\"h-4 w-4\" /> : <Moon className=\"h-4 w-4\" />}</span>\n {!collapsed && <span>{label}</span>}\n </button>\n );\n}\n\n/* ============================================================================\n Built-in user section (avatar + name + subtitle + logout button)\n ============================================================================ */\n\nfunction defaultInitials(name: string): string {\n return name\n .split(/\\s+/)\n .filter(Boolean)\n .slice(0, 2)\n .map(w => w[0]?.toUpperCase() ?? '')\n .join('');\n}\n\nfunction BuiltInUserSection({\n user,\n collapsed,\n logoutLabel,\n onLogout,\n userMenu,\n}: {\n user: SidebarUser;\n collapsed: boolean;\n logoutLabel: string;\n onLogout?: () => void;\n userMenu?: ReactNode;\n}) {\n const initials = user.initials ?? defaultInitials(user.name);\n const avatarPlusName = (\n <>\n <div className=\"flex h-8 w-8 shrink-0 items-center justify-center rounded-full bg-muted text-xs font-semibold text-muted-foreground\">{initials}</div>\n {!collapsed && (\n <div className=\"min-w-0 flex-1 text-left\">\n <p className=\"truncate text-sm font-medium leading-none text-foreground\">{user.name}</p>\n {user.subtitle && <p className=\"mt-1 truncate text-xs leading-none text-muted-foreground\">{user.subtitle}</p>}\n </div>\n )}\n </>\n );\n\n const userButton = (\n <button\n type=\"button\"\n className={clsx(\n 'flex min-w-0 flex-1 cursor-pointer items-center gap-2 rounded-sm p-1 text-left transition-colors outline-none hover:bg-secondary hover:text-secondary-foreground focus-visible:ring-2 focus-visible:ring-ring',\n collapsed && 'flex-none',\n )}\n title={user.name}\n aria-label={user.name}\n >\n {avatarPlusName}\n </button>\n );\n\n const logoutButton = onLogout && (\n <button type=\"button\" onClick={onLogout} className={clsx(GHOST_BTN, 'h-8 w-8 shrink-0 justify-center text-sm')} title={logoutLabel} aria-label={logoutLabel}>\n <LogOut className=\"h-4 w-4\" />\n </button>\n );\n\n // When userMenu is wired, wrap the whole section root in a Popover and\n // anchor the popover to a hidden span at the section's right edge — so\n // the popover lands a uniform 8px past the sidebar's right edge in BOTH\n // expanded (avatar + name on the left, logout on the right) and\n // collapsed (avatar centered, logout stacked) layouts.\n if (userMenu) {\n // sideOffset is computed so the popover lands a uniform 8px past the\n // sidebar's right edge regardless of where the trigger button sits\n // within the section. The math: sideOffset = (sidebar_right -\n // button_right) + 8. Hardcoded for the two layouts we ship:\n // expanded: user button right ≈ 216 in 256px sidebar → 48\n // collapsed: user button right ≈ 52 in 64px sidebar → 20\n return (\n <Popover>\n <div className={clsx('flex items-center gap-1 border-t p-1', collapsed && 'flex-col')}>\n <PopoverTrigger asChild>{userButton}</PopoverTrigger>\n {logoutButton}\n </div>\n <PopoverContent side=\"right\" align=\"end\" sideOffset={collapsed ? SIDEBAR_OFFSET.userCollapsed : SIDEBAR_OFFSET.userExpanded} className=\"p-0\">\n {userMenu}\n </PopoverContent>\n </Popover>\n );\n }\n\n return (\n <div className={clsx('flex items-center gap-1 border-t p-1', collapsed && 'flex-col')}>\n <div className={clsx('flex min-w-0 flex-1 items-center gap-2 p-1', collapsed && 'flex-none')}>{avatarPlusName}</div>\n {logoutButton}\n </div>\n );\n}\n\n/* ============================================================================\n SidebarItems — just the <nav> (re-usable inside e.g. a mobile <Sheet>)\n ============================================================================ */\n\nexport interface SidebarItemsProps {\n items: NavEntry[];\n collapsed?: boolean;\n onItemSelect?: (item: NavItem, group?: NavGroup) => void;\n onGroupToggle?: (group: NavGroup) => void;\n scrollActiveIntoView?: boolean;\n renderCollapsedTooltip?: RenderCollapsedTooltip;\n /** Show the decorative chevron on collapsed groups. The accordion caret (expanded mode) is always shown. Default: false. */\n showSubmenuIndicator?: boolean;\n}\n\nexport function SidebarItems({\n items,\n collapsed = false,\n onItemSelect,\n onGroupToggle,\n scrollActiveIntoView = true,\n renderCollapsedTooltip,\n showSubmenuIndicator = false,\n}: SidebarItemsProps) {\n return (\n <nav className=\"flex flex-col gap-1 p-2\">\n {items.map(entry => {\n if (isNavGroup(entry)) {\n return (\n <SidebarNavGroup\n key={entry.id}\n group={entry}\n collapsed={collapsed}\n onToggle={onGroupToggle ? () => onGroupToggle(entry) : undefined}\n onItemSelect={onItemSelect}\n scrollActiveIntoView={scrollActiveIntoView}\n renderCollapsedTooltip={renderCollapsedTooltip}\n showSubmenuIndicator={showSubmenuIndicator}\n />\n );\n }\n return (\n <SidebarNavItem\n key={entry.id}\n item={entry}\n collapsed={collapsed}\n onClick={() => onItemSelect?.(entry)}\n scrollActiveIntoView={scrollActiveIntoView}\n renderCollapsedTooltip={renderCollapsedTooltip}\n />\n );\n })}\n </nav>\n );\n}\n\nfunction SidebarNavItem({\n item,\n collapsed,\n onClick,\n scrollActiveIntoView,\n renderCollapsedTooltip,\n}: {\n item: NavItem;\n collapsed: boolean;\n onClick: () => void;\n scrollActiveIntoView: boolean;\n renderCollapsedTooltip?: RenderCollapsedTooltip;\n}) {\n const ref = useRef<HTMLAnchorElement | HTMLButtonElement | null>(null);\n\n useEffect(() => {\n if (scrollActiveIntoView && item.active && ref.current) {\n ref.current.scrollIntoView({ block: 'nearest' });\n }\n }, [scrollActiveIntoView, item.active]);\n\n const sharedClass = clsx(\n 'relative flex w-full cursor-pointer items-center gap-3 rounded-md px-3 py-2 text-sm font-medium transition-colors',\n item.active ? 'bg-primary text-primary-foreground' : 'text-muted-foreground hover:bg-primary/10 hover:text-primary',\n collapsed && 'justify-center px-2',\n );\n // Always set the native `title` so truncated labels (the inner span uses\n // `truncate`) reveal their full text on hover. The only case we skip it is\n // when the consumer renders its own Radix tooltip for the collapsed icon —\n // a native title would double up on that.\n const sharedTitle = collapsed && renderCollapsedTooltip ? undefined : item.label;\n const sharedActive = item.active || undefined;\n\n const hasBadge = item.badge != null && item.badge !== false && item.badge !== '';\n const inner = (\n <>\n {item.icon && (\n <span data-shell-ui-nav-icon className=\"relative flex h-4 w-4 shrink-0 items-center justify-center [&_svg]:h-4 [&_svg]:w-4\">\n {item.icon}\n {/* Collapsed-sidebar dot indicator — surfaces \"there's a badge\"\n when the label (and its badge content) is hidden. */}\n {collapsed && hasBadge && (\n <span aria-hidden data-shell-ui-nav-badge-dot className=\"absolute -top-0.5 -right-0.5 h-2 w-2 rounded-full bg-red-500 ring-2 ring-background\" />\n )}\n </span>\n )}\n {!collapsed && <span className=\"flex-1 truncate text-left\">{item.label}</span>}\n {!collapsed && hasBadge && (\n <span data-shell-ui-nav-badge className=\"ml-auto inline-flex h-5 min-w-5 items-center justify-center rounded-full bg-red-500 px-1.5 text-[10px] font-bold text-white\">\n {item.badge}\n </span>\n )}\n </>\n );\n\n const trigger = item.href ? (\n <a\n ref={node => {\n ref.current = node;\n }}\n href={item.href}\n onClick={e => {\n if (e.metaKey || e.ctrlKey || e.shiftKey || e.altKey || e.button !== 0) return;\n e.preventDefault();\n onClick();\n }}\n data-shell-ui-nav-item\n data-shell-ui-nav-slug={item.slug ?? item.id}\n data-active={sharedActive}\n aria-current={item.active ? 'page' : undefined}\n className={sharedClass}\n title={sharedTitle}\n >\n {inner}\n </a>\n ) : (\n <button\n ref={node => {\n ref.current = node;\n }}\n type=\"button\"\n onClick={onClick}\n data-shell-ui-nav-item\n data-shell-ui-nav-slug={item.slug ?? item.id}\n data-active={sharedActive}\n className={sharedClass}\n title={sharedTitle}\n >\n {inner}\n </button>\n );\n\n if (collapsed && renderCollapsedTooltip) {\n return <>{renderCollapsedTooltip({ trigger, entry: item, isGroup: false })}</>;\n }\n return trigger;\n}\n\nfunction SidebarNavGroup({\n group,\n collapsed,\n onToggle,\n onItemSelect,\n scrollActiveIntoView,\n renderCollapsedTooltip,\n showSubmenuIndicator,\n}: {\n group: NavGroup;\n collapsed: boolean;\n onToggle?: () => void;\n onItemSelect?: (item: NavItem, group?: NavGroup) => void;\n scrollActiveIntoView: boolean;\n renderCollapsedTooltip?: RenderCollapsedTooltip;\n showSubmenuIndicator: boolean;\n}) {\n // Hybrid controlled/uncontrolled — if the consumer passes `group.expanded`,\n // they own the state. Otherwise we manage it locally and auto-open the\n // active group on first render so the user lands inside their current\n // section.\n const [internalExpanded, setInternalExpanded] = useState(() => !!group.active);\n const isExpandedControlled = group.expanded !== undefined;\n const expandedState = isExpandedControlled ? !!group.expanded : internalExpanded;\n const expanded = expandedState && !collapsed;\n\n const handleClick = () => {\n if (!isExpandedControlled) setInternalExpanded(e => !e);\n onToggle?.();\n };\n\n const trigger = (\n <button\n type=\"button\"\n onClick={handleClick}\n data-shell-ui-nav-group-button\n data-active={group.active || undefined}\n className={clsx(\n 'flex w-full cursor-pointer items-center gap-3 rounded-md px-3 py-2 text-sm font-medium transition-colors',\n group.active ? (collapsed ? 'bg-primary text-primary-foreground' : 'bg-primary/5 text-foreground') : 'text-muted-foreground hover:bg-primary/10 hover:text-primary',\n collapsed && 'relative justify-center px-2',\n )}\n aria-expanded={expanded || undefined}\n aria-haspopup={collapsed ? 'menu' : undefined}\n aria-label={collapsed ? group.label : undefined}\n // When collapsed, Radix Tooltip / fly-out renders the label — skip the\n // native title to avoid doubling up. When expanded, set the title so a\n // truncated label can be inspected on hover.\n title={collapsed ? undefined : group.label}\n >\n {group.icon && (\n <span data-shell-ui-nav-icon className=\"flex h-4 w-4 shrink-0 items-center justify-center [&_svg]:h-4 [&_svg]:w-4\">\n {group.icon}\n </span>\n )}\n {!collapsed && <span className=\"flex-1 truncate text-left\">{group.label}</span>}\n {/* Expanded accordion caret — always shown, signals open/close state. */}\n {!collapsed && <ChevronDown className={clsx('h-4 w-4 shrink-0 transition-transform duration-200', expanded && 'rotate-180')} />}\n {collapsed && showSubmenuIndicator && (\n <ChevronRight\n aria-hidden\n data-shell-ui-nav-has-children\n // No `text-` class — inherits the button's current color so the\n // chevron flips white on the active navy chip and stays grey on\n // the idle muted state. The s3pweb theme shifts `right` to `-3px`\n // when the sidebar has a scrollbar so the cue keeps the same\n // visual offset relative to the column's right edge.\n className=\"pointer-events-none absolute top-1/2 right-0 h-3 w-3 -translate-y-1/2 stroke-[2.5] opacity-70\"\n />\n )}\n </button>\n );\n\n // When the consumer supplies its own tooltip implementation, defer to it.\n if (collapsed && renderCollapsedTooltip) {\n const wrapped = renderCollapsedTooltip({ trigger, entry: group, isGroup: true, onItemSelect });\n return (\n <div data-shell-ui-nav-group data-shell-ui-nav-slug={group.slug ?? group.id}>\n {wrapped}\n </div>\n );\n }\n\n // Built-in fly-out menu for collapsed groups. Controlled so that clicking\n // a leaf inside the fly-out can dismiss the panel before routing — Radix\n // Tooltip's default close-on-blur fires too late and the menu stays open.\n if (collapsed) {\n return <CollapsedFlyout group={group} trigger={trigger} onItemSelect={onItemSelect} />;\n }\n\n // Expanded: inline sub-items below the group header, with a grid-rows\n // open/close animation. Children stay in the DOM regardless of state so\n // the transition is smooth.\n return (\n <div data-shell-ui-nav-group data-shell-ui-nav-slug={group.slug ?? group.id} data-expanded={expanded || undefined}>\n {trigger}\n <div className=\"grid transition-[grid-template-rows] duration-200 ease-out\" style={{ gridTemplateRows: expanded ? '1fr' : '0fr' }}>\n <div className=\"overflow-hidden\">\n <div data-shell-ui-nav-children className=\"relative mt-1 ml-5.5 flex flex-col gap-1 border-l border-border/40 pl-3\">\n {group.items.map(item => (\n <SidebarNavItem\n key={item.id}\n item={item}\n collapsed={false}\n onClick={() => onItemSelect?.(item, group)}\n scrollActiveIntoView={scrollActiveIntoView}\n renderCollapsedTooltip={renderCollapsedTooltip}\n />\n ))}\n </div>\n </div>\n </div>\n </div>\n );\n}\n\nfunction CollapsedFlyout({ group, trigger, onItemSelect }: { group: NavGroup; trigger: ReactNode; onItemSelect?: (item: NavItem, group?: NavGroup) => void }) {\n const [open, setOpen] = useState(false);\n const { scrollbarWidth } = useSidebarLayout();\n // Compensate the trigger's right-edge shift when the nav scroll container\n // shows a scrollbar — `navGroup` assumes no scrollbar; adding the measured\n // width keeps the popover pinned to `sidebar_right + POPOVER_GAP`.\n return (\n <div data-shell-ui-nav-group data-shell-ui-nav-slug={group.slug ?? group.id}>\n <Tooltip open={open} onOpenChange={setOpen}>\n <TooltipTrigger asChild>{trigger}</TooltipTrigger>\n <TooltipContent\n side=\"right\"\n sideOffset={SIDEBAR_OFFSET.navGroup + scrollbarWidth}\n collisionPadding={8}\n className=\"max-h-(--radix-tooltip-content-available-height) overflow-hidden p-0\"\n data-shell-ui-nav-flyout\n aria-label={group.label}\n >\n <div className=\"flex max-h-[inherit] flex-col\">\n <div className=\"shrink-0 border-b bg-popover px-3 py-2 text-sm font-semibold\">{group.label}</div>\n <div className=\"min-h-0 flex-1 overflow-y-auto py-1\">\n {group.items.map(item => (\n <a\n key={item.id}\n role=\"menuitem\"\n href={item.href ?? '#'}\n data-shell-ui-nav-flyout-item\n data-active={item.active || undefined}\n onClick={e => {\n if (e.metaKey || e.ctrlKey || e.shiftKey || e.altKey || e.button !== 0) return;\n e.preventDefault();\n onItemSelect?.(item, group);\n setOpen(false);\n }}\n className={clsx(\n 'flex w-full cursor-pointer items-center gap-2 px-3 py-2 text-sm transition-colors',\n item.active ? 'bg-primary text-primary-foreground' : 'text-muted-foreground hover:bg-primary/10 hover:text-primary',\n )}\n >\n {item.icon && <span className=\"flex h-4 w-4 shrink-0 items-center justify-center\">{item.icon}</span>}\n <span>{item.label}</span>\n </a>\n ))}\n </div>\n </div>\n </TooltipContent>\n </Tooltip>\n </div>\n );\n}\n\ntype CompactFooterEntry =\n | { kind: 'action'; action: ShellAction }\n | { kind: 'navMode'; onClick: () => void; label: string }\n | { kind: 'theme'; onClick: () => void; label: string; isDark: boolean };\n\n/**\n * Collapsed footer cluster — a single full-width row trigger + Popover that\n * lists every collapsed action + the built-in toggles. Mirrors the topbar\n * `CompactActionsMenu` styling so both surfaces feel consistent.\n */\nfunction CompactFooterMenu({ collapsed = false, entries, label }: { collapsed?: boolean; entries: CompactFooterEntry[]; label: string }) {\n const [open, setOpen] = useState(false);\n const close = () => setOpen(false);\n const sideOffset = collapsed ? SIDEBAR_OFFSET.actionCollapsed : SIDEBAR_OFFSET.actionExpanded;\n return (\n <Popover open={open} onOpenChange={setOpen}>\n <PopoverTrigger asChild>\n <button\n type=\"button\"\n data-shell-ui-footer-overflow\n className={clsx(GHOST_BTN, collapsed ? 'h-8 w-8 justify-center' : 'h-8 w-full justify-start px-3.25 text-xs')}\n aria-label={label}\n aria-haspopup=\"menu\"\n aria-expanded={open || undefined}\n title={label}\n >\n <span className={clsx('flex h-4 w-4 shrink-0 items-center justify-center', !collapsed && 'mr-2')}>\n <MoreHorizontal className=\"h-4 w-4\" />\n </span>\n {!collapsed && <span>{label}</span>}\n </button>\n </PopoverTrigger>\n <PopoverContent\n side=\"right\"\n align=\"end\"\n sideOffset={sideOffset}\n collisionPadding={8}\n className=\"max-h-(--radix-popover-content-available-height) overflow-hidden p-0\"\n data-shell-ui-nav-flyout\n aria-label={label}\n >\n <div className=\"flex max-h-[inherit] w-64 flex-col\">\n <div className=\"shrink-0 border-b bg-popover px-3 py-2 text-sm font-semibold\">{label}</div>\n <div className=\"min-h-0 flex-1 overflow-y-auto py-1\">\n {entries.map((entry, i) => {\n if (entry.kind === 'navMode') {\n return <CompactFooterRow key=\"__navmode__\" icon={<PanelLeft className=\"h-4 w-4\" />} label={entry.label} onClick={entry.onClick} onClose={close} />;\n }\n if (entry.kind === 'theme') {\n return (\n <CompactFooterRow\n key=\"__theme__\"\n icon={entry.isDark ? <Sun className=\"h-4 w-4\" /> : <Moon className=\"h-4 w-4\" />}\n label={entry.label}\n onClick={entry.onClick}\n onClose={close}\n />\n );\n }\n const a = entry.action;\n if (a.clickContent && !a.onClick) {\n return <CompactFooterNestedRow key={a.id ?? i} action={a} />;\n }\n return <CompactFooterRow key={a.id ?? i} icon={a.icon} label={a.label} onClick={a.onClick} active={a.active} hoverContent={a.hoverContent} onClose={close} />;\n })}\n </div>\n </div>\n </PopoverContent>\n </Popover>\n );\n}\n\nfunction CompactFooterRow({\n icon,\n label,\n onClick,\n active,\n hoverContent,\n onClose,\n}: {\n icon: ReactNode;\n label: string;\n onClick?: () => void;\n active?: boolean;\n hoverContent?: ReactNode;\n onClose: () => void;\n}) {\n const button = (\n <button\n type=\"button\"\n role=\"menuitem\"\n data-shell-ui-nav-flyout-item\n data-active={active || undefined}\n onClick={() => {\n onClick?.();\n onClose();\n }}\n className={clsx(\n 'flex w-full cursor-pointer items-center gap-2 px-3 py-2 text-sm transition-colors',\n active ? 'bg-primary text-primary-foreground' : 'text-muted-foreground hover:bg-primary/10 hover:text-primary',\n )}\n >\n <span className=\"flex h-4 w-4 shrink-0 items-center justify-center [&_svg]:h-4 [&_svg]:w-4\">{icon}</span>\n <span className=\"flex-1 truncate text-left\">{label}</span>\n </button>\n );\n if (!hoverContent) return button;\n return (\n <HoverCard openDelay={150} closeDelay={100}>\n <HoverCardTrigger asChild>{button}</HoverCardTrigger>\n <HoverCardContent\n side=\"right\"\n align=\"start\"\n // Trigger button uses `px-3` (12 px) inside the parent popover, plus\n // POPOVER_GAP = 8 → 20 px keeps a clean visible gap between surfaces.\n sideOffset={20}\n collisionPadding={8}\n className=\"w-auto p-0\"\n >\n {hoverContent}\n </HoverCardContent>\n </HoverCard>\n );\n}\n\nfunction CompactFooterNestedRow({ action }: { action: ShellAction }) {\n // Opens on hover; the parent Popover stays open independently so the user\n // can keep clicking pin/unpin (or any other in-content control) without\n // dismissing either surface.\n return (\n <HoverCard openDelay={120} closeDelay={150}>\n <HoverCardTrigger asChild>\n <button\n type=\"button\"\n role=\"menuitem\"\n data-shell-ui-nav-flyout-item\n aria-haspopup=\"menu\"\n className=\"flex w-full cursor-pointer items-center gap-2 px-3 py-2 text-sm text-muted-foreground transition-colors hover:bg-primary/10 hover:text-primary\"\n >\n <span className=\"flex h-4 w-4 shrink-0 items-center justify-center [&_svg]:h-4 [&_svg]:w-4\">{action.icon}</span>\n <span className=\"flex-1 truncate text-left\">{action.label}</span>\n <ChevronRight className=\"h-3 w-3 opacity-60\" />\n </button>\n </HoverCardTrigger>\n <HoverCardContent side=\"right\" align=\"start\" sideOffset={4} collisionPadding={8} className=\"max-h-(--radix-hover-card-content-available-height) overflow-hidden p-0\">\n {action.clickContent}\n </HoverCardContent>\n </HoverCard>\n );\n}\n","import { ChevronDown, ChevronRight, LogOut, Moon, MoreHorizontal, PanelLeft, Sun } from 'lucide-react';\nimport { Fragment, useEffect, useRef, useState, type ReactNode } from 'react';\nimport { Button } from './components/button';\nimport { HoverCard, HoverCardContent, HoverCardTrigger } from './components/hover-card';\nimport { Popover, PopoverContent, PopoverTrigger } from './components/popover';\nimport { Tooltip, TooltipContent, TooltipTrigger } from './components/tooltip';\nimport { getShellStrings, type ShellLocale, type ShellStrings } from './i18n';\nimport { TOPBAR_OFFSET } from './lib/popover-offsets';\nimport { useMediaQuery } from './lib/use-media-query';\nimport { cn } from './lib/utils';\nimport { Sidebar, type RenderCollapsedTooltip, type SidebarUser } from './sidebar';\nimport { isNavGroup, type NavEntry, type NavGroup, type NavItem, type ShellAction } from './types';\n\nexport interface ShellProps {\n /** Navigation entries (groups + leaf items). */\n items: NavEntry[];\n\n /* ---- Nav mode (hybrid controlled/uncontrolled) ---- */\n\n /** 'sidebar' renders a vertical aside on the left; 'top' renders a horizontal bar. */\n navMode?: 'sidebar' | 'top';\n /** Pass to control the mode externally — omit and Shell manages it locally. */\n onNavModeChange?: (mode: 'sidebar' | 'top') => void;\n\n /* ---- Sidebar-mode-specific (ignored when navMode='top') ---- */\n\n collapsed?: boolean;\n onCollapseToggle?: () => void;\n collapsedLogo?: ReactNode;\n topSlot?: ReactNode;\n scrollActiveIntoView?: boolean;\n renderCollapsedTooltip?: RenderCollapsedTooltip;\n footer?: ReactNode;\n footerExtra?: ReactNode;\n userSection?: ReactNode;\n\n /* ---- Common ---- */\n\n logo?: ReactNode;\n user?: SidebarUser;\n onLogout?: () => void;\n theme?: 'light' | 'dark';\n onThemeToggle?: () => void;\n /** Locale for built-in button labels. Default: `fr`. */\n locale?: ShellLocale;\n onItemSelect?: (item: NavItem, group?: NavGroup) => void;\n onGroupToggle?: (group: NavGroup) => void;\n\n /* ---- Built-in button visibility (all default to true) ---- */\n\n /** Show the theme toggle when `onThemeToggle` is wired. Default: true. */\n enableThemeToggle?: boolean;\n /** Show the nav-mode toggle when `onNavModeChange` is wired (or Shell manages it locally). Default: true. */\n enableNavModeToggle?: boolean;\n /** Show the logout button when `onLogout` is wired. Default: true. */\n enableLogoutButton?: boolean;\n /**\n * Show the decorative chevron that signals an icon-only nav entry has\n * sub-items — the collapsed-sidebar `ChevronRight` and the top-bar\n * `ChevronDown` cue. The expanded-sidebar accordion caret is NOT\n * gated by this flag; it always renders because it doubles as the\n * open/close state indicator. Default: false — opt in per-brand when\n * the visual hint is desired.\n */\n showSubmenuIndicator?: boolean;\n /**\n * Collapse overflowing top-bar nav items, compact-mode actions, and the\n * compact-mode sidebar footer into a single \"Plus\" / \"…\" popover when\n * space is tight. Default: true. Pass `false` for brands whose nav fits\n * the viewport at all sizes and prefer a flat chrome with no overflow\n * trigger.\n */\n enablePlusOverflow?: boolean;\n\n /** Extra action buttons rendered alongside the built-in cluster (e.g. fullscreen, mobile-mode). */\n actions?: ShellAction[];\n\n /**\n * Content rendered inside a click-Popover anchored to the user avatar /\n * name section. When set, that section becomes a ghost-button trigger\n * (cursor pointer, hover background). When omitted, the user section\n * stays non-interactive — matches the previous behaviour.\n *\n * The menu node itself is free-form JSX — typically a list of menu\n * items (profile, preferences, help, …). Wrap each row in\n * `<PopoverClose asChild>` so clicking dismisses the menu before\n * running the row's action.\n */\n userMenu?: ReactNode;\n\n /* ---- Layout ---- */\n\n /** Main content rendered next to the sidebar / under the top bar. */\n children?: ReactNode;\n /** Extra Tailwind classes on the root layout container. */\n className?: string;\n /** Tailwind classes for the main content wrapper. Default: `flex-1 overflow-auto`. */\n mainClassName?: string;\n /** Background class applied to the chrome surface — the `<aside>` in sidebar mode, the `<header>` in top mode. Overrides the defaults (bg-background / bg-sidebar). */\n bgClassName?: string;\n}\n\n/**\n * Stateless white-label shell that renders either a vertical sidebar or a\n * horizontal top-nav based on `navMode`. The active layout switch is internal,\n * so consumers don't need to compose Sidebar + a custom top-bar themselves.\n *\n * <Shell items={...} navMode='sidebar' user={...}>\n * <Outlet />\n * </Shell>\n */\nexport function Shell({\n items,\n navMode: navModeProp,\n onNavModeChange,\n collapsed,\n onCollapseToggle,\n collapsedLogo,\n topSlot,\n scrollActiveIntoView,\n renderCollapsedTooltip,\n footer,\n footerExtra,\n userSection,\n logo,\n user,\n onLogout,\n theme,\n onThemeToggle,\n locale = 'fr',\n onItemSelect,\n onGroupToggle,\n enableThemeToggle = true,\n enableNavModeToggle = true,\n enableLogoutButton = true,\n showSubmenuIndicator = false,\n enablePlusOverflow = true,\n actions,\n userMenu,\n children,\n className,\n mainClassName = 'flex-1 overflow-auto',\n bgClassName,\n}: ShellProps) {\n // Hybrid controlled/uncontrolled — consumers that persist navMode (e.g. in\n // Zustand) pass it in; others let Shell manage it locally.\n const [internalNavMode, setInternalNavMode] = useState<'sidebar' | 'top'>('sidebar');\n const isNavModeControlled = navModeProp !== undefined;\n const navMode = isNavModeControlled ? navModeProp : internalNavMode;\n const handleNavModeChange = (mode: 'sidebar' | 'top') => {\n if (!isNavModeControlled) setInternalNavMode(mode);\n onNavModeChange?.(mode);\n };\n\n // Pass the nav-mode toggle through to the Sidebar's built-in footer only\n // when the consumer wired up onNavModeChange OR we're managing it locally.\n const sidebarNavModeChange = isNavModeControlled ? (onNavModeChange ? handleNavModeChange : undefined) : handleNavModeChange;\n\n if (navMode === 'top') {\n return (\n <div className={cn('flex h-full flex-col', className)}>\n <ShellTopBar\n items={items}\n logo={logo}\n user={user}\n onLogout={enableLogoutButton ? onLogout : undefined}\n theme={theme}\n onThemeToggle={enableThemeToggle ? onThemeToggle : undefined}\n onNavModeChange={enableNavModeToggle ? handleNavModeChange : undefined}\n locale={locale}\n onItemSelect={onItemSelect}\n bgClassName={bgClassName}\n actions={actions}\n userMenu={userMenu}\n showSubmenuIndicator={showSubmenuIndicator}\n enablePlusOverflow={enablePlusOverflow}\n />\n {children && <div className={mainClassName}>{children}</div>}\n </div>\n );\n }\n\n return (\n <div className={cn('flex h-full', className)}>\n <Sidebar\n items={items}\n collapsed={collapsed}\n onCollapseToggle={onCollapseToggle}\n onItemSelect={onItemSelect}\n onGroupToggle={onGroupToggle}\n logo={logo}\n collapsedLogo={collapsedLogo}\n topSlot={topSlot}\n user={user}\n onLogout={onLogout}\n theme={theme}\n onThemeToggle={onThemeToggle}\n navMode={navMode}\n onNavModeChange={sidebarNavModeChange}\n enableThemeToggle={enableThemeToggle}\n enableNavModeToggle={enableNavModeToggle}\n enableLogoutButton={enableLogoutButton}\n actions={actions}\n userMenu={userMenu}\n locale={locale}\n userSection={userSection}\n footer={footer}\n footerExtra={footerExtra}\n scrollActiveIntoView={scrollActiveIntoView}\n renderCollapsedTooltip={renderCollapsedTooltip}\n showSubmenuIndicator={showSubmenuIndicator}\n enablePlusOverflow={enablePlusOverflow}\n className={bgClassName}\n />\n {children && <div className={mainClassName}>{children}</div>}\n </div>\n );\n}\n\n/* ============================================================================\n Top-bar — mirrors the SaaS shell's SectionHeader (full mode): logo on the\n left, icon-only nav buttons with tooltips in the middle, theme/nav-mode/\n user/logout on the right.\n ============================================================================ */\n\nfunction defaultInitials(name: string): string {\n return name\n .split(/\\s+/)\n .filter(Boolean)\n .slice(0, 2)\n .map(w => w[0]?.toUpperCase() ?? '')\n .join('');\n}\n\nfunction ShellTopBar({\n items,\n logo,\n user,\n onLogout,\n theme,\n onThemeToggle,\n onNavModeChange,\n locale,\n onItemSelect,\n bgClassName,\n actions,\n userMenu,\n showSubmenuIndicator,\n enablePlusOverflow,\n}: {\n items: NavEntry[];\n logo?: ReactNode;\n user?: SidebarUser;\n onLogout?: () => void;\n theme?: 'light' | 'dark';\n onThemeToggle?: () => void;\n onNavModeChange?: (mode: 'sidebar' | 'top') => void;\n locale: ShellLocale;\n onItemSelect?: (item: NavItem, group?: NavGroup) => void;\n bgClassName?: string;\n actions?: ShellAction[];\n userMenu?: ReactNode;\n showSubmenuIndicator: boolean;\n enablePlusOverflow: boolean;\n}) {\n const strings: ShellStrings = getShellStrings(locale);\n const themeLabel = theme === 'dark' ? strings.themeLightMode : strings.themeDarkMode;\n const leadingActions = actions?.filter(a => a.placement === 'leading') ?? [];\n const trailingActions = actions?.filter(a => a.placement !== 'leading') ?? [];\n // Below `lg` (1024 px) fold the right-cluster controls into a single \"…\"\n // popover so the chrome stays tidy. Each action opts into the popover by\n // default; setting `keepInlineWhenCompact: true` keeps it inline (use for\n // widgets whose customTrigger is already responsive — e.g. the partners\n // cluster collapses to \"+N\" via its own media query and shouldn't ALSO\n // surface in the popover). When `enablePlusOverflow` is false the brand\n // opted out of the collapse behaviour — keep every action inline.\n const compactActionsRaw = useMediaQuery('(max-width: 1023px)');\n const compactActions = enablePlusOverflow && compactActionsRaw;\n const leadingInline = leadingActions.filter(a => !compactActions || a.keepInlineWhenCompact);\n const leadingCollapsed = compactActions ? leadingActions.filter(a => !a.keepInlineWhenCompact) : [];\n const trailingInline = trailingActions.filter(a => !compactActions || a.keepInlineWhenCompact);\n const trailingCollapsed = compactActions ? trailingActions.filter(a => !a.keepInlineWhenCompact) : [];\n\n // Renders one action: when `customTrigger` is set, render it AS-IS\n // (self-contained widget — must own its own popover wiring if needed).\n // Otherwise render the default 38px icon Button, optionally wrapped in\n // HoverCard / Popover via `hoverContent` / `clickContent`.\n function renderTopBarAction(action: ShellAction): ReactNode {\n if (action.customTrigger) return <Fragment key={action.id}>{action.customTrigger}</Fragment>;\n const button = (\n <Button\n variant=\"ghost\"\n size=\"icon\"\n onClick={action.onClick}\n // The Radix popup IS the tooltip only for hover-content. clickContent\n // fires on click — the native title is still needed for hover.\n title={action.label}\n aria-label={action.label}\n aria-pressed={action.active}\n data-shell-ui-top-bar-action\n data-shell-ui-action-id={action.id}\n data-active={action.active || undefined}\n className={cn(action.active && 'bg-secondary text-secondary-foreground')}\n >\n <span className=\"flex h-4 w-4 shrink-0 items-center justify-center [&_svg]:h-4 [&_svg]:w-4\">{action.icon}</span>\n </Button>\n );\n if (action.clickContent) {\n return (\n <Popover key={action.id}>\n <PopoverTrigger asChild>{button}</PopoverTrigger>\n <PopoverContent side=\"bottom\" align=\"end\" sideOffset={TOPBAR_OFFSET.fullRow} className=\"p-0\">\n {action.clickContent}\n </PopoverContent>\n </Popover>\n );\n }\n if (action.hoverContent) {\n return (\n <HoverCard key={action.id}>\n <HoverCardTrigger asChild>{button}</HoverCardTrigger>\n <HoverCardContent side=\"bottom\" align=\"end\" sideOffset={TOPBAR_OFFSET.fullRow} className=\"w-auto p-0\">\n {action.hoverContent}\n </HoverCardContent>\n </HoverCard>\n );\n }\n return <Fragment key={action.id}>{button}</Fragment>;\n }\n\n // Responsive overflow: measure the nav's available width and decide how\n // many items fit. The rest collapse into a hover-triggered \"…\" menu styled\n // exactly like the collapsed-sidebar fly-out + the per-group dropdown.\n //\n // Each visible button is `w-20` (80px) and siblings are separated by `gap-2`\n // (8px). N items take `N*80 + (N-1)*8 = 88N − 8` px → `N = (W + 8) / 88`.\n //\n // When `enablePlusOverflow` is false the observer is skipped and every item\n // stays rendered — overflow falls through to the nav's own clipping.\n const navRef = useRef<HTMLElement>(null);\n const [maxVisible, setMaxVisible] = useState(items.length);\n useEffect(() => {\n if (!enablePlusOverflow) {\n setMaxVisible(items.length);\n return;\n }\n const navEl = navRef.current;\n if (!navEl) return;\n const ITEM_TOTAL = 88;\n const recompute = (width: number) => {\n const total = items.length;\n const fit = Math.max(1, Math.floor((width + 8) / ITEM_TOTAL));\n // Reserve one slot for the \"More\" trigger whenever anything is hidden.\n setMaxVisible(fit >= total ? total : Math.max(0, fit - 1));\n };\n recompute(navEl.clientWidth);\n const observer = new ResizeObserver(entries => {\n for (const entry of entries) recompute(entry.contentRect.width);\n });\n observer.observe(navEl);\n return () => observer.disconnect();\n }, [items.length, enablePlusOverflow]);\n\n const visibleItems = items.slice(0, maxVisible);\n const hiddenItems = items.slice(maxVisible);\n const hiddenHasActive = hiddenItems.some(e => (isNavGroup(e) ? !!e.active || e.items.some(i => i.active) : !!e.active));\n\n return (\n <header data-shell-ui-top-bar className={cn('sticky top-0 z-20 flex items-center gap-2 border-b bg-sidebar px-2 text-sidebar-foreground md:gap-3 md:px-4', bgClassName)}>\n {logo && <div className=\"shrink-0\">{logo}</div>}\n\n <nav ref={navRef} className=\"flex min-w-0 flex-1 gap-2 overflow-hidden\">\n {visibleItems.map(entry => {\n const group: NavGroup | undefined = isNavGroup(entry) ? entry : undefined;\n const groupItems = group?.items ?? [];\n // Groups with 2+ children open a dropdown; a single-item group falls\n // through to direct routing on its only child.\n const useDropdown = !!group && groupItems.length > 1;\n const target: NavItem | undefined = group ? groupItems[0] : entry;\n if (!target) return null;\n const isActive = group ? group.active || groupItems.some(i => i.active) : target.active;\n // Surface the badge on the icon. When the badge has a value\n // (string / number), render a small numeric chip; when it's just\n // `true`, fall back to a dot. For groups, grab the badge value\n // from the first child that has one.\n const badgeSource = group ? groupItems.find(i => i.badge != null && i.badge !== false && i.badge !== '')?.badge : target.badge;\n const hasBadge = badgeSource != null && badgeSource !== false && badgeSource !== '';\n const badgeIsNumeric = hasBadge && (typeof badgeSource === 'string' || typeof badgeSource === 'number');\n const innerIcon = (\n <span data-shell-ui-nav-icon className=\"relative flex shrink-0 items-center justify-center [&_svg]:h-6! [&_svg]:w-6!\">\n {entry.icon}\n {hasBadge && badgeIsNumeric && (\n <span\n aria-hidden\n data-shell-ui-nav-badge\n className=\"absolute -top-1.5 -right-1.5 inline-flex h-4 min-w-4 items-center justify-center rounded-full bg-red-500 px-1 text-[9px] font-bold leading-none text-white ring-2 ring-background\"\n >\n {badgeSource}\n </span>\n )}\n {hasBadge && !badgeIsNumeric && (\n <span aria-hidden data-shell-ui-nav-badge-dot className=\"absolute -top-1 -right-1 h-2 w-2 rounded-full bg-red-500 ring-2 ring-background\" />\n )}\n </span>\n );\n // No bg repaint on active — the chip keeps its per-module palette and\n // a 2px yellow underline at the bottom signals the active entry. This\n // mirrors the sidebar's yellow left-bar accent.\n const triggerClass = cn(\n 'relative my-1 flex w-20 shrink-0 cursor-pointer items-center justify-center rounded-md py-0.75 transition-colors',\n isActive ? 'text-foreground' : 'text-muted-foreground hover:bg-primary/10 hover:text-primary',\n );\n const activeUnderline = isActive ? <span aria-hidden className=\"absolute right-2 bottom-0 left-2 h-0.5 rounded-sm bg-cta\" /> : null;\n\n if (useDropdown && group) {\n return (\n <TopBarGroupDropdown\n key={entry.id}\n group={group}\n isActive={!!isActive}\n innerIcon={innerIcon}\n triggerClass={triggerClass}\n activeUnderline={activeUnderline}\n onItemSelect={onItemSelect}\n showSubmenuIndicator={showSubmenuIndicator}\n />\n );\n }\n\n // When `target.href` is set, render as `<a href>` so right-click /\n // middle-click / cmd-click work natively. Plain left-click is\n // intercepted (preventDefault) so the consumer's `onItemSelect`\n // can route via the SPA router. Modifier-keys / non-primary buttons\n // are allowed through to the browser.\n const button = target.href ? (\n <a\n href={target.href}\n data-shell-ui-top-bar-button\n data-shell-ui-nav-slug={entry.slug ?? entry.id}\n data-active={isActive || undefined}\n aria-current={isActive ? 'page' : undefined}\n onClick={e => {\n if (e.metaKey || e.ctrlKey || e.shiftKey || e.altKey || e.button !== 0) return;\n e.preventDefault();\n onItemSelect?.(target as NavItem, group);\n }}\n className={triggerClass}\n >\n {innerIcon}\n {activeUnderline}\n </a>\n ) : (\n <button\n type=\"button\"\n data-shell-ui-top-bar-button\n data-shell-ui-nav-slug={entry.slug ?? entry.id}\n data-active={isActive || undefined}\n onClick={() => onItemSelect?.(target as NavItem, group)}\n className={triggerClass}\n >\n {innerIcon}\n {activeUnderline}\n </button>\n );\n return (\n <Tooltip key={entry.id}>\n <TooltipTrigger asChild>{button}</TooltipTrigger>\n <TooltipContent side=\"bottom\">{entry.label}</TooltipContent>\n </Tooltip>\n );\n })}\n {hiddenItems.length > 0 && <TopBarOverflowMenu items={hiddenItems} hasActive={hiddenHasActive} onItemSelect={onItemSelect} label={strings.moreLabel} />}\n </nav>\n\n <div className=\"flex shrink-0 items-center gap-1\">\n {leadingInline.flatMap(action => [\n <span key={action.id} className=\"animate-in fade-in-0 slide-in-from-right-1 duration-200\">\n {renderTopBarAction(action)}\n </span>,\n action.dividerAfter ? <span key={`${action.id}-div`} aria-hidden className=\"mx-1 h-6 w-px self-center bg-border\" /> : null,\n ])}\n {!compactActions && onNavModeChange && (\n <span className=\"animate-in fade-in-0 slide-in-from-right-1 duration-200\">\n <Button variant=\"ghost\" size=\"icon\" onClick={() => onNavModeChange('sidebar')} title={strings.navUseSidebar} aria-label={strings.navUseSidebar}>\n <PanelLeft className=\"h-4 w-4\" />\n </Button>\n </span>\n )}\n {!compactActions && onThemeToggle && (\n <span className=\"animate-in fade-in-0 slide-in-from-right-1 duration-200\">\n <Button variant=\"ghost\" size=\"icon\" onClick={onThemeToggle} title={themeLabel} aria-label={themeLabel}>\n {theme === 'dark' ? <Sun className=\"h-4 w-4\" /> : <Moon className=\"h-4 w-4\" />}\n </Button>\n </span>\n )}\n {trailingInline.flatMap(action => [\n <span key={action.id} className=\"animate-in fade-in-0 slide-in-from-right-1 duration-200\">\n {renderTopBarAction(action)}\n </span>,\n action.dividerAfter ? <span key={`${action.id}-div`} aria-hidden className=\"mx-1 h-6 w-px self-center bg-border\" /> : null,\n ])}\n {compactActions && (leadingCollapsed.length > 0 || trailingCollapsed.length > 0 || onNavModeChange || onThemeToggle) && (\n <span className=\"animate-in fade-in-0 slide-in-from-right-1 duration-200\">\n <CompactActionsMenu\n entries={[\n ...leadingCollapsed.map(a => ({ type: 'action' as const, action: a })),\n ...(onNavModeChange ? [{ type: 'navMode' as const, onClick: () => onNavModeChange('sidebar'), label: strings.navUseSidebar }] : []),\n ...(onThemeToggle ? [{ type: 'theme' as const, onClick: onThemeToggle, label: themeLabel, isDark: theme === 'dark' }] : []),\n ...trailingCollapsed.map(a => ({ type: 'action' as const, action: a })),\n ]}\n label={strings.moreLabel}\n />\n </span>\n )}\n {user && userMenu ? (\n <Popover>\n <PopoverTrigger asChild>\n <button\n type=\"button\"\n // Square hover area around the circular avatar — mirrors\n // the collapsed-sidebar user button (rounded-sm wrapper,\n // p-1 padding, circle inside).\n className=\"inline-flex shrink-0 cursor-pointer items-center justify-center rounded-sm p-1 outline-none transition-colors hover:bg-secondary hover:text-secondary-foreground focus-visible:ring-2 focus-visible:ring-ring\"\n title={user.name}\n aria-label={user.name}\n >\n <span className=\"flex h-8 w-8 items-center justify-center rounded-full bg-muted text-xs font-semibold text-muted-foreground\">\n {user.initials ?? defaultInitials(user.name)}\n </span>\n </button>\n </PopoverTrigger>\n <PopoverContent side=\"bottom\" align=\"end\" sideOffset={TOPBAR_OFFSET.fullRow} className=\"p-0\">\n {userMenu}\n </PopoverContent>\n </Popover>\n ) : (\n user && (\n <div className=\"inline-flex shrink-0 items-center justify-center p-1\" title={user.name} aria-label={user.name}>\n <span className=\"flex h-8 w-8 items-center justify-center rounded-full bg-muted text-xs font-semibold text-muted-foreground\">\n {user.initials ?? defaultInitials(user.name)}\n </span>\n </div>\n )\n )}\n {onLogout && (\n <Button variant=\"ghost\" size=\"icon\" onClick={onLogout} title={strings.logout} aria-label={strings.logout}>\n <LogOut className=\"h-4 w-4\" />\n </Button>\n )}\n </div>\n </header>\n );\n}\n\nfunction TopBarGroupDropdown({\n group,\n isActive,\n innerIcon,\n triggerClass,\n activeUnderline,\n onItemSelect,\n showSubmenuIndicator,\n}: {\n group: NavGroup;\n isActive: boolean;\n innerIcon: ReactNode;\n triggerClass: string;\n activeUnderline: ReactNode;\n onItemSelect?: (item: NavItem, group?: NavGroup) => void;\n showSubmenuIndicator: boolean;\n}) {\n // Controlled so clicking a leaf can dismiss the panel before routing —\n // Radix's `PopoverClose` is unreliable inside an asChild link with\n // preventDefault, and an explicit setOpen(false) guarantees the close.\n const [open, setOpen] = useState(false);\n return (\n <Popover open={open} onOpenChange={setOpen}>\n <Tooltip>\n <TooltipTrigger asChild>\n <PopoverTrigger asChild>\n <button\n type=\"button\"\n data-shell-ui-top-bar-button\n data-shell-ui-nav-slug={group.slug ?? group.id}\n data-active={isActive || undefined}\n aria-current={isActive ? 'page' : undefined}\n className={triggerClass}\n >\n {innerIcon}\n {activeUnderline}\n {/* Has-children cue. Lives in the button's empty bottom-right\n corner (the icon is centered so this space is unused),\n outside the icon's bounds so it doesn't overlap the SVG.\n Sits 4px above the bottom edge so the active underline\n (bg-cta) stays clear. */}\n {showSubmenuIndicator && (\n <ChevronDown aria-hidden data-shell-ui-nav-has-children className=\"pointer-events-none absolute right-1.5 bottom-1 h-3 w-3 stroke-[2.5] opacity-70\" />\n )}\n </button>\n </PopoverTrigger>\n </TooltipTrigger>\n <TooltipContent side=\"bottom\">{group.label}</TooltipContent>\n </Tooltip>\n <PopoverContent\n side=\"bottom\"\n align=\"center\"\n sideOffset={TOPBAR_OFFSET.shortRow}\n collisionPadding={8}\n // Don't restore focus to the trigger after close — otherwise the\n // Tooltip wrapping the trigger auto-opens on `:focus` once the\n // popover closes, leaving the group label hovering over the bar.\n onCloseAutoFocus={e => e.preventDefault()}\n className=\"max-h-(--radix-popover-content-available-height) overflow-hidden p-0\"\n data-shell-ui-nav-flyout\n aria-label={group.label}\n >\n <div className=\"flex max-h-[inherit] flex-col\">\n <div className=\"shrink-0 border-b bg-popover px-3 py-2 text-sm font-semibold\">{group.label}</div>\n <div className=\"min-h-0 flex-1 overflow-y-auto py-1\">\n {group.items.map(child => {\n const childActive = !!child.active;\n const childHasBadge = child.badge != null && child.badge !== false && child.badge !== '';\n const rowClass = cn(\n 'flex w-full cursor-pointer items-center gap-2 px-3 py-2 text-sm transition-colors',\n childActive ? 'bg-primary text-primary-foreground' : 'text-muted-foreground hover:bg-primary/10 hover:text-primary',\n );\n const rowInner = (\n <>\n {child.icon && <span className=\"flex h-4 w-4 shrink-0 items-center justify-center [&_svg]:h-4 [&_svg]:w-4\">{child.icon}</span>}\n <span className=\"flex-1 truncate text-left\">{child.label}</span>\n {childHasBadge && (\n <span className=\"ml-auto inline-flex h-5 min-w-5 items-center justify-center rounded-full bg-red-500 px-1.5 text-[10px] font-bold text-white\">\n {child.badge}\n </span>\n )}\n </>\n );\n if (child.href) {\n return (\n <a\n key={child.id}\n href={child.href}\n role=\"menuitem\"\n data-shell-ui-nav-flyout-item\n data-active={childActive || undefined}\n aria-current={childActive ? 'page' : undefined}\n onClick={e => {\n if (e.metaKey || e.ctrlKey || e.shiftKey || e.altKey || e.button !== 0) return;\n e.preventDefault();\n onItemSelect?.(child, group);\n setOpen(false);\n }}\n className={rowClass}\n >\n {rowInner}\n </a>\n );\n }\n return (\n <button\n key={child.id}\n type=\"button\"\n role=\"menuitem\"\n data-shell-ui-nav-flyout-item\n data-active={childActive || undefined}\n onClick={() => {\n onItemSelect?.(child, group);\n setOpen(false);\n }}\n className={rowClass}\n >\n {rowInner}\n </button>\n );\n })}\n </div>\n </div>\n </PopoverContent>\n </Popover>\n );\n}\n\nfunction TopBarOverflowMenu({\n items,\n hasActive,\n onItemSelect,\n label,\n}: {\n items: NavEntry[];\n hasActive: boolean;\n onItemSelect?: (item: NavItem, group?: NavGroup) => void;\n label: string;\n}) {\n // Hover trigger to match the collapsed-sidebar fly-out semantics. Controlled\n // so a leaf click can dismiss before routing — Tooltip's default close fires\n // too late.\n const [open, setOpen] = useState(false);\n const triggerClass = cn(\n 'relative my-1 flex w-20 shrink-0 cursor-pointer items-center justify-center rounded-md py-0.75 transition-colors',\n hasActive ? 'text-foreground' : 'text-muted-foreground hover:bg-primary/10 hover:text-primary',\n );\n return (\n <Tooltip open={open} onOpenChange={setOpen}>\n <TooltipTrigger asChild>\n <button type=\"button\" data-shell-ui-top-bar-button data-shell-ui-top-bar-overflow data-active={hasActive || undefined} aria-label={label} className={triggerClass}>\n <span className=\"relative flex shrink-0 items-center justify-center [&_svg]:h-6! [&_svg]:w-6!\">\n <MoreHorizontal />\n </span>\n {hasActive && <span aria-hidden className=\"absolute right-2 bottom-0 left-2 h-0.5 rounded-sm bg-cta\" />}\n </button>\n </TooltipTrigger>\n <TooltipContent\n side=\"bottom\"\n align=\"end\"\n sideOffset={TOPBAR_OFFSET.shortRow}\n collisionPadding={8}\n className=\"max-h-(--radix-tooltip-content-available-height) overflow-hidden p-0\"\n data-shell-ui-nav-flyout\n aria-label={label}\n >\n <div className=\"flex max-h-[inherit] w-56 flex-col\">\n <div className=\"shrink-0 border-b bg-popover px-3 py-2 text-sm font-semibold\">{label}</div>\n <div className=\"min-h-0 flex-1 overflow-y-auto py-1\">\n {items.map(entry => {\n if (isNavGroup(entry)) {\n return (\n <div key={entry.id}>\n <div className=\"px-3 pt-2 pb-1 text-[10px] font-semibold tracking-wide text-muted-foreground uppercase\">{entry.label}</div>\n {entry.items.map(child => (\n <OverflowFlyoutRow key={child.id} item={child} group={entry} onSelect={onItemSelect} onClose={() => setOpen(false)} />\n ))}\n </div>\n );\n }\n return <OverflowFlyoutRow key={entry.id} item={entry} onSelect={onItemSelect} onClose={() => setOpen(false)} />;\n })}\n </div>\n </div>\n </TooltipContent>\n </Tooltip>\n );\n}\n\nfunction OverflowFlyoutRow({ item, group, onSelect, onClose }: { item: NavItem; group?: NavGroup; onSelect?: (item: NavItem, group?: NavGroup) => void; onClose: () => void }) {\n const active = !!item.active;\n const hasBadge = item.badge != null && item.badge !== false && item.badge !== '';\n const rowClass = cn(\n 'flex w-full cursor-pointer items-center gap-2 px-3 py-2 text-sm transition-colors',\n active ? 'bg-primary text-primary-foreground' : 'text-muted-foreground hover:bg-primary/10 hover:text-primary',\n );\n const inner = (\n <>\n {item.icon && <span className=\"flex h-4 w-4 shrink-0 items-center justify-center [&_svg]:h-4 [&_svg]:w-4\">{item.icon}</span>}\n <span className=\"flex-1 truncate text-left\">{item.label}</span>\n {hasBadge && (\n <span className=\"ml-auto inline-flex h-5 min-w-5 items-center justify-center rounded-full bg-red-500 px-1.5 text-[10px] font-bold text-white\">{item.badge}</span>\n )}\n </>\n );\n if (item.href) {\n return (\n <a\n href={item.href}\n role=\"menuitem\"\n data-shell-ui-nav-flyout-item\n data-active={active || undefined}\n aria-current={active ? 'page' : undefined}\n onClick={e => {\n if (e.metaKey || e.ctrlKey || e.shiftKey || e.altKey || e.button !== 0) return;\n e.preventDefault();\n onSelect?.(item, group);\n onClose();\n }}\n className={rowClass}\n >\n {inner}\n </a>\n );\n }\n return (\n <button\n type=\"button\"\n role=\"menuitem\"\n data-shell-ui-nav-flyout-item\n data-active={active || undefined}\n onClick={() => {\n onSelect?.(item, group);\n onClose();\n }}\n className={rowClass}\n >\n {inner}\n </button>\n );\n}\n\n/**\n * Collapsed actions cluster — renders a \"…\" trigger styled like the other\n * top-bar tiles + a hover-Tooltip popover listing every default-rendered\n * action and the built-in nav-mode/theme toggles as rows. Mirrors the\n * `TopBarOverflowMenu` markup so the surface reads identically.\n */\ntype CompactEntry =\n | { type: 'action'; action: ShellAction }\n | { type: 'navMode'; onClick: () => void; label: string }\n | { type: 'theme'; onClick: () => void; label: string; isDark: boolean };\n\nfunction CompactActionsMenu({ entries, label }: { entries: CompactEntry[]; label: string }) {\n // Click-triggered parent. A hover Tooltip would auto-close when the user's\n // pointer moves into a nested HoverCard (the puzzle's pin menu) because the\n // nested content is portaled outside the Tooltip's content tree. Popover\n // stays open until explicit dismissal (Esc, click outside, or row select).\n const [open, setOpen] = useState(false);\n return (\n <Popover open={open} onOpenChange={setOpen}>\n <PopoverTrigger asChild>\n <Button variant=\"ghost\" size=\"icon\" data-shell-ui-top-bar-actions-overflow aria-label={label} title={label}>\n <MoreHorizontal className=\"h-4 w-4\" />\n </Button>\n </PopoverTrigger>\n <PopoverContent\n side=\"bottom\"\n align=\"end\"\n sideOffset={TOPBAR_OFFSET.fullRow}\n collisionPadding={8}\n className=\"max-h-(--radix-popover-content-available-height) overflow-hidden p-0\"\n data-shell-ui-nav-flyout\n aria-label={label}\n >\n <div className=\"flex max-h-[inherit] w-64 flex-col\">\n <div className=\"shrink-0 border-b bg-popover px-3 py-2 text-sm font-semibold\">{label}</div>\n <div className=\"min-h-0 flex-1 overflow-y-auto py-1\">\n {entries.map(entry => {\n if (entry.type === 'navMode') {\n return <CompactActionRow key=\"__navmode__\" icon={<PanelLeft className=\"h-4 w-4\" />} label={entry.label} onClick={entry.onClick} onClose={() => setOpen(false)} />;\n }\n if (entry.type === 'theme') {\n return (\n <CompactActionRow\n key=\"__theme__\"\n icon={entry.isDark ? <Sun className=\"h-4 w-4\" /> : <Moon className=\"h-4 w-4\" />}\n label={entry.label}\n onClick={entry.onClick}\n onClose={() => setOpen(false)}\n />\n );\n }\n const a = entry.action;\n // Actions with `clickContent` (no onClick) expose their content\n // via a nested HoverCard — opens on hover, parent stays open so\n // the user can keep pin-toggling without losing the menu.\n if (a.clickContent && !a.onClick) {\n return <CompactNestedRow key={a.id} action={a} />;\n }\n return (\n <CompactActionRow key={a.id} icon={a.icon} label={a.label} onClick={a.onClick} active={a.active} hoverContent={a.hoverContent} onClose={() => setOpen(false)} />\n );\n })}\n </div>\n </div>\n </PopoverContent>\n </Popover>\n );\n}\n\nfunction CompactActionRow({\n icon,\n label,\n onClick,\n active,\n hoverContent,\n onClose,\n}: {\n icon: ReactNode;\n label: string;\n onClick?: () => void;\n active?: boolean;\n hoverContent?: ReactNode;\n onClose: () => void;\n}) {\n const button = (\n <button\n type=\"button\"\n role=\"menuitem\"\n data-shell-ui-nav-flyout-item\n data-active={active || undefined}\n onClick={() => {\n onClick?.();\n onClose();\n }}\n className={cn(\n 'flex w-full cursor-pointer items-center gap-2 px-3 py-2 text-sm transition-colors',\n active ? 'bg-primary text-primary-foreground' : 'text-muted-foreground hover:bg-primary/10 hover:text-primary',\n )}\n >\n <span className=\"flex h-4 w-4 shrink-0 items-center justify-center [&_svg]:h-4 [&_svg]:w-4\">{icon}</span>\n <span className=\"flex-1 truncate text-left\">{label}</span>\n </button>\n );\n if (!hoverContent) return button;\n return (\n <HoverCard openDelay={150} closeDelay={100}>\n <HoverCardTrigger asChild>{button}</HoverCardTrigger>\n <HoverCardContent\n side=\"left\"\n align=\"start\"\n // Trigger button uses `px-3` (12 px) inside the parent popover, plus\n // POPOVER_GAP = 8 → 20 px keeps a clean visible gap between surfaces.\n sideOffset={20}\n collisionPadding={8}\n className=\"w-auto p-0\"\n >\n {hoverContent}\n </HoverCardContent>\n </HoverCard>\n );\n}\n\nfunction CompactNestedRow({ action }: { action: ShellAction }) {\n // Opens on hover via HoverCard; the parent popover stays open independently\n // so the user can keep clicking pin/unpin (or any other in-content control)\n // without dismissing either surface.\n return (\n <HoverCard openDelay={120} closeDelay={150}>\n <HoverCardTrigger asChild>\n <button\n type=\"button\"\n role=\"menuitem\"\n data-shell-ui-nav-flyout-item\n aria-haspopup=\"menu\"\n className=\"flex w-full cursor-pointer items-center gap-2 px-3 py-2 text-sm text-muted-foreground transition-colors hover:bg-primary/10 hover:text-primary\"\n >\n <span className=\"flex h-4 w-4 shrink-0 items-center justify-center [&_svg]:h-4 [&_svg]:w-4\">{action.icon}</span>\n <span className=\"flex-1 truncate text-left\">{action.label}</span>\n <ChevronRight className=\"h-3 w-3 opacity-60\" />\n </button>\n </HoverCardTrigger>\n <HoverCardContent side=\"left\" align=\"start\" sideOffset={4} collisionPadding={8} className=\"max-h-(--radix-hover-card-content-available-height) overflow-hidden p-0\">\n {action.clickContent}\n </HoverCardContent>\n </HoverCard>\n );\n}\n","/* eslint-disable react-refresh/only-export-components -- `tintColor` and\n `svgMark` are co-located helpers used to author the cluster's tile data;\n moving them to a separate file would force consumers to learn two import\n paths for one widget. */\nimport * as React from 'react';\nimport { Fragment } from 'react';\n\nimport { cn } from '../lib/utils';\nimport { Popover, PopoverAnchor, PopoverContent, PopoverTrigger } from './popover';\n\n/**\n * Partner-cluster widget — replicates the \"Nos solutions\" header pattern from\n * the s3pweb partners maquette (claude-maquette-partners). Use it as the\n * trigger of a `ShellAction` with `clickContent` / `hoverContent` set, e.g.:\n *\n * { id: 'solutions', label: 'Nos solutions',\n * icon: <Layers />, // sidebar fallback\n * customTrigger: <PartnerCluster partners={ECOSYSTEM} chipBorderColor='white' />,\n * clickContent: <YourMegaPanel /> }\n *\n * The cluster paints a small label, the first N partner tiles overlapped\n * (-7px stride, ringed with `chipBorderColor` to mask the overlap against the\n * chrome bg), and a \"+M\" overflow chip when there are more partners than\n * `maxVisible`. Each tile uses a 16% tint of the partner's brand colour for\n * its bg and the full brand colour for the mark stroke.\n */\n\n/* ---------- data shape ---------- */\n\nexport interface Partner {\n id: string;\n name: string;\n /** Brand hex colour (e.g. '#2E6BE6'). */\n color: string;\n /**\n * Brand mark — rendered inside the tile as-is. Pass any ReactNode:\n * - SVG paths wrapped via `svgMark(...)` (or your own `<svg>` element)\n * - `<img src='/favicons/x.png' alt='X' />` for raster brand icons\n * - any custom component\n *\n * The tile constrains the mark to ~60% of its width/height; any inner\n * `<svg>` or `<img>` automatically fills that slot.\n */\n mark: React.ReactNode;\n /** Optional one-line tagline shown in detail / popover layouts. */\n tagline?: string;\n /** Optional category — free-form (e.g. 'Financement', 'Optimisation'). */\n category?: string;\n /** Optional taxonomy tag — 'solution' = ours, 'partner' = external. */\n kind?: 'solution' | 'partner';\n /** Optional URL — handy for popover content that links to the partner site. */\n href?: string;\n}\n\n/**\n * Mix a hex colour toward white by `ratio` (0 = white, 1 = full colour).\n * Mirrors `ECO.tint()` in the maquette's ecosystem.js. Returns an rgb() string.\n */\nexport function tintColor(hex: string, ratio = 0.16): string {\n const c = hex.replace('#', '');\n const r = parseInt(c.substring(0, 2), 16);\n const g = parseInt(c.substring(2, 4), 16);\n const b = parseInt(c.substring(4, 6), 16);\n const mix = (x: number) => Math.round(x * ratio + 255 * (1 - ratio));\n return `rgb(${mix(r)},${mix(g)},${mix(b)})`;\n}\n\n/**\n * Convenience helper for the most common Partner.mark case: raw SVG path\n * content lifted from a design source. Wraps the paths in a 24×24 viewBox\n * with `stroke=currentColor` so the brand colour cascades from the tile.\n *\n * mark: svgMark(<><circle cx='12' cy='12' r='8'/><path d='...'/></>)\n */\nexport function svgMark(paths: React.ReactNode, opts?: { strokeWidth?: number }): React.ReactNode {\n return (\n <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth={opts?.strokeWidth ?? 1.8} strokeLinecap=\"round\" strokeLinejoin=\"round\">\n {paths}\n </svg>\n );\n}\n\n/* ---------- single tile ---------- */\n\nexport interface PartnerTileProps extends React.HTMLAttributes<HTMLSpanElement> {\n partner: Partner;\n /** Outer square edge in px. Default 30. */\n size?: number;\n /** Solid mode: bg=brand colour, glyph=white. Default tinted bg + brand glyph. */\n solid?: boolean;\n /** Border-radius in px. Defaults to ~28% of `size`. */\n radius?: number;\n /** Optional 2px ring colour painted around the tile (used inside PartnerCluster). */\n ringColor?: string;\n}\n\nexport function PartnerTile({ partner, size = 30, solid = false, radius, ringColor, className, style, title, ...props }: PartnerTileProps) {\n const r = radius ?? Math.round(size * 0.28);\n const bg = solid ? partner.color : tintColor(partner.color, 0.16);\n const fg = solid ? '#ffffff' : partner.color;\n const ringStyle: React.CSSProperties | undefined = ringColor ? { borderWidth: 2, borderStyle: 'solid', borderColor: ringColor } : undefined;\n return (\n <span\n data-shell-ui-partner-tile\n data-partner-id={partner.id}\n className={cn('inline-grid place-items-center shrink-0', className)}\n style={{ width: size, height: size, borderRadius: r, background: bg, color: fg, ...ringStyle, ...style }}\n title={title ?? partner.name}\n {...props}\n >\n {/* Mark slot — sized to 60% of the tile via inline width/height, with\n auto-fit applied to any svg/img children so the consumer doesn't\n have to spec dimensions on their `partner.mark` ReactNode. */}\n <span\n data-shell-ui-partner-mark\n className=\"flex items-center justify-center [&_img]:h-full [&_img]:w-full [&_img]:object-contain [&_svg]:h-full [&_svg]:w-full\"\n style={{ width: '60%', height: '60%' }}\n >\n {partner.mark}\n </span>\n </span>\n );\n}\n\n/* ---------- cluster ---------- */\n\nexport interface PartnerClusterProps extends React.HTMLAttributes<HTMLDivElement> {\n partners: Partner[];\n /** Tiles shown before the +N overflow chip. Default 4. */\n maxVisible?: number;\n /**\n * Small label shown to the left of the tiles. Default: no label.\n * Pass a string (e.g. 'Nos solutions') to display one.\n */\n label?: string | null;\n /** Tile edge in px. Default 30. */\n tileSize?: number;\n /**\n * Colour painted on the 2px ring around each tile / the +N chip to mask the\n * -7px overlap against the chrome's background. Should match the\n * surrounding bg — defaults to `var(--color-sidebar)`. Pass `'white'` (or\n * a Tailwind colour variable) when the chrome uses a different bg.\n */\n chipBorderColor?: string;\n /**\n * Content rendered inside the click-Popover anchored to the +N overflow\n * chip. When the cluster has no overflow (maxVisible >= partners.length)\n * the popover won't have a trigger — keep `maxVisible` below\n * `partners.length` if you rely on this.\n */\n popoverContent?: React.ReactNode;\n /** Popover side. Default 'bottom' (top-bar context). Use 'right' when the cluster sits in a sidebar. */\n popoverSide?: 'top' | 'right' | 'bottom' | 'left';\n /** Popover align. Default 'end'. */\n popoverAlign?: 'start' | 'center' | 'end';\n /** Popover offset from the trigger in px. Default 8. */\n popoverSideOffset?: number;\n /** Locale for built-in labels (the overflow chip title). Default 'fr'. */\n locale?: 'fr' | 'en';\n}\n\n/**\n * The cluster is NOT a single button. Each visible tile is an independent\n * `<a target='_blank'>` when its partner has an `href` (otherwise a\n * non-interactive `<span>`), and the `+N` chip is a separate `<button>` that\n * opens `popoverContent` in a Popover. Effect: clicking a tile goes straight\n * to that partner's site, clicking `+N` opens the full panel — matching the\n * maquette's UX.\n */\nexport function PartnerCluster({\n partners,\n maxVisible = 4,\n label,\n tileSize = 30,\n chipBorderColor = 'var(--color-sidebar)',\n popoverContent,\n popoverSide = 'bottom',\n popoverAlign = 'end',\n popoverSideOffset = 8,\n locale = 'fr',\n className,\n ...props\n}: PartnerClusterProps) {\n const visible = partners.slice(0, maxVisible);\n const overflow = Math.max(0, partners.length - visible.length);\n const overflowRadius = Math.round(tileSize * 0.28);\n const overflowTitle = locale === 'en' ? 'Discover all' : 'Tout découvrir';\n const hoverLift = 'transition-transform hover:z-10 hover:-translate-y-0.5 hover:scale-105';\n // Entry animation when tiles mount (e.g. when leaving compact mode and the\n // hidden tiles reappear). Pure mount-time; unmounts skip the animation.\n const enterAnim = 'animate-in fade-in-0 zoom-in-90 duration-200';\n\n const overflowChip = overflow > 0 && (\n <button\n type=\"button\"\n data-shell-ui-partner-overflow\n className={cn(\n '-ml-1.75 inline-grid cursor-pointer place-items-center bg-muted text-[11px] font-extrabold text-muted-foreground outline-none focus-visible:ring-2 focus-visible:ring-ring',\n hoverLift,\n )}\n style={{ width: tileSize, height: tileSize, borderRadius: overflowRadius, borderWidth: 2, borderStyle: 'solid', borderColor: chipBorderColor }}\n title={overflowTitle}\n aria-label={overflowTitle}\n >\n +{overflow}\n </button>\n );\n\n const clusterBody = (\n <div data-shell-ui-partner-cluster className={cn('inline-flex items-center gap-2.5 bg-transparent', className)} {...props}>\n {label !== null && label !== undefined && label !== '' && <span className=\"text-[11px] font-bold uppercase tracking-[0.02em] text-muted-foreground\">{label}</span>}\n <span className=\"flex items-center\">\n {visible.map((p, i) => {\n const overlap = i > 0 ? '-ml-[7px]' : '';\n if (p.href) {\n return (\n <a\n key={p.id}\n href={p.href}\n target=\"_blank\"\n rel=\"noreferrer noopener\"\n title={p.name}\n aria-label={p.name}\n data-shell-ui-partner-link\n data-partner-id={p.id}\n className={cn('inline-flex rounded-[7px] outline-none focus-visible:ring-2 focus-visible:ring-ring', overlap, hoverLift, enterAnim)}\n >\n <PartnerTile partner={p} size={tileSize} ringColor={chipBorderColor} />\n </a>\n );\n }\n return <PartnerTile key={p.id} partner={p} size={tileSize} ringColor={chipBorderColor} className={cn(overlap, hoverLift, enterAnim)} />;\n })}\n {overflowChip && popoverContent ? <PopoverTrigger asChild>{overflowChip}</PopoverTrigger> : overflowChip && <Fragment>{overflowChip}</Fragment>}\n </span>\n </div>\n );\n\n if (overflowChip && popoverContent) {\n return (\n <Popover>\n {/* PopoverAnchor on the whole cluster keeps the popover's position\n stable when individual tiles (and the +N trigger itself) animate\n via `hover:-translate-y-0.5 hover:scale-105`. */}\n <PopoverAnchor asChild>{clusterBody}</PopoverAnchor>\n <PopoverContent side={popoverSide} align={popoverAlign} sideOffset={popoverSideOffset} className=\"p-0\">\n {popoverContent}\n </PopoverContent>\n </Popover>\n );\n }\n return clusterBody;\n}\n","import { cn } from '../lib/utils';\nimport type { Partner } from './partner-cluster';\nimport { PartnerTile } from './partner-cluster';\nimport { PopoverClose } from './popover';\n\n/**\n * EcosystemMegaPanel — the \"L'écosystème …\" popover panel from the partners\n * maquette, ported to React. Designed to live inside a Radix Popover (passed\n * via `PartnerCluster.popoverContent` or `ShellAction.clickContent`), with\n * panel-internal links wrapped in `<PopoverClose asChild>` so a click both\n * dismisses the popover and opens the partner site in a new tab.\n *\n * Built-in fr/en strings, override any of them via the explicit props. Any\n * Partner with an `href` opens that URL in a new tab; partners without `href`\n * still render but their link is non-functional (href='#').\n */\n\nexport interface EcosystemMegaPanelProps {\n /** Partners to render. */\n partners: Partner[];\n /** Heading line. Default: 'L'écosystème' / 'The ecosystem'. */\n title?: string;\n /** Sub-heading paragraph. Default: localised generic. */\n subtitle?: string;\n /** Footer-left label. Default: '{N} services connectés à votre compte'. */\n connectedLabel?: string;\n /** Footer-right action label. Default: 'Tout découvrir →' / 'Discover all →'. */\n seeAllLabel?: string;\n /** When set, the \"see all\" footer item renders as an `<a target='_blank' href>`. */\n seeAllHref?: string;\n /** Click callback for the \"see all\" footer (fires alongside href navigation if both are set). */\n onSeeAllClick?: () => void;\n /** Click callback when a partner row is clicked. Fires alongside href navigation. */\n onPartnerClick?: (partner: Partner) => void;\n /** Show the 'Nous' / 'Part.' kind tag next to each name. Default true. */\n showKindTag?: boolean;\n /** Locale for built-in strings. Default 'fr'. */\n locale?: 'fr' | 'en';\n /** Extra Tailwind classes on the panel root (override width / padding). */\n className?: string;\n}\n\ninterface PanelStrings {\n title: string;\n subtitle: string;\n connected: (n: number) => string;\n seeAll: string;\n ours: string;\n partner: string;\n}\n\nconst STRINGS: Record<'fr' | 'en', PanelStrings> = {\n fr: {\n title: \"L'écosystème\",\n subtitle: 'Nos solutions et nos partenaires pour gérer toute votre activité transport.',\n connected: n => `${n} services connectés à votre compte`,\n seeAll: 'Tout découvrir →',\n ours: 'Nous',\n partner: 'Part.',\n },\n en: {\n title: 'The ecosystem',\n subtitle: 'Our solutions and partners to manage your entire transport business.',\n connected: n => `${n} services connected to your account`,\n seeAll: 'Discover all →',\n ours: 'Us',\n partner: 'Part.',\n },\n};\n\nexport function EcosystemMegaPanel({\n partners,\n title,\n subtitle,\n connectedLabel,\n seeAllLabel,\n seeAllHref,\n onSeeAllClick,\n onPartnerClick,\n showKindTag = true,\n locale = 'fr',\n className,\n}: EcosystemMegaPanelProps) {\n const s = STRINGS[locale];\n\n const seeAllNode = seeAllHref ? (\n <PopoverClose asChild>\n <a href={seeAllHref} target=\"_blank\" rel=\"noreferrer noopener\" onClick={onSeeAllClick} className=\"cursor-pointer font-bold text-primary hover:underline\">\n {seeAllLabel ?? s.seeAll}\n </a>\n </PopoverClose>\n ) : onSeeAllClick ? (\n <PopoverClose asChild>\n <button type=\"button\" onClick={onSeeAllClick} className=\"cursor-pointer font-bold text-primary hover:underline\">\n {seeAllLabel ?? s.seeAll}\n </button>\n </PopoverClose>\n ) : null;\n\n return (\n <div data-shell-ui-ecosystem-panel className={cn('w-115 p-4', className)}>\n <h3 className=\"text-sm font-extrabold text-foreground\">{title ?? s.title}</h3>\n <p className=\"mt-0.5 mb-3 text-xs text-muted-foreground\">{subtitle ?? s.subtitle}</p>\n <div className=\"grid grid-cols-2 gap-2\">\n {partners.map(p => (\n <PopoverClose key={p.id} asChild>\n <a\n href={p.href ?? '#'}\n target=\"_blank\"\n rel=\"noreferrer noopener\"\n onClick={() => onPartnerClick?.(p)}\n className=\"flex cursor-pointer items-center gap-3 rounded-md border border-transparent p-2 text-left transition-colors hover:border-border hover:bg-accent\"\n title={p.tagline}\n >\n <PartnerTile partner={p} size={38} />\n <span className=\"min-w-0\">\n <span className=\"flex items-center gap-1.5 text-[13px] font-bold text-foreground\">\n {p.name}\n {showKindTag && p.kind && (\n <span\n className={cn(\n 'rounded-sm px-1 py-px text-[10px] font-bold uppercase',\n // Maquette spec verbatim — `tag-solution`:\n // bg: color-mix(in srgb, var(--accent) 22%, #fff)\n // color: #8a6206\n // Using `--color-cta` as the accent yields the same\n // pale cream-yellow as the maquette.\n p.kind === 'solution' ? 'bg-[color-mix(in_srgb,var(--color-cta)_22%,#fff)] text-[#8a6206]' : 'bg-muted text-muted-foreground',\n )}\n >\n {p.kind === 'solution' ? s.ours : s.partner}\n </span>\n )}\n </span>\n {p.tagline && <span className=\"mt-0.5 block truncate text-[11.5px] text-muted-foreground\">{p.tagline}</span>}\n </span>\n </a>\n </PopoverClose>\n ))}\n </div>\n {(connectedLabel || seeAllNode || partners.length > 0) && (\n <div className=\"mt-3 flex items-center justify-between border-t pt-3 text-xs text-muted-foreground\">\n <span>{connectedLabel ?? s.connected(partners.length)}</span>\n {seeAllNode}\n </div>\n )}\n </div>\n );\n}\n","import type { ReactNode } from 'react';\n\nimport { cn } from '../lib/utils';\nimport { PopoverClose } from './popover';\n\n/**\n * UserMenu — list-of-items menu intended to live inside the click-Popover\n * anchored on the avatar (via `Shell.userMenu`). Each row uses\n * `<PopoverClose asChild>` so a click both dismisses the menu AND runs the\n * row's action (or follows its `href`).\n *\n * Items adopt the brand theme automatically via `text-muted-foreground\n * hover:bg-primary/10 hover:text-primary` — the same palette the collapsed-\n * group fly-out items use, so the UserMenu reads as part of the same family.\n *\n * Items with `tone: 'danger'` paint in the destructive palette\n * (`text-destructive hover:bg-destructive/10`). Items with `dividerBefore`\n * render a 1px separator above them — handy to set off the logout row.\n */\n\nexport interface UserMenuItem {\n id: string;\n label: string;\n icon?: ReactNode;\n /** Click handler. Fires alongside any `href` navigation. */\n onClick?: () => void;\n /** When set, the row renders as `<a target='_blank' href>` so the link opens in a new tab. */\n href?: string;\n /** Visual tone: 'default' (muted-foreground + primary hover) | 'danger' (destructive). Default 'default'. */\n tone?: 'default' | 'danger';\n /** Draw a 1px separator above this row. */\n dividerBefore?: boolean;\n /** Disable the row (cursor:not-allowed, no hover, onClick ignored). */\n disabled?: boolean;\n}\n\nexport interface UserMenuProps {\n items: UserMenuItem[];\n /** Extra Tailwind classes on the menu root — override width/padding as needed. */\n className?: string;\n}\n\nexport function UserMenu({ items, className }: UserMenuProps) {\n return (\n <div data-shell-ui-user-menu className={cn('w-56 py-1', className)}>\n {items.map(item => {\n const isDanger = item.tone === 'danger';\n const rowClass = cn(\n 'flex w-full cursor-pointer items-center gap-3 px-3 py-2 text-left text-sm transition-colors',\n isDanger\n ? 'text-red-600 hover:bg-red-50 hover:text-red-700 dark:text-red-400 dark:hover:bg-red-900/20 dark:hover:text-red-300'\n : 'text-muted-foreground hover:bg-primary/10 hover:text-primary',\n item.disabled && 'pointer-events-none opacity-50',\n );\n const inner = (\n <>\n {item.icon && <span className=\"flex h-4 w-4 shrink-0 items-center justify-center [&_svg]:h-4 [&_svg]:w-4\">{item.icon}</span>}\n <span>{item.label}</span>\n </>\n );\n const row = item.href ? (\n <a href={item.href} target=\"_blank\" rel=\"noreferrer noopener\" onClick={item.onClick} className={rowClass} data-shell-ui-user-menu-item data-tone={item.tone}>\n {inner}\n </a>\n ) : (\n <button type=\"button\" onClick={item.onClick} disabled={item.disabled} className={rowClass} data-shell-ui-user-menu-item data-tone={item.tone}>\n {inner}\n </button>\n );\n return (\n <div key={item.id}>\n {item.dividerBefore && <div aria-hidden className=\"my-1 h-px bg-border\" />}\n <PopoverClose asChild>{row}</PopoverClose>\n </div>\n );\n })}\n </div>\n );\n}\n","import { LayoutGrid } from 'lucide-react';\nimport type { ReactNode } from 'react';\n\nimport { cn } from '../lib/utils';\n\n/**\n * LayoutSwitcher — ports the `s3p-app-header--layoutButton` from the s3pweb\n * Stencil app into shell-ui as a **stateless, click-emitting** button. The\n * consumer owns the layout state (typically a `useState` persisted to\n * `localStorage`), and is responsible for opening whatever picker modal /\n * drawer wires up to the click.\n *\n * If the consumer wants the keyboard-shortcut behaviour from the original\n * (pressing 1-9 / AZERTY `& é \" ' ( - è _ ç` to jump to a layout), they wire\n * a `window.addEventListener('keydown')` themselves — the component does NOT\n * attach any global listener.\n *\n * Use the `variant` prop to render:\n * - **compact** (default, top-bar): 38×38 ghost-button with the\n * `LayoutGrid` icon + a small primary-coloured badge in the\n * bottom-right corner showing the current value.\n * - **row** (expanded sidebar): full-width footer row matching the other\n * sidebar toggles — icon + label + badge on the right.\n *\n * For collapsed-sidebar mode (where shell-ui falls back to the standard\n * icon button), use `<LayoutNumberIcon>` as the action's `icon` so the\n * number badge is still visible at 16px.\n */\n\nexport interface LayoutSwitcherProps {\n /** Current layout value (typically 1-9). Rendered as the badge. */\n value: number;\n /** Fires when the trigger is clicked. Consumer opens its picker / modal here. */\n onClick?: () => void;\n /**\n * Visual variant:\n * - 'compact' (default): 38×38 ghost-button, icon + corner badge.\n * - 'row': h-8 full-width row, icon + label + trailing badge.\n */\n variant?: 'compact' | 'row';\n /** Title (native tooltip + aria-label prefix). Default 'Gérer les dispositions'. */\n title?: string;\n /** Label shown in the `row` variant. Default = `title`. */\n label?: string;\n /** Extra Tailwind classes on the root button. */\n className?: string;\n}\n\nexport function LayoutSwitcher({ value, onClick, variant = 'compact', title = 'Gérer les dispositions', label, className }: LayoutSwitcherProps) {\n // The trigger title is just `title`; the current value is already shown\n // visually via the badge so appending it as \"(N)\" would double the\n // information and clutter the native tooltip.\n const accessibleTitle = title;\n const visibleLabel = label ?? title;\n\n if (variant === 'row') {\n return (\n <button\n type=\"button\"\n onClick={onClick}\n title={accessibleTitle}\n aria-label={accessibleTitle}\n data-shell-ui-layout-switcher\n data-layout={value}\n data-variant=\"row\"\n className={cn(\n 'inline-flex h-8 w-full cursor-pointer items-center justify-start gap-2 rounded-sm bg-transparent px-3.25 text-xs font-semibold text-foreground outline-none transition-colors hover:bg-secondary hover:text-secondary-foreground focus-visible:ring-2 focus-visible:ring-ring',\n className,\n )}\n >\n <span className=\"mr-2 flex h-4 w-4 shrink-0 items-center justify-center\">\n <LayoutGrid className=\"h-4 w-4\" />\n </span>\n <span className=\"flex-1 truncate text-left\">{visibleLabel}</span>\n <LayoutBadge value={value} />\n </button>\n );\n }\n\n return (\n <button\n type=\"button\"\n onClick={onClick}\n title={accessibleTitle}\n aria-label={accessibleTitle}\n data-shell-ui-layout-switcher\n data-layout={value}\n data-variant=\"compact\"\n className={cn(\n 'relative inline-flex h-9.5 w-9.5 shrink-0 cursor-pointer items-center justify-center rounded-sm bg-transparent text-foreground outline-none transition-colors hover:bg-secondary hover:text-secondary-foreground focus-visible:ring-2 focus-visible:ring-ring',\n className,\n )}\n >\n {/* `shape-rendering` + a compositor layer pin the stroke anti-aliasing\n across hover transitions; without them the SVG re-rasterises during\n `transition-colors` and the strokes appear to flicker thickness. */}\n <LayoutGrid className=\"h-5 w-5 [shape-rendering:geometricPrecision] transform-[translateZ(0)]\" />\n <LayoutBadge value={value} className=\"absolute right-0.5 bottom-0.5\" />\n </button>\n );\n}\n\n/**\n * The primary-coloured number chip used by `<LayoutSwitcher>` and exposed\n * so consumers can drop it next to a custom icon (e.g. inside a row).\n */\nfunction LayoutBadge({ value, className }: { value: number; className?: string }): ReactNode {\n return (\n <span\n aria-hidden\n className={cn('inline-flex h-4 min-w-4 items-center justify-center rounded-sm bg-primary px-1 text-[10px] font-bold leading-none text-primary-foreground', className)}\n >\n {value}\n </span>\n );\n}\n\n/**\n * Icon-slot variant of LayoutSwitcher: a 16×16 `LayoutGrid` with a small\n * primary-coloured number badge overflowing the bottom-right corner. Use\n * as `ShellAction.icon` when the action's `customTrigger` is skipped (e.g.\n * in the collapsed-sidebar fallback) but you still want the badge visible.\n */\nexport function LayoutNumberIcon({ value, className }: { value: number; className?: string }) {\n return (\n <span className={cn('relative inline-flex h-4 w-4 items-center justify-center', className)}>\n <LayoutGrid className=\"h-4 w-4 [shape-rendering:geometricPrecision] transform-[translateZ(0)]\" />\n {/* Badge overlays the bottom-right square of the LayoutGrid and pokes\n 2px past the corner (`-right-0.5 -bottom-0.5` = -2px) so it reads\n as a clear \"badge on icon\" rather than living strictly inside. */}\n <span\n aria-hidden\n className=\"absolute -right-0.5 -bottom-0.5 inline-flex h-2.5 min-w-2.5 items-center justify-center rounded-sm bg-primary px-0.5 text-[8px] font-bold leading-none text-primary-foreground\"\n >\n {value}\n </span>\n </span>\n );\n}\n","/* eslint-disable react-refresh/only-export-components -- the hook and the\n panel component live together by design; the hook IS the public API of\n this module and splitting it would force consumers to import two paths\n for one concept. */\nimport { Pin, PinOff, Puzzle } from 'lucide-react';\nimport { useEffect, useState, type ReactNode } from 'react';\n\nimport { cn } from '../lib/utils';\nimport type { ShellAction } from '../types';\nimport { HoverCard, HoverCardContent, HoverCardTrigger } from './hover-card';\nimport { PopoverClose } from './popover';\n\n/**\n * useActionsMenu — Chrome / Edge \"Extensions\"-style helper. Wraps a list of\n * `ShellAction`s with a per-action pin toggle persisted to localStorage,\n * returning a `visibleActions` array that the consumer hands straight to\n * `<Shell actions={...}>`.\n *\n * Behaviour:\n * - PINNED actions render in the chrome cluster as normal.\n * - UNPINNED actions are hidden from the chrome but remain reachable\n * from inside the puzzle-icon popover that this hook injects.\n * - The puzzle trigger is ALWAYS present in the chrome — it's how the\n * user opens the panel to re-pin things.\n *\n * Storage:\n * The pinned IDs are JSON-stringified in localStorage under\n * `storageKey` (default `'shell-ui:pinnedActions'`). Pass a project-\n * specific key to avoid collisions across apps. `defaultPinned` is\n * used on the very first mount (no localStorage entry yet); default\n * = every action pinned.\n *\n * Out of scope:\n * - Sorting / drag-to-reorder. The action array order is preserved.\n * - Per-action \"can pin\" gates — every passed action is pinnable.\n * If you have an action that should always be visible, keep it\n * OUT of the `actions` array passed here and prepend it manually\n * to whatever you hand to `<Shell>`.\n */\n\nconst DEFAULT_STORAGE_KEY = 'shell-ui:pinnedActions';\n\nexport interface UseActionsMenuOptions {\n /** The full set of actions the user can pin / unpin. */\n actions: ShellAction[];\n /** localStorage key for the pinned id set. Default `'shell-ui:pinnedActions'`. */\n storageKey?: string;\n /**\n * Action IDs pinned by default — used the first time the hook mounts\n * (no localStorage entry yet). Default: every action ID (all pinned).\n */\n defaultPinned?: string[];\n /** Menu trigger label / panel heading. Default `'Actions'`. */\n menuLabel?: string;\n /** Menu trigger placement in the chrome cluster. Default `'trailing'`. */\n menuPlacement?: 'leading' | 'trailing';\n /** Draw a divider after the menu trigger. Default false. */\n menuDividerAfter?: boolean;\n /** Override the menu trigger icon. Default lucide `Puzzle`. */\n menuIcon?: ReactNode;\n /** Override the menu trigger's action id. Default `'__actions-menu__'`. */\n menuId?: string;\n /** Labels for the pin toggle button (i18n). */\n pinLabel?: string;\n unpinLabel?: string;\n}\n\nexport interface UseActionsMenuReturn {\n /** Pass straight to `<Shell actions={...}>`: pinned subset + the menu trigger appended. */\n visibleActions: ShellAction[];\n /** Set of currently-pinned action IDs. */\n pinnedIds: Set<string>;\n /** Pin / unpin imperatively (alongside the panel's pin buttons). */\n togglePin: (id: string) => void;\n}\n\nfunction readStoredPinned(key: string, fallback: string[]): Set<string> {\n if (typeof window === 'undefined') return new Set(fallback);\n try {\n const raw = window.localStorage.getItem(key);\n if (!raw) return new Set(fallback);\n const arr = JSON.parse(raw);\n if (Array.isArray(arr)) return new Set(arr.filter((x: unknown): x is string => typeof x === 'string'));\n } catch {\n /* malformed — fall through */\n }\n return new Set(fallback);\n}\n\nexport function useActionsMenu({\n actions,\n storageKey = DEFAULT_STORAGE_KEY,\n defaultPinned,\n menuLabel = 'Actions',\n menuPlacement = 'trailing',\n menuDividerAfter,\n menuIcon,\n menuId = '__actions-menu__',\n pinLabel = 'Épingler',\n unpinLabel = 'Détacher',\n}: UseActionsMenuOptions): UseActionsMenuReturn {\n const fallback = defaultPinned ?? actions.map(a => a.id);\n const [pinnedIds, setPinnedIds] = useState<Set<string>>(() => readStoredPinned(storageKey, fallback));\n\n useEffect(() => {\n if (typeof window === 'undefined') return;\n window.localStorage.setItem(storageKey, JSON.stringify([...pinnedIds]));\n }, [pinnedIds, storageKey]);\n\n const togglePin = (id: string) => {\n setPinnedIds(prev => {\n const next = new Set(prev);\n if (next.has(id)) next.delete(id);\n else next.add(id);\n return next;\n });\n };\n\n const pinnedActions = actions.filter(a => pinnedIds.has(a.id));\n const menuAction: ShellAction = {\n id: menuId,\n label: menuLabel,\n icon: menuIcon ?? <Puzzle />,\n placement: menuPlacement,\n dividerAfter: menuDividerAfter,\n clickContent: <ActionsMenuPanel actions={actions} pinnedIds={pinnedIds} onTogglePin={togglePin} title={menuLabel} pinLabel={pinLabel} unpinLabel={unpinLabel} />,\n };\n\n return { visibleActions: [...pinnedActions, menuAction], pinnedIds, togglePin };\n}\n\nexport interface ActionsMenuPanelProps {\n actions: ShellAction[];\n pinnedIds: Set<string>;\n onTogglePin: (id: string) => void;\n title?: string;\n pinLabel?: string;\n unpinLabel?: string;\n className?: string;\n}\n\nexport function ActionsMenuPanel({ actions, pinnedIds, onTogglePin, title, pinLabel = 'Épingler', unpinLabel = 'Détacher', className }: ActionsMenuPanelProps) {\n return (\n <div data-shell-ui-actions-menu className={cn('w-64 py-1', className)}>\n {title && <div className=\"px-3 pt-1 pb-2 text-xs font-bold tracking-wide uppercase text-muted-foreground\">{title}</div>}\n <ul>\n {actions.map(action => {\n const pinned = pinnedIds.has(action.id);\n const togglePinTitle = `${pinned ? unpinLabel : pinLabel} — ${action.label}`;\n // Row activation: when the action has an `onClick`, the main row\n // closes the popover and runs it. Otherwise the row is inert\n // (the action's interactivity lives in its `customTrigger` /\n // `clickContent` / `hoverContent` in the chrome).\n const rowInner = (\n <>\n <span className=\"flex h-4 w-4 shrink-0 items-center justify-center [&_svg]:h-4 [&_svg]:w-4\">{action.icon}</span>\n <span className=\"flex-1 truncate\">{action.label}</span>\n </>\n );\n // `title` is omitted when the action carries `hoverContent` — the\n // HoverCard surfaces the rich detail; the native tooltip would\n // create a competing second tooltip near the cursor.\n const rowTitle = action.hoverContent ? undefined : action.label;\n const baseRow = action.onClick ? (\n <PopoverClose asChild>\n <button\n type=\"button\"\n onClick={action.onClick}\n title={rowTitle}\n aria-label={action.label}\n className=\"flex flex-1 cursor-pointer items-center gap-3 rounded-sm bg-transparent px-1 py-1 text-left text-sm text-muted-foreground transition-colors hover:bg-primary/10 hover:text-primary\"\n >\n {rowInner}\n </button>\n </PopoverClose>\n ) : (\n <div\n className={cn(\n 'flex flex-1 items-center gap-3 rounded-sm px-1 py-1 text-left text-sm text-muted-foreground',\n // Hover-info rows still feel interactive (the hover surfaces\n // a detail panel), so they pick up the same cursor + hover\n // bg treatment as the clickable rows.\n action.hoverContent && 'cursor-pointer transition-colors hover:bg-primary/10 hover:text-primary',\n )}\n title={rowTitle}\n >\n {rowInner}\n </div>\n );\n // Wrap the row in a HoverCard when the action carries `hoverContent`\n // so the puzzle menu surfaces the same detail panel the inline\n // chrome button shows — e.g. the realtime status detail.\n const row = action.hoverContent ? (\n <HoverCard openDelay={150} closeDelay={100}>\n <HoverCardTrigger asChild>{baseRow}</HoverCardTrigger>\n <HoverCardContent\n side=\"left\"\n align=\"start\"\n // The row trigger is asymmetric inside its parent popover:\n // ~8 px inset from the parent's left edge (li `px-2`), but\n // ~40 px inset from the right edge (li `px-2` + `gap-1` +\n // 28 px pin button). So a single `sideOffset` can't give\n // the same visible gap on both sides after a Radix flip.\n //\n // We pick `sideOffset=16` for the natural `side=left`\n // placement (8 px trigger inset + 8 px visible gap — matches\n // POPOVER_GAP elsewhere in the shell). When Radix flips to\n // `side=right` (collapsed/expanded sidebar both go this\n // way), we add `ml-8` (32 px) so the effective offset\n // becomes 48 — exactly enough to clear the 40 px trigger\n // inset plus an 8 px visible gap.\n sideOffset={16}\n collisionPadding={8}\n className=\"w-auto p-0 data-[side=right]:ml-8\"\n >\n {action.hoverContent}\n </HoverCardContent>\n </HoverCard>\n ) : (\n baseRow\n );\n return (\n <li key={action.id} className=\"flex items-center gap-1 px-2 py-0.5\" data-shell-ui-actions-menu-row data-pinned={pinned || undefined}>\n {row}\n <button\n type=\"button\"\n onClick={() => onTogglePin(action.id)}\n title={togglePinTitle}\n aria-label={togglePinTitle}\n aria-pressed={pinned}\n data-shell-ui-actions-menu-pin\n data-pinned={pinned || undefined}\n className={cn(\n 'inline-flex h-7 w-7 shrink-0 cursor-pointer items-center justify-center rounded-sm bg-transparent text-muted-foreground transition-colors hover:bg-secondary hover:text-secondary-foreground',\n pinned && 'text-primary',\n )}\n >\n {/* Icon reflects the CLICK ACTION (not the current state): when\n pinned, show PinOff (= \"click to unpin\"); when unpinned,\n show Pin (= \"click to pin\"). */}\n {pinned ? <PinOff className=\"h-4 w-4\" /> : <Pin className=\"h-4 w-4\" />}\n </button>\n </li>\n );\n })}\n </ul>\n </div>\n );\n}\n","/* eslint-disable react-refresh/only-export-components -- the strings\n default + the pair of components live together by design; splitting\n them would force consumers to learn three import paths for one widget. */\nimport { Radio } from 'lucide-react';\nimport type { ReactNode } from 'react';\n\nimport { cn } from '../lib/utils';\n\n/**\n * Realtime / MQTT status indicator. Composes a `Radio` glyph with a small\n * coloured presence dot at the icon's bottom-right corner — same shape the\n * Stencil app's `mqttErrorStatus` widget used, ported to React.\n *\n * Plug it into a pinnable `ShellAction`'s `icon` slot so it renders the\n * same way the framework renders mobile / fullscreen / support — a 38 px\n * ghost icon button when pinned, a 16 px row icon when listed in the\n * puzzle / \"Plus\" menus, a 32 px chip in the collapsed sidebar fallback.\n *\n * Pair with `<RealtimePulseHoverContent>` on the action's `hoverContent`\n * so every surface (top-bar, compact \"Plus\" rows, puzzle menu, collapsed\n * sidebar) shows the status detail on hover.\n */\n\nexport type RealtimeStatus = 'connected' | 'connecting' | 'error' | 'closed' | 'offline';\n\nexport interface RealtimePulseStrings {\n connected: string;\n connecting: string;\n error: string;\n closed: string;\n offline: string;\n lastUpdate: string;\n}\n\n/**\n * French strings — built on top of the Stencil app's `mqttErrorStatusOk` /\n * `mqttErrorStatus` wording (`assets/i18n/fr.json`) but specialized per\n * state. The legacy SaaS only had two messages because its MQTT class\n * exposed binary OK/error; the React port keeps the full five-state\n * lifecycle so users see what's actually happening (in-flight reconnect\n * vs. broker error vs. clean close vs. no network).\n */\nexport const DEFAULT_REALTIME_STRINGS_FR: RealtimePulseStrings = {\n connected: \"Vous êtes actuellement connecté au bus d'événements. Les fonctionnalités temps réel sont disponibles.\",\n connecting: \"Connexion au bus d'événements en cours. Les fonctionnalités temps réel seront disponibles dès que la connexion sera établie.\",\n error: \"Erreur de connexion au bus d'événements. Les fonctionnalités temps réel sont indisponibles.\",\n closed: \"La connexion au bus d'événements a été fermée. Les fonctionnalités temps réel sont indisponibles tant que la connexion ne sera pas rétablie.\",\n offline: 'Vous êtes hors ligne. Les fonctionnalités temps réel seront indisponibles tant que la connexion ne sera pas rétablie.',\n lastUpdate: 'Dernière mise à jour',\n};\n\n/**\n * English equivalents.\n */\nexport const DEFAULT_REALTIME_STRINGS_EN: RealtimePulseStrings = {\n connected: 'You are currently connected to the event bus. Realtime features are available.',\n connecting: 'Connecting to the event bus. Realtime features will be available as soon as the connection is established.',\n error: 'Error connecting to the event bus. Realtime features are unavailable.',\n closed: 'The event bus connection has been closed. Realtime features are unavailable until the connection is re-established.',\n offline: 'You are offline. Realtime features will be unavailable until the connection is re-established.',\n lastUpdate: 'Last update',\n};\n\n/**\n * Status-tinted Radio icon. The Radio glyph uses `currentColor` for its\n * strokes so setting `text-*` on the wrapper tints the whole icon — no\n * extra overlay needed. `connecting` pulses to signal in-flight transit.\n */\nconst ICON_TONE: Record<RealtimeStatus, string> = {\n connected: 'text-success',\n connecting: 'text-warning animate-pulse',\n error: 'text-destructive',\n closed: 'text-destructive',\n offline: 'text-muted-foreground/60',\n};\n\nexport function RealtimePulseIcon({ status, className }: { status: RealtimeStatus; className?: string }) {\n return (\n <span className={cn('inline-flex h-full w-full items-center justify-center', ICON_TONE[status], className)} data-shell-ui-realtime-pulse data-status={status}>\n <Radio />\n </span>\n );\n}\n\n/**\n * Hover-info content rendered in a HoverCard. Pair with the icon via\n * `ShellAction.hoverContent` so the framework wraps every surface in a\n * HoverCard automatically.\n */\nexport function RealtimePulseHoverContent({\n status,\n lastUpdate,\n strings = DEFAULT_REALTIME_STRINGS_FR,\n}: {\n status: RealtimeStatus;\n lastUpdate?: string;\n strings?: RealtimePulseStrings;\n}): ReactNode {\n // Re-use the icon's status colour for the leading dot so the popover\n // legend reads as the same indicator at a glance.\n const dotColor = ICON_TONE[status].replace('text-', 'bg-').replace(' animate-pulse', '');\n return (\n <div className=\"w-72 p-3 text-xs leading-snug\">\n <div className=\"flex items-start gap-2 text-foreground\">\n <span aria-hidden className={cn('mt-1 h-2 w-2 shrink-0 rounded-full', dotColor)} />\n <span>{strings[status]}</span>\n </div>\n {lastUpdate && (\n <div className=\"mt-2 pl-4 text-muted-foreground\">\n {strings.lastUpdate} : <span className=\"font-medium text-foreground\">{lastUpdate}</span>\n </div>\n )}\n </div>\n );\n}\n"],"names":["ReactSharedInternals","require$$0","reactCompilerRuntime_production","size","reactCompilerRuntime_development","dispatcher","compilerRuntimeModule","require$$1","cn","inputs","twMerge","clsx","buttonVariants","cva","variants","variant","default","destructive","outline","secondary","ghost","link","defaultVariants","Button","t0","$","_c","className","props","t1","t2","t3","asChild","undefined","Comp","Slot","Root","t4","t5","jsx","HoverCard","openDelay","closeDelay","HoverCardTrigger","HoverCardContent","children","align","sideOffset","HoverCardPrimitive","Popover","PopoverTrigger","PopoverAnchor","PopoverClose","PopoverContent","PopoverPrimitive","TooltipProvider","delayDuration","TooltipPrimitive","Tooltip","TooltipTrigger","TooltipContent","STRINGS","fr","collapse","expand","logout","themeDarkMode","themeLightMode","navUseTop","navUseSidebar","moreLabel","en","getShellStrings","locale","POPOVER_GAP","TOPBAR_OFFSET","fullRow","shortRow","SIDEBAR_OFFSET","navGroup","actionExpanded","actionCollapsed","userExpanded","userCollapsed","useMediaQuery","query","callback","window","matchMedia","_temp","mql","addEventListener","removeEventListener","matches","useSyncExternalStore","_temp2","SidebarLayoutCtx","createContext","scrollbarWidth","SidebarLayoutProvider","Provider","useSidebarLayout","useContext","isNavGroup","entry","Sidebar","items","collapsed","collapsedProp","onCollapseToggle","onItemSelect","onGroupToggle","logo","collapsedLogo","topSlot","user","onLogout","theme","onThemeToggle","navMode","onNavModeChange","enableThemeToggle","enableNavModeToggle","enableLogoutButton","showSubmenuIndicator","enablePlusOverflow","actions","t6","userSection","userMenu","footer","footerExtra","scrollActiveIntoView","t7","renderCollapsedTooltip","t8","strings","internalCollapsed","setInternalCollapsed","useState","isCollapsedControlled","t9","handleCollapseToggle","compactFooterRaw","compactFooter","t10","BuiltInFooter","builtInFooter","t11","BuiltInUserSection","builtInUserSection","scrollRef","useRef","setScrollbarWidth","t12","Symbol","for","el","current","update","offsetWidth","clientWidth","ro","ResizeObserver","observe","mo","MutationObserver","childList","subtree","disconnect","t13","useEffect","t14","layout","t15","t16","t17","t18","t19","t20","t21","ChevronRight","ChevronLeft","t22","t23","t24","SidebarItems","t25","jsxs","t26","t27","c","GHOST_BTN","compact","extra","hasNavMode","hasTheme","hasActions","length","leadingActions","filter","trailingActions","_temp3","compactActive","leadingInline","_temp4","leadingCollapsed","_temp5","trailingInline","_temp6","trailingCollapsed","_temp7","hasCompactEntries","action","ActionButton","id","dividerAfter","flatMap","NavModeToggle","ThemeToggle","action_0","CompactFooterMenu","map","_temp8","kind","onClick","label","isDark","_temp9","a_6","a","a_5","a_4","keepInlineWhenCompact","a_3","a_2","a_1","a_0","placement","sidebarCustom","customSidebarTrigger","customTrigger","active","icon","button","clickContent","hoverContent","isTop","PanelLeft","PanelTop","Sun","Moon","defaultInitials","name","split","Boolean","slice","w","toUpperCase","join","logoutLabel","initials","subtitle","avatarPlusName","userButton","LogOut","logoutButton","SidebarNavGroup","SidebarNavItem","item","ref","scrollIntoView","block","sharedClass","sharedTitle","sharedActive","hasBadge","badge","Fragment","inner","href","slug","node","e","metaKey","ctrlKey","shiftKey","altKey","preventDefault","node_0","trigger","isGroup","group","onToggle","internalExpanded","setInternalExpanded","isExpandedControlled","expanded","_temp0","handleClick","ChevronDown","wrapped","CollapsedFlyout","gridTemplateRows","open","setOpen","entries","close","MoreHorizontal","i","CompactFooterRow","CompactFooterNestedRow","onClose","Shell","navModeProp","mainClassName","bgClassName","internalNavMode","setInternalNavMode","isNavModeControlled","mode","handleNavModeChange","sidebarNavModeChange","ShellTopBar","themeLabel","compactActionsRaw","compactActions","renderTopBarAction","navRef","maxVisible","setMaxVisible","navEl","recompute","width","total","fit","Math","max","floor","observer","contentRect","hiddenHasActive","hiddenItems","visibleItems","some","entry_0","groupItems","useDropdown","target","isActive","badgeSource","find","badgeIsNumeric","innerIcon","triggerClass","activeUnderline","TopBarGroupDropdown","button_0","e_0","TopBarOverflowMenu","action_1","CompactActionsMenu","type","i_1","i_0","child","childActive","childHasBadge","rowClass","rowInner","_temp1","hasActive","OverflowFlyoutRow","onSelect","CompactActionRow","CompactNestedRow","tintColor","hex","ratio","replace","r","parseInt","substring","g","b","mix","x","round","svgMark","paths","opts","strokeWidth","PartnerTile","partner","radius","ringColor","style","title","solid","color","bg","fg","borderWidth","borderStyle","borderColor","ringStyle","height","borderRadius","background","mark","PartnerCluster","partners","popoverContent","tileSize","chipBorderColor","popoverSide","popoverAlign","popoverSideOffset","overflowChip","visible","overflow","overflowRadius","overflowTitle","p","overlap","clusterBody","connected","n","seeAll","ours","EcosystemMegaPanel","connectedLabel","seeAllLabel","seeAllHref","onSeeAllClick","onPartnerClick","showKindTag","s","seeAllNode","tagline","UserMenu","isDanger","tone","disabled","row","dividerBefore","LayoutSwitcher","value","accessibleTitle","visibleLabel","LayoutGrid","LayoutBadge","LayoutNumberIcon","DEFAULT_STORAGE_KEY","readStoredPinned","key","fallback","Set","raw","localStorage","getItem","arr","JSON","parse","Array","isArray","useActionsMenu","storageKey","defaultPinned","menuLabel","menuPlacement","menuDividerAfter","menuIcon","menuId","pinLabel","unpinLabel","pinnedIds","setPinnedIds","setItem","stringify","prev","next","has","delete","add","togglePin","pinnedActions","Puzzle","ActionsMenuPanel","menuAction","visibleActions","onTogglePin","pinned","togglePinTitle","rowTitle","baseRow","PinOff","Pin","DEFAULT_REALTIME_STRINGS_FR","connecting","error","closed","offline","lastUpdate","DEFAULT_REALTIME_STRINGS_EN","ICON_TONE","RealtimePulseIcon","status","Radio","RealtimePulseHoverContent","dotColor"],"mappings":"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","x_google_ignoreList":[0,1,2]}
|
|
1
|
+
{"version":3,"file":"index.js","names":["clsx","ClassValue","twMerge","cn","inputs","React","cva","VariantProps","Slot","cn","buttonVariants","variants","variant","default","destructive","outline","secondary","ghost","link","size","defaultVariants","Button","t0","$","_c","className","props","t1","t2","t3","asChild","undefined","Comp","Root","t4","t5","React","HoverCard","HoverCardPrimitive","cn","t0","$","_c","props","t1","t2","openDelay","closeDelay","undefined","t3","HoverCardTrigger","HoverCardContent","children","className","align","sideOffset","t4","React","Popover","PopoverPrimitive","cn","t0","$","_c","props","t1","PopoverTrigger","PopoverAnchor","PopoverClose","PopoverContent","children","className","t2","align","sideOffset","undefined","t3","t4","React","Tooltip","TooltipPrimitive","cn","TooltipProvider","t0","$","_c","props","t1","delayDuration","undefined","t2","TooltipTrigger","TooltipContent","children","className","sideOffset","t3","ShellLocale","ShellStrings","collapse","expand","logout","themeDarkMode","themeLightMode","navUseTop","navUseSidebar","moreLabel","STRINGS","Record","fr","en","getShellStrings","locale","POPOVER_GAP","TOPBAR_OFFSET","fullRow","shortRow","const","SIDEBAR_OFFSET","navGroup","actionExpanded","actionCollapsed","userExpanded","userCollapsed","useSyncExternalStore","useMediaQuery","query","$","_c","t0","t1","callback","window","matchMedia","_temp","mql","addEventListener","removeEventListener","matches","_temp2","createContext","useContext","SidebarLayout","scrollbarWidth","SidebarLayoutCtx","SidebarLayoutProvider","Provider","useSidebarLayout","ReactNode","NavItem","id","label","icon","active","badge","href","meta","slug","NavGroup","items","expanded","NavEntry","isNavGroup","entry","ShellAction","onClick","hoverContent","clickContent","customTrigger","customSidebarTrigger","placement","dividerAfter","keepInlineWhenCompact","clsx","ChevronDown","ChevronLeft","ChevronRight","LogOut","Moon","MoreHorizontal","PanelLeft","PanelTop","Sun","useEffect","useRef","useState","ReactNode","HoverCard","HoverCardContent","HoverCardTrigger","Popover","PopoverContent","PopoverTrigger","Tooltip","TooltipContent","TooltipTrigger","getShellStrings","ShellLocale","ShellStrings","SIDEBAR_OFFSET","SidebarLayoutProvider","useSidebarLayout","SidebarLayout","useMediaQuery","cn","NavEntry","NavGroup","NavItem","ShellAction","isNavGroup","SidebarUser","name","subtitle","initials","RenderCollapsedTooltip","props","trigger","entry","isGroup","onItemSelect","item","group","SidebarProps","items","collapsed","onCollapseToggle","onGroupToggle","logo","collapsedLogo","topSlot","user","onLogout","theme","onThemeToggle","navMode","onNavModeChange","mode","enableThemeToggle","enableNavModeToggle","enableLogoutButton","showSubmenuIndicator","enablePlusOverflow","actions","locale","userSection","userMenu","footer","footerExtra","scrollActiveIntoView","renderCollapsedTooltip","className","Sidebar","t0","$","_c","collapsedProp","t1","t2","t3","t4","t5","t6","t7","undefined","t8","strings","internalCollapsed","setInternalCollapsed","isCollapsedControlled","t9","_temp","handleCollapseToggle","compactFooterRaw","compactFooter","t10","builtInFooter","t11","logout","builtInUserSection","scrollRef","scrollbarWidth","setScrollbarWidth","t12","Symbol","for","el","current","update","offsetWidth","clientWidth","ro","ResizeObserver","observe","mo","MutationObserver","childList","subtree","disconnect","t13","t14","layout","t15","t16","t17","t18","t19","expand","collapse","t20","t21","t22","t23","t24","t25","t26","t27","c","GHOST_BTN","BuiltInFooter","compact","extra","hasNavMode","hasTheme","hasActions","length","leadingActions","filter","_temp2","trailingActions","_temp3","compactActive","leadingInline","_temp4","leadingCollapsed","_temp5","trailingInline","_temp6","trailingCollapsed","_temp7","hasCompactEntries","action","id","dividerAfter","flatMap","action_0","map","_temp8","kind","const","onClick","label","navUseSidebar","navUseTop","themeLightMode","themeDarkMode","isDark","_temp9","moreLabel","a_6","a","a_5","a_4","keepInlineWhenCompact","a_3","a_2","a_1","a_0","placement","ActionButton","sidebarCustom","customSidebarTrigger","customTrigger","active","icon","button","sideOffset","actionCollapsed","actionExpanded","clickContent","hoverContent","NavModeToggle","isTop","ThemeToggle","defaultInitials","split","Boolean","slice","w","toUpperCase","join","BuiltInUserSection","logoutLabel","avatarPlusName","userButton","logoutButton","userCollapsed","userExpanded","SidebarItemsProps","SidebarItems","SidebarNavItem","ref","scrollIntoView","block","sharedClass","sharedTitle","sharedActive","hasBadge","badge","inner","href","slug","node","e","metaKey","ctrlKey","shiftKey","altKey","preventDefault","node_0","SidebarNavGroup","onToggle","internalExpanded","setInternalExpanded","isExpandedControlled","expanded","expandedState","_temp0","handleClick","wrapped","gridTemplateRows","CollapsedFlyout","open","setOpen","navGroup","CompactFooterEntry","CompactFooterMenu","entries","close","i","CompactFooterRow","onClose","CompactFooterNestedRow","ChevronDown","ChevronRight","LogOut","Moon","MoreHorizontal","PanelLeft","Sun","Fragment","useEffect","useRef","useState","ReactNode","Button","HoverCard","HoverCardContent","HoverCardTrigger","Popover","PopoverContent","PopoverTrigger","Tooltip","TooltipContent","TooltipTrigger","getShellStrings","ShellLocale","ShellStrings","TOPBAR_OFFSET","useMediaQuery","cn","Sidebar","RenderCollapsedTooltip","SidebarUser","isNavGroup","NavEntry","NavGroup","NavItem","ShellAction","ShellProps","items","navMode","onNavModeChange","mode","collapsed","onCollapseToggle","collapsedLogo","topSlot","scrollActiveIntoView","renderCollapsedTooltip","footer","footerExtra","userSection","logo","user","onLogout","theme","onThemeToggle","locale","onItemSelect","item","group","onGroupToggle","enableThemeToggle","enableNavModeToggle","enableLogoutButton","showSubmenuIndicator","enablePlusOverflow","actions","userMenu","children","className","mainClassName","bgClassName","Shell","t0","$","_c","navModeProp","t1","t2","t3","t4","t5","t6","t7","undefined","internalNavMode","setInternalNavMode","isNavModeControlled","t8","handleNavModeChange","sidebarNavModeChange","t9","t10","t11","t12","t13","t14","t15","defaultInitials","name","split","filter","Boolean","slice","map","w","toUpperCase","join","ShellTopBar","strings","themeLabel","themeLightMode","themeDarkMode","leadingActions","_temp","trailingActions","_temp2","compactActionsRaw","compactActions","a_1","a","keepInlineWhenCompact","leadingInline","leadingCollapsed","_temp3","a_3","trailingInline","trailingCollapsed","_temp4","Symbol","for","renderTopBarAction","action","customTrigger","id","button","onClick","label","active","icon","clickContent","fullRow","hoverContent","navRef","maxVisible","setMaxVisible","length","navEl","current","recompute","width","total","fit","Math","max","floor","clientWidth","observer","ResizeObserver","entries","entry","contentRect","observe","disconnect","hiddenHasActive","hiddenItems","visibleItems","some","_temp6","entry_0","groupItems","useDropdown","target","isActive","_temp7","badgeSource","find","_temp8","badge","hasBadge","badgeIsNumeric","innerIcon","triggerClass","activeUnderline","button_0","href","slug","e_0","e","metaKey","ctrlKey","shiftKey","altKey","preventDefault","moreLabel","t16","action_0","dividerAfter","t17","flatMap","t18","navUseSidebar","t19","t20","action_1","t21","t22","_temp9","type","const","isDark","_temp0","t23","initials","t24","logout","t25","t26","a_6","a_5","i_1","i","i_0","_temp5","a_4","a_2","a_0","placement","TopBarGroupDropdown","open","setOpen","child","childActive","childHasBadge","rowClass","rowInner","shortRow","_temp1","TopBarOverflowMenu","hasActive","OverflowFlyoutRow","onSelect","onClose","inner","CompactEntry","CompactActionsMenu","CompactActionRow","CompactNestedRow","React","Fragment","cn","Popover","PopoverAnchor","PopoverContent","PopoverTrigger","Partner","id","name","color","mark","ReactNode","tagline","category","kind","href","tintColor","hex","ratio","c","replace","r","parseInt","substring","g","b","mix","x","Math","round","svgMark","paths","opts","strokeWidth","PartnerTileProps","HTMLAttributes","HTMLSpanElement","partner","size","solid","radius","ringColor","PartnerTile","t0","$","_c","className","props","style","t1","t2","title","undefined","t3","t4","bg","fg","t5","borderWidth","borderStyle","borderColor","ringStyle","t6","t7","t8","width","height","borderRadius","background","t9","t10","Symbol","for","t11","t12","PartnerClusterProps","HTMLDivElement","partners","maxVisible","label","tileSize","chipBorderColor","popoverContent","popoverSide","popoverAlign","popoverSideOffset","locale","PartnerCluster","overflowChip","t13","visible","slice","overflow","max","length","t14","overflowRadius","overflowTitle","t15","t16","p","i","overlap","map","clusterBody","t17","t18","t19","cn","Partner","PartnerTile","PopoverClose","EcosystemMegaPanelProps","partners","title","subtitle","connectedLabel","seeAllLabel","seeAllHref","onSeeAllClick","onPartnerClick","partner","showKindTag","locale","className","PanelStrings","connected","n","seeAll","ours","STRINGS","Record","fr","en","EcosystemMegaPanel","t0","$","_c","t1","t2","undefined","s","t3","seeAllNode","t4","t5","t6","t7","t8","t9","t10","p","id","href","tagline","name","kind","map","t11","length","t12","ReactNode","cn","PopoverClose","UserMenuItem","id","label","icon","onClick","href","tone","dividerBefore","disabled","UserMenuProps","items","className","UserMenu","t0","$","_c","t1","t2","map","_temp","t3","item","isDanger","rowClass","inner","row","LayoutGrid","ReactNode","cn","LayoutSwitcherProps","value","onClick","variant","title","label","className","LayoutSwitcher","t0","$","_c","t1","t2","undefined","accessibleTitle","visibleLabel","t3","t4","Symbol","for","t5","t6","t7","LayoutBadge","LayoutNumberIcon","Pin","PinOff","Puzzle","useEffect","useState","ReactNode","cn","ShellAction","HoverCard","HoverCardContent","HoverCardTrigger","PopoverClose","DEFAULT_STORAGE_KEY","UseActionsMenuOptions","actions","storageKey","defaultPinned","menuLabel","menuPlacement","menuDividerAfter","menuIcon","menuId","pinLabel","unpinLabel","UseActionsMenuReturn","visibleActions","pinnedIds","Set","togglePin","id","readStoredPinned","key","fallback","window","raw","localStorage","getItem","arr","JSON","parse","Array","isArray","filter","x","useActionsMenu","t0","$","_c","t1","t2","t3","t4","t5","t6","undefined","t7","map","_temp","t8","setPinnedIds","t10","t9","setItem","stringify","t11","Symbol","for","prev","next","has","delete","add","t12","t13","a_0","a","pinnedActions","t14","t15","t16","label","icon","placement","dividerAfter","clickContent","menuAction","ActionsMenuPanelProps","onTogglePin","title","className","ActionsMenuPanel","action","pinned","togglePinTitle","rowInner","rowTitle","hoverContent","baseRow","onClick","row","Radio","ReactNode","cn","RealtimeStatus","RealtimePulseStrings","connected","connecting","error","closed","offline","lastUpdate","DEFAULT_REALTIME_STRINGS_FR","DEFAULT_REALTIME_STRINGS_EN","ICON_TONE","Record","DOT_TONE","RealtimePulseIcon","t0","$","_c","status","className","t1","t2","t3","Symbol","for","t4","RealtimePulseHoverContent","strings","undefined","dotColor","t5","t6","t7","t8"],"sources":["../src/lib/utils.ts","../src/components/button.tsx","../src/components/hover-card.tsx","../src/components/popover.tsx","../src/components/tooltip.tsx","../src/i18n.ts","../src/lib/popover-offsets.ts","../src/lib/use-media-query.ts","../src/lib/sidebar-layout-context.tsx","../src/types.ts","../src/sidebar.tsx","../src/shell.tsx","../src/components/partner-cluster.tsx","../src/components/ecosystem-mega-panel.tsx","../src/components/user-menu.tsx","../src/components/layout-switcher.tsx","../src/components/actions-menu.tsx","../src/components/realtime-pulse.tsx"],"sourcesContent":["import { clsx, type ClassValue } from 'clsx';\nimport { twMerge } from 'tailwind-merge';\n\nexport function cn(...inputs: ClassValue[]) {\n return twMerge(clsx(inputs));\n}\n","/* eslint-disable react-refresh/only-export-components -- Exports CVA variants intentionally (shadcn/ui pattern) */\nimport * as React from 'react';\nimport { cva, type VariantProps } from 'class-variance-authority';\nimport { Slot } from 'radix-ui';\n\nimport { cn } from '../lib/utils';\n\n/**\n * Button — shadcn/ui Button installed via `npx shadcn@latest add button`,\n * customized with the s3pweb design-system values (rounded-sm, font-semibold,\n * 38px icon size, brand-tuned ghost hover) so the shell's top-bar / footer\n * buttons render identically to the live SaaS shell.\n */\nconst buttonVariants = cva(\n \"inline-flex items-center justify-center gap-2 whitespace-nowrap rounded-sm text-sm font-semibold transition-colors disabled:pointer-events-none disabled:opacity-45 [&_svg]:pointer-events-none [&_svg:not([class*='size-'])]:size-4 shrink-0 [&_svg]:shrink-0 outline-none focus-visible:outline-2 focus-visible:outline-cta focus-visible:outline-offset-2 aria-invalid:outline-destructive\",\n {\n variants: {\n variant: {\n default: 'bg-primary text-primary-foreground hover:bg-primary/90',\n destructive: 'bg-destructive text-destructive-foreground hover:bg-destructive/90',\n outline: 'border border-input bg-background text-foreground hover:bg-primary hover:text-primary-foreground',\n secondary: 'bg-secondary text-secondary-foreground hover:bg-cta hover:text-cta-foreground',\n ghost: 'bg-transparent text-foreground hover:bg-secondary hover:text-secondary-foreground dark:hover:bg-primary dark:hover:text-primary-foreground',\n link: 'text-primary underline underline-offset-4 hover:underline',\n },\n size: {\n 'default': 'h-[38px] px-[18px]',\n 'xs': \"h-[26px] gap-1 px-[9px] text-[11px] has-[>svg]:px-2 [&_svg:not([class*='size-'])]:size-3\",\n 'sm': 'h-8 gap-1.5 px-[13px] text-xs',\n 'lg': 'h-11 px-[22px] text-sm',\n 'icon': 'size-[38px] px-0',\n 'icon-xs': \"size-[26px] [&_svg:not([class*='size-'])]:size-3\",\n 'icon-sm': 'size-8 px-0',\n 'icon-lg': 'size-11 px-0',\n },\n },\n defaultVariants: {\n variant: 'default',\n size: 'default',\n },\n },\n);\n\nfunction Button({\n className,\n variant = 'default',\n size = 'default',\n asChild = false,\n ...props\n}: React.ComponentProps<'button'> &\n VariantProps<typeof buttonVariants> & {\n asChild?: boolean;\n }) {\n const Comp = asChild ? Slot.Root : 'button';\n\n return <Comp data-slot=\"button\" data-variant={variant} data-size={size} className={cn(buttonVariants({ variant, size, className }))} {...props} />;\n}\n\nexport { Button, buttonVariants };\n","import * as React from 'react';\nimport { HoverCard as HoverCardPrimitive } from 'radix-ui';\n\nimport { cn } from '../lib/utils';\n\n/**\n * HoverCard — shadcn-style wrapper around Radix HoverCard, mirroring the\n * brand-themed Tooltip in `./tooltip.tsx`. Use it for any rich-content popup\n * that should open on hover (e.g. a partners list, user-profile preview,\n * avatar tooltip with metadata). When you need keyboard-equivalent click\n * semantics or a focus-trapped menu, reach for DropdownMenu instead.\n *\n * Defaults: openDelay 200ms / closeDelay 100ms — felt right against the\n * existing Tooltip's instant open. Override per-instance when needed.\n */\n\nfunction HoverCard({ openDelay = 200, closeDelay = 100, ...props }: React.ComponentProps<typeof HoverCardPrimitive.Root>) {\n return <HoverCardPrimitive.Root data-slot=\"hover-card\" openDelay={openDelay} closeDelay={closeDelay} {...props} />;\n}\n\nfunction HoverCardTrigger({ ...props }: React.ComponentProps<typeof HoverCardPrimitive.Trigger>) {\n return <HoverCardPrimitive.Trigger data-slot=\"hover-card-trigger\" {...props} />;\n}\n\nfunction HoverCardContent({ className, align = 'center', sideOffset = 6, children, ...props }: React.ComponentProps<typeof HoverCardPrimitive.Content>) {\n return (\n <HoverCardPrimitive.Portal>\n <HoverCardPrimitive.Content\n data-slot=\"hover-card-content\"\n align={align}\n sideOffset={sideOffset}\n className={cn(\n 'z-50 w-64 origin-(--radix-hover-card-content-transform-origin) animate-in overflow-hidden rounded-md border bg-popover text-popover-foreground shadow-md outline-none fade-in-0 zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95',\n className,\n )}\n {...props}\n >\n {children}\n </HoverCardPrimitive.Content>\n </HoverCardPrimitive.Portal>\n );\n}\n\nexport { HoverCard, HoverCardTrigger, HoverCardContent };\n","import * as React from 'react';\nimport { Popover as PopoverPrimitive } from 'radix-ui';\n\nimport { cn } from '../lib/utils';\n\n/**\n * Popover — shadcn-style wrapper around Radix Popover, mirroring the\n * brand-themed Tooltip + HoverCard primitives. Use it for click-triggered\n * rich-content popups (vs. HoverCard's hover semantics).\n */\n\nfunction Popover({ ...props }: React.ComponentProps<typeof PopoverPrimitive.Root>) {\n return <PopoverPrimitive.Root data-slot=\"popover\" {...props} />;\n}\n\nfunction PopoverTrigger({ ...props }: React.ComponentProps<typeof PopoverPrimitive.Trigger>) {\n return <PopoverPrimitive.Trigger data-slot=\"popover-trigger\" {...props} />;\n}\n\n/**\n * Use to decouple the popover's positioning anchor from its click trigger.\n * Typical case: a row of items where ONE small button opens the popover, but\n * the popover should anchor to the whole row so it doesn't move when the\n * trigger's `transform` changes on hover.\n */\nfunction PopoverAnchor({ ...props }: React.ComponentProps<typeof PopoverPrimitive.Anchor>) {\n return <PopoverPrimitive.Anchor data-slot=\"popover-anchor\" {...props} />;\n}\n\n/**\n * Wraps a child element so clicking it closes the popover (Radix forwards the\n * click + close to the underlying element via `asChild`). Use to make\n * panel-internal links / buttons dismiss the popover before navigating.\n */\nfunction PopoverClose({ ...props }: React.ComponentProps<typeof PopoverPrimitive.Close>) {\n return <PopoverPrimitive.Close data-slot=\"popover-close\" {...props} />;\n}\n\nfunction PopoverContent({ className, align = 'center', sideOffset = 6, children, ...props }: React.ComponentProps<typeof PopoverPrimitive.Content>) {\n return (\n <PopoverPrimitive.Portal>\n <PopoverPrimitive.Content\n data-slot=\"popover-content\"\n align={align}\n sideOffset={sideOffset}\n className={cn(\n // Default width is `w-auto` — the inner content drives the size.\n // Pass `className='w-72'` (or whatever) on the consumer side when you\n // want a fixed shape, mirroring the HoverCardContent ergonomics.\n 'z-50 w-auto origin-(--radix-popover-content-transform-origin) animate-in overflow-hidden rounded-md border bg-popover text-popover-foreground shadow-md outline-none fade-in-0 zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95',\n className,\n )}\n {...props}\n >\n {children}\n </PopoverPrimitive.Content>\n </PopoverPrimitive.Portal>\n );\n}\n\nexport { Popover, PopoverTrigger, PopoverAnchor, PopoverClose, PopoverContent };\n","import * as React from 'react';\nimport { Tooltip as TooltipPrimitive } from 'radix-ui';\n\nimport { cn } from '../lib/utils';\n\n/**\n * Tooltip — shadcn/ui (added via `npx shadcn@latest add tooltip`),\n * customized for the s3pweb shell to match the SaaS app's tooltip:\n * - light popover surface (bg-popover / text-popover-foreground / border)\n * instead of shadcn's default dark inverted tooltip\n * - no arrow\n */\n\nfunction TooltipProvider({ delayDuration = 0, ...props }: React.ComponentProps<typeof TooltipPrimitive.Provider>) {\n return <TooltipPrimitive.Provider data-slot=\"tooltip-provider\" delayDuration={delayDuration} {...props} />;\n}\n\nfunction Tooltip({ ...props }: React.ComponentProps<typeof TooltipPrimitive.Root>) {\n return (\n <TooltipProvider>\n <TooltipPrimitive.Root data-slot=\"tooltip\" {...props} />\n </TooltipProvider>\n );\n}\n\nfunction TooltipTrigger({ ...props }: React.ComponentProps<typeof TooltipPrimitive.Trigger>) {\n return <TooltipPrimitive.Trigger data-slot=\"tooltip-trigger\" {...props} />;\n}\n\nfunction TooltipContent({ className, sideOffset = 0, children, ...props }: React.ComponentProps<typeof TooltipPrimitive.Content>) {\n return (\n <TooltipPrimitive.Portal>\n <TooltipPrimitive.Content\n data-slot=\"tooltip-content\"\n sideOffset={sideOffset}\n className={cn(\n 'z-50 w-fit origin-(--radix-tooltip-content-transform-origin) animate-in rounded-md border bg-popover px-3 py-1.5 text-xs text-balance text-popover-foreground shadow-md fade-in-0 zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95',\n className,\n )}\n {...props}\n >\n {children}\n </TooltipPrimitive.Content>\n </TooltipPrimitive.Portal>\n );\n}\n\nexport { Tooltip, TooltipTrigger, TooltipContent, TooltipProvider };\n","/**\n * Built-in translations for shell-ui's chrome (sidebar collapse, theme toggle,\n * nav-mode toggle, logout). Consumers pass a `locale` prop to <Shell> and the\n * component picks the right strings — no need to wire up an external i18n\n * library just to label four buttons.\n */\n\nexport type ShellLocale = 'fr' | 'en';\n\nexport interface ShellStrings {\n collapse: string;\n expand: string;\n logout: string;\n themeDarkMode: string;\n themeLightMode: string;\n navUseTop: string;\n navUseSidebar: string;\n moreLabel: string;\n}\n\nconst STRINGS: Record<ShellLocale, ShellStrings> = {\n fr: {\n collapse: 'Réduire le menu',\n expand: 'Étendre le menu',\n logout: 'Déconnexion',\n themeDarkMode: 'Mode sombre',\n themeLightMode: 'Mode clair',\n navUseTop: 'Navigation en haut',\n navUseSidebar: 'Navigation à gauche',\n moreLabel: 'Plus',\n },\n en: {\n collapse: 'Collapse menu',\n expand: 'Expand menu',\n logout: 'Log out',\n themeDarkMode: 'Dark mode',\n themeLightMode: 'Light mode',\n navUseTop: 'Top navigation',\n navUseSidebar: 'Sidebar navigation',\n moreLabel: 'More',\n },\n};\n\nexport function getShellStrings(locale: ShellLocale = 'fr'): ShellStrings {\n return STRINGS[locale] ?? STRINGS.fr;\n}\n","/**\n * Single source of truth for every popover/tooltip `sideOffset` in shell-ui.\n *\n * The goal: regardless of the trigger element's actual size, every popover\n * lands the same visual distance past the row's edge (top-bar) or past the\n * sidebar's right edge (sidebar). Without these constants, each call site\n * tunes its own number and they drift apart as triggers get added or resized.\n *\n * If you find yourself hardcoding a `sideOffset` somewhere, add a new entry\n * here instead. Document what the trigger's geometry is so the value is\n * recomputable when the trigger changes.\n */\n\n/** Visual gap between any popover and the trigger's containing row / column edge. */\nexport const POPOVER_GAP = 8;\n\n/**\n * Top-bar popovers (open downward).\n *\n * The header row is 38 px tall (h-10 ghost icon Button). Triggers that fill\n * that height (38 px Button) need offset = `POPOVER_GAP`. Shorter triggers\n * (30 px nav buttons with `my-1`, 30 px partners chip centered in the row)\n * sit 4 px above the row's bottom, so they need offset = `POPOVER_GAP + 4`\n * to land at the same Y.\n */\nexport const TOPBAR_OFFSET = {\n /** Trigger fills the row vertically — 38 px ghost icon Button. */\n fullRow: POPOVER_GAP, // = 8\n /** Trigger is shorter than the row — 30 px nav button or partners chip. */\n shortRow: POPOVER_GAP + 4, // = 12\n} as const;\n\n/**\n * Sidebar popovers (open to the right).\n *\n * Geometry math (collapsed sidebar = 64 px wide):\n * - Nav-group / nav-item button: `w-full` inside the nav's `p-2`\n * → right edge at `64 - 8 = 56` (no scrollbar) or `64 - 8 - scrollbarWidth`\n * (with scrollbar). The `navGroup` constant assumes no scrollbar; for\n * dynamic compensation use `useSidebarScrollbarWidth()` and add the\n * measured width.\n * - Footer ActionButton (collapsed): 32×32 centered inside the footer's\n * `p-2` → right edge at `8 + (48 - 32) / 2 + 32 = 48`.\n * - User-section avatar: has its own `p-1` padding inside `p-2`, so the\n * visible avatar circle is further left — needs a much higher offset.\n *\n * All values land the popover at `sidebar_right + POPOVER_GAP` = 72.\n */\nexport const SIDEBAR_OFFSET = {\n /** Nav-group / nav-item button — collapsed sidebar fly-out. */\n navGroup: 16,\n /** Footer ActionButton — expanded mode (full-width row, right at sidebar_right − 8). */\n actionExpanded: 16,\n /** Footer ActionButton — collapsed mode (centered 32 px button). */\n actionCollapsed: 24,\n /** User-section avatar — expanded mode (full-width row with inner p-1). */\n userExpanded: 48,\n /** User-section avatar — collapsed mode. */\n userCollapsed: 20,\n} as const;\n","import { useSyncExternalStore } from 'react';\n\n/**\n * Subscribe to a CSS media query. Returns `true` when the query matches.\n *\n * Uses `useSyncExternalStore` to bridge `MediaQueryList` to React's\n * concurrent-render-safe subscription model — no `setState` inside `useEffect`\n * and no extra render on mount.\n *\n * SSR-safe: the server snapshot returns `false`.\n */\nexport function useMediaQuery(query: string): boolean {\n return useSyncExternalStore(\n callback => {\n if (typeof window === 'undefined' || typeof window.matchMedia !== 'function') return () => {};\n const mql = window.matchMedia(query);\n mql.addEventListener('change', callback);\n return () => mql.removeEventListener('change', callback);\n },\n () => (typeof window === 'undefined' || typeof window.matchMedia !== 'function' ? false : window.matchMedia(query).matches),\n () => false,\n );\n}\n","/* eslint-disable react-refresh/only-export-components -- the hook is the\n primary public API of this module; splitting the Provider into its own\n file would force consumers to import two paths for one concept. Fast\n refresh impact is negligible (file changes rarely). */\nimport { createContext, useContext } from 'react';\n\n/**\n * SidebarLayoutContext — provides live layout measurements from the Sidebar\n * to its descendants. Currently exposes the nav scroll container's vertical\n * scrollbar width so collapsed-mode flyouts can compensate their `sideOffset`\n * and stay anchored at the sidebar's right edge regardless of scrollbar\n * presence.\n */\nexport interface SidebarLayout {\n /** 0 when no scrollbar; ~6–17 px depending on OS / theme when present. */\n scrollbarWidth: number;\n}\n\nconst SidebarLayoutCtx = createContext<SidebarLayout>({ scrollbarWidth: 0 });\n\nexport const SidebarLayoutProvider = SidebarLayoutCtx.Provider;\n\nexport function useSidebarLayout(): SidebarLayout {\n return useContext(SidebarLayoutCtx);\n}\n","import type { ReactNode } from 'react';\n\nexport interface NavItem {\n id: string;\n label: string;\n icon?: ReactNode;\n active?: boolean;\n badge?: ReactNode;\n /**\n * When set, the item renders as an `<a href>` instead of a `<button>` so\n * native browser semantics work (right-click → Open in new tab, middle-click,\n * keyboard navigation as a link). The default `onClick` still calls\n * `onItemSelect` with `event.preventDefault()` on plain left-click so SPA\n * routers stay in control. Modifier keys (cmd/ctrl/shift/middle button) are\n * allowed through to the browser.\n */\n href?: string;\n /** Free-form payload — passed back to onItemSelect (handy for routing metadata). */\n meta?: unknown;\n /**\n * Theme hook — rendered as `data-shell-ui-nav-slug` on the item's root.\n * Defaults to `id` when omitted. Override only when you need a CSS-friendly\n * theme key that's different from your `id` (e.g. when `id` is a UUID or\n * a route path that doesn't make a stable CSS selector).\n */\n slug?: string;\n}\n\nexport interface NavGroup {\n id: string;\n label: string;\n icon?: ReactNode;\n items: NavItem[];\n active?: boolean;\n expanded?: boolean;\n /**\n * Theme hook — rendered as `data-shell-ui-nav-slug` on the group's root.\n * Defaults to `id` when omitted. Brand themes use it to apply per-module\n * decoration (e.g. coloured icon chips in the s3pweb theme).\n */\n slug?: string;\n}\n\nexport type NavEntry = NavItem | NavGroup;\n\nexport function isNavGroup(entry: NavEntry): entry is NavGroup {\n return 'items' in entry;\n}\n\n/**\n * Action button rendered alongside the built-in theme / nav-mode / logout\n * controls (sidebar footer cluster + top-bar right cluster). Use for things\n * like fullscreen, mobile-mode, density toggles, etc. — Shell paints them\n * with the same look as the built-in toggles in both layouts.\n *\n * When `hoverContent` is provided, the action button becomes a HoverCard\n * trigger and `hoverContent` is rendered in the popover on hover (e.g. a\n * partners list, user-profile preview). `onClick` is optional in that case\n * — hover-only actions don't need a click handler.\n */\nexport interface ShellAction {\n id: string;\n label: string;\n icon: ReactNode;\n onClick?: () => void;\n /** Toggle-button-style active state — applies a subtle highlight when true. */\n active?: boolean;\n /**\n * When set, the trigger opens a **HoverCard** with this content on hover.\n * Shell handles placement automatically: opens downward in the top-bar,\n * sideways in the sidebar footer. Mutually exclusive with `clickContent`\n * — pick the trigger semantics, not both.\n */\n hoverContent?: ReactNode;\n /**\n * When set, the trigger opens a **Popover** with this content on click\n * (focus-trapping, stays open until dismissed). Use this when the\n * popover holds interactive controls (buttons, links, forms) — hover\n * dismissal would be too fragile for that case.\n */\n clickContent?: ReactNode;\n /**\n * Override the default icon-button rendering with a self-contained widget\n * (e.g. a `<PartnerCluster>` that owns its own popover, a status panel,\n * an avatar with menu).\n *\n * - **Top-bar mode**: rendered AS-IS, regardless of width.\n * - **Sidebar mode (expanded)**: rendered AS-IS — falls back to\n * `customTrigger` when `customSidebarTrigger` is not set. The widget\n * should fit the sidebar width (~256px).\n * - **Sidebar mode (collapsed, ~32px)**: fallback to the standard icon\n * button + `hoverContent` / `clickContent` wrap, since the custom\n * widget likely won't fit. Make sure to set a reasonable `icon` and\n * pair the action with `clickContent` for the collapsed popup.\n *\n * When `customTrigger` renders, `hoverContent` and `clickContent` are\n * NOT wrapped around it — the widget owns its own popup wiring.\n */\n customTrigger?: ReactNode;\n /**\n * Sidebar-expanded override for `customTrigger`. Use when the widget\n * needs different layout / popover positioning in the sidebar than in\n * the top-bar (e.g. label visible, popover side='right'). When omitted,\n * sidebar-expanded falls back to `customTrigger`.\n */\n customSidebarTrigger?: ReactNode;\n /**\n * Where the action renders relative to the built-in cluster:\n * - 'leading' — before the nav-mode toggle (or top of footer in sidebar)\n * - 'trailing' (default) — after theme toggle, before user avatar\n * (or below built-in toggles in sidebar)\n * Within a placement bucket, actions render in array order.\n */\n placement?: 'leading' | 'trailing';\n /**\n * Draw a separator immediately after this action — a vertical 1px line\n * in the top-bar right cluster, a horizontal 1px line spanning the full\n * footer width in the sidebar. Handy for visually grouping an action\n * (e.g. an ecosystem cluster) apart from the rest.\n */\n dividerAfter?: boolean;\n /**\n * When the top-bar collapses its actions cluster (narrow viewport), this\n * action stays inline instead of moving into the \"…\" overflow popover.\n * Use for widgets whose `customTrigger` is already responsive on its own\n * (e.g. a partners cluster that swaps to a \"+N\" chip via its own internal\n * media query). Default false — every action collapses.\n */\n keepInlineWhenCompact?: boolean;\n}\n","import clsx from 'clsx';\nimport { ChevronDown, ChevronLeft, ChevronRight, LogOut, Moon, MoreHorizontal, PanelLeft, PanelTop, Sun } from 'lucide-react';\nimport { useEffect, useRef, useState, type ReactNode } from 'react';\nimport { HoverCard, HoverCardContent, HoverCardTrigger } from './components/hover-card';\nimport { Popover, PopoverContent, PopoverTrigger } from './components/popover';\nimport { Tooltip, TooltipContent, TooltipTrigger } from './components/tooltip';\nimport { getShellStrings, type ShellLocale, type ShellStrings } from './i18n';\nimport { SIDEBAR_OFFSET } from './lib/popover-offsets';\nimport { SidebarLayoutProvider, useSidebarLayout, type SidebarLayout } from './lib/sidebar-layout-context';\nimport { useMediaQuery } from './lib/use-media-query';\nimport { cn } from './lib/utils';\nimport type { NavEntry, NavGroup, NavItem, ShellAction } from './types';\nimport { isNavGroup } from './types';\n\n/* ============================================================================\n Public types\n ============================================================================ */\n\nexport interface SidebarUser {\n /** Display name (e.g. \"Addwyn Lelann\"). */\n name: string;\n /** Secondary line shown under the name (e.g. an email or role). */\n subtitle?: string;\n /** Initials shown in the avatar; defaults to first letter of the first two words of `name`. */\n initials?: string;\n}\n\n/**\n * Render-prop for wrapping a leaf item or group button in a tooltip when the\n * sidebar is collapsed. Omit to fall back to the native `title` attribute.\n */\nexport type RenderCollapsedTooltip = (props: { trigger: ReactNode; entry: NavEntry; isGroup: boolean; onItemSelect?: (item: NavItem, group?: NavGroup) => void }) => ReactNode;\n\nexport interface SidebarProps {\n /** Navigation entries to render. */\n items: NavEntry[];\n\n /** Collapsed state — controlled. Consumer owns this. */\n collapsed?: boolean;\n /** Called when the user clicks the collapse toggle. Consumer flips its own state. */\n onCollapseToggle?: () => void;\n\n /** Called when the user clicks a leaf nav item. Consumer wires this to its router. */\n onItemSelect?: (item: NavItem, group?: NavGroup) => void;\n /** Called when the user clicks a group header. Consumer flips group.expanded in its own state. */\n onGroupToggle?: (group: NavGroup) => void;\n\n /** Logo at the top of the sidebar. */\n logo?: ReactNode;\n /** Optional alternate logo shown when collapsed (smaller variant). */\n collapsedLogo?: ReactNode;\n /** Slot under the logo — typically an entity / structure picker. */\n topSlot?: ReactNode;\n\n /* ---- Built-in feature buttons (stateless: pass data + callback) ---- */\n\n /** When set, renders the built-in user section (avatar + name + subtitle + logout). */\n user?: SidebarUser;\n /** Called when the user clicks the logout button in the built-in user section. */\n onLogout?: () => void;\n\n /** Current theme. When `onThemeToggle` is provided, renders a Sun/Moon toggle button. */\n theme?: 'light' | 'dark';\n /** Called when the user clicks the theme toggle. */\n onThemeToggle?: () => void;\n\n /** Current navigation mode. When `onNavModeChange` is provided, renders a PanelLeft/PanelTop toggle. */\n navMode?: 'sidebar' | 'top';\n /** Called with the new mode when the user clicks the nav-mode toggle. */\n onNavModeChange?: (mode: 'sidebar' | 'top') => void;\n\n /* ---- Built-in button visibility (all default to true) ---- */\n\n /** Show the theme toggle when `onThemeToggle` is wired. Default: true. */\n enableThemeToggle?: boolean;\n /** Show the nav-mode toggle when `onNavModeChange` is wired. Default: true. */\n enableNavModeToggle?: boolean;\n /** Show the logout button when `onLogout` is wired. Default: true. */\n enableLogoutButton?: boolean;\n /**\n * Show the decorative `data-shell-ui-nav-has-children` ChevronRight on\n * collapsed nav groups. The expanded-sidebar accordion caret is NOT\n * gated by this flag — it always renders because it doubles as the\n * open/close indicator. Default: false.\n */\n showSubmenuIndicator?: boolean;\n /**\n * Collapse the footer into a single \"Plus\" / \"…\" popover row below\n * `max-height: 820px`. Default: true. Pass `false` to keep every footer\n * control inline regardless of viewport height.\n */\n enablePlusOverflow?: boolean;\n\n /** Extra action buttons rendered in the footer cluster (after theme/nav-mode, before user section). */\n actions?: ShellAction[];\n\n /** Locale for the built-in button labels (collapse / logout / theme / nav-mode). Default: `fr`. */\n locale?: ShellLocale;\n\n /* ---- Escape hatches (override the built-in renderers) ---- */\n\n /** Replace the entire built-in user section with custom content. */\n userSection?: ReactNode;\n /**\n * When set, wraps the avatar+name region in a click-Popover trigger\n * with this content. The region picks up cursor-pointer + ghost-button\n * hover styling. Doesn't apply when `userSection` is set (custom override).\n */\n userMenu?: ReactNode;\n /** Replace the entire built-in footer (theme + nav-mode + any custom extras) with custom content. */\n footer?: ReactNode;\n /** Extra elements rendered above the built-in theme/nav-mode toggles (e.g. brand-specific actions). */\n footerExtra?: ReactNode;\n\n /* ---- Misc ---- */\n\n /** Auto-scroll the active item into view on first render. Default: true. */\n scrollActiveIntoView?: boolean;\n\n /** Render-prop for tooltips on collapsed items / groups. */\n renderCollapsedTooltip?: RenderCollapsedTooltip;\n\n /** Extra classes applied to the root <aside>. */\n className?: string;\n}\n\n/**\n * Stateless sidebar with built-in feature buttons (user / theme / nav-mode).\n * The consumer owns:\n * - the router (active state is passed in via `item.active` / `group.active`)\n * - the collapsed / expanded / theme / nav-mode state (controlled props + callbacks)\n * - i18n (labels come in as props)\n *\n * Style: assumes Tailwind v4. Import `@s3pweb/shell-ui/preset.css` for neutral\n * defaults or `@s3pweb/shell-ui/themes/{s3pweb,aftral}.css` for a brand theme.\n */\nexport function Sidebar({\n items,\n collapsed: collapsedProp,\n onCollapseToggle,\n onItemSelect,\n onGroupToggle,\n logo,\n collapsedLogo,\n topSlot,\n user,\n onLogout,\n theme,\n onThemeToggle,\n navMode,\n onNavModeChange,\n enableThemeToggle = true,\n enableNavModeToggle = true,\n enableLogoutButton = true,\n showSubmenuIndicator = false,\n enablePlusOverflow = true,\n actions,\n locale = 'fr',\n userSection,\n userMenu,\n footer,\n footerExtra,\n scrollActiveIntoView = true,\n renderCollapsedTooltip,\n className,\n}: SidebarProps) {\n const strings = getShellStrings(locale);\n\n // `collapsed` is hybrid controlled/uncontrolled — consumers that need to\n // persist the state (e.g. Zustand) pass `collapsed` + `onCollapseToggle`;\n // anyone else (storybook, ad-hoc usage) lets the component manage it.\n const [internalCollapsed, setInternalCollapsed] = useState(false);\n const isCollapsedControlled = collapsedProp !== undefined;\n const collapsed = isCollapsedControlled ? collapsedProp : internalCollapsed;\n const handleCollapseToggle = () => {\n if (!isCollapsedControlled) setInternalCollapsed(c => !c);\n onCollapseToggle?.();\n };\n\n // Collapse the bulk of the footer into a \"…\" row below 820px tall, matching\n // the topbar's compact-actions pattern. Applies in both expanded and\n // collapsed modes — the trigger renders as a full-width row when expanded\n // and as a single icon button when collapsed. The brand can opt out via\n // `enablePlusOverflow={false}` to keep every footer control inline.\n const compactFooterRaw = useMediaQuery('(max-height: 820px)');\n const compactFooter = enablePlusOverflow && compactFooterRaw;\n\n const builtInFooter = footer ?? (\n <BuiltInFooter\n collapsed={collapsed}\n compact={compactFooter}\n strings={strings}\n theme={theme}\n onThemeToggle={enableThemeToggle ? onThemeToggle : undefined}\n navMode={navMode}\n onNavModeChange={enableNavModeToggle ? onNavModeChange : undefined}\n actions={actions}\n extra={footerExtra}\n />\n );\n\n const builtInUserSection =\n userSection ??\n (user ? (\n <BuiltInUserSection user={user} collapsed={collapsed} logoutLabel={strings.logout} onLogout={enableLogoutButton ? onLogout : undefined} userMenu={userMenu} />\n ) : undefined);\n\n // Measure the nav scroll container's vertical scrollbar so collapsed-mode\n // fly-outs can compensate their `sideOffset`. Without this the popover's\n // X position varies by ~12 px depending on whether the scrollbar is\n // currently rendered. The ResizeObserver fires its initial callback as\n // soon as it observes — no synchronous setState in the effect body.\n const scrollRef = useRef<HTMLDivElement>(null);\n const [scrollbarWidth, setScrollbarWidth] = useState(0);\n useEffect(() => {\n const el = scrollRef.current;\n if (!el) return;\n const update = () => setScrollbarWidth(el.offsetWidth - el.clientWidth);\n const ro = new ResizeObserver(update);\n ro.observe(el);\n const mo = new MutationObserver(update);\n mo.observe(el, { childList: true, subtree: true });\n return () => {\n ro.disconnect();\n mo.disconnect();\n };\n }, [collapsed]);\n const layout: SidebarLayout = { scrollbarWidth };\n\n return (\n <aside\n data-shell-ui-sidebar\n data-collapsed={collapsed || undefined}\n data-has-scrollbar={scrollbarWidth > 0 || undefined}\n className={cn('relative flex h-full flex-col overflow-visible border-r bg-background transition-[width] duration-200', collapsed ? 'w-16' : 'w-64', className)}\n >\n <button\n type=\"button\"\n onClick={handleCollapseToggle}\n className=\"absolute -right-3 top-1/2 z-10 flex h-6 w-6 -translate-y-1/2 cursor-pointer items-center justify-center rounded-full border bg-background text-foreground shadow-sm transition-colors hover:bg-accent\"\n title={collapsed ? strings.expand : strings.collapse}\n aria-label={collapsed ? strings.expand : strings.collapse}\n >\n {collapsed ? <ChevronRight className=\"h-3.5 w-3.5\" /> : <ChevronLeft className=\"h-3.5 w-3.5\" />}\n </button>\n\n {(logo || collapsedLogo) && (\n <div data-shell-ui-logo className={clsx('relative flex items-center justify-center border-b py-4', collapsed ? 'px-2' : 'px-4')}>\n {collapsed && collapsedLogo ? collapsedLogo : logo}\n </div>\n )}\n\n <SidebarLayoutProvider value={layout}>\n {topSlot}\n\n <div ref={scrollRef} className=\"min-h-0 flex-1 overflow-y-auto\">\n <SidebarItems\n items={items}\n collapsed={collapsed}\n onItemSelect={onItemSelect}\n onGroupToggle={onGroupToggle}\n scrollActiveIntoView={scrollActiveIntoView}\n renderCollapsedTooltip={renderCollapsedTooltip}\n showSubmenuIndicator={showSubmenuIndicator}\n />\n </div>\n\n {(builtInFooter || builtInUserSection) && (\n <div className=\"mt-auto space-y-1\">\n {builtInFooter && <div className=\"border-t p-2\">{builtInFooter}</div>}\n {builtInUserSection}\n </div>\n )}\n </SidebarLayoutProvider>\n </aside>\n );\n}\n\n/* ============================================================================\n Built-in footer (theme + nav-mode toggles + optional extras)\n ============================================================================ */\n\nconst GHOST_BTN =\n 'inline-flex cursor-pointer items-center gap-1.5 whitespace-nowrap rounded-sm font-semibold transition-colors ' +\n 'bg-transparent text-foreground hover:bg-secondary hover:text-secondary-foreground dark:hover:bg-primary dark:hover:text-primary-foreground';\n\nfunction BuiltInFooter({\n collapsed,\n compact = false,\n strings,\n theme,\n onThemeToggle,\n navMode,\n onNavModeChange,\n actions,\n extra,\n}: {\n collapsed: boolean;\n compact?: boolean;\n strings: ShellStrings;\n theme?: 'light' | 'dark';\n onThemeToggle?: () => void;\n navMode?: 'sidebar' | 'top';\n onNavModeChange?: (mode: 'sidebar' | 'top') => void;\n actions?: ShellAction[];\n extra?: ReactNode;\n}) {\n const hasNavMode = !!onNavModeChange;\n const hasTheme = !!onThemeToggle;\n const hasActions = !!actions && actions.length > 0;\n if (!hasNavMode && !hasTheme && !hasActions && !extra) return null;\n\n const leadingActions = actions?.filter(a => a.placement === 'leading') ?? [];\n const trailingActions = actions?.filter(a => a.placement !== 'leading') ?? [];\n // Compact mode collapses every action that isn't `keepInlineWhenCompact`\n // into a single \"…\" Popover row, mirroring the topbar's compact-actions\n // cluster. Applies in both modes — the trigger reshapes for collapsed.\n const compactActive = compact;\n const leadingInline = compactActive ? leadingActions.filter(a => a.keepInlineWhenCompact) : leadingActions;\n const leadingCollapsed = compactActive ? leadingActions.filter(a => !a.keepInlineWhenCompact) : [];\n const trailingInline = compactActive ? trailingActions.filter(a => a.keepInlineWhenCompact) : trailingActions;\n const trailingCollapsed = compactActive ? trailingActions.filter(a => !a.keepInlineWhenCompact) : [];\n const hasCompactEntries = compactActive && (leadingCollapsed.length > 0 || trailingCollapsed.length > 0 || hasNavMode || hasTheme);\n\n return (\n <div data-shell-ui-footer className={clsx('flex flex-col gap-1', collapsed && 'items-center')}>\n {extra && <div data-shell-ui-footer-extra>{extra}</div>}\n {leadingInline.flatMap(action => [\n <span key={action.id} className=\"animate-in fade-in-0 slide-in-from-bottom-1 duration-200\">\n <ActionButton action={action} collapsed={collapsed} />\n </span>,\n action.dividerAfter ? <div key={`${action.id}-div`} aria-hidden className=\"my-1 h-px w-full bg-border\" /> : null,\n ])}\n {!compactActive && hasNavMode && (\n <span className=\"animate-in fade-in-0 slide-in-from-bottom-1 duration-200\">\n <NavModeToggle collapsed={collapsed} navMode={navMode} onNavModeChange={onNavModeChange} strings={strings} />\n </span>\n )}\n {!compactActive && hasTheme && (\n <span className=\"animate-in fade-in-0 slide-in-from-bottom-1 duration-200\">\n <ThemeToggle collapsed={collapsed} theme={theme} onThemeToggle={onThemeToggle} strings={strings} />\n </span>\n )}\n {trailingInline.flatMap(action => [\n <span key={action.id} className=\"animate-in fade-in-0 slide-in-from-bottom-1 duration-200\">\n <ActionButton action={action} collapsed={collapsed} />\n </span>,\n action.dividerAfter ? <div key={`${action.id}-div`} aria-hidden className=\"my-1 h-px w-full bg-border\" /> : null,\n ])}\n {hasCompactEntries && (\n <span className=\"animate-in fade-in-0 slide-in-from-bottom-1 duration-200\">\n <CompactFooterMenu\n collapsed={collapsed}\n entries={[\n ...leadingCollapsed.map(a => ({ kind: 'action' as const, action: a })),\n ...(hasNavMode\n ? [\n {\n kind: 'navMode' as const,\n onClick: () => onNavModeChange?.(navMode === 'top' ? 'sidebar' : 'top'),\n label: navMode === 'top' ? strings.navUseSidebar : strings.navUseTop,\n },\n ]\n : []),\n ...(hasTheme\n ? [{ kind: 'theme' as const, onClick: () => onThemeToggle?.(), label: theme === 'dark' ? strings.themeLightMode : strings.themeDarkMode, isDark: theme === 'dark' }]\n : []),\n ...trailingCollapsed.map(a => ({ kind: 'action' as const, action: a })),\n ]}\n label={strings.moreLabel}\n />\n </span>\n )}\n </div>\n );\n}\n\nfunction ActionButton({ action, collapsed }: { action: ShellAction; collapsed: boolean }) {\n // When `customSidebarTrigger` (or `customTrigger` as a fallback) is set\n // AND the sidebar is expanded, render it as-is (self-contained widget).\n // When the sidebar is collapsed, the custom widget likely doesn't fit\n // in 32px — fall back to the standard icon button + hover/click wrap\n // so the action still works in collapsed mode.\n const sidebarCustom = action.customSidebarTrigger ?? action.customTrigger;\n if (sidebarCustom && !collapsed) {\n return <>{sidebarCustom}</>;\n }\n const button = (\n <button\n type=\"button\"\n onClick={action.onClick}\n data-shell-ui-footer-action\n data-shell-ui-action-id={action.id}\n data-active={action.active || undefined}\n className={clsx(\n GHOST_BTN,\n collapsed ? 'h-8 w-8 justify-center text-xs' : 'h-8 w-full justify-start px-3.25 text-xs',\n action.active && 'bg-secondary text-secondary-foreground',\n )}\n // The Radix popup IS the tooltip only when it opens on hover —\n // suppress the native `title` to avoid doubling up. `clickContent`\n // opens on click, so the native title is still needed for hover\n // (e.g. when the sidebar is collapsed and the icon button is the\n // only thing the user sees).\n title={action.label}\n aria-label={action.label}\n aria-pressed={action.active}\n >\n <span className={clsx('flex h-4 w-4 shrink-0 items-center justify-center [&_svg]:h-4 [&_svg]:w-4', !collapsed && 'mr-2')}>{action.icon}</span>\n {!collapsed && <span>{action.label}</span>}\n </button>\n );\n const sideOffset = collapsed ? SIDEBAR_OFFSET.actionCollapsed : SIDEBAR_OFFSET.actionExpanded;\n if (action.clickContent) {\n return (\n <Popover>\n <PopoverTrigger asChild>{button}</PopoverTrigger>\n <PopoverContent side=\"right\" align=\"end\" sideOffset={sideOffset} className=\"p-0\">\n {action.clickContent}\n </PopoverContent>\n </Popover>\n );\n }\n if (action.hoverContent) {\n return (\n <HoverCard>\n <HoverCardTrigger asChild>{button}</HoverCardTrigger>\n <HoverCardContent side=\"right\" align=\"end\" sideOffset={sideOffset} className=\"w-auto p-0\">\n {action.hoverContent}\n </HoverCardContent>\n </HoverCard>\n );\n }\n return button;\n}\n\nfunction NavModeToggle({\n collapsed,\n navMode,\n onNavModeChange,\n strings,\n}: {\n collapsed: boolean;\n navMode?: 'sidebar' | 'top';\n onNavModeChange?: (mode: 'sidebar' | 'top') => void;\n strings: ShellStrings;\n}) {\n const isTop = navMode === 'top';\n const label = isTop ? strings.navUseSidebar : strings.navUseTop;\n return (\n <button\n type=\"button\"\n onClick={() => onNavModeChange?.(isTop ? 'sidebar' : 'top')}\n className={clsx(GHOST_BTN, collapsed ? 'h-8 w-8 justify-center text-xs' : 'h-8 w-full justify-start px-3.25 text-xs')}\n title={label}\n aria-label={collapsed ? label : undefined}\n >\n <span className={clsx('flex h-4 w-4 shrink-0 items-center justify-center', !collapsed && 'mr-2')}>\n {isTop ? <PanelLeft className=\"h-4 w-4\" /> : <PanelTop className=\"h-4 w-4\" />}\n </span>\n {!collapsed && <span>{label}</span>}\n </button>\n );\n}\n\nfunction ThemeToggle({ collapsed, theme, onThemeToggle, strings }: { collapsed: boolean; theme?: 'light' | 'dark'; onThemeToggle?: () => void; strings: ShellStrings }) {\n const isDark = theme === 'dark';\n const label = isDark ? strings.themeLightMode : strings.themeDarkMode;\n return (\n <button\n type=\"button\"\n onClick={() => onThemeToggle?.()}\n className={clsx(GHOST_BTN, collapsed ? 'h-8 w-8 justify-center text-xs' : 'h-8 w-full justify-start px-3.25 text-xs')}\n title={label}\n aria-label={collapsed ? label : undefined}\n >\n <span className={clsx('flex h-4 w-4 shrink-0 items-center justify-center', !collapsed && 'mr-2')}>{isDark ? <Sun className=\"h-4 w-4\" /> : <Moon className=\"h-4 w-4\" />}</span>\n {!collapsed && <span>{label}</span>}\n </button>\n );\n}\n\n/* ============================================================================\n Built-in user section (avatar + name + subtitle + logout button)\n ============================================================================ */\n\nfunction defaultInitials(name: string): string {\n return name\n .split(/\\s+/)\n .filter(Boolean)\n .slice(0, 2)\n .map(w => w[0]?.toUpperCase() ?? '')\n .join('');\n}\n\nfunction BuiltInUserSection({\n user,\n collapsed,\n logoutLabel,\n onLogout,\n userMenu,\n}: {\n user: SidebarUser;\n collapsed: boolean;\n logoutLabel: string;\n onLogout?: () => void;\n userMenu?: ReactNode;\n}) {\n const initials = user.initials ?? defaultInitials(user.name);\n const avatarPlusName = (\n <>\n <div className=\"flex h-8 w-8 shrink-0 items-center justify-center rounded-full bg-muted text-xs font-semibold text-muted-foreground\">{initials}</div>\n {!collapsed && (\n <div className=\"min-w-0 flex-1 text-left\">\n <p className=\"truncate text-sm font-medium leading-none text-foreground\">{user.name}</p>\n {user.subtitle && <p className=\"mt-1 truncate text-xs leading-none text-muted-foreground\">{user.subtitle}</p>}\n </div>\n )}\n </>\n );\n\n const userButton = (\n <button\n type=\"button\"\n className={clsx(\n 'flex min-w-0 flex-1 cursor-pointer items-center gap-2 rounded-sm p-1 text-left transition-colors outline-none hover:bg-secondary hover:text-secondary-foreground focus-visible:ring-2 focus-visible:ring-ring',\n collapsed && 'flex-none',\n )}\n title={user.name}\n aria-label={user.name}\n >\n {avatarPlusName}\n </button>\n );\n\n const logoutButton = onLogout && (\n <button type=\"button\" onClick={onLogout} className={clsx(GHOST_BTN, 'h-8 w-8 shrink-0 justify-center text-sm')} title={logoutLabel} aria-label={logoutLabel}>\n <LogOut className=\"h-4 w-4\" />\n </button>\n );\n\n // When userMenu is wired, wrap the whole section root in a Popover and\n // anchor the popover to a hidden span at the section's right edge — so\n // the popover lands a uniform 8px past the sidebar's right edge in BOTH\n // expanded (avatar + name on the left, logout on the right) and\n // collapsed (avatar centered, logout stacked) layouts.\n if (userMenu) {\n // sideOffset is computed so the popover lands a uniform 8px past the\n // sidebar's right edge regardless of where the trigger button sits\n // within the section. The math: sideOffset = (sidebar_right -\n // button_right) + 8. Hardcoded for the two layouts we ship:\n // expanded: user button right ≈ 216 in 256px sidebar → 48\n // collapsed: user button right ≈ 52 in 64px sidebar → 20\n return (\n <Popover>\n <div className={clsx('flex items-center gap-1 border-t p-1', collapsed && 'flex-col')}>\n <PopoverTrigger asChild>{userButton}</PopoverTrigger>\n {logoutButton}\n </div>\n <PopoverContent side=\"right\" align=\"end\" sideOffset={collapsed ? SIDEBAR_OFFSET.userCollapsed : SIDEBAR_OFFSET.userExpanded} className=\"p-0\">\n {userMenu}\n </PopoverContent>\n </Popover>\n );\n }\n\n return (\n <div className={clsx('flex items-center gap-1 border-t p-1', collapsed && 'flex-col')}>\n <div className={clsx('flex min-w-0 flex-1 items-center gap-2 p-1', collapsed && 'flex-none')}>{avatarPlusName}</div>\n {logoutButton}\n </div>\n );\n}\n\n/* ============================================================================\n SidebarItems — just the <nav> (re-usable inside e.g. a mobile <Sheet>)\n ============================================================================ */\n\nexport interface SidebarItemsProps {\n items: NavEntry[];\n collapsed?: boolean;\n onItemSelect?: (item: NavItem, group?: NavGroup) => void;\n onGroupToggle?: (group: NavGroup) => void;\n scrollActiveIntoView?: boolean;\n renderCollapsedTooltip?: RenderCollapsedTooltip;\n /** Show the decorative chevron on collapsed groups. The accordion caret (expanded mode) is always shown. Default: false. */\n showSubmenuIndicator?: boolean;\n}\n\nexport function SidebarItems({\n items,\n collapsed = false,\n onItemSelect,\n onGroupToggle,\n scrollActiveIntoView = true,\n renderCollapsedTooltip,\n showSubmenuIndicator = false,\n}: SidebarItemsProps) {\n return (\n <nav className=\"flex flex-col gap-1 p-2\">\n {items.map(entry => {\n if (isNavGroup(entry)) {\n return (\n <SidebarNavGroup\n key={entry.id}\n group={entry}\n collapsed={collapsed}\n onToggle={onGroupToggle ? () => onGroupToggle(entry) : undefined}\n onItemSelect={onItemSelect}\n scrollActiveIntoView={scrollActiveIntoView}\n renderCollapsedTooltip={renderCollapsedTooltip}\n showSubmenuIndicator={showSubmenuIndicator}\n />\n );\n }\n return (\n <SidebarNavItem\n key={entry.id}\n item={entry}\n collapsed={collapsed}\n onClick={() => onItemSelect?.(entry)}\n scrollActiveIntoView={scrollActiveIntoView}\n renderCollapsedTooltip={renderCollapsedTooltip}\n />\n );\n })}\n </nav>\n );\n}\n\nfunction SidebarNavItem({\n item,\n collapsed,\n onClick,\n scrollActiveIntoView,\n renderCollapsedTooltip,\n}: {\n item: NavItem;\n collapsed: boolean;\n onClick: () => void;\n scrollActiveIntoView: boolean;\n renderCollapsedTooltip?: RenderCollapsedTooltip;\n}) {\n const ref = useRef<HTMLAnchorElement | HTMLButtonElement | null>(null);\n\n useEffect(() => {\n if (scrollActiveIntoView && item.active && ref.current) {\n ref.current.scrollIntoView({ block: 'nearest' });\n }\n }, [scrollActiveIntoView, item.active]);\n\n const sharedClass = clsx(\n 'relative flex w-full cursor-pointer items-center gap-3 rounded-md px-3 py-2 text-sm font-medium transition-colors',\n item.active ? 'bg-primary text-primary-foreground' : 'text-muted-foreground hover:bg-primary/10 hover:text-primary',\n collapsed && 'justify-center px-2',\n );\n // Always set the native `title` so truncated labels (the inner span uses\n // `truncate`) reveal their full text on hover. The only case we skip it is\n // when the consumer renders its own Radix tooltip for the collapsed icon —\n // a native title would double up on that.\n const sharedTitle = collapsed && renderCollapsedTooltip ? undefined : item.label;\n const sharedActive = item.active || undefined;\n\n const hasBadge = item.badge != null && item.badge !== false && item.badge !== '';\n const inner = (\n <>\n {item.icon && (\n <span data-shell-ui-nav-icon className=\"relative flex h-4 w-4 shrink-0 items-center justify-center [&_svg]:h-4 [&_svg]:w-4\">\n {item.icon}\n {/* Collapsed-sidebar dot indicator — surfaces \"there's a badge\"\n when the label (and its badge content) is hidden. */}\n {collapsed && hasBadge && (\n <span aria-hidden data-shell-ui-nav-badge-dot className=\"absolute -top-0.5 -right-0.5 h-2 w-2 rounded-full bg-red-500 ring-2 ring-background\" />\n )}\n </span>\n )}\n {!collapsed && <span className=\"flex-1 truncate text-left\">{item.label}</span>}\n {!collapsed && hasBadge && (\n <span data-shell-ui-nav-badge className=\"ml-auto inline-flex h-5 min-w-5 items-center justify-center rounded-full bg-red-500 px-1.5 text-[10px] font-bold text-white\">\n {item.badge}\n </span>\n )}\n </>\n );\n\n const trigger = item.href ? (\n <a\n ref={node => {\n ref.current = node;\n }}\n href={item.href}\n onClick={e => {\n if (e.metaKey || e.ctrlKey || e.shiftKey || e.altKey || e.button !== 0) return;\n e.preventDefault();\n onClick();\n }}\n data-shell-ui-nav-item\n data-shell-ui-nav-slug={item.slug ?? item.id}\n data-active={sharedActive}\n aria-current={item.active ? 'page' : undefined}\n className={sharedClass}\n title={sharedTitle}\n >\n {inner}\n </a>\n ) : (\n <button\n ref={node => {\n ref.current = node;\n }}\n type=\"button\"\n onClick={onClick}\n data-shell-ui-nav-item\n data-shell-ui-nav-slug={item.slug ?? item.id}\n data-active={sharedActive}\n className={sharedClass}\n title={sharedTitle}\n >\n {inner}\n </button>\n );\n\n if (collapsed && renderCollapsedTooltip) {\n return <>{renderCollapsedTooltip({ trigger, entry: item, isGroup: false })}</>;\n }\n return trigger;\n}\n\nfunction SidebarNavGroup({\n group,\n collapsed,\n onToggle,\n onItemSelect,\n scrollActiveIntoView,\n renderCollapsedTooltip,\n showSubmenuIndicator,\n}: {\n group: NavGroup;\n collapsed: boolean;\n onToggle?: () => void;\n onItemSelect?: (item: NavItem, group?: NavGroup) => void;\n scrollActiveIntoView: boolean;\n renderCollapsedTooltip?: RenderCollapsedTooltip;\n showSubmenuIndicator: boolean;\n}) {\n // Hybrid controlled/uncontrolled — if the consumer passes `group.expanded`,\n // they own the state. Otherwise we manage it locally and auto-open the\n // active group on first render so the user lands inside their current\n // section.\n const [internalExpanded, setInternalExpanded] = useState(() => !!group.active);\n const isExpandedControlled = group.expanded !== undefined;\n const expandedState = isExpandedControlled ? !!group.expanded : internalExpanded;\n const expanded = expandedState && !collapsed;\n\n const handleClick = () => {\n if (!isExpandedControlled) setInternalExpanded(e => !e);\n onToggle?.();\n };\n\n const trigger = (\n <button\n type=\"button\"\n onClick={handleClick}\n data-shell-ui-nav-group-button\n data-active={group.active || undefined}\n className={clsx(\n 'flex w-full cursor-pointer items-center gap-3 rounded-md px-3 py-2 text-sm font-medium transition-colors',\n group.active ? (collapsed ? 'bg-primary text-primary-foreground' : 'bg-primary/5 text-foreground') : 'text-muted-foreground hover:bg-primary/10 hover:text-primary',\n collapsed && 'relative justify-center px-2',\n )}\n aria-expanded={expanded || undefined}\n aria-haspopup={collapsed ? 'menu' : undefined}\n aria-label={collapsed ? group.label : undefined}\n // When collapsed, Radix Tooltip / fly-out renders the label — skip the\n // native title to avoid doubling up. When expanded, set the title so a\n // truncated label can be inspected on hover.\n title={collapsed ? undefined : group.label}\n >\n {group.icon && (\n <span data-shell-ui-nav-icon className=\"flex h-4 w-4 shrink-0 items-center justify-center [&_svg]:h-4 [&_svg]:w-4\">\n {group.icon}\n </span>\n )}\n {!collapsed && <span className=\"flex-1 truncate text-left\">{group.label}</span>}\n {/* Expanded accordion caret — always shown, signals open/close state. */}\n {!collapsed && <ChevronDown className={clsx('h-4 w-4 shrink-0 transition-transform duration-200', expanded && 'rotate-180')} />}\n {collapsed && showSubmenuIndicator && (\n <ChevronRight\n aria-hidden\n data-shell-ui-nav-has-children\n // No `text-` class — inherits the button's current color so the\n // chevron flips white on the active navy chip and stays grey on\n // the idle muted state. The s3pweb theme shifts `right` to `-3px`\n // when the sidebar has a scrollbar so the cue keeps the same\n // visual offset relative to the column's right edge.\n className=\"pointer-events-none absolute top-1/2 right-0 h-3 w-3 -translate-y-1/2 stroke-[2.5] opacity-70\"\n />\n )}\n </button>\n );\n\n // When the consumer supplies its own tooltip implementation, defer to it.\n if (collapsed && renderCollapsedTooltip) {\n const wrapped = renderCollapsedTooltip({ trigger, entry: group, isGroup: true, onItemSelect });\n return (\n <div data-shell-ui-nav-group data-shell-ui-nav-slug={group.slug ?? group.id}>\n {wrapped}\n </div>\n );\n }\n\n // Built-in fly-out menu for collapsed groups. Controlled so that clicking\n // a leaf inside the fly-out can dismiss the panel before routing — Radix\n // Tooltip's default close-on-blur fires too late and the menu stays open.\n if (collapsed) {\n return <CollapsedFlyout group={group} trigger={trigger} onItemSelect={onItemSelect} />;\n }\n\n // Expanded: inline sub-items below the group header, with a grid-rows\n // open/close animation. Children stay in the DOM regardless of state so\n // the transition is smooth.\n return (\n <div data-shell-ui-nav-group data-shell-ui-nav-slug={group.slug ?? group.id} data-expanded={expanded || undefined}>\n {trigger}\n <div className=\"grid transition-[grid-template-rows] duration-200 ease-out\" style={{ gridTemplateRows: expanded ? '1fr' : '0fr' }}>\n <div className=\"overflow-hidden\">\n <div data-shell-ui-nav-children className=\"relative mt-1 ml-5.5 flex flex-col gap-1 border-l border-border/40 pl-3\">\n {group.items.map(item => (\n <SidebarNavItem\n key={item.id}\n item={item}\n collapsed={false}\n onClick={() => onItemSelect?.(item, group)}\n scrollActiveIntoView={scrollActiveIntoView}\n renderCollapsedTooltip={renderCollapsedTooltip}\n />\n ))}\n </div>\n </div>\n </div>\n </div>\n );\n}\n\nfunction CollapsedFlyout({ group, trigger, onItemSelect }: { group: NavGroup; trigger: ReactNode; onItemSelect?: (item: NavItem, group?: NavGroup) => void }) {\n const [open, setOpen] = useState(false);\n const { scrollbarWidth } = useSidebarLayout();\n // Compensate the trigger's right-edge shift when the nav scroll container\n // shows a scrollbar — `navGroup` assumes no scrollbar; adding the measured\n // width keeps the popover pinned to `sidebar_right + POPOVER_GAP`.\n return (\n <div data-shell-ui-nav-group data-shell-ui-nav-slug={group.slug ?? group.id}>\n <Tooltip open={open} onOpenChange={setOpen}>\n <TooltipTrigger asChild>{trigger}</TooltipTrigger>\n <TooltipContent\n side=\"right\"\n sideOffset={SIDEBAR_OFFSET.navGroup + scrollbarWidth}\n collisionPadding={8}\n className=\"max-h-(--radix-tooltip-content-available-height) overflow-hidden p-0\"\n data-shell-ui-nav-flyout\n aria-label={group.label}\n >\n <div className=\"flex max-h-[inherit] flex-col\">\n <div className=\"shrink-0 border-b bg-popover px-3 py-2 text-sm font-semibold\">{group.label}</div>\n <div className=\"min-h-0 flex-1 overflow-y-auto py-1\">\n {group.items.map(item => (\n <a\n key={item.id}\n role=\"menuitem\"\n href={item.href ?? '#'}\n data-shell-ui-nav-flyout-item\n data-active={item.active || undefined}\n onClick={e => {\n if (e.metaKey || e.ctrlKey || e.shiftKey || e.altKey || e.button !== 0) return;\n e.preventDefault();\n onItemSelect?.(item, group);\n setOpen(false);\n }}\n className={clsx(\n 'flex w-full cursor-pointer items-center gap-2 px-3 py-2 text-sm transition-colors',\n item.active ? 'bg-primary text-primary-foreground' : 'text-muted-foreground hover:bg-primary/10 hover:text-primary',\n )}\n >\n {item.icon && <span className=\"flex h-4 w-4 shrink-0 items-center justify-center\">{item.icon}</span>}\n <span>{item.label}</span>\n </a>\n ))}\n </div>\n </div>\n </TooltipContent>\n </Tooltip>\n </div>\n );\n}\n\ntype CompactFooterEntry =\n | { kind: 'action'; action: ShellAction }\n | { kind: 'navMode'; onClick: () => void; label: string }\n | { kind: 'theme'; onClick: () => void; label: string; isDark: boolean };\n\n/**\n * Collapsed footer cluster — a single full-width row trigger + Popover that\n * lists every collapsed action + the built-in toggles. Mirrors the topbar\n * `CompactActionsMenu` styling so both surfaces feel consistent.\n */\nfunction CompactFooterMenu({ collapsed = false, entries, label }: { collapsed?: boolean; entries: CompactFooterEntry[]; label: string }) {\n const [open, setOpen] = useState(false);\n const close = () => setOpen(false);\n const sideOffset = collapsed ? SIDEBAR_OFFSET.actionCollapsed : SIDEBAR_OFFSET.actionExpanded;\n return (\n <Popover open={open} onOpenChange={setOpen}>\n <PopoverTrigger asChild>\n <button\n type=\"button\"\n data-shell-ui-footer-overflow\n className={clsx(GHOST_BTN, collapsed ? 'h-8 w-8 justify-center' : 'h-8 w-full justify-start px-3.25 text-xs')}\n aria-label={label}\n aria-haspopup=\"menu\"\n aria-expanded={open || undefined}\n title={label}\n >\n <span className={clsx('flex h-4 w-4 shrink-0 items-center justify-center', !collapsed && 'mr-2')}>\n <MoreHorizontal className=\"h-4 w-4\" />\n </span>\n {!collapsed && <span>{label}</span>}\n </button>\n </PopoverTrigger>\n <PopoverContent\n side=\"right\"\n align=\"end\"\n sideOffset={sideOffset}\n collisionPadding={8}\n className=\"max-h-(--radix-popover-content-available-height) overflow-hidden p-0\"\n data-shell-ui-nav-flyout\n aria-label={label}\n >\n <div className=\"flex max-h-[inherit] w-64 flex-col\">\n <div className=\"shrink-0 border-b bg-popover px-3 py-2 text-sm font-semibold\">{label}</div>\n <div className=\"min-h-0 flex-1 overflow-y-auto py-1\">\n {entries.map((entry, i) => {\n if (entry.kind === 'navMode') {\n return <CompactFooterRow key=\"__navmode__\" icon={<PanelLeft className=\"h-4 w-4\" />} label={entry.label} onClick={entry.onClick} onClose={close} />;\n }\n if (entry.kind === 'theme') {\n return (\n <CompactFooterRow\n key=\"__theme__\"\n icon={entry.isDark ? <Sun className=\"h-4 w-4\" /> : <Moon className=\"h-4 w-4\" />}\n label={entry.label}\n onClick={entry.onClick}\n onClose={close}\n />\n );\n }\n const a = entry.action;\n if (a.clickContent && !a.onClick) {\n return <CompactFooterNestedRow key={a.id ?? i} action={a} />;\n }\n return <CompactFooterRow key={a.id ?? i} icon={a.icon} label={a.label} onClick={a.onClick} active={a.active} hoverContent={a.hoverContent} onClose={close} />;\n })}\n </div>\n </div>\n </PopoverContent>\n </Popover>\n );\n}\n\nfunction CompactFooterRow({\n icon,\n label,\n onClick,\n active,\n hoverContent,\n onClose,\n}: {\n icon: ReactNode;\n label: string;\n onClick?: () => void;\n active?: boolean;\n hoverContent?: ReactNode;\n onClose: () => void;\n}) {\n const button = (\n <button\n type=\"button\"\n role=\"menuitem\"\n data-shell-ui-nav-flyout-item\n data-active={active || undefined}\n onClick={() => {\n onClick?.();\n onClose();\n }}\n className={clsx(\n 'flex w-full cursor-pointer items-center gap-2 px-3 py-2 text-sm transition-colors',\n active ? 'bg-primary text-primary-foreground' : 'text-muted-foreground hover:bg-primary/10 hover:text-primary',\n )}\n >\n <span className=\"flex h-4 w-4 shrink-0 items-center justify-center [&_svg]:h-4 [&_svg]:w-4\">{icon}</span>\n <span className=\"flex-1 truncate text-left\">{label}</span>\n </button>\n );\n if (!hoverContent) return button;\n return (\n <HoverCard openDelay={150} closeDelay={100}>\n <HoverCardTrigger asChild>{button}</HoverCardTrigger>\n <HoverCardContent\n side=\"right\"\n align=\"start\"\n // Trigger button uses `px-3` (12 px) inside the parent popover, plus\n // POPOVER_GAP = 8 → 20 px keeps a clean visible gap between surfaces.\n sideOffset={20}\n collisionPadding={8}\n className=\"w-auto p-0\"\n >\n {hoverContent}\n </HoverCardContent>\n </HoverCard>\n );\n}\n\nfunction CompactFooterNestedRow({ action }: { action: ShellAction }) {\n // Opens on hover; the parent Popover stays open independently so the user\n // can keep clicking pin/unpin (or any other in-content control) without\n // dismissing either surface.\n return (\n <HoverCard openDelay={120} closeDelay={150}>\n <HoverCardTrigger asChild>\n <button\n type=\"button\"\n role=\"menuitem\"\n data-shell-ui-nav-flyout-item\n aria-haspopup=\"menu\"\n className=\"flex w-full cursor-pointer items-center gap-2 px-3 py-2 text-sm text-muted-foreground transition-colors hover:bg-primary/10 hover:text-primary\"\n >\n <span className=\"flex h-4 w-4 shrink-0 items-center justify-center [&_svg]:h-4 [&_svg]:w-4\">{action.icon}</span>\n <span className=\"flex-1 truncate text-left\">{action.label}</span>\n <ChevronRight className=\"h-3 w-3 opacity-60\" />\n </button>\n </HoverCardTrigger>\n <HoverCardContent side=\"right\" align=\"start\" sideOffset={4} collisionPadding={8} className=\"max-h-(--radix-hover-card-content-available-height) overflow-hidden p-0\">\n {action.clickContent}\n </HoverCardContent>\n </HoverCard>\n );\n}\n","import { ChevronDown, ChevronRight, LogOut, Moon, MoreHorizontal, PanelLeft, Sun } from 'lucide-react';\nimport { Fragment, useEffect, useRef, useState, type ReactNode } from 'react';\nimport { Button } from './components/button';\nimport { HoverCard, HoverCardContent, HoverCardTrigger } from './components/hover-card';\nimport { Popover, PopoverContent, PopoverTrigger } from './components/popover';\nimport { Tooltip, TooltipContent, TooltipTrigger } from './components/tooltip';\nimport { getShellStrings, type ShellLocale, type ShellStrings } from './i18n';\nimport { TOPBAR_OFFSET } from './lib/popover-offsets';\nimport { useMediaQuery } from './lib/use-media-query';\nimport { cn } from './lib/utils';\nimport { Sidebar, type RenderCollapsedTooltip, type SidebarUser } from './sidebar';\nimport { isNavGroup, type NavEntry, type NavGroup, type NavItem, type ShellAction } from './types';\n\nexport interface ShellProps {\n /** Navigation entries (groups + leaf items). */\n items: NavEntry[];\n\n /* ---- Nav mode (hybrid controlled/uncontrolled) ---- */\n\n /** 'sidebar' renders a vertical aside on the left; 'top' renders a horizontal bar. */\n navMode?: 'sidebar' | 'top';\n /** Pass to control the mode externally — omit and Shell manages it locally. */\n onNavModeChange?: (mode: 'sidebar' | 'top') => void;\n\n /* ---- Sidebar-mode-specific (ignored when navMode='top') ---- */\n\n collapsed?: boolean;\n onCollapseToggle?: () => void;\n collapsedLogo?: ReactNode;\n topSlot?: ReactNode;\n scrollActiveIntoView?: boolean;\n renderCollapsedTooltip?: RenderCollapsedTooltip;\n footer?: ReactNode;\n footerExtra?: ReactNode;\n userSection?: ReactNode;\n\n /* ---- Common ---- */\n\n logo?: ReactNode;\n user?: SidebarUser;\n onLogout?: () => void;\n theme?: 'light' | 'dark';\n onThemeToggle?: () => void;\n /** Locale for built-in button labels. Default: `fr`. */\n locale?: ShellLocale;\n onItemSelect?: (item: NavItem, group?: NavGroup) => void;\n onGroupToggle?: (group: NavGroup) => void;\n\n /* ---- Built-in button visibility (all default to true) ---- */\n\n /** Show the theme toggle when `onThemeToggle` is wired. Default: true. */\n enableThemeToggle?: boolean;\n /** Show the nav-mode toggle when `onNavModeChange` is wired (or Shell manages it locally). Default: true. */\n enableNavModeToggle?: boolean;\n /** Show the logout button when `onLogout` is wired. Default: true. */\n enableLogoutButton?: boolean;\n /**\n * Show the decorative chevron that signals an icon-only nav entry has\n * sub-items — the collapsed-sidebar `ChevronRight` and the top-bar\n * `ChevronDown` cue. The expanded-sidebar accordion caret is NOT\n * gated by this flag; it always renders because it doubles as the\n * open/close state indicator. Default: false — opt in per-brand when\n * the visual hint is desired.\n */\n showSubmenuIndicator?: boolean;\n /**\n * Collapse overflowing top-bar nav items, compact-mode actions, and the\n * compact-mode sidebar footer into a single \"Plus\" / \"…\" popover when\n * space is tight. Default: true. Pass `false` for brands whose nav fits\n * the viewport at all sizes and prefer a flat chrome with no overflow\n * trigger.\n */\n enablePlusOverflow?: boolean;\n\n /** Extra action buttons rendered alongside the built-in cluster (e.g. fullscreen, mobile-mode). */\n actions?: ShellAction[];\n\n /**\n * Content rendered inside a click-Popover anchored to the user avatar /\n * name section. When set, that section becomes a ghost-button trigger\n * (cursor pointer, hover background). When omitted, the user section\n * stays non-interactive — matches the previous behaviour.\n *\n * The menu node itself is free-form JSX — typically a list of menu\n * items (profile, preferences, help, …). Wrap each row in\n * `<PopoverClose asChild>` so clicking dismisses the menu before\n * running the row's action.\n */\n userMenu?: ReactNode;\n\n /* ---- Layout ---- */\n\n /** Main content rendered next to the sidebar / under the top bar. */\n children?: ReactNode;\n /** Extra Tailwind classes on the root layout container. */\n className?: string;\n /** Tailwind classes for the main content wrapper. Default: `flex-1 overflow-auto`. */\n mainClassName?: string;\n /** Background class applied to the chrome surface — the `<aside>` in sidebar mode, the `<header>` in top mode. Overrides the defaults (bg-background / bg-sidebar). */\n bgClassName?: string;\n}\n\n/**\n * Stateless white-label shell that renders either a vertical sidebar or a\n * horizontal top-nav based on `navMode`. The active layout switch is internal,\n * so consumers don't need to compose Sidebar + a custom top-bar themselves.\n *\n * <Shell items={...} navMode='sidebar' user={...}>\n * <Outlet />\n * </Shell>\n */\nexport function Shell({\n items,\n navMode: navModeProp,\n onNavModeChange,\n collapsed,\n onCollapseToggle,\n collapsedLogo,\n topSlot,\n scrollActiveIntoView,\n renderCollapsedTooltip,\n footer,\n footerExtra,\n userSection,\n logo,\n user,\n onLogout,\n theme,\n onThemeToggle,\n locale = 'fr',\n onItemSelect,\n onGroupToggle,\n enableThemeToggle = true,\n enableNavModeToggle = true,\n enableLogoutButton = true,\n showSubmenuIndicator = false,\n enablePlusOverflow = true,\n actions,\n userMenu,\n children,\n className,\n mainClassName = 'flex-1 overflow-auto',\n bgClassName,\n}: ShellProps) {\n // Hybrid controlled/uncontrolled — consumers that persist navMode (e.g. in\n // Zustand) pass it in; others let Shell manage it locally.\n const [internalNavMode, setInternalNavMode] = useState<'sidebar' | 'top'>('sidebar');\n const isNavModeControlled = navModeProp !== undefined;\n const navMode = isNavModeControlled ? navModeProp : internalNavMode;\n const handleNavModeChange = (mode: 'sidebar' | 'top') => {\n if (!isNavModeControlled) setInternalNavMode(mode);\n onNavModeChange?.(mode);\n };\n\n // Pass the nav-mode toggle through to the Sidebar's built-in footer only\n // when the consumer wired up onNavModeChange OR we're managing it locally.\n const sidebarNavModeChange = isNavModeControlled ? (onNavModeChange ? handleNavModeChange : undefined) : handleNavModeChange;\n\n if (navMode === 'top') {\n return (\n <div className={cn('flex h-full flex-col', className)}>\n <ShellTopBar\n items={items}\n logo={logo}\n user={user}\n onLogout={enableLogoutButton ? onLogout : undefined}\n theme={theme}\n onThemeToggle={enableThemeToggle ? onThemeToggle : undefined}\n onNavModeChange={enableNavModeToggle ? handleNavModeChange : undefined}\n locale={locale}\n onItemSelect={onItemSelect}\n bgClassName={bgClassName}\n actions={actions}\n userMenu={userMenu}\n showSubmenuIndicator={showSubmenuIndicator}\n enablePlusOverflow={enablePlusOverflow}\n />\n {children && <div className={mainClassName}>{children}</div>}\n </div>\n );\n }\n\n return (\n <div className={cn('flex h-full', className)}>\n <Sidebar\n items={items}\n collapsed={collapsed}\n onCollapseToggle={onCollapseToggle}\n onItemSelect={onItemSelect}\n onGroupToggle={onGroupToggle}\n logo={logo}\n collapsedLogo={collapsedLogo}\n topSlot={topSlot}\n user={user}\n onLogout={onLogout}\n theme={theme}\n onThemeToggle={onThemeToggle}\n navMode={navMode}\n onNavModeChange={sidebarNavModeChange}\n enableThemeToggle={enableThemeToggle}\n enableNavModeToggle={enableNavModeToggle}\n enableLogoutButton={enableLogoutButton}\n actions={actions}\n userMenu={userMenu}\n locale={locale}\n userSection={userSection}\n footer={footer}\n footerExtra={footerExtra}\n scrollActiveIntoView={scrollActiveIntoView}\n renderCollapsedTooltip={renderCollapsedTooltip}\n showSubmenuIndicator={showSubmenuIndicator}\n enablePlusOverflow={enablePlusOverflow}\n className={bgClassName}\n />\n {children && <div className={mainClassName}>{children}</div>}\n </div>\n );\n}\n\n/* ============================================================================\n Top-bar — mirrors the SaaS shell's SectionHeader (full mode): logo on the\n left, icon-only nav buttons with tooltips in the middle, theme/nav-mode/\n user/logout on the right.\n ============================================================================ */\n\nfunction defaultInitials(name: string): string {\n return name\n .split(/\\s+/)\n .filter(Boolean)\n .slice(0, 2)\n .map(w => w[0]?.toUpperCase() ?? '')\n .join('');\n}\n\nfunction ShellTopBar({\n items,\n logo,\n user,\n onLogout,\n theme,\n onThemeToggle,\n onNavModeChange,\n locale,\n onItemSelect,\n bgClassName,\n actions,\n userMenu,\n showSubmenuIndicator,\n enablePlusOverflow,\n}: {\n items: NavEntry[];\n logo?: ReactNode;\n user?: SidebarUser;\n onLogout?: () => void;\n theme?: 'light' | 'dark';\n onThemeToggle?: () => void;\n onNavModeChange?: (mode: 'sidebar' | 'top') => void;\n locale: ShellLocale;\n onItemSelect?: (item: NavItem, group?: NavGroup) => void;\n bgClassName?: string;\n actions?: ShellAction[];\n userMenu?: ReactNode;\n showSubmenuIndicator: boolean;\n enablePlusOverflow: boolean;\n}) {\n const strings: ShellStrings = getShellStrings(locale);\n const themeLabel = theme === 'dark' ? strings.themeLightMode : strings.themeDarkMode;\n const leadingActions = actions?.filter(a => a.placement === 'leading') ?? [];\n const trailingActions = actions?.filter(a => a.placement !== 'leading') ?? [];\n // Below `lg` (1024 px) fold the right-cluster controls into a single \"…\"\n // popover so the chrome stays tidy. Each action opts into the popover by\n // default; setting `keepInlineWhenCompact: true` keeps it inline (use for\n // widgets whose customTrigger is already responsive — e.g. the partners\n // cluster collapses to \"+N\" via its own media query and shouldn't ALSO\n // surface in the popover). When `enablePlusOverflow` is false the brand\n // opted out of the collapse behaviour — keep every action inline.\n const compactActionsRaw = useMediaQuery('(max-width: 1023px)');\n const compactActions = enablePlusOverflow && compactActionsRaw;\n const leadingInline = leadingActions.filter(a => !compactActions || a.keepInlineWhenCompact);\n const leadingCollapsed = compactActions ? leadingActions.filter(a => !a.keepInlineWhenCompact) : [];\n const trailingInline = trailingActions.filter(a => !compactActions || a.keepInlineWhenCompact);\n const trailingCollapsed = compactActions ? trailingActions.filter(a => !a.keepInlineWhenCompact) : [];\n\n // Renders one action: when `customTrigger` is set, render it AS-IS\n // (self-contained widget — must own its own popover wiring if needed).\n // Otherwise render the default 38px icon Button, optionally wrapped in\n // HoverCard / Popover via `hoverContent` / `clickContent`.\n function renderTopBarAction(action: ShellAction): ReactNode {\n if (action.customTrigger) return <Fragment key={action.id}>{action.customTrigger}</Fragment>;\n const button = (\n <Button\n variant=\"ghost\"\n size=\"icon\"\n onClick={action.onClick}\n // The Radix popup IS the tooltip only for hover-content. clickContent\n // fires on click — the native title is still needed for hover.\n title={action.label}\n aria-label={action.label}\n aria-pressed={action.active}\n data-shell-ui-top-bar-action\n data-shell-ui-action-id={action.id}\n data-active={action.active || undefined}\n className={cn(action.active && 'bg-secondary text-secondary-foreground')}\n >\n <span className=\"flex h-4 w-4 shrink-0 items-center justify-center [&_svg]:h-4 [&_svg]:w-4\">{action.icon}</span>\n </Button>\n );\n if (action.clickContent) {\n return (\n <Popover key={action.id}>\n <PopoverTrigger asChild>{button}</PopoverTrigger>\n <PopoverContent side=\"bottom\" align=\"end\" sideOffset={TOPBAR_OFFSET.fullRow} className=\"p-0\">\n {action.clickContent}\n </PopoverContent>\n </Popover>\n );\n }\n if (action.hoverContent) {\n return (\n <HoverCard key={action.id}>\n <HoverCardTrigger asChild>{button}</HoverCardTrigger>\n <HoverCardContent side=\"bottom\" align=\"end\" sideOffset={TOPBAR_OFFSET.fullRow} className=\"w-auto p-0\">\n {action.hoverContent}\n </HoverCardContent>\n </HoverCard>\n );\n }\n return <Fragment key={action.id}>{button}</Fragment>;\n }\n\n // Responsive overflow: measure the nav's available width and decide how\n // many items fit. The rest collapse into a hover-triggered \"…\" menu styled\n // exactly like the collapsed-sidebar fly-out + the per-group dropdown.\n //\n // Each visible button is `w-20` (80px) and siblings are separated by `gap-2`\n // (8px). N items take `N*80 + (N-1)*8 = 88N − 8` px → `N = (W + 8) / 88`.\n //\n // When `enablePlusOverflow` is false the observer is skipped and every item\n // stays rendered — overflow falls through to the nav's own clipping.\n const navRef = useRef<HTMLElement>(null);\n const [maxVisible, setMaxVisible] = useState(items.length);\n useEffect(() => {\n if (!enablePlusOverflow) {\n setMaxVisible(items.length);\n return;\n }\n const navEl = navRef.current;\n if (!navEl) return;\n const ITEM_TOTAL = 88;\n const recompute = (width: number) => {\n const total = items.length;\n const fit = Math.max(1, Math.floor((width + 8) / ITEM_TOTAL));\n // Reserve one slot for the \"More\" trigger whenever anything is hidden.\n setMaxVisible(fit >= total ? total : Math.max(0, fit - 1));\n };\n recompute(navEl.clientWidth);\n const observer = new ResizeObserver(entries => {\n for (const entry of entries) recompute(entry.contentRect.width);\n });\n observer.observe(navEl);\n return () => observer.disconnect();\n }, [items.length, enablePlusOverflow]);\n\n const visibleItems = items.slice(0, maxVisible);\n const hiddenItems = items.slice(maxVisible);\n const hiddenHasActive = hiddenItems.some(e => (isNavGroup(e) ? !!e.active || e.items.some(i => i.active) : !!e.active));\n\n return (\n <header data-shell-ui-top-bar className={cn('sticky top-0 z-20 flex items-center gap-2 border-b bg-sidebar px-2 text-sidebar-foreground md:gap-3 md:px-4', bgClassName)}>\n {logo && <div className=\"shrink-0\">{logo}</div>}\n\n <nav ref={navRef} className=\"flex min-w-0 flex-1 gap-2 overflow-hidden\">\n {visibleItems.map(entry => {\n const group: NavGroup | undefined = isNavGroup(entry) ? entry : undefined;\n const groupItems = group?.items ?? [];\n // Groups with 2+ children open a dropdown; a single-item group falls\n // through to direct routing on its only child.\n const useDropdown = !!group && groupItems.length > 1;\n const target: NavItem | undefined = group ? groupItems[0] : entry;\n if (!target) return null;\n const isActive = group ? group.active || groupItems.some(i => i.active) : target.active;\n // Surface the badge on the icon. When the badge has a value\n // (string / number), render a small numeric chip; when it's just\n // `true`, fall back to a dot. For groups, grab the badge value\n // from the first child that has one.\n const badgeSource = group ? groupItems.find(i => i.badge != null && i.badge !== false && i.badge !== '')?.badge : target.badge;\n const hasBadge = badgeSource != null && badgeSource !== false && badgeSource !== '';\n const badgeIsNumeric = hasBadge && (typeof badgeSource === 'string' || typeof badgeSource === 'number');\n const innerIcon = (\n <span data-shell-ui-nav-icon className=\"relative flex shrink-0 items-center justify-center [&_svg]:h-6! [&_svg]:w-6!\">\n {entry.icon}\n {hasBadge && badgeIsNumeric && (\n <span\n aria-hidden\n data-shell-ui-nav-badge\n className=\"absolute -top-1.5 -right-1.5 inline-flex h-4 min-w-4 items-center justify-center rounded-full bg-red-500 px-1 text-[9px] font-bold leading-none text-white ring-2 ring-background\"\n >\n {badgeSource}\n </span>\n )}\n {hasBadge && !badgeIsNumeric && (\n <span aria-hidden data-shell-ui-nav-badge-dot className=\"absolute -top-1 -right-1 h-2 w-2 rounded-full bg-red-500 ring-2 ring-background\" />\n )}\n </span>\n );\n // No bg repaint on active — the chip keeps its per-module palette and\n // a 2px yellow underline at the bottom signals the active entry. This\n // mirrors the sidebar's yellow left-bar accent.\n const triggerClass = cn(\n 'relative my-1 flex w-20 shrink-0 cursor-pointer items-center justify-center rounded-md py-0.75 transition-colors',\n isActive ? 'text-foreground' : 'text-muted-foreground hover:bg-primary/10 hover:text-primary',\n );\n const activeUnderline = isActive ? <span aria-hidden className=\"absolute right-2 bottom-0 left-2 h-0.5 rounded-sm bg-cta\" /> : null;\n\n if (useDropdown && group) {\n return (\n <TopBarGroupDropdown\n key={entry.id}\n group={group}\n isActive={!!isActive}\n innerIcon={innerIcon}\n triggerClass={triggerClass}\n activeUnderline={activeUnderline}\n onItemSelect={onItemSelect}\n showSubmenuIndicator={showSubmenuIndicator}\n />\n );\n }\n\n // When `target.href` is set, render as `<a href>` so right-click /\n // middle-click / cmd-click work natively. Plain left-click is\n // intercepted (preventDefault) so the consumer's `onItemSelect`\n // can route via the SPA router. Modifier-keys / non-primary buttons\n // are allowed through to the browser.\n const button = target.href ? (\n <a\n href={target.href}\n data-shell-ui-top-bar-button\n data-shell-ui-nav-slug={entry.slug ?? entry.id}\n data-active={isActive || undefined}\n aria-current={isActive ? 'page' : undefined}\n onClick={e => {\n if (e.metaKey || e.ctrlKey || e.shiftKey || e.altKey || e.button !== 0) return;\n e.preventDefault();\n onItemSelect?.(target as NavItem, group);\n }}\n className={triggerClass}\n >\n {innerIcon}\n {activeUnderline}\n </a>\n ) : (\n <button\n type=\"button\"\n data-shell-ui-top-bar-button\n data-shell-ui-nav-slug={entry.slug ?? entry.id}\n data-active={isActive || undefined}\n onClick={() => onItemSelect?.(target as NavItem, group)}\n className={triggerClass}\n >\n {innerIcon}\n {activeUnderline}\n </button>\n );\n return (\n <Tooltip key={entry.id}>\n <TooltipTrigger asChild>{button}</TooltipTrigger>\n <TooltipContent side=\"bottom\">{entry.label}</TooltipContent>\n </Tooltip>\n );\n })}\n {hiddenItems.length > 0 && <TopBarOverflowMenu items={hiddenItems} hasActive={hiddenHasActive} onItemSelect={onItemSelect} label={strings.moreLabel} />}\n </nav>\n\n <div className=\"flex shrink-0 items-center gap-1\">\n {leadingInline.flatMap(action => [\n <span key={action.id} className=\"animate-in fade-in-0 slide-in-from-right-1 duration-200\">\n {renderTopBarAction(action)}\n </span>,\n action.dividerAfter ? <span key={`${action.id}-div`} aria-hidden className=\"mx-1 h-6 w-px self-center bg-border\" /> : null,\n ])}\n {!compactActions && onNavModeChange && (\n <span className=\"animate-in fade-in-0 slide-in-from-right-1 duration-200\">\n <Button variant=\"ghost\" size=\"icon\" onClick={() => onNavModeChange('sidebar')} title={strings.navUseSidebar} aria-label={strings.navUseSidebar}>\n <PanelLeft className=\"h-4 w-4\" />\n </Button>\n </span>\n )}\n {!compactActions && onThemeToggle && (\n <span className=\"animate-in fade-in-0 slide-in-from-right-1 duration-200\">\n <Button variant=\"ghost\" size=\"icon\" onClick={onThemeToggle} title={themeLabel} aria-label={themeLabel}>\n {theme === 'dark' ? <Sun className=\"h-4 w-4\" /> : <Moon className=\"h-4 w-4\" />}\n </Button>\n </span>\n )}\n {trailingInline.flatMap(action => [\n <span key={action.id} className=\"animate-in fade-in-0 slide-in-from-right-1 duration-200\">\n {renderTopBarAction(action)}\n </span>,\n action.dividerAfter ? <span key={`${action.id}-div`} aria-hidden className=\"mx-1 h-6 w-px self-center bg-border\" /> : null,\n ])}\n {compactActions && (leadingCollapsed.length > 0 || trailingCollapsed.length > 0 || onNavModeChange || onThemeToggle) && (\n <span className=\"animate-in fade-in-0 slide-in-from-right-1 duration-200\">\n <CompactActionsMenu\n entries={[\n ...leadingCollapsed.map(a => ({ type: 'action' as const, action: a })),\n ...(onNavModeChange ? [{ type: 'navMode' as const, onClick: () => onNavModeChange('sidebar'), label: strings.navUseSidebar }] : []),\n ...(onThemeToggle ? [{ type: 'theme' as const, onClick: onThemeToggle, label: themeLabel, isDark: theme === 'dark' }] : []),\n ...trailingCollapsed.map(a => ({ type: 'action' as const, action: a })),\n ]}\n label={strings.moreLabel}\n />\n </span>\n )}\n {user && userMenu ? (\n <Popover>\n <PopoverTrigger asChild>\n <button\n type=\"button\"\n // Square hover area around the circular avatar — mirrors\n // the collapsed-sidebar user button (rounded-sm wrapper,\n // p-1 padding, circle inside).\n className=\"inline-flex shrink-0 cursor-pointer items-center justify-center rounded-sm p-1 outline-none transition-colors hover:bg-secondary hover:text-secondary-foreground focus-visible:ring-2 focus-visible:ring-ring\"\n title={user.name}\n aria-label={user.name}\n >\n <span className=\"flex h-8 w-8 items-center justify-center rounded-full bg-muted text-xs font-semibold text-muted-foreground\">\n {user.initials ?? defaultInitials(user.name)}\n </span>\n </button>\n </PopoverTrigger>\n <PopoverContent side=\"bottom\" align=\"end\" sideOffset={TOPBAR_OFFSET.fullRow} className=\"p-0\">\n {userMenu}\n </PopoverContent>\n </Popover>\n ) : (\n user && (\n <div className=\"inline-flex shrink-0 items-center justify-center p-1\" title={user.name} aria-label={user.name}>\n <span className=\"flex h-8 w-8 items-center justify-center rounded-full bg-muted text-xs font-semibold text-muted-foreground\">\n {user.initials ?? defaultInitials(user.name)}\n </span>\n </div>\n )\n )}\n {onLogout && (\n <Button variant=\"ghost\" size=\"icon\" onClick={onLogout} title={strings.logout} aria-label={strings.logout}>\n <LogOut className=\"h-4 w-4\" />\n </Button>\n )}\n </div>\n </header>\n );\n}\n\nfunction TopBarGroupDropdown({\n group,\n isActive,\n innerIcon,\n triggerClass,\n activeUnderline,\n onItemSelect,\n showSubmenuIndicator,\n}: {\n group: NavGroup;\n isActive: boolean;\n innerIcon: ReactNode;\n triggerClass: string;\n activeUnderline: ReactNode;\n onItemSelect?: (item: NavItem, group?: NavGroup) => void;\n showSubmenuIndicator: boolean;\n}) {\n // Controlled so clicking a leaf can dismiss the panel before routing —\n // Radix's `PopoverClose` is unreliable inside an asChild link with\n // preventDefault, and an explicit setOpen(false) guarantees the close.\n const [open, setOpen] = useState(false);\n return (\n <Popover open={open} onOpenChange={setOpen}>\n <Tooltip>\n <TooltipTrigger asChild>\n <PopoverTrigger asChild>\n <button\n type=\"button\"\n data-shell-ui-top-bar-button\n data-shell-ui-nav-slug={group.slug ?? group.id}\n data-active={isActive || undefined}\n aria-current={isActive ? 'page' : undefined}\n className={triggerClass}\n >\n {innerIcon}\n {activeUnderline}\n {/* Has-children cue. Lives in the button's empty bottom-right\n corner (the icon is centered so this space is unused),\n outside the icon's bounds so it doesn't overlap the SVG.\n Sits 4px above the bottom edge so the active underline\n (bg-cta) stays clear. */}\n {showSubmenuIndicator && (\n <ChevronDown aria-hidden data-shell-ui-nav-has-children className=\"pointer-events-none absolute right-1.5 bottom-1 h-3 w-3 stroke-[2.5] opacity-70\" />\n )}\n </button>\n </PopoverTrigger>\n </TooltipTrigger>\n <TooltipContent side=\"bottom\">{group.label}</TooltipContent>\n </Tooltip>\n <PopoverContent\n side=\"bottom\"\n align=\"center\"\n sideOffset={TOPBAR_OFFSET.shortRow}\n collisionPadding={8}\n // Don't restore focus to the trigger after close — otherwise the\n // Tooltip wrapping the trigger auto-opens on `:focus` once the\n // popover closes, leaving the group label hovering over the bar.\n onCloseAutoFocus={e => e.preventDefault()}\n className=\"max-h-(--radix-popover-content-available-height) overflow-hidden p-0\"\n data-shell-ui-nav-flyout\n aria-label={group.label}\n >\n <div className=\"flex max-h-[inherit] flex-col\">\n <div className=\"shrink-0 border-b bg-popover px-3 py-2 text-sm font-semibold\">{group.label}</div>\n <div className=\"min-h-0 flex-1 overflow-y-auto py-1\">\n {group.items.map(child => {\n const childActive = !!child.active;\n const childHasBadge = child.badge != null && child.badge !== false && child.badge !== '';\n const rowClass = cn(\n 'flex w-full cursor-pointer items-center gap-2 px-3 py-2 text-sm transition-colors',\n childActive ? 'bg-primary text-primary-foreground' : 'text-muted-foreground hover:bg-primary/10 hover:text-primary',\n );\n const rowInner = (\n <>\n {child.icon && <span className=\"flex h-4 w-4 shrink-0 items-center justify-center [&_svg]:h-4 [&_svg]:w-4\">{child.icon}</span>}\n <span className=\"flex-1 truncate text-left\">{child.label}</span>\n {childHasBadge && (\n <span className=\"ml-auto inline-flex h-5 min-w-5 items-center justify-center rounded-full bg-red-500 px-1.5 text-[10px] font-bold text-white\">\n {child.badge}\n </span>\n )}\n </>\n );\n if (child.href) {\n return (\n <a\n key={child.id}\n href={child.href}\n role=\"menuitem\"\n data-shell-ui-nav-flyout-item\n data-active={childActive || undefined}\n aria-current={childActive ? 'page' : undefined}\n onClick={e => {\n if (e.metaKey || e.ctrlKey || e.shiftKey || e.altKey || e.button !== 0) return;\n e.preventDefault();\n onItemSelect?.(child, group);\n setOpen(false);\n }}\n className={rowClass}\n >\n {rowInner}\n </a>\n );\n }\n return (\n <button\n key={child.id}\n type=\"button\"\n role=\"menuitem\"\n data-shell-ui-nav-flyout-item\n data-active={childActive || undefined}\n onClick={() => {\n onItemSelect?.(child, group);\n setOpen(false);\n }}\n className={rowClass}\n >\n {rowInner}\n </button>\n );\n })}\n </div>\n </div>\n </PopoverContent>\n </Popover>\n );\n}\n\nfunction TopBarOverflowMenu({\n items,\n hasActive,\n onItemSelect,\n label,\n}: {\n items: NavEntry[];\n hasActive: boolean;\n onItemSelect?: (item: NavItem, group?: NavGroup) => void;\n label: string;\n}) {\n // Hover trigger to match the collapsed-sidebar fly-out semantics. Controlled\n // so a leaf click can dismiss before routing — Tooltip's default close fires\n // too late.\n const [open, setOpen] = useState(false);\n const triggerClass = cn(\n 'relative my-1 flex w-20 shrink-0 cursor-pointer items-center justify-center rounded-md py-0.75 transition-colors',\n hasActive ? 'text-foreground' : 'text-muted-foreground hover:bg-primary/10 hover:text-primary',\n );\n return (\n <Tooltip open={open} onOpenChange={setOpen}>\n <TooltipTrigger asChild>\n <button type=\"button\" data-shell-ui-top-bar-button data-shell-ui-top-bar-overflow data-active={hasActive || undefined} aria-label={label} className={triggerClass}>\n <span className=\"relative flex shrink-0 items-center justify-center [&_svg]:h-6! [&_svg]:w-6!\">\n <MoreHorizontal />\n </span>\n {hasActive && <span aria-hidden className=\"absolute right-2 bottom-0 left-2 h-0.5 rounded-sm bg-cta\" />}\n </button>\n </TooltipTrigger>\n <TooltipContent\n side=\"bottom\"\n align=\"end\"\n sideOffset={TOPBAR_OFFSET.shortRow}\n collisionPadding={8}\n className=\"max-h-(--radix-tooltip-content-available-height) overflow-hidden p-0\"\n data-shell-ui-nav-flyout\n aria-label={label}\n >\n <div className=\"flex max-h-[inherit] w-56 flex-col\">\n <div className=\"shrink-0 border-b bg-popover px-3 py-2 text-sm font-semibold\">{label}</div>\n <div className=\"min-h-0 flex-1 overflow-y-auto py-1\">\n {items.map(entry => {\n if (isNavGroup(entry)) {\n return (\n <div key={entry.id}>\n <div className=\"px-3 pt-2 pb-1 text-[10px] font-semibold tracking-wide text-muted-foreground uppercase\">{entry.label}</div>\n {entry.items.map(child => (\n <OverflowFlyoutRow key={child.id} item={child} group={entry} onSelect={onItemSelect} onClose={() => setOpen(false)} />\n ))}\n </div>\n );\n }\n return <OverflowFlyoutRow key={entry.id} item={entry} onSelect={onItemSelect} onClose={() => setOpen(false)} />;\n })}\n </div>\n </div>\n </TooltipContent>\n </Tooltip>\n );\n}\n\nfunction OverflowFlyoutRow({ item, group, onSelect, onClose }: { item: NavItem; group?: NavGroup; onSelect?: (item: NavItem, group?: NavGroup) => void; onClose: () => void }) {\n const active = !!item.active;\n const hasBadge = item.badge != null && item.badge !== false && item.badge !== '';\n const rowClass = cn(\n 'flex w-full cursor-pointer items-center gap-2 px-3 py-2 text-sm transition-colors',\n active ? 'bg-primary text-primary-foreground' : 'text-muted-foreground hover:bg-primary/10 hover:text-primary',\n );\n const inner = (\n <>\n {item.icon && <span className=\"flex h-4 w-4 shrink-0 items-center justify-center [&_svg]:h-4 [&_svg]:w-4\">{item.icon}</span>}\n <span className=\"flex-1 truncate text-left\">{item.label}</span>\n {hasBadge && (\n <span className=\"ml-auto inline-flex h-5 min-w-5 items-center justify-center rounded-full bg-red-500 px-1.5 text-[10px] font-bold text-white\">{item.badge}</span>\n )}\n </>\n );\n if (item.href) {\n return (\n <a\n href={item.href}\n role=\"menuitem\"\n data-shell-ui-nav-flyout-item\n data-active={active || undefined}\n aria-current={active ? 'page' : undefined}\n onClick={e => {\n if (e.metaKey || e.ctrlKey || e.shiftKey || e.altKey || e.button !== 0) return;\n e.preventDefault();\n onSelect?.(item, group);\n onClose();\n }}\n className={rowClass}\n >\n {inner}\n </a>\n );\n }\n return (\n <button\n type=\"button\"\n role=\"menuitem\"\n data-shell-ui-nav-flyout-item\n data-active={active || undefined}\n onClick={() => {\n onSelect?.(item, group);\n onClose();\n }}\n className={rowClass}\n >\n {inner}\n </button>\n );\n}\n\n/**\n * Collapsed actions cluster — renders a \"…\" trigger styled like the other\n * top-bar tiles + a hover-Tooltip popover listing every default-rendered\n * action and the built-in nav-mode/theme toggles as rows. Mirrors the\n * `TopBarOverflowMenu` markup so the surface reads identically.\n */\ntype CompactEntry =\n | { type: 'action'; action: ShellAction }\n | { type: 'navMode'; onClick: () => void; label: string }\n | { type: 'theme'; onClick: () => void; label: string; isDark: boolean };\n\nfunction CompactActionsMenu({ entries, label }: { entries: CompactEntry[]; label: string }) {\n // Click-triggered parent. A hover Tooltip would auto-close when the user's\n // pointer moves into a nested HoverCard (the puzzle's pin menu) because the\n // nested content is portaled outside the Tooltip's content tree. Popover\n // stays open until explicit dismissal (Esc, click outside, or row select).\n const [open, setOpen] = useState(false);\n return (\n <Popover open={open} onOpenChange={setOpen}>\n <PopoverTrigger asChild>\n <Button variant=\"ghost\" size=\"icon\" data-shell-ui-top-bar-actions-overflow aria-label={label} title={label}>\n <MoreHorizontal className=\"h-4 w-4\" />\n </Button>\n </PopoverTrigger>\n <PopoverContent\n side=\"bottom\"\n align=\"end\"\n sideOffset={TOPBAR_OFFSET.fullRow}\n collisionPadding={8}\n className=\"max-h-(--radix-popover-content-available-height) overflow-hidden p-0\"\n data-shell-ui-nav-flyout\n aria-label={label}\n >\n <div className=\"flex max-h-[inherit] w-64 flex-col\">\n <div className=\"shrink-0 border-b bg-popover px-3 py-2 text-sm font-semibold\">{label}</div>\n <div className=\"min-h-0 flex-1 overflow-y-auto py-1\">\n {entries.map(entry => {\n if (entry.type === 'navMode') {\n return <CompactActionRow key=\"__navmode__\" icon={<PanelLeft className=\"h-4 w-4\" />} label={entry.label} onClick={entry.onClick} onClose={() => setOpen(false)} />;\n }\n if (entry.type === 'theme') {\n return (\n <CompactActionRow\n key=\"__theme__\"\n icon={entry.isDark ? <Sun className=\"h-4 w-4\" /> : <Moon className=\"h-4 w-4\" />}\n label={entry.label}\n onClick={entry.onClick}\n onClose={() => setOpen(false)}\n />\n );\n }\n const a = entry.action;\n // Actions with `clickContent` (no onClick) expose their content\n // via a nested HoverCard — opens on hover, parent stays open so\n // the user can keep pin-toggling without losing the menu.\n if (a.clickContent && !a.onClick) {\n return <CompactNestedRow key={a.id} action={a} />;\n }\n return (\n <CompactActionRow key={a.id} icon={a.icon} label={a.label} onClick={a.onClick} active={a.active} hoverContent={a.hoverContent} onClose={() => setOpen(false)} />\n );\n })}\n </div>\n </div>\n </PopoverContent>\n </Popover>\n );\n}\n\nfunction CompactActionRow({\n icon,\n label,\n onClick,\n active,\n hoverContent,\n onClose,\n}: {\n icon: ReactNode;\n label: string;\n onClick?: () => void;\n active?: boolean;\n hoverContent?: ReactNode;\n onClose: () => void;\n}) {\n const button = (\n <button\n type=\"button\"\n role=\"menuitem\"\n data-shell-ui-nav-flyout-item\n data-active={active || undefined}\n onClick={() => {\n onClick?.();\n onClose();\n }}\n className={cn(\n 'flex w-full cursor-pointer items-center gap-2 px-3 py-2 text-sm transition-colors',\n active ? 'bg-primary text-primary-foreground' : 'text-muted-foreground hover:bg-primary/10 hover:text-primary',\n )}\n >\n <span className=\"flex h-4 w-4 shrink-0 items-center justify-center [&_svg]:h-4 [&_svg]:w-4\">{icon}</span>\n <span className=\"flex-1 truncate text-left\">{label}</span>\n </button>\n );\n if (!hoverContent) return button;\n return (\n <HoverCard openDelay={150} closeDelay={100}>\n <HoverCardTrigger asChild>{button}</HoverCardTrigger>\n <HoverCardContent\n side=\"left\"\n align=\"start\"\n // Trigger button uses `px-3` (12 px) inside the parent popover, plus\n // POPOVER_GAP = 8 → 20 px keeps a clean visible gap between surfaces.\n sideOffset={20}\n collisionPadding={8}\n className=\"w-auto p-0\"\n >\n {hoverContent}\n </HoverCardContent>\n </HoverCard>\n );\n}\n\nfunction CompactNestedRow({ action }: { action: ShellAction }) {\n // Opens on hover via HoverCard; the parent popover stays open independently\n // so the user can keep clicking pin/unpin (or any other in-content control)\n // without dismissing either surface.\n return (\n <HoverCard openDelay={120} closeDelay={150}>\n <HoverCardTrigger asChild>\n <button\n type=\"button\"\n role=\"menuitem\"\n data-shell-ui-nav-flyout-item\n aria-haspopup=\"menu\"\n className=\"flex w-full cursor-pointer items-center gap-2 px-3 py-2 text-sm text-muted-foreground transition-colors hover:bg-primary/10 hover:text-primary\"\n >\n <span className=\"flex h-4 w-4 shrink-0 items-center justify-center [&_svg]:h-4 [&_svg]:w-4\">{action.icon}</span>\n <span className=\"flex-1 truncate text-left\">{action.label}</span>\n <ChevronRight className=\"h-3 w-3 opacity-60\" />\n </button>\n </HoverCardTrigger>\n <HoverCardContent side=\"left\" align=\"start\" sideOffset={4} collisionPadding={8} className=\"max-h-(--radix-hover-card-content-available-height) overflow-hidden p-0\">\n {action.clickContent}\n </HoverCardContent>\n </HoverCard>\n );\n}\n","/* eslint-disable react-refresh/only-export-components -- `tintColor` and\n `svgMark` are co-located helpers used to author the cluster's tile data;\n moving them to a separate file would force consumers to learn two import\n paths for one widget. */\nimport * as React from 'react';\nimport { Fragment } from 'react';\n\nimport { cn } from '../lib/utils';\nimport { Popover, PopoverAnchor, PopoverContent, PopoverTrigger } from './popover';\n\n/**\n * Partner-cluster widget — replicates the \"Nos solutions\" header pattern from\n * the s3pweb partners maquette (claude-maquette-partners). Use it as the\n * trigger of a `ShellAction` with `clickContent` / `hoverContent` set, e.g.:\n *\n * { id: 'solutions', label: 'Nos solutions',\n * icon: <Layers />, // sidebar fallback\n * customTrigger: <PartnerCluster partners={ECOSYSTEM} chipBorderColor='white' />,\n * clickContent: <YourMegaPanel /> }\n *\n * The cluster paints a small label, the first N partner tiles overlapped\n * (-7px stride, ringed with `chipBorderColor` to mask the overlap against the\n * chrome bg), and a \"+M\" overflow chip when there are more partners than\n * `maxVisible`. Each tile uses a 16% tint of the partner's brand colour for\n * its bg and the full brand colour for the mark stroke.\n */\n\n/* ---------- data shape ---------- */\n\nexport interface Partner {\n id: string;\n name: string;\n /** Brand hex colour (e.g. '#2E6BE6'). */\n color: string;\n /**\n * Brand mark — rendered inside the tile as-is. Pass any ReactNode:\n * - SVG paths wrapped via `svgMark(...)` (or your own `<svg>` element)\n * - `<img src='/favicons/x.png' alt='X' />` for raster brand icons\n * - any custom component\n *\n * The tile constrains the mark to ~60% of its width/height; any inner\n * `<svg>` or `<img>` automatically fills that slot.\n */\n mark: React.ReactNode;\n /** Optional one-line tagline shown in detail / popover layouts. */\n tagline?: string;\n /** Optional category — free-form (e.g. 'Financement', 'Optimisation'). */\n category?: string;\n /** Optional taxonomy tag — 'solution' = ours, 'partner' = external. */\n kind?: 'solution' | 'partner';\n /** Optional URL — handy for popover content that links to the partner site. */\n href?: string;\n}\n\n/**\n * Mix a hex colour toward white by `ratio` (0 = white, 1 = full colour).\n * Mirrors `ECO.tint()` in the maquette's ecosystem.js. Returns an rgb() string.\n */\nexport function tintColor(hex: string, ratio = 0.16): string {\n const c = hex.replace('#', '');\n const r = parseInt(c.substring(0, 2), 16);\n const g = parseInt(c.substring(2, 4), 16);\n const b = parseInt(c.substring(4, 6), 16);\n const mix = (x: number) => Math.round(x * ratio + 255 * (1 - ratio));\n return `rgb(${mix(r)},${mix(g)},${mix(b)})`;\n}\n\n/**\n * Convenience helper for the most common Partner.mark case: raw SVG path\n * content lifted from a design source. Wraps the paths in a 24×24 viewBox\n * with `stroke=currentColor` so the brand colour cascades from the tile.\n *\n * mark: svgMark(<><circle cx='12' cy='12' r='8'/><path d='...'/></>)\n */\nexport function svgMark(paths: React.ReactNode, opts?: { strokeWidth?: number }): React.ReactNode {\n return (\n <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth={opts?.strokeWidth ?? 1.8} strokeLinecap=\"round\" strokeLinejoin=\"round\">\n {paths}\n </svg>\n );\n}\n\n/* ---------- single tile ---------- */\n\nexport interface PartnerTileProps extends React.HTMLAttributes<HTMLSpanElement> {\n partner: Partner;\n /** Outer square edge in px. Default 30. */\n size?: number;\n /** Solid mode: bg=brand colour, glyph=white. Default tinted bg + brand glyph. */\n solid?: boolean;\n /** Border-radius in px. Defaults to ~28% of `size`. */\n radius?: number;\n /** Optional 2px ring colour painted around the tile (used inside PartnerCluster). */\n ringColor?: string;\n}\n\nexport function PartnerTile({ partner, size = 30, solid = false, radius, ringColor, className, style, title, ...props }: PartnerTileProps) {\n const r = radius ?? Math.round(size * 0.28);\n const bg = solid ? partner.color : tintColor(partner.color, 0.16);\n const fg = solid ? '#ffffff' : partner.color;\n const ringStyle: React.CSSProperties | undefined = ringColor ? { borderWidth: 2, borderStyle: 'solid', borderColor: ringColor } : undefined;\n return (\n <span\n data-shell-ui-partner-tile\n data-partner-id={partner.id}\n className={cn('inline-grid place-items-center shrink-0', className)}\n style={{ width: size, height: size, borderRadius: r, background: bg, color: fg, ...ringStyle, ...style }}\n title={title ?? partner.name}\n {...props}\n >\n {/* Mark slot — sized to 60% of the tile via inline width/height, with\n auto-fit applied to any svg/img children so the consumer doesn't\n have to spec dimensions on their `partner.mark` ReactNode. */}\n <span\n data-shell-ui-partner-mark\n className=\"flex items-center justify-center [&_img]:h-full [&_img]:w-full [&_img]:object-contain [&_svg]:h-full [&_svg]:w-full\"\n style={{ width: '60%', height: '60%' }}\n >\n {partner.mark}\n </span>\n </span>\n );\n}\n\n/* ---------- cluster ---------- */\n\nexport interface PartnerClusterProps extends React.HTMLAttributes<HTMLDivElement> {\n partners: Partner[];\n /** Tiles shown before the +N overflow chip. Default 4. */\n maxVisible?: number;\n /**\n * Small label shown to the left of the tiles. Default: no label.\n * Pass a string (e.g. 'Nos solutions') to display one.\n */\n label?: string | null;\n /** Tile edge in px. Default 30. */\n tileSize?: number;\n /**\n * Colour painted on the 2px ring around each tile / the +N chip to mask the\n * -7px overlap against the chrome's background. Should match the\n * surrounding bg — defaults to `var(--color-sidebar)`. Pass `'white'` (or\n * a Tailwind colour variable) when the chrome uses a different bg.\n */\n chipBorderColor?: string;\n /**\n * Content rendered inside the click-Popover anchored to the +N overflow\n * chip. When the cluster has no overflow (maxVisible >= partners.length)\n * the popover won't have a trigger — keep `maxVisible` below\n * `partners.length` if you rely on this.\n */\n popoverContent?: React.ReactNode;\n /** Popover side. Default 'bottom' (top-bar context). Use 'right' when the cluster sits in a sidebar. */\n popoverSide?: 'top' | 'right' | 'bottom' | 'left';\n /** Popover align. Default 'end'. */\n popoverAlign?: 'start' | 'center' | 'end';\n /** Popover offset from the trigger in px. Default 8. */\n popoverSideOffset?: number;\n /** Locale for built-in labels (the overflow chip title). Default 'fr'. */\n locale?: 'fr' | 'en';\n}\n\n/**\n * The cluster is NOT a single button. Each visible tile is an independent\n * `<a target='_blank'>` when its partner has an `href` (otherwise a\n * non-interactive `<span>`), and the `+N` chip is a separate `<button>` that\n * opens `popoverContent` in a Popover. Effect: clicking a tile goes straight\n * to that partner's site, clicking `+N` opens the full panel — matching the\n * maquette's UX.\n */\nexport function PartnerCluster({\n partners,\n maxVisible = 4,\n label,\n tileSize = 30,\n chipBorderColor = 'var(--color-sidebar)',\n popoverContent,\n popoverSide = 'bottom',\n popoverAlign = 'end',\n popoverSideOffset = 8,\n locale = 'fr',\n className,\n ...props\n}: PartnerClusterProps) {\n const visible = partners.slice(0, maxVisible);\n const overflow = Math.max(0, partners.length - visible.length);\n const overflowRadius = Math.round(tileSize * 0.28);\n const overflowTitle = locale === 'en' ? 'Discover all' : 'Tout découvrir';\n const hoverLift = 'transition-transform hover:z-10 hover:-translate-y-0.5 hover:scale-105';\n // Entry animation when tiles mount (e.g. when leaving compact mode and the\n // hidden tiles reappear). Pure mount-time; unmounts skip the animation.\n const enterAnim = 'animate-in fade-in-0 zoom-in-90 duration-200';\n\n const overflowChip = overflow > 0 && (\n <button\n type=\"button\"\n data-shell-ui-partner-overflow\n className={cn(\n '-ml-1.75 inline-grid cursor-pointer place-items-center bg-muted text-[11px] font-extrabold text-muted-foreground outline-none focus-visible:ring-2 focus-visible:ring-ring',\n hoverLift,\n )}\n style={{ width: tileSize, height: tileSize, borderRadius: overflowRadius, borderWidth: 2, borderStyle: 'solid', borderColor: chipBorderColor }}\n title={overflowTitle}\n aria-label={overflowTitle}\n >\n +{overflow}\n </button>\n );\n\n const clusterBody = (\n <div data-shell-ui-partner-cluster className={cn('inline-flex items-center gap-2.5 bg-transparent', className)} {...props}>\n {label !== null && label !== undefined && label !== '' && <span className=\"text-[11px] font-bold uppercase tracking-[0.02em] text-muted-foreground\">{label}</span>}\n <span className=\"flex items-center\">\n {visible.map((p, i) => {\n const overlap = i > 0 ? '-ml-[7px]' : '';\n if (p.href) {\n return (\n <a\n key={p.id}\n href={p.href}\n target=\"_blank\"\n rel=\"noreferrer noopener\"\n title={p.name}\n aria-label={p.name}\n data-shell-ui-partner-link\n data-partner-id={p.id}\n className={cn('inline-flex rounded-[7px] outline-none focus-visible:ring-2 focus-visible:ring-ring', overlap, hoverLift, enterAnim)}\n >\n <PartnerTile partner={p} size={tileSize} ringColor={chipBorderColor} />\n </a>\n );\n }\n return <PartnerTile key={p.id} partner={p} size={tileSize} ringColor={chipBorderColor} className={cn(overlap, hoverLift, enterAnim)} />;\n })}\n {overflowChip && popoverContent ? <PopoverTrigger asChild>{overflowChip}</PopoverTrigger> : overflowChip && <Fragment>{overflowChip}</Fragment>}\n </span>\n </div>\n );\n\n if (overflowChip && popoverContent) {\n return (\n <Popover>\n {/* PopoverAnchor on the whole cluster keeps the popover's position\n stable when individual tiles (and the +N trigger itself) animate\n via `hover:-translate-y-0.5 hover:scale-105`. */}\n <PopoverAnchor asChild>{clusterBody}</PopoverAnchor>\n <PopoverContent side={popoverSide} align={popoverAlign} sideOffset={popoverSideOffset} className=\"p-0\">\n {popoverContent}\n </PopoverContent>\n </Popover>\n );\n }\n return clusterBody;\n}\n","import { cn } from '../lib/utils';\nimport type { Partner } from './partner-cluster';\nimport { PartnerTile } from './partner-cluster';\nimport { PopoverClose } from './popover';\n\n/**\n * EcosystemMegaPanel — the \"L'écosystème …\" popover panel from the partners\n * maquette, ported to React. Designed to live inside a Radix Popover (passed\n * via `PartnerCluster.popoverContent` or `ShellAction.clickContent`), with\n * panel-internal links wrapped in `<PopoverClose asChild>` so a click both\n * dismisses the popover and opens the partner site in a new tab.\n *\n * Built-in fr/en strings, override any of them via the explicit props. Any\n * Partner with an `href` opens that URL in a new tab; partners without `href`\n * still render but their link is non-functional (href='#').\n */\n\nexport interface EcosystemMegaPanelProps {\n /** Partners to render. */\n partners: Partner[];\n /** Heading line. Default: 'L'écosystème' / 'The ecosystem'. */\n title?: string;\n /** Sub-heading paragraph. Default: localised generic. */\n subtitle?: string;\n /** Footer-left label. Default: '{N} services connectés à votre compte'. */\n connectedLabel?: string;\n /** Footer-right action label. Default: 'Tout découvrir →' / 'Discover all →'. */\n seeAllLabel?: string;\n /** When set, the \"see all\" footer item renders as an `<a target='_blank' href>`. */\n seeAllHref?: string;\n /** Click callback for the \"see all\" footer (fires alongside href navigation if both are set). */\n onSeeAllClick?: () => void;\n /** Click callback when a partner row is clicked. Fires alongside href navigation. */\n onPartnerClick?: (partner: Partner) => void;\n /** Show the 'Nous' / 'Part.' kind tag next to each name. Default true. */\n showKindTag?: boolean;\n /** Locale for built-in strings. Default 'fr'. */\n locale?: 'fr' | 'en';\n /** Extra Tailwind classes on the panel root (override width / padding). */\n className?: string;\n}\n\ninterface PanelStrings {\n title: string;\n subtitle: string;\n connected: (n: number) => string;\n seeAll: string;\n ours: string;\n partner: string;\n}\n\nconst STRINGS: Record<'fr' | 'en', PanelStrings> = {\n fr: {\n title: \"L'écosystème\",\n subtitle: 'Nos solutions et nos partenaires pour gérer toute votre activité transport.',\n connected: n => `${n} services connectés à votre compte`,\n seeAll: 'Tout découvrir →',\n ours: 'Nous',\n partner: 'Part.',\n },\n en: {\n title: 'The ecosystem',\n subtitle: 'Our solutions and partners to manage your entire transport business.',\n connected: n => `${n} services connected to your account`,\n seeAll: 'Discover all →',\n ours: 'Us',\n partner: 'Part.',\n },\n};\n\nexport function EcosystemMegaPanel({\n partners,\n title,\n subtitle,\n connectedLabel,\n seeAllLabel,\n seeAllHref,\n onSeeAllClick,\n onPartnerClick,\n showKindTag = true,\n locale = 'fr',\n className,\n}: EcosystemMegaPanelProps) {\n const s = STRINGS[locale];\n\n const seeAllNode = seeAllHref ? (\n <PopoverClose asChild>\n <a href={seeAllHref} target=\"_blank\" rel=\"noreferrer noopener\" onClick={onSeeAllClick} className=\"cursor-pointer font-bold text-primary hover:underline\">\n {seeAllLabel ?? s.seeAll}\n </a>\n </PopoverClose>\n ) : onSeeAllClick ? (\n <PopoverClose asChild>\n <button type=\"button\" onClick={onSeeAllClick} className=\"cursor-pointer font-bold text-primary hover:underline\">\n {seeAllLabel ?? s.seeAll}\n </button>\n </PopoverClose>\n ) : null;\n\n return (\n <div data-shell-ui-ecosystem-panel className={cn('w-115 p-4', className)}>\n <h3 className=\"text-sm font-extrabold text-foreground\">{title ?? s.title}</h3>\n <p className=\"mt-0.5 mb-3 text-xs text-muted-foreground\">{subtitle ?? s.subtitle}</p>\n <div className=\"grid grid-cols-2 gap-2\">\n {partners.map(p => (\n <PopoverClose key={p.id} asChild>\n <a\n href={p.href ?? '#'}\n target=\"_blank\"\n rel=\"noreferrer noopener\"\n onClick={() => onPartnerClick?.(p)}\n className=\"flex cursor-pointer items-center gap-3 rounded-md border border-transparent p-2 text-left transition-colors hover:border-border hover:bg-accent\"\n title={p.tagline}\n >\n <PartnerTile partner={p} size={38} />\n <span className=\"min-w-0\">\n <span className=\"flex items-center gap-1.5 text-[13px] font-bold text-foreground\">\n {p.name}\n {showKindTag && p.kind && (\n <span\n className={cn(\n 'rounded-sm px-1 py-px text-[10px] font-bold uppercase',\n // Maquette spec verbatim — `tag-solution`:\n // bg: color-mix(in srgb, var(--accent) 22%, #fff)\n // color: #8a6206\n // Using `--color-cta` as the accent yields the same\n // pale cream-yellow as the maquette.\n p.kind === 'solution' ? 'bg-[color-mix(in_srgb,var(--color-cta)_22%,#fff)] text-[#8a6206]' : 'bg-muted text-muted-foreground',\n )}\n >\n {p.kind === 'solution' ? s.ours : s.partner}\n </span>\n )}\n </span>\n {p.tagline && <span className=\"mt-0.5 block truncate text-[11.5px] text-muted-foreground\">{p.tagline}</span>}\n </span>\n </a>\n </PopoverClose>\n ))}\n </div>\n {(connectedLabel || seeAllNode || partners.length > 0) && (\n <div className=\"mt-3 flex items-center justify-between border-t pt-3 text-xs text-muted-foreground\">\n <span>{connectedLabel ?? s.connected(partners.length)}</span>\n {seeAllNode}\n </div>\n )}\n </div>\n );\n}\n","import type { ReactNode } from 'react';\n\nimport { cn } from '../lib/utils';\nimport { PopoverClose } from './popover';\n\n/**\n * UserMenu — list-of-items menu intended to live inside the click-Popover\n * anchored on the avatar (via `Shell.userMenu`). Each row uses\n * `<PopoverClose asChild>` so a click both dismisses the menu AND runs the\n * row's action (or follows its `href`).\n *\n * Items adopt the brand theme automatically via `text-muted-foreground\n * hover:bg-primary/10 hover:text-primary` — the same palette the collapsed-\n * group fly-out items use, so the UserMenu reads as part of the same family.\n *\n * Items with `tone: 'danger'` paint in the destructive palette\n * (`text-destructive hover:bg-destructive/10`). Items with `dividerBefore`\n * render a 1px separator above them — handy to set off the logout row.\n */\n\nexport interface UserMenuItem {\n id: string;\n label: string;\n icon?: ReactNode;\n /** Click handler. Fires alongside any `href` navigation. */\n onClick?: () => void;\n /** When set, the row renders as `<a target='_blank' href>` so the link opens in a new tab. */\n href?: string;\n /** Visual tone: 'default' (muted-foreground + primary hover) | 'danger' (destructive). Default 'default'. */\n tone?: 'default' | 'danger';\n /** Draw a 1px separator above this row. */\n dividerBefore?: boolean;\n /** Disable the row (cursor:not-allowed, no hover, onClick ignored). */\n disabled?: boolean;\n}\n\nexport interface UserMenuProps {\n items: UserMenuItem[];\n /** Extra Tailwind classes on the menu root — override width/padding as needed. */\n className?: string;\n}\n\nexport function UserMenu({ items, className }: UserMenuProps) {\n return (\n <div data-shell-ui-user-menu className={cn('w-56 py-1', className)}>\n {items.map(item => {\n const isDanger = item.tone === 'danger';\n const rowClass = cn(\n 'flex w-full cursor-pointer items-center gap-3 px-3 py-2 text-left text-sm transition-colors',\n isDanger\n ? 'text-red-600 hover:bg-red-50 hover:text-red-700 dark:text-red-400 dark:hover:bg-red-900/20 dark:hover:text-red-300'\n : 'text-muted-foreground hover:bg-primary/10 hover:text-primary',\n item.disabled && 'pointer-events-none opacity-50',\n );\n const inner = (\n <>\n {item.icon && <span className=\"flex h-4 w-4 shrink-0 items-center justify-center [&_svg]:h-4 [&_svg]:w-4\">{item.icon}</span>}\n <span>{item.label}</span>\n </>\n );\n const row = item.href ? (\n <a href={item.href} target=\"_blank\" rel=\"noreferrer noopener\" onClick={item.onClick} className={rowClass} data-shell-ui-user-menu-item data-tone={item.tone}>\n {inner}\n </a>\n ) : (\n <button type=\"button\" onClick={item.onClick} disabled={item.disabled} className={rowClass} data-shell-ui-user-menu-item data-tone={item.tone}>\n {inner}\n </button>\n );\n return (\n <div key={item.id}>\n {item.dividerBefore && <div aria-hidden className=\"my-1 h-px bg-border\" />}\n <PopoverClose asChild>{row}</PopoverClose>\n </div>\n );\n })}\n </div>\n );\n}\n","import { LayoutGrid } from 'lucide-react';\nimport type { ReactNode } from 'react';\n\nimport { cn } from '../lib/utils';\n\n/**\n * LayoutSwitcher — ports the `s3p-app-header--layoutButton` from the s3pweb\n * Stencil app into shell-ui as a **stateless, click-emitting** button. The\n * consumer owns the layout state (typically a `useState` persisted to\n * `localStorage`), and is responsible for opening whatever picker modal /\n * drawer wires up to the click.\n *\n * If the consumer wants the keyboard-shortcut behaviour from the original\n * (pressing 1-9 / AZERTY `& é \" ' ( - è _ ç` to jump to a layout), they wire\n * a `window.addEventListener('keydown')` themselves — the component does NOT\n * attach any global listener.\n *\n * Use the `variant` prop to render:\n * - **compact** (default, top-bar): 38×38 ghost-button with the\n * `LayoutGrid` icon + a small primary-coloured badge in the\n * bottom-right corner showing the current value.\n * - **row** (expanded sidebar): full-width footer row matching the other\n * sidebar toggles — icon + label + badge on the right.\n *\n * For collapsed-sidebar mode (where shell-ui falls back to the standard\n * icon button), use `<LayoutNumberIcon>` as the action's `icon` so the\n * number badge is still visible at 16px.\n */\n\nexport interface LayoutSwitcherProps {\n /** Current layout value (typically 1-9). Rendered as the badge. */\n value: number;\n /** Fires when the trigger is clicked. Consumer opens its picker / modal here. */\n onClick?: () => void;\n /**\n * Visual variant:\n * - 'compact' (default): 38×38 ghost-button, icon + corner badge.\n * - 'row': h-8 full-width row, icon + label + trailing badge.\n */\n variant?: 'compact' | 'row';\n /** Title (native tooltip + aria-label prefix). Default 'Gérer les dispositions'. */\n title?: string;\n /** Label shown in the `row` variant. Default = `title`. */\n label?: string;\n /** Extra Tailwind classes on the root button. */\n className?: string;\n}\n\nexport function LayoutSwitcher({ value, onClick, variant = 'compact', title = 'Gérer les dispositions', label, className }: LayoutSwitcherProps) {\n // The trigger title is just `title`; the current value is already shown\n // visually via the badge so appending it as \"(N)\" would double the\n // information and clutter the native tooltip.\n const accessibleTitle = title;\n const visibleLabel = label ?? title;\n\n if (variant === 'row') {\n return (\n <button\n type=\"button\"\n onClick={onClick}\n title={accessibleTitle}\n aria-label={accessibleTitle}\n data-shell-ui-layout-switcher\n data-layout={value}\n data-variant=\"row\"\n className={cn(\n 'inline-flex h-8 w-full cursor-pointer items-center justify-start gap-2 rounded-sm bg-transparent px-3.25 text-xs font-semibold text-foreground outline-none transition-colors hover:bg-secondary hover:text-secondary-foreground focus-visible:ring-2 focus-visible:ring-ring',\n className,\n )}\n >\n <span className=\"mr-2 flex h-4 w-4 shrink-0 items-center justify-center\">\n <LayoutGrid className=\"h-4 w-4\" />\n </span>\n <span className=\"flex-1 truncate text-left\">{visibleLabel}</span>\n <LayoutBadge value={value} />\n </button>\n );\n }\n\n return (\n <button\n type=\"button\"\n onClick={onClick}\n title={accessibleTitle}\n aria-label={accessibleTitle}\n data-shell-ui-layout-switcher\n data-layout={value}\n data-variant=\"compact\"\n className={cn(\n 'relative inline-flex h-9.5 w-9.5 shrink-0 cursor-pointer items-center justify-center rounded-sm bg-transparent text-foreground outline-none transition-colors hover:bg-secondary hover:text-secondary-foreground focus-visible:ring-2 focus-visible:ring-ring',\n className,\n )}\n >\n {/* `shape-rendering` + a compositor layer pin the stroke anti-aliasing\n across hover transitions; without them the SVG re-rasterises during\n `transition-colors` and the strokes appear to flicker thickness. */}\n <LayoutGrid className=\"h-5 w-5 [shape-rendering:geometricPrecision] transform-[translateZ(0)]\" />\n <LayoutBadge value={value} className=\"absolute right-0.5 bottom-0.5\" />\n </button>\n );\n}\n\n/**\n * The primary-coloured number chip used by `<LayoutSwitcher>` and exposed\n * so consumers can drop it next to a custom icon (e.g. inside a row).\n */\nfunction LayoutBadge({ value, className }: { value: number; className?: string }): ReactNode {\n return (\n <span\n aria-hidden\n className={cn('inline-flex h-4 min-w-4 items-center justify-center rounded-sm bg-primary px-1 text-[10px] font-bold leading-none text-primary-foreground', className)}\n >\n {value}\n </span>\n );\n}\n\n/**\n * Icon-slot variant of LayoutSwitcher: a 16×16 `LayoutGrid` with a small\n * primary-coloured number badge overflowing the bottom-right corner. Use\n * as `ShellAction.icon` when the action's `customTrigger` is skipped (e.g.\n * in the collapsed-sidebar fallback) but you still want the badge visible.\n */\nexport function LayoutNumberIcon({ value, className }: { value: number; className?: string }) {\n return (\n <span className={cn('relative inline-flex h-4 w-4 items-center justify-center', className)}>\n <LayoutGrid className=\"h-4 w-4 [shape-rendering:geometricPrecision] transform-[translateZ(0)]\" />\n {/* Badge overlays the bottom-right square of the LayoutGrid and pokes\n 2px past the corner (`-right-0.5 -bottom-0.5` = -2px) so it reads\n as a clear \"badge on icon\" rather than living strictly inside. */}\n <span\n aria-hidden\n className=\"absolute -right-0.5 -bottom-0.5 inline-flex h-2.5 min-w-2.5 items-center justify-center rounded-sm bg-primary px-0.5 text-[8px] font-bold leading-none text-primary-foreground\"\n >\n {value}\n </span>\n </span>\n );\n}\n","/* eslint-disable react-refresh/only-export-components -- the hook and the\n panel component live together by design; the hook IS the public API of\n this module and splitting it would force consumers to import two paths\n for one concept. */\nimport { Pin, PinOff, Puzzle } from 'lucide-react';\nimport { useEffect, useState, type ReactNode } from 'react';\n\nimport { cn } from '../lib/utils';\nimport type { ShellAction } from '../types';\nimport { HoverCard, HoverCardContent, HoverCardTrigger } from './hover-card';\nimport { PopoverClose } from './popover';\n\n/**\n * useActionsMenu — Chrome / Edge \"Extensions\"-style helper. Wraps a list of\n * `ShellAction`s with a per-action pin toggle persisted to localStorage,\n * returning a `visibleActions` array that the consumer hands straight to\n * `<Shell actions={...}>`.\n *\n * Behaviour:\n * - PINNED actions render in the chrome cluster as normal.\n * - UNPINNED actions are hidden from the chrome but remain reachable\n * from inside the puzzle-icon popover that this hook injects.\n * - The puzzle trigger is ALWAYS present in the chrome — it's how the\n * user opens the panel to re-pin things.\n *\n * Storage:\n * The pinned IDs are JSON-stringified in localStorage under\n * `storageKey` (default `'shell-ui:pinnedActions'`). Pass a project-\n * specific key to avoid collisions across apps. `defaultPinned` is\n * used on the very first mount (no localStorage entry yet); default\n * = every action pinned.\n *\n * Out of scope:\n * - Sorting / drag-to-reorder. The action array order is preserved.\n * - Per-action \"can pin\" gates — every passed action is pinnable.\n * If you have an action that should always be visible, keep it\n * OUT of the `actions` array passed here and prepend it manually\n * to whatever you hand to `<Shell>`.\n */\n\nconst DEFAULT_STORAGE_KEY = 'shell-ui:pinnedActions';\n\nexport interface UseActionsMenuOptions {\n /** The full set of actions the user can pin / unpin. */\n actions: ShellAction[];\n /** localStorage key for the pinned id set. Default `'shell-ui:pinnedActions'`. */\n storageKey?: string;\n /**\n * Action IDs pinned by default — used the first time the hook mounts\n * (no localStorage entry yet). Default: every action ID (all pinned).\n */\n defaultPinned?: string[];\n /** Menu trigger label / panel heading. Default `'Actions'`. */\n menuLabel?: string;\n /** Menu trigger placement in the chrome cluster. Default `'trailing'`. */\n menuPlacement?: 'leading' | 'trailing';\n /** Draw a divider after the menu trigger. Default false. */\n menuDividerAfter?: boolean;\n /** Override the menu trigger icon. Default lucide `Puzzle`. */\n menuIcon?: ReactNode;\n /** Override the menu trigger's action id. Default `'__actions-menu__'`. */\n menuId?: string;\n /** Labels for the pin toggle button (i18n). */\n pinLabel?: string;\n unpinLabel?: string;\n}\n\nexport interface UseActionsMenuReturn {\n /** Pass straight to `<Shell actions={...}>`: pinned subset + the menu trigger appended. */\n visibleActions: ShellAction[];\n /** Set of currently-pinned action IDs. */\n pinnedIds: Set<string>;\n /** Pin / unpin imperatively (alongside the panel's pin buttons). */\n togglePin: (id: string) => void;\n}\n\nfunction readStoredPinned(key: string, fallback: string[]): Set<string> {\n if (typeof window === 'undefined') return new Set(fallback);\n try {\n const raw = window.localStorage.getItem(key);\n if (!raw) return new Set(fallback);\n const arr = JSON.parse(raw);\n if (Array.isArray(arr)) return new Set(arr.filter((x: unknown): x is string => typeof x === 'string'));\n } catch {\n /* malformed — fall through */\n }\n return new Set(fallback);\n}\n\nexport function useActionsMenu({\n actions,\n storageKey = DEFAULT_STORAGE_KEY,\n defaultPinned,\n menuLabel = 'Actions',\n menuPlacement = 'trailing',\n menuDividerAfter,\n menuIcon,\n menuId = '__actions-menu__',\n pinLabel = 'Épingler',\n unpinLabel = 'Détacher',\n}: UseActionsMenuOptions): UseActionsMenuReturn {\n const fallback = defaultPinned ?? actions.map(a => a.id);\n const [pinnedIds, setPinnedIds] = useState<Set<string>>(() => readStoredPinned(storageKey, fallback));\n\n useEffect(() => {\n if (typeof window === 'undefined') return;\n window.localStorage.setItem(storageKey, JSON.stringify([...pinnedIds]));\n }, [pinnedIds, storageKey]);\n\n const togglePin = (id: string) => {\n setPinnedIds(prev => {\n const next = new Set(prev);\n if (next.has(id)) next.delete(id);\n else next.add(id);\n return next;\n });\n };\n\n const pinnedActions = actions.filter(a => pinnedIds.has(a.id));\n const menuAction: ShellAction = {\n id: menuId,\n label: menuLabel,\n icon: menuIcon ?? <Puzzle />,\n placement: menuPlacement,\n dividerAfter: menuDividerAfter,\n clickContent: <ActionsMenuPanel actions={actions} pinnedIds={pinnedIds} onTogglePin={togglePin} title={menuLabel} pinLabel={pinLabel} unpinLabel={unpinLabel} />,\n };\n\n return { visibleActions: [...pinnedActions, menuAction], pinnedIds, togglePin };\n}\n\nexport interface ActionsMenuPanelProps {\n actions: ShellAction[];\n pinnedIds: Set<string>;\n onTogglePin: (id: string) => void;\n title?: string;\n pinLabel?: string;\n unpinLabel?: string;\n className?: string;\n}\n\nexport function ActionsMenuPanel({ actions, pinnedIds, onTogglePin, title, pinLabel = 'Épingler', unpinLabel = 'Détacher', className }: ActionsMenuPanelProps) {\n return (\n <div data-shell-ui-actions-menu className={cn('w-64 py-1', className)}>\n {title && <div className=\"px-3 pt-1 pb-2 text-xs font-bold tracking-wide uppercase text-muted-foreground\">{title}</div>}\n <ul>\n {actions.map(action => {\n const pinned = pinnedIds.has(action.id);\n const togglePinTitle = `${pinned ? unpinLabel : pinLabel} — ${action.label}`;\n // Row activation: when the action has an `onClick`, the main row\n // closes the popover and runs it. Otherwise the row is inert\n // (the action's interactivity lives in its `customTrigger` /\n // `clickContent` / `hoverContent` in the chrome).\n const rowInner = (\n <>\n <span className=\"flex h-4 w-4 shrink-0 items-center justify-center [&_svg]:h-4 [&_svg]:w-4\">{action.icon}</span>\n <span className=\"flex-1 truncate\">{action.label}</span>\n </>\n );\n // `title` is omitted when the action carries `hoverContent` — the\n // HoverCard surfaces the rich detail; the native tooltip would\n // create a competing second tooltip near the cursor.\n const rowTitle = action.hoverContent ? undefined : action.label;\n const baseRow = action.onClick ? (\n <PopoverClose asChild>\n <button\n type=\"button\"\n onClick={action.onClick}\n title={rowTitle}\n aria-label={action.label}\n className=\"flex flex-1 cursor-pointer items-center gap-3 rounded-sm bg-transparent px-1 py-1 text-left text-sm text-muted-foreground transition-colors hover:bg-primary/10 hover:text-primary\"\n >\n {rowInner}\n </button>\n </PopoverClose>\n ) : (\n <div\n className={cn(\n 'flex flex-1 items-center gap-3 rounded-sm px-1 py-1 text-left text-sm text-muted-foreground',\n // Hover-info rows still feel interactive (the hover surfaces\n // a detail panel), so they pick up the same cursor + hover\n // bg treatment as the clickable rows.\n action.hoverContent && 'cursor-pointer transition-colors hover:bg-primary/10 hover:text-primary',\n )}\n title={rowTitle}\n >\n {rowInner}\n </div>\n );\n // Wrap the row in a HoverCard when the action carries `hoverContent`\n // so the puzzle menu surfaces the same detail panel the inline\n // chrome button shows — e.g. the realtime status detail.\n const row = action.hoverContent ? (\n <HoverCard openDelay={150} closeDelay={100}>\n <HoverCardTrigger asChild>{baseRow}</HoverCardTrigger>\n <HoverCardContent\n side=\"left\"\n align=\"start\"\n // The row trigger is asymmetric inside its parent popover:\n // ~8 px inset from the parent's left edge (li `px-2`), but\n // ~40 px inset from the right edge (li `px-2` + `gap-1` +\n // 28 px pin button). So a single `sideOffset` can't give\n // the same visible gap on both sides after a Radix flip.\n //\n // We pick `sideOffset=16` for the natural `side=left`\n // placement (8 px trigger inset + 8 px visible gap — matches\n // POPOVER_GAP elsewhere in the shell). When Radix flips to\n // `side=right` (collapsed/expanded sidebar both go this\n // way), we add `ml-8` (32 px) so the effective offset\n // becomes 48 — exactly enough to clear the 40 px trigger\n // inset plus an 8 px visible gap.\n sideOffset={16}\n collisionPadding={8}\n className=\"w-auto p-0 data-[side=right]:ml-8\"\n >\n {action.hoverContent}\n </HoverCardContent>\n </HoverCard>\n ) : (\n baseRow\n );\n return (\n <li key={action.id} className=\"flex items-center gap-1 px-2 py-0.5\" data-shell-ui-actions-menu-row data-pinned={pinned || undefined}>\n {row}\n <button\n type=\"button\"\n onClick={() => onTogglePin(action.id)}\n title={togglePinTitle}\n aria-label={togglePinTitle}\n aria-pressed={pinned}\n data-shell-ui-actions-menu-pin\n data-pinned={pinned || undefined}\n className={cn(\n 'inline-flex h-7 w-7 shrink-0 cursor-pointer items-center justify-center rounded-sm bg-transparent text-muted-foreground transition-colors hover:bg-secondary hover:text-secondary-foreground',\n pinned && 'text-primary',\n )}\n >\n {/* Icon reflects the CLICK ACTION (not the current state): when\n pinned, show PinOff (= \"click to unpin\"); when unpinned,\n show Pin (= \"click to pin\"). */}\n {pinned ? <PinOff className=\"h-4 w-4\" /> : <Pin className=\"h-4 w-4\" />}\n </button>\n </li>\n );\n })}\n </ul>\n </div>\n );\n}\n","/* eslint-disable react-refresh/only-export-components -- the strings\n default + the pair of components live together by design; splitting\n them would force consumers to learn three import paths for one widget. */\nimport { Radio } from 'lucide-react';\nimport type { ReactNode } from 'react';\n\nimport { cn } from '../lib/utils';\n\n/**\n * Realtime / MQTT status indicator. Composes a `Radio` glyph with a small\n * coloured presence dot at the icon's bottom-right corner — same shape the\n * Stencil app's `mqttErrorStatus` widget used, ported to React.\n *\n * Plug it into a pinnable `ShellAction`'s `icon` slot so it renders the\n * same way the framework renders mobile / fullscreen / support — a 38 px\n * ghost icon button when pinned, a 16 px row icon when listed in the\n * puzzle / \"Plus\" menus, a 32 px chip in the collapsed sidebar fallback.\n *\n * Pair with `<RealtimePulseHoverContent>` on the action's `hoverContent`\n * so every surface (top-bar, compact \"Plus\" rows, puzzle menu, collapsed\n * sidebar) shows the status detail on hover.\n */\n\nexport type RealtimeStatus = 'connected' | 'connecting' | 'error' | 'closed' | 'offline';\n\nexport interface RealtimePulseStrings {\n connected: string;\n connecting: string;\n error: string;\n closed: string;\n offline: string;\n lastUpdate: string;\n}\n\n/**\n * French strings — built on top of the Stencil app's `mqttErrorStatusOk` /\n * `mqttErrorStatus` wording (`assets/i18n/fr.json`) but specialized per\n * state. The legacy SaaS only had two messages because its MQTT class\n * exposed binary OK/error; the React port keeps the full five-state\n * lifecycle so users see what's actually happening (in-flight reconnect\n * vs. broker error vs. clean close vs. no network).\n */\nexport const DEFAULT_REALTIME_STRINGS_FR: RealtimePulseStrings = {\n connected: \"Vous êtes actuellement connecté au bus d'événements. Les fonctionnalités temps réel sont disponibles.\",\n connecting: \"Connexion au bus d'événements en cours. Les fonctionnalités temps réel seront disponibles dès que la connexion sera établie.\",\n error: \"Erreur de connexion au bus d'événements. Les fonctionnalités temps réel sont indisponibles.\",\n closed: \"La connexion au bus d'événements a été fermée. Les fonctionnalités temps réel sont indisponibles tant que la connexion ne sera pas rétablie.\",\n offline: 'Vous êtes hors ligne. Les fonctionnalités temps réel seront indisponibles tant que la connexion ne sera pas rétablie.',\n lastUpdate: 'Dernière mise à jour',\n};\n\n/**\n * English equivalents.\n */\nexport const DEFAULT_REALTIME_STRINGS_EN: RealtimePulseStrings = {\n connected: 'You are currently connected to the event bus. Realtime features are available.',\n connecting: 'Connecting to the event bus. Realtime features will be available as soon as the connection is established.',\n error: 'Error connecting to the event bus. Realtime features are unavailable.',\n closed: 'The event bus connection has been closed. Realtime features are unavailable until the connection is re-established.',\n offline: 'You are offline. Realtime features will be unavailable until the connection is re-established.',\n lastUpdate: 'Last update',\n};\n\n/**\n * Status-tinted Radio icon. The Radio glyph uses `currentColor` for its\n * strokes so setting `text-*` on the wrapper tints the whole icon — no\n * extra overlay needed. `connecting` pulses to signal in-flight transit.\n */\nconst ICON_TONE: Record<RealtimeStatus, string> = {\n connected: 'text-success',\n connecting: 'text-warning animate-pulse',\n error: 'text-destructive',\n closed: 'text-destructive',\n offline: 'text-muted-foreground/60',\n};\n\n/**\n * Background equivalents for the hover-card legend dot. MUST be written as\n * literal class strings (not derived from ICON_TONE at runtime): Tailwind only\n * generates utilities for class names it can see statically in the source /\n * built `dist`. A runtime `.replace('text-', 'bg-')` produces strings Tailwind\n * never scans, so those `bg-*` utilities are never emitted and the dot renders\n * colourless for every status except the ones (like `bg-destructive`) that\n * happen to appear literally elsewhere.\n */\nconst DOT_TONE: Record<RealtimeStatus, string> = {\n connected: 'bg-success',\n connecting: 'bg-warning',\n error: 'bg-destructive',\n closed: 'bg-destructive',\n offline: 'bg-muted-foreground/60',\n};\n\nexport function RealtimePulseIcon({ status, className }: { status: RealtimeStatus; className?: string }) {\n return (\n <span className={cn('inline-flex h-full w-full items-center justify-center', ICON_TONE[status], className)} data-shell-ui-realtime-pulse data-status={status}>\n <Radio />\n </span>\n );\n}\n\n/**\n * Hover-info content rendered in a HoverCard. Pair with the icon via\n * `ShellAction.hoverContent` so the framework wraps every surface in a\n * HoverCard automatically.\n */\nexport function RealtimePulseHoverContent({\n status,\n lastUpdate,\n strings = DEFAULT_REALTIME_STRINGS_FR,\n}: {\n status: RealtimeStatus;\n lastUpdate?: string;\n strings?: RealtimePulseStrings;\n}): ReactNode {\n // Re-use the icon's status colour for the leading dot so the popover\n // legend reads as the same indicator at a glance. Uses the static\n // DOT_TONE map (not a runtime-derived class) so Tailwind actually emits\n // the `bg-*` utilities — see the note on DOT_TONE above.\n const dotColor = DOT_TONE[status];\n return (\n <div className=\"w-72 p-3 text-xs leading-snug\">\n <div className=\"flex items-start gap-2 text-foreground\">\n <span aria-hidden className={cn('mt-1 h-2 w-2 shrink-0 rounded-full', dotColor)} />\n <span>{strings[status]}</span>\n </div>\n {lastUpdate && (\n <div className=\"mt-2 pl-4 text-muted-foreground\">\n {strings.lastUpdate} : <span className=\"font-medium text-foreground\">{lastUpdate}</span>\n </div>\n )}\n </div>\n );\n}\n"],"mappings":"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"}
|