@the-portland-company/shell 0.3.2 → 0.3.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +24 -0
- package/README.md +198 -27
- package/dist/css-modules.d.ts +6 -0
- package/dist/index.cjs +18 -4
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +9 -2
- package/dist/index.d.ts +9 -2
- package/dist/index.js +18 -4
- package/dist/index.js.map +1 -1
- package/package.json +10 -4
package/dist/index.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../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/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/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","useNavigate","useColorModeValue","Flex","Menu","MenuButton","HStack","Avatar","VStack","Text","Box","FiChevronDown","Portal","MenuList","MenuItem","FiUser","FiRotateCcw","FiBriefcase","MenuDivider","Badge","Fragment","IconButton","FiTrash2","FiUserPlus","FiLogOut","FiMenu","NavLink","Collapse","Image","useClipboard","keyframes","Skeleton","Button","Icon","FiX","useDisclosure","useToast","useCallback","Modal","ModalOverlay","ModalContent","ModalHeader","ModalCloseButton","ModalBody","Textarea","ModalFooter"],"mappings":"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","file":"index.cjs","sourcesContent":["// Theme color definitions for light and dark modes\nexport const colors = {\n // Primary brand color - Politogy Red/Orange (Energy & Action)\n brand: {\n 50: '#fff5f0',\n 100: '#ffe8dc',\n 200: '#ffd0b8',\n 300: '#ffb088',\n 400: '#ff8c5a',\n 500: '#e86a3a', // Primary brand color - burnt orange/red\n 600: '#cc5429',\n 700: '#a6421f',\n 800: '#803317',\n 900: '#5c2410',\n },\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 // Primary Red/Orange - Energy & Action (main brand color)\n red: {\n 50: '#fff5f0',\n 100: '#ffe8dc',\n 200: '#ffd0b8',\n 300: '#ffb088',\n 400: '#ff8c5a',\n 500: '#e86a3a',\n 600: '#cc5429',\n 700: '#a6421f',\n 800: '#803317',\n 900: '#5c2410',\n },\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\">></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\">></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 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 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])\n\n const value = useMemo<ShellAuthValue>(\n () => ({\n status,\n session,\n user: toShellUser(session),\n signOut: async () => {\n await supabaseClient.auth.signOut()\n },\n }),\n [status, session, supabaseClient],\n )\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 {\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'\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 const menuListBg = useColorModeValue('white', 'gray.900')\n const menuListBorderColor = useColorModeValue('gray.200', 'gray.700')\n\n if (status !== 'authenticated' || !user) return null\n\n const displayName = getUserDisplayName(user.raw)\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 = mode?.getModeConfig() ?? null\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 <Text fontSize=\"xs\" color=\"gray.500\">\n {user.email}\n </Text>\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 <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 useColorModeValue,\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 const mobileNavBg = useColorModeValue('white', 'gray.900')\n const mobileNavBorderColor = useColorModeValue('gray.200', 'gray.700')\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 <HStack\n spacing={2}\n mr=\"15px\"\n color=\"gray.600\"\n sx={{\n '& button:not([role=\"menuitem\"]):not([data-menu-item])': {\n width: '32px',\n height: '32px',\n minWidth: '32px',\n padding: 0,\n },\n '& button:not([role=\"menuitem\"]):not([data-menu-item]) svg': {\n width: '20px',\n height: '20px',\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'\n\n// Mode-id constants for the hover-gradient picker. Mirrors the legacy\n// MODES constants in react/app/src/contexts/ModeContext.tsx.\nconst MODE_CAMPAIGN = 'campaign'\nconst MODE_PETITION = 'petition'\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\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. Ported verbatim from\n * react/app/src/layouts/AuthenticatedLayout.tsx lines 1292–1730 (2026-05-13)\n * with mode + navigation-preference context reads swapped for shell hooks.\n *\n * Renders:\n * - Top-level rows with optional children (accordion).\n * - Sub-items inside an expanded parent (children list).\n * - Active state via `data-nav-item-active` and primary-color fill.\n * - Mode-aware hover gradient that sweeps left-to-right.\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 currentMode = mode?.currentMode ?? null\n const modeConfig = mode?.getModeConfig() ?? null\n\n const navPref = useShellNavigationPreference()\n const showSubMenu = navPref?.showSubMenu ?? true\n\n // Mode-aware hover gradient — matches FuelDashboardCard so the sidebar\n // hover state echoes the mode's brand gradient.\n const navHoverGradient =\n currentMode === MODE_CAMPAIGN\n ? 'linear-gradient(90deg, #F2C94C 0%, #E63946 100%)'\n : currentMode === MODE_PETITION\n ? 'linear-gradient(90deg, #F2C94C 0%, #007BFF 100%)'\n : 'linear-gradient(90deg, #007BFF 0%, #E63946 100%)'\n\n const gradientSweepBefore = {\n content: '\"\"',\n position: 'absolute' as const,\n top: 0,\n left: 0,\n bottom: 0,\n width: '0%',\n background: navHoverGradient,\n transition: 'width 300ms ease',\n pointerEvents: 'none' as const,\n zIndex: 0,\n }\n\n const isDisabled = Boolean(navIsDisabled || disabled)\n\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 === 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 const hasSubItems = showSubMenu && Array.isArray(subItems) && subItems.length > 0\n const hasActiveChild = hasSubItems && 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 const expandedRowBg = isParentActive\n ? modeConfig?.primaryColor || 'brand.500'\n : isSubMenuOpen\n ? 'gray.100'\n : 'transparent'\n const expandedRowTextColor = isParentActive ? 'white' : isSubMenuOpen ? 'gray.900' : 'gray.600'\n const disabledRowBg = isSubItem ? 'gray.50' : 'transparent'\n const disabledRowTextColor = 'gray.400'\n\n if (hasSubItems) {\n const headerProps = {\n align: 'center' as const,\n px: '4',\n py: '2.5',\n mx: '4',\n w: 'auto',\n borderTopRadius: 'lg' as const,\n borderBottomRadius: isSubMenuOpen ? 0 : ('lg' as const),\n role: 'group',\n cursor: isDisabled ? ('not-allowed' as const) : ('pointer' as const),\n opacity: 1,\n pointerEvents: isDisabled ? ('none' as const) : ('auto' as const),\n 'data-nav-item-active': String(isParentActive),\n position: 'relative' as const,\n overflow: 'hidden' as const,\n bg: isDisabled ? disabledRowBg : expandedRowBg,\n color: isDisabled ? disabledRowTextColor : expandedRowTextColor,\n _before: isDisabled ? undefined : gradientSweepBefore,\n _hover: {\n color: isDisabled ? disabledRowTextColor : 'white',\n _before: isDisabled ? undefined : { width: '100%' },\n },\n 'aria-disabled': isDisabled ? ('true' as const) : ('false' as const),\n onClick: (e: React.MouseEvent) => {\n if (isDisabled) return\n if (effectiveHref) e.preventDefault()\n e.stopPropagation()\n onToggle?.(menuKey || null)\n },\n }\n\n return (\n <Box>\n <Flex {...headerProps} {...(rest as object)}>\n {brandIcon ? (\n <Box\n mr=\"4\"\n display=\"inline-flex\"\n alignItems=\"center\"\n position=\"relative\"\n zIndex={1}\n filter={isParentActive ? 'brightness(0) invert(1)' : undefined}\n _groupHover={isDisabled ? undefined : { filter: 'brightness(0) invert(1)' }}\n >\n <BrandIcon name={brandIcon} size={18} />\n </Box>\n ) : icon ? (\n <Box\n mr=\"4\"\n fontSize=\"16\"\n position=\"relative\"\n zIndex={1}\n _groupHover={{\n color: isDisabled ? disabledRowTextColor : 'white',\n }}\n as={icon as never}\n />\n ) : null}\n <Box flex=\"1\" position=\"relative\" zIndex={1}>\n {children}\n </Box>\n <Box\n as={FiChevronDown}\n position=\"relative\"\n zIndex={1}\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 bg={isDisabled ? 'gray.100' : 'gray.200'}\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 >\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 return (\n <Box as=\"a\" href={effectiveHref || '#'} onClick={handleClick} style={{ textDecoration: 'none' }}>\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(isActive)}\n position=\"relative\"\n overflow=\"hidden\"\n bg={\n isDisabled\n ? disabledRowBg\n : isActive\n ? isSubItem\n ? 'gray.100'\n : modeConfig?.primaryColor || 'brand.500'\n : 'transparent'\n }\n color={\n isDisabled\n ? disabledRowTextColor\n : isActive\n ? isSubItem\n ? modeConfig?.primaryColor || 'brand.500'\n : 'white'\n : 'gray.600'\n }\n _before={isDisabled ? undefined : gradientSweepBefore}\n _hover={{\n color: isDisabled ? disabledRowTextColor : 'white',\n _before: isDisabled ? undefined : { width: '100%' },\n }}\n aria-disabled={isDisabled ? 'true' : 'false'}\n onClick={handleClick}\n >\n {brandIcon ? (\n <Box\n mr=\"4\"\n display=\"inline-flex\"\n alignItems=\"center\"\n position=\"relative\"\n zIndex={1}\n filter={isActive && !isSubItem ? 'brightness(0) invert(1)' : undefined}\n _groupHover={isDisabled ? undefined : { filter: 'brightness(0) invert(1)' }}\n >\n <BrandIcon name={brandIcon} size={18} />\n </Box>\n ) : icon ? (\n <Box\n mr=\"4\"\n fontSize=\"16\"\n position=\"relative\"\n zIndex={1}\n _groupHover={{\n color: isDisabled ? disabledRowTextColor : 'white',\n }}\n as={icon as never}\n />\n ) : null}\n <Box flex=\"1\" position=\"relative\" zIndex={1}>\n <Box>{children}</Box>\n {subLabel ? (\n <Text\n mt={0.5}\n fontSize=\"10px\"\n lineHeight=\"1.3\"\n color={isDisabled ? 'gray.400' : 'gray.400'}\n >\n {subLabel}\n </Text>\n ) : null}\n {badge && (\n <Badge colorScheme=\"orange\" 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 = selectedOrgBrandColor || 'var(--mode-primary-color, #ea6a3a)'\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 <OrgBadge\n name={currentOrg?.name}\n logoUrl={currentOrg?.logoUrl}\n brandColor={selectedOrgBrandColor}\n size=\"28px\"\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 || '#ea6a3a', 0.2) || '#555555'\n : 'gray.100',\n color: currentOrg?.id ? 'white' : 'gray.900',\n }}\n _focus={{\n bg: currentOrg?.id\n ? lightenHexColor(selectedOrgBrandColor || '#ea6a3a', 0.2) || '#555555'\n : 'gray.100',\n color: currentOrg?.id ? 'white' : 'gray.900',\n }}\n _active={{\n bg: currentOrg?.id\n ? lightenHexColor(selectedOrgBrandColor || '#ea6a3a', 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 || '#ea6a3a', 0.2) || '#555555'\n : 'gray.100',\n color: currentOrg?.id ? 'white' : 'gray.900',\n }}\n _focus={{\n bg: currentOrg?.id\n ? lightenHexColor(selectedOrgBrandColor || '#ea6a3a', 0.2) || '#555555'\n : 'gray.100',\n color: currentOrg?.id ? 'white' : 'gray.900',\n }}\n _active={{\n bg: currentOrg?.id\n ? lightenHexColor(selectedOrgBrandColor || '#ea6a3a', 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'\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, getModeConfig } = mode\n const modeConfig = getModeConfig()\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=\"gray.300\" flexShrink={0}>\n |\n </Text>\n </>\n ) : null}\n {shortCommit ? (\n <Text fontSize=\"2xs\" color={hasCopied ? 'green.500' : 'gray.400'} flexShrink={0}>\n {shortCommit}\n </Text>\n ) : null}\n {version ? (\n <>\n {shortCommit ? (\n <Text fontSize=\"2xs\" color=\"gray.300\" flexShrink={0}>\n |\n </Text>\n ) : null}\n <Text fontSize=\"2xs\" color=\"gray.400\" flexShrink={0}>\n v{version}\n </Text>\n </>\n ) : null}\n {onDiagnosticsClick ? (\n <>\n <Text fontSize=\"2xs\" color=\"gray.300\" 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=\"gray.500\" 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 useColorModeValue,\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 const sidebarBg = useColorModeValue('white', 'gray.900')\n const sidebarBorderColor = useColorModeValue('gray.200', 'gray.700')\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: 60 }}\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=\"gray.200\"\n flexShrink={0}\n bg={sidebarBg}\n zIndex={1}\n >\n <VStack align=\"stretch\" spacing={2} px=\"3\" py=\"2\">\n <HStack spacing={1} fontSize=\"xs\" color=\"gray.600\" wrap=\"wrap\">\n {footer.links.map((l, idx) => (\n <Box key={`${l.label}-${idx}`} display=\"inline-flex\" alignItems=\"center\">\n {idx > 0 ? <Text color=\"gray.400\" mx={1}>|</Text> : null}\n {l.external ? (\n <Link\n href={l.href}\n isExternal\n _hover={{ textDecoration: 'underline', opacity: 1 }}\n >\n {l.label}\n </Link>\n ) : (\n <Link\n as={NavLink}\n to={l.href}\n _hover={{ textDecoration: 'underline', opacity: 1 }}\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 { useCallback, useEffect, useMemo, useState } from 'react'\nimport {\n Box,\n Button,\n IconButton,\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 <IconButton\n aria-label=\"Request support\"\n icon={<LifebuoyIcon />}\n variant=\"ghost\"\n size=\"sm\"\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=\"orange\"\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/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/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/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","useNavigate","useColorModeValue","Flex","Menu","MenuButton","HStack","Avatar","VStack","Text","Box","FiChevronDown","Portal","MenuList","MenuItem","FiUser","FiRotateCcw","FiBriefcase","MenuDivider","Badge","Fragment","IconButton","FiTrash2","FiUserPlus","FiLogOut","FiMenu","NavLink","Collapse","Image","useClipboard","keyframes","Skeleton","Button","Icon","FiX","useDisclosure","useToast","useCallback","Modal","ModalOverlay","ModalContent","ModalHeader","ModalCloseButton","ModalBody","Textarea","ModalFooter"],"mappings":"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","file":"index.cjs","sourcesContent":["// Theme color definitions for light and dark modes\nexport const colors = {\n // Primary brand color - Politogy Red/Orange (Energy & Action)\n brand: {\n 50: '#fff5f0',\n 100: '#ffe8dc',\n 200: '#ffd0b8',\n 300: '#ffb088',\n 400: '#ff8c5a',\n 500: '#e86a3a', // Primary brand color - burnt orange/red\n 600: '#cc5429',\n 700: '#a6421f',\n 800: '#803317',\n 900: '#5c2410',\n },\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 // Primary Red/Orange - Energy & Action (main brand color)\n red: {\n 50: '#fff5f0',\n 100: '#ffe8dc',\n 200: '#ffd0b8',\n 300: '#ffb088',\n 400: '#ff8c5a',\n 500: '#e86a3a',\n 600: '#cc5429',\n 700: '#a6421f',\n 800: '#803317',\n 900: '#5c2410',\n },\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\">></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\">></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 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 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])\n\n const value = useMemo<ShellAuthValue>(\n () => ({\n status,\n session,\n user: toShellUser(session),\n signOut: async () => {\n await supabaseClient.auth.signOut()\n },\n }),\n [status, session, supabaseClient],\n )\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","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'\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 const menuListBg = useColorModeValue('white', 'gray.900')\n const menuListBorderColor = useColorModeValue('gray.200', 'gray.700')\n\n if (status !== 'authenticated' || !user) return null\n\n const displayName = getUserDisplayName(user.raw)\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 <Text fontSize=\"xs\" color=\"gray.500\">\n {user.email}\n </Text>\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 <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 useColorModeValue,\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 const mobileNavBg = useColorModeValue('white', 'gray.900')\n const mobileNavBorderColor = useColorModeValue('gray.200', 'gray.700')\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 <HStack\n spacing={2}\n mr=\"15px\"\n color=\"gray.600\"\n sx={{\n '& button:not([role=\"menuitem\"]):not([data-menu-item])': {\n width: '32px',\n height: '32px',\n minWidth: '32px',\n padding: 0,\n },\n '& button:not([role=\"menuitem\"]):not([data-menu-item]) svg': {\n width: '20px',\n height: '20px',\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// Mode-id constants for the hover-gradient picker. Mirrors the legacy\n// MODES constants in react/app/src/contexts/ModeContext.tsx.\nconst MODE_CAMPAIGN = 'campaign'\nconst MODE_PETITION = 'petition'\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\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. Ported verbatim from\n * react/app/src/layouts/AuthenticatedLayout.tsx lines 1292–1730 (2026-05-13)\n * with mode + navigation-preference context reads swapped for shell hooks.\n *\n * Renders:\n * - Top-level rows with optional children (accordion).\n * - Sub-items inside an expanded parent (children list).\n * - Active state via `data-nav-item-active` and primary-color fill.\n * - Mode-aware hover gradient that sweeps left-to-right.\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 currentMode = mode?.currentMode ?? null\n const modeConfig = resolveModeConfig(mode)\n\n const navPref = useShellNavigationPreference()\n const showSubMenu = navPref?.showSubMenu ?? true\n\n // Mode-aware hover gradient — matches FuelDashboardCard so the sidebar\n // hover state echoes the mode's brand gradient.\n const navHoverGradient =\n currentMode === MODE_CAMPAIGN\n ? 'linear-gradient(90deg, #F2C94C 0%, #E63946 100%)'\n : currentMode === MODE_PETITION\n ? 'linear-gradient(90deg, #F2C94C 0%, #007BFF 100%)'\n : 'linear-gradient(90deg, #007BFF 0%, #E63946 100%)'\n\n const gradientSweepBefore = {\n content: '\"\"',\n position: 'absolute' as const,\n top: 0,\n left: 0,\n bottom: 0,\n width: '0%',\n background: navHoverGradient,\n transition: 'width 300ms ease',\n pointerEvents: 'none' as const,\n zIndex: 0,\n }\n\n const isDisabled = Boolean(navIsDisabled || disabled)\n\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 === 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 const hasSubItems = showSubMenu && Array.isArray(subItems) && subItems.length > 0\n const hasActiveChild = hasSubItems && 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 const expandedRowBg = isParentActive\n ? modeConfig?.primaryColor || 'brand.500'\n : isSubMenuOpen\n ? 'gray.100'\n : 'transparent'\n const expandedRowTextColor = isParentActive ? 'white' : isSubMenuOpen ? 'gray.900' : 'gray.600'\n const disabledRowBg = isSubItem ? 'gray.50' : 'transparent'\n const disabledRowTextColor = 'gray.400'\n\n if (hasSubItems) {\n const headerProps = {\n align: 'center' as const,\n px: '4',\n py: '2.5',\n mx: '4',\n w: 'auto',\n borderTopRadius: 'lg' as const,\n borderBottomRadius: isSubMenuOpen ? 0 : ('lg' as const),\n role: 'group',\n cursor: isDisabled ? ('not-allowed' as const) : ('pointer' as const),\n opacity: 1,\n pointerEvents: isDisabled ? ('none' as const) : ('auto' as const),\n 'data-nav-item-active': String(isParentActive),\n position: 'relative' as const,\n overflow: 'hidden' as const,\n bg: isDisabled ? disabledRowBg : expandedRowBg,\n color: isDisabled ? disabledRowTextColor : expandedRowTextColor,\n _before: isDisabled ? undefined : gradientSweepBefore,\n _hover: {\n color: isDisabled ? disabledRowTextColor : 'white',\n _before: isDisabled ? undefined : { width: '100%' },\n },\n 'aria-disabled': isDisabled ? ('true' as const) : ('false' as const),\n onClick: (e: React.MouseEvent) => {\n if (isDisabled) return\n if (effectiveHref) e.preventDefault()\n e.stopPropagation()\n onToggle?.(menuKey || null)\n },\n }\n\n return (\n <Box>\n <Flex {...headerProps} {...(rest as object)}>\n {brandIcon ? (\n <Box\n mr=\"4\"\n display=\"inline-flex\"\n alignItems=\"center\"\n position=\"relative\"\n zIndex={1}\n filter={isParentActive ? 'brightness(0) invert(1)' : undefined}\n _groupHover={isDisabled ? undefined : { filter: 'brightness(0) invert(1)' }}\n >\n <BrandIcon name={brandIcon} size={18} />\n </Box>\n ) : icon ? (\n <Box\n mr=\"4\"\n fontSize=\"16\"\n position=\"relative\"\n zIndex={1}\n _groupHover={{\n color: isDisabled ? disabledRowTextColor : 'white',\n }}\n as={icon as never}\n />\n ) : null}\n <Box flex=\"1\" position=\"relative\" zIndex={1}>\n {children}\n </Box>\n <Box\n as={FiChevronDown}\n position=\"relative\"\n zIndex={1}\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 bg={isDisabled ? 'gray.100' : 'gray.200'}\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 >\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 return (\n <Box as=\"a\" href={effectiveHref || '#'} onClick={handleClick} style={{ textDecoration: 'none' }}>\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(isActive)}\n position=\"relative\"\n overflow=\"hidden\"\n bg={\n isDisabled\n ? disabledRowBg\n : isActive\n ? isSubItem\n ? 'gray.100'\n : modeConfig?.primaryColor || 'brand.500'\n : 'transparent'\n }\n color={\n isDisabled\n ? disabledRowTextColor\n : isActive\n ? isSubItem\n ? modeConfig?.primaryColor || 'brand.500'\n : 'white'\n : 'gray.600'\n }\n _before={isDisabled ? undefined : gradientSweepBefore}\n _hover={{\n color: isDisabled ? disabledRowTextColor : 'white',\n _before: isDisabled ? undefined : { width: '100%' },\n }}\n aria-disabled={isDisabled ? 'true' : 'false'}\n onClick={handleClick}\n >\n {brandIcon ? (\n <Box\n mr=\"4\"\n display=\"inline-flex\"\n alignItems=\"center\"\n position=\"relative\"\n zIndex={1}\n filter={isActive && !isSubItem ? 'brightness(0) invert(1)' : undefined}\n _groupHover={isDisabled ? undefined : { filter: 'brightness(0) invert(1)' }}\n >\n <BrandIcon name={brandIcon} size={18} />\n </Box>\n ) : icon ? (\n <Box\n mr=\"4\"\n fontSize=\"16\"\n position=\"relative\"\n zIndex={1}\n _groupHover={{\n color: isDisabled ? disabledRowTextColor : 'white',\n }}\n as={icon as never}\n />\n ) : null}\n <Box flex=\"1\" position=\"relative\" zIndex={1}>\n <Box>{children}</Box>\n {subLabel ? (\n <Text\n mt={0.5}\n fontSize=\"10px\"\n lineHeight=\"1.3\"\n color={isDisabled ? 'gray.400' : 'gray.400'}\n >\n {subLabel}\n </Text>\n ) : null}\n {badge && (\n <Badge colorScheme=\"orange\" 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 = selectedOrgBrandColor || 'var(--mode-primary-color, #ea6a3a)'\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 <OrgBadge\n name={currentOrg?.name}\n logoUrl={currentOrg?.logoUrl}\n brandColor={selectedOrgBrandColor}\n size=\"28px\"\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 || '#ea6a3a', 0.2) || '#555555'\n : 'gray.100',\n color: currentOrg?.id ? 'white' : 'gray.900',\n }}\n _focus={{\n bg: currentOrg?.id\n ? lightenHexColor(selectedOrgBrandColor || '#ea6a3a', 0.2) || '#555555'\n : 'gray.100',\n color: currentOrg?.id ? 'white' : 'gray.900',\n }}\n _active={{\n bg: currentOrg?.id\n ? lightenHexColor(selectedOrgBrandColor || '#ea6a3a', 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 || '#ea6a3a', 0.2) || '#555555'\n : 'gray.100',\n color: currentOrg?.id ? 'white' : 'gray.900',\n }}\n _focus={{\n bg: currentOrg?.id\n ? lightenHexColor(selectedOrgBrandColor || '#ea6a3a', 0.2) || '#555555'\n : 'gray.100',\n color: currentOrg?.id ? 'white' : 'gray.900',\n }}\n _active={{\n bg: currentOrg?.id\n ? lightenHexColor(selectedOrgBrandColor || '#ea6a3a', 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=\"gray.300\" flexShrink={0}>\n |\n </Text>\n </>\n ) : null}\n {shortCommit ? (\n <Text fontSize=\"2xs\" color={hasCopied ? 'green.500' : 'gray.400'} flexShrink={0}>\n {shortCommit}\n </Text>\n ) : null}\n {version ? (\n <>\n {shortCommit ? (\n <Text fontSize=\"2xs\" color=\"gray.300\" flexShrink={0}>\n |\n </Text>\n ) : null}\n <Text fontSize=\"2xs\" color=\"gray.400\" flexShrink={0}>\n v{version}\n </Text>\n </>\n ) : null}\n {onDiagnosticsClick ? (\n <>\n <Text fontSize=\"2xs\" color=\"gray.300\" 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=\"gray.500\" 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 useColorModeValue,\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 const sidebarBg = useColorModeValue('white', 'gray.900')\n const sidebarBorderColor = useColorModeValue('gray.200', 'gray.700')\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: 60 }}\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=\"gray.200\"\n flexShrink={0}\n bg={sidebarBg}\n zIndex={1}\n >\n <VStack align=\"stretch\" spacing={2} px=\"3\" py=\"2\">\n <HStack spacing={1} fontSize=\"xs\" color=\"gray.600\" wrap=\"wrap\">\n {footer.links.map((l, idx) => (\n <Box key={`${l.label}-${idx}`} display=\"inline-flex\" alignItems=\"center\">\n {idx > 0 ? <Text color=\"gray.400\" mx={1}>|</Text> : null}\n {l.external ? (\n <Link\n href={l.href}\n isExternal\n _hover={{ textDecoration: 'underline', opacity: 1 }}\n >\n {l.label}\n </Link>\n ) : (\n <Link\n as={NavLink}\n to={l.href}\n _hover={{ textDecoration: 'underline', opacity: 1 }}\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 { useCallback, useEffect, useMemo, useState } from 'react'\nimport {\n Box,\n Button,\n IconButton,\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 <IconButton\n aria-label=\"Request support\"\n icon={<LifebuoyIcon />}\n variant=\"ghost\"\n size=\"sm\"\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=\"orange\"\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"]}
|