@the-portland-company/shell 0.28.0 → 0.28.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.
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/theme/tokens.generated.ts","../src/theme/colors.ts","../src/theme/components.ts","../src/theme/index.ts","../src/components/Card.tsx","../src/components/PageContainer.tsx","../src/components/PageHeader.tsx","../src/components/BreadcrumbBar.tsx","../src/components/HeaderTabBar.tsx","../src/providers/GlobalUiIdProvider.tsx","../src/providers/ShellProvider.tsx","../src/hooks/useShellAuth.ts","../src/hooks/useAppRegistry.ts","../src/hooks/useShellOrganization.ts","../src/hooks/useShellLinkedAccounts.ts","../src/hooks/useShellSupport.ts","../src/hooks/useShellChrome.ts","../src/hooks/useShellMode.ts","../src/hooks/useShellNavItems.ts","../src/hooks/useShellNavigationPreference.ts","../src/hooks/useShellRole.ts","../src/hooks/useShellFooter.ts","../src/components/BrandLogo.tsx","../src/lib/userDisplay.ts","../src/lib/resolveModeConfig.ts","../src/theme-preference.ts","../src/components/UserMenu.tsx","../src/components/Header.tsx","../src/components/BrandIcon.tsx","../src/components/NavItem.tsx","../src/lib/orgColors.ts","../src/components/internal/orgBadge.tsx","../src/components/OrgPill.tsx","../src/components/ModePill.tsx","../src/components/CommitCopyButton.tsx","../src/components/Sidebar.tsx","../src/components/Footer.tsx","../src/components/AppLayout.tsx","../src/lib/brandGlyphs.tsx","../src/lib/topbarIconSlot.ts","../src/components/TopBarIcon.tsx","../src/components/SupportRequestButton.tsx","../src/components/ShellChrome.tsx","../src/sw/registerShellPrecache.ts","../src/speculation/emitRules.ts"],"names":["extendTheme","jsxs","jsx","clsx","Link","Tooltip","useLocation","useEffect","createContext","useState","useMemo","ChakraProvider","useContext","Box","Text","HStack","useNavigate","useColorModeValue","Flex","Menu","MenuButton","Avatar","VStack","FiChevronDown","Portal","MenuList","MenuItem","FiUser","FiRotateCcw","FiBriefcase","MenuDivider","Badge","Fragment","IconButton","FiTrash2","FiUserPlus","FiLogOut","FiMenu","NavLink","Collapse","Image","useClipboard","keyframes","Skeleton","Button","Icon","FiX","FiBatteryCharging","FiBattery","FiZap","FiGrid","FiBell","FiAlertTriangle","FiAlertCircle","FiLifeBuoy","FiHelpCircle","FiMoon","FiSun","FiInfo","FiMail","FiMessageSquare","FiSettings","forwardRef","TopBarIcon","useDisclosure","useToast","useCallback","Modal","ModalOverlay","ModalContent","ModalHeader","ModalCloseButton","ModalBody","Textarea","ModalFooter"],"mappings":"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","file":"index.cjs","sourcesContent":["// GENERATED by scripts/gen-tokens.mjs from Specs (/api/tokens). DO NOT EDIT.\n// The Chakra theme imports these so its colors derive from the same source\n// of truth (Admin Brand API → Specs) as chrome.css.\n// brandRamp = Specs colors.raceRed (primary brand), not shellChrome.brandRamp.\n\nexport const brandRamp = { 50: '#FDECEE', 100: '#FCE0E3', 200: '#F8B6BD', 300: '#EF6671', 400: '#EA4751', 500: '#E63946', 600: '#C42E3A', 700: '#9F252E', 800: '#660F17', 900: '#39080D' } as const;\nexport const grayRamp = { 50: '#F7FAFC', 100: '#EDF2F7', 200: '#E2E8F0', 300: '#CBD5E0', 400: '#A0AEC0', 500: '#718096', 600: '#4A5568', 700: '#2D3748', 800: '#1A202C', 900: '#171923' } as const;\nexport const buttonPrimaryBg = '#E63946';\nexport const buttonPrimaryBgHover = '#C42E3A';\nexport const fieldFocus = '#E63946';\n","// Theme color definitions for light and dark modes.\n// The primary brand ramp is GENERATED from Specs (the styling source of truth)\n// so the Chakra theme stays in lockstep with chrome.css — edit it in Admin →\n// sync to Specs → `npm run gen:tokens`, never hand-edit the ramp here.\nimport { brandRamp } from './tokens.generated';\n\nexport const colors = {\n // Primary brand = Specs race-red (#E63946 ramp). Generated via gen:tokens.\n brand: { ...brandRamp },\n\n // Politogy Brand Colors\n politogy: {\n // Legacy Blue - kept for reference\n blue: {\n 50: '#e8f4fd',\n 100: '#bee3f8',\n 200: '#90cdf4',\n 300: '#63b3ed',\n 400: '#4299e1',\n 500: '#3182ce',\n 600: '#2b6cb0',\n 700: '#2c5282',\n 800: '#2a4365',\n 900: '#1a365d',\n },\n // Race-red (Specs primary brand). Same ramp as `brand`.\n red: { ...brandRamp },\n // Navy - Professional & Authoritative\n navy: {\n 50: '#e8eef6',\n 100: '#c5d4e8',\n 200: '#9fb8d9',\n 300: '#789cca',\n 400: '#5b86be',\n 500: '#3e70b2',\n 600: '#325a8e',\n 700: '#26446a',\n 800: '#1a2e47',\n 900: '#0e1823',\n },\n // White & Off-white\n white: '#ffffff',\n offWhite: '#f8fafc',\n // Text colors\n text: {\n primary: '#1a202c',\n secondary: '#4a5568',\n muted: '#718096',\n light: '#a0aec0',\n },\n },\n\n // Semantic color tokens that will switch based on color mode\n gray: {\n 50: '#f7fafc',\n 100: '#edf2f7',\n 200: '#e2e8f0',\n 300: '#cbd5e0',\n 400: '#a0aec0',\n 500: '#718096',\n 600: '#4a5568',\n 700: '#2d3748',\n 800: '#1a202c',\n 900: '#171923',\n },\n};\n\n// Semantic tokens for automatic color mode switching\nexport const semanticTokens = {\n colors: {\n // Text colors\n 'text.primary': {\n default: 'gray.900',\n _dark: 'gray.50',\n },\n 'text.secondary': {\n default: 'gray.600',\n _dark: 'gray.400',\n },\n 'text.muted': {\n default: 'gray.500',\n _dark: 'gray.500',\n },\n\n // Background colors\n 'bg.primary': {\n default: 'white',\n _dark: 'gray.800',\n },\n 'bg.secondary': {\n default: 'gray.50',\n _dark: 'gray.900',\n },\n 'bg.surface': {\n default: 'white',\n _dark: 'gray.700',\n },\n 'bg.hover': {\n default: 'gray.50',\n _dark: 'gray.600',\n },\n\n // Border colors\n 'border.default': {\n default: 'gray.200',\n _dark: 'gray.600',\n },\n 'border.muted': {\n default: 'gray.100',\n _dark: 'gray.700',\n },\n\n // Component specific\n 'card.bg': {\n default: 'white',\n _dark: 'gray.700',\n },\n 'card.border': {\n default: 'gray.200',\n _dark: 'gray.600',\n },\n 'input.bg': {\n default: 'white',\n _dark: 'gray.700',\n },\n 'input.border': {\n default: 'gray.200',\n _dark: 'gray.600',\n },\n 'input.hover': {\n default: 'gray.400',\n _dark: 'gray.500',\n },\n\n // Navigation\n 'nav.bg': {\n default: 'white',\n _dark: 'gray.800',\n },\n 'nav.border': {\n default: 'gray.200',\n _dark: 'gray.700',\n },\n\n // Sidebar\n 'sidebar.bg': {\n default: 'gray.50',\n _dark: 'gray.900',\n },\n 'sidebar.hover': {\n default: 'gray.100',\n _dark: 'gray.800',\n },\n 'sidebar.active': {\n default: 'brand.50',\n _dark: 'brand.900',\n },\n\n // Status colors\n 'success.bg': {\n default: 'green.50',\n _dark: 'green.900',\n },\n 'error.bg': {\n default: 'red.50',\n _dark: 'red.900',\n },\n 'warning.bg': {\n default: 'yellow.50',\n _dark: 'yellow.900',\n },\n 'info.bg': {\n default: 'blue.50',\n _dark: 'blue.900',\n },\n },\n};\n","// Component style overrides for theme using Politogy brand colors\nexport const components = {\n Button: {\n baseStyle: {\n fontWeight: 'medium',\n },\n defaultProps: {\n colorScheme: 'brand',\n },\n variants: {\n primary: {\n bg: 'brand.500',\n color: 'white',\n _hover: {\n bg: 'brand.600',\n _disabled: {\n bg: 'brand.500',\n },\n },\n _active: {\n bg: 'brand.700',\n },\n },\n secondary: {\n borderWidth: '1px',\n borderColor: 'gray.300',\n bg: 'white',\n color: 'gray.700',\n _hover: {\n bg: 'gray.50',\n },\n },\n solid: (props: { colorScheme: string }) => {\n const { colorScheme: c } = props;\n // For brand colorScheme, use explicit colors\n if (c === 'brand') {\n return {\n bg: 'brand.500',\n color: 'white',\n _hover: {\n bg: 'brand.600',\n _disabled: {\n bg: 'brand.500',\n },\n },\n _active: {\n bg: 'brand.700',\n },\n };\n }\n // For other colorSchemes, use standard pattern with explicit bg and white text\n return {\n bg: `${c}.500`,\n color: 'white',\n _hover: {\n bg: `${c}.600`,\n _disabled: {\n bg: `${c}.500`,\n },\n },\n _active: {\n bg: `${c}.700`,\n },\n };\n },\n ghost: (props: { colorScheme: string }) => {\n const { colorScheme: c } = props;\n return {\n color: `${c}.600`,\n _hover: {\n bg: `${c}.50`,\n },\n };\n },\n outline: (props: { colorScheme: string }) => {\n const { colorScheme: c } = props;\n return {\n borderColor: `${c}.500`,\n color: `${c}.600`,\n _hover: {\n bg: `${c}.50`,\n },\n };\n },\n link: {\n color: 'brand.500',\n _hover: {\n color: 'brand.600',\n textDecoration: 'underline',\n },\n },\n },\n },\n\n Heading: {\n baseStyle: {\n color: 'politogy.navy.800',\n fontWeight: 'semibold',\n },\n },\n\n Card: {\n baseStyle: {\n container: {\n bg: 'card.bg',\n borderWidth: '1px',\n borderColor: 'card.border',\n borderRadius: 'lg',\n },\n },\n },\n\n Input: {\n baseStyle: {\n field: {\n bg: 'input.bg',\n borderColor: 'var(--mode-input-border-color)',\n _hover: {\n borderColor: 'var(--mode-input-hover-border-color)',\n },\n _focus: {\n borderColor: 'var(--mode-primary-color)',\n boxShadow: '0 0 0 1px var(--mode-input-focus-shadow-color)',\n },\n },\n },\n defaultProps: {\n variant: 'outline',\n },\n variants: {\n outline: {\n field: {\n borderColor: 'var(--mode-input-border-color)',\n _hover: {\n borderColor: 'var(--mode-input-hover-border-color)',\n },\n _focus: {\n borderColor: 'var(--mode-primary-color)',\n boxShadow: '0 0 0 1px var(--mode-input-focus-shadow-color)',\n },\n },\n },\n },\n },\n\n NumberInput: {\n defaultProps: {\n variant: 'outline',\n },\n variants: {\n outline: {\n field: {\n borderColor: 'var(--mode-input-border-color)',\n _hover: {\n borderColor: 'var(--mode-input-hover-border-color)',\n },\n _focus: {\n borderColor: 'var(--mode-primary-color)',\n boxShadow: '0 0 0 1px var(--mode-input-focus-shadow-color)',\n },\n },\n },\n },\n },\n\n Select: {\n baseStyle: {\n field: {\n bg: 'input.bg',\n borderColor: 'var(--mode-input-border-color)',\n _hover: {\n borderColor: 'var(--mode-input-hover-border-color)',\n },\n _focus: {\n borderColor: 'var(--mode-primary-color)',\n boxShadow: '0 0 0 1px var(--mode-input-focus-shadow-color)',\n },\n },\n },\n defaultProps: {\n variant: 'outline',\n },\n variants: {\n outline: {\n field: {\n borderColor: 'var(--mode-input-border-color)',\n _hover: {\n borderColor: 'var(--mode-input-hover-border-color)',\n },\n _focus: {\n borderColor: 'var(--mode-primary-color)',\n boxShadow: '0 0 0 1px var(--mode-input-focus-shadow-color)',\n },\n },\n },\n },\n },\n\n Textarea: {\n baseStyle: {\n bg: 'input.bg',\n borderColor: 'var(--mode-input-border-color)',\n _hover: {\n borderColor: 'var(--mode-input-hover-border-color)',\n },\n _focus: {\n borderColor: 'var(--mode-primary-color)',\n boxShadow: '0 0 0 1px var(--mode-input-focus-shadow-color)',\n },\n },\n defaultProps: {\n variant: 'outline',\n },\n variants: {\n outline: {\n borderColor: 'var(--mode-input-border-color)',\n _hover: {\n borderColor: 'var(--mode-input-hover-border-color)',\n },\n _focus: {\n borderColor: 'var(--mode-primary-color)',\n boxShadow: '0 0 0 1px var(--mode-input-focus-shadow-color)',\n },\n },\n },\n },\n\n Menu: {\n baseStyle: {\n list: {\n bg: 'bg.surface',\n borderColor: 'var(--mode-input-border-color)',\n boxShadow: 'lg',\n },\n item: {\n bg: 'transparent',\n _hover: {\n bg: 'bg.hover',\n },\n _focus: {\n bg: 'bg.hover',\n },\n },\n },\n },\n\n Modal: {\n baseStyle: {\n dialog: {\n bg: 'bg.surface',\n },\n overlay: {\n bg: 'blackAlpha.600',\n },\n },\n },\n\n Popover: {\n baseStyle: {\n content: {\n bg: 'bg.surface',\n borderColor: 'border.default',\n boxShadow: 'lg',\n },\n },\n },\n\n Drawer: {\n baseStyle: {\n dialog: {\n bg: 'bg.surface',\n },\n overlay: {\n bg: 'blackAlpha.600',\n },\n },\n },\n\n Tabs: {\n baseStyle: {\n root: {\n width: '100%',\n },\n tablist: {\n width: '100%',\n alignItems: 'flex-end',\n gap: 'var(--app-tab-gap)',\n },\n tabpanels: {\n width: '100%',\n },\n tabpanel: {\n width: '100%',\n },\n tab: {\n minHeight: 'var(--app-tab-height)',\n height: 'var(--app-tab-height)',\n lineHeight: 1,\n borderTopLeftRadius: 'var(--app-tab-radius)',\n borderTopRightRadius: 'var(--app-tab-radius)',\n borderBottomLeftRadius: 0,\n borderBottomRightRadius: 0,\n color: 'text.secondary',\n _selected: {\n color: 'white',\n bg: 'brand.500',\n borderColor: 'brand.500',\n fontWeight: 'semibold',\n },\n _hover: {\n bg: 'gray.100',\n },\n },\n },\n variants: {\n enclosed: {\n tab: {\n color: 'gray.600',\n bg: 'transparent',\n borderColor: 'gray.200',\n _selected: {\n color: 'white',\n bg: 'brand.500',\n borderColor: 'brand.500',\n borderBottomColor: 'brand.500',\n },\n _hover: {\n bg: 'gray.100',\n },\n },\n },\n 'enclosed-colored': {\n tab: {\n color: 'gray.600',\n _selected: {\n color: 'white',\n bg: 'brand.500',\n },\n },\n },\n 'soft-rounded': {\n tab: {\n color: 'gray.600',\n _selected: {\n color: 'white',\n bg: 'brand.500',\n },\n },\n },\n 'solid-rounded': {\n tab: {\n color: 'gray.600',\n _selected: {\n color: 'white',\n bg: 'brand.500',\n },\n },\n },\n line: {\n tab: {\n color: 'gray.600',\n _selected: {\n color: 'white',\n bg: 'brand.500',\n borderColor: 'brand.500',\n },\n _hover: {\n bg: 'gray.100',\n },\n },\n },\n unstyled: {\n tab: {\n // Allow inline styles to take precedence for unstyled variant\n },\n },\n },\n defaultProps: {\n colorScheme: 'brand',\n },\n },\n\n Badge: {\n baseStyle: {\n borderRadius: 'md',\n px: 2,\n py: 1,\n fontWeight: 'medium',\n },\n defaultProps: {\n colorScheme: 'brand',\n },\n },\n\n Link: {\n baseStyle: {\n color: 'brand.500',\n _hover: {\n color: 'brand.600',\n textDecoration: 'underline',\n },\n },\n },\n\n Alert: {\n baseStyle: {\n container: {\n borderRadius: 'md',\n },\n },\n variants: {\n subtle: (props: { colorScheme: string }) => {\n const { colorScheme: c } = props;\n // Keep info alerts blue\n if (c === 'blue' || c === 'info') {\n return {\n container: {\n bg: 'blue.50',\n },\n icon: {\n color: 'blue.500',\n },\n title: {\n color: 'blue.800',\n },\n description: {\n color: 'blue.700',\n },\n };\n }\n return {};\n },\n 'left-accent': (props: { colorScheme: string }) => {\n const { colorScheme: c } = props;\n if (c === 'blue' || c === 'info') {\n return {\n container: {\n bg: 'blue.50',\n borderLeftColor: 'blue.500',\n },\n icon: {\n color: 'blue.500',\n },\n };\n }\n return {};\n },\n solid: (props: { colorScheme: string }) => {\n const { colorScheme: c } = props;\n if (c === 'blue' || c === 'info') {\n return {\n container: {\n bg: 'blue.500',\n color: 'white',\n },\n };\n }\n return {};\n },\n },\n },\n\n Table: {\n baseStyle: {\n table: {\n width: '100%',\n borderCollapse: 'collapse',\n borderSpacing: '0',\n borderColor: 'gray.200',\n },\n th: {\n borderColor: 'gray.200',\n borderBottom: 'none',\n bg: 'gray.200',\n color: 'text.secondary',\n fontWeight: 'semibold',\n px: 3,\n py: 2.5,\n minHeight: '44px',\n height: '44px',\n verticalAlign: 'middle',\n },\n td: {\n borderColor: 'gray.200',\n borderBottom: 'none',\n px: 3,\n py: 2.5,\n minHeight: '44px',\n height: '44px',\n verticalAlign: 'middle',\n },\n tr: {\n borderBottom: 'none',\n borderColor: 'transparent',\n _odd: {\n bg: 'white',\n },\n _even: {\n bg: 'gray.50',\n },\n _hover: {\n bg: 'gray.100',\n },\n },\n tbody: {\n tr: {\n _odd: {\n bg: 'white',\n },\n _even: {\n bg: 'gray.50',\n },\n _hover: {\n bg: 'blue.100',\n },\n },\n },\n },\n variants: {\n simple: {},\n striped: {},\n },\n defaultProps: {\n variant: 'striped',\n },\n },\n\n Divider: {\n baseStyle: {\n borderColor: 'border.default',\n },\n },\n};\n","import { extendTheme } from '@chakra-ui/react';\nimport { colors, semanticTokens } from './colors';\nimport { components } from './components';\n\n// Define the theme configuration\nconst config = {\n initialColorMode: 'light', // Always use light theme\n useSystemColorMode: false, // Disable system color mode detection\n};\n\n// Global styles\nconst styles = {\n global: () => ({\n body: {\n bg: 'white',\n color: 'gray.900',\n },\n ':root': {\n '--mode-primary-color': 'var(--app-color-brand-500)',\n '--mode-input-border-color': 'var(--app-color-brand-500)',\n '--mode-input-hover-border-color': 'var(--app-color-brand-600)',\n '--mode-input-focus-shadow-color': 'var(--app-color-brand-500)',\n },\n // Ensure non-Chakra/native text-like inputs follow mode border colors as well.\n 'input:not([type=\"checkbox\"]):not([type=\"radio\"]):not([type=\"range\"]):not([type=\"file\"]):not([type=\"color\"]), textarea, select':\n {\n borderColor: 'var(--mode-input-border-color)',\n },\n 'input:not([type=\"checkbox\"]):not([type=\"radio\"]):not([type=\"range\"]):not([type=\"file\"]):not([type=\"color\"]):hover, textarea:hover, select:hover':\n {\n borderColor: 'var(--mode-input-hover-border-color)',\n },\n 'input:not([type=\"checkbox\"]):not([type=\"radio\"]):not([type=\"range\"]):not([type=\"file\"]):not([type=\"color\"]):focus, textarea:focus, select:focus':\n {\n borderColor: 'var(--mode-primary-color)',\n boxShadow: '0 0 0 1px var(--mode-input-focus-shadow-color)',\n },\n }),\n};\n\n// Fonts\nconst fonts = {\n heading: '-apple-system, BlinkMacSystemFont, \"Segoe UI\", Helvetica, Arial, sans-serif',\n body: '-apple-system, BlinkMacSystemFont, \"Segoe UI\", Helvetica, Arial, sans-serif',\n mono: 'SFMono-Regular, Menlo, Monaco, Consolas, \"Liberation Mono\", \"Courier New\", monospace',\n};\n\n// Create and export the theme\nexport const politogyTheme = extendTheme({\n config,\n colors,\n semanticTokens,\n components,\n styles,\n fonts,\n\n // Additional theme configurations\n shadows: {\n outline: '0 0 0 3px var(--app-color-brand-500)',\n },\n\n radii: {\n none: '0',\n sm: '0.125rem',\n base: '0.25rem',\n md: '0.375rem',\n lg: '0.5rem',\n xl: '0.75rem',\n '2xl': '1rem',\n '3xl': '1.5rem',\n full: '9999px',\n },\n});\n\nexport { politogyTheme as default };\n","import type { CSSProperties, ReactNode } from 'react';\ntype CardProps = {\n title?: string;\n children: ReactNode;\n minH?: string | number;\n className?: string;\n style?: CSSProperties;\n [key: string]: unknown;\n};\n\nexport default function Card({\n title,\n children,\n minH,\n className,\n style,\n ...props\n}: CardProps) {\n return (\n <div\n className={`rounded-lg border border-slate-200 bg-white p-6 shadow-sm ${className || ''}`}\n style={{ minHeight: minH, ...style }}\n {...props}\n >\n {title && <h3 className=\"mb-4 text-lg font-semibold\">{title}</h3>}\n {children}\n </div>\n );\n}\n","import type { ReactNode } from 'react';\nimport clsx from 'clsx';\n\ntype PageContainerProps = {\n children: ReactNode;\n maxW?: string;\n px?: number | string;\n py?: number | string;\n lockHeight?: boolean;\n};\n\nexport default function PageContainer({\n children,\n maxW = 'container.xl',\n px,\n py,\n lockHeight = true,\n}: PageContainerProps) {\n const isFullWidth = maxW === 'full';\n const effectivePx = isFullWidth ? 0 : px === undefined ? 4 : Number(px);\n const effectivePy = py === undefined ? (isFullWidth ? 0 : 4) : py;\n const pxValue = String(effectivePx);\n const pyValue = String(effectivePy);\n\n const maxWClass = isFullWidth\n ? 'max-w-none'\n : maxW === 'container.xl'\n ? 'max-w-7xl'\n : maxW === 'container.lg'\n ? 'max-w-6xl'\n : maxW === 'container.md'\n ? 'max-w-5xl'\n : typeof maxW === 'string' && /^(\\d+)px$/.test(maxW)\n ? ''\n : 'max-w-7xl';\n\n const pxClass =\n pxValue === '0'\n ? 'px-0'\n : pxValue === '1'\n ? 'px-1'\n : pxValue === '2'\n ? 'px-2'\n : pxValue === '3'\n ? 'px-3'\n : pxValue === '4'\n ? 'px-4'\n : 'px-4';\n\n const pyClass =\n pyValue === '0'\n ? 'py-0'\n : pyValue === '4'\n ? 'py-4'\n : pyValue === '5'\n ? 'py-5'\n : pyValue === '6'\n ? 'py-6'\n : 'py-6';\n\n const inlineMaxWStyle =\n typeof maxW === 'string' && /^(\\d+)px$/.test(maxW) ? { maxWidth: maxW } : undefined;\n\n return (\n <main\n className={lockHeight ? 'h-[calc(100vh-80px)] min-h-[calc(100vh-80px)]' : ''}\n style={{ background: 'var(--app-tab-content-bg)' }}\n >\n <div\n className={clsx(\n 'mx-auto w-full',\n maxWClass,\n pxClass,\n pyClass,\n lockHeight ? 'h-full' : 'h-auto'\n )}\n style={inlineMaxWStyle}\n >\n {children}\n </div>\n </main>\n );\n}\n","import { Link } from 'react-router-dom';\nimport clsx from 'clsx';\nimport type { ReactNode } from 'react';\n\ntype BreadcrumbItem = {\n label: string;\n href?: string;\n};\n\ntype PageHeaderProps = {\n title?: ReactNode;\n breadcrumbs?: BreadcrumbItem[];\n actions?: ReactNode;\n tabBar?: ReactNode;\n maxW?: string;\n hideSidebar?: boolean;\n};\n\nconst resolveMaxWidthClass = (maxW: string) => {\n if (maxW === 'full') return 'max-w-none';\n if (maxW === 'container.lg') return 'max-w-6xl';\n if (maxW === 'container.md') return 'max-w-5xl';\n return 'max-w-7xl';\n};\n\nexport default function PageHeader({\n title,\n breadcrumbs = [],\n actions = null,\n tabBar = null,\n maxW = 'full',\n hideSidebar = false,\n}: PageHeaderProps) {\n const maxWClass = resolveMaxWidthClass(maxW);\n const titleText = typeof title === 'string' ? title.trim() : '';\n const normalizedTitle = titleText.toLowerCase();\n const breadcrumbsWithoutCurrent = [...breadcrumbs];\n const last = breadcrumbsWithoutCurrent[breadcrumbsWithoutCurrent.length - 1];\n // Only remove a trailing breadcrumb that duplicates the page title when there's\n // still at least one breadcrumb left to show.\n if (\n breadcrumbsWithoutCurrent.length > 1 &&\n normalizedTitle &&\n last &&\n last.label.trim().toLowerCase() === normalizedTitle\n ) {\n breadcrumbsWithoutCurrent.pop();\n }\n\n // Avoid rendering an empty header bar (no title, no breadcrumbs, no actions, no tabs).\n if (!title && breadcrumbsWithoutCurrent.length === 0 && !actions && !tabBar) {\n return null;\n }\n\n return (\n <div\n style={{ backgroundColor: 'var(--app-tab-header-bg, #888888)' }}\n className={clsx('text-slate-100', tabBar ? 'pt-3 pb-0' : 'py-3 border-b border-gray-200', {\n 'md:ml-60': !hideSidebar,\n })}\n >\n <div className={clsx('w-full px-4', maxWClass)}>\n <div className=\"flex w-full flex-nowrap items-start justify-between gap-4\">\n <div className=\"min-w-0 flex-1\">\n {title ? (\n <div className=\"min-w-0\">\n <div className=\"truncate text-lg font-semibold text-white\">{title}</div>\n </div>\n ) : null}\n {breadcrumbsWithoutCurrent.length > 0 ? (\n <nav\n aria-label=\"Breadcrumb\"\n className={clsx('min-w-0 text-slate-100', title ? 'mt-1' : '')}\n >\n <ol className=\"flex flex-nowrap items-center gap-2 overflow-hidden text-sm text-gray-600\">\n {breadcrumbsWithoutCurrent.map((item, index) => (\n <li\n key={`${item.label}-${index}`}\n className=\"flex min-w-0 flex-shrink-0 items-center gap-2\"\n >\n {index > 0 ? <span className=\"text-gray-400\">&gt;</span> : null}\n {item.href ? (\n <Link to={item.href} className=\"truncate text-slate-100 hover:underline\">\n {item.label}\n </Link>\n ) : (\n <span className=\"truncate text-slate-100\">{item.label}</span>\n )}\n </li>\n ))}\n </ol>\n </nav>\n ) : null}\n </div>\n {actions ? <div className=\"flex-shrink-0\">{actions}</div> : null}\n </div>\n </div>\n {tabBar ? (\n <div className=\"m-0 w-full px-0\" style={{ backgroundColor: 'transparent' }}>\n {tabBar}\n </div>\n ) : null}\n </div>\n );\n}\n","import type { ReactNode } from 'react';\nimport { Link } from 'react-router-dom';\nimport clsx from 'clsx';\n\ntype BreadcrumbItem = {\n label: string;\n href?: string;\n};\n\ntype BreadcrumbBarProps = {\n breadcrumbs?: BreadcrumbItem[];\n actions?: ReactNode;\n maxW?: string;\n};\n\nexport default function BreadcrumbBar({\n breadcrumbs = [],\n actions = null,\n maxW = 'full',\n}: BreadcrumbBarProps) {\n if ((!breadcrumbs || breadcrumbs.length === 0) && !actions) {\n return null;\n }\n\n const maxWClass =\n maxW === 'full'\n ? 'max-w-none'\n : maxW === 'container.xl'\n ? 'max-w-7xl'\n : maxW === 'container.lg'\n ? 'max-w-6xl'\n : maxW === 'container.md'\n ? 'max-w-5xl'\n : 'max-w-7xl';\n\n return (\n <div\n className=\"ml-0 border-b border-gray-200 px-4 py-3 md:ml-60\"\n style={{ backgroundColor: 'var(--app-tab-header-bg, #888888)' }}\n >\n <div className={clsx('mx-auto w-full px-0', maxWClass)}>\n <div className=\"flex w-full items-center justify-between\">\n {breadcrumbs && breadcrumbs.length > 0 && (\n <nav aria-label=\"Breadcrumb\">\n <ol className=\"flex items-center gap-2 text-sm text-slate-100\">\n {breadcrumbs.map((item, index) => (\n <li key={index} className=\"flex items-center gap-2\">\n {index > 0 ? <span className=\"text-gray-400\">&gt;</span> : null}\n {item.href ? (\n <Link to={item.href} className=\"text-slate-100 hover:underline\">\n {item.label}\n </Link>\n ) : (\n <span className=\"text-slate-100\">{item.label}</span>\n )}\n </li>\n ))}\n </ol>\n </nav>\n )}\n {actions && <div>{actions}</div>}\n </div>\n </div>\n </div>\n );\n}\n","import clsx from 'clsx';\nimport type { ReactNode } from 'react';\nimport { Tooltip } from '@chakra-ui/react';\n\nexport type HeaderTabBarItem = {\n id: string;\n label: string;\n icon: ReactNode;\n disabled?: boolean;\n};\n\ntype HeaderTabBarProps = {\n items: HeaderTabBarItem[];\n activeId: string;\n onChange: (id: string) => void;\n className?: string;\n ariaLabel?: string;\n};\n\nexport default function HeaderTabBar({\n items,\n activeId,\n onChange,\n className,\n ariaLabel = 'Tabs',\n}: HeaderTabBarProps) {\n return (\n <div\n role=\"tablist\"\n aria-label={ariaLabel}\n className={clsx(\n // Header-wide tab strip: background + bottom border only (no outer box).\n 'app-header-tab-bar m-0 flex w-full bg-slate-100 p-0',\n 'border-b border-slate-200',\n className\n )}\n >\n {items.map((item, idx) => {\n const isActive = item.id === activeId;\n const isDisabled = Boolean(item.disabled);\n return (\n <Tooltip\n key={item.id}\n label={item.label}\n placement=\"top\"\n hasArrow\n bg=\"black\"\n color=\"white\"\n isDisabled={isDisabled}\n >\n <button\n type=\"button\"\n role=\"tab\"\n aria-selected={isActive}\n aria-label={item.label}\n disabled={isDisabled}\n onClick={() => onChange(item.id)}\n className={clsx(\n 'app-header-tab-button relative inline-flex flex-1 items-center justify-center',\n 'transition-colors',\n 'rounded-none',\n idx === 0 ? 'rounded-tl-lg' : null,\n idx === items.length - 1 ? 'rounded-tr-lg' : null,\n isActive\n ? 'text-white'\n : 'bg-transparent text-slate-600 hover:bg-white/60 hover:text-slate-900',\n isDisabled ? 'cursor-not-allowed opacity-50' : null\n )}\n style={{\n background: isActive\n ? 'var(--mode-primary-color, var(--app-btn-primary-bg))'\n : undefined,\n }}\n >\n <span className=\"inline-flex items-center justify-center text-[14px] leading-none\">\n {item.icon}\n </span>\n </button>\n </Tooltip>\n );\n })}\n </div>\n );\n}\n","import { useEffect } from 'react';\nimport { useLocation } from 'react-router-dom';\n\n// Inlined feature-flag check (originally in react/app/src/utils/runtimeFeatureFlags.ts).\n// The shell package is self-contained; keeping this helper local avoids a\n// cross-app import while preserving identical runtime behavior.\nconst FLAG_PREFIX = ['__', 'politogy', 'enable'].join('');\nconst GLOBAL_UI_IDS_FLAG = [FLAG_PREFIX, 'global', 'ui', 'ids'].join('_');\n\nfunction isFlagEnabled(name: string): boolean {\n if (typeof window === 'undefined') return false;\n\n try {\n const params = new URLSearchParams(window.location.search);\n if (params.get(name) === '1') return true;\n } catch {\n // Ignore malformed location access.\n }\n\n try {\n return window.localStorage.getItem(name) === '1';\n } catch {\n return false;\n }\n}\n\nfunction isGlobalUiIdsEnabled(): boolean {\n return isFlagEnabled(GLOBAL_UI_IDS_FLAG);\n}\n\nconst TARGET_SELECTOR = [\n 'main',\n 'header',\n 'footer',\n 'aside',\n 'nav',\n 'section',\n '[role=\"region\"]',\n '[role=\"banner\"]',\n '[role=\"main\"]',\n '[role=\"navigation\"]',\n '[role=\"complementary\"]',\n 'button',\n '[role=\"button\"]',\n 'a[role=\"button\"]',\n 'input',\n 'textarea',\n 'select',\n '[role=\"combobox\"]',\n '[role=\"listbox\"]',\n '[role=\"option\"]',\n '[role=\"textbox\"]',\n '[role=\"tablist\"]',\n '[role=\"tab\"]',\n '[role=\"tabpanel\"]',\n '[role=\"menu\"]',\n '[role=\"menuitem\"]',\n '[role=\"menuitemcheckbox\"]',\n '[role=\"menuitemradio\"]',\n 'svg',\n '[data-icon]',\n].join(',');\n\nfunction sanitizeToken(raw: string | null | undefined, fallback: string): string {\n if (!raw) return fallback;\n const cleaned = raw\n .toLowerCase()\n .replace(/[^a-z0-9]+/g, '-')\n .replace(/^-+|-+$/g, '')\n .slice(0, 40);\n return cleaned || fallback;\n}\n\nfunction pageToken(pathname: string): string {\n if (!pathname || pathname === '/') return 'home';\n return sanitizeToken(pathname.replace(/\\//g, '-'), 'page');\n}\n\nfunction inferCategory(el: Element): string {\n const role = (el.getAttribute('role') || '').toLowerCase();\n const tag = el.tagName.toLowerCase();\n\n if (role.includes('tab') || tag === 'tabs') return 'tabs';\n if (role.startsWith('menu') || role === 'menu') return 'menu';\n if (tag === 'button' || role === 'button') return 'button';\n if (tag === 'input' || tag === 'textarea' || tag === 'select' || role === 'combobox')\n return 'field';\n if (tag === 'svg' || el.hasAttribute('data-icon')) return 'icon';\n if (\n ['main', 'header', 'footer', 'aside', 'nav', 'section'].includes(tag) ||\n ['region', 'banner', 'main', 'navigation', 'complementary'].includes(role)\n ) {\n return 'layout';\n }\n\n return 'ui';\n}\n\nfunction inferName(el: Element): string {\n const htmlEl = el as HTMLElement;\n return sanitizeToken(\n el.getAttribute('data-testid') ||\n el.getAttribute('aria-label') ||\n el.getAttribute('name') ||\n el.getAttribute('title') ||\n (htmlEl as HTMLInputElement).placeholder ||\n htmlEl.innerText ||\n el.getAttribute('class'),\n 'item'\n );\n}\n\nfunction assignUiIds(pathname: string): void {\n const used = new Set<string>();\n document.querySelectorAll('[id]').forEach((el) => {\n const id = el.id?.trim();\n if (id) used.add(id);\n });\n\n const counters: Record<string, number> = {};\n const page = pageToken(pathname);\n const elements = document.querySelectorAll(TARGET_SELECTOR);\n\n elements.forEach((el) => {\n const category = inferCategory(el);\n const name = inferName(el);\n const stableKey = `ui-${category}-${name}`;\n\n el.setAttribute('data-ui-category', category);\n el.setAttribute('data-ui-key', stableKey);\n el.setAttribute('data-ui-page', page);\n\n if (el.id) {\n return;\n }\n\n const counterKey = `${page}-${category}-${name}`;\n counters[counterKey] = (counters[counterKey] || 0) + 1;\n\n let nextId = `ui-${page}-${category}-${name}-${counters[counterKey]}`;\n while (used.has(nextId)) {\n counters[counterKey] += 1;\n nextId = `ui-${page}-${category}-${name}-${counters[counterKey]}`;\n }\n\n el.id = nextId;\n used.add(nextId);\n });\n}\n\nexport default function GlobalUiIdProvider() {\n const location = useLocation();\n const enabled = isGlobalUiIdsEnabled();\n\n useEffect(() => {\n if (!enabled) return;\n\n let rafId = 0;\n\n const schedule = () => {\n if (rafId) return;\n rafId = window.requestAnimationFrame(() => {\n rafId = 0;\n assignUiIds(location.pathname);\n });\n };\n\n schedule();\n\n const observer = new MutationObserver(() => {\n schedule();\n });\n\n observer.observe(document.body, {\n subtree: true,\n childList: true,\n attributes: true,\n attributeFilter: ['role', 'aria-label', 'name', 'title', 'placeholder', 'class', 'data-icon'],\n });\n\n return () => {\n if (rafId) window.cancelAnimationFrame(rafId);\n observer.disconnect();\n };\n }, [enabled, location.pathname]);\n\n return null;\n}\n","import { createContext, useEffect, useMemo, useState } from 'react'\nimport type { ReactNode } from 'react'\nimport { ChakraProvider } from '@chakra-ui/react'\nimport type { Session } from '@supabase/supabase-js'\nimport { politogyTheme } from '../theme'\nimport type {\n AppRegistryEntry,\n ShellAuthStatus,\n ShellAuthValue,\n ShellFooterValue,\n ShellLinkedAccountsValue,\n ShellModeValue,\n ShellNavItemsValue,\n ShellNavigationPreferenceValue,\n ShellOrganizationValue,\n ShellProviderProps,\n ShellRoleValue,\n ShellSupportValue,\n ShellUser,\n} from '../types'\n\nexport const ShellAuthContext = createContext<ShellAuthValue | null>(null)\n\ninterface ShellMetaValue {\n currentApp: string\n appRegistry: AppRegistryEntry[]\n basename: string\n}\n\nexport const ShellMetaContext = createContext<ShellMetaValue | null>(null)\n\nexport const ShellOrgContext = createContext<ShellOrganizationValue | null>(null)\nexport const ShellLinkedAccountsContext = createContext<ShellLinkedAccountsValue | null>(null)\nexport const ShellSupportProviderContext = createContext<ShellSupportValue | null>(null)\nexport const ShellModeContext = createContext<ShellModeValue | null>(null)\nexport const ShellNavItemsContext = createContext<ShellNavItemsValue | null>(null)\nexport const ShellNavigationPreferenceContext =\n createContext<ShellNavigationPreferenceValue | null>(null)\nexport const ShellRoleContext = createContext<ShellRoleValue | null>(null)\nexport const ShellFooterContext = createContext<ShellFooterValue | null>(null)\n\nexport interface ShellChromeValue {\n devNotesMenu: ReactNode | null\n myProfileHref: string\n brandLogoSrc?: string\n headerIconsSlot?: ReactNode\n organizationSettingsHref?: string\n showContinueOnboarding?: boolean\n onContinueOnboarding?: () => void\n pageTitle?: string\n breadcrumbs?: Array<{ label: string; href?: string }>\n headerActions?: ReactNode\n /** Avatar URL override for UserMenu. Apps that store the avatar in their own\n * profile table or localStorage should pass it here. */\n userAvatarUrl?: string\n}\n\nexport const ShellChromeContext = createContext<ShellChromeValue | null>(null)\n\nfunction toShellUser(session: Session | null): ShellUser | null {\n if (!session?.user) return null\n const su = session.user\n const fullName = (su.user_metadata as { full_name?: string } | null)?.full_name ?? null\n return {\n id: su.id,\n email: su.email ?? null,\n displayName: fullName ?? su.email ?? null,\n raw: su,\n }\n}\n\nexport function ShellProvider({\n children,\n supabaseClient,\n auth,\n currentApp,\n appRegistry,\n basename,\n organization,\n linkedAccounts,\n support,\n devNotesMenu,\n myProfileHref,\n userAvatarUrl,\n}: ShellProviderProps) {\n const [status, setStatus] = useState<ShellAuthStatus>('loading')\n const [session, setSession] = useState<Session | null>(null)\n\n useEffect(() => {\n // Host-driven auth (or no client at all): Supabase session tracking is off.\n if (auth || !supabaseClient) {\n setSession(null)\n if (!auth) setStatus('unauthenticated')\n return\n }\n let cancelled = false\n supabaseClient.auth.getSession().then(({ data }) => {\n if (cancelled) return\n setSession(data.session)\n setStatus(data.session ? 'authenticated' : 'unauthenticated')\n })\n const sub = supabaseClient.auth.onAuthStateChange((_event, newSession) => {\n setSession(newSession)\n setStatus(newSession ? 'authenticated' : 'unauthenticated')\n })\n return () => {\n cancelled = true\n sub.data.subscription.unsubscribe()\n }\n }, [supabaseClient, auth])\n\n const value = useMemo<ShellAuthValue>(() => {\n if (auth) {\n return {\n status: auth.status,\n session: null,\n user: auth.user,\n signOut: async () => {\n await auth.signOut()\n },\n }\n }\n return {\n status,\n session,\n user: toShellUser(session),\n signOut: async () => {\n await supabaseClient?.auth.signOut()\n },\n }\n }, [auth, status, session, supabaseClient])\n\n const meta = useMemo<ShellMetaValue>(\n () => ({\n currentApp,\n appRegistry: appRegistry ?? [],\n basename: basename ?? '',\n }),\n [currentApp, appRegistry, basename],\n )\n\n const chrome = useMemo<ShellChromeValue>(\n () => ({\n devNotesMenu: devNotesMenu ?? null,\n myProfileHref: myProfileHref ?? '/my-profile',\n userAvatarUrl,\n }),\n [devNotesMenu, myProfileHref, userAvatarUrl],\n )\n\n return (\n <ShellAuthContext.Provider value={value}>\n <ShellMetaContext.Provider value={meta}>\n <ShellOrgContext.Provider value={organization ?? null}>\n <ShellLinkedAccountsContext.Provider value={linkedAccounts ?? null}>\n <ShellSupportProviderContext.Provider value={support ?? null}>\n <ShellModeContext.Provider value={null}>\n <ShellNavItemsContext.Provider value={null}>\n <ShellNavigationPreferenceContext.Provider value={null}>\n <ShellRoleContext.Provider value={null}>\n <ShellFooterContext.Provider value={null}>\n <ShellChromeContext.Provider value={chrome}>\n <ChakraProvider theme={politogyTheme}>{children}</ChakraProvider>\n </ShellChromeContext.Provider>\n </ShellFooterContext.Provider>\n </ShellRoleContext.Provider>\n </ShellNavigationPreferenceContext.Provider>\n </ShellNavItemsContext.Provider>\n </ShellModeContext.Provider>\n </ShellSupportProviderContext.Provider>\n </ShellLinkedAccountsContext.Provider>\n </ShellOrgContext.Provider>\n </ShellMetaContext.Provider>\n </ShellAuthContext.Provider>\n )\n}\n","import { useContext } from 'react'\nimport { ShellAuthContext } from '../providers/ShellProvider'\nimport type { ShellAuthValue } from '../types'\n\nexport function useShellAuth(): ShellAuthValue {\n const ctx = useContext(ShellAuthContext)\n if (!ctx) {\n throw new Error('useShellAuth must be used inside <ShellProvider>')\n }\n return ctx\n}\n","import { useContext } from 'react'\nimport { ShellMetaContext } from '../providers/ShellProvider'\nimport type { AppRegistryEntry } from '../types'\n\nexport function useAppRegistry(): AppRegistryEntry[] {\n const meta = useContext(ShellMetaContext)\n if (!meta) {\n throw new Error('useAppRegistry must be used inside <ShellProvider>')\n }\n return meta.appRegistry\n}\n\nexport function useCurrentApp(): string {\n const meta = useContext(ShellMetaContext)\n if (!meta) {\n throw new Error('useCurrentApp must be used inside <ShellProvider>')\n }\n return meta.currentApp\n}\n","import { useContext } from 'react'\nimport { ShellOrgContext } from '../providers/ShellProvider'\nimport type { ShellOrganizationValue } from '../types'\n\n/**\n * Returns the organization value supplied to ShellProvider, or null if the\n * host app didn't pass an `organization` prop. Returning null lets chrome\n * components (e.g., <OrgSelector />) render nothing instead of erroring.\n */\nexport function useShellOrganization(): ShellOrganizationValue | null {\n return useContext(ShellOrgContext)\n}\n","import { useContext } from 'react'\nimport { ShellLinkedAccountsContext } from '../providers/ShellProvider'\nimport type { ShellLinkedAccountsValue } from '../types'\n\n/**\n * Returns the linked-accounts value supplied to ShellProvider, or null if not\n * provided. UserMenu uses this to decide whether to render the\n * \"switch account\" section.\n */\nexport function useShellLinkedAccounts(): ShellLinkedAccountsValue | null {\n return useContext(ShellLinkedAccountsContext)\n}\n","import { useContext } from 'react'\nimport { ShellSupportProviderContext } from '../providers/ShellProvider'\nimport type { ShellSupportValue } from '../types'\n\n/**\n * Returns the support handler supplied to ShellProvider, or null if not\n * provided. SupportRequestButton uses this to decide whether to render.\n */\nexport function useShellSupport(): ShellSupportValue | null {\n return useContext(ShellSupportProviderContext)\n}\n","import { useContext } from 'react'\nimport { ShellChromeContext } from '../providers/ShellProvider'\nimport type { ShellChromeValue } from '../providers/ShellProvider'\n\nexport type { ShellChromeValue }\n\n/**\n * Returns chrome-level options supplied to ShellProvider/ShellChrome\n * (devNotesMenu slot, myProfileHref, header data, brand logo src, etc.).\n * Throws if used outside <ShellProvider>.\n */\nexport function useShellChrome(): ShellChromeValue {\n const ctx = useContext(ShellChromeContext)\n if (!ctx) {\n throw new Error('useShellChrome must be used inside <ShellProvider>')\n }\n return ctx\n}\n","import { useContext } from 'react'\nimport { ShellModeContext } from '../providers/ShellProvider'\nimport type { ShellModeValue } from '../types'\n\n/**\n * Returns the mode value supplied to ShellProvider/ShellChrome, or null if\n * the host app didn't pass a `mode` prop. Components like <ModePill /> use\n * this to conditionally render.\n */\nexport function useShellMode(): ShellModeValue | null {\n return useContext(ShellModeContext)\n}\n","import { useContext } from 'react'\nimport { ShellNavItemsContext } from '../providers/ShellProvider'\nimport type { ShellNavItemsValue } from '../types'\n\n/**\n * Returns the nav items value supplied to ShellChrome, or null if the host\n * app didn't pass a `navItems` prop. The sidebar uses this to decide what\n * rows to render.\n */\nexport function useShellNavItems(): ShellNavItemsValue | null {\n return useContext(ShellNavItemsContext)\n}\n","import { useContext } from 'react'\nimport { ShellNavigationPreferenceContext } from '../providers/ShellProvider'\nimport type { ShellNavigationPreferenceValue } from '../types'\n\n/**\n * Returns the user's navigation rendering preference supplied to\n * ShellChrome, or null if not provided. NavItem uses this to decide\n * whether to expand sub-menus.\n */\nexport function useShellNavigationPreference(): ShellNavigationPreferenceValue | null {\n return useContext(ShellNavigationPreferenceContext)\n}\n","import { useContext } from 'react'\nimport { ShellRoleContext } from '../providers/ShellProvider'\nimport type { ShellRoleValue } from '../types'\n\n/**\n * Returns the active-role info supplied to ShellChrome, or null if not\n * provided. UserMenu uses this to render the ROLES & ORGANIZATIONS badge.\n */\nexport function useShellRole(): ShellRoleValue | null {\n return useContext(ShellRoleContext)\n}\n","import { useContext } from 'react'\nimport { ShellFooterContext } from '../providers/ShellProvider'\nimport type { ShellFooterValue } from '../types'\n\n/**\n * Returns the footer data supplied to ShellChrome (links, commit/version\n * info), or null if not provided. The Sidebar footer reads this to render\n * Privacy / Terms / Subscriptions + commit copy button.\n */\nexport function useShellFooter(): ShellFooterValue | null {\n return useContext(ShellFooterContext)\n}\n","import type { CSSProperties } from 'react'\n\nexport interface BrandLogoProps {\n src?: string\n alt?: string\n className?: string\n style?: CSSProperties\n}\n\n/**\n * Mode-aware brand logo rendered in the sidebar header. The host app\n * supplies `src` (e.g., a different image per mode); the shell wraps it\n * in a non-draggable <img> so it never accidentally drags on click.\n *\n * Render returns null when no src is supplied so consuming chrome can\n * gracefully omit the slot.\n */\nexport function BrandLogo({ src, alt = 'Brand', className, style }: BrandLogoProps) {\n if (!src) return null\n return (\n <img\n src={src}\n alt={alt}\n className={className}\n style={style}\n draggable={false}\n />\n )\n}\n\nexport default BrandLogo\n","// Display-name helper for user-menu / avatar fallbacks. Ported from\n// react/app/src/layouts/AuthenticatedLayout.tsx line 697 (2026-05-13).\n\ninterface UserLike {\n profile?: {\n full_name?: string | null\n name?: string | null\n } | null\n user_metadata?: {\n full_name?: string | null\n name?: string | null\n } | null\n email?: string | null\n}\n\n/**\n * Resolves a user-facing display name from a user object. Tries profile\n * fields first, then user_metadata, then the email local-part, then the\n * raw email, finally falling back to \"User\".\n */\nexport function getUserDisplayName(user: UserLike | null | undefined): string {\n if (!user) return 'User'\n return (\n user.profile?.full_name ||\n user.profile?.name ||\n user.user_metadata?.full_name ||\n user.user_metadata?.name ||\n (typeof user.email === 'string' ? user.email.split('@')[0] : '') ||\n user.email ||\n 'User'\n )\n}\n","import type { ShellModeConfig, ShellModeValue } from '../types'\n\n/**\n * Defensive resolver for the active mode's config.\n *\n * Order of preference:\n * 1. `mode.getModeConfig()` if supplied and it returns a truthy value\n * without throwing (covers app-side caching / custom logic).\n * 2. `mode.modes.find(m => m.id === mode.currentMode)`.\n * 3. `mode.modes[0]` as a last-resort fallback.\n *\n * Returns `null` if `mode` itself is null/undefined or there are no modes.\n *\n * Lets consumers pass just `{ currentMode, modes, switchMode }` to\n * `<ShellChrome mode={...}>` without writing a `getModeConfig` closure.\n * Also defangs the common `this`-binding mistake where a consumer writes\n * the method as `getModeConfig() { return this.modes[0] }` and shell\n * pulls the function out, losing the `this` reference.\n */\nexport function resolveModeConfig(mode: ShellModeValue | null | undefined): ShellModeConfig | null {\n if (!mode) return null\n const modes = mode.modes ?? []\n if (typeof mode.getModeConfig === 'function') {\n try {\n const result = mode.getModeConfig()\n if (result) return result\n } catch {\n // fall through to derivation\n }\n }\n return modes.find((m) => m.id === mode.currentMode) ?? modes[0] ?? null\n}\n","// Universal theme preference — the ONE cross-app contract.\n//\n// One theme choice (Light / Dark / System) follows the authenticated user\n// across every Politogy app + subdomain. Three layers cooperate:\n// 1. VRM Core `profiles.theme_preference` — source of truth, persisted via\n// the chrome API (`PATCH me/preferences { themePreference }`) and read\n// back from `GET me` (`themePreference`).\n// 2. `.politogyvrm.com` cookie `politogy_theme` — zero-flash pre-paint\n// vehicle that crosses subdomains (auth session cookies are host-only).\n// 3. localStorage `politogy_theme` — offline fallback store.\n//\n// Ported verbatim from contacts/apps/web/src/lib/theme.ts (the origin of the\n// contract) so every app runs the identical behavior from npm. This module is\n// server-safe (no 'use client'): layouts import THEME_PREPAINT_SCRIPT for the\n// pre-paint inline script. The client-side hook lives in ./native\n// (useThemePreference).\n\nexport type ThemePreference = 'light' | 'dark' | 'system'\n\n// Single converged key for BOTH the localStorage store and the\n// cross-subdomain cookie, so a choice in one app is the same key in the next.\nexport const THEME_STORAGE_KEY = 'politogy_theme'\nexport const THEME_COOKIE = 'politogy_theme'\n\n// A local choice that has NOT yet reached VRM Core `profiles.theme_preference`.\n//\n// Politogy ID (auth.politogyvrm.com) has no chrome-API session to PATCH, so a\n// theme picked on the login screen only ever lands in the cookie. Without this\n// marker the next app booted the stale profile value through the reconcile step\n// below and overwrote the user's fresh choice — the \"I set System and it keeps\n// going back to Light\" bug (HITL 2026-07-23). The flag rides the same\n// cross-subdomain cookie so the first app that CAN talk to the chrome API\n// pushes the choice up instead of pulling the stale one down.\nexport const THEME_PENDING_COOKIE = 'politogy_theme_pending'\n\nconst VALID: readonly ThemePreference[] = ['light', 'dark', 'system']\n\nexport function isThemePreference(v: unknown): v is ThemePreference {\n return typeof v === 'string' && (VALID as readonly string[]).includes(v)\n}\n\n/** Read the shared cookie (browser only; null on the server or when unset). */\nexport function readThemeCookie(): ThemePreference | null {\n if (typeof document === 'undefined') return null\n try {\n const m = document.cookie.match(\n new RegExp(`(?:^|;\\\\s*)${THEME_COOKIE}=([^;]+)`),\n )\n const v = m ? decodeURIComponent(m[1]) : null\n return isThemePreference(v) ? v : null\n } catch {\n return null\n }\n}\n\n// Set the cross-subdomain cookie. On a *.politogyvrm.com host we scope it to\n// the parent domain so every app subdomain reads it; on any other host\n// (localhost, *.pages.dev preview) we fall back to a host-only cookie so\n// local/preview theming still works without a mismatched Domain attribute\n// (which browsers silently drop). 1-year, SameSite=Lax, Secure on https.\nexport function writeThemeCookie(pref: ThemePreference): void {\n if (typeof document === 'undefined' || typeof window === 'undefined') return\n const host = window.location.hostname\n const onParentDomain = /(^|\\.)politogyvrm\\.com$/i.test(host)\n const domainAttr = onParentDomain ? '; Domain=.politogyvrm.com' : ''\n const secure = window.location.protocol === 'https:' ? '; Secure' : ''\n document.cookie = `${THEME_COOKIE}=${encodeURIComponent(\n pref,\n )}; Path=/; Max-Age=31536000; SameSite=Lax${domainAttr}${secure}`\n}\n\n// Write an arbitrary cross-subdomain cookie with the same scoping rules as the\n// theme cookie itself (parent domain on *.politogyvrm.com, host-only elsewhere).\nfunction writeSharedCookie(name: string, value: string, maxAgeSeconds: number): void {\n if (typeof document === 'undefined' || typeof window === 'undefined') return\n const host = window.location.hostname\n const domainAttr = /(^|\\.)politogyvrm\\.com$/i.test(host) ? '; Domain=.politogyvrm.com' : ''\n const secure = window.location.protocol === 'https:' ? '; Secure' : ''\n document.cookie = `${name}=${encodeURIComponent(\n value,\n )}; Path=/; Max-Age=${maxAgeSeconds}; SameSite=Lax${domainAttr}${secure}`\n}\n\n/**\n * Mark the current cookie value as a local choice that still has to reach the\n * user's profile. Call this from any surface that changes the theme WITHOUT a\n * chrome-API session (Politogy ID's login screen is the only one today).\n */\nexport function markThemeChoicePending(pref: ThemePreference): void {\n writeSharedCookie(THEME_PENDING_COOKIE, pref, 31536000)\n}\n\n/** The pending (not-yet-persisted) local choice, if any. */\nexport function readPendingThemeChoice(): ThemePreference | null {\n if (typeof document === 'undefined') return null\n try {\n const m = document.cookie.match(\n new RegExp(`(?:^|;\\\\s*)${THEME_PENDING_COOKIE}=([^;]+)`),\n )\n const v = m ? decodeURIComponent(m[1]) : null\n return isThemePreference(v) ? v : null\n } catch {\n return null\n }\n}\n\n/** Clear the pending marker once the choice has been written to the profile. */\nexport function clearPendingThemeChoice(): void {\n writeSharedCookie(THEME_PENDING_COOKIE, '', 0)\n}\n\n/** Resolve a preference to the concrete light/dark it renders as right now. */\nexport function resolveTheme(pref: ThemePreference): 'light' | 'dark' {\n if (pref === 'system') {\n try {\n return window.matchMedia('(prefers-color-scheme: dark)').matches\n ? 'dark'\n : 'light'\n } catch {\n return 'light'\n }\n }\n return pref\n}\n\n/** Apply a preference to the document (`.dark` class + color-scheme). */\nexport function applyThemePreference(pref: ThemePreference): void {\n if (typeof document === 'undefined') return\n const resolved = resolveTheme(pref)\n const d = document.documentElement\n d.classList.toggle('dark', resolved === 'dark')\n try {\n d.style.colorScheme = resolved\n } catch {\n /* non-fatal */\n }\n}\n\n// Inline pre-paint script — render it in <head> (or as the first child of\n// <body>) so the theme applies before first paint. Resolves the preference\n// from cookie → localStorage → OS, applies the `.dark` class + `color-scheme`,\n// and seeds localStorage from the cookie so the app hydrates to the synced\n// value (the cross-subdomain flash fix). Self-contained, dependency-free, and\n// wrapped so any failure is silent (never blocks paint).\nexport const THEME_PREPAINT_SCRIPT = `(function(){try{\nvar KEY=${JSON.stringify(THEME_STORAGE_KEY)};\nvar VALID=[\"light\",\"dark\",\"system\"];\nfunction fromCookie(){try{var m=document.cookie.match(/(?:^|;\\\\s*)${THEME_COOKIE}=([^;]+)/);return m?decodeURIComponent(m[1]):null;}catch(e){return null;}}\nvar cookie=fromCookie();\nvar ls=null;try{ls=localStorage.getItem(KEY);}catch(e){}\nvar pref=cookie||ls||\"system\";\nif(VALID.indexOf(pref)===-1)pref=\"system\";\nif(cookie&&cookie!==ls){try{localStorage.setItem(KEY,cookie);}catch(e){}}\nvar resolved=pref;\nif(pref===\"system\"){try{resolved=window.matchMedia(\"(prefers-color-scheme: dark)\").matches?\"dark\":\"light\";}catch(e){resolved=\"light\";}}\nvar d=document.documentElement;\nif(resolved===\"dark\"){d.classList.add(\"dark\");}else{d.classList.remove(\"dark\");}\ntry{d.style.colorScheme=resolved;}catch(e){}\n}catch(e){}})();`\n","import {\n Avatar,\n Badge,\n Box,\n Flex,\n HStack,\n IconButton,\n Menu,\n MenuButton,\n MenuDivider,\n MenuItem,\n MenuList,\n Portal,\n Text,\n Tooltip,\n VStack,\n useColorModeValue,\n} from '@chakra-ui/react'\nimport {\n FiBriefcase,\n FiChevronDown,\n FiLogOut,\n FiRotateCcw,\n FiTrash2,\n FiUser,\n FiUserPlus,\n} from 'react-icons/fi'\nimport { useNavigate } from 'react-router-dom'\nimport { useShellAuth } from '../hooks/useShellAuth'\nimport { useShellChrome } from '../hooks/useShellChrome'\nimport { useShellLinkedAccounts } from '../hooks/useShellLinkedAccounts'\nimport { useShellMode } from '../hooks/useShellMode'\nimport { useShellOrganization } from '../hooks/useShellOrganization'\nimport { useShellRole } from '../hooks/useShellRole'\nimport { getUserDisplayName } from '../lib/userDisplay'\nimport { resolveModeConfig } from '../lib/resolveModeConfig'\nimport { useEffect, useState } from 'react'\nimport {\n applyThemePreference,\n isThemePreference,\n readThemeCookie,\n writeThemeCookie,\n THEME_STORAGE_KEY,\n type ThemePreference,\n} from '../theme-preference'\n\n/** \"Spencer Hill\" → \"Spencer H.\" — first name + last initial (chrome standard). */\nfunction formatFirstLast(name: string): string {\n const parts = name.split(/\\s+/).filter(Boolean)\n if (parts.length <= 1) return name\n return `${parts[0]} ${parts[parts.length - 1][0].toUpperCase()}.`\n}\n\nconst THEME_OPTIONS: { value: ThemePreference; label: string }[] = [\n { value: 'light', label: 'Light' },\n { value: 'system', label: 'System' },\n { value: 'dark', label: 'Dark' },\n]\n\n/**\n * APPEARANCE (Light / System / Dark) — the cross-app theme control, embedded\n * in the account menu (chrome standard: never a standalone top-bar toggle).\n * Writes the shared politogy_theme cookie + localStorage and emits\n * `politogy:theme-preference` so the host app can persist to the profile\n * (PATCH me/preferences) and restyle itself.\n */\nfunction AppearanceControl() {\n const [value, setValue] = useState<ThemePreference>('system')\n useEffect(() => {\n const cookie = readThemeCookie()\n let ls: string | null = null\n try {\n ls = localStorage.getItem(THEME_STORAGE_KEY)\n } catch {\n /* unavailable */\n }\n setValue(cookie ?? (isThemePreference(ls) ? ls : null) ?? 'system')\n }, [])\n const pick = (next: ThemePreference) => {\n setValue(next)\n writeThemeCookie(next)\n try {\n localStorage.setItem(THEME_STORAGE_KEY, next)\n } catch {\n /* unavailable */\n }\n applyThemePreference(next)\n try {\n window.dispatchEvent(\n new CustomEvent('politogy:theme-preference', { detail: next }),\n )\n } catch {\n /* non-fatal */\n }\n }\n return (\n <Box px={3} py={2}>\n <Text fontSize=\"xs\" color=\"gray.500\" fontWeight=\"semibold\" mb={2}>\n APPEARANCE\n </Text>\n <HStack\n spacing={0}\n borderWidth=\"1px\"\n borderColor=\"var(--line, #E2E8F0)\"\n borderRadius=\"full\"\n overflow=\"hidden\"\n >\n {THEME_OPTIONS.map((opt) => (\n <Box\n key={opt.value}\n as=\"button\"\n type=\"button\"\n role=\"radio\"\n aria-checked={value === opt.value}\n onClick={() => pick(opt.value)}\n flex={1}\n px={3}\n py={1.5}\n fontSize=\"xs\"\n fontWeight=\"semibold\"\n bg={value === opt.value ? 'var(--color-race-red, #E63946)' : 'transparent'}\n color={value === opt.value ? 'white' : 'gray.500'}\n _hover={value === opt.value ? {} : { bg: 'var(--panel, #F7FAFC)' }}\n transition=\"background 0.15s\"\n >\n {opt.label}\n </Box>\n ))}\n </HStack>\n </Box>\n )\n}\n\nfunction avatarUrlFromUser(user: ReturnType<typeof useShellAuth>['user']): string | undefined {\n if (!user) return undefined\n const meta = user.raw.user_metadata as { avatar_url?: string } | null | undefined\n return meta?.avatar_url ?? undefined\n}\n\n/**\n * Avatar dropdown rendered on the right of the header. Ported to match the\n * legacy menu in react/app/src/layouts/AuthenticatedLayout.tsx lines\n * 2680–2898 (2026-05-13).\n *\n * Sections (in order):\n * 1. Trigger — avatar + name/email VStack + chevron (md+ only).\n * 2. My Profile / Continue Onboarding (gated) / Organization Settings.\n * 3. ROLES & ORGANIZATIONS — current-org role Badge OR activeRoleConfig.\n * 4. ACCOUNTS — current account indicator + linkedAccounts list with\n * inline FiTrash2 remove + \"Add Account\" item.\n * 5. Sign out.\n */\nexport function UserMenu() {\n const { user, status, signOut } = useShellAuth()\n const {\n myProfileHref,\n organizationSettingsHref,\n showContinueOnboarding,\n onContinueOnboarding,\n userAvatarUrl,\n } = useShellChrome()\n const linked = useShellLinkedAccounts()\n const mode = useShellMode()\n const org = useShellOrganization()\n const role = useShellRole()\n const navigate = useNavigate()\n\n // Brand token — the user menu is top-bar chrome, so it tracks --topbar-bg\n // rather than Chakra's color mode (which pins dark to gray.900 #171923).\n const menuListBg = 'var(--topbar-bg, #FFFFFF)'\n const menuListBorderColor = useColorModeValue('gray.200', 'gray.700')\n\n if (status !== 'authenticated' || !user) return null\n\n const rawDisplayName = getUserDisplayName(user.raw)\n // Chrome standard: the trigger shows \"First L.\", never the email twice.\n const hasRealName = !!rawDisplayName && !rawDisplayName.includes('@')\n const displayName = hasRealName ? formatFirstLast(rawDisplayName) : (user.email ?? rawDisplayName)\n // App-supplied avatar URL takes precedence (profile.avatar_url, memoji,\n // app-specific default chain); fall back to whatever the auth session has.\n const avatarUrl = userAvatarUrl ?? avatarUrlFromUser(user)\n const modeConfig = resolveModeConfig(mode)\n const currentOrg = org?.currentOrg ?? null\n const linkedAccounts = linked?.linkedAccounts ?? []\n const activeRoleConfig = role?.activeRoleConfig ?? null\n\n return (\n <Flex alignItems=\"center\">\n <Menu>\n <MenuButton py={2} transition=\"all 0.3s\" _focus={{ boxShadow: 'none' }}>\n <HStack>\n <Avatar\n size=\"sm\"\n src={avatarUrl}\n name={displayName}\n bg={modeConfig?.primaryColor || 'brand.500'}\n />\n <VStack\n display={{ base: 'none', md: 'flex' }}\n alignItems=\"flex-start\"\n spacing=\"1px\"\n ml=\"2\"\n >\n <HStack spacing={2}>\n <Text fontSize=\"sm\">{displayName}</Text>\n </HStack>\n {hasRealName ? (\n <Text fontSize=\"xs\" color=\"gray.500\">\n {user.email}\n </Text>\n ) : null}\n </VStack>\n <Box display={{ base: 'none', md: 'flex' }}>\n <FiChevronDown />\n </Box>\n </HStack>\n </MenuButton>\n <Portal>\n <MenuList bg={menuListBg} borderColor={menuListBorderColor} zIndex={1500}>\n <MenuItem icon={<FiUser />} onClick={() => navigate(myProfileHref)}>\n My Profile\n </MenuItem>\n\n {showContinueOnboarding && (\n <MenuItem\n icon={<FiRotateCcw />}\n onClick={() => {\n if (onContinueOnboarding) onContinueOnboarding()\n else window.dispatchEvent(new CustomEvent('app:continue-onboarding'))\n }}\n >\n Continue Onboarding\n </MenuItem>\n )}\n\n {organizationSettingsHref && (\n <MenuItem\n icon={<FiBriefcase />}\n onClick={() => navigate(organizationSettingsHref)}\n >\n Organization Settings\n </MenuItem>\n )}\n\n <MenuDivider />\n <Text fontSize=\"xs\" color=\"gray.500\" px={3} py={1} fontWeight=\"semibold\">\n ROLES & ORGANIZATIONS\n </Text>\n <Box px={3} py={2}>\n <VStack align=\"stretch\" spacing={1}>\n {currentOrg && currentOrg.role && (\n <HStack>\n <Badge\n size=\"sm\"\n colorScheme={\n currentOrg.role === 'owner'\n ? 'purple'\n : currentOrg.role === 'admin'\n ? 'blue'\n : 'gray'\n }\n >\n {currentOrg.role.charAt(0).toUpperCase() + currentOrg.role.slice(1)}\n </Badge>\n <Text fontSize=\"xs\" color=\"gray.500\">\n in {currentOrg.name}\n </Text>\n </HStack>\n )}\n {activeRoleConfig && !currentOrg?.role && (\n <Badge colorScheme={activeRoleConfig.color} size=\"sm\">\n {activeRoleConfig.name}\n </Badge>\n )}\n </VStack>\n </Box>\n\n {linked && (\n <>\n <MenuDivider />\n <Text fontSize=\"xs\" color=\"gray.500\" px={3} py={1} fontWeight=\"semibold\">\n ACCOUNTS\n </Text>\n\n {/* Current account indicator */}\n <Box px={3} py={2}>\n <HStack spacing={2}>\n <Avatar size=\"xs\" src={avatarUrl} name={displayName} />\n <VStack align=\"start\" spacing={0} flex={1}>\n <Text fontSize=\"xs\" fontWeight=\"medium\" color=\"brand.600\">\n {displayName}\n </Text>\n <Text fontSize=\"xs\" color=\"gray.400\">\n Active\n </Text>\n </VStack>\n </HStack>\n </Box>\n\n {/* Linked accounts list */}\n {linkedAccounts.map((account) => (\n <MenuItem\n key={account.id}\n onClick={() => {\n void linked.switchToAccount(account.id)\n }}\n _hover={{ bg: 'gray.50' }}\n >\n <HStack spacing={2} flex={1} justify=\"space-between\">\n <HStack spacing={2}>\n <Avatar\n size=\"xs\"\n src={account.avatarUrl ?? undefined}\n name={account.displayName ?? account.email}\n />\n <VStack align=\"start\" spacing={0}>\n <Text fontSize=\"xs\" fontWeight=\"medium\" noOfLines={1}>\n {account.displayName ?? account.email.split('@')[0]}\n </Text>\n <Tooltip label={account.email} placement=\"top\" hasArrow>\n <Text\n fontSize=\"xs\"\n color=\"gray.500\"\n maxW=\"120px\"\n noOfLines={1}\n textOverflow=\"ellipsis\"\n >\n {account.email}\n </Text>\n </Tooltip>\n </VStack>\n </HStack>\n <IconButton\n as=\"span\"\n role=\"button\"\n tabIndex={0}\n aria-label=\"Remove account\"\n icon={<FiTrash2 />}\n size=\"xs\"\n variant=\"ghost\"\n colorScheme=\"red\"\n onClick={(e) => {\n e.stopPropagation()\n linked.onRemoveAccount(account.id)\n }}\n />\n </HStack>\n </MenuItem>\n ))}\n\n <MenuItem\n icon={<FiUserPlus />}\n onClick={linked.onAddAccount}\n color=\"brand.500\"\n >\n Add Account\n </MenuItem>\n </>\n )}\n\n <MenuDivider />\n <AppearanceControl />\n\n <MenuDivider />\n <MenuItem icon={<FiLogOut />} onClick={() => void signOut()}>\n Sign out\n </MenuItem>\n </MenuList>\n </Portal>\n </Menu>\n </Flex>\n )\n}\n","import {\n Box,\n Flex,\n HStack,\n IconButton,\n Link,\n Text,\n VStack,\n} from '@chakra-ui/react'\nimport { FiMenu } from 'react-icons/fi'\nimport { NavLink } from 'react-router-dom'\nimport BrandLogo from './BrandLogo'\nimport { UserMenu } from './UserMenu'\nimport { useShellChrome } from '../hooks/useShellChrome'\n\nexport interface HeaderProps {\n /** Mobile menu open handler (renders the hamburger icon on mobile). */\n onOpen?: () => void\n /** DOM id (defaults to 'mobile-nav-container'). */\n id?: string\n}\n\n/**\n * Politogy header (top bar). Ported from\n * react/app/src/layouts/AuthenticatedLayout.tsx lines 2545–2924 (2026-05-13).\n *\n * Composition (left → right):\n * 1. Hamburger (mobile only) + small brand logo (mobile only) + title +\n * breadcrumbs.\n * 2. headerActions (app-supplied React node, e.g., page action buttons).\n * 3. headerIconsSlot (app-supplied React node, e.g., FuelPopover,\n * NewTextBellPopup, SystemAlertsMenu, NavigationToggleMenu,\n * ImportProgressIndicator, DevNotesMenu, SupportRequestAction).\n * 4. UserMenu (avatar + name/email VStack + chevron).\n *\n * NOTE: app-specific widgets stay in the app. The shell only renders\n * what the app passes through `headerActions` + `headerIconsSlot`. As of\n * v0.3.1, the shell no longer renders a separate `devNotesMenu` slot\n * after `headerIconsSlot` — apps must inline DevNotesMenu inside\n * `headerIconsSlot` so they have full control of icon ordering. The\n * `devNotesMenu` prop on <ShellChrome> is still accepted for backward\n * compat but is ignored.\n */\nexport function Header({ onOpen, id }: HeaderProps) {\n const {\n pageTitle,\n breadcrumbs,\n headerActions,\n headerIconsSlot,\n brandLogoSrc,\n } = useShellChrome()\n\n // Brand tokens — see Sidebar. The mobile nav is the same chrome surface as\n // the sidebar, so it tracks --sidebar-* rather than Chakra's color mode.\n const mobileNavBg = 'var(--sidebar-bg, #FFFFFF)'\n const mobileNavBorderColor = 'var(--sidebar-border, #E2E8F0)'\n\n return (\n <Flex\n id={id || 'mobile-nav-container'}\n ml={{ base: 0, md: 60 }}\n px={{ base: 4, md: 4 }}\n height=\"20\"\n alignItems=\"center\"\n bg={mobileNavBg}\n borderBottomWidth=\"1px\"\n borderBottomColor={mobileNavBorderColor}\n justifyContent={{ base: 'space-between', md: 'space-between' }}\n >\n <Flex w=\"full\" mx=\"auto\" align=\"center\" justify=\"space-between\">\n <HStack spacing={4} minW=\"0\">\n {onOpen ? (\n <IconButton\n display={{ base: 'flex', md: 'none' }}\n onClick={onOpen}\n variant=\"outline\"\n aria-label=\"open menu\"\n icon={<FiMenu />}\n />\n ) : null}\n\n {brandLogoSrc ? (\n <Box display={{ base: 'flex', md: 'none' }} h=\"32px\">\n <BrandLogo src={brandLogoSrc} className=\"h-full w-auto object-contain\" />\n </Box>\n ) : null}\n\n <VStack\n align=\"flex-start\"\n spacing={0}\n minW=\"0\"\n display={{ base: 'none', md: 'flex' }}\n >\n {pageTitle ? (\n <Text fontSize=\"lg\" fontWeight=\"bold\" noOfLines={1}>\n {pageTitle}\n </Text>\n ) : null}\n {breadcrumbs && breadcrumbs.length > 0 ? (\n <HStack spacing={2} color=\"gray.500\" fontSize=\"sm\" mt=\"1px\" minW=\"0\">\n {breadcrumbs.map((b, idx) => (\n <Box key={`${b.label}-${idx}`} display=\"inline-flex\" alignItems=\"center\" minW=\"0\">\n {idx > 0 ? (\n <Text color=\"gray.400\" mr={2}>\n {' > '}\n </Text>\n ) : null}\n {b.href ? (\n <Link\n as={NavLink}\n to={b.href}\n _hover={{ textDecoration: 'underline' }}\n noOfLines={1}\n >\n {b.label}\n </Link>\n ) : (\n <Text noOfLines={1}>{b.label}</Text>\n )}\n </Box>\n ))}\n </HStack>\n ) : null}\n </VStack>\n </HStack>\n\n <HStack spacing={0} align=\"center\">\n {/*\n Universal top-bar icon treatment (Global-Rules → top-bar icons):\n size, gap, and color are a single shared value across every slot;\n only the glyph varies per slot (see <TopBarIcon>). Driven by Brand\n tokens with the historical 32px/20px/8px values as fallbacks.\n */}\n <HStack\n spacing=\"var(--topbar-icon-gap, 8px)\"\n mr=\"15px\"\n color=\"var(--topbar-icon-color, #4A5568)\"\n sx={{\n '& button:not([role=\"menuitem\"]):not([data-menu-item])': {\n width: 'var(--topbar-icon-button-size, 32px)',\n height: 'var(--topbar-icon-button-size, 32px)',\n minWidth: 'var(--topbar-icon-button-size, 32px)',\n padding: 0,\n },\n '& button:not([role=\"menuitem\"]):not([data-menu-item]) svg, & button:not([role=\"menuitem\"]):not([data-menu-item]) img':\n {\n width: 'var(--topbar-icon-size, 20px)',\n height: 'var(--topbar-icon-size, 20px)',\n strokeWidth: 'var(--topbar-icon-stroke-width, 2)',\n },\n }}\n >\n {headerActions}\n {headerIconsSlot}\n </HStack>\n <UserMenu />\n </HStack>\n </Flex>\n </Flex>\n )\n}\n\nexport default Header\n","import type { CSSProperties } from 'react'\n\nexport interface BrandIconProps {\n /** Brand-icon name keyed off `/brand/icons/<name>.svg` in the app's public dir. */\n name: string\n /** Pixel size shorthand — sets both width and height. */\n size?: number\n className?: string\n style?: CSSProperties\n alt?: string\n /** Optional prefix for the icon path. Defaults to '/brand/icons/'. */\n basePath?: string\n}\n\n/**\n * Brand-icon component used by sidebar NavItems. The actual SVG assets live\n * in the consuming app's `public/brand/icons/<name>.svg` — shell never\n * imports them directly, only references them by URL.\n */\nexport function BrandIcon({\n name,\n size,\n className,\n style,\n alt,\n basePath = '/brand/icons/',\n}: BrandIconProps) {\n const a11yLabel = alt ?? ''\n const isDecorative = a11yLabel === ''\n const inlineSize = size ? { width: size, height: size, ...style } : style\n\n return (\n <img\n src={`${basePath}${name}.svg`}\n alt={a11yLabel}\n role={isDecorative ? 'presentation' : undefined}\n aria-hidden={isDecorative ? true : undefined}\n className={className}\n style={inlineSize}\n draggable={false}\n />\n )\n}\n\nexport default BrandIcon\n","import { useMemo, type ReactNode } from 'react'\nimport { Badge, Box, Collapse, Flex, Text } from '@chakra-ui/react'\nimport { FiChevronDown } from 'react-icons/fi'\nimport { useLocation, useNavigate } from 'react-router-dom'\nimport BrandIcon from './BrandIcon'\nimport { useShellMode } from '../hooks/useShellMode'\nimport { useShellNavigationPreference } from '../hooks/useShellNavigationPreference'\nimport { resolveModeConfig } from '../lib/resolveModeConfig'\n\n// URL-scheme allow-list for host-supplied hrefs. React does not neutralize\n// `javascript:`/`data:` schemes on an anchor href, so validate before it\n// reaches the DOM. Permits http(s), mailto/tel, and in-app relative targets.\nconst safeHref = (h?: string) =>\n h && /^(https?:|mailto:|tel:|\\/|#|\\.)/i.test(h.trim()) ? h : '#'\n\nexport interface NavItemSubItem {\n name: string\n icon?: unknown\n brandIcon?: string\n href?: string\n badge?: string\n subLabel?: string\n disabled?: boolean\n /**\n * Depth-3 support (Reference/UI-Platform: sub-sub items, e.g. Organization\n * Settings → Subscription & Billing → Wallet). A sub-item carrying its own\n * subItems renders as a nested collapsible group. Three levels is the\n * platform maximum.\n */\n subItems?: NavItemSubItem[]\n}\n\nexport interface NavItemProps {\n icon?: unknown\n brandIcon?: string\n children: ReactNode\n href?: string\n action?: () => void\n subItems?: NavItemSubItem[]\n badge?: string\n subLabel?: string\n isSubItem?: boolean\n isExpanded?: boolean\n onToggle?: (menuKey?: string | null) => void\n menuKey?: string\n isDisabled?: boolean\n disabled?: boolean\n /** Catch-all for one-off Chakra Box overrides passed by callers. */\n [key: string]: unknown\n}\n\n/**\n * Single sidebar nav row. Reconciled with main-app source of truth:\n * `react/app/src/layouts/AuthenticatedLayout.tsx` NavItem (2026-07).\n *\n * Shell additions retained: `brandIcon`, `safeHref`, shell context hooks.\n * Main-app behavior restored: gray hover (no gradient sweep), parent active\n * when any child matches even in tabs-only mode, split effectiveHref vs\n * href-less accordion headers.\n */\nexport function NavItem({\n icon,\n brandIcon,\n children,\n href,\n action,\n subItems,\n badge,\n subLabel,\n isSubItem = false,\n isExpanded,\n onToggle,\n menuKey,\n isDisabled: navIsDisabled,\n disabled,\n ...rest\n}: NavItemProps) {\n const location = useLocation()\n const navigate = useNavigate()\n\n const mode = useShellMode()\n const modeConfig = resolveModeConfig(mode)\n\n const navPref = useShellNavigationPreference()\n const showSubMenu = navPref?.showSubMenu ?? true\n\n const isDisabled = Boolean(navIsDisabled || disabled)\n\n // In tabs-only mode, if no href but has children, use first child's href\n const effectiveHref =\n href || (Array.isArray(subItems) && subItems.length > 0 ? subItems[0].href : undefined)\n const effectivePathname = effectiveHref?.split('?')[0]\n const currentFullPath = location.pathname + location.search\n const currentSearchParams = useMemo(\n () => new URLSearchParams(location.search),\n [location.search],\n )\n\n const matchesSubItem = (itemHref: string): boolean => {\n if (!itemHref) return false\n if (itemHref === currentFullPath) return true\n\n const itemPath = itemHref.split('?')[0]\n const itemSearch = itemHref.includes('?') ? itemHref.split('?')[1] : ''\n\n if (itemPath === location.pathname && !itemSearch) {\n return true\n }\n\n if (location.pathname.startsWith(`${itemPath}/`)) {\n const itemSegments = itemPath.split('/').filter(Boolean)\n const locationSegments = location.pathname.split('/').filter(Boolean)\n const itemLastSegment = itemSegments[itemSegments.length - 1]\n const locationLastSegment = locationSegments[locationSegments.length - 1]\n\n if (itemLastSegment && itemLastSegment === locationLastSegment) {\n return true\n }\n }\n\n if (itemPath === location.pathname && itemSearch) {\n const itemSearchParams = new URLSearchParams(itemSearch)\n const itemTab = itemSearchParams.get('tab') || itemSearchParams.get('view')\n if (!itemTab) return true\n return itemTab === currentSearchParams.get('tab')\n }\n\n if (itemPath && !itemHref.includes('?') && itemPath !== effectivePathname) {\n const segment = itemPath.split('/').pop()\n if (\n segment &&\n location.pathname.endsWith('/' + segment) &&\n location.pathname.startsWith(itemPath.split('/').slice(0, -1).join('/'))\n ) {\n return true\n }\n }\n return false\n }\n\n const isActive = isSubItem\n ? matchesSubItem(effectiveHref || '')\n : (() => {\n if (!effectivePathname) return false\n if (location.pathname === effectivePathname) return true\n if (location.pathname.startsWith(`${effectivePathname}/`)) return true\n\n const dashboardOverviewMatch = effectivePathname.match(\n /^\\/[^/]+\\/[^/]*\\/dashboard\\/overview$/,\n )\n if (dashboardOverviewMatch) {\n const dashboardRoot = effectivePathname.replace(/\\/overview$/, '')\n return (\n location.pathname === dashboardRoot ||\n location.pathname.startsWith(`${dashboardRoot}/`) ||\n location.pathname.startsWith(`${dashboardRoot}&`)\n )\n }\n\n return (\n effectivePathname !== `/${location.pathname.split('/')[1]}/dashboard` &&\n location.pathname.startsWith(effectivePathname + '/')\n )\n })()\n\n // Only show sub-items if the preference allows it\n const hasSubItems = showSubMenu && Array.isArray(subItems) && subItems.length > 0\n // Parent highlights in \"Tabs Only\" even when children are not rendered\n const hasActiveChild =\n Array.isArray(subItems) && subItems.some((item) => matchesSubItem(item.href || ''))\n const isParentActive = isActive || hasActiveChild\n const isSubMenuOpen =\n isExpanded !== undefined\n ? isExpanded\n : hasSubItems && subItems!.some((item) => matchesSubItem(item.href || ''))\n\n // The expanded parent row + its sub-menu panel are a RAISED surface, driven\n // by the Brand token `--sidebar-submenu-bg`. These were hardcoded gray.100 /\n // gray.50, which rendered a glaring light panel inside a dark sidebar under\n // `.dark` — the exact failure Global-Rules' Dark Mode section calls out.\n // Fallbacks preserve the previous light-mode values.\n const submenuBg = 'var(--sidebar-submenu-bg, #F1F5F9)'\n const expandedRowBg = isParentActive\n ? modeConfig?.primaryColor || 'brand.500'\n : isSubMenuOpen\n ? submenuBg\n : 'transparent'\n const expandedRowTextColor = isParentActive\n ? 'white'\n : isSubMenuOpen\n ? 'var(--sidebar-text, #1A202C)'\n : 'var(--sidebar-text-muted, #4A5568)'\n const disabledRowBg = isSubItem ? submenuBg : 'transparent'\n const disabledRowTextColor = 'gray.400'\n\n const renderIcon = (activeForHover: boolean) => {\n if (brandIcon) {\n return (\n <Box\n mr=\"4\"\n display=\"inline-flex\"\n alignItems=\"center\"\n filter={isParentActive || isActive ? 'brightness(0) invert(1)' : undefined}\n _groupHover={\n isDisabled\n ? undefined\n : {\n filter: activeForHover ? 'brightness(0) invert(1)' : undefined,\n }\n }\n >\n <BrandIcon name={brandIcon} size={18} />\n </Box>\n )\n }\n if (icon) {\n return (\n <Box\n mr=\"4\"\n fontSize=\"16\"\n _groupHover={{\n color: isDisabled\n ? disabledRowTextColor\n : activeForHover\n ? 'white'\n : 'var(--sidebar-hover-text, #FFFFFF)',\n }}\n as={icon as never}\n />\n )\n }\n return null\n }\n\n if (hasSubItems) {\n return (\n <Box>\n {effectiveHref ? (\n <Flex\n align=\"center\"\n px=\"4\"\n py=\"2.5\"\n mx=\"4\"\n w=\"auto\"\n borderTopRadius=\"lg\"\n borderBottomRadius={isSubMenuOpen ? 0 : 'lg'}\n role=\"group\"\n cursor={isDisabled ? 'not-allowed' : 'pointer'}\n opacity={1}\n pointerEvents={isDisabled ? 'none' : 'auto'}\n data-nav-item-active={String(isParentActive)}\n bg={isDisabled ? disabledRowBg : expandedRowBg}\n color={isDisabled ? disabledRowTextColor : expandedRowTextColor}\n _hover={{\n bg: isDisabled\n ? disabledRowBg\n : isParentActive\n ? modeConfig?.accentColor || 'brand.600'\n : 'var(--sidebar-hover-bg, #E2E8F0)',\n color: isDisabled\n ? disabledRowTextColor\n : isParentActive\n ? 'white'\n : 'var(--sidebar-hover-text, #FFFFFF)',\n }}\n aria-disabled={isDisabled ? 'true' : 'false'}\n onClick={(e) => {\n if (isDisabled) return\n e.preventDefault()\n e.stopPropagation()\n onToggle?.(menuKey || null)\n }}\n {...(rest as object)}\n >\n {renderIcon(isParentActive)}\n <Box flex=\"1\">{children}</Box>\n <Box\n as={FiChevronDown}\n transform={isSubMenuOpen ? 'rotate(180deg)' : undefined}\n transition=\"transform 0.2s\"\n />\n </Flex>\n ) : (\n <Flex\n align=\"center\"\n px=\"4\"\n py=\"2.5\"\n mx=\"4\"\n w=\"auto\"\n borderTopRadius=\"lg\"\n borderBottomRadius={isSubMenuOpen ? 0 : 'lg'}\n role=\"group\"\n cursor={isDisabled ? 'not-allowed' : 'pointer'}\n opacity={1}\n pointerEvents={isDisabled ? 'none' : 'auto'}\n data-nav-item-active={String(isParentActive)}\n bg={isDisabled ? disabledRowBg : expandedRowBg}\n color={isDisabled ? disabledRowTextColor : expandedRowTextColor}\n _hover={{\n bg: isDisabled\n ? disabledRowBg\n : hasActiveChild\n ? modeConfig?.accentColor || 'brand.600'\n : 'var(--sidebar-hover-bg, #E2E8F0)',\n color: isDisabled\n ? disabledRowTextColor\n : hasActiveChild\n ? 'white'\n : 'var(--sidebar-hover-text, #FFFFFF)',\n }}\n aria-disabled={isDisabled ? 'true' : 'false'}\n onClick={(e) => {\n if (isDisabled) return\n e.stopPropagation()\n onToggle?.(menuKey || null)\n }}\n {...(rest as object)}\n >\n {renderIcon(hasActiveChild)}\n <Box flex=\"1\">{children}</Box>\n <Box\n as={FiChevronDown}\n transform={isSubMenuOpen ? 'rotate(180deg)' : undefined}\n transition=\"transform 0.2s\"\n />\n </Flex>\n )}\n <Collapse in={isSubMenuOpen} animateOpacity>\n <Box\n px=\"0\"\n mx=\"4\"\n w=\"auto\"\n mb=\"2\"\n py=\"1\"\n borderTopRadius={0}\n borderBottomRadius=\"md\"\n // The sub-menu panel itself — same raised Brand surface as the\n // expanded parent row it hangs from.\n bg={submenuBg}\n >\n {subItems!.map((item) => (\n <NavItem\n key={item.name}\n icon={item.icon}\n brandIcon={item.brandIcon}\n href={item.href}\n isSubItem={true}\n isDisabled={item.disabled}\n subLabel={item.subLabel}\n // Depth-3: pass a sub-item's own children through so it\n // renders as a nested collapsible group.\n subItems={item.subItems}\n >\n {item.name}\n </NavItem>\n ))}\n </Box>\n </Collapse>\n </Box>\n )\n }\n\n const handleClick = (e: React.MouseEvent) => {\n if (isDisabled) {\n e.preventDefault()\n return\n }\n if (action) {\n e.preventDefault()\n action()\n return\n }\n if (effectiveHref) {\n e.preventDefault()\n navigate(effectiveHref)\n }\n }\n\n // Top-level rows stay active when any child route is active (tabs-only mode)\n const rowActive = isSubItem ? isActive : isParentActive\n\n return (\n <Box\n as=\"a\"\n href={safeHref(effectiveHref)}\n onClick={handleClick}\n style={{ textDecoration: 'none' }}\n >\n <Flex\n align=\"center\"\n px=\"4\"\n py=\"2.5\"\n mx={isSubItem ? '0' : '4'}\n w={isSubItem ? 'full' : 'auto'}\n borderRadius={isSubItem ? '0' : 'lg'}\n role=\"group\"\n cursor={isDisabled ? 'not-allowed' : 'pointer'}\n opacity={1}\n pointerEvents={isDisabled ? 'none' : 'auto'}\n data-nav-item-active={String(rowActive)}\n bg={\n isDisabled\n ? disabledRowBg\n : rowActive\n ? isSubItem\n ? 'var(--sidebar-hover-bg, #EDF2F7)'\n : modeConfig?.primaryColor || 'brand.500'\n : 'transparent'\n }\n color={\n isDisabled\n ? disabledRowTextColor\n : rowActive\n ? isSubItem\n ? modeConfig?.primaryColor || 'brand.500'\n : 'white'\n : 'gray.600'\n }\n _hover={{\n bg: isDisabled\n ? disabledRowBg\n : rowActive\n ? isSubItem\n ? 'var(--sidebar-hover-bg, #E2E8F0)'\n : modeConfig?.accentColor || 'brand.600'\n : 'var(--sidebar-hover-bg, #EDF2F7)',\n color: isDisabled\n ? disabledRowTextColor\n : rowActive\n ? isSubItem\n ? modeConfig?.primaryColor || 'brand.500'\n : 'white'\n : 'var(--sidebar-hover-text, #FFFFFF)',\n }}\n aria-disabled={isDisabled ? 'true' : 'false'}\n onClick={handleClick}\n {...(rest as object)}\n >\n {brandIcon ? (\n <Box\n mr=\"4\"\n display=\"inline-flex\"\n alignItems=\"center\"\n filter={rowActive && !isSubItem ? 'brightness(0) invert(1)' : undefined}\n >\n <BrandIcon name={brandIcon} size={18} />\n </Box>\n ) : icon ? (\n <Box\n mr=\"4\"\n fontSize=\"16\"\n _groupHover={{\n color: isDisabled\n ? disabledRowTextColor\n : rowActive\n ? isSubItem\n ? modeConfig?.primaryColor || 'brand.500'\n : 'white'\n : 'var(--sidebar-hover-text, #FFFFFF)',\n }}\n as={icon as never}\n />\n ) : null}\n <Box flex=\"1\">\n <Box>{children}</Box>\n {subLabel ? (\n <Text mt={0.5} fontSize=\"10px\" lineHeight=\"1.3\" color=\"gray.400\">\n {subLabel}\n </Text>\n ) : null}\n {badge && (\n <Badge colorScheme=\"red\" size=\"xs\" mt={1} fontSize=\"xs\" display=\"block\">\n {badge}\n </Badge>\n )}\n </Box>\n </Flex>\n </Box>\n )\n}\n\nexport default NavItem\n","// Color + badge helpers used by sidebar/header chrome. Ported verbatim from\n// react/app/src/layouts/AuthenticatedLayout.tsx (lines 725–786, 2026-05-13).\n\nconst HEX_COLOR_PATTERN = /^#(?:[0-9a-fA-F]{3}|[0-9a-fA-F]{6})$/\n\n/** Returns a normalized 7-char hex color, or null if the input isn't valid. */\nexport function normalizeHexColor(value?: string | null): string | null {\n const trimmed = value?.trim()\n if (!trimmed || !HEX_COLOR_PATTERN.test(trimmed)) return null\n if (trimmed.length === 7) return trimmed\n const [r, g, b] = trimmed.slice(1).split('')\n return `#${r}${r}${g}${g}${b}${b}`\n}\n\n/**\n * Returns an `rgba(...)` string lightened toward white by `amount` (0–1),\n * or null if the input isn't a valid hex.\n */\nexport function hexToRgba(hex: string, alpha: number): string | null {\n const normalized = normalizeHexColor(hex)\n if (!normalized) return null\n const red = parseInt(normalized.slice(1, 3), 16)\n const green = parseInt(normalized.slice(3, 5), 16)\n const blue = parseInt(normalized.slice(5, 7), 16)\n return `rgba(${red}, ${green}, ${blue}, ${alpha})`\n}\n\n/**\n * Returns a hex color that is `amount` (0–1) blended from `hex` toward\n * white. Used for the org-menu hover background.\n */\nexport function lightenHexColor(hex: string, amount: number): string | null {\n const normalized = normalizeHexColor(hex)\n if (!normalized) return null\n\n const clamp = (value: number) => Math.max(0, Math.min(255, Math.round(value)))\n const blend = (channel: number) => clamp(channel + (255 - channel) * amount)\n\n const red = parseInt(normalized.slice(1, 3), 16)\n const green = parseInt(normalized.slice(3, 5), 16)\n const blue = parseInt(normalized.slice(5, 7), 16)\n\n return `#${blend(red).toString(16).padStart(2, '0')}${blend(green)\n .toString(16)\n .padStart(2, '0')}${blend(blue).toString(16).padStart(2, '0')}`\n}\n\n/**\n * Reads `settings.brand_colors[0].value` off an org-like input and returns\n * the first valid normalized hex. Returns null if the input doesn't have\n * a usable brand color.\n */\nexport function getOrganizationBrandColor(organization?: {\n brandColor?: string | null\n settings?: {\n brand_colors?: Array<{ value?: string | null }> | null\n } | null\n} | null): string | null {\n if (!organization) return null\n // Direct brandColor (shell's ShellOrganization shape).\n const direct = normalizeHexColor(organization.brandColor)\n if (direct) return direct\n // Legacy settings.brand_colors shape.\n const brandColors = Array.isArray(organization.settings?.brand_colors)\n ? organization.settings?.brand_colors\n : []\n const firstBrandColor = brandColors?.find(\n (entry) => typeof entry?.value === 'string' && normalizeHexColor(entry.value),\n )\n return normalizeHexColor(firstBrandColor?.value ?? null)\n}\n\n/**\n * Returns the two-letter badge for an organization name (e.g., \"The Portland\n * Company\" -> \"TP\"). Falls back to \"OR\" when the input has no letters.\n */\nexport function getOrganizationBadgeLetters(name?: string | null): string {\n const normalizedName = String(name || '')\n .trim()\n .replace(/[^a-zA-Z0-9\\s]+/g, ' ')\n const parts = normalizedName.split(/\\s+/).filter(Boolean)\n\n if (parts.length >= 2) {\n return `${parts[0][0] || ''}${parts[1][0] || ''}`.toUpperCase()\n }\n\n const compact = parts[0] || normalizedName.replace(/\\s+/g, '')\n return compact.slice(0, 2).toUpperCase() || 'OR'\n}\n","import { Box, Image } from '@chakra-ui/react'\nimport { getOrganizationBadgeLetters, normalizeHexColor } from '../../lib/orgColors'\n\n// Re-export for backwards compat with v0.2.x consumers.\nexport { normalizeHexColor, lightenHexColor, getOrganizationBadgeLetters } from '../../lib/orgColors'\n\ninterface OrgBadgeProps {\n name?: string | null\n logoUrl?: string | null\n brandColor?: string | null\n /** Chakra boxSize value, e.g., '24px', 'sm'. */\n size: string\n}\n\nexport function OrgBadge({ name, logoUrl, brandColor, size }: OrgBadgeProps) {\n const normalizedColor = normalizeHexColor(brandColor)\n const badgeColor = normalizedColor || '#5a5a5a'\n const badgeLetters = getOrganizationBadgeLetters(name)\n\n return (\n <Box\n boxSize={size}\n borderRadius=\"full\"\n overflow=\"hidden\"\n border=\"1px solid white\"\n flexShrink={0}\n bg={logoUrl ? 'whiteAlpha.300' : badgeColor}\n color=\"white\"\n display=\"inline-flex\"\n alignItems=\"center\"\n justifyContent=\"center\"\n fontSize=\"xs\"\n fontWeight=\"bold\"\n letterSpacing=\"0.08em\"\n textTransform=\"uppercase\"\n >\n {logoUrl ? (\n <Image src={logoUrl} alt={`${name ?? 'Organization'} logo`} boxSize=\"full\" objectFit=\"cover\" />\n ) : (\n badgeLetters\n )}\n </Box>\n )\n}\n","import { useMemo } from 'react'\nimport {\n Box,\n Button,\n Flex,\n HStack,\n Menu,\n MenuButton,\n MenuDivider,\n MenuItem,\n MenuList,\n Portal,\n Skeleton,\n Text,\n Tooltip,\n useClipboard,\n} from '@chakra-ui/react'\nimport { keyframes } from '@emotion/react'\nimport { FiChevronDown } from 'react-icons/fi'\nimport { useShellOrganization } from '../hooks/useShellOrganization'\nimport { useShellAuth } from '../hooks/useShellAuth'\nimport { getOrganizationBrandColor, lightenHexColor } from '../lib/orgColors'\nimport { OrgBadge } from './internal/orgBadge'\n\n/**\n * Short copy-on-click chip that shows the last 8 chars of an org id and\n * animates a \"Copied!\" tooltip on click. Ported from\n * react/app/src/layouts/AuthenticatedLayout.tsx lines 2933–2977.\n */\nfunction OrganizationIdCopy({ orgId }: { orgId: string }) {\n const { hasCopied, onCopy } = useClipboard(orgId)\n const copiedAnimation = keyframes`\n 0% { opacity: 0; transform: translateY(6px); }\n 20% { opacity: 1; transform: translateY(0); }\n 100% { opacity: 0; transform: translateY(-8px); }\n `\n\n return (\n <Tooltip label={orgId} placement=\"top\" hasArrow>\n <Flex\n align=\"center\"\n cursor=\"pointer\"\n onClick={onCopy}\n _hover={{ bg: 'gray.100' }}\n borderRadius=\"md\"\n px={2}\n py={1}\n position=\"relative\"\n transition=\"all 0.2s\"\n >\n <Text fontSize=\"xs\" color={hasCopied ? 'green.500' : 'gray.600'} fontWeight=\"normal\">\n ...{orgId.slice(-8)}\n </Text>\n {hasCopied && (\n <Box\n position=\"absolute\"\n bottom=\"100%\"\n mb=\"6px\"\n px=\"2\"\n py=\"1\"\n fontSize=\"xs\"\n bg=\"gray.700\"\n color=\"white\"\n borderRadius=\"md\"\n animation={`${copiedAnimation} 0.9s ease-out`}\n pointerEvents=\"none\"\n >\n Copied!\n </Box>\n )}\n </Flex>\n </Tooltip>\n )\n}\n\n/**\n * Sidebar organization switcher pill. Ported from\n * react/app/src/layouts/AuthenticatedLayout.tsx lines 3795–3957 (2026-05-13).\n *\n * Reads useShellOrganization + useShellAuth. Renders nothing when there's\n * no organization context.\n */\nexport function OrgPill() {\n const org = useShellOrganization()\n const { user } = useShellAuth()\n\n const currentOrg = org?.currentOrg ?? null\n const organizations = org?.organizations ?? []\n const switchOrganization = org?.switchOrganization\n const loadingOrgs = org?.loadingOrgs ?? false\n\n const unselectedOrganizations = useMemo(\n () => organizations.filter((o) => o.id !== currentOrg?.id),\n [organizations, currentOrg?.id],\n )\n\n const selectedOrgBrandColor = useMemo(\n () => (currentOrg ? getOrganizationBrandColor(currentOrg) : null),\n [currentOrg],\n )\n const selectedOrgColor =\n selectedOrgBrandColor || 'var(--mode-primary-color, var(--color-race-red-500, #E63946))'\n const selectedOrgMenuBg =\n (selectedOrgBrandColor && lightenHexColor(selectedOrgBrandColor, 0.12)) || '#4a4a4a'\n\n if (!org) return null\n\n return (\n <Box mx=\"4\" mb=\"3\">\n <HStack justify=\"space-between\" align=\"center\" mb=\"2\">\n <Text fontSize=\"xs\" color=\"gray.500\" fontWeight=\"semibold\">\n ORGANIZATION\n </Text>\n {currentOrg?.id && currentOrg.id !== user?.id && (\n <OrganizationIdCopy orgId={currentOrg.id} />\n )}\n </HStack>\n {loadingOrgs && !currentOrg ? (\n <Skeleton height=\"32px\" width=\"full\" borderRadius=\"md\" />\n ) : (\n <Menu gutter={0}>\n <MenuButton\n as={Button}\n rightIcon={<FiChevronDown />}\n size=\"sm\"\n width=\"full\"\n bg={currentOrg?.id ? selectedOrgColor : 'gray.100'}\n borderColor={currentOrg?.id ? selectedOrgColor : 'gray.300'}\n color={currentOrg?.id ? 'white' : 'gray.700'}\n _hover={{\n bg: currentOrg?.id ? selectedOrgColor : 'gray.200',\n color: currentOrg?.id ? 'white' : 'gray.900',\n }}\n _active={{\n bg: currentOrg?.id ? selectedOrgColor : 'gray.200',\n color: currentOrg?.id ? 'white' : 'gray.900',\n }}\n _expanded={{\n bg: currentOrg?.id ? selectedOrgColor : 'gray.200',\n color: currentOrg?.id ? 'white' : 'gray.900',\n }}\n textAlign=\"left\"\n justifyContent=\"flex-start\"\n isDisabled={loadingOrgs && organizations.length === 0}\n sx={\n currentOrg?.id\n ? {\n color: 'white',\n '.chakra-button__icon': { color: 'white' },\n }\n : undefined\n }\n >\n <HStack spacing=\"2.5\" minW={0} align=\"center\">\n {/* Smaller badge circle than the button's content box so there is\n visible top/bottom breathing room around it (was 28px, which\n nearly filled the sm button height). Only the icon shrinks —\n the pill's colors/background are unchanged. */}\n <OrgBadge\n name={currentOrg?.name}\n logoUrl={currentOrg?.logoUrl}\n brandColor={selectedOrgBrandColor}\n size=\"20px\"\n />\n <Text overflow=\"hidden\" textOverflow=\"ellipsis\" whiteSpace=\"nowrap\">\n {currentOrg?.name || 'No organizations'}\n </Text>\n </HStack>\n </MenuButton>\n <Portal>\n <MenuList\n bg={currentOrg?.id ? selectedOrgMenuBg : 'gray.100'}\n borderColor={currentOrg?.id ? selectedOrgColor : 'gray.300'}\n color={currentOrg?.id ? 'white' : 'gray.800'}\n mt=\"1\"\n minW=\"13rem\"\n maxH=\"60vh\"\n overflowY=\"auto\"\n zIndex=\"modal\"\n boxShadow=\"2xl\"\n >\n {unselectedOrganizations.map((o) => {\n const orgBrandColor = getOrganizationBrandColor(o)\n return (\n <MenuItem\n key={o.id}\n onClick={() => switchOrganization?.(o.id)}\n bg=\"transparent\"\n color={currentOrg?.id ? 'white' : 'inherit'}\n _hover={{\n bg: currentOrg?.id\n ? lightenHexColor(selectedOrgBrandColor || '#E63946', 0.2) || '#555555'\n : 'gray.100',\n color: currentOrg?.id ? 'white' : 'gray.900',\n }}\n _focus={{\n bg: currentOrg?.id\n ? lightenHexColor(selectedOrgBrandColor || '#E63946', 0.2) || '#555555'\n : 'gray.100',\n color: currentOrg?.id ? 'white' : 'gray.900',\n }}\n _active={{\n bg: currentOrg?.id\n ? lightenHexColor(selectedOrgBrandColor || '#E63946', 0.24) || '#5d5d5d'\n : 'gray.200',\n color: currentOrg?.id ? 'white' : 'gray.900',\n }}\n >\n <Flex justify=\"space-between\" align=\"center\" width=\"100%\" overflow=\"hidden\">\n <HStack minW={0} flex=\"1\" spacing=\"2.5\">\n <OrgBadge\n name={o.name}\n logoUrl={o.logoUrl}\n brandColor={orgBrandColor}\n size=\"24px\"\n />\n <Text\n overflow=\"hidden\"\n textOverflow=\"ellipsis\"\n whiteSpace=\"nowrap\"\n flex=\"1\"\n >\n {o.name}\n </Text>\n </HStack>\n <Text\n fontSize=\"xs\"\n color={currentOrg?.id ? 'whiteAlpha.700' : 'gray.500'}\n ml={2}\n flexShrink={0}\n >\n {o.id.slice(-8)}\n </Text>\n </Flex>\n </MenuItem>\n )\n })}\n <MenuDivider my={0} borderColor={currentOrg?.id ? 'whiteAlpha.300' : undefined} />\n <MenuItem\n onClick={() => window.dispatchEvent(new CustomEvent('open-create-org'))}\n fontWeight=\"bold\"\n bg=\"transparent\"\n color={currentOrg?.id ? 'white' : 'inherit'}\n my={0}\n _hover={{\n bg: currentOrg?.id\n ? lightenHexColor(selectedOrgBrandColor || '#E63946', 0.2) || '#555555'\n : 'gray.100',\n color: currentOrg?.id ? 'white' : 'gray.900',\n }}\n _focus={{\n bg: currentOrg?.id\n ? lightenHexColor(selectedOrgBrandColor || '#E63946', 0.2) || '#555555'\n : 'gray.100',\n color: currentOrg?.id ? 'white' : 'gray.900',\n }}\n _active={{\n bg: currentOrg?.id\n ? lightenHexColor(selectedOrgBrandColor || '#E63946', 0.24) || '#5d5d5d'\n : 'gray.200',\n color: currentOrg?.id ? 'white' : 'gray.900',\n }}\n fontSize=\"sm\"\n >\n + New Organization\n </MenuItem>\n </MenuList>\n </Portal>\n </Menu>\n )}\n </Box>\n )\n}\n\nexport default OrgPill\n","import { Box, Button, Menu, MenuButton, MenuItem, MenuList } from '@chakra-ui/react'\nimport { FiChevronDown } from 'react-icons/fi'\nimport { useShellMode } from '../hooks/useShellMode'\nimport { resolveModeConfig } from '../lib/resolveModeConfig'\n\n/**\n * Sidebar mode selector pill. Ported from\n * react/app/src/layouts/AuthenticatedLayout.tsx lines 3959–4006 (2026-05-13).\n *\n * Reads useShellMode. Renders nothing when no mode context is supplied or\n * when the app has only one mode available.\n */\nexport function ModePill() {\n const mode = useShellMode()\n if (!mode) return null\n\n const { currentMode, modes, switchMode } = mode\n const modeConfig = resolveModeConfig(mode)\n if (!modeConfig) return null\n\n const hasMultipleModes = modes.length > 1\n const isDisabled = !hasMultipleModes\n\n return (\n <Box mx=\"4\" mb=\"4\">\n <Menu gutter={0}>\n <MenuButton\n as={Button}\n leftIcon={modeConfig.icon as React.ReactElement | undefined}\n rightIcon={<FiChevronDown />}\n size=\"sm\"\n width=\"full\"\n bg={modeConfig.primaryColor}\n borderColor={modeConfig.primaryColor}\n color={modeConfig.white}\n _disabled={{\n bg: modeConfig.primaryColor,\n borderColor: modeConfig.primaryColor,\n color: modeConfig.white,\n cursor: 'not-allowed',\n opacity: 1,\n }}\n isDisabled={isDisabled}\n _hover={{\n bg: modeConfig.primaryColor,\n color: modeConfig.white,\n }}\n _active={{\n bg: modeConfig.primaryColor,\n color: modeConfig.white,\n }}\n >\n {modeConfig.name}\n </MenuButton>\n {hasMultipleModes && (\n <MenuList>\n {modes.map((m) => (\n <MenuItem\n key={m.id}\n onClick={() => switchMode(m.id)}\n bg=\"transparent\"\n color={currentMode === m.id ? m.primaryColor : 'inherit'}\n _hover={{ bg: m.bgColor, color: m.primaryColor }}\n icon={m.icon as React.ReactElement | undefined}\n >\n {m.name}\n </MenuItem>\n ))}\n </MenuList>\n )}\n </Menu>\n </Box>\n )\n}\n\nexport default ModePill\n","import { useMemo, type ReactNode } from 'react'\nimport {\n Box,\n Button,\n Flex,\n Icon,\n Text,\n Tooltip,\n VStack,\n useClipboard,\n} from '@chakra-ui/react'\nimport { keyframes } from '@emotion/react'\n\n/**\n * Inline diagnostics icon — saves adding react-icons as a shell dep.\n * Roughly equivalent to react-icons/fi `FiActivity` (heart-rate line).\n */\nfunction ActivityIcon() {\n return (\n <svg\n width=\"12\"\n height=\"12\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n aria-hidden=\"true\"\n >\n <polyline points=\"22 12 18 12 15 21 9 3 6 12 2 12\" />\n </svg>\n )\n}\n\n/**\n * Resolves a default environment chip style when the app didn't supply\n * a custom `envNode`. Mirrors the legacy `EnvironmentBanner` color\n * choices (green = local, orange = staging, red = production), keyed\n * off the lowercase string match — so 'staging', 'Staging', or\n * 'staging-eu' all resolve to the staging color.\n */\nfunction defaultEnvChip(label?: string): {\n color: string\n bg: string\n border: string\n name: string\n} | null {\n if (!label) return null\n const lower = label.toLowerCase()\n if (lower.includes('prod')) {\n return { color: '#ef4444', bg: '#fee2e2', border: '#fecaca', name: label }\n }\n if (lower.includes('stag')) {\n return { color: '#f97316', bg: '#ffedd5', border: '#fed7aa', name: label }\n }\n if (lower.includes('local') || lower.includes('dev')) {\n return { color: '#22c55e', bg: '#dcfce7', border: '#bbf7d0', name: label }\n }\n // Unknown env — render the label in neutral gray.\n return { color: '#6b7280', bg: '#f3f4f6', border: '#e5e7eb', name: label }\n}\n\nconst PLACEHOLDER_SHA_VALUES = new Set(['unknown', 'n/a', 'null', 'undefined', ''])\n\nfunction isMeaningfulCommit(value?: string): value is string {\n if (typeof value !== 'string') return false\n const trimmed = value.trim()\n if (!trimmed) return false\n return !PLACEHOLDER_SHA_VALUES.has(trimmed.toLowerCase())\n}\n\nfunction isMeaningfulAuthor(value?: string): boolean {\n if (typeof value !== 'string') return false\n const trimmed = value.trim()\n if (!trimmed) return false\n return !PLACEHOLDER_SHA_VALUES.has(trimmed.toLowerCase())\n}\n\nfunction getFirstName(value?: string) {\n if (!value) return ''\n const stripped = value.replace(/<[^>]+>/g, '').trim()\n if (!stripped) return ''\n const [firstToken] = stripped.split(/\\s+/)\n return firstToken || stripped\n}\n\nexport interface CommitCopyButtonProps {\n /**\n * Pre-rendered environment chip (e.g., the app's own `EnvironmentBanner`).\n * Takes precedence over `environmentLabel`. Click anywhere on the chip\n * copies the full commit SHA.\n */\n envNode?: ReactNode\n /**\n * Environment label (e.g., 'staging', 'production', 'local'). When\n * `envNode` is not supplied, the component renders a default chip\n * keyed off this label with appropriate background/border color.\n */\n environmentLabel?: string\n /** Full git commit SHA. Last 4 characters are rendered; click copies the full SHA. */\n commit?: string\n /** App version, e.g., '2.34.1'. Renders as `v{version}`. */\n version?: string\n /** ISO date string of the commit. Formatted as 'Mon D'. */\n commitDate?: string\n /** Commit author name (e.g., 'Leland Smith'). First name is shown. */\n commitAuthor?: string\n /** Full commit message body — shown as a tooltip over the env chip. */\n commitLog?: string\n /**\n * Optional click handler for the diagnostics icon. When unset, the\n * icon is not rendered.\n */\n onDiagnosticsClick?: () => void\n}\n\n/**\n * Footer commit info pill. Ported from\n * `react/app/src/layouts/AuthenticatedLayout.tsx::CommitCopyButton`\n * (lines 3017–3284, 2026-05-13).\n *\n * Visual: two stacked rows.\n * Row 1: [env chip] | {last4 SHA} | v{version} | [diagnostics icon]\n * Row 2: | {Mon D} | {firstName} | (only when date or author present)\n *\n * Clicking the env chip copies the full SHA via `useClipboard`, with a\n * brief \"Copied\" toast that fades up. Hovering the env chip shows the\n * full commit log in a tooltip.\n */\nexport function CommitCopyButton({\n envNode,\n environmentLabel,\n commit,\n version = '',\n commitDate = '',\n commitAuthor = '',\n commitLog = '',\n onDiagnosticsClick,\n}: CommitCopyButtonProps) {\n const safeCommit = isMeaningfulCommit(commit) ? commit.trim() : ''\n const { hasCopied, onCopy } = useClipboard(safeCommit)\n const shortCommit = safeCommit ? safeCommit.slice(-4) : ''\n\n const copiedAnimation = keyframes`\n 0% { opacity: 0; transform: translateY(6px); }\n 20% { opacity: 1; transform: translateY(0); }\n 100% { opacity: 0; transform: translateY(-8px); }\n `\n\n const formattedDate = useMemo(() => {\n if (!commitDate) return ''\n const parsed = new Date(commitDate)\n if (Number.isNaN(parsed.getTime())) return commitDate\n return parsed.toLocaleDateString(undefined, { month: 'short', day: 'numeric' })\n }, [commitDate])\n\n const metaLine = useMemo(() => {\n const firstName = isMeaningfulAuthor(commitAuthor) ? getFirstName(commitAuthor) : ''\n return [formattedDate, firstName].filter(Boolean).join(' | ')\n }, [formattedDate, commitAuthor])\n\n const normalizedCommitLog = useMemo(() => {\n if (commitLog?.trim()) {\n return commitLog.replace(/\\r\\n/g, '\\n').replace(/\\\\n/g, '\\n')\n }\n return ''\n }, [commitLog])\n\n const tooltipContent: ReactNode =\n normalizedCommitLog.length > 0 ? (\n <Box\n maxW=\"600px\"\n width=\"min(600px, 90vw)\"\n maxH=\"80vh\"\n whiteSpace=\"pre-wrap\"\n overflowY=\"auto\"\n overflowX=\"auto\"\n fontSize=\"xs\"\n fontFamily=\"mono\"\n wordBreak=\"break-word\"\n >\n {normalizedCommitLog}\n </Box>\n ) : undefined\n\n // Resolve the env node: prefer caller-supplied `envNode`, else build\n // a default chip from `environmentLabel`. If neither is present, no\n // env section is rendered.\n const envChip: ReactNode | null = useMemo(() => {\n if (envNode) return envNode\n const chip = defaultEnvChip(environmentLabel)\n if (!chip) return null\n return (\n <Box\n as=\"span\"\n display=\"inline-flex\"\n alignItems=\"center\"\n px=\"1.5\"\n py=\"0.5\"\n borderWidth=\"1px\"\n borderColor={chip.border}\n bg={chip.bg}\n color={chip.color}\n borderRadius=\"md\"\n fontSize=\"2xs\"\n fontWeight=\"600\"\n lineHeight=\"1\"\n textTransform=\"capitalize\"\n aria-label={`Environment: ${chip.name}`}\n >\n {chip.name}\n </Box>\n )\n }, [envNode, environmentLabel])\n\n const showEnv = Boolean(envChip)\n\n return (\n <VStack\n justify=\"center\"\n align=\"center\"\n borderRadius=\"md\"\n py={0.5}\n px={1}\n position=\"relative\"\n spacing={0}\n textAlign=\"center\"\n w=\"full\"\n >\n <Flex justify=\"center\" align=\"center\" gap={2} whiteSpace=\"nowrap\">\n {showEnv ? (\n <>\n <Box flexShrink={0}>\n <Tooltip\n label={tooltipContent}\n isDisabled={!tooltipContent}\n hasArrow\n placement=\"top-start\"\n openDelay={150}\n closeOnClick={false}\n shouldWrapChildren\n modifiers={[\n { name: 'preventOverflow', options: { padding: 16 } },\n { name: 'offset', options: { offset: [0, 12] } },\n ]}\n >\n <Button\n variant=\"unstyled\"\n minW=\"auto\"\n h=\"auto\"\n p={0}\n lineHeight=\"1\"\n color=\"inherit\"\n onClick={onCopy}\n aria-label=\"Copy commit ID\"\n isDisabled={!safeCommit}\n >\n {envChip}\n </Button>\n </Tooltip>\n </Box>\n <Text fontSize=\"2xs\" color=\"var(--sidebar-text-muted, #CBD5E0)\" flexShrink={0}>\n |\n </Text>\n </>\n ) : null}\n {shortCommit ? (\n <Text fontSize=\"2xs\" color={hasCopied ? 'green.500' : 'var(--sidebar-text-muted, #718096)'} flexShrink={0}>\n {shortCommit}\n </Text>\n ) : null}\n {version ? (\n <>\n {shortCommit ? (\n <Text fontSize=\"2xs\" color=\"var(--sidebar-text-muted, #CBD5E0)\" flexShrink={0}>\n |\n </Text>\n ) : null}\n <Text fontSize=\"2xs\" color=\"var(--sidebar-text-muted, #718096)\" flexShrink={0}>\n v{version}\n </Text>\n </>\n ) : null}\n {onDiagnosticsClick ? (\n <>\n <Text fontSize=\"2xs\" color=\"var(--sidebar-text-muted, #CBD5E0)\" flexShrink={0}>\n |\n </Text>\n <Tooltip label=\"Diagnostics\" hasArrow placement=\"top\">\n <Button\n variant=\"unstyled\"\n minW=\"auto\"\n h=\"auto\"\n p={0}\n lineHeight=\"1\"\n color=\"gray.400\"\n _hover={{ color: 'gray.600' }}\n onClick={(e) => {\n e.stopPropagation()\n onDiagnosticsClick()\n }}\n aria-label=\"Diagnostics\"\n >\n <Icon as={ActivityIcon} boxSize={3} />\n </Button>\n </Tooltip>\n </>\n ) : null}\n </Flex>\n {metaLine ? (\n <Text fontSize=\"2xs\" color=\"var(--sidebar-text-muted, #718096)\" textAlign=\"center\" whiteSpace=\"nowrap\">\n {metaLine}\n </Text>\n ) : null}\n {hasCopied && (\n <Box\n position=\"absolute\"\n bottom=\"100%\"\n mb=\"6px\"\n px=\"2\"\n py=\"1\"\n fontSize=\"xs\"\n bg=\"gray.700\"\n color=\"white\"\n borderRadius=\"md\"\n animation={`${copiedAnimation} 0.9s ease-out`}\n pointerEvents=\"none\"\n >\n Copied\n </Box>\n )}\n </VStack>\n )\n}\n\nexport default CommitCopyButton\n","import { useEffect, useState } from 'react'\nimport {\n Box,\n Flex,\n HStack,\n IconButton,\n Image,\n Link,\n Text,\n VStack,\n} from '@chakra-ui/react'\nimport { FiX } from 'react-icons/fi'\nimport { NavLink, useLocation } from 'react-router-dom'\nimport BrandLogo from './BrandLogo'\nimport NavItem from './NavItem'\nimport OrgPill from './OrgPill'\nimport ModePill from './ModePill'\nimport { CommitCopyButton } from './CommitCopyButton'\nimport { useShellChrome } from '../hooks/useShellChrome'\nimport { useShellFooter } from '../hooks/useShellFooter'\nimport { useShellNavItems } from '../hooks/useShellNavItems'\nimport { useShellOrganization } from '../hooks/useShellOrganization'\n\nexport interface SidebarProps {\n /** Mobile close handler (renders the X button on mobile when set). */\n onClose?: () => void\n /** DOM id for the sidebar root (defaults to 'sidebar-container'). */\n id?: string\n}\n\n/**\n * Politogy sidebar. Ported from\n * react/app/src/layouts/AuthenticatedLayout.tsx lines 3289–4192 (2026-05-13)\n * but stripped of the AI-sidebar block (moved to app's navItems pipeline).\n *\n * Renders, top to bottom:\n * - Brand logo + (mobile) close button\n * - Org logo (large) if present\n * - <OrgPill /> — organization switcher\n * - <ModePill /> — mode switcher\n * - Nav items (from useShellNavItems)\n * - Footer (Privacy / Terms / Subscriptions links + commit/version display)\n */\nexport function Sidebar({ onClose, id }: SidebarProps) {\n const { brandLogoSrc } = useShellChrome()\n const navItems = useShellNavItems()?.items ?? []\n const footer = useShellFooter()\n const org = useShellOrganization()\n const currentOrg = org?.currentOrg ?? null\n const location = useLocation()\n\n // Brand tokens, not Chakra color-mode values. The Brand stylesheet emits a\n // complete `.dark` block, so a single var covers both themes and a Brand edit\n // applies live. useColorModeValue would pin dark to Chakra's gray.900\n // (#171923) and silently ignore --sidebar-bg entirely.\n const sidebarBg = 'var(--sidebar-bg, #FFFFFF)'\n const sidebarBorderColor = 'var(--sidebar-border, #E2E8F0)'\n\n // Track expanded accordion menu by key.\n const [expandedMenu, setExpandedMenu] = useState<string | null>(null)\n\n useEffect(() => {\n const activeMenu =\n navItems.find(\n (item) =>\n item.children &&\n item.children.some((child) => {\n if (!child.href) return false\n const childPath = child.href.split('?')[0]\n if (!childPath) return false\n return (\n location.pathname === childPath || location.pathname.startsWith(`${childPath}/`)\n )\n }),\n )?.name || null\n setExpandedMenu(activeMenu)\n }, [location.pathname, navItems])\n\n const handleMenuToggle = (menuKey?: string | null) => {\n if (!menuKey) {\n setExpandedMenu(null)\n return\n }\n setExpandedMenu((prev) => (prev === menuKey ? null : menuKey))\n }\n\n return (\n <Flex\n id={id || 'sidebar-container'}\n transition=\"3s ease\"\n bg={sidebarBg}\n borderRight=\"1px\"\n borderRightColor={sidebarBorderColor}\n w={{ base: 'full', md: 'var(--sidebar-width, 240px)' }}\n pos=\"fixed\"\n h=\"100vh\"\n direction=\"column\"\n overflow=\"hidden\"\n >\n <Flex alignItems=\"center\" mx=\"8\" mt=\"3\" mb=\"2\" justifyContent=\"space-between\" flexShrink={0}>\n <Box h=\"40px\">\n {brandLogoSrc ? (\n <BrandLogo src={brandLogoSrc} className=\"h-full w-auto object-contain\" />\n ) : null}\n </Box>\n {onClose ? (\n <IconButton\n display={{ base: 'flex', md: 'none' }}\n onClick={onClose}\n variant=\"outline\"\n aria-label=\"close menu\"\n icon={<FiX />}\n />\n ) : null}\n </Flex>\n\n <Box\n flex=\"1\"\n overflowY=\"auto\"\n css={{\n '&::-webkit-scrollbar': { width: '8px' },\n '&::-webkit-scrollbar-track': { background: 'transparent' },\n '&::-webkit-scrollbar-thumb': { background: '#CBD5E0', borderRadius: '4px' },\n '&::-webkit-scrollbar-thumb:hover': { background: '#A0AEC0' },\n }}\n >\n {currentOrg?.logoUrl && (\n <Box mx=\"4\" mb=\"3\">\n <Image\n src={currentOrg.logoUrl}\n alt={`${currentOrg.name} logo`}\n maxH=\"70px\"\n w=\"full\"\n objectFit=\"contain\"\n borderRadius=\"md\"\n />\n </Box>\n )}\n\n <OrgPill />\n <ModePill />\n\n {navItems.map((link) => (\n <NavItem\n key={link.name}\n icon={link.icon}\n brandIcon={link.brandIcon}\n href={link.href}\n subItems={link.children}\n badge={link.badge}\n subLabel={link.subLabel}\n action={link.action}\n menuKey={String(link.name)}\n isExpanded={expandedMenu === link.name}\n onToggle={handleMenuToggle}\n isDisabled={Boolean(link.disabled)}\n >\n {link.name}\n </NavItem>\n ))}\n </Box>\n\n {/* Footer (Privacy / Terms / Subscriptions + commit info), pinned to bottom */}\n {footer && (\n <Box\n px=\"1\"\n py=\"1\"\n borderTop=\"1px\"\n borderColor=\"var(--sidebar-border, #E2E8F0)\"\n flexShrink={0}\n bg={sidebarBg}\n zIndex={1}\n >\n {/* Centered footer: give the links row full width so justify=center\n actually distributes it across the sidebar (a content-width flex\n row has no free space to center), and center the build meta too. */}\n <VStack align=\"stretch\" spacing={2} px=\"3\" py=\"2\" textAlign=\"center\">\n <HStack spacing={1} fontSize=\"xs\" color=\"gray.600\" wrap=\"wrap\" justify=\"center\" w=\"full\">\n {footer.links.map((l, idx) => (\n <Box key={`${l.label}-${idx}`} display=\"inline-flex\" alignItems=\"center\">\n {idx > 0 ? <Text color=\"var(--sidebar-text-muted, #929599)\" mx={1}>|</Text> : null}\n {l.external ? (\n <Link\n href={l.href}\n isExternal\n // Neutral sidebar text (not brand red); white on hover\n // like the nav rows. Dark-mode-safe via the tokens.\n color=\"var(--sidebar-text-muted, #4A5568)\"\n _hover={{\n color: 'var(--sidebar-hover-text, #FFFFFF)',\n textDecoration: 'underline',\n }}\n >\n {l.label}\n </Link>\n ) : (\n <Link\n as={NavLink}\n to={l.href}\n color=\"var(--sidebar-text-muted, #4A5568)\"\n _hover={{\n color: 'var(--sidebar-hover-text, #FFFFFF)',\n textDecoration: 'underline',\n }}\n >\n {l.label}\n </Link>\n )}\n </Box>\n ))}\n </HStack>\n {(footer.version ||\n footer.commit ||\n footer.commitFull ||\n footer.environmentLabel ||\n footer.envNode) && (\n <CommitCopyButton\n envNode={footer.envNode}\n environmentLabel={footer.environmentLabel}\n commit={footer.commitFull ?? footer.commit}\n version={footer.version}\n commitDate={footer.commitDate}\n commitAuthor={footer.commitAuthor}\n commitLog={footer.commitLog}\n onDiagnosticsClick={footer.onDiagnosticsClick}\n />\n )}\n </VStack>\n </Box>\n )}\n </Flex>\n )\n}\n\nexport default Sidebar\n","import { Box, Text } from '@chakra-ui/react'\n\nexport interface FooterProps {\n buildInfo?: string\n}\n\nexport function Footer({ buildInfo }: FooterProps) {\n return (\n <Box\n as=\"footer\"\n px={4}\n py={2}\n borderTop=\"1px solid\"\n borderColor=\"gray.200\"\n fontSize=\"xs\"\n color=\"gray.500\"\n >\n <Text>politogy {buildInfo ? `· ${buildInfo}` : ''}</Text>\n </Box>\n )\n}\n","import { useState, type ReactNode } from 'react'\nimport { Box, Flex } from '@chakra-ui/react'\nimport { Header } from './Header'\nimport { Sidebar } from './Sidebar'\nimport { Footer } from './Footer'\nimport type { ShellSlots } from '../types'\n\nexport interface AppLayoutProps extends ShellSlots {\n children: ReactNode\n buildInfo?: string\n}\n\n/**\n * Authenticated app shell composition: <Sidebar> on the left, <Header> on\n * top, <main> for routed children, optional <Footer>, plus modal + overlay\n * slots. All chrome data flows through ShellProvider/ShellChrome contexts —\n * AppLayout itself takes only optional slots for modals/overlays/notifs.\n */\nexport function AppLayout({\n children,\n buildInfo,\n modalsSlot,\n notificationsSlot,\n overlaySlot,\n}: AppLayoutProps) {\n const [mobileOpen, setMobileOpen] = useState(false)\n\n return (\n <Flex direction=\"column\" minH=\"100vh\">\n <Sidebar\n onClose={mobileOpen ? () => setMobileOpen(false) : undefined}\n />\n <Header onOpen={() => setMobileOpen(true)} />\n <Box as=\"main\" flex=\"1\" ml={{ base: 0, md: 60 }} position=\"relative\" overflow=\"auto\">\n {children}\n {notificationsSlot}\n </Box>\n {buildInfo ? <Footer buildInfo={buildInfo} /> : null}\n {modalsSlot}\n {overlaySlot}\n </Flex>\n )\n}\n","import type { ComponentType } from 'react'\nimport {\n FiAlertCircle,\n FiBattery,\n FiBatteryCharging,\n FiAlertTriangle,\n FiBell,\n FiGrid,\n FiHelpCircle,\n FiInfo,\n FiLifeBuoy,\n FiMail,\n FiMessageSquare,\n FiMoon,\n FiSettings,\n FiSun,\n FiUser,\n FiZap,\n} from 'react-icons/fi'\n\nexport type GlyphComponent = ComponentType<{ size?: number | string; className?: string }>\n\n/**\n * Brand-glyph registry: maps the icon NAME the Brand API emits (e.g.\n * `--topbar-icon-comms-fuel: bolt`) to a component.\n *\n * These names are Feather/Lucide icon names, NOT asset filenames — there is no\n * `/brand/icons/<name>.svg` for them in any app, and treating them as URLs\n * renders a broken image. Resolving them against the icon library the shell\n * already depends on keeps every app consistent with zero vendored assets.\n *\n * Aliases are included where Brand and Feather disagree on a name (`bolt` vs\n * `zap`, `life-buoy` vs `life-ring`).\n */\nconst GLYPHS: Record<string, GlyphComponent> = {\n // Communications Fuel reads as a LEVEL, so its glyph is a battery. `bolt`/\n // `zap` stay mapped for older Brand values.\n 'battery-charging': FiBatteryCharging,\n battery: FiBattery,\n fuel: FiBatteryCharging,\n bolt: FiZap,\n zap: FiZap,\n grid: FiGrid,\n apps: FiGrid,\n bell: FiBell,\n notification: FiBell,\n 'alert-triangle': FiAlertTriangle,\n alert: FiAlertTriangle,\n 'alert-circle': FiAlertCircle,\n 'life-buoy': FiLifeBuoy,\n 'life-ring': FiLifeBuoy,\n support: FiLifeBuoy,\n 'help-circle': FiHelpCircle,\n moon: FiMoon,\n sun: FiSun,\n info: FiInfo,\n mail: FiMail,\n 'message-square': FiMessageSquare,\n settings: FiSettings,\n user: FiUser,\n}\n\n/**\n * Resolve a Brand glyph name to a component. Returns null for an unknown name\n * so the caller renders its own fallback — an unrecognized token must never\n * produce a broken or empty icon.\n */\nexport function resolveBrandGlyph(name: string | null | undefined): GlyphComponent | null {\n if (!name) return null\n return GLYPHS[name.trim().toLowerCase()] ?? null\n}\n\n/** Names the registry knows — exported for tests and tooling. */\nexport const KNOWN_BRAND_GLYPHS = Object.keys(GLYPHS)\n","import { useEffect, useState } from 'react'\n\n/**\n * The six canonical top-bar action slots (Reference/Global-Rules v9 → top-bar\n * icons). Each slot's GLYPH is unique and comes from the Brand API\n * `topbarIcons.items.*` tokens, exposed as `--topbar-icon-<slot>` CSS vars\n * whose value is the brand-icon NAME. Every OTHER property — size, gap, color,\n * hover, selected — is universal across all six slots.\n */\nexport type TopBarIconSlot =\n | 'comms-fuel'\n | 'apps'\n | 'notifications'\n | 'alerts'\n | 'support'\n | 'dark-mode'\n\n/**\n * Reads the glyph NAME for a slot from its `--topbar-icon-<slot>` CSS var.\n *\n * Runs in an effect because the Brand stylesheet is appended to <head> at\n * runtime (Global Rules forbids baking it into the build), so the var is not\n * resolvable during SSR or the first synchronous render. The MutationObserver\n * re-reads once the stylesheet lands so the glyph upgrades from the caller's\n * fallback without a reload.\n *\n * Returns null when the slot has no Brand glyph — callers render their own\n * fallback icon in that case.\n */\nexport function useTopBarIconSlotGlyph(slot: TopBarIconSlot): string | null {\n const [name, setName] = useState<string | null>(null)\n\n useEffect(() => {\n if (typeof window === 'undefined') return\n\n const read = () => {\n const raw = window\n .getComputedStyle(document.documentElement)\n .getPropertyValue(`--topbar-icon-${slot}`)\n .trim()\n // Brand may emit the name quoted (e.g. \"bell\"); strip the quotes.\n .replace(/^['\"]|['\"]$/g, '')\n setName(raw.length > 0 ? raw : null)\n }\n\n read()\n\n const observer = new MutationObserver(read)\n observer.observe(document.head, { childList: true, subtree: true })\n return () => observer.disconnect()\n }, [slot])\n\n return name\n}\n\n/** Path to a brand-icon SVG in the consuming app's public dir. */\nexport function brandIconSrc(name: string, basePath = '/brand/icons/') {\n return `${basePath}${name}.svg`\n}\n","import { forwardRef, type ReactElement, type ReactNode } from 'react'\nimport { Badge, Box, IconButton, type IconButtonProps } from '@chakra-ui/react'\nimport { resolveBrandGlyph } from '../lib/brandGlyphs'\nimport {\n useTopBarIconSlotGlyph,\n type TopBarIconSlot,\n} from '../lib/topbarIconSlot'\n\n/**\n * The single count badge used by EVERY top-bar slot. Exported so a slot that\n * has to render its own trigger (a popover/menu button) still gets an\n * identical badge instead of hand-rolling one — mismatched badge sizes and\n * radii across slots are the most visible form of chrome drift.\n */\nexport function TopBarBadge({ count }: { count: number }) {\n if (!count || count <= 0) return null\n return (\n <Badge\n position=\"absolute\"\n top=\"-2px\"\n right=\"-2px\"\n bg=\"var(--topbar-badge-bg, #E63946)\"\n color=\"var(--topbar-badge-fg, #FFFFFF)\"\n rounded=\"full\"\n fontSize=\"0.625rem\"\n fontWeight=\"bold\"\n lineHeight=\"1\"\n minW=\"1rem\"\n h=\"1rem\"\n px=\"1\"\n display=\"flex\"\n alignItems=\"center\"\n justifyContent=\"center\"\n pointerEvents=\"none\"\n aria-hidden\n >\n {count > 9 ? '9+' : count}\n </Badge>\n )\n}\n\nexport interface TopBarIconProps\n extends Omit<IconButtonProps, 'icon' | 'aria-label'> {\n slot: TopBarIconSlot\n 'aria-label': string\n /**\n * Rendered when the Brand API has no glyph name for this slot (token unset,\n * stylesheet not yet loaded, or SSR). Keeps the top bar populated instead of\n * flashing an empty button.\n */\n fallbackIcon: ReactElement\n /** Marks the slot active — resolves the universal selected-state tokens. */\n isSelected?: boolean\n /** Unread/pending count. Rendered with the shared <TopBarBadge>. */\n badgeCount?: number\n /** Extra overlay (rare). Positioned in the same relative wrapper as the badge. */\n children?: ReactNode\n}\n\n/**\n * A single top-bar action icon. Use this for EVERY top-bar slot so the icons\n * share one universal treatment — never give one slot a bespoke size, spacing,\n * hover, selected style, or badge.\n *\n * Sizing is deliberately enforced on the rendered <svg> as well as the button:\n * react-icons emit their own width/height attributes, and Feather glyphs differ\n * in visual weight, so relying on the button box alone lets slots drift apart.\n */\nexport const TopBarIcon = forwardRef<HTMLButtonElement, TopBarIconProps>(\n function TopBarIcon(\n { slot, fallbackIcon, isSelected, badgeCount, children, ...rest }: TopBarIconProps,\n ref,\n ) {\n const glyphName = useTopBarIconSlotGlyph(slot)\n\n // Brand emits Feather/Lucide glyph NAMES (battery-charging, bell,\n // life-buoy…), not asset paths — resolve them against the shell's icon\n // registry. An unknown name falls back to the caller's icon rather than\n // rendering nothing.\n const Glyph = resolveBrandGlyph(glyphName)\n const icon = Glyph ? <Glyph /> : fallbackIcon\n\n const button = (\n <IconButton\n ref={ref}\n icon={icon}\n variant=\"ghost\"\n minW=\"var(--topbar-icon-button-size, 32px)\"\n w=\"var(--topbar-icon-button-size, 32px)\"\n h=\"var(--topbar-icon-button-size, 32px)\"\n p=\"0\"\n bg={\n isSelected\n ? 'var(--topbar-icon-selected-bg, transparent)'\n : 'transparent'\n }\n color={\n isSelected\n ? 'var(--topbar-icon-selected-color, var(--topbar-icon-color, #64748B))'\n : 'var(--topbar-icon-color, #64748B)'\n }\n _hover={{\n bg: 'var(--topbar-icon-hover-bg, transparent)',\n color: 'var(--topbar-icon-hover-color, var(--topbar-icon-color, #64748B))',\n }}\n sx={{\n // Normalize the glyph itself, not just its box. Covers react-icons\n // <svg> and brand <img> alike, and pins stroke weight so one glyph\n // can't read heavier than its neighbours.\n '& svg, & img': {\n width: 'var(--topbar-icon-size, 20px)',\n height: 'var(--topbar-icon-size, 20px)',\n strokeWidth: 'var(--topbar-icon-stroke-width, 2)',\n },\n }}\n {...rest}\n />\n )\n\n if (!badgeCount && !children) return button\n\n return (\n <Box position=\"relative\" display=\"inline-flex\">\n {button}\n <TopBarBadge count={badgeCount ?? 0} />\n {children}\n </Box>\n )\n },\n)\n\nexport type { TopBarIconSlot }\n\nexport default TopBarIcon\n","import { useCallback, useEffect, useMemo, useState } from 'react'\nimport { TopBarIcon } from './TopBarIcon'\nimport {\n Box,\n Button,\n Modal,\n ModalBody,\n ModalCloseButton,\n ModalContent,\n ModalFooter,\n ModalHeader,\n ModalOverlay,\n Text,\n Textarea,\n VStack,\n useDisclosure,\n useToast,\n} from '@chakra-ui/react'\nimport { useShellAuth } from '../hooks/useShellAuth'\nimport { useShellOrganization } from '../hooks/useShellOrganization'\nimport { useShellSupport } from '../hooks/useShellSupport'\nimport type { ShellSupportContext, ShellUser } from '../types'\n\nconst SUPPORT_REQUEST_SUCCESS_MESSAGE = 'Your support request was sent to Politogy leadership.'\n\ninterface SupportProfile {\n firstName: string\n lastName: string\n email: string\n phone: string\n missingEmail: boolean\n missingPhone: boolean\n}\n\nfunction splitName(value?: string | null) {\n const trimmed = String(value ?? '').trim()\n if (!trimmed) return { firstName: '', lastName: '' }\n const [first, ...rest] = trimmed.split(/\\s+/)\n return { firstName: first ?? '', lastName: rest.join(' ') }\n}\n\nexport function resolveSupportProfile(user: ShellUser | null): SupportProfile {\n if (!user) {\n return { firstName: '', lastName: '', email: '', phone: '', missingEmail: true, missingPhone: true }\n }\n const meta = (user.raw.user_metadata ?? {}) as {\n full_name?: string\n name?: string\n phone?: string\n }\n const resolvedName =\n String(meta.full_name ?? meta.name ?? '').trim() ||\n String(user.email ?? '').split('@')[0] ||\n ''\n const { firstName, lastName } = splitName(resolvedName)\n const email = String(user.email ?? '').trim()\n const phone = String(meta.phone ?? '').trim()\n return {\n firstName,\n lastName,\n email,\n phone,\n missingEmail: email.length === 0,\n missingPhone: phone.length === 0,\n }\n}\n\nfunction formatTimestamp(date: Date) {\n return date.toLocaleString('en-US', {\n year: 'numeric',\n month: 'short',\n day: 'numeric',\n hour: 'numeric',\n minute: '2-digit',\n second: '2-digit',\n hour12: true,\n })\n}\n\nexport function buildSupportRequestMessage(input: {\n firstName: string\n lastName: string\n organizationName?: string\n email: string\n phone: string\n pathname: string\n search?: string\n pageTitle?: string\n submittedAt?: Date\n}) {\n const submittedAt = input.submittedAt ?? new Date()\n const iso = submittedAt.toISOString()\n const display = formatTimestamp(submittedAt)\n const trimmedSearch = String(input.search ?? '').trim()\n\n return [\n 'A user requested support.',\n '',\n `First Name: ${input.firstName.trim() || 'Unknown'}`,\n `Last Name: ${input.lastName.trim() || 'Unknown'}`,\n `Organization: ${(input.organizationName ?? '').trim() || 'Unknown'}`,\n `Email: ${input.email.trim()}`,\n `Phone: ${input.phone.trim()}`,\n `Submitted At (ISO): ${iso}`,\n `Submitted At (Local): ${display}`,\n `Page Path: ${input.pathname.trim() || '/'}`,\n `Page Title: ${(input.pageTitle ?? '').trim() || 'Unknown'}`,\n `Query String: ${trimmedSearch || 'None'}`,\n ].join('\\n')\n}\n\n/**\n * Support icon + modal rendered in the header. Reads auth, org, and support\n * handler from ShellProvider. Renders nothing when the host app didn't supply\n * a `support` prop.\n */\nexport function SupportRequestButton() {\n const support = useShellSupport()\n const { user } = useShellAuth()\n const org = useShellOrganization()\n const { isOpen, onOpen, onClose } = useDisclosure()\n const toast = useToast()\n\n const profile = useMemo(() => resolveSupportProfile(user), [user])\n const [email, setEmail] = useState('')\n const [phone, setPhone] = useState('')\n const [message, setMessage] = useState('')\n const [isSubmitting, setIsSubmitting] = useState(false)\n\n useEffect(() => {\n if (!isOpen) return\n setEmail(profile.email)\n setPhone(profile.phone)\n setMessage('')\n setIsSubmitting(false)\n }, [isOpen, profile.email, profile.phone])\n\n const handleClose = useCallback(() => {\n if (isSubmitting) return\n onClose()\n }, [isSubmitting, onClose])\n\n const handleSubmit = useCallback(async () => {\n if (!support) return\n const resolvedEmail = (profile.missingEmail ? email : profile.email).trim()\n const resolvedPhone = (profile.missingPhone ? phone : profile.phone).trim()\n\n if (!resolvedEmail) {\n toast({ title: 'Email required', status: 'error', duration: 4000, isClosable: true })\n return\n }\n if (!resolvedPhone) {\n toast({ title: 'Phone required', status: 'error', duration: 4000, isClosable: true })\n return\n }\n if (!user?.id) {\n toast({\n title: 'Unable to send support request',\n description: 'You must be signed in to request support.',\n status: 'error',\n duration: 4000,\n isClosable: true,\n })\n return\n }\n\n const context: ShellSupportContext = {\n pathname: typeof window !== 'undefined' ? window.location.pathname : '/',\n search: typeof window !== 'undefined' ? window.location.search : '',\n pageTitle: typeof document !== 'undefined' ? document.title : undefined,\n organizationName: org?.currentOrg?.name ?? undefined,\n }\n const formatted = buildSupportRequestMessage({\n firstName: profile.firstName,\n lastName: profile.lastName,\n organizationName: context.organizationName,\n email: resolvedEmail,\n phone: resolvedPhone,\n pathname: context.pathname,\n search: context.search,\n pageTitle: context.pageTitle,\n })\n\n try {\n setIsSubmitting(true)\n await support.submitSupportRequest({\n email: resolvedEmail,\n phone: resolvedPhone,\n message: message.trim() ? `${message.trim()}\\n\\n---\\n\\n${formatted}` : formatted,\n context,\n })\n toast({\n title: 'Support request sent',\n description: SUPPORT_REQUEST_SUCCESS_MESSAGE,\n status: 'success',\n duration: 5000,\n isClosable: true,\n })\n onClose()\n } catch (err: unknown) {\n const description =\n err instanceof Error ? err.message : 'Unable to send your support request.'\n toast({\n title: 'Failed to request support',\n description,\n status: 'error',\n duration: 5000,\n isClosable: true,\n })\n } finally {\n setIsSubmitting(false)\n }\n }, [support, profile, email, phone, message, toast, user?.id, onClose, org?.currentOrg?.name])\n\n if (!support) return null\n\n return (\n <>\n {/* Routed through <TopBarIcon> so Support gets the same glyph source,\n size, color and hover as every other top-bar slot. It previously used\n a hand-rolled 18px SVG with size=\"sm\", which rendered visibly smaller\n than its neighbours. */}\n <TopBarIcon\n slot=\"support\"\n aria-label=\"Request support\"\n fallbackIcon={<LifebuoyIcon />}\n onClick={onOpen}\n />\n <Modal isOpen={isOpen} onClose={handleClose} isCentered>\n <ModalOverlay />\n <ModalContent>\n <ModalHeader>Support</ModalHeader>\n <ModalCloseButton isDisabled={isSubmitting} />\n <ModalBody>\n <VStack align=\"stretch\" spacing={4}>\n <Text fontSize=\"sm\" color=\"gray.600\">\n A message will be texted and emailed with your contact information and support will\n reply as soon as possible. If you are a beta customer that is typically within\n minutes.\n </Text>\n <Box rounded=\"md\" borderWidth=\"1px\" borderColor=\"gray.200\" bg=\"gray.50\" p={3}>\n <VStack align=\"stretch\" spacing={1}>\n <Text fontSize=\"sm\">\n <strong>Name:</strong>{' '}\n {[profile.firstName, profile.lastName].filter(Boolean).join(' ') || 'Unknown'}\n </Text>\n <Text fontSize=\"sm\">\n <strong>Organization:</strong> {org?.currentOrg?.name ?? 'Unknown'}\n </Text>\n <Text fontSize=\"sm\">\n <strong>Email:</strong>{' '}\n {(profile.missingEmail ? email : profile.email) || 'Missing'}\n </Text>\n <Text fontSize=\"sm\">\n <strong>Phone:</strong>{' '}\n {(profile.missingPhone ? phone : profile.phone) || 'Missing'}\n </Text>\n </VStack>\n </Box>\n {profile.missingEmail && (\n <Box>\n <Text fontSize=\"xs\" fontWeight=\"600\" color=\"gray.700\" mb={1}>\n Email\n </Text>\n <input\n type=\"email\"\n aria-label=\"Email\"\n value={email}\n onChange={(e) => setEmail(e.target.value)}\n placeholder=\"name@example.com\"\n style={{\n width: '100%',\n padding: '8px 12px',\n border: '1px solid #e2e8f0',\n borderRadius: '6px',\n fontSize: '14px',\n }}\n />\n </Box>\n )}\n {profile.missingPhone && (\n <Box>\n <Text fontSize=\"xs\" fontWeight=\"600\" color=\"gray.700\" mb={1}>\n Phone\n </Text>\n <input\n aria-label=\"Phone\"\n value={phone}\n onChange={(e) => setPhone(e.target.value)}\n placeholder=\"(503) 555-1212\"\n style={{\n width: '100%',\n padding: '8px 12px',\n border: '1px solid #e2e8f0',\n borderRadius: '6px',\n fontSize: '14px',\n }}\n />\n </Box>\n )}\n <Box>\n <Text fontSize=\"xs\" fontWeight=\"600\" color=\"gray.700\" mb={1}>\n Optional message\n </Text>\n <Textarea\n value={message}\n onChange={(e) => setMessage(e.target.value)}\n placeholder=\"What can we help you with?\"\n rows={3}\n />\n </Box>\n </VStack>\n </ModalBody>\n <ModalFooter>\n <Button variant=\"ghost\" mr={3} onClick={handleClose} isDisabled={isSubmitting}>\n Cancel\n </Button>\n <Button\n colorScheme=\"red\"\n onClick={() => void handleSubmit()}\n isLoading={isSubmitting}\n loadingText=\"Sending\"\n >\n Request Support\n </Button>\n </ModalFooter>\n </ModalContent>\n </Modal>\n </>\n )\n}\n\n// Inline life-buoy icon — saves adding react-icons as a shell dep.\nfunction LifebuoyIcon() {\n return (\n <svg\n width=\"18\"\n height=\"18\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n aria-hidden=\"true\"\n >\n <circle cx=\"12\" cy=\"12\" r=\"10\" />\n <circle cx=\"12\" cy=\"12\" r=\"4\" />\n <line x1=\"4.93\" y1=\"4.93\" x2=\"9.17\" y2=\"9.17\" />\n <line x1=\"14.83\" y1=\"14.83\" x2=\"19.07\" y2=\"19.07\" />\n <line x1=\"14.83\" y1=\"9.17\" x2=\"19.07\" y2=\"4.93\" />\n <line x1=\"14.83\" y1=\"9.17\" x2=\"18.36\" y2=\"5.64\" />\n <line x1=\"4.93\" y1=\"19.07\" x2=\"9.17\" y2=\"14.83\" />\n </svg>\n )\n}\n","import { useMemo, type ReactNode } from 'react'\nimport {\n ShellChromeContext,\n ShellFooterContext,\n ShellLinkedAccountsContext,\n ShellModeContext,\n ShellNavItemsContext,\n ShellNavigationPreferenceContext,\n ShellOrgContext,\n ShellRoleContext,\n ShellSupportProviderContext,\n} from '../providers/ShellProvider'\nimport type {\n ShellFooterValue,\n ShellLinkedAccountsValue,\n ShellModeValue,\n ShellNavItem,\n ShellNavigationPreferenceValue,\n ShellOrganizationValue,\n ShellRoleValue,\n ShellSupportValue,\n} from '../types'\n\nexport interface ShellChromeProps {\n children: ReactNode\n /** Drives <OrgPill /> in the sidebar. */\n organization?: ShellOrganizationValue | null\n /** Drives the UserMenu Switch-account section. */\n linkedAccounts?: ShellLinkedAccountsValue | null\n /** Drives <SupportRequestButton /> and modal submission. */\n support?: ShellSupportValue | null\n /** Rendered in the header (typically <DevNotesMenu />). */\n devNotesMenu?: ReactNode\n /** UserMenu profile link target. Defaults to '/my-profile'. */\n myProfileHref?: string\n\n /** Drives <ModePill /> + active row colors. */\n mode?: ShellModeValue | null\n /** The sidebar nav rows. */\n navItems?: ShellNavItem[]\n /** User's nav-rendering preference. */\n navigationPreference?: ShellNavigationPreferenceValue | null\n /** Active-role display info for the UserMenu role badge. */\n role?: ShellRoleValue | null\n /** Footer data for the sidebar bottom row. */\n footer?: ShellFooterValue | null\n\n /** Image src for the sidebar BrandLogo (top-left). */\n brandLogoSrc?: string\n /** Header right-side icon stack (Fuel, NewTextBell, Alerts, Toggle, ImportProgress, etc). */\n headerIconsSlot?: ReactNode\n /** href used by the UserMenu \"Organization Settings\" item. */\n organizationSettingsHref?: string\n /** When true, UserMenu shows \"Continue Onboarding\" item. */\n showContinueOnboarding?: boolean\n /** Click handler for UserMenu \"Continue Onboarding\". */\n onContinueOnboarding?: () => void\n /** Header page title text. */\n pageTitle?: string\n /** Header breadcrumb chips. */\n breadcrumbs?: Array<{ label: string; href?: string }>\n /** Header right-side action buttons (rendered before the icon row). */\n headerActions?: ReactNode\n /** Avatar URL override for UserMenu. Pass a value computed from the app's\n * profile.avatar_url / localStorage / default fallback chain. */\n userAvatarUrl?: string\n}\n\n/**\n * Drop-in chrome binding for apps where the org/linked-account/support data\n * lives in React contexts nested BELOW <ShellProvider> (e.g., an\n * <OrganizationProvider> that itself depends on <AuthProvider>).\n *\n * Use this component inside those providers to feed the values into the\n * shell's chrome contexts. Nested <Context.Provider> overrides the empty\n * defaults set by <ShellProvider> at the top of the tree.\n *\n * Apps that have all the data available at the ShellProvider construction\n * site can pass the same props to <ShellProvider> directly instead.\n */\nexport function ShellChrome({\n children,\n organization,\n linkedAccounts,\n support,\n devNotesMenu,\n myProfileHref,\n mode,\n navItems,\n navigationPreference,\n role,\n footer,\n brandLogoSrc,\n headerIconsSlot,\n organizationSettingsHref,\n showContinueOnboarding,\n onContinueOnboarding,\n pageTitle,\n breadcrumbs,\n headerActions,\n userAvatarUrl,\n}: ShellChromeProps) {\n const chrome = useMemo(\n () => ({\n devNotesMenu: devNotesMenu ?? null,\n myProfileHref: myProfileHref ?? '/my-profile',\n brandLogoSrc,\n headerIconsSlot,\n organizationSettingsHref,\n showContinueOnboarding,\n onContinueOnboarding,\n pageTitle,\n breadcrumbs,\n headerActions,\n userAvatarUrl,\n }),\n [\n devNotesMenu,\n myProfileHref,\n brandLogoSrc,\n headerIconsSlot,\n organizationSettingsHref,\n showContinueOnboarding,\n onContinueOnboarding,\n pageTitle,\n breadcrumbs,\n headerActions,\n userAvatarUrl,\n ],\n )\n\n const navItemsValue = useMemo(\n () => (navItems ? { items: navItems } : null),\n [navItems],\n )\n\n return (\n <ShellOrgContext.Provider value={organization ?? null}>\n <ShellLinkedAccountsContext.Provider value={linkedAccounts ?? null}>\n <ShellSupportProviderContext.Provider value={support ?? null}>\n <ShellModeContext.Provider value={mode ?? null}>\n <ShellNavItemsContext.Provider value={navItemsValue}>\n <ShellNavigationPreferenceContext.Provider value={navigationPreference ?? null}>\n <ShellRoleContext.Provider value={role ?? null}>\n <ShellFooterContext.Provider value={footer ?? null}>\n <ShellChromeContext.Provider value={chrome}>\n {children}\n </ShellChromeContext.Provider>\n </ShellFooterContext.Provider>\n </ShellRoleContext.Provider>\n </ShellNavigationPreferenceContext.Provider>\n </ShellNavItemsContext.Provider>\n </ShellModeContext.Provider>\n </ShellSupportProviderContext.Provider>\n </ShellLinkedAccountsContext.Provider>\n </ShellOrgContext.Provider>\n )\n}\n","export interface RegisterShellPrecacheOptions {\n /** Path the host app serves the SW from. Default: '/sw-shell.js'. */\n scriptUrl?: string\n /** Scope the SW controls. Default: '/'. */\n scope?: string\n}\n\n/**\n * Register the shell precache service worker. Silently no-ops in browsers that\n * don't support service workers (e.g., old Safari) and during SSR.\n *\n * Hosts must copy `node_modules/@the-portland-company/shell/dist/shell-precache.worker.js`\n * to the URL specified by `scriptUrl` (default `/sw-shell.js`) in their public\n * directory so the browser can fetch it at registration time.\n */\nexport async function registerShellPrecache(opts: RegisterShellPrecacheOptions = {}): Promise<void> {\n if (typeof window === 'undefined') return\n if (!('serviceWorker' in navigator)) return\n const scriptUrl = opts.scriptUrl ?? '/sw-shell.js'\n const scope = opts.scope ?? '/'\n try {\n await navigator.serviceWorker.register(scriptUrl, { scope })\n } catch (err) {\n // Registration failures are not user-visible. Log for ops, swallow.\n // eslint-disable-next-line no-console\n console.warn('[shell] precache SW registration failed:', err)\n }\n}\n","import type { AppRegistryEntry } from '../types'\n\n/**\n * Build a Speculation Rules JSON payload that prerenders other apps in the\n * registry on moderate eagerness. Returns null when there are no eligible\n * other apps to prerender (e.g., this is the only app in the registry).\n *\n * The host app is expected to render this as\n * `<script type=\"speculationrules\">{json}</script>` in <head> at runtime.\n */\nexport function buildSpeculationRules(\n currentApp: string,\n registry: AppRegistryEntry[],\n): string | null {\n const others = registry.filter(\n (entry) => entry.id !== currentApp && entry.visible !== false,\n )\n if (others.length === 0) return null\n const payload = {\n prerender: [\n {\n urls: others.map((entry) => entry.path),\n eagerness: 'moderate' as const,\n },\n ],\n }\n return JSON.stringify(payload)\n}\n"]}
1
+ {"version":3,"sources":["../src/theme/tokens.generated.ts","../src/theme/colors.ts","../src/theme/components.ts","../src/theme/index.ts","../src/components/Card.tsx","../src/components/PageContainer.tsx","../src/components/PageHeader.tsx","../src/components/BreadcrumbBar.tsx","../src/components/HeaderTabBar.tsx","../src/providers/GlobalUiIdProvider.tsx","../src/providers/ShellProvider.tsx","../src/hooks/useShellAuth.ts","../src/hooks/useAppRegistry.ts","../src/hooks/useShellOrganization.ts","../src/hooks/useShellLinkedAccounts.ts","../src/hooks/useShellSupport.ts","../src/hooks/useShellChrome.ts","../src/hooks/useShellMode.ts","../src/hooks/useShellNavItems.ts","../src/hooks/useShellNavigationPreference.ts","../src/hooks/useShellRole.ts","../src/hooks/useShellFooter.ts","../src/components/BrandLogo.tsx","../src/lib/userDisplay.ts","../src/lib/resolveModeConfig.ts","../src/theme-preference.ts","../src/components/UserMenu.tsx","../src/components/Header.tsx","../src/components/BrandIcon.tsx","../src/components/NavItem.tsx","../src/lib/orgColors.ts","../src/components/internal/orgBadge.tsx","../src/components/OrgPill.tsx","../src/components/ModePill.tsx","../src/components/CommitCopyButton.tsx","../src/components/Sidebar.tsx","../src/components/Footer.tsx","../src/components/AppLayout.tsx","../src/lib/brandGlyphs.tsx","../src/lib/topbarIconSlot.ts","../src/components/TopBarIcon.tsx","../src/components/SupportRequestButton.tsx","../src/components/ShellChrome.tsx","../src/sw/registerShellPrecache.ts","../src/speculation/emitRules.ts"],"names":["extendTheme","jsxs","jsx","clsx","Link","Tooltip","useLocation","useEffect","createContext","useState","useMemo","ChakraProvider","useContext","Box","Text","HStack","useNavigate","useColorModeValue","Flex","Menu","MenuButton","Avatar","VStack","FiChevronDown","Portal","MenuList","MenuItem","FiUser","FiRotateCcw","FiBriefcase","MenuDivider","Badge","Fragment","IconButton","FiTrash2","FiUserPlus","FiLogOut","FiMenu","NavLink","Collapse","Image","useClipboard","keyframes","Skeleton","Button","Icon","FiX","FiBatteryCharging","FiBattery","FiZap","FiGrid","FiBell","FiAlertTriangle","FiAlertCircle","FiLifeBuoy","FiHelpCircle","FiMoon","FiSun","FiInfo","FiMail","FiMessageSquare","FiSettings","forwardRef","TopBarIcon","useDisclosure","useToast","useCallback","Modal","ModalOverlay","ModalContent","ModalHeader","ModalCloseButton","ModalBody","Textarea","ModalFooter"],"mappings":"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","file":"index.cjs","sourcesContent":["// GENERATED by scripts/gen-tokens.mjs from Specs (/api/tokens). DO NOT EDIT.\n// The Chakra theme imports these so its colors derive from the same source\n// of truth (Admin Brand API → Specs) as chrome.css.\n// brandRamp = Specs colors.raceRed (primary brand), not shellChrome.brandRamp.\n\nexport const brandRamp = { 50: '#FDECEE', 100: '#FCE0E3', 200: '#F8B6BD', 300: '#EF6671', 400: '#EA4751', 500: '#E63946', 600: '#C42E3A', 700: '#9F252E', 800: '#660F17', 900: '#39080D' } as const;\nexport const grayRamp = { 50: '#F7FAFC', 100: '#EDF2F7', 200: '#E2E8F0', 300: '#CBD5E0', 400: '#A0AEC0', 500: '#718096', 600: '#4A5568', 700: '#2D3748', 800: '#1A202C', 900: '#171923' } as const;\nexport const buttonPrimaryBg = '#E63946';\nexport const buttonPrimaryBgHover = '#C42E3A';\nexport const fieldFocus = '#E63946';\n","// Theme color definitions for light and dark modes.\n// The primary brand ramp is GENERATED from Specs (the styling source of truth)\n// so the Chakra theme stays in lockstep with chrome.css — edit it in Admin →\n// sync to Specs → `npm run gen:tokens`, never hand-edit the ramp here.\nimport { brandRamp } from './tokens.generated';\n\nexport const colors = {\n // Primary brand = Specs race-red (#E63946 ramp). Generated via gen:tokens.\n brand: { ...brandRamp },\n\n // Politogy Brand Colors\n politogy: {\n // Legacy Blue - kept for reference\n blue: {\n 50: '#e8f4fd',\n 100: '#bee3f8',\n 200: '#90cdf4',\n 300: '#63b3ed',\n 400: '#4299e1',\n 500: '#3182ce',\n 600: '#2b6cb0',\n 700: '#2c5282',\n 800: '#2a4365',\n 900: '#1a365d',\n },\n // Race-red (Specs primary brand). Same ramp as `brand`.\n red: { ...brandRamp },\n // Navy - Professional & Authoritative\n navy: {\n 50: '#e8eef6',\n 100: '#c5d4e8',\n 200: '#9fb8d9',\n 300: '#789cca',\n 400: '#5b86be',\n 500: '#3e70b2',\n 600: '#325a8e',\n 700: '#26446a',\n 800: '#1a2e47',\n 900: '#0e1823',\n },\n // White & Off-white\n white: '#ffffff',\n offWhite: '#f8fafc',\n // Text colors\n text: {\n primary: '#1a202c',\n secondary: '#4a5568',\n muted: '#718096',\n light: '#a0aec0',\n },\n },\n\n // Semantic color tokens that will switch based on color mode\n gray: {\n 50: '#f7fafc',\n 100: '#edf2f7',\n 200: '#e2e8f0',\n 300: '#cbd5e0',\n 400: '#a0aec0',\n 500: '#718096',\n 600: '#4a5568',\n 700: '#2d3748',\n 800: '#1a202c',\n 900: '#171923',\n },\n};\n\n// Semantic tokens for automatic color mode switching\nexport const semanticTokens = {\n colors: {\n // Text colors\n 'text.primary': {\n default: 'gray.900',\n _dark: 'gray.50',\n },\n 'text.secondary': {\n default: 'gray.600',\n _dark: 'gray.400',\n },\n 'text.muted': {\n default: 'gray.500',\n _dark: 'gray.500',\n },\n\n // Background colors\n 'bg.primary': {\n default: 'white',\n _dark: 'gray.800',\n },\n 'bg.secondary': {\n default: 'gray.50',\n _dark: 'gray.900',\n },\n 'bg.surface': {\n default: 'white',\n _dark: 'gray.700',\n },\n 'bg.hover': {\n default: 'gray.50',\n _dark: 'gray.600',\n },\n\n // Border colors\n 'border.default': {\n default: 'gray.200',\n _dark: 'gray.600',\n },\n 'border.muted': {\n default: 'gray.100',\n _dark: 'gray.700',\n },\n\n // Component specific\n 'card.bg': {\n default: 'white',\n _dark: 'gray.700',\n },\n 'card.border': {\n default: 'gray.200',\n _dark: 'gray.600',\n },\n 'input.bg': {\n default: 'white',\n _dark: 'gray.700',\n },\n 'input.border': {\n default: 'gray.200',\n _dark: 'gray.600',\n },\n 'input.hover': {\n default: 'gray.400',\n _dark: 'gray.500',\n },\n\n // Navigation\n 'nav.bg': {\n default: 'white',\n _dark: 'gray.800',\n },\n 'nav.border': {\n default: 'gray.200',\n _dark: 'gray.700',\n },\n\n // Sidebar\n 'sidebar.bg': {\n default: 'gray.50',\n _dark: 'gray.900',\n },\n 'sidebar.hover': {\n default: 'gray.100',\n _dark: 'gray.800',\n },\n 'sidebar.active': {\n default: 'brand.50',\n _dark: 'brand.900',\n },\n\n // Status colors\n 'success.bg': {\n default: 'green.50',\n _dark: 'green.900',\n },\n 'error.bg': {\n default: 'red.50',\n _dark: 'red.900',\n },\n 'warning.bg': {\n default: 'yellow.50',\n _dark: 'yellow.900',\n },\n 'info.bg': {\n default: 'blue.50',\n _dark: 'blue.900',\n },\n },\n};\n","// Component style overrides for theme using Politogy brand colors\nexport const components = {\n Button: {\n baseStyle: {\n fontWeight: 'medium',\n },\n defaultProps: {\n colorScheme: 'brand',\n },\n variants: {\n primary: {\n bg: 'brand.500',\n color: 'white',\n _hover: {\n bg: 'brand.600',\n _disabled: {\n bg: 'brand.500',\n },\n },\n _active: {\n bg: 'brand.700',\n },\n },\n secondary: {\n borderWidth: '1px',\n borderColor: 'gray.300',\n bg: 'white',\n color: 'gray.700',\n _hover: {\n bg: 'gray.50',\n },\n },\n solid: (props: { colorScheme: string }) => {\n const { colorScheme: c } = props;\n // For brand colorScheme, use explicit colors\n if (c === 'brand') {\n return {\n bg: 'brand.500',\n color: 'white',\n _hover: {\n bg: 'brand.600',\n _disabled: {\n bg: 'brand.500',\n },\n },\n _active: {\n bg: 'brand.700',\n },\n };\n }\n // For other colorSchemes, use standard pattern with explicit bg and white text\n return {\n bg: `${c}.500`,\n color: 'white',\n _hover: {\n bg: `${c}.600`,\n _disabled: {\n bg: `${c}.500`,\n },\n },\n _active: {\n bg: `${c}.700`,\n },\n };\n },\n ghost: (props: { colorScheme: string }) => {\n const { colorScheme: c } = props;\n return {\n color: `${c}.600`,\n _hover: {\n bg: `${c}.50`,\n },\n };\n },\n outline: (props: { colorScheme: string }) => {\n const { colorScheme: c } = props;\n return {\n borderColor: `${c}.500`,\n color: `${c}.600`,\n _hover: {\n bg: `${c}.50`,\n },\n };\n },\n link: {\n color: 'brand.500',\n _hover: {\n color: 'brand.600',\n textDecoration: 'underline',\n },\n },\n },\n },\n\n Heading: {\n baseStyle: {\n color: 'politogy.navy.800',\n fontWeight: 'semibold',\n },\n },\n\n Card: {\n baseStyle: {\n container: {\n bg: 'card.bg',\n borderWidth: '1px',\n borderColor: 'card.border',\n borderRadius: 'lg',\n },\n },\n },\n\n Input: {\n baseStyle: {\n field: {\n bg: 'input.bg',\n borderColor: 'var(--mode-input-border-color)',\n _hover: {\n borderColor: 'var(--mode-input-hover-border-color)',\n },\n _focus: {\n borderColor: 'var(--mode-primary-color)',\n boxShadow: '0 0 0 1px var(--mode-input-focus-shadow-color)',\n },\n },\n },\n defaultProps: {\n variant: 'outline',\n },\n variants: {\n outline: {\n field: {\n borderColor: 'var(--mode-input-border-color)',\n _hover: {\n borderColor: 'var(--mode-input-hover-border-color)',\n },\n _focus: {\n borderColor: 'var(--mode-primary-color)',\n boxShadow: '0 0 0 1px var(--mode-input-focus-shadow-color)',\n },\n },\n },\n },\n },\n\n NumberInput: {\n defaultProps: {\n variant: 'outline',\n },\n variants: {\n outline: {\n field: {\n borderColor: 'var(--mode-input-border-color)',\n _hover: {\n borderColor: 'var(--mode-input-hover-border-color)',\n },\n _focus: {\n borderColor: 'var(--mode-primary-color)',\n boxShadow: '0 0 0 1px var(--mode-input-focus-shadow-color)',\n },\n },\n },\n },\n },\n\n Select: {\n baseStyle: {\n field: {\n bg: 'input.bg',\n borderColor: 'var(--mode-input-border-color)',\n _hover: {\n borderColor: 'var(--mode-input-hover-border-color)',\n },\n _focus: {\n borderColor: 'var(--mode-primary-color)',\n boxShadow: '0 0 0 1px var(--mode-input-focus-shadow-color)',\n },\n },\n },\n defaultProps: {\n variant: 'outline',\n },\n variants: {\n outline: {\n field: {\n borderColor: 'var(--mode-input-border-color)',\n _hover: {\n borderColor: 'var(--mode-input-hover-border-color)',\n },\n _focus: {\n borderColor: 'var(--mode-primary-color)',\n boxShadow: '0 0 0 1px var(--mode-input-focus-shadow-color)',\n },\n },\n },\n },\n },\n\n Textarea: {\n baseStyle: {\n bg: 'input.bg',\n borderColor: 'var(--mode-input-border-color)',\n _hover: {\n borderColor: 'var(--mode-input-hover-border-color)',\n },\n _focus: {\n borderColor: 'var(--mode-primary-color)',\n boxShadow: '0 0 0 1px var(--mode-input-focus-shadow-color)',\n },\n },\n defaultProps: {\n variant: 'outline',\n },\n variants: {\n outline: {\n borderColor: 'var(--mode-input-border-color)',\n _hover: {\n borderColor: 'var(--mode-input-hover-border-color)',\n },\n _focus: {\n borderColor: 'var(--mode-primary-color)',\n boxShadow: '0 0 0 1px var(--mode-input-focus-shadow-color)',\n },\n },\n },\n },\n\n Menu: {\n baseStyle: {\n list: {\n bg: 'bg.surface',\n borderColor: 'var(--mode-input-border-color)',\n boxShadow: 'lg',\n },\n item: {\n bg: 'transparent',\n _hover: {\n bg: 'bg.hover',\n },\n _focus: {\n bg: 'bg.hover',\n },\n },\n },\n },\n\n Modal: {\n baseStyle: {\n dialog: {\n bg: 'bg.surface',\n },\n overlay: {\n bg: 'blackAlpha.600',\n },\n },\n },\n\n Popover: {\n baseStyle: {\n content: {\n bg: 'bg.surface',\n borderColor: 'border.default',\n boxShadow: 'lg',\n },\n },\n },\n\n Drawer: {\n baseStyle: {\n dialog: {\n bg: 'bg.surface',\n },\n overlay: {\n bg: 'blackAlpha.600',\n },\n },\n },\n\n Tabs: {\n baseStyle: {\n root: {\n width: '100%',\n },\n tablist: {\n width: '100%',\n alignItems: 'flex-end',\n gap: 'var(--app-tab-gap)',\n },\n tabpanels: {\n width: '100%',\n },\n tabpanel: {\n width: '100%',\n },\n tab: {\n minHeight: 'var(--app-tab-height)',\n height: 'var(--app-tab-height)',\n lineHeight: 1,\n borderTopLeftRadius: 'var(--app-tab-radius)',\n borderTopRightRadius: 'var(--app-tab-radius)',\n borderBottomLeftRadius: 0,\n borderBottomRightRadius: 0,\n color: 'text.secondary',\n _selected: {\n color: 'white',\n bg: 'brand.500',\n borderColor: 'brand.500',\n fontWeight: 'semibold',\n },\n _hover: {\n bg: 'gray.100',\n },\n },\n },\n variants: {\n enclosed: {\n tab: {\n color: 'gray.600',\n bg: 'transparent',\n borderColor: 'gray.200',\n _selected: {\n color: 'white',\n bg: 'brand.500',\n borderColor: 'brand.500',\n borderBottomColor: 'brand.500',\n },\n _hover: {\n bg: 'gray.100',\n },\n },\n },\n 'enclosed-colored': {\n tab: {\n color: 'gray.600',\n _selected: {\n color: 'white',\n bg: 'brand.500',\n },\n },\n },\n 'soft-rounded': {\n tab: {\n color: 'gray.600',\n _selected: {\n color: 'white',\n bg: 'brand.500',\n },\n },\n },\n 'solid-rounded': {\n tab: {\n color: 'gray.600',\n _selected: {\n color: 'white',\n bg: 'brand.500',\n },\n },\n },\n line: {\n tab: {\n color: 'gray.600',\n _selected: {\n color: 'white',\n bg: 'brand.500',\n borderColor: 'brand.500',\n },\n _hover: {\n bg: 'gray.100',\n },\n },\n },\n unstyled: {\n tab: {\n // Allow inline styles to take precedence for unstyled variant\n },\n },\n },\n defaultProps: {\n colorScheme: 'brand',\n },\n },\n\n Badge: {\n baseStyle: {\n borderRadius: 'md',\n px: 2,\n py: 1,\n fontWeight: 'medium',\n },\n defaultProps: {\n colorScheme: 'brand',\n },\n },\n\n Link: {\n baseStyle: {\n color: 'brand.500',\n _hover: {\n color: 'brand.600',\n textDecoration: 'underline',\n },\n },\n },\n\n Alert: {\n baseStyle: {\n container: {\n borderRadius: 'md',\n },\n },\n variants: {\n subtle: (props: { colorScheme: string }) => {\n const { colorScheme: c } = props;\n // Keep info alerts blue\n if (c === 'blue' || c === 'info') {\n return {\n container: {\n bg: 'blue.50',\n },\n icon: {\n color: 'blue.500',\n },\n title: {\n color: 'blue.800',\n },\n description: {\n color: 'blue.700',\n },\n };\n }\n return {};\n },\n 'left-accent': (props: { colorScheme: string }) => {\n const { colorScheme: c } = props;\n if (c === 'blue' || c === 'info') {\n return {\n container: {\n bg: 'blue.50',\n borderLeftColor: 'blue.500',\n },\n icon: {\n color: 'blue.500',\n },\n };\n }\n return {};\n },\n solid: (props: { colorScheme: string }) => {\n const { colorScheme: c } = props;\n if (c === 'blue' || c === 'info') {\n return {\n container: {\n bg: 'blue.500',\n color: 'white',\n },\n };\n }\n return {};\n },\n },\n },\n\n Table: {\n baseStyle: {\n table: {\n width: '100%',\n borderCollapse: 'collapse',\n borderSpacing: '0',\n borderColor: 'gray.200',\n },\n th: {\n borderColor: 'gray.200',\n borderBottom: 'none',\n bg: 'gray.200',\n color: 'text.secondary',\n fontWeight: 'semibold',\n px: 3,\n py: 2.5,\n minHeight: '44px',\n height: '44px',\n verticalAlign: 'middle',\n },\n td: {\n borderColor: 'gray.200',\n borderBottom: 'none',\n px: 3,\n py: 2.5,\n minHeight: '44px',\n height: '44px',\n verticalAlign: 'middle',\n },\n tr: {\n borderBottom: 'none',\n borderColor: 'transparent',\n _odd: {\n bg: 'white',\n },\n _even: {\n bg: 'gray.50',\n },\n _hover: {\n bg: 'gray.100',\n },\n },\n tbody: {\n tr: {\n _odd: {\n bg: 'white',\n },\n _even: {\n bg: 'gray.50',\n },\n _hover: {\n bg: 'blue.100',\n },\n },\n },\n },\n variants: {\n simple: {},\n striped: {},\n },\n defaultProps: {\n variant: 'striped',\n },\n },\n\n Divider: {\n baseStyle: {\n borderColor: 'border.default',\n },\n },\n};\n","import { extendTheme } from '@chakra-ui/react';\nimport { colors, semanticTokens } from './colors';\nimport { components } from './components';\n\n// Define the theme configuration\nconst config = {\n initialColorMode: 'light', // Always use light theme\n useSystemColorMode: false, // Disable system color mode detection\n};\n\n// Global styles\nconst styles = {\n global: () => ({\n body: {\n bg: 'white',\n color: 'gray.900',\n },\n ':root': {\n '--mode-primary-color': 'var(--app-color-brand-500)',\n '--mode-input-border-color': 'var(--app-color-brand-500)',\n '--mode-input-hover-border-color': 'var(--app-color-brand-600)',\n '--mode-input-focus-shadow-color': 'var(--app-color-brand-500)',\n },\n // Ensure non-Chakra/native text-like inputs follow mode border colors as well.\n 'input:not([type=\"checkbox\"]):not([type=\"radio\"]):not([type=\"range\"]):not([type=\"file\"]):not([type=\"color\"]), textarea, select':\n {\n borderColor: 'var(--mode-input-border-color)',\n },\n 'input:not([type=\"checkbox\"]):not([type=\"radio\"]):not([type=\"range\"]):not([type=\"file\"]):not([type=\"color\"]):hover, textarea:hover, select:hover':\n {\n borderColor: 'var(--mode-input-hover-border-color)',\n },\n 'input:not([type=\"checkbox\"]):not([type=\"radio\"]):not([type=\"range\"]):not([type=\"file\"]):not([type=\"color\"]):focus, textarea:focus, select:focus':\n {\n borderColor: 'var(--mode-primary-color)',\n boxShadow: '0 0 0 1px var(--mode-input-focus-shadow-color)',\n },\n }),\n};\n\n// Fonts — Brand-token driven, exactly like color.\n//\n// These were hardcoded to the system stack, and because Chakra's global styles\n// beat app CSS, VRM rendered in -apple-system while every app on the native\n// chrome rendered the Brand family. A font change is supposed to ship from the\n// Brand editor without a redeploy, so heading/body resolve `--font-family` (and\n// mono resolves the shared mono token) with the old stacks as the pre-tokens\n// fallback only (Reference/UI-Platform → Typography; HITL 2026-07-23).\nconst SYSTEM_SANS =\n 'ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, \"Helvetica Neue\", Arial, \"Noto Sans\", sans-serif'\nconst SYSTEM_MONO =\n 'SFMono-Regular, Menlo, Monaco, Consolas, \"Liberation Mono\", \"Courier New\", monospace'\n\nconst fonts = {\n heading: `var(--font-family, ${SYSTEM_SANS})`,\n body: `var(--font-family, ${SYSTEM_SANS})`,\n mono: `var(--type-mono-family, ${SYSTEM_MONO})`,\n};\n\n// Create and export the theme\nexport const politogyTheme = extendTheme({\n config,\n colors,\n semanticTokens,\n components,\n styles,\n fonts,\n\n // Additional theme configurations\n shadows: {\n outline: '0 0 0 3px var(--app-color-brand-500)',\n },\n\n radii: {\n none: '0',\n sm: '0.125rem',\n base: '0.25rem',\n md: '0.375rem',\n lg: '0.5rem',\n xl: '0.75rem',\n '2xl': '1rem',\n '3xl': '1.5rem',\n full: '9999px',\n },\n});\n\nexport { politogyTheme as default };\n","import type { CSSProperties, ReactNode } from 'react';\ntype CardProps = {\n title?: string;\n children: ReactNode;\n minH?: string | number;\n className?: string;\n style?: CSSProperties;\n [key: string]: unknown;\n};\n\nexport default function Card({\n title,\n children,\n minH,\n className,\n style,\n ...props\n}: CardProps) {\n return (\n <div\n className={`rounded-lg border border-slate-200 bg-white p-6 shadow-sm ${className || ''}`}\n style={{ minHeight: minH, ...style }}\n {...props}\n >\n {title && <h3 className=\"mb-4 text-lg font-semibold\">{title}</h3>}\n {children}\n </div>\n );\n}\n","import type { ReactNode } from 'react';\nimport clsx from 'clsx';\n\ntype PageContainerProps = {\n children: ReactNode;\n maxW?: string;\n px?: number | string;\n py?: number | string;\n lockHeight?: boolean;\n};\n\nexport default function PageContainer({\n children,\n maxW = 'container.xl',\n px,\n py,\n lockHeight = true,\n}: PageContainerProps) {\n const isFullWidth = maxW === 'full';\n const effectivePx = isFullWidth ? 0 : px === undefined ? 4 : Number(px);\n const effectivePy = py === undefined ? (isFullWidth ? 0 : 4) : py;\n const pxValue = String(effectivePx);\n const pyValue = String(effectivePy);\n\n const maxWClass = isFullWidth\n ? 'max-w-none'\n : maxW === 'container.xl'\n ? 'max-w-7xl'\n : maxW === 'container.lg'\n ? 'max-w-6xl'\n : maxW === 'container.md'\n ? 'max-w-5xl'\n : typeof maxW === 'string' && /^(\\d+)px$/.test(maxW)\n ? ''\n : 'max-w-7xl';\n\n const pxClass =\n pxValue === '0'\n ? 'px-0'\n : pxValue === '1'\n ? 'px-1'\n : pxValue === '2'\n ? 'px-2'\n : pxValue === '3'\n ? 'px-3'\n : pxValue === '4'\n ? 'px-4'\n : 'px-4';\n\n const pyClass =\n pyValue === '0'\n ? 'py-0'\n : pyValue === '4'\n ? 'py-4'\n : pyValue === '5'\n ? 'py-5'\n : pyValue === '6'\n ? 'py-6'\n : 'py-6';\n\n const inlineMaxWStyle =\n typeof maxW === 'string' && /^(\\d+)px$/.test(maxW) ? { maxWidth: maxW } : undefined;\n\n return (\n <main\n className={lockHeight ? 'h-[calc(100vh-80px)] min-h-[calc(100vh-80px)]' : ''}\n style={{ background: 'var(--app-tab-content-bg)' }}\n >\n <div\n className={clsx(\n 'mx-auto w-full',\n maxWClass,\n pxClass,\n pyClass,\n lockHeight ? 'h-full' : 'h-auto'\n )}\n style={inlineMaxWStyle}\n >\n {children}\n </div>\n </main>\n );\n}\n","import { Link } from 'react-router-dom';\nimport clsx from 'clsx';\nimport type { ReactNode } from 'react';\n\ntype BreadcrumbItem = {\n label: string;\n href?: string;\n};\n\ntype PageHeaderProps = {\n title?: ReactNode;\n breadcrumbs?: BreadcrumbItem[];\n actions?: ReactNode;\n tabBar?: ReactNode;\n maxW?: string;\n hideSidebar?: boolean;\n};\n\nconst resolveMaxWidthClass = (maxW: string) => {\n if (maxW === 'full') return 'max-w-none';\n if (maxW === 'container.lg') return 'max-w-6xl';\n if (maxW === 'container.md') return 'max-w-5xl';\n return 'max-w-7xl';\n};\n\nexport default function PageHeader({\n title,\n breadcrumbs = [],\n actions = null,\n tabBar = null,\n maxW = 'full',\n hideSidebar = false,\n}: PageHeaderProps) {\n const maxWClass = resolveMaxWidthClass(maxW);\n const titleText = typeof title === 'string' ? title.trim() : '';\n const normalizedTitle = titleText.toLowerCase();\n const breadcrumbsWithoutCurrent = [...breadcrumbs];\n const last = breadcrumbsWithoutCurrent[breadcrumbsWithoutCurrent.length - 1];\n // Only remove a trailing breadcrumb that duplicates the page title when there's\n // still at least one breadcrumb left to show.\n if (\n breadcrumbsWithoutCurrent.length > 1 &&\n normalizedTitle &&\n last &&\n last.label.trim().toLowerCase() === normalizedTitle\n ) {\n breadcrumbsWithoutCurrent.pop();\n }\n\n // Avoid rendering an empty header bar (no title, no breadcrumbs, no actions, no tabs).\n if (!title && breadcrumbsWithoutCurrent.length === 0 && !actions && !tabBar) {\n return null;\n }\n\n return (\n <div\n style={{ backgroundColor: 'var(--app-tab-header-bg, #888888)' }}\n className={clsx('text-slate-100', tabBar ? 'pt-3 pb-0' : 'py-3 border-b border-gray-200', {\n 'md:ml-60': !hideSidebar,\n })}\n >\n <div className={clsx('w-full px-4', maxWClass)}>\n <div className=\"flex w-full flex-nowrap items-start justify-between gap-4\">\n <div className=\"min-w-0 flex-1\">\n {title ? (\n <div className=\"min-w-0\">\n <div className=\"truncate text-lg font-semibold text-white\">{title}</div>\n </div>\n ) : null}\n {breadcrumbsWithoutCurrent.length > 0 ? (\n <nav\n aria-label=\"Breadcrumb\"\n className={clsx('min-w-0 text-slate-100', title ? 'mt-1' : '')}\n >\n <ol className=\"flex flex-nowrap items-center gap-2 overflow-hidden text-sm text-gray-600\">\n {breadcrumbsWithoutCurrent.map((item, index) => (\n <li\n key={`${item.label}-${index}`}\n className=\"flex min-w-0 flex-shrink-0 items-center gap-2\"\n >\n {index > 0 ? <span className=\"text-gray-400\">&gt;</span> : null}\n {item.href ? (\n <Link to={item.href} className=\"truncate text-slate-100 hover:underline\">\n {item.label}\n </Link>\n ) : (\n <span className=\"truncate text-slate-100\">{item.label}</span>\n )}\n </li>\n ))}\n </ol>\n </nav>\n ) : null}\n </div>\n {actions ? <div className=\"flex-shrink-0\">{actions}</div> : null}\n </div>\n </div>\n {tabBar ? (\n <div className=\"m-0 w-full px-0\" style={{ backgroundColor: 'transparent' }}>\n {tabBar}\n </div>\n ) : null}\n </div>\n );\n}\n","import type { ReactNode } from 'react';\nimport { Link } from 'react-router-dom';\nimport clsx from 'clsx';\n\ntype BreadcrumbItem = {\n label: string;\n href?: string;\n};\n\ntype BreadcrumbBarProps = {\n breadcrumbs?: BreadcrumbItem[];\n actions?: ReactNode;\n maxW?: string;\n};\n\nexport default function BreadcrumbBar({\n breadcrumbs = [],\n actions = null,\n maxW = 'full',\n}: BreadcrumbBarProps) {\n if ((!breadcrumbs || breadcrumbs.length === 0) && !actions) {\n return null;\n }\n\n const maxWClass =\n maxW === 'full'\n ? 'max-w-none'\n : maxW === 'container.xl'\n ? 'max-w-7xl'\n : maxW === 'container.lg'\n ? 'max-w-6xl'\n : maxW === 'container.md'\n ? 'max-w-5xl'\n : 'max-w-7xl';\n\n return (\n <div\n className=\"ml-0 border-b border-gray-200 px-4 py-3 md:ml-60\"\n style={{ backgroundColor: 'var(--app-tab-header-bg, #888888)' }}\n >\n <div className={clsx('mx-auto w-full px-0', maxWClass)}>\n <div className=\"flex w-full items-center justify-between\">\n {breadcrumbs && breadcrumbs.length > 0 && (\n <nav aria-label=\"Breadcrumb\">\n <ol className=\"flex items-center gap-2 text-sm text-slate-100\">\n {breadcrumbs.map((item, index) => (\n <li key={index} className=\"flex items-center gap-2\">\n {index > 0 ? <span className=\"text-gray-400\">&gt;</span> : null}\n {item.href ? (\n <Link to={item.href} className=\"text-slate-100 hover:underline\">\n {item.label}\n </Link>\n ) : (\n <span className=\"text-slate-100\">{item.label}</span>\n )}\n </li>\n ))}\n </ol>\n </nav>\n )}\n {actions && <div>{actions}</div>}\n </div>\n </div>\n </div>\n );\n}\n","import clsx from 'clsx';\nimport type { ReactNode } from 'react';\nimport { Tooltip } from '@chakra-ui/react';\n\nexport type HeaderTabBarItem = {\n id: string;\n label: string;\n icon: ReactNode;\n disabled?: boolean;\n};\n\ntype HeaderTabBarProps = {\n items: HeaderTabBarItem[];\n activeId: string;\n onChange: (id: string) => void;\n className?: string;\n ariaLabel?: string;\n};\n\nexport default function HeaderTabBar({\n items,\n activeId,\n onChange,\n className,\n ariaLabel = 'Tabs',\n}: HeaderTabBarProps) {\n return (\n <div\n role=\"tablist\"\n aria-label={ariaLabel}\n className={clsx(\n // Header-wide tab strip: background + bottom border only (no outer box).\n 'app-header-tab-bar m-0 flex w-full bg-slate-100 p-0',\n 'border-b border-slate-200',\n className\n )}\n >\n {items.map((item, idx) => {\n const isActive = item.id === activeId;\n const isDisabled = Boolean(item.disabled);\n return (\n <Tooltip\n key={item.id}\n label={item.label}\n placement=\"top\"\n hasArrow\n bg=\"black\"\n color=\"white\"\n isDisabled={isDisabled}\n >\n <button\n type=\"button\"\n role=\"tab\"\n aria-selected={isActive}\n aria-label={item.label}\n disabled={isDisabled}\n onClick={() => onChange(item.id)}\n className={clsx(\n 'app-header-tab-button relative inline-flex flex-1 items-center justify-center',\n 'transition-colors',\n 'rounded-none',\n idx === 0 ? 'rounded-tl-lg' : null,\n idx === items.length - 1 ? 'rounded-tr-lg' : null,\n isActive\n ? 'text-white'\n : 'bg-transparent text-slate-600 hover:bg-white/60 hover:text-slate-900',\n isDisabled ? 'cursor-not-allowed opacity-50' : null\n )}\n style={{\n background: isActive\n ? 'var(--mode-primary-color, var(--app-btn-primary-bg))'\n : undefined,\n }}\n >\n <span className=\"inline-flex items-center justify-center text-[14px] leading-none\">\n {item.icon}\n </span>\n </button>\n </Tooltip>\n );\n })}\n </div>\n );\n}\n","import { useEffect } from 'react';\nimport { useLocation } from 'react-router-dom';\n\n// Inlined feature-flag check (originally in react/app/src/utils/runtimeFeatureFlags.ts).\n// The shell package is self-contained; keeping this helper local avoids a\n// cross-app import while preserving identical runtime behavior.\nconst FLAG_PREFIX = ['__', 'politogy', 'enable'].join('');\nconst GLOBAL_UI_IDS_FLAG = [FLAG_PREFIX, 'global', 'ui', 'ids'].join('_');\n\nfunction isFlagEnabled(name: string): boolean {\n if (typeof window === 'undefined') return false;\n\n try {\n const params = new URLSearchParams(window.location.search);\n if (params.get(name) === '1') return true;\n } catch {\n // Ignore malformed location access.\n }\n\n try {\n return window.localStorage.getItem(name) === '1';\n } catch {\n return false;\n }\n}\n\nfunction isGlobalUiIdsEnabled(): boolean {\n return isFlagEnabled(GLOBAL_UI_IDS_FLAG);\n}\n\nconst TARGET_SELECTOR = [\n 'main',\n 'header',\n 'footer',\n 'aside',\n 'nav',\n 'section',\n '[role=\"region\"]',\n '[role=\"banner\"]',\n '[role=\"main\"]',\n '[role=\"navigation\"]',\n '[role=\"complementary\"]',\n 'button',\n '[role=\"button\"]',\n 'a[role=\"button\"]',\n 'input',\n 'textarea',\n 'select',\n '[role=\"combobox\"]',\n '[role=\"listbox\"]',\n '[role=\"option\"]',\n '[role=\"textbox\"]',\n '[role=\"tablist\"]',\n '[role=\"tab\"]',\n '[role=\"tabpanel\"]',\n '[role=\"menu\"]',\n '[role=\"menuitem\"]',\n '[role=\"menuitemcheckbox\"]',\n '[role=\"menuitemradio\"]',\n 'svg',\n '[data-icon]',\n].join(',');\n\nfunction sanitizeToken(raw: string | null | undefined, fallback: string): string {\n if (!raw) return fallback;\n const cleaned = raw\n .toLowerCase()\n .replace(/[^a-z0-9]+/g, '-')\n .replace(/^-+|-+$/g, '')\n .slice(0, 40);\n return cleaned || fallback;\n}\n\nfunction pageToken(pathname: string): string {\n if (!pathname || pathname === '/') return 'home';\n return sanitizeToken(pathname.replace(/\\//g, '-'), 'page');\n}\n\nfunction inferCategory(el: Element): string {\n const role = (el.getAttribute('role') || '').toLowerCase();\n const tag = el.tagName.toLowerCase();\n\n if (role.includes('tab') || tag === 'tabs') return 'tabs';\n if (role.startsWith('menu') || role === 'menu') return 'menu';\n if (tag === 'button' || role === 'button') return 'button';\n if (tag === 'input' || tag === 'textarea' || tag === 'select' || role === 'combobox')\n return 'field';\n if (tag === 'svg' || el.hasAttribute('data-icon')) return 'icon';\n if (\n ['main', 'header', 'footer', 'aside', 'nav', 'section'].includes(tag) ||\n ['region', 'banner', 'main', 'navigation', 'complementary'].includes(role)\n ) {\n return 'layout';\n }\n\n return 'ui';\n}\n\nfunction inferName(el: Element): string {\n const htmlEl = el as HTMLElement;\n return sanitizeToken(\n el.getAttribute('data-testid') ||\n el.getAttribute('aria-label') ||\n el.getAttribute('name') ||\n el.getAttribute('title') ||\n (htmlEl as HTMLInputElement).placeholder ||\n htmlEl.innerText ||\n el.getAttribute('class'),\n 'item'\n );\n}\n\nfunction assignUiIds(pathname: string): void {\n const used = new Set<string>();\n document.querySelectorAll('[id]').forEach((el) => {\n const id = el.id?.trim();\n if (id) used.add(id);\n });\n\n const counters: Record<string, number> = {};\n const page = pageToken(pathname);\n const elements = document.querySelectorAll(TARGET_SELECTOR);\n\n elements.forEach((el) => {\n const category = inferCategory(el);\n const name = inferName(el);\n const stableKey = `ui-${category}-${name}`;\n\n el.setAttribute('data-ui-category', category);\n el.setAttribute('data-ui-key', stableKey);\n el.setAttribute('data-ui-page', page);\n\n if (el.id) {\n return;\n }\n\n const counterKey = `${page}-${category}-${name}`;\n counters[counterKey] = (counters[counterKey] || 0) + 1;\n\n let nextId = `ui-${page}-${category}-${name}-${counters[counterKey]}`;\n while (used.has(nextId)) {\n counters[counterKey] += 1;\n nextId = `ui-${page}-${category}-${name}-${counters[counterKey]}`;\n }\n\n el.id = nextId;\n used.add(nextId);\n });\n}\n\nexport default function GlobalUiIdProvider() {\n const location = useLocation();\n const enabled = isGlobalUiIdsEnabled();\n\n useEffect(() => {\n if (!enabled) return;\n\n let rafId = 0;\n\n const schedule = () => {\n if (rafId) return;\n rafId = window.requestAnimationFrame(() => {\n rafId = 0;\n assignUiIds(location.pathname);\n });\n };\n\n schedule();\n\n const observer = new MutationObserver(() => {\n schedule();\n });\n\n observer.observe(document.body, {\n subtree: true,\n childList: true,\n attributes: true,\n attributeFilter: ['role', 'aria-label', 'name', 'title', 'placeholder', 'class', 'data-icon'],\n });\n\n return () => {\n if (rafId) window.cancelAnimationFrame(rafId);\n observer.disconnect();\n };\n }, [enabled, location.pathname]);\n\n return null;\n}\n","import { createContext, useEffect, useMemo, useState } from 'react'\nimport type { ReactNode } from 'react'\nimport { ChakraProvider } from '@chakra-ui/react'\nimport type { Session } from '@supabase/supabase-js'\nimport { politogyTheme } from '../theme'\nimport type {\n AppRegistryEntry,\n ShellAuthStatus,\n ShellAuthValue,\n ShellFooterValue,\n ShellLinkedAccountsValue,\n ShellModeValue,\n ShellNavItemsValue,\n ShellNavigationPreferenceValue,\n ShellOrganizationValue,\n ShellProviderProps,\n ShellRoleValue,\n ShellSupportValue,\n ShellUser,\n} from '../types'\n\nexport const ShellAuthContext = createContext<ShellAuthValue | null>(null)\n\ninterface ShellMetaValue {\n currentApp: string\n appRegistry: AppRegistryEntry[]\n basename: string\n}\n\nexport const ShellMetaContext = createContext<ShellMetaValue | null>(null)\n\nexport const ShellOrgContext = createContext<ShellOrganizationValue | null>(null)\nexport const ShellLinkedAccountsContext = createContext<ShellLinkedAccountsValue | null>(null)\nexport const ShellSupportProviderContext = createContext<ShellSupportValue | null>(null)\nexport const ShellModeContext = createContext<ShellModeValue | null>(null)\nexport const ShellNavItemsContext = createContext<ShellNavItemsValue | null>(null)\nexport const ShellNavigationPreferenceContext =\n createContext<ShellNavigationPreferenceValue | null>(null)\nexport const ShellRoleContext = createContext<ShellRoleValue | null>(null)\nexport const ShellFooterContext = createContext<ShellFooterValue | null>(null)\n\nexport interface ShellChromeValue {\n devNotesMenu: ReactNode | null\n myProfileHref: string\n brandLogoSrc?: string\n headerIconsSlot?: ReactNode\n organizationSettingsHref?: string\n showContinueOnboarding?: boolean\n onContinueOnboarding?: () => void\n pageTitle?: string\n breadcrumbs?: Array<{ label: string; href?: string }>\n headerActions?: ReactNode\n /** Avatar URL override for UserMenu. Apps that store the avatar in their own\n * profile table or localStorage should pass it here. */\n userAvatarUrl?: string\n}\n\nexport const ShellChromeContext = createContext<ShellChromeValue | null>(null)\n\nfunction toShellUser(session: Session | null): ShellUser | null {\n if (!session?.user) return null\n const su = session.user\n const fullName = (su.user_metadata as { full_name?: string } | null)?.full_name ?? null\n return {\n id: su.id,\n email: su.email ?? null,\n displayName: fullName ?? su.email ?? null,\n raw: su,\n }\n}\n\nexport function ShellProvider({\n children,\n supabaseClient,\n auth,\n currentApp,\n appRegistry,\n basename,\n organization,\n linkedAccounts,\n support,\n devNotesMenu,\n myProfileHref,\n userAvatarUrl,\n}: ShellProviderProps) {\n const [status, setStatus] = useState<ShellAuthStatus>('loading')\n const [session, setSession] = useState<Session | null>(null)\n\n useEffect(() => {\n // Host-driven auth (or no client at all): Supabase session tracking is off.\n if (auth || !supabaseClient) {\n setSession(null)\n if (!auth) setStatus('unauthenticated')\n return\n }\n let cancelled = false\n supabaseClient.auth.getSession().then(({ data }) => {\n if (cancelled) return\n setSession(data.session)\n setStatus(data.session ? 'authenticated' : 'unauthenticated')\n })\n const sub = supabaseClient.auth.onAuthStateChange((_event, newSession) => {\n setSession(newSession)\n setStatus(newSession ? 'authenticated' : 'unauthenticated')\n })\n return () => {\n cancelled = true\n sub.data.subscription.unsubscribe()\n }\n }, [supabaseClient, auth])\n\n const value = useMemo<ShellAuthValue>(() => {\n if (auth) {\n return {\n status: auth.status,\n session: null,\n user: auth.user,\n signOut: async () => {\n await auth.signOut()\n },\n }\n }\n return {\n status,\n session,\n user: toShellUser(session),\n signOut: async () => {\n await supabaseClient?.auth.signOut()\n },\n }\n }, [auth, status, session, supabaseClient])\n\n const meta = useMemo<ShellMetaValue>(\n () => ({\n currentApp,\n appRegistry: appRegistry ?? [],\n basename: basename ?? '',\n }),\n [currentApp, appRegistry, basename],\n )\n\n const chrome = useMemo<ShellChromeValue>(\n () => ({\n devNotesMenu: devNotesMenu ?? null,\n myProfileHref: myProfileHref ?? '/my-profile',\n userAvatarUrl,\n }),\n [devNotesMenu, myProfileHref, userAvatarUrl],\n )\n\n return (\n <ShellAuthContext.Provider value={value}>\n <ShellMetaContext.Provider value={meta}>\n <ShellOrgContext.Provider value={organization ?? null}>\n <ShellLinkedAccountsContext.Provider value={linkedAccounts ?? null}>\n <ShellSupportProviderContext.Provider value={support ?? null}>\n <ShellModeContext.Provider value={null}>\n <ShellNavItemsContext.Provider value={null}>\n <ShellNavigationPreferenceContext.Provider value={null}>\n <ShellRoleContext.Provider value={null}>\n <ShellFooterContext.Provider value={null}>\n <ShellChromeContext.Provider value={chrome}>\n <ChakraProvider theme={politogyTheme}>{children}</ChakraProvider>\n </ShellChromeContext.Provider>\n </ShellFooterContext.Provider>\n </ShellRoleContext.Provider>\n </ShellNavigationPreferenceContext.Provider>\n </ShellNavItemsContext.Provider>\n </ShellModeContext.Provider>\n </ShellSupportProviderContext.Provider>\n </ShellLinkedAccountsContext.Provider>\n </ShellOrgContext.Provider>\n </ShellMetaContext.Provider>\n </ShellAuthContext.Provider>\n )\n}\n","import { useContext } from 'react'\nimport { ShellAuthContext } from '../providers/ShellProvider'\nimport type { ShellAuthValue } from '../types'\n\nexport function useShellAuth(): ShellAuthValue {\n const ctx = useContext(ShellAuthContext)\n if (!ctx) {\n throw new Error('useShellAuth must be used inside <ShellProvider>')\n }\n return ctx\n}\n","import { useContext } from 'react'\nimport { ShellMetaContext } from '../providers/ShellProvider'\nimport type { AppRegistryEntry } from '../types'\n\nexport function useAppRegistry(): AppRegistryEntry[] {\n const meta = useContext(ShellMetaContext)\n if (!meta) {\n throw new Error('useAppRegistry must be used inside <ShellProvider>')\n }\n return meta.appRegistry\n}\n\nexport function useCurrentApp(): string {\n const meta = useContext(ShellMetaContext)\n if (!meta) {\n throw new Error('useCurrentApp must be used inside <ShellProvider>')\n }\n return meta.currentApp\n}\n","import { useContext } from 'react'\nimport { ShellOrgContext } from '../providers/ShellProvider'\nimport type { ShellOrganizationValue } from '../types'\n\n/**\n * Returns the organization value supplied to ShellProvider, or null if the\n * host app didn't pass an `organization` prop. Returning null lets chrome\n * components (e.g., <OrgSelector />) render nothing instead of erroring.\n */\nexport function useShellOrganization(): ShellOrganizationValue | null {\n return useContext(ShellOrgContext)\n}\n","import { useContext } from 'react'\nimport { ShellLinkedAccountsContext } from '../providers/ShellProvider'\nimport type { ShellLinkedAccountsValue } from '../types'\n\n/**\n * Returns the linked-accounts value supplied to ShellProvider, or null if not\n * provided. UserMenu uses this to decide whether to render the\n * \"switch account\" section.\n */\nexport function useShellLinkedAccounts(): ShellLinkedAccountsValue | null {\n return useContext(ShellLinkedAccountsContext)\n}\n","import { useContext } from 'react'\nimport { ShellSupportProviderContext } from '../providers/ShellProvider'\nimport type { ShellSupportValue } from '../types'\n\n/**\n * Returns the support handler supplied to ShellProvider, or null if not\n * provided. SupportRequestButton uses this to decide whether to render.\n */\nexport function useShellSupport(): ShellSupportValue | null {\n return useContext(ShellSupportProviderContext)\n}\n","import { useContext } from 'react'\nimport { ShellChromeContext } from '../providers/ShellProvider'\nimport type { ShellChromeValue } from '../providers/ShellProvider'\n\nexport type { ShellChromeValue }\n\n/**\n * Returns chrome-level options supplied to ShellProvider/ShellChrome\n * (devNotesMenu slot, myProfileHref, header data, brand logo src, etc.).\n * Throws if used outside <ShellProvider>.\n */\nexport function useShellChrome(): ShellChromeValue {\n const ctx = useContext(ShellChromeContext)\n if (!ctx) {\n throw new Error('useShellChrome must be used inside <ShellProvider>')\n }\n return ctx\n}\n","import { useContext } from 'react'\nimport { ShellModeContext } from '../providers/ShellProvider'\nimport type { ShellModeValue } from '../types'\n\n/**\n * Returns the mode value supplied to ShellProvider/ShellChrome, or null if\n * the host app didn't pass a `mode` prop. Components like <ModePill /> use\n * this to conditionally render.\n */\nexport function useShellMode(): ShellModeValue | null {\n return useContext(ShellModeContext)\n}\n","import { useContext } from 'react'\nimport { ShellNavItemsContext } from '../providers/ShellProvider'\nimport type { ShellNavItemsValue } from '../types'\n\n/**\n * Returns the nav items value supplied to ShellChrome, or null if the host\n * app didn't pass a `navItems` prop. The sidebar uses this to decide what\n * rows to render.\n */\nexport function useShellNavItems(): ShellNavItemsValue | null {\n return useContext(ShellNavItemsContext)\n}\n","import { useContext } from 'react'\nimport { ShellNavigationPreferenceContext } from '../providers/ShellProvider'\nimport type { ShellNavigationPreferenceValue } from '../types'\n\n/**\n * Returns the user's navigation rendering preference supplied to\n * ShellChrome, or null if not provided. NavItem uses this to decide\n * whether to expand sub-menus.\n */\nexport function useShellNavigationPreference(): ShellNavigationPreferenceValue | null {\n return useContext(ShellNavigationPreferenceContext)\n}\n","import { useContext } from 'react'\nimport { ShellRoleContext } from '../providers/ShellProvider'\nimport type { ShellRoleValue } from '../types'\n\n/**\n * Returns the active-role info supplied to ShellChrome, or null if not\n * provided. UserMenu uses this to render the ROLES & ORGANIZATIONS badge.\n */\nexport function useShellRole(): ShellRoleValue | null {\n return useContext(ShellRoleContext)\n}\n","import { useContext } from 'react'\nimport { ShellFooterContext } from '../providers/ShellProvider'\nimport type { ShellFooterValue } from '../types'\n\n/**\n * Returns the footer data supplied to ShellChrome (links, commit/version\n * info), or null if not provided. The Sidebar footer reads this to render\n * Privacy / Terms / Subscriptions + commit copy button.\n */\nexport function useShellFooter(): ShellFooterValue | null {\n return useContext(ShellFooterContext)\n}\n","import type { CSSProperties } from 'react'\n\nexport interface BrandLogoProps {\n src?: string\n alt?: string\n className?: string\n style?: CSSProperties\n}\n\n/**\n * Mode-aware brand logo rendered in the sidebar header. The host app\n * supplies `src` (e.g., a different image per mode); the shell wraps it\n * in a non-draggable <img> so it never accidentally drags on click.\n *\n * Render returns null when no src is supplied so consuming chrome can\n * gracefully omit the slot.\n */\nexport function BrandLogo({ src, alt = 'Brand', className, style }: BrandLogoProps) {\n if (!src) return null\n return (\n <img\n src={src}\n alt={alt}\n className={className}\n style={style}\n draggable={false}\n />\n )\n}\n\nexport default BrandLogo\n","// Display-name helper for user-menu / avatar fallbacks. Ported from\n// react/app/src/layouts/AuthenticatedLayout.tsx line 697 (2026-05-13).\n\ninterface UserLike {\n profile?: {\n full_name?: string | null\n name?: string | null\n } | null\n user_metadata?: {\n full_name?: string | null\n name?: string | null\n } | null\n email?: string | null\n}\n\n/**\n * Resolves a user-facing display name from a user object. Tries profile\n * fields first, then user_metadata, then the email local-part, then the\n * raw email, finally falling back to \"User\".\n */\nexport function getUserDisplayName(user: UserLike | null | undefined): string {\n if (!user) return 'User'\n return (\n user.profile?.full_name ||\n user.profile?.name ||\n user.user_metadata?.full_name ||\n user.user_metadata?.name ||\n (typeof user.email === 'string' ? user.email.split('@')[0] : '') ||\n user.email ||\n 'User'\n )\n}\n","import type { ShellModeConfig, ShellModeValue } from '../types'\n\n/**\n * Defensive resolver for the active mode's config.\n *\n * Order of preference:\n * 1. `mode.getModeConfig()` if supplied and it returns a truthy value\n * without throwing (covers app-side caching / custom logic).\n * 2. `mode.modes.find(m => m.id === mode.currentMode)`.\n * 3. `mode.modes[0]` as a last-resort fallback.\n *\n * Returns `null` if `mode` itself is null/undefined or there are no modes.\n *\n * Lets consumers pass just `{ currentMode, modes, switchMode }` to\n * `<ShellChrome mode={...}>` without writing a `getModeConfig` closure.\n * Also defangs the common `this`-binding mistake where a consumer writes\n * the method as `getModeConfig() { return this.modes[0] }` and shell\n * pulls the function out, losing the `this` reference.\n */\nexport function resolveModeConfig(mode: ShellModeValue | null | undefined): ShellModeConfig | null {\n if (!mode) return null\n const modes = mode.modes ?? []\n if (typeof mode.getModeConfig === 'function') {\n try {\n const result = mode.getModeConfig()\n if (result) return result\n } catch {\n // fall through to derivation\n }\n }\n return modes.find((m) => m.id === mode.currentMode) ?? modes[0] ?? null\n}\n","// Universal theme preference — the ONE cross-app contract.\n//\n// One theme choice (Light / Dark / System) follows the authenticated user\n// across every Politogy app + subdomain. Three layers cooperate:\n// 1. VRM Core `profiles.theme_preference` — source of truth, persisted via\n// the chrome API (`PATCH me/preferences { themePreference }`) and read\n// back from `GET me` (`themePreference`).\n// 2. `.politogyvrm.com` cookie `politogy_theme` — zero-flash pre-paint\n// vehicle that crosses subdomains (auth session cookies are host-only).\n// 3. localStorage `politogy_theme` — offline fallback store.\n//\n// Ported verbatim from contacts/apps/web/src/lib/theme.ts (the origin of the\n// contract) so every app runs the identical behavior from npm. This module is\n// server-safe (no 'use client'): layouts import THEME_PREPAINT_SCRIPT for the\n// pre-paint inline script. The client-side hook lives in ./native\n// (useThemePreference).\n\nexport type ThemePreference = 'light' | 'dark' | 'system'\n\n// Single converged key for BOTH the localStorage store and the\n// cross-subdomain cookie, so a choice in one app is the same key in the next.\nexport const THEME_STORAGE_KEY = 'politogy_theme'\nexport const THEME_COOKIE = 'politogy_theme'\n\n// A local choice that has NOT yet reached VRM Core `profiles.theme_preference`.\n//\n// Politogy ID (auth.politogyvrm.com) has no chrome-API session to PATCH, so a\n// theme picked on the login screen only ever lands in the cookie. Without this\n// marker the next app booted the stale profile value through the reconcile step\n// below and overwrote the user's fresh choice — the \"I set System and it keeps\n// going back to Light\" bug (HITL 2026-07-23). The flag rides the same\n// cross-subdomain cookie so the first app that CAN talk to the chrome API\n// pushes the choice up instead of pulling the stale one down.\nexport const THEME_PENDING_COOKIE = 'politogy_theme_pending'\n\nconst VALID: readonly ThemePreference[] = ['light', 'dark', 'system']\n\nexport function isThemePreference(v: unknown): v is ThemePreference {\n return typeof v === 'string' && (VALID as readonly string[]).includes(v)\n}\n\n/** Read the shared cookie (browser only; null on the server or when unset). */\nexport function readThemeCookie(): ThemePreference | null {\n if (typeof document === 'undefined') return null\n try {\n const m = document.cookie.match(\n new RegExp(`(?:^|;\\\\s*)${THEME_COOKIE}=([^;]+)`),\n )\n const v = m ? decodeURIComponent(m[1]) : null\n return isThemePreference(v) ? v : null\n } catch {\n return null\n }\n}\n\n// Set the cross-subdomain cookie. On a *.politogyvrm.com host we scope it to\n// the parent domain so every app subdomain reads it; on any other host\n// (localhost, *.pages.dev preview) we fall back to a host-only cookie so\n// local/preview theming still works without a mismatched Domain attribute\n// (which browsers silently drop). 1-year, SameSite=Lax, Secure on https.\nexport function writeThemeCookie(pref: ThemePreference): void {\n if (typeof document === 'undefined' || typeof window === 'undefined') return\n const host = window.location.hostname\n const onParentDomain = /(^|\\.)politogyvrm\\.com$/i.test(host)\n const domainAttr = onParentDomain ? '; Domain=.politogyvrm.com' : ''\n const secure = window.location.protocol === 'https:' ? '; Secure' : ''\n document.cookie = `${THEME_COOKIE}=${encodeURIComponent(\n pref,\n )}; Path=/; Max-Age=31536000; SameSite=Lax${domainAttr}${secure}`\n}\n\n// Write an arbitrary cross-subdomain cookie with the same scoping rules as the\n// theme cookie itself (parent domain on *.politogyvrm.com, host-only elsewhere).\nfunction writeSharedCookie(name: string, value: string, maxAgeSeconds: number): void {\n if (typeof document === 'undefined' || typeof window === 'undefined') return\n const host = window.location.hostname\n const domainAttr = /(^|\\.)politogyvrm\\.com$/i.test(host) ? '; Domain=.politogyvrm.com' : ''\n const secure = window.location.protocol === 'https:' ? '; Secure' : ''\n document.cookie = `${name}=${encodeURIComponent(\n value,\n )}; Path=/; Max-Age=${maxAgeSeconds}; SameSite=Lax${domainAttr}${secure}`\n}\n\n/**\n * Mark the current cookie value as a local choice that still has to reach the\n * user's profile. Call this from any surface that changes the theme WITHOUT a\n * chrome-API session (Politogy ID's login screen is the only one today).\n */\nexport function markThemeChoicePending(pref: ThemePreference): void {\n writeSharedCookie(THEME_PENDING_COOKIE, pref, 31536000)\n}\n\n/** The pending (not-yet-persisted) local choice, if any. */\nexport function readPendingThemeChoice(): ThemePreference | null {\n if (typeof document === 'undefined') return null\n try {\n const m = document.cookie.match(\n new RegExp(`(?:^|;\\\\s*)${THEME_PENDING_COOKIE}=([^;]+)`),\n )\n const v = m ? decodeURIComponent(m[1]) : null\n return isThemePreference(v) ? v : null\n } catch {\n return null\n }\n}\n\n/** Clear the pending marker once the choice has been written to the profile. */\nexport function clearPendingThemeChoice(): void {\n writeSharedCookie(THEME_PENDING_COOKIE, '', 0)\n}\n\n/** Resolve a preference to the concrete light/dark it renders as right now. */\nexport function resolveTheme(pref: ThemePreference): 'light' | 'dark' {\n if (pref === 'system') {\n try {\n return window.matchMedia('(prefers-color-scheme: dark)').matches\n ? 'dark'\n : 'light'\n } catch {\n return 'light'\n }\n }\n return pref\n}\n\n/** Apply a preference to the document (`.dark` class + color-scheme). */\nexport function applyThemePreference(pref: ThemePreference): void {\n if (typeof document === 'undefined') return\n const resolved = resolveTheme(pref)\n const d = document.documentElement\n d.classList.toggle('dark', resolved === 'dark')\n try {\n d.style.colorScheme = resolved\n } catch {\n /* non-fatal */\n }\n}\n\n// Inline pre-paint script — render it in <head> (or as the first child of\n// <body>) so the theme applies before first paint. Resolves the preference\n// from cookie → localStorage → OS, applies the `.dark` class + `color-scheme`,\n// and seeds localStorage from the cookie so the app hydrates to the synced\n// value (the cross-subdomain flash fix). Self-contained, dependency-free, and\n// wrapped so any failure is silent (never blocks paint).\nexport const THEME_PREPAINT_SCRIPT = `(function(){try{\nvar KEY=${JSON.stringify(THEME_STORAGE_KEY)};\nvar VALID=[\"light\",\"dark\",\"system\"];\nfunction fromCookie(){try{var m=document.cookie.match(/(?:^|;\\\\s*)${THEME_COOKIE}=([^;]+)/);return m?decodeURIComponent(m[1]):null;}catch(e){return null;}}\nvar cookie=fromCookie();\nvar ls=null;try{ls=localStorage.getItem(KEY);}catch(e){}\nvar pref=cookie||ls||\"system\";\nif(VALID.indexOf(pref)===-1)pref=\"system\";\nif(cookie&&cookie!==ls){try{localStorage.setItem(KEY,cookie);}catch(e){}}\nvar resolved=pref;\nif(pref===\"system\"){try{resolved=window.matchMedia(\"(prefers-color-scheme: dark)\").matches?\"dark\":\"light\";}catch(e){resolved=\"light\";}}\nvar d=document.documentElement;\nif(resolved===\"dark\"){d.classList.add(\"dark\");}else{d.classList.remove(\"dark\");}\ntry{d.style.colorScheme=resolved;}catch(e){}\n}catch(e){}})();`\n","import {\n Avatar,\n Badge,\n Box,\n Flex,\n HStack,\n IconButton,\n Menu,\n MenuButton,\n MenuDivider,\n MenuItem,\n MenuList,\n Portal,\n Text,\n Tooltip,\n VStack,\n useColorModeValue,\n} from '@chakra-ui/react'\nimport {\n FiBriefcase,\n FiChevronDown,\n FiLogOut,\n FiRotateCcw,\n FiTrash2,\n FiUser,\n FiUserPlus,\n} from 'react-icons/fi'\nimport { useNavigate } from 'react-router-dom'\nimport { useShellAuth } from '../hooks/useShellAuth'\nimport { useShellChrome } from '../hooks/useShellChrome'\nimport { useShellLinkedAccounts } from '../hooks/useShellLinkedAccounts'\nimport { useShellMode } from '../hooks/useShellMode'\nimport { useShellOrganization } from '../hooks/useShellOrganization'\nimport { useShellRole } from '../hooks/useShellRole'\nimport { getUserDisplayName } from '../lib/userDisplay'\nimport { resolveModeConfig } from '../lib/resolveModeConfig'\nimport { useEffect, useState } from 'react'\nimport {\n applyThemePreference,\n isThemePreference,\n readThemeCookie,\n writeThemeCookie,\n THEME_STORAGE_KEY,\n type ThemePreference,\n} from '../theme-preference'\n\n/** \"Spencer Hill\" → \"Spencer H.\" — first name + last initial (chrome standard). */\nfunction formatFirstLast(name: string): string {\n const parts = name.split(/\\s+/).filter(Boolean)\n if (parts.length <= 1) return name\n return `${parts[0]} ${parts[parts.length - 1][0].toUpperCase()}.`\n}\n\nconst THEME_OPTIONS: { value: ThemePreference; label: string }[] = [\n { value: 'light', label: 'Light' },\n { value: 'system', label: 'System' },\n { value: 'dark', label: 'Dark' },\n]\n\n/**\n * APPEARANCE (Light / System / Dark) — the cross-app theme control, embedded\n * in the account menu (chrome standard: never a standalone top-bar toggle).\n * Writes the shared politogy_theme cookie + localStorage and emits\n * `politogy:theme-preference` so the host app can persist to the profile\n * (PATCH me/preferences) and restyle itself.\n */\nfunction AppearanceControl() {\n const [value, setValue] = useState<ThemePreference>('system')\n useEffect(() => {\n const cookie = readThemeCookie()\n let ls: string | null = null\n try {\n ls = localStorage.getItem(THEME_STORAGE_KEY)\n } catch {\n /* unavailable */\n }\n setValue(cookie ?? (isThemePreference(ls) ? ls : null) ?? 'system')\n }, [])\n const pick = (next: ThemePreference) => {\n setValue(next)\n writeThemeCookie(next)\n try {\n localStorage.setItem(THEME_STORAGE_KEY, next)\n } catch {\n /* unavailable */\n }\n applyThemePreference(next)\n try {\n window.dispatchEvent(\n new CustomEvent('politogy:theme-preference', { detail: next }),\n )\n } catch {\n /* non-fatal */\n }\n }\n return (\n <Box px={3} py={2}>\n <Text fontSize=\"xs\" color=\"gray.500\" fontWeight=\"semibold\" mb={2}>\n APPEARANCE\n </Text>\n <HStack\n spacing={0}\n borderWidth=\"1px\"\n borderColor=\"var(--line, #E2E8F0)\"\n borderRadius=\"full\"\n overflow=\"hidden\"\n >\n {THEME_OPTIONS.map((opt) => (\n <Box\n key={opt.value}\n as=\"button\"\n type=\"button\"\n role=\"radio\"\n aria-checked={value === opt.value}\n onClick={() => pick(opt.value)}\n flex={1}\n px={3}\n py={1.5}\n fontSize=\"xs\"\n fontWeight=\"semibold\"\n bg={value === opt.value ? 'var(--color-race-red, #E63946)' : 'transparent'}\n color={value === opt.value ? 'white' : 'gray.500'}\n _hover={value === opt.value ? {} : { bg: 'var(--panel, #F7FAFC)' }}\n transition=\"background 0.15s\"\n >\n {opt.label}\n </Box>\n ))}\n </HStack>\n </Box>\n )\n}\n\nfunction avatarUrlFromUser(user: ReturnType<typeof useShellAuth>['user']): string | undefined {\n if (!user) return undefined\n const meta = user.raw.user_metadata as { avatar_url?: string } | null | undefined\n return meta?.avatar_url ?? undefined\n}\n\n/**\n * Avatar dropdown rendered on the right of the header. Ported to match the\n * legacy menu in react/app/src/layouts/AuthenticatedLayout.tsx lines\n * 2680–2898 (2026-05-13).\n *\n * Sections (in order):\n * 1. Trigger — avatar + name/email VStack + chevron (md+ only).\n * 2. My Profile / Continue Onboarding (gated) / Organization Settings.\n * 3. ROLES & ORGANIZATIONS — current-org role Badge OR activeRoleConfig.\n * 4. ACCOUNTS — current account indicator + linkedAccounts list with\n * inline FiTrash2 remove + \"Add Account\" item.\n * 5. Sign out.\n */\nexport function UserMenu() {\n const { user, status, signOut } = useShellAuth()\n const {\n myProfileHref,\n organizationSettingsHref,\n showContinueOnboarding,\n onContinueOnboarding,\n userAvatarUrl,\n } = useShellChrome()\n const linked = useShellLinkedAccounts()\n const mode = useShellMode()\n const org = useShellOrganization()\n const role = useShellRole()\n const navigate = useNavigate()\n\n // Brand token — the user menu is top-bar chrome, so it tracks --topbar-bg\n // rather than Chakra's color mode (which pins dark to gray.900 #171923).\n const menuListBg = 'var(--topbar-bg, #FFFFFF)'\n const menuListBorderColor = useColorModeValue('gray.200', 'gray.700')\n\n if (status !== 'authenticated' || !user) return null\n\n const rawDisplayName = getUserDisplayName(user.raw)\n // Chrome standard: the trigger shows \"First L.\", never the email twice.\n const hasRealName = !!rawDisplayName && !rawDisplayName.includes('@')\n const displayName = hasRealName ? formatFirstLast(rawDisplayName) : (user.email ?? rawDisplayName)\n // App-supplied avatar URL takes precedence (profile.avatar_url, memoji,\n // app-specific default chain); fall back to whatever the auth session has.\n const avatarUrl = userAvatarUrl ?? avatarUrlFromUser(user)\n const modeConfig = resolveModeConfig(mode)\n const currentOrg = org?.currentOrg ?? null\n const linkedAccounts = linked?.linkedAccounts ?? []\n const activeRoleConfig = role?.activeRoleConfig ?? null\n\n return (\n <Flex alignItems=\"center\">\n <Menu>\n <MenuButton py={2} transition=\"all 0.3s\" _focus={{ boxShadow: 'none' }}>\n <HStack>\n <Avatar\n size=\"sm\"\n src={avatarUrl}\n name={displayName}\n bg={modeConfig?.primaryColor || 'brand.500'}\n />\n <VStack\n display={{ base: 'none', md: 'flex' }}\n alignItems=\"flex-start\"\n spacing=\"1px\"\n ml=\"2\"\n >\n <HStack spacing={2}>\n <Text fontSize=\"sm\">{displayName}</Text>\n </HStack>\n {hasRealName ? (\n <Text fontSize=\"xs\" color=\"gray.500\">\n {user.email}\n </Text>\n ) : null}\n </VStack>\n <Box display={{ base: 'none', md: 'flex' }}>\n <FiChevronDown />\n </Box>\n </HStack>\n </MenuButton>\n <Portal>\n <MenuList bg={menuListBg} borderColor={menuListBorderColor} zIndex={1500}>\n <MenuItem icon={<FiUser />} onClick={() => navigate(myProfileHref)}>\n My Profile\n </MenuItem>\n\n {showContinueOnboarding && (\n <MenuItem\n icon={<FiRotateCcw />}\n onClick={() => {\n if (onContinueOnboarding) onContinueOnboarding()\n else window.dispatchEvent(new CustomEvent('app:continue-onboarding'))\n }}\n >\n Continue Onboarding\n </MenuItem>\n )}\n\n {organizationSettingsHref && (\n <MenuItem\n icon={<FiBriefcase />}\n onClick={() => navigate(organizationSettingsHref)}\n >\n Organization Settings\n </MenuItem>\n )}\n\n <MenuDivider />\n <Text fontSize=\"xs\" color=\"gray.500\" px={3} py={1} fontWeight=\"semibold\">\n ROLES & ORGANIZATIONS\n </Text>\n <Box px={3} py={2}>\n <VStack align=\"stretch\" spacing={1}>\n {currentOrg && currentOrg.role && (\n <HStack>\n <Badge\n size=\"sm\"\n colorScheme={\n currentOrg.role === 'owner'\n ? 'purple'\n : currentOrg.role === 'admin'\n ? 'blue'\n : 'gray'\n }\n >\n {currentOrg.role.charAt(0).toUpperCase() + currentOrg.role.slice(1)}\n </Badge>\n <Text fontSize=\"xs\" color=\"gray.500\">\n in {currentOrg.name}\n </Text>\n </HStack>\n )}\n {activeRoleConfig && !currentOrg?.role && (\n <Badge colorScheme={activeRoleConfig.color} size=\"sm\">\n {activeRoleConfig.name}\n </Badge>\n )}\n </VStack>\n </Box>\n\n {linked && (\n <>\n <MenuDivider />\n <Text fontSize=\"xs\" color=\"gray.500\" px={3} py={1} fontWeight=\"semibold\">\n ACCOUNTS\n </Text>\n\n {/* Current account indicator */}\n <Box px={3} py={2}>\n <HStack spacing={2}>\n <Avatar size=\"xs\" src={avatarUrl} name={displayName} />\n <VStack align=\"start\" spacing={0} flex={1}>\n <Text fontSize=\"xs\" fontWeight=\"medium\" color=\"brand.600\">\n {displayName}\n </Text>\n <Text fontSize=\"xs\" color=\"gray.400\">\n Active\n </Text>\n </VStack>\n </HStack>\n </Box>\n\n {/* Linked accounts list */}\n {linkedAccounts.map((account) => (\n <MenuItem\n key={account.id}\n onClick={() => {\n void linked.switchToAccount(account.id)\n }}\n _hover={{ bg: 'gray.50' }}\n >\n <HStack spacing={2} flex={1} justify=\"space-between\">\n <HStack spacing={2}>\n <Avatar\n size=\"xs\"\n src={account.avatarUrl ?? undefined}\n name={account.displayName ?? account.email}\n />\n <VStack align=\"start\" spacing={0}>\n <Text fontSize=\"xs\" fontWeight=\"medium\" noOfLines={1}>\n {account.displayName ?? account.email.split('@')[0]}\n </Text>\n <Tooltip label={account.email} placement=\"top\" hasArrow>\n <Text\n fontSize=\"xs\"\n color=\"gray.500\"\n maxW=\"120px\"\n noOfLines={1}\n textOverflow=\"ellipsis\"\n >\n {account.email}\n </Text>\n </Tooltip>\n </VStack>\n </HStack>\n <IconButton\n as=\"span\"\n role=\"button\"\n tabIndex={0}\n aria-label=\"Remove account\"\n icon={<FiTrash2 />}\n size=\"xs\"\n variant=\"ghost\"\n colorScheme=\"red\"\n onClick={(e) => {\n e.stopPropagation()\n linked.onRemoveAccount(account.id)\n }}\n />\n </HStack>\n </MenuItem>\n ))}\n\n <MenuItem\n icon={<FiUserPlus />}\n onClick={linked.onAddAccount}\n color=\"brand.500\"\n >\n Add Account\n </MenuItem>\n </>\n )}\n\n <MenuDivider />\n <AppearanceControl />\n\n <MenuDivider />\n <MenuItem icon={<FiLogOut />} onClick={() => void signOut()}>\n Sign out\n </MenuItem>\n </MenuList>\n </Portal>\n </Menu>\n </Flex>\n )\n}\n","import {\n Box,\n Flex,\n HStack,\n IconButton,\n Link,\n Text,\n VStack,\n} from '@chakra-ui/react'\nimport { FiMenu } from 'react-icons/fi'\nimport { NavLink } from 'react-router-dom'\nimport BrandLogo from './BrandLogo'\nimport { UserMenu } from './UserMenu'\nimport { useShellChrome } from '../hooks/useShellChrome'\n\nexport interface HeaderProps {\n /** Mobile menu open handler (renders the hamburger icon on mobile). */\n onOpen?: () => void\n /** DOM id (defaults to 'mobile-nav-container'). */\n id?: string\n}\n\n/**\n * Politogy header (top bar). Ported from\n * react/app/src/layouts/AuthenticatedLayout.tsx lines 2545–2924 (2026-05-13).\n *\n * Composition (left → right):\n * 1. Hamburger (mobile only) + small brand logo (mobile only) + title +\n * breadcrumbs.\n * 2. headerActions (app-supplied React node, e.g., page action buttons).\n * 3. headerIconsSlot (app-supplied React node, e.g., FuelPopover,\n * NewTextBellPopup, SystemAlertsMenu, NavigationToggleMenu,\n * ImportProgressIndicator, DevNotesMenu, SupportRequestAction).\n * 4. UserMenu (avatar + name/email VStack + chevron).\n *\n * NOTE: app-specific widgets stay in the app. The shell only renders\n * what the app passes through `headerActions` + `headerIconsSlot`. As of\n * v0.3.1, the shell no longer renders a separate `devNotesMenu` slot\n * after `headerIconsSlot` — apps must inline DevNotesMenu inside\n * `headerIconsSlot` so they have full control of icon ordering. The\n * `devNotesMenu` prop on <ShellChrome> is still accepted for backward\n * compat but is ignored.\n */\nexport function Header({ onOpen, id }: HeaderProps) {\n const {\n pageTitle,\n breadcrumbs,\n headerActions,\n headerIconsSlot,\n brandLogoSrc,\n } = useShellChrome()\n\n // Brand tokens — see Sidebar. The mobile nav is the same chrome surface as\n // the sidebar, so it tracks --sidebar-* rather than Chakra's color mode.\n const mobileNavBg = 'var(--sidebar-bg, #FFFFFF)'\n const mobileNavBorderColor = 'var(--sidebar-border, #E2E8F0)'\n\n return (\n <Flex\n id={id || 'mobile-nav-container'}\n ml={{ base: 0, md: 60 }}\n px={{ base: 4, md: 4 }}\n height=\"20\"\n alignItems=\"center\"\n bg={mobileNavBg}\n borderBottomWidth=\"1px\"\n borderBottomColor={mobileNavBorderColor}\n justifyContent={{ base: 'space-between', md: 'space-between' }}\n >\n <Flex w=\"full\" mx=\"auto\" align=\"center\" justify=\"space-between\">\n <HStack spacing={4} minW=\"0\">\n {onOpen ? (\n <IconButton\n display={{ base: 'flex', md: 'none' }}\n onClick={onOpen}\n variant=\"outline\"\n aria-label=\"open menu\"\n icon={<FiMenu />}\n />\n ) : null}\n\n {brandLogoSrc ? (\n <Box display={{ base: 'flex', md: 'none' }} h=\"32px\">\n <BrandLogo src={brandLogoSrc} className=\"h-full w-auto object-contain\" />\n </Box>\n ) : null}\n\n <VStack\n align=\"flex-start\"\n spacing={0}\n minW=\"0\"\n display={{ base: 'none', md: 'flex' }}\n >\n {pageTitle ? (\n <Text fontSize=\"lg\" fontWeight=\"bold\" noOfLines={1}>\n {pageTitle}\n </Text>\n ) : null}\n {breadcrumbs && breadcrumbs.length > 0 ? (\n <HStack spacing={2} color=\"gray.500\" fontSize=\"sm\" mt=\"1px\" minW=\"0\">\n {breadcrumbs.map((b, idx) => (\n <Box key={`${b.label}-${idx}`} display=\"inline-flex\" alignItems=\"center\" minW=\"0\">\n {idx > 0 ? (\n <Text color=\"gray.400\" mr={2}>\n {' > '}\n </Text>\n ) : null}\n {b.href ? (\n <Link\n as={NavLink}\n to={b.href}\n _hover={{ textDecoration: 'underline' }}\n noOfLines={1}\n >\n {b.label}\n </Link>\n ) : (\n <Text noOfLines={1}>{b.label}</Text>\n )}\n </Box>\n ))}\n </HStack>\n ) : null}\n </VStack>\n </HStack>\n\n <HStack spacing={0} align=\"center\">\n {/*\n Universal top-bar icon treatment (Global-Rules → top-bar icons):\n size, gap, and color are a single shared value across every slot;\n only the glyph varies per slot (see <TopBarIcon>). Driven by Brand\n tokens with the historical 32px/20px/8px values as fallbacks.\n */}\n <HStack\n spacing=\"var(--topbar-icon-gap, 8px)\"\n mr=\"15px\"\n color=\"var(--topbar-icon-color, #4A5568)\"\n sx={{\n '& button:not([role=\"menuitem\"]):not([data-menu-item])': {\n width: 'var(--topbar-icon-button-size, 32px)',\n height: 'var(--topbar-icon-button-size, 32px)',\n minWidth: 'var(--topbar-icon-button-size, 32px)',\n padding: 0,\n },\n '& button:not([role=\"menuitem\"]):not([data-menu-item]) svg, & button:not([role=\"menuitem\"]):not([data-menu-item]) img':\n {\n width: 'var(--topbar-icon-size, 20px)',\n height: 'var(--topbar-icon-size, 20px)',\n strokeWidth: 'var(--topbar-icon-stroke-width, 2)',\n },\n }}\n >\n {headerActions}\n {headerIconsSlot}\n </HStack>\n <UserMenu />\n </HStack>\n </Flex>\n </Flex>\n )\n}\n\nexport default Header\n","import type { CSSProperties } from 'react'\n\nexport interface BrandIconProps {\n /** Brand-icon name keyed off `/brand/icons/<name>.svg` in the app's public dir. */\n name: string\n /** Pixel size shorthand — sets both width and height. */\n size?: number\n className?: string\n style?: CSSProperties\n alt?: string\n /** Optional prefix for the icon path. Defaults to '/brand/icons/'. */\n basePath?: string\n}\n\n/**\n * Brand-icon component used by sidebar NavItems. The actual SVG assets live\n * in the consuming app's `public/brand/icons/<name>.svg` — shell never\n * imports them directly, only references them by URL.\n */\nexport function BrandIcon({\n name,\n size,\n className,\n style,\n alt,\n basePath = '/brand/icons/',\n}: BrandIconProps) {\n const a11yLabel = alt ?? ''\n const isDecorative = a11yLabel === ''\n const inlineSize = size ? { width: size, height: size, ...style } : style\n\n return (\n <img\n src={`${basePath}${name}.svg`}\n alt={a11yLabel}\n role={isDecorative ? 'presentation' : undefined}\n aria-hidden={isDecorative ? true : undefined}\n className={className}\n style={inlineSize}\n draggable={false}\n />\n )\n}\n\nexport default BrandIcon\n","import { useMemo, type ReactNode } from 'react'\nimport { Badge, Box, Collapse, Flex, Text } from '@chakra-ui/react'\nimport { FiChevronDown } from 'react-icons/fi'\nimport { useLocation, useNavigate } from 'react-router-dom'\nimport BrandIcon from './BrandIcon'\nimport { useShellMode } from '../hooks/useShellMode'\nimport { useShellNavigationPreference } from '../hooks/useShellNavigationPreference'\nimport { resolveModeConfig } from '../lib/resolveModeConfig'\n\n// URL-scheme allow-list for host-supplied hrefs. React does not neutralize\n// `javascript:`/`data:` schemes on an anchor href, so validate before it\n// reaches the DOM. Permits http(s), mailto/tel, and in-app relative targets.\nconst safeHref = (h?: string) =>\n h && /^(https?:|mailto:|tel:|\\/|#|\\.)/i.test(h.trim()) ? h : '#'\n\nexport interface NavItemSubItem {\n name: string\n icon?: unknown\n brandIcon?: string\n href?: string\n badge?: string\n subLabel?: string\n disabled?: boolean\n /**\n * Depth-3 support (Reference/UI-Platform: sub-sub items, e.g. Organization\n * Settings → Subscription & Billing → Wallet). A sub-item carrying its own\n * subItems renders as a nested collapsible group. Three levels is the\n * platform maximum.\n */\n subItems?: NavItemSubItem[]\n}\n\nexport interface NavItemProps {\n icon?: unknown\n brandIcon?: string\n children: ReactNode\n href?: string\n action?: () => void\n subItems?: NavItemSubItem[]\n badge?: string\n subLabel?: string\n isSubItem?: boolean\n isExpanded?: boolean\n onToggle?: (menuKey?: string | null) => void\n menuKey?: string\n isDisabled?: boolean\n disabled?: boolean\n /** Catch-all for one-off Chakra Box overrides passed by callers. */\n [key: string]: unknown\n}\n\n/**\n * Single sidebar nav row. Reconciled with main-app source of truth:\n * `react/app/src/layouts/AuthenticatedLayout.tsx` NavItem (2026-07).\n *\n * Shell additions retained: `brandIcon`, `safeHref`, shell context hooks.\n * Main-app behavior restored: gray hover (no gradient sweep), parent active\n * when any child matches even in tabs-only mode, split effectiveHref vs\n * href-less accordion headers.\n */\nexport function NavItem({\n icon,\n brandIcon,\n children,\n href,\n action,\n subItems,\n badge,\n subLabel,\n isSubItem = false,\n isExpanded,\n onToggle,\n menuKey,\n isDisabled: navIsDisabled,\n disabled,\n ...rest\n}: NavItemProps) {\n const location = useLocation()\n const navigate = useNavigate()\n\n const mode = useShellMode()\n const modeConfig = resolveModeConfig(mode)\n\n const navPref = useShellNavigationPreference()\n const showSubMenu = navPref?.showSubMenu ?? true\n\n const isDisabled = Boolean(navIsDisabled || disabled)\n\n // In tabs-only mode, if no href but has children, use first child's href\n const effectiveHref =\n href || (Array.isArray(subItems) && subItems.length > 0 ? subItems[0].href : undefined)\n const effectivePathname = effectiveHref?.split('?')[0]\n const currentFullPath = location.pathname + location.search\n const currentSearchParams = useMemo(\n () => new URLSearchParams(location.search),\n [location.search],\n )\n\n const matchesSubItem = (itemHref: string): boolean => {\n if (!itemHref) return false\n if (itemHref === currentFullPath) return true\n\n const itemPath = itemHref.split('?')[0]\n const itemSearch = itemHref.includes('?') ? itemHref.split('?')[1] : ''\n\n if (itemPath === location.pathname && !itemSearch) {\n return true\n }\n\n if (location.pathname.startsWith(`${itemPath}/`)) {\n const itemSegments = itemPath.split('/').filter(Boolean)\n const locationSegments = location.pathname.split('/').filter(Boolean)\n const itemLastSegment = itemSegments[itemSegments.length - 1]\n const locationLastSegment = locationSegments[locationSegments.length - 1]\n\n if (itemLastSegment && itemLastSegment === locationLastSegment) {\n return true\n }\n }\n\n if (itemPath === location.pathname && itemSearch) {\n const itemSearchParams = new URLSearchParams(itemSearch)\n const itemTab = itemSearchParams.get('tab') || itemSearchParams.get('view')\n if (!itemTab) return true\n return itemTab === currentSearchParams.get('tab')\n }\n\n if (itemPath && !itemHref.includes('?') && itemPath !== effectivePathname) {\n const segment = itemPath.split('/').pop()\n if (\n segment &&\n location.pathname.endsWith('/' + segment) &&\n location.pathname.startsWith(itemPath.split('/').slice(0, -1).join('/'))\n ) {\n return true\n }\n }\n return false\n }\n\n const isActive = isSubItem\n ? matchesSubItem(effectiveHref || '')\n : (() => {\n if (!effectivePathname) return false\n if (location.pathname === effectivePathname) return true\n if (location.pathname.startsWith(`${effectivePathname}/`)) return true\n\n const dashboardOverviewMatch = effectivePathname.match(\n /^\\/[^/]+\\/[^/]*\\/dashboard\\/overview$/,\n )\n if (dashboardOverviewMatch) {\n const dashboardRoot = effectivePathname.replace(/\\/overview$/, '')\n return (\n location.pathname === dashboardRoot ||\n location.pathname.startsWith(`${dashboardRoot}/`) ||\n location.pathname.startsWith(`${dashboardRoot}&`)\n )\n }\n\n return (\n effectivePathname !== `/${location.pathname.split('/')[1]}/dashboard` &&\n location.pathname.startsWith(effectivePathname + '/')\n )\n })()\n\n // Only show sub-items if the preference allows it\n const hasSubItems = showSubMenu && Array.isArray(subItems) && subItems.length > 0\n // Parent highlights in \"Tabs Only\" even when children are not rendered\n const hasActiveChild =\n Array.isArray(subItems) && subItems.some((item) => matchesSubItem(item.href || ''))\n const isParentActive = isActive || hasActiveChild\n const isSubMenuOpen =\n isExpanded !== undefined\n ? isExpanded\n : hasSubItems && subItems!.some((item) => matchesSubItem(item.href || ''))\n\n // The expanded parent row + its sub-menu panel are a RAISED surface, driven\n // by the Brand token `--sidebar-submenu-bg`. These were hardcoded gray.100 /\n // gray.50, which rendered a glaring light panel inside a dark sidebar under\n // `.dark` — the exact failure Global-Rules' Dark Mode section calls out.\n // Fallbacks preserve the previous light-mode values.\n const submenuBg = 'var(--sidebar-submenu-bg, #F1F5F9)'\n const expandedRowBg = isParentActive\n ? modeConfig?.primaryColor || 'brand.500'\n : isSubMenuOpen\n ? submenuBg\n : 'transparent'\n const expandedRowTextColor = isParentActive\n ? 'white'\n : isSubMenuOpen\n ? 'var(--sidebar-text, #1A202C)'\n : 'var(--sidebar-text-muted, #4A5568)'\n const disabledRowBg = isSubItem ? submenuBg : 'transparent'\n const disabledRowTextColor = 'gray.400'\n\n const renderIcon = (activeForHover: boolean) => {\n if (brandIcon) {\n return (\n <Box\n mr=\"4\"\n display=\"inline-flex\"\n alignItems=\"center\"\n filter={isParentActive || isActive ? 'brightness(0) invert(1)' : undefined}\n _groupHover={\n isDisabled\n ? undefined\n : {\n filter: activeForHover ? 'brightness(0) invert(1)' : undefined,\n }\n }\n >\n <BrandIcon name={brandIcon} size={18} />\n </Box>\n )\n }\n if (icon) {\n return (\n <Box\n mr=\"4\"\n fontSize=\"16\"\n _groupHover={{\n color: isDisabled\n ? disabledRowTextColor\n : activeForHover\n ? 'white'\n : 'var(--sidebar-hover-text, #FFFFFF)',\n }}\n as={icon as never}\n />\n )\n }\n return null\n }\n\n if (hasSubItems) {\n return (\n <Box>\n {effectiveHref ? (\n <Flex\n align=\"center\"\n px=\"4\"\n py=\"2.5\"\n mx=\"4\"\n w=\"auto\"\n borderTopRadius=\"lg\"\n borderBottomRadius={isSubMenuOpen ? 0 : 'lg'}\n role=\"group\"\n cursor={isDisabled ? 'not-allowed' : 'pointer'}\n opacity={1}\n pointerEvents={isDisabled ? 'none' : 'auto'}\n data-nav-item-active={String(isParentActive)}\n bg={isDisabled ? disabledRowBg : expandedRowBg}\n color={isDisabled ? disabledRowTextColor : expandedRowTextColor}\n _hover={{\n bg: isDisabled\n ? disabledRowBg\n : isParentActive\n ? modeConfig?.accentColor || 'brand.600'\n : 'var(--sidebar-hover-bg, #E2E8F0)',\n color: isDisabled\n ? disabledRowTextColor\n : isParentActive\n ? 'white'\n : 'var(--sidebar-hover-text, #FFFFFF)',\n }}\n aria-disabled={isDisabled ? 'true' : 'false'}\n onClick={(e) => {\n if (isDisabled) return\n e.preventDefault()\n e.stopPropagation()\n onToggle?.(menuKey || null)\n }}\n {...(rest as object)}\n >\n {renderIcon(isParentActive)}\n <Box flex=\"1\">{children}</Box>\n <Box\n as={FiChevronDown}\n transform={isSubMenuOpen ? 'rotate(180deg)' : undefined}\n transition=\"transform 0.2s\"\n />\n </Flex>\n ) : (\n <Flex\n align=\"center\"\n px=\"4\"\n py=\"2.5\"\n mx=\"4\"\n w=\"auto\"\n borderTopRadius=\"lg\"\n borderBottomRadius={isSubMenuOpen ? 0 : 'lg'}\n role=\"group\"\n cursor={isDisabled ? 'not-allowed' : 'pointer'}\n opacity={1}\n pointerEvents={isDisabled ? 'none' : 'auto'}\n data-nav-item-active={String(isParentActive)}\n bg={isDisabled ? disabledRowBg : expandedRowBg}\n color={isDisabled ? disabledRowTextColor : expandedRowTextColor}\n _hover={{\n bg: isDisabled\n ? disabledRowBg\n : hasActiveChild\n ? modeConfig?.accentColor || 'brand.600'\n : 'var(--sidebar-hover-bg, #E2E8F0)',\n color: isDisabled\n ? disabledRowTextColor\n : hasActiveChild\n ? 'white'\n : 'var(--sidebar-hover-text, #FFFFFF)',\n }}\n aria-disabled={isDisabled ? 'true' : 'false'}\n onClick={(e) => {\n if (isDisabled) return\n e.stopPropagation()\n onToggle?.(menuKey || null)\n }}\n {...(rest as object)}\n >\n {renderIcon(hasActiveChild)}\n <Box flex=\"1\">{children}</Box>\n <Box\n as={FiChevronDown}\n transform={isSubMenuOpen ? 'rotate(180deg)' : undefined}\n transition=\"transform 0.2s\"\n />\n </Flex>\n )}\n <Collapse in={isSubMenuOpen} animateOpacity>\n <Box\n px=\"0\"\n mx=\"4\"\n w=\"auto\"\n mb=\"2\"\n py=\"1\"\n borderTopRadius={0}\n borderBottomRadius=\"md\"\n // The sub-menu panel itself — same raised Brand surface as the\n // expanded parent row it hangs from.\n bg={submenuBg}\n >\n {subItems!.map((item) => (\n <NavItem\n key={item.name}\n icon={item.icon}\n brandIcon={item.brandIcon}\n href={item.href}\n isSubItem={true}\n isDisabled={item.disabled}\n subLabel={item.subLabel}\n // Depth-3: pass a sub-item's own children through so it\n // renders as a nested collapsible group.\n subItems={item.subItems}\n >\n {item.name}\n </NavItem>\n ))}\n </Box>\n </Collapse>\n </Box>\n )\n }\n\n const handleClick = (e: React.MouseEvent) => {\n if (isDisabled) {\n e.preventDefault()\n return\n }\n if (action) {\n e.preventDefault()\n action()\n return\n }\n if (effectiveHref) {\n e.preventDefault()\n navigate(effectiveHref)\n }\n }\n\n // Top-level rows stay active when any child route is active (tabs-only mode)\n const rowActive = isSubItem ? isActive : isParentActive\n\n return (\n <Box\n as=\"a\"\n href={safeHref(effectiveHref)}\n onClick={handleClick}\n style={{ textDecoration: 'none' }}\n >\n <Flex\n align=\"center\"\n px=\"4\"\n py=\"2.5\"\n mx={isSubItem ? '0' : '4'}\n w={isSubItem ? 'full' : 'auto'}\n borderRadius={isSubItem ? '0' : 'lg'}\n role=\"group\"\n cursor={isDisabled ? 'not-allowed' : 'pointer'}\n opacity={1}\n pointerEvents={isDisabled ? 'none' : 'auto'}\n data-nav-item-active={String(rowActive)}\n bg={\n isDisabled\n ? disabledRowBg\n : rowActive\n ? isSubItem\n ? 'var(--sidebar-hover-bg, #EDF2F7)'\n : modeConfig?.primaryColor || 'brand.500'\n : 'transparent'\n }\n color={\n isDisabled\n ? disabledRowTextColor\n : rowActive\n ? isSubItem\n ? modeConfig?.primaryColor || 'brand.500'\n : 'white'\n : 'gray.600'\n }\n _hover={{\n bg: isDisabled\n ? disabledRowBg\n : rowActive\n ? isSubItem\n ? 'var(--sidebar-hover-bg, #E2E8F0)'\n : modeConfig?.accentColor || 'brand.600'\n : 'var(--sidebar-hover-bg, #EDF2F7)',\n color: isDisabled\n ? disabledRowTextColor\n : rowActive\n ? isSubItem\n ? modeConfig?.primaryColor || 'brand.500'\n : 'white'\n : 'var(--sidebar-hover-text, #FFFFFF)',\n }}\n aria-disabled={isDisabled ? 'true' : 'false'}\n onClick={handleClick}\n {...(rest as object)}\n >\n {brandIcon ? (\n <Box\n mr=\"4\"\n display=\"inline-flex\"\n alignItems=\"center\"\n filter={rowActive && !isSubItem ? 'brightness(0) invert(1)' : undefined}\n >\n <BrandIcon name={brandIcon} size={18} />\n </Box>\n ) : icon ? (\n <Box\n mr=\"4\"\n fontSize=\"16\"\n _groupHover={{\n color: isDisabled\n ? disabledRowTextColor\n : rowActive\n ? isSubItem\n ? modeConfig?.primaryColor || 'brand.500'\n : 'white'\n : 'var(--sidebar-hover-text, #FFFFFF)',\n }}\n as={icon as never}\n />\n ) : null}\n <Box flex=\"1\">\n <Box>{children}</Box>\n {subLabel ? (\n <Text mt={0.5} fontSize=\"10px\" lineHeight=\"1.3\" color=\"gray.400\">\n {subLabel}\n </Text>\n ) : null}\n {badge && (\n <Badge colorScheme=\"red\" size=\"xs\" mt={1} fontSize=\"xs\" display=\"block\">\n {badge}\n </Badge>\n )}\n </Box>\n </Flex>\n </Box>\n )\n}\n\nexport default NavItem\n","// Color + badge helpers used by sidebar/header chrome. Ported verbatim from\n// react/app/src/layouts/AuthenticatedLayout.tsx (lines 725–786, 2026-05-13).\n\nconst HEX_COLOR_PATTERN = /^#(?:[0-9a-fA-F]{3}|[0-9a-fA-F]{6})$/\n\n/** Returns a normalized 7-char hex color, or null if the input isn't valid. */\nexport function normalizeHexColor(value?: string | null): string | null {\n const trimmed = value?.trim()\n if (!trimmed || !HEX_COLOR_PATTERN.test(trimmed)) return null\n if (trimmed.length === 7) return trimmed\n const [r, g, b] = trimmed.slice(1).split('')\n return `#${r}${r}${g}${g}${b}${b}`\n}\n\n/**\n * Returns an `rgba(...)` string lightened toward white by `amount` (0–1),\n * or null if the input isn't a valid hex.\n */\nexport function hexToRgba(hex: string, alpha: number): string | null {\n const normalized = normalizeHexColor(hex)\n if (!normalized) return null\n const red = parseInt(normalized.slice(1, 3), 16)\n const green = parseInt(normalized.slice(3, 5), 16)\n const blue = parseInt(normalized.slice(5, 7), 16)\n return `rgba(${red}, ${green}, ${blue}, ${alpha})`\n}\n\n/**\n * Returns a hex color that is `amount` (0–1) blended from `hex` toward\n * white. Used for the org-menu hover background.\n */\nexport function lightenHexColor(hex: string, amount: number): string | null {\n const normalized = normalizeHexColor(hex)\n if (!normalized) return null\n\n const clamp = (value: number) => Math.max(0, Math.min(255, Math.round(value)))\n const blend = (channel: number) => clamp(channel + (255 - channel) * amount)\n\n const red = parseInt(normalized.slice(1, 3), 16)\n const green = parseInt(normalized.slice(3, 5), 16)\n const blue = parseInt(normalized.slice(5, 7), 16)\n\n return `#${blend(red).toString(16).padStart(2, '0')}${blend(green)\n .toString(16)\n .padStart(2, '0')}${blend(blue).toString(16).padStart(2, '0')}`\n}\n\n/**\n * Reads `settings.brand_colors[0].value` off an org-like input and returns\n * the first valid normalized hex. Returns null if the input doesn't have\n * a usable brand color.\n */\nexport function getOrganizationBrandColor(organization?: {\n brandColor?: string | null\n settings?: {\n brand_colors?: Array<{ value?: string | null }> | null\n } | null\n} | null): string | null {\n if (!organization) return null\n // Direct brandColor (shell's ShellOrganization shape).\n const direct = normalizeHexColor(organization.brandColor)\n if (direct) return direct\n // Legacy settings.brand_colors shape.\n const brandColors = Array.isArray(organization.settings?.brand_colors)\n ? organization.settings?.brand_colors\n : []\n const firstBrandColor = brandColors?.find(\n (entry) => typeof entry?.value === 'string' && normalizeHexColor(entry.value),\n )\n return normalizeHexColor(firstBrandColor?.value ?? null)\n}\n\n/**\n * Returns the two-letter badge for an organization name (e.g., \"The Portland\n * Company\" -> \"TP\"). Falls back to \"OR\" when the input has no letters.\n */\nexport function getOrganizationBadgeLetters(name?: string | null): string {\n const normalizedName = String(name || '')\n .trim()\n .replace(/[^a-zA-Z0-9\\s]+/g, ' ')\n const parts = normalizedName.split(/\\s+/).filter(Boolean)\n\n if (parts.length >= 2) {\n return `${parts[0][0] || ''}${parts[1][0] || ''}`.toUpperCase()\n }\n\n const compact = parts[0] || normalizedName.replace(/\\s+/g, '')\n return compact.slice(0, 2).toUpperCase() || 'OR'\n}\n","import { Box, Image } from '@chakra-ui/react'\nimport { getOrganizationBadgeLetters, normalizeHexColor } from '../../lib/orgColors'\n\n// Re-export for backwards compat with v0.2.x consumers.\nexport { normalizeHexColor, lightenHexColor, getOrganizationBadgeLetters } from '../../lib/orgColors'\n\ninterface OrgBadgeProps {\n name?: string | null\n logoUrl?: string | null\n brandColor?: string | null\n /** Chakra boxSize value, e.g., '24px', 'sm'. */\n size: string\n}\n\nexport function OrgBadge({ name, logoUrl, brandColor, size }: OrgBadgeProps) {\n const normalizedColor = normalizeHexColor(brandColor)\n const badgeColor = normalizedColor || '#5a5a5a'\n const badgeLetters = getOrganizationBadgeLetters(name)\n\n return (\n <Box\n boxSize={size}\n borderRadius=\"full\"\n overflow=\"hidden\"\n border=\"1px solid white\"\n flexShrink={0}\n bg={logoUrl ? 'whiteAlpha.300' : badgeColor}\n color=\"white\"\n display=\"inline-flex\"\n alignItems=\"center\"\n justifyContent=\"center\"\n fontSize=\"xs\"\n fontWeight=\"bold\"\n letterSpacing=\"0.08em\"\n textTransform=\"uppercase\"\n >\n {logoUrl ? (\n <Image src={logoUrl} alt={`${name ?? 'Organization'} logo`} boxSize=\"full\" objectFit=\"cover\" />\n ) : (\n badgeLetters\n )}\n </Box>\n )\n}\n","import { useMemo } from 'react'\nimport {\n Box,\n Button,\n Flex,\n HStack,\n Menu,\n MenuButton,\n MenuDivider,\n MenuItem,\n MenuList,\n Portal,\n Skeleton,\n Text,\n Tooltip,\n useClipboard,\n} from '@chakra-ui/react'\nimport { keyframes } from '@emotion/react'\nimport { FiChevronDown } from 'react-icons/fi'\nimport { useShellOrganization } from '../hooks/useShellOrganization'\nimport { useShellAuth } from '../hooks/useShellAuth'\nimport { getOrganizationBrandColor, lightenHexColor } from '../lib/orgColors'\nimport { OrgBadge } from './internal/orgBadge'\n\n/**\n * Short copy-on-click chip that shows the last 8 chars of an org id and\n * animates a \"Copied!\" tooltip on click. Ported from\n * react/app/src/layouts/AuthenticatedLayout.tsx lines 2933–2977.\n */\nfunction OrganizationIdCopy({ orgId }: { orgId: string }) {\n const { hasCopied, onCopy } = useClipboard(orgId)\n const copiedAnimation = keyframes`\n 0% { opacity: 0; transform: translateY(6px); }\n 20% { opacity: 1; transform: translateY(0); }\n 100% { opacity: 0; transform: translateY(-8px); }\n `\n\n return (\n <Tooltip label={orgId} placement=\"top\" hasArrow>\n <Flex\n align=\"center\"\n cursor=\"pointer\"\n onClick={onCopy}\n _hover={{ bg: 'gray.100' }}\n borderRadius=\"md\"\n px={2}\n py={1}\n position=\"relative\"\n transition=\"all 0.2s\"\n >\n <Text fontSize=\"xs\" color={hasCopied ? 'green.500' : 'gray.600'} fontWeight=\"normal\">\n ...{orgId.slice(-8)}\n </Text>\n {hasCopied && (\n <Box\n position=\"absolute\"\n bottom=\"100%\"\n mb=\"6px\"\n px=\"2\"\n py=\"1\"\n fontSize=\"xs\"\n bg=\"gray.700\"\n color=\"white\"\n borderRadius=\"md\"\n animation={`${copiedAnimation} 0.9s ease-out`}\n pointerEvents=\"none\"\n >\n Copied!\n </Box>\n )}\n </Flex>\n </Tooltip>\n )\n}\n\n/**\n * Sidebar organization switcher pill. Ported from\n * react/app/src/layouts/AuthenticatedLayout.tsx lines 3795–3957 (2026-05-13).\n *\n * Reads useShellOrganization + useShellAuth. Renders nothing when there's\n * no organization context.\n */\nexport function OrgPill() {\n const org = useShellOrganization()\n const { user } = useShellAuth()\n\n const currentOrg = org?.currentOrg ?? null\n const organizations = org?.organizations ?? []\n const switchOrganization = org?.switchOrganization\n const loadingOrgs = org?.loadingOrgs ?? false\n\n const unselectedOrganizations = useMemo(\n () => organizations.filter((o) => o.id !== currentOrg?.id),\n [organizations, currentOrg?.id],\n )\n\n const selectedOrgBrandColor = useMemo(\n () => (currentOrg ? getOrganizationBrandColor(currentOrg) : null),\n [currentOrg],\n )\n const selectedOrgColor =\n selectedOrgBrandColor || 'var(--mode-primary-color, var(--color-race-red-500, #E63946))'\n const selectedOrgMenuBg =\n (selectedOrgBrandColor && lightenHexColor(selectedOrgBrandColor, 0.12)) || '#4a4a4a'\n\n if (!org) return null\n\n return (\n <Box mx=\"4\" mb=\"3\">\n <HStack justify=\"space-between\" align=\"center\" mb=\"2\">\n <Text fontSize=\"xs\" color=\"gray.500\" fontWeight=\"semibold\">\n ORGANIZATION\n </Text>\n {currentOrg?.id && currentOrg.id !== user?.id && (\n <OrganizationIdCopy orgId={currentOrg.id} />\n )}\n </HStack>\n {loadingOrgs && !currentOrg ? (\n <Skeleton height=\"32px\" width=\"full\" borderRadius=\"md\" />\n ) : (\n <Menu gutter={0}>\n <MenuButton\n as={Button}\n rightIcon={<FiChevronDown />}\n size=\"sm\"\n width=\"full\"\n bg={currentOrg?.id ? selectedOrgColor : 'gray.100'}\n borderColor={currentOrg?.id ? selectedOrgColor : 'gray.300'}\n color={currentOrg?.id ? 'white' : 'gray.700'}\n _hover={{\n bg: currentOrg?.id ? selectedOrgColor : 'gray.200',\n color: currentOrg?.id ? 'white' : 'gray.900',\n }}\n _active={{\n bg: currentOrg?.id ? selectedOrgColor : 'gray.200',\n color: currentOrg?.id ? 'white' : 'gray.900',\n }}\n _expanded={{\n bg: currentOrg?.id ? selectedOrgColor : 'gray.200',\n color: currentOrg?.id ? 'white' : 'gray.900',\n }}\n textAlign=\"left\"\n justifyContent=\"flex-start\"\n isDisabled={loadingOrgs && organizations.length === 0}\n sx={\n currentOrg?.id\n ? {\n color: 'white',\n '.chakra-button__icon': { color: 'white' },\n }\n : undefined\n }\n >\n <HStack spacing=\"2.5\" minW={0} align=\"center\">\n {/* Smaller badge circle than the button's content box so there is\n visible top/bottom breathing room around it (was 28px, which\n nearly filled the sm button height). Only the icon shrinks —\n the pill's colors/background are unchanged. */}\n <OrgBadge\n name={currentOrg?.name}\n logoUrl={currentOrg?.logoUrl}\n brandColor={selectedOrgBrandColor}\n size=\"20px\"\n />\n <Text overflow=\"hidden\" textOverflow=\"ellipsis\" whiteSpace=\"nowrap\">\n {currentOrg?.name || 'No organizations'}\n </Text>\n </HStack>\n </MenuButton>\n <Portal>\n <MenuList\n bg={currentOrg?.id ? selectedOrgMenuBg : 'gray.100'}\n borderColor={currentOrg?.id ? selectedOrgColor : 'gray.300'}\n color={currentOrg?.id ? 'white' : 'gray.800'}\n mt=\"1\"\n minW=\"13rem\"\n maxH=\"60vh\"\n overflowY=\"auto\"\n zIndex=\"modal\"\n boxShadow=\"2xl\"\n >\n {unselectedOrganizations.map((o) => {\n const orgBrandColor = getOrganizationBrandColor(o)\n return (\n <MenuItem\n key={o.id}\n onClick={() => switchOrganization?.(o.id)}\n bg=\"transparent\"\n color={currentOrg?.id ? 'white' : 'inherit'}\n _hover={{\n bg: currentOrg?.id\n ? lightenHexColor(selectedOrgBrandColor || '#E63946', 0.2) || '#555555'\n : 'gray.100',\n color: currentOrg?.id ? 'white' : 'gray.900',\n }}\n _focus={{\n bg: currentOrg?.id\n ? lightenHexColor(selectedOrgBrandColor || '#E63946', 0.2) || '#555555'\n : 'gray.100',\n color: currentOrg?.id ? 'white' : 'gray.900',\n }}\n _active={{\n bg: currentOrg?.id\n ? lightenHexColor(selectedOrgBrandColor || '#E63946', 0.24) || '#5d5d5d'\n : 'gray.200',\n color: currentOrg?.id ? 'white' : 'gray.900',\n }}\n >\n <Flex justify=\"space-between\" align=\"center\" width=\"100%\" overflow=\"hidden\">\n <HStack minW={0} flex=\"1\" spacing=\"2.5\">\n <OrgBadge\n name={o.name}\n logoUrl={o.logoUrl}\n brandColor={orgBrandColor}\n size=\"24px\"\n />\n <Text\n overflow=\"hidden\"\n textOverflow=\"ellipsis\"\n whiteSpace=\"nowrap\"\n flex=\"1\"\n >\n {o.name}\n </Text>\n </HStack>\n <Text\n fontSize=\"xs\"\n color={currentOrg?.id ? 'whiteAlpha.700' : 'gray.500'}\n ml={2}\n flexShrink={0}\n >\n {o.id.slice(-8)}\n </Text>\n </Flex>\n </MenuItem>\n )\n })}\n <MenuDivider my={0} borderColor={currentOrg?.id ? 'whiteAlpha.300' : undefined} />\n <MenuItem\n onClick={() => window.dispatchEvent(new CustomEvent('open-create-org'))}\n fontWeight=\"bold\"\n bg=\"transparent\"\n color={currentOrg?.id ? 'white' : 'inherit'}\n my={0}\n _hover={{\n bg: currentOrg?.id\n ? lightenHexColor(selectedOrgBrandColor || '#E63946', 0.2) || '#555555'\n : 'gray.100',\n color: currentOrg?.id ? 'white' : 'gray.900',\n }}\n _focus={{\n bg: currentOrg?.id\n ? lightenHexColor(selectedOrgBrandColor || '#E63946', 0.2) || '#555555'\n : 'gray.100',\n color: currentOrg?.id ? 'white' : 'gray.900',\n }}\n _active={{\n bg: currentOrg?.id\n ? lightenHexColor(selectedOrgBrandColor || '#E63946', 0.24) || '#5d5d5d'\n : 'gray.200',\n color: currentOrg?.id ? 'white' : 'gray.900',\n }}\n fontSize=\"sm\"\n >\n + New Organization\n </MenuItem>\n </MenuList>\n </Portal>\n </Menu>\n )}\n </Box>\n )\n}\n\nexport default OrgPill\n","import { Box, Button, Menu, MenuButton, MenuItem, MenuList } from '@chakra-ui/react'\nimport { FiChevronDown } from 'react-icons/fi'\nimport { useShellMode } from '../hooks/useShellMode'\nimport { resolveModeConfig } from '../lib/resolveModeConfig'\n\n/**\n * Sidebar mode selector pill. Ported from\n * react/app/src/layouts/AuthenticatedLayout.tsx lines 3959–4006 (2026-05-13).\n *\n * Reads useShellMode. Renders nothing when no mode context is supplied or\n * when the app has only one mode available.\n */\nexport function ModePill() {\n const mode = useShellMode()\n if (!mode) return null\n\n const { currentMode, modes, switchMode } = mode\n const modeConfig = resolveModeConfig(mode)\n if (!modeConfig) return null\n\n const hasMultipleModes = modes.length > 1\n const isDisabled = !hasMultipleModes\n\n return (\n <Box mx=\"4\" mb=\"4\">\n <Menu gutter={0}>\n <MenuButton\n as={Button}\n leftIcon={modeConfig.icon as React.ReactElement | undefined}\n rightIcon={<FiChevronDown />}\n size=\"sm\"\n width=\"full\"\n bg={modeConfig.primaryColor}\n borderColor={modeConfig.primaryColor}\n color={modeConfig.white}\n _disabled={{\n bg: modeConfig.primaryColor,\n borderColor: modeConfig.primaryColor,\n color: modeConfig.white,\n cursor: 'not-allowed',\n opacity: 1,\n }}\n isDisabled={isDisabled}\n _hover={{\n bg: modeConfig.primaryColor,\n color: modeConfig.white,\n }}\n _active={{\n bg: modeConfig.primaryColor,\n color: modeConfig.white,\n }}\n >\n {modeConfig.name}\n </MenuButton>\n {hasMultipleModes && (\n <MenuList>\n {modes.map((m) => (\n <MenuItem\n key={m.id}\n onClick={() => switchMode(m.id)}\n bg=\"transparent\"\n color={currentMode === m.id ? m.primaryColor : 'inherit'}\n _hover={{ bg: m.bgColor, color: m.primaryColor }}\n icon={m.icon as React.ReactElement | undefined}\n >\n {m.name}\n </MenuItem>\n ))}\n </MenuList>\n )}\n </Menu>\n </Box>\n )\n}\n\nexport default ModePill\n","import { useMemo, type ReactNode } from 'react'\nimport {\n Box,\n Button,\n Flex,\n Icon,\n Text,\n Tooltip,\n VStack,\n useClipboard,\n} from '@chakra-ui/react'\nimport { keyframes } from '@emotion/react'\n\n/**\n * Inline diagnostics icon — saves adding react-icons as a shell dep.\n * Roughly equivalent to react-icons/fi `FiActivity` (heart-rate line).\n */\nfunction ActivityIcon() {\n return (\n <svg\n width=\"12\"\n height=\"12\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n aria-hidden=\"true\"\n >\n <polyline points=\"22 12 18 12 15 21 9 3 6 12 2 12\" />\n </svg>\n )\n}\n\n/**\n * Resolves a default environment chip style when the app didn't supply\n * a custom `envNode`. Mirrors the legacy `EnvironmentBanner` color\n * choices (green = local, orange = staging, red = production), keyed\n * off the lowercase string match — so 'staging', 'Staging', or\n * 'staging-eu' all resolve to the staging color.\n */\nfunction defaultEnvChip(label?: string): {\n color: string\n bg: string\n border: string\n name: string\n} | null {\n if (!label) return null\n const lower = label.toLowerCase()\n if (lower.includes('prod')) {\n return { color: '#ef4444', bg: '#fee2e2', border: '#fecaca', name: label }\n }\n if (lower.includes('stag')) {\n return { color: '#f97316', bg: '#ffedd5', border: '#fed7aa', name: label }\n }\n if (lower.includes('local') || lower.includes('dev')) {\n return { color: '#22c55e', bg: '#dcfce7', border: '#bbf7d0', name: label }\n }\n // Unknown env — render the label in neutral gray.\n return { color: '#6b7280', bg: '#f3f4f6', border: '#e5e7eb', name: label }\n}\n\nconst PLACEHOLDER_SHA_VALUES = new Set(['unknown', 'n/a', 'null', 'undefined', ''])\n\nfunction isMeaningfulCommit(value?: string): value is string {\n if (typeof value !== 'string') return false\n const trimmed = value.trim()\n if (!trimmed) return false\n return !PLACEHOLDER_SHA_VALUES.has(trimmed.toLowerCase())\n}\n\nfunction isMeaningfulAuthor(value?: string): boolean {\n if (typeof value !== 'string') return false\n const trimmed = value.trim()\n if (!trimmed) return false\n return !PLACEHOLDER_SHA_VALUES.has(trimmed.toLowerCase())\n}\n\nfunction getFirstName(value?: string) {\n if (!value) return ''\n const stripped = value.replace(/<[^>]+>/g, '').trim()\n if (!stripped) return ''\n const [firstToken] = stripped.split(/\\s+/)\n return firstToken || stripped\n}\n\nexport interface CommitCopyButtonProps {\n /**\n * Pre-rendered environment chip (e.g., the app's own `EnvironmentBanner`).\n * Takes precedence over `environmentLabel`. Click anywhere on the chip\n * copies the full commit SHA.\n */\n envNode?: ReactNode\n /**\n * Environment label (e.g., 'staging', 'production', 'local'). When\n * `envNode` is not supplied, the component renders a default chip\n * keyed off this label with appropriate background/border color.\n */\n environmentLabel?: string\n /** Full git commit SHA. Last 4 characters are rendered; click copies the full SHA. */\n commit?: string\n /** App version, e.g., '2.34.1'. Renders as `v{version}`. */\n version?: string\n /** ISO date string of the commit. Formatted as 'Mon D'. */\n commitDate?: string\n /** Commit author name (e.g., 'Leland Smith'). First name is shown. */\n commitAuthor?: string\n /** Full commit message body — shown as a tooltip over the env chip. */\n commitLog?: string\n /**\n * Optional click handler for the diagnostics icon. When unset, the\n * icon is not rendered.\n */\n onDiagnosticsClick?: () => void\n}\n\n/**\n * Footer commit info pill. Ported from\n * `react/app/src/layouts/AuthenticatedLayout.tsx::CommitCopyButton`\n * (lines 3017–3284, 2026-05-13).\n *\n * Visual: two stacked rows.\n * Row 1: [env chip] | {last4 SHA} | v{version} | [diagnostics icon]\n * Row 2: | {Mon D} | {firstName} | (only when date or author present)\n *\n * Clicking the env chip copies the full SHA via `useClipboard`, with a\n * brief \"Copied\" toast that fades up. Hovering the env chip shows the\n * full commit log in a tooltip.\n */\nexport function CommitCopyButton({\n envNode,\n environmentLabel,\n commit,\n version = '',\n commitDate = '',\n commitAuthor = '',\n commitLog = '',\n onDiagnosticsClick,\n}: CommitCopyButtonProps) {\n const safeCommit = isMeaningfulCommit(commit) ? commit.trim() : ''\n const { hasCopied, onCopy } = useClipboard(safeCommit)\n const shortCommit = safeCommit ? safeCommit.slice(-4) : ''\n\n const copiedAnimation = keyframes`\n 0% { opacity: 0; transform: translateY(6px); }\n 20% { opacity: 1; transform: translateY(0); }\n 100% { opacity: 0; transform: translateY(-8px); }\n `\n\n const formattedDate = useMemo(() => {\n if (!commitDate) return ''\n const parsed = new Date(commitDate)\n if (Number.isNaN(parsed.getTime())) return commitDate\n return parsed.toLocaleDateString(undefined, { month: 'short', day: 'numeric' })\n }, [commitDate])\n\n const metaLine = useMemo(() => {\n const firstName = isMeaningfulAuthor(commitAuthor) ? getFirstName(commitAuthor) : ''\n return [formattedDate, firstName].filter(Boolean).join(' | ')\n }, [formattedDate, commitAuthor])\n\n const normalizedCommitLog = useMemo(() => {\n if (commitLog?.trim()) {\n return commitLog.replace(/\\r\\n/g, '\\n').replace(/\\\\n/g, '\\n')\n }\n return ''\n }, [commitLog])\n\n const tooltipContent: ReactNode =\n normalizedCommitLog.length > 0 ? (\n <Box\n maxW=\"600px\"\n width=\"min(600px, 90vw)\"\n maxH=\"80vh\"\n whiteSpace=\"pre-wrap\"\n overflowY=\"auto\"\n overflowX=\"auto\"\n fontSize=\"xs\"\n fontFamily=\"mono\"\n wordBreak=\"break-word\"\n >\n {normalizedCommitLog}\n </Box>\n ) : undefined\n\n // Resolve the env node: prefer caller-supplied `envNode`, else build\n // a default chip from `environmentLabel`. If neither is present, no\n // env section is rendered.\n const envChip: ReactNode | null = useMemo(() => {\n if (envNode) return envNode\n const chip = defaultEnvChip(environmentLabel)\n if (!chip) return null\n return (\n <Box\n as=\"span\"\n display=\"inline-flex\"\n alignItems=\"center\"\n px=\"1.5\"\n py=\"0.5\"\n borderWidth=\"1px\"\n borderColor={chip.border}\n bg={chip.bg}\n color={chip.color}\n borderRadius=\"md\"\n fontSize=\"2xs\"\n fontWeight=\"600\"\n lineHeight=\"1\"\n textTransform=\"capitalize\"\n aria-label={`Environment: ${chip.name}`}\n >\n {chip.name}\n </Box>\n )\n }, [envNode, environmentLabel])\n\n const showEnv = Boolean(envChip)\n\n return (\n <VStack\n justify=\"center\"\n align=\"center\"\n borderRadius=\"md\"\n py={0.5}\n px={1}\n position=\"relative\"\n spacing={0}\n textAlign=\"center\"\n w=\"full\"\n >\n <Flex justify=\"center\" align=\"center\" gap={2} whiteSpace=\"nowrap\">\n {showEnv ? (\n <>\n <Box flexShrink={0}>\n <Tooltip\n label={tooltipContent}\n isDisabled={!tooltipContent}\n hasArrow\n placement=\"top-start\"\n openDelay={150}\n closeOnClick={false}\n shouldWrapChildren\n modifiers={[\n { name: 'preventOverflow', options: { padding: 16 } },\n { name: 'offset', options: { offset: [0, 12] } },\n ]}\n >\n <Button\n variant=\"unstyled\"\n minW=\"auto\"\n h=\"auto\"\n p={0}\n lineHeight=\"1\"\n color=\"inherit\"\n onClick={onCopy}\n aria-label=\"Copy commit ID\"\n isDisabled={!safeCommit}\n >\n {envChip}\n </Button>\n </Tooltip>\n </Box>\n <Text fontSize=\"2xs\" color=\"var(--sidebar-text-muted, #CBD5E0)\" flexShrink={0}>\n |\n </Text>\n </>\n ) : null}\n {shortCommit ? (\n <Text fontSize=\"2xs\" color={hasCopied ? 'green.500' : 'var(--sidebar-text-muted, #718096)'} flexShrink={0}>\n {shortCommit}\n </Text>\n ) : null}\n {version ? (\n <>\n {shortCommit ? (\n <Text fontSize=\"2xs\" color=\"var(--sidebar-text-muted, #CBD5E0)\" flexShrink={0}>\n |\n </Text>\n ) : null}\n <Text fontSize=\"2xs\" color=\"var(--sidebar-text-muted, #718096)\" flexShrink={0}>\n v{version}\n </Text>\n </>\n ) : null}\n {onDiagnosticsClick ? (\n <>\n <Text fontSize=\"2xs\" color=\"var(--sidebar-text-muted, #CBD5E0)\" flexShrink={0}>\n |\n </Text>\n <Tooltip label=\"Diagnostics\" hasArrow placement=\"top\">\n <Button\n variant=\"unstyled\"\n minW=\"auto\"\n h=\"auto\"\n p={0}\n lineHeight=\"1\"\n color=\"gray.400\"\n _hover={{ color: 'gray.600' }}\n onClick={(e) => {\n e.stopPropagation()\n onDiagnosticsClick()\n }}\n aria-label=\"Diagnostics\"\n >\n <Icon as={ActivityIcon} boxSize={3} />\n </Button>\n </Tooltip>\n </>\n ) : null}\n </Flex>\n {metaLine ? (\n <Text fontSize=\"2xs\" color=\"var(--sidebar-text-muted, #718096)\" textAlign=\"center\" whiteSpace=\"nowrap\">\n {metaLine}\n </Text>\n ) : null}\n {hasCopied && (\n <Box\n position=\"absolute\"\n bottom=\"100%\"\n mb=\"6px\"\n px=\"2\"\n py=\"1\"\n fontSize=\"xs\"\n bg=\"gray.700\"\n color=\"white\"\n borderRadius=\"md\"\n animation={`${copiedAnimation} 0.9s ease-out`}\n pointerEvents=\"none\"\n >\n Copied\n </Box>\n )}\n </VStack>\n )\n}\n\nexport default CommitCopyButton\n","import { useEffect, useState } from 'react'\nimport {\n Box,\n Flex,\n HStack,\n IconButton,\n Image,\n Link,\n Text,\n VStack,\n} from '@chakra-ui/react'\nimport { FiX } from 'react-icons/fi'\nimport { NavLink, useLocation } from 'react-router-dom'\nimport BrandLogo from './BrandLogo'\nimport NavItem from './NavItem'\nimport OrgPill from './OrgPill'\nimport ModePill from './ModePill'\nimport { CommitCopyButton } from './CommitCopyButton'\nimport { useShellChrome } from '../hooks/useShellChrome'\nimport { useShellFooter } from '../hooks/useShellFooter'\nimport { useShellNavItems } from '../hooks/useShellNavItems'\nimport { useShellOrganization } from '../hooks/useShellOrganization'\n\nexport interface SidebarProps {\n /** Mobile close handler (renders the X button on mobile when set). */\n onClose?: () => void\n /** DOM id for the sidebar root (defaults to 'sidebar-container'). */\n id?: string\n}\n\n/**\n * Politogy sidebar. Ported from\n * react/app/src/layouts/AuthenticatedLayout.tsx lines 3289–4192 (2026-05-13)\n * but stripped of the AI-sidebar block (moved to app's navItems pipeline).\n *\n * Renders, top to bottom:\n * - Brand logo + (mobile) close button\n * - Org logo (large) if present\n * - <OrgPill /> — organization switcher\n * - <ModePill /> — mode switcher\n * - Nav items (from useShellNavItems)\n * - Footer (Privacy / Terms / Subscriptions links + commit/version display)\n */\nexport function Sidebar({ onClose, id }: SidebarProps) {\n const { brandLogoSrc } = useShellChrome()\n const navItems = useShellNavItems()?.items ?? []\n const footer = useShellFooter()\n const org = useShellOrganization()\n const currentOrg = org?.currentOrg ?? null\n const location = useLocation()\n\n // Brand tokens, not Chakra color-mode values. The Brand stylesheet emits a\n // complete `.dark` block, so a single var covers both themes and a Brand edit\n // applies live. useColorModeValue would pin dark to Chakra's gray.900\n // (#171923) and silently ignore --sidebar-bg entirely.\n const sidebarBg = 'var(--sidebar-bg, #FFFFFF)'\n const sidebarBorderColor = 'var(--sidebar-border, #E2E8F0)'\n\n // Track expanded accordion menu by key.\n const [expandedMenu, setExpandedMenu] = useState<string | null>(null)\n\n useEffect(() => {\n const activeMenu =\n navItems.find(\n (item) =>\n item.children &&\n item.children.some((child) => {\n if (!child.href) return false\n const childPath = child.href.split('?')[0]\n if (!childPath) return false\n return (\n location.pathname === childPath || location.pathname.startsWith(`${childPath}/`)\n )\n }),\n )?.name || null\n setExpandedMenu(activeMenu)\n }, [location.pathname, navItems])\n\n const handleMenuToggle = (menuKey?: string | null) => {\n if (!menuKey) {\n setExpandedMenu(null)\n return\n }\n setExpandedMenu((prev) => (prev === menuKey ? null : menuKey))\n }\n\n return (\n <Flex\n id={id || 'sidebar-container'}\n transition=\"3s ease\"\n bg={sidebarBg}\n borderRight=\"1px\"\n borderRightColor={sidebarBorderColor}\n w={{ base: 'full', md: 'var(--sidebar-width, 240px)' }}\n pos=\"fixed\"\n h=\"100vh\"\n direction=\"column\"\n overflow=\"hidden\"\n >\n <Flex alignItems=\"center\" mx=\"8\" mt=\"3\" mb=\"2\" justifyContent=\"space-between\" flexShrink={0}>\n <Box h=\"40px\">\n {brandLogoSrc ? (\n <BrandLogo src={brandLogoSrc} className=\"h-full w-auto object-contain\" />\n ) : null}\n </Box>\n {onClose ? (\n <IconButton\n display={{ base: 'flex', md: 'none' }}\n onClick={onClose}\n variant=\"outline\"\n aria-label=\"close menu\"\n icon={<FiX />}\n />\n ) : null}\n </Flex>\n\n <Box\n flex=\"1\"\n overflowY=\"auto\"\n css={{\n '&::-webkit-scrollbar': { width: '8px' },\n '&::-webkit-scrollbar-track': { background: 'transparent' },\n '&::-webkit-scrollbar-thumb': { background: '#CBD5E0', borderRadius: '4px' },\n '&::-webkit-scrollbar-thumb:hover': { background: '#A0AEC0' },\n }}\n >\n {currentOrg?.logoUrl && (\n <Box mx=\"4\" mb=\"3\">\n <Image\n src={currentOrg.logoUrl}\n alt={`${currentOrg.name} logo`}\n maxH=\"70px\"\n w=\"full\"\n objectFit=\"contain\"\n borderRadius=\"md\"\n />\n </Box>\n )}\n\n <OrgPill />\n <ModePill />\n\n {navItems.map((link) => (\n <NavItem\n key={link.name}\n icon={link.icon}\n brandIcon={link.brandIcon}\n href={link.href}\n subItems={link.children}\n badge={link.badge}\n subLabel={link.subLabel}\n action={link.action}\n menuKey={String(link.name)}\n isExpanded={expandedMenu === link.name}\n onToggle={handleMenuToggle}\n isDisabled={Boolean(link.disabled)}\n >\n {link.name}\n </NavItem>\n ))}\n </Box>\n\n {/* Footer (Privacy / Terms / Subscriptions + commit info), pinned to bottom */}\n {footer && (\n <Box\n px=\"1\"\n py=\"1\"\n borderTop=\"1px\"\n borderColor=\"var(--sidebar-border, #E2E8F0)\"\n flexShrink={0}\n bg={sidebarBg}\n zIndex={1}\n >\n {/* Centered footer: give the links row full width so justify=center\n actually distributes it across the sidebar (a content-width flex\n row has no free space to center), and center the build meta too. */}\n <VStack align=\"stretch\" spacing={2} px=\"3\" py=\"2\" textAlign=\"center\">\n <HStack spacing={1} fontSize=\"xs\" color=\"gray.600\" wrap=\"wrap\" justify=\"center\" w=\"full\">\n {footer.links.map((l, idx) => (\n <Box key={`${l.label}-${idx}`} display=\"inline-flex\" alignItems=\"center\">\n {idx > 0 ? <Text color=\"var(--sidebar-text-muted, #929599)\" mx={1}>|</Text> : null}\n {l.external ? (\n <Link\n href={l.href}\n isExternal\n // Neutral sidebar text (not brand red); white on hover\n // like the nav rows. Dark-mode-safe via the tokens.\n color=\"var(--sidebar-text-muted, #4A5568)\"\n _hover={{\n color: 'var(--sidebar-hover-text, #FFFFFF)',\n textDecoration: 'underline',\n }}\n >\n {l.label}\n </Link>\n ) : (\n <Link\n as={NavLink}\n to={l.href}\n color=\"var(--sidebar-text-muted, #4A5568)\"\n _hover={{\n color: 'var(--sidebar-hover-text, #FFFFFF)',\n textDecoration: 'underline',\n }}\n >\n {l.label}\n </Link>\n )}\n </Box>\n ))}\n </HStack>\n {(footer.version ||\n footer.commit ||\n footer.commitFull ||\n footer.environmentLabel ||\n footer.envNode) && (\n <CommitCopyButton\n envNode={footer.envNode}\n environmentLabel={footer.environmentLabel}\n commit={footer.commitFull ?? footer.commit}\n version={footer.version}\n commitDate={footer.commitDate}\n commitAuthor={footer.commitAuthor}\n commitLog={footer.commitLog}\n onDiagnosticsClick={footer.onDiagnosticsClick}\n />\n )}\n </VStack>\n </Box>\n )}\n </Flex>\n )\n}\n\nexport default Sidebar\n","import { Box, Text } from '@chakra-ui/react'\n\nexport interface FooterProps {\n buildInfo?: string\n}\n\nexport function Footer({ buildInfo }: FooterProps) {\n return (\n <Box\n as=\"footer\"\n px={4}\n py={2}\n borderTop=\"1px solid\"\n borderColor=\"gray.200\"\n fontSize=\"xs\"\n color=\"gray.500\"\n >\n <Text>politogy {buildInfo ? `· ${buildInfo}` : ''}</Text>\n </Box>\n )\n}\n","import { useState, type ReactNode } from 'react'\nimport { Box, Flex } from '@chakra-ui/react'\nimport { Header } from './Header'\nimport { Sidebar } from './Sidebar'\nimport { Footer } from './Footer'\nimport type { ShellSlots } from '../types'\n\nexport interface AppLayoutProps extends ShellSlots {\n children: ReactNode\n buildInfo?: string\n}\n\n/**\n * Authenticated app shell composition: <Sidebar> on the left, <Header> on\n * top, <main> for routed children, optional <Footer>, plus modal + overlay\n * slots. All chrome data flows through ShellProvider/ShellChrome contexts —\n * AppLayout itself takes only optional slots for modals/overlays/notifs.\n */\nexport function AppLayout({\n children,\n buildInfo,\n modalsSlot,\n notificationsSlot,\n overlaySlot,\n}: AppLayoutProps) {\n const [mobileOpen, setMobileOpen] = useState(false)\n\n return (\n <Flex direction=\"column\" minH=\"100vh\">\n <Sidebar\n onClose={mobileOpen ? () => setMobileOpen(false) : undefined}\n />\n <Header onOpen={() => setMobileOpen(true)} />\n <Box as=\"main\" flex=\"1\" ml={{ base: 0, md: 60 }} position=\"relative\" overflow=\"auto\">\n {children}\n {notificationsSlot}\n </Box>\n {buildInfo ? <Footer buildInfo={buildInfo} /> : null}\n {modalsSlot}\n {overlaySlot}\n </Flex>\n )\n}\n","import type { ComponentType } from 'react'\nimport {\n FiAlertCircle,\n FiBattery,\n FiBatteryCharging,\n FiAlertTriangle,\n FiBell,\n FiGrid,\n FiHelpCircle,\n FiInfo,\n FiLifeBuoy,\n FiMail,\n FiMessageSquare,\n FiMoon,\n FiSettings,\n FiSun,\n FiUser,\n FiZap,\n} from 'react-icons/fi'\n\nexport type GlyphComponent = ComponentType<{ size?: number | string; className?: string }>\n\n/**\n * Brand-glyph registry: maps the icon NAME the Brand API emits (e.g.\n * `--topbar-icon-comms-fuel: bolt`) to a component.\n *\n * These names are Feather/Lucide icon names, NOT asset filenames — there is no\n * `/brand/icons/<name>.svg` for them in any app, and treating them as URLs\n * renders a broken image. Resolving them against the icon library the shell\n * already depends on keeps every app consistent with zero vendored assets.\n *\n * Aliases are included where Brand and Feather disagree on a name (`bolt` vs\n * `zap`, `life-buoy` vs `life-ring`).\n */\nconst GLYPHS: Record<string, GlyphComponent> = {\n // Communications Fuel reads as a LEVEL, so its glyph is a battery. `bolt`/\n // `zap` stay mapped for older Brand values.\n 'battery-charging': FiBatteryCharging,\n battery: FiBattery,\n fuel: FiBatteryCharging,\n bolt: FiZap,\n zap: FiZap,\n grid: FiGrid,\n apps: FiGrid,\n bell: FiBell,\n notification: FiBell,\n 'alert-triangle': FiAlertTriangle,\n alert: FiAlertTriangle,\n 'alert-circle': FiAlertCircle,\n 'life-buoy': FiLifeBuoy,\n 'life-ring': FiLifeBuoy,\n support: FiLifeBuoy,\n 'help-circle': FiHelpCircle,\n moon: FiMoon,\n sun: FiSun,\n info: FiInfo,\n mail: FiMail,\n 'message-square': FiMessageSquare,\n settings: FiSettings,\n user: FiUser,\n}\n\n/**\n * Resolve a Brand glyph name to a component. Returns null for an unknown name\n * so the caller renders its own fallback — an unrecognized token must never\n * produce a broken or empty icon.\n */\nexport function resolveBrandGlyph(name: string | null | undefined): GlyphComponent | null {\n if (!name) return null\n return GLYPHS[name.trim().toLowerCase()] ?? null\n}\n\n/** Names the registry knows — exported for tests and tooling. */\nexport const KNOWN_BRAND_GLYPHS = Object.keys(GLYPHS)\n","import { useEffect, useState } from 'react'\n\n/**\n * The six canonical top-bar action slots (Reference/Global-Rules v9 → top-bar\n * icons). Each slot's GLYPH is unique and comes from the Brand API\n * `topbarIcons.items.*` tokens, exposed as `--topbar-icon-<slot>` CSS vars\n * whose value is the brand-icon NAME. Every OTHER property — size, gap, color,\n * hover, selected — is universal across all six slots.\n */\nexport type TopBarIconSlot =\n | 'comms-fuel'\n | 'apps'\n | 'notifications'\n | 'alerts'\n | 'support'\n | 'dark-mode'\n\n/**\n * Reads the glyph NAME for a slot from its `--topbar-icon-<slot>` CSS var.\n *\n * Runs in an effect because the Brand stylesheet is appended to <head> at\n * runtime (Global Rules forbids baking it into the build), so the var is not\n * resolvable during SSR or the first synchronous render. The MutationObserver\n * re-reads once the stylesheet lands so the glyph upgrades from the caller's\n * fallback without a reload.\n *\n * Returns null when the slot has no Brand glyph — callers render their own\n * fallback icon in that case.\n */\nexport function useTopBarIconSlotGlyph(slot: TopBarIconSlot): string | null {\n const [name, setName] = useState<string | null>(null)\n\n useEffect(() => {\n if (typeof window === 'undefined') return\n\n const read = () => {\n const raw = window\n .getComputedStyle(document.documentElement)\n .getPropertyValue(`--topbar-icon-${slot}`)\n .trim()\n // Brand may emit the name quoted (e.g. \"bell\"); strip the quotes.\n .replace(/^['\"]|['\"]$/g, '')\n setName(raw.length > 0 ? raw : null)\n }\n\n read()\n\n const observer = new MutationObserver(read)\n observer.observe(document.head, { childList: true, subtree: true })\n return () => observer.disconnect()\n }, [slot])\n\n return name\n}\n\n/** Path to a brand-icon SVG in the consuming app's public dir. */\nexport function brandIconSrc(name: string, basePath = '/brand/icons/') {\n return `${basePath}${name}.svg`\n}\n","import { forwardRef, type ReactElement, type ReactNode } from 'react'\nimport { Badge, Box, IconButton, type IconButtonProps } from '@chakra-ui/react'\nimport { resolveBrandGlyph } from '../lib/brandGlyphs'\nimport {\n useTopBarIconSlotGlyph,\n type TopBarIconSlot,\n} from '../lib/topbarIconSlot'\n\n/**\n * The single count badge used by EVERY top-bar slot. Exported so a slot that\n * has to render its own trigger (a popover/menu button) still gets an\n * identical badge instead of hand-rolling one — mismatched badge sizes and\n * radii across slots are the most visible form of chrome drift.\n */\nexport function TopBarBadge({ count }: { count: number }) {\n if (!count || count <= 0) return null\n return (\n <Badge\n position=\"absolute\"\n top=\"-2px\"\n right=\"-2px\"\n bg=\"var(--topbar-badge-bg, #E63946)\"\n color=\"var(--topbar-badge-fg, #FFFFFF)\"\n rounded=\"full\"\n fontSize=\"0.625rem\"\n fontWeight=\"bold\"\n lineHeight=\"1\"\n minW=\"1rem\"\n h=\"1rem\"\n px=\"1\"\n display=\"flex\"\n alignItems=\"center\"\n justifyContent=\"center\"\n pointerEvents=\"none\"\n aria-hidden\n >\n {count > 9 ? '9+' : count}\n </Badge>\n )\n}\n\nexport interface TopBarIconProps\n extends Omit<IconButtonProps, 'icon' | 'aria-label'> {\n slot: TopBarIconSlot\n 'aria-label': string\n /**\n * Rendered when the Brand API has no glyph name for this slot (token unset,\n * stylesheet not yet loaded, or SSR). Keeps the top bar populated instead of\n * flashing an empty button.\n */\n fallbackIcon: ReactElement\n /** Marks the slot active — resolves the universal selected-state tokens. */\n isSelected?: boolean\n /** Unread/pending count. Rendered with the shared <TopBarBadge>. */\n badgeCount?: number\n /** Extra overlay (rare). Positioned in the same relative wrapper as the badge. */\n children?: ReactNode\n}\n\n/**\n * A single top-bar action icon. Use this for EVERY top-bar slot so the icons\n * share one universal treatment — never give one slot a bespoke size, spacing,\n * hover, selected style, or badge.\n *\n * Sizing is deliberately enforced on the rendered <svg> as well as the button:\n * react-icons emit their own width/height attributes, and Feather glyphs differ\n * in visual weight, so relying on the button box alone lets slots drift apart.\n */\nexport const TopBarIcon = forwardRef<HTMLButtonElement, TopBarIconProps>(\n function TopBarIcon(\n { slot, fallbackIcon, isSelected, badgeCount, children, ...rest }: TopBarIconProps,\n ref,\n ) {\n const glyphName = useTopBarIconSlotGlyph(slot)\n\n // Brand emits Feather/Lucide glyph NAMES (battery-charging, bell,\n // life-buoy…), not asset paths — resolve them against the shell's icon\n // registry. An unknown name falls back to the caller's icon rather than\n // rendering nothing.\n const Glyph = resolveBrandGlyph(glyphName)\n const icon = Glyph ? <Glyph /> : fallbackIcon\n\n const button = (\n <IconButton\n ref={ref}\n icon={icon}\n variant=\"ghost\"\n minW=\"var(--topbar-icon-button-size, 32px)\"\n w=\"var(--topbar-icon-button-size, 32px)\"\n h=\"var(--topbar-icon-button-size, 32px)\"\n p=\"0\"\n bg={\n isSelected\n ? 'var(--topbar-icon-selected-bg, transparent)'\n : 'transparent'\n }\n color={\n isSelected\n ? 'var(--topbar-icon-selected-color, var(--topbar-icon-color, #64748B))'\n : 'var(--topbar-icon-color, #64748B)'\n }\n _hover={{\n bg: 'var(--topbar-icon-hover-bg, transparent)',\n color: 'var(--topbar-icon-hover-color, var(--topbar-icon-color, #64748B))',\n }}\n sx={{\n // Normalize the glyph itself, not just its box. Covers react-icons\n // <svg> and brand <img> alike, and pins stroke weight so one glyph\n // can't read heavier than its neighbours.\n '& svg, & img': {\n width: 'var(--topbar-icon-size, 20px)',\n height: 'var(--topbar-icon-size, 20px)',\n strokeWidth: 'var(--topbar-icon-stroke-width, 2)',\n },\n }}\n {...rest}\n />\n )\n\n if (!badgeCount && !children) return button\n\n return (\n <Box position=\"relative\" display=\"inline-flex\">\n {button}\n <TopBarBadge count={badgeCount ?? 0} />\n {children}\n </Box>\n )\n },\n)\n\nexport type { TopBarIconSlot }\n\nexport default TopBarIcon\n","import { useCallback, useEffect, useMemo, useState } from 'react'\nimport { TopBarIcon } from './TopBarIcon'\nimport {\n Box,\n Button,\n Modal,\n ModalBody,\n ModalCloseButton,\n ModalContent,\n ModalFooter,\n ModalHeader,\n ModalOverlay,\n Text,\n Textarea,\n VStack,\n useDisclosure,\n useToast,\n} from '@chakra-ui/react'\nimport { useShellAuth } from '../hooks/useShellAuth'\nimport { useShellOrganization } from '../hooks/useShellOrganization'\nimport { useShellSupport } from '../hooks/useShellSupport'\nimport type { ShellSupportContext, ShellUser } from '../types'\n\nconst SUPPORT_REQUEST_SUCCESS_MESSAGE = 'Your support request was sent to Politogy leadership.'\n\ninterface SupportProfile {\n firstName: string\n lastName: string\n email: string\n phone: string\n missingEmail: boolean\n missingPhone: boolean\n}\n\nfunction splitName(value?: string | null) {\n const trimmed = String(value ?? '').trim()\n if (!trimmed) return { firstName: '', lastName: '' }\n const [first, ...rest] = trimmed.split(/\\s+/)\n return { firstName: first ?? '', lastName: rest.join(' ') }\n}\n\nexport function resolveSupportProfile(user: ShellUser | null): SupportProfile {\n if (!user) {\n return { firstName: '', lastName: '', email: '', phone: '', missingEmail: true, missingPhone: true }\n }\n const meta = (user.raw.user_metadata ?? {}) as {\n full_name?: string\n name?: string\n phone?: string\n }\n const resolvedName =\n String(meta.full_name ?? meta.name ?? '').trim() ||\n String(user.email ?? '').split('@')[0] ||\n ''\n const { firstName, lastName } = splitName(resolvedName)\n const email = String(user.email ?? '').trim()\n const phone = String(meta.phone ?? '').trim()\n return {\n firstName,\n lastName,\n email,\n phone,\n missingEmail: email.length === 0,\n missingPhone: phone.length === 0,\n }\n}\n\nfunction formatTimestamp(date: Date) {\n return date.toLocaleString('en-US', {\n year: 'numeric',\n month: 'short',\n day: 'numeric',\n hour: 'numeric',\n minute: '2-digit',\n second: '2-digit',\n hour12: true,\n })\n}\n\nexport function buildSupportRequestMessage(input: {\n firstName: string\n lastName: string\n organizationName?: string\n email: string\n phone: string\n pathname: string\n search?: string\n pageTitle?: string\n submittedAt?: Date\n}) {\n const submittedAt = input.submittedAt ?? new Date()\n const iso = submittedAt.toISOString()\n const display = formatTimestamp(submittedAt)\n const trimmedSearch = String(input.search ?? '').trim()\n\n return [\n 'A user requested support.',\n '',\n `First Name: ${input.firstName.trim() || 'Unknown'}`,\n `Last Name: ${input.lastName.trim() || 'Unknown'}`,\n `Organization: ${(input.organizationName ?? '').trim() || 'Unknown'}`,\n `Email: ${input.email.trim()}`,\n `Phone: ${input.phone.trim()}`,\n `Submitted At (ISO): ${iso}`,\n `Submitted At (Local): ${display}`,\n `Page Path: ${input.pathname.trim() || '/'}`,\n `Page Title: ${(input.pageTitle ?? '').trim() || 'Unknown'}`,\n `Query String: ${trimmedSearch || 'None'}`,\n ].join('\\n')\n}\n\n/**\n * Support icon + modal rendered in the header. Reads auth, org, and support\n * handler from ShellProvider. Renders nothing when the host app didn't supply\n * a `support` prop.\n */\nexport function SupportRequestButton() {\n const support = useShellSupport()\n const { user } = useShellAuth()\n const org = useShellOrganization()\n const { isOpen, onOpen, onClose } = useDisclosure()\n const toast = useToast()\n\n const profile = useMemo(() => resolveSupportProfile(user), [user])\n const [email, setEmail] = useState('')\n const [phone, setPhone] = useState('')\n const [message, setMessage] = useState('')\n const [isSubmitting, setIsSubmitting] = useState(false)\n\n useEffect(() => {\n if (!isOpen) return\n setEmail(profile.email)\n setPhone(profile.phone)\n setMessage('')\n setIsSubmitting(false)\n }, [isOpen, profile.email, profile.phone])\n\n const handleClose = useCallback(() => {\n if (isSubmitting) return\n onClose()\n }, [isSubmitting, onClose])\n\n const handleSubmit = useCallback(async () => {\n if (!support) return\n const resolvedEmail = (profile.missingEmail ? email : profile.email).trim()\n const resolvedPhone = (profile.missingPhone ? phone : profile.phone).trim()\n\n if (!resolvedEmail) {\n toast({ title: 'Email required', status: 'error', duration: 4000, isClosable: true })\n return\n }\n if (!resolvedPhone) {\n toast({ title: 'Phone required', status: 'error', duration: 4000, isClosable: true })\n return\n }\n if (!user?.id) {\n toast({\n title: 'Unable to send support request',\n description: 'You must be signed in to request support.',\n status: 'error',\n duration: 4000,\n isClosable: true,\n })\n return\n }\n\n const context: ShellSupportContext = {\n pathname: typeof window !== 'undefined' ? window.location.pathname : '/',\n search: typeof window !== 'undefined' ? window.location.search : '',\n pageTitle: typeof document !== 'undefined' ? document.title : undefined,\n organizationName: org?.currentOrg?.name ?? undefined,\n }\n const formatted = buildSupportRequestMessage({\n firstName: profile.firstName,\n lastName: profile.lastName,\n organizationName: context.organizationName,\n email: resolvedEmail,\n phone: resolvedPhone,\n pathname: context.pathname,\n search: context.search,\n pageTitle: context.pageTitle,\n })\n\n try {\n setIsSubmitting(true)\n await support.submitSupportRequest({\n email: resolvedEmail,\n phone: resolvedPhone,\n message: message.trim() ? `${message.trim()}\\n\\n---\\n\\n${formatted}` : formatted,\n context,\n })\n toast({\n title: 'Support request sent',\n description: SUPPORT_REQUEST_SUCCESS_MESSAGE,\n status: 'success',\n duration: 5000,\n isClosable: true,\n })\n onClose()\n } catch (err: unknown) {\n const description =\n err instanceof Error ? err.message : 'Unable to send your support request.'\n toast({\n title: 'Failed to request support',\n description,\n status: 'error',\n duration: 5000,\n isClosable: true,\n })\n } finally {\n setIsSubmitting(false)\n }\n }, [support, profile, email, phone, message, toast, user?.id, onClose, org?.currentOrg?.name])\n\n if (!support) return null\n\n return (\n <>\n {/* Routed through <TopBarIcon> so Support gets the same glyph source,\n size, color and hover as every other top-bar slot. It previously used\n a hand-rolled 18px SVG with size=\"sm\", which rendered visibly smaller\n than its neighbours. */}\n <TopBarIcon\n slot=\"support\"\n aria-label=\"Request support\"\n fallbackIcon={<LifebuoyIcon />}\n onClick={onOpen}\n />\n <Modal isOpen={isOpen} onClose={handleClose} isCentered>\n <ModalOverlay />\n <ModalContent>\n <ModalHeader>Support</ModalHeader>\n <ModalCloseButton isDisabled={isSubmitting} />\n <ModalBody>\n <VStack align=\"stretch\" spacing={4}>\n <Text fontSize=\"sm\" color=\"gray.600\">\n A message will be texted and emailed with your contact information and support will\n reply as soon as possible. If you are a beta customer that is typically within\n minutes.\n </Text>\n <Box rounded=\"md\" borderWidth=\"1px\" borderColor=\"gray.200\" bg=\"gray.50\" p={3}>\n <VStack align=\"stretch\" spacing={1}>\n <Text fontSize=\"sm\">\n <strong>Name:</strong>{' '}\n {[profile.firstName, profile.lastName].filter(Boolean).join(' ') || 'Unknown'}\n </Text>\n <Text fontSize=\"sm\">\n <strong>Organization:</strong> {org?.currentOrg?.name ?? 'Unknown'}\n </Text>\n <Text fontSize=\"sm\">\n <strong>Email:</strong>{' '}\n {(profile.missingEmail ? email : profile.email) || 'Missing'}\n </Text>\n <Text fontSize=\"sm\">\n <strong>Phone:</strong>{' '}\n {(profile.missingPhone ? phone : profile.phone) || 'Missing'}\n </Text>\n </VStack>\n </Box>\n {profile.missingEmail && (\n <Box>\n <Text fontSize=\"xs\" fontWeight=\"600\" color=\"gray.700\" mb={1}>\n Email\n </Text>\n <input\n type=\"email\"\n aria-label=\"Email\"\n value={email}\n onChange={(e) => setEmail(e.target.value)}\n placeholder=\"name@example.com\"\n style={{\n width: '100%',\n padding: '8px 12px',\n border: '1px solid #e2e8f0',\n borderRadius: '6px',\n fontSize: '14px',\n }}\n />\n </Box>\n )}\n {profile.missingPhone && (\n <Box>\n <Text fontSize=\"xs\" fontWeight=\"600\" color=\"gray.700\" mb={1}>\n Phone\n </Text>\n <input\n aria-label=\"Phone\"\n value={phone}\n onChange={(e) => setPhone(e.target.value)}\n placeholder=\"(503) 555-1212\"\n style={{\n width: '100%',\n padding: '8px 12px',\n border: '1px solid #e2e8f0',\n borderRadius: '6px',\n fontSize: '14px',\n }}\n />\n </Box>\n )}\n <Box>\n <Text fontSize=\"xs\" fontWeight=\"600\" color=\"gray.700\" mb={1}>\n Optional message\n </Text>\n <Textarea\n value={message}\n onChange={(e) => setMessage(e.target.value)}\n placeholder=\"What can we help you with?\"\n rows={3}\n />\n </Box>\n </VStack>\n </ModalBody>\n <ModalFooter>\n <Button variant=\"ghost\" mr={3} onClick={handleClose} isDisabled={isSubmitting}>\n Cancel\n </Button>\n <Button\n colorScheme=\"red\"\n onClick={() => void handleSubmit()}\n isLoading={isSubmitting}\n loadingText=\"Sending\"\n >\n Request Support\n </Button>\n </ModalFooter>\n </ModalContent>\n </Modal>\n </>\n )\n}\n\n// Inline life-buoy icon — saves adding react-icons as a shell dep.\nfunction LifebuoyIcon() {\n return (\n <svg\n width=\"18\"\n height=\"18\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n aria-hidden=\"true\"\n >\n <circle cx=\"12\" cy=\"12\" r=\"10\" />\n <circle cx=\"12\" cy=\"12\" r=\"4\" />\n <line x1=\"4.93\" y1=\"4.93\" x2=\"9.17\" y2=\"9.17\" />\n <line x1=\"14.83\" y1=\"14.83\" x2=\"19.07\" y2=\"19.07\" />\n <line x1=\"14.83\" y1=\"9.17\" x2=\"19.07\" y2=\"4.93\" />\n <line x1=\"14.83\" y1=\"9.17\" x2=\"18.36\" y2=\"5.64\" />\n <line x1=\"4.93\" y1=\"19.07\" x2=\"9.17\" y2=\"14.83\" />\n </svg>\n )\n}\n","import { useMemo, type ReactNode } from 'react'\nimport {\n ShellChromeContext,\n ShellFooterContext,\n ShellLinkedAccountsContext,\n ShellModeContext,\n ShellNavItemsContext,\n ShellNavigationPreferenceContext,\n ShellOrgContext,\n ShellRoleContext,\n ShellSupportProviderContext,\n} from '../providers/ShellProvider'\nimport type {\n ShellFooterValue,\n ShellLinkedAccountsValue,\n ShellModeValue,\n ShellNavItem,\n ShellNavigationPreferenceValue,\n ShellOrganizationValue,\n ShellRoleValue,\n ShellSupportValue,\n} from '../types'\n\nexport interface ShellChromeProps {\n children: ReactNode\n /** Drives <OrgPill /> in the sidebar. */\n organization?: ShellOrganizationValue | null\n /** Drives the UserMenu Switch-account section. */\n linkedAccounts?: ShellLinkedAccountsValue | null\n /** Drives <SupportRequestButton /> and modal submission. */\n support?: ShellSupportValue | null\n /** Rendered in the header (typically <DevNotesMenu />). */\n devNotesMenu?: ReactNode\n /** UserMenu profile link target. Defaults to '/my-profile'. */\n myProfileHref?: string\n\n /** Drives <ModePill /> + active row colors. */\n mode?: ShellModeValue | null\n /** The sidebar nav rows. */\n navItems?: ShellNavItem[]\n /** User's nav-rendering preference. */\n navigationPreference?: ShellNavigationPreferenceValue | null\n /** Active-role display info for the UserMenu role badge. */\n role?: ShellRoleValue | null\n /** Footer data for the sidebar bottom row. */\n footer?: ShellFooterValue | null\n\n /** Image src for the sidebar BrandLogo (top-left). */\n brandLogoSrc?: string\n /** Header right-side icon stack (Fuel, NewTextBell, Alerts, Toggle, ImportProgress, etc). */\n headerIconsSlot?: ReactNode\n /** href used by the UserMenu \"Organization Settings\" item. */\n organizationSettingsHref?: string\n /** When true, UserMenu shows \"Continue Onboarding\" item. */\n showContinueOnboarding?: boolean\n /** Click handler for UserMenu \"Continue Onboarding\". */\n onContinueOnboarding?: () => void\n /** Header page title text. */\n pageTitle?: string\n /** Header breadcrumb chips. */\n breadcrumbs?: Array<{ label: string; href?: string }>\n /** Header right-side action buttons (rendered before the icon row). */\n headerActions?: ReactNode\n /** Avatar URL override for UserMenu. Pass a value computed from the app's\n * profile.avatar_url / localStorage / default fallback chain. */\n userAvatarUrl?: string\n}\n\n/**\n * Drop-in chrome binding for apps where the org/linked-account/support data\n * lives in React contexts nested BELOW <ShellProvider> (e.g., an\n * <OrganizationProvider> that itself depends on <AuthProvider>).\n *\n * Use this component inside those providers to feed the values into the\n * shell's chrome contexts. Nested <Context.Provider> overrides the empty\n * defaults set by <ShellProvider> at the top of the tree.\n *\n * Apps that have all the data available at the ShellProvider construction\n * site can pass the same props to <ShellProvider> directly instead.\n */\nexport function ShellChrome({\n children,\n organization,\n linkedAccounts,\n support,\n devNotesMenu,\n myProfileHref,\n mode,\n navItems,\n navigationPreference,\n role,\n footer,\n brandLogoSrc,\n headerIconsSlot,\n organizationSettingsHref,\n showContinueOnboarding,\n onContinueOnboarding,\n pageTitle,\n breadcrumbs,\n headerActions,\n userAvatarUrl,\n}: ShellChromeProps) {\n const chrome = useMemo(\n () => ({\n devNotesMenu: devNotesMenu ?? null,\n myProfileHref: myProfileHref ?? '/my-profile',\n brandLogoSrc,\n headerIconsSlot,\n organizationSettingsHref,\n showContinueOnboarding,\n onContinueOnboarding,\n pageTitle,\n breadcrumbs,\n headerActions,\n userAvatarUrl,\n }),\n [\n devNotesMenu,\n myProfileHref,\n brandLogoSrc,\n headerIconsSlot,\n organizationSettingsHref,\n showContinueOnboarding,\n onContinueOnboarding,\n pageTitle,\n breadcrumbs,\n headerActions,\n userAvatarUrl,\n ],\n )\n\n const navItemsValue = useMemo(\n () => (navItems ? { items: navItems } : null),\n [navItems],\n )\n\n return (\n <ShellOrgContext.Provider value={organization ?? null}>\n <ShellLinkedAccountsContext.Provider value={linkedAccounts ?? null}>\n <ShellSupportProviderContext.Provider value={support ?? null}>\n <ShellModeContext.Provider value={mode ?? null}>\n <ShellNavItemsContext.Provider value={navItemsValue}>\n <ShellNavigationPreferenceContext.Provider value={navigationPreference ?? null}>\n <ShellRoleContext.Provider value={role ?? null}>\n <ShellFooterContext.Provider value={footer ?? null}>\n <ShellChromeContext.Provider value={chrome}>\n {children}\n </ShellChromeContext.Provider>\n </ShellFooterContext.Provider>\n </ShellRoleContext.Provider>\n </ShellNavigationPreferenceContext.Provider>\n </ShellNavItemsContext.Provider>\n </ShellModeContext.Provider>\n </ShellSupportProviderContext.Provider>\n </ShellLinkedAccountsContext.Provider>\n </ShellOrgContext.Provider>\n )\n}\n","export interface RegisterShellPrecacheOptions {\n /** Path the host app serves the SW from. Default: '/sw-shell.js'. */\n scriptUrl?: string\n /** Scope the SW controls. Default: '/'. */\n scope?: string\n}\n\n/**\n * Register the shell precache service worker. Silently no-ops in browsers that\n * don't support service workers (e.g., old Safari) and during SSR.\n *\n * Hosts must copy `node_modules/@the-portland-company/shell/dist/shell-precache.worker.js`\n * to the URL specified by `scriptUrl` (default `/sw-shell.js`) in their public\n * directory so the browser can fetch it at registration time.\n */\nexport async function registerShellPrecache(opts: RegisterShellPrecacheOptions = {}): Promise<void> {\n if (typeof window === 'undefined') return\n if (!('serviceWorker' in navigator)) return\n const scriptUrl = opts.scriptUrl ?? '/sw-shell.js'\n const scope = opts.scope ?? '/'\n try {\n await navigator.serviceWorker.register(scriptUrl, { scope })\n } catch (err) {\n // Registration failures are not user-visible. Log for ops, swallow.\n // eslint-disable-next-line no-console\n console.warn('[shell] precache SW registration failed:', err)\n }\n}\n","import type { AppRegistryEntry } from '../types'\n\n/**\n * Build a Speculation Rules JSON payload that prerenders other apps in the\n * registry on moderate eagerness. Returns null when there are no eligible\n * other apps to prerender (e.g., this is the only app in the registry).\n *\n * The host app is expected to render this as\n * `<script type=\"speculationrules\">{json}</script>` in <head> at runtime.\n */\nexport function buildSpeculationRules(\n currentApp: string,\n registry: AppRegistryEntry[],\n): string | null {\n const others = registry.filter(\n (entry) => entry.id !== currentApp && entry.visible !== false,\n )\n if (others.length === 0) return null\n const payload = {\n prerender: [\n {\n urls: others.map((entry) => entry.path),\n eagerness: 'moderate' as const,\n },\n ],\n }\n return JSON.stringify(payload)\n}\n"]}