{"version":3,"file":"index.cjs","names":["createSvgIcon","darkTokens","lightTokens","createTheme","ExpandMoreIcon","createElement","createTheme","forwardRef","useId","Accordion","AccordionSummary","Icon","AccordionDetails","forwardRef","Alert","AlertTitle","alpha","inflowTokens","_Fragment","Box","Icon","forwardRef","forwardRef","useTheme","Children","styled","MuiBadge","forwardRef","forwardRef","useState","Icon","Box","Typography","Breadcrumbs","IconButton","_Fragment","Link","forwardRef","Button","forwardRef","Card","CardHeader","CardContent","CardActions","forwardRef","useId","useState","Box","CircularProgress","Icon","Accordion","AccordionSummary","AccordionDetails","forwardRef","Chip","Icon","SvgIcon","forwardRef","useRef","useId","useState","useCallback","Box","Button","Icon","inflowTokens","Menu","MenuItem","ListItemIcon","IconButton","LinearProgress","Typography","_Fragment","InputBase","forwardRef","Box","Typography","IconButton","Icon","forwardRef","Dialog","DialogTitle","IconButton","DialogContent","DialogActions","memo","useTheme","SvgIcon","forwardRef","Menu","Fragment","Divider","Tooltip","MenuItem","ListItemIcon","Icon","ListItemText","Box","createSvgIcon","forwardRef","Box","IconButton","ArrowBackOutlinedIcon","Typography","Stack","forwardRef","useTheme","useRef","useState","useCallback","_Fragment","Fade","Box","Slide","Button","styled","StepConnector","StepLabel","StepButton","forwardRef","useTheme","Stepper","Step","TableContainer","Paper","Table","TableHead","TableRow","TableCell","TableBody","forwardRef","forwardRef","useRef","useState","Box","inflowTokens","alpha","Icon","forwardRef","TextField","forwardRef","Box","Icon","IconButton","useMemo","createCache","CacheProvider","ThemeProvider","ScopedCssBaseline","__create","__defProp","__getOwnPropDesc","__getOwnPropNames","__getProtoOf","__hasOwnProp","__copyProps","from","keys","i","n","key","to","except","k","desc","__toESM","mod","isNodeMode","target","require_tokens","react","_mui_material_styles","_mui_material_SvgIcon","react_jsx_runtime","_mui_material","_emotion_cache","_emotion_react","ExpandMore_default","INFLOW_DARK_MODE_ENABLED","DARK_MODE_DISABLED_WARNING","shouldWarnAboutDisabledDarkMode","resolveInflowColorMode","mode","E1","E2","E3","shadows","getInflowTokensForMode","getInflowPalette","T","createInflowTheme","requestedMode","theme","ownerState","colorKey","checkedColor","inflowTheme","createDefaultTheme","defaultTheme","inflowFileTypeColors","inflowFileTypeExtensions","normalizeFileExtension","raw","ThemedAccordion","accordionId","isMultiple","multiple","expanded","isExpanded","id","handleChange","onChange","isOpen","items","summaryId","item","detailsId","iconMap","ThemedAlert","title","children","NavItem","itemSx","content","ThemedAppNav","index","footer","ThemedAppNavPlaceholder","count","sizeStyles","badgeSizes","shapeRadius","overlapOffset","ThemedAvatar","radius","shape","avatarSize","size","badgeSize","palette","typography","src","badge","ThemedAvatarGroup","visible","max","overflow","offset","child","StyledBadge","prop","colorMap","$badgecolor","ThemedBadge","props","color","ThemedBreadcrumbs","setExpanded","breadcrumbSeparator","separator","visibleItems","maxItems","ThemedButton","inflowVariant","sx","ThemedCard","subheader","disableContentPadding","actions","ThemedChatAccordion","isControlled","internalExpanded","setInternalExpanded","defaultExpanded","open","stepLabel","step","isActive","activeStepIndex","steps","latestIndex","activePillSx","statusLeadingIcon","status","isStreaming","stepStatusIcons","chipSizeStyles","ThemedChip","requestedVariant","requestedColor","requestedSize","isPrimaryVariant","variant","isDefaultColor","chipSize","customStyles","leadingIcon","deleteIcon","DEFAULT_OPTIONS","DEFAULT_STRINGS","iconButtonSx","sendButtonSx","selectedSurfaceSx","PIN_END_PATH","PinEndIcon","SEND_PATH","SendIcon","ThemedChatPanel","onAttachFile","credits","scrollRef","fileInputRef","assistantMenuId","assistantTriggerId","toolsMenuId","toolsTriggerId","anchorEl","setAnchorEl","toolsAnchorEl","setToolsAnchorEl","selected","setSelected","prevTitle","setPrevTitle","messages","isTyping","handleSelect","option","onSelectOption","handleSend","inputValue","attachedFile","attachments","isRunning","isSendDisabled","onSendMessage","onSend","handleInputKeyDown","event","multiline","sendDisabled","displayedAttachments","renderToolMessageSlot","renderToolMessage","message","renderTypingIndicatorSlot","renderTypingIndicator","assistantLabel","dot","hideHeader","dropdownOptions","onExpand","expandAriaLabel","onMore","moreAriaLabel","onClose","closeAriaLabel","renderMessageThread","ChatMessage","renderAttachment","attachment","onRemoveAttachment","uploadProgress","uploadProgressLabel","showAttach","files","tools","toolsAriaLabel","attachAriaLabel","tool","onToolSelect","onInputChange","inputPlaceholder","isInputDisabled","maxRows","charLimit","showInputHint","inputHint","onStop","stopAriaLabel","sendAriaLabel","showCredits","creditsLabel","showCharCount","charCount","aiDisclaimer","selectedChips","setSelectedChips","isAssistant","toggleChip","next","previous","chip","action","userLabel","ThemedDetailPanel","ThemedDetailPanelSection","headerAction","ThemedDialog","hideCloseButton","WIDTH","FAMILY_BY_EXTENSION","family","extension","ThemedFileTypeIcon","isDark","ext","text","fontSize","width","tone","brand","paper","labelColor","decorative","ThemedMenu","onSelect","ArrowBackOutlined_default","ThemedPageHeader","onBack","breadcrumbs","eyebrow","WIDTH_PX","CSS_VAR","MIN_WIDTH","MAX_WIDTH","activePanel","ThemedRightPanel","ariaLabel","panelId","panelRef","dragRef","replacementResolverRef","discardOpen","setDiscardOpen","resolvedWidth","panelWidth","setPanelWidth","isDragging","setIsDragging","activationGranted","setActivationGranted","visibleOpen","ref","host","previousOverflow","body","requestClose","hasUnsavedChanges","requestReplacement","resolve","keepEditing","discardChanges","cancelled","registration","currentPanel","canReplace","closeOnNavigation","handleNavigation","handleKeyDown","onPointerMove","nextWidth","stopDragging","handlePointerDown","isOverlay","canResize","resizable","panelContent","panelSx","topOffset","ICON_SIZE","INNER_CIRCLE_SIZE","StepIconRoot","InnerCircle","InnerDot","StepIconCheckmark","ThemedStepIcon","className","completed","active","HiddenStepConnector","ThemedStepConnector","buildConnectorGradient","furthestReached","activeStep","completedStep","segments","startPct","endPct","visibleStart","visibleEnd","selectedLabelStyle","ThemedStepLabel","StyledStepButton","ThemedStepper","furthestCompletedStep","clickable","onStepClick","disableStepClick","connectorGradient","connector","alternativeLabel","isFuture","underline","ForwardedThemedTable","containerSx","columns","column","data","isRowSelected","row","onRowClick","striped","keyExtractor","ThemedTable","ThemedTabs","controlledValue","buttonRefs","internal","setInternal","selectIndex","tabs","focusAndSelect","enabledIndexes","tab","currentEnabledIndex","currentIndex","nextIndex","direction","node","ThemedTabPanel","value","tabId","ThemedTextField","iconNames","ThemedToast","severity","resolveEmotionCacheFactory","factory","createInflowVariables","InflowProvider","internalCache","cacheKey","cache","emotionCache","rootSx"],"sources":["../node_modules/@mui/icons-material/ExpandMore.mjs","../src/theme/featureFlags.ts","../src/theme/inflow.ts","../src/theme/default.ts","../src/theme/fileTypes.ts","../src/components/themed/ThemedAccordion.tsx","../src/components/themed/ThemedAlert.tsx","../src/components/themed/ThemedAppNav.tsx","../src/components/themed/ThemedAvatar.tsx","../src/components/themed/ThemedBadge.tsx","../src/components/themed/ThemedBreadcrumbs.tsx","../src/components/themed/ThemedButton.tsx","../src/components/themed/ThemedCard.tsx","../src/components/themed/ThemedChatAccordion.tsx","../src/components/themed/ThemedChip.tsx","../src/components/themed/ThemedChatPanel.tsx","../src/components/themed/ThemedDetailPanel.tsx","../src/components/themed/ThemedDialog.tsx","../src/components/themed/ThemedFileTypeIcon.tsx","../src/components/themed/ThemedMenu.tsx","../node_modules/@mui/icons-material/ArrowBackOutlined.mjs","../src/components/themed/ThemedPageHeader.tsx","../src/components/themed/ThemedRightPanel.tsx","../src/components/themed/ThemedStepper.tsx","../src/components/themed/ThemedTable.tsx","../src/components/themed/ThemedTabs.tsx","../src/components/themed/ThemedTextField.tsx","../src/components/themed/ThemedToast.tsx","../src/providers/InflowProvider.tsx"],"sourcesContent":["\"use client\";\n\nimport createSvgIcon from \"./utils/createSvgIcon.mjs\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nexport default createSvgIcon(/*#__PURE__*/_jsx(\"path\", {\n  d: \"M16.59 8.59 12 13.17 7.41 8.59 6 10l6 6 6-6z\"\n}), 'ExpandMore');","export const INFLOW_DARK_MODE_ENABLED = false;\n\ntype PublishedInflowColorMode = 'light' | 'dark';\n\ndeclare const process:\n  | {\n      env?: {\n        NODE_ENV?: string;\n      };\n    }\n  | undefined;\n\nconst DARK_MODE_DISABLED_WARNING =\n  \"Inflow dark mode is currently disabled; falling back to light mode. Requested mode: 'dark'.\";\n\nconst shouldWarnAboutDisabledDarkMode =\n  typeof process !== 'undefined' && process.env?.NODE_ENV !== 'production';\n\nexport const resolveInflowColorMode = (\n  mode: PublishedInflowColorMode,\n): PublishedInflowColorMode => {\n  if (INFLOW_DARK_MODE_ENABLED || mode !== 'dark') {\n    return mode;\n  }\n\n  if (shouldWarnAboutDisabledDarkMode) {\n    console.warn(DARK_MODE_DISABLED_WARNING);\n  }\n\n  return 'light';\n};\n","// Canonical source: docs/mui/inflow-theme.js\nimport { createElement } from 'react';\nimport { createTheme } from '@mui/material/styles';\nimport ExpandMoreIcon from '@mui/icons-material/ExpandMore';\nimport type { Shadows } from '@mui/material/styles';\nimport type {} from '@mui/x-date-pickers/themeAugmentation';\nimport { resolveInflowColorMode } from './featureFlags';\nimport { darkTokens, lightTokens, type InflowThemeTokens } from './inflow-tokens';\n\nexport type InflowColorMode = 'light' | 'dark';\n\ninterface InflowPalette {\n  navy900: string;\n  navy800: string;\n  navy700: string;\n  navy100: string;\n  surfaceLow: string;\n  surfaceHighest: string;\n  surfaceVariant: string;\n  outline: string;\n  outlineVariant: string;\n  primaryTab: string;\n  appBackground: string;\n  navSurface: string;\n  rowHover: string;\n  rowSelected: string;\n  rowSelectedHover: string;\n  diffRemovedBg: string;\n  diffRemovedText: string;\n  diffAddedBg: string;\n  diffAddedText: string;\n  surfaceLowest: string;\n  surfaceContainer: string;\n  surfaceContainerHigh: string;\n  primaryFixed: string;\n  secondaryFixed: string;\n  tertiaryFixed: string;\n  inverseSurface: string;\n  inverseOnSurface: string;\n  certaintyHigh: string;\n  certaintyMedium: string;\n  highlightGreen: string;\n  highlightRed: string;\n  highlightYellow: string;\n  mandatoryRow: string;\n  toastInfoBg: string;\n}\n\ndeclare module '@mui/material/styles' {\n  interface Palette {\n    inflow: InflowPalette;\n  }\n\n  interface PaletteOptions {\n    inflow?: InflowPalette;\n  }\n}\n\nconst E1 = '0 1px 3px 1px rgba(0,0,0,0.15), 0 1px 2px 0 rgba(0,0,0,0.30)';\nconst E2 = '0 2px 6px 2px rgba(0,0,0,0.15), 0 1px 2px 0 rgba(0,0,0,0.30)';\nconst E3 = '0 4px 8px 3px rgba(0,0,0,0.15), 0 1px 3px 0 rgba(0,0,0,0.30)';\n\nconst shadows = [\n  'none',\n  ...Array.from({ length: 2 }, () => E1),\n  ...Array.from({ length: 6 }, () => E2),\n  ...Array.from({ length: 16 }, () => E3),\n] as Shadows;\n\nexport const getInflowTokensForMode = (mode: InflowColorMode): InflowThemeTokens =>\n  mode === 'dark' ? darkTokens : lightTokens;\n\nexport const getInflowPalette = (mode: InflowColorMode): InflowPalette => {\n  const T = getInflowTokensForMode(mode);\n\n  return {\n    navy900: T.navy900,\n    navy800: T.navy800,\n    navy700: T.navy700,\n    navy100: T.navy100,\n    surfaceLow: T.surfaceLow,\n    surfaceHighest: T.surfaceHighest,\n    surfaceVariant: T.surfaceVariant,\n    outline: T.outline,\n    outlineVariant: T.outlineVariant,\n    primaryTab: T.primaryTab,\n    appBackground: T.appBackground,\n    navSurface: T.navSurface,\n    rowHover: T.rowHover,\n    rowSelected: T.rowSelected,\n    rowSelectedHover: T.rowSelectedHover,\n    diffRemovedBg: T.diffRemovedBg,\n    diffRemovedText: T.diffRemovedText,\n    diffAddedBg: T.diffAddedBg,\n    diffAddedText: T.diffAddedText,\n    surfaceLowest: T.surfaceLowest,\n    surfaceContainer: T.surfaceContainer,\n    surfaceContainerHigh: T.surfaceContainerHigh,\n    primaryFixed: T.primaryFixed,\n    secondaryFixed: T.secondaryFixed,\n    tertiaryFixed: T.tertiaryFixed,\n    inverseSurface: T.inverseSurface,\n    inverseOnSurface: T.inverseOnSurface,\n    certaintyHigh: T.certaintyHigh,\n    certaintyMedium: T.certaintyMedium,\n    highlightGreen: T.highlightGreen,\n    highlightRed: T.highlightRed,\n    highlightYellow: T.highlightYellow,\n    mandatoryRow: T.mandatoryRow,\n    toastInfoBg: T.toastInfoBg,\n  };\n};\n\nexport const createInflowTheme = (requestedMode: InflowColorMode = 'light') => {\n  const mode = resolveInflowColorMode(requestedMode);\n  const T = getInflowTokensForMode(mode);\n\n  return createTheme({\n    shape: { borderRadius: T.radiusSm },\n    spacing: 8,\n    shadows,\n\n    palette: {\n      mode,\n      primary: {\n        main: mode === 'dark' ? T.navy700 : T.navy700,\n        dark: mode === 'dark' ? T.navyDark : T.navyDark,\n        light: mode === 'dark' ? T.navy600 : T.navy400,\n        contrastText: mode === 'dark' ? T.navy900 : '#ffffff',\n      },\n      secondary: {\n        main: mode === 'dark' ? T.surfaceHighest : T.navy800,\n        dark: mode === 'dark' ? T.surfaceContainerHigh : '#000000',\n        light: mode === 'dark' ? T.surfaceVariant : T.navy800,\n        contrastText: mode === 'dark' ? T.onSurface : '#ffffff',\n      },\n      error: { ...T.error, contrastText: '#ffffff' },\n      warning: { ...T.warning, contrastText: '#ffffff' },\n      info: { ...T.info, contrastText: '#ffffff' },\n      success: { ...T.success, contrastText: '#ffffff' },\n      text: {\n        primary: T.onSurface,\n        secondary: T.onSurfaceVariant,\n        disabled: mode === 'dark' ? 'rgba(255,255,255,0.5)' : 'rgba(0,0,0,0.38)',\n      },\n      divider: T.outlineVariant,\n      action: {\n        disabled: mode === 'dark' ? 'rgba(255,255,255,0.5)' : 'rgba(0,0,0,0.38)',\n        disabledBackground: mode === 'dark' ? 'rgba(255,255,255,0.12)' : 'rgba(0,0,0,0.12)',\n        hover: T.rowHover,\n        selected: T.rowSelected,\n      },\n      background: {\n        default: T.appBackground,\n        paper: T.surfaceLowest,\n      },\n      inflow: getInflowPalette(mode),\n    },\n\n    typography: {\n      fontFamily: '\"Inter\", system-ui, -apple-system, Segoe UI, Roboto, sans-serif',\n      fontWeightLight: 300,\n      fontWeightRegular: 400,\n      fontWeightMedium: 500,\n      fontWeightBold: 700,\n      h1: { fontWeight: 300, fontSize: '6rem', lineHeight: 1.167, letterSpacing: '-0.09375rem' },\n      h2: { fontWeight: 300, fontSize: '3.75rem', lineHeight: 1.2, letterSpacing: '-0.03125rem' },\n      h3: { fontWeight: 400, fontSize: '3rem', lineHeight: 1.167, letterSpacing: 0 },\n      h4: { fontWeight: 400, fontSize: '2.125rem', lineHeight: 1.235, letterSpacing: '0.015625rem' },\n      h5: { fontWeight: 400, fontSize: '1.5rem', lineHeight: 1.334, letterSpacing: 0 },\n      h6: { fontWeight: 700, fontSize: '1.375rem', lineHeight: '2.25rem', letterSpacing: '0.009375rem' },\n      subtitle1: { fontWeight: 400, fontSize: '1rem', lineHeight: 1.5, letterSpacing: '0.009375rem' },\n      subtitle2: { fontWeight: 500, fontSize: '0.875rem', lineHeight: '1.25rem', letterSpacing: '0.00625rem' },\n      body1: { fontWeight: 400, fontSize: '1rem', lineHeight: '1.5rem', letterSpacing: 0 },\n      body2: { fontWeight: 400, fontSize: '0.875rem', lineHeight: '1.25rem', letterSpacing: '0.015625rem' },\n      button: { fontWeight: 500, fontSize: '0.875rem', lineHeight: '1.25rem', letterSpacing: '0.00625rem', textTransform: 'capitalize' },\n      caption: { fontWeight: 400, fontSize: '0.75rem', lineHeight: '1rem', letterSpacing: '0.025rem' },\n      overline: { fontWeight: 400, fontSize: '0.75rem', lineHeight: 1, letterSpacing: '0.0625rem', textTransform: 'uppercase' },\n    },\n\n    components: {\n      MuiButton: {\n        defaultProps: { disableElevation: true, variant: 'contained' },\n        styleOverrides: {\n          root: {\n            borderRadius: T.radiusSm,\n            fontWeight: 500,\n            letterSpacing: '0.00625rem',\n            variants: [\n              {\n                props: { variant: 'contained', color: 'primary' },\n                style: {\n                  backgroundColor: T.navy700,\n                  color: mode === 'dark' ? T.navy900 : '#ffffff',\n                  '&:hover': { backgroundColor: T.navyDark },\n                },\n              },\n              {\n                props: { variant: 'outlined', color: 'primary' },\n                style: {\n                  color: T.navy700,\n                  borderColor: T.outlineVariant,\n                  backgroundColor: T.surfaceLowest,\n                  '&:hover': { borderColor: T.outlineVariant, backgroundColor: T.rowSelected },\n                },\n              },\n              {\n                props: { variant: 'text', color: 'primary' },\n                style: {\n                  color: T.navy700,\n                  '&:hover': { backgroundColor: T.rowSelected },\n                },\n              },\n            ],\n          },\n          sizeSmall: ({ theme }) => ({ height: 30, padding: theme.spacing(0, 2), fontSize: '0.8125rem' }),\n          sizeMedium: ({ theme }) => ({ height: 40, padding: theme.spacing(0, 3), fontSize: '0.875rem' }),\n          sizeLarge: ({ theme }) => ({ height: 48, padding: theme.spacing(0, 4), fontSize: '1rem' }),\n          outlined: { borderColor: T.outlineVariant },\n        },\n      },\n      MuiIconButton: {\n        styleOverrides: { root: { color: T.onSurfaceVariant, borderRadius: T.radiusFull } },\n      },\n      MuiButtonGroup: {\n        defaultProps: { disableElevation: true },\n        styleOverrides: { root: { borderRadius: T.radiusSm } },\n      },\n      MuiToggleButton: {\n        styleOverrides: {\n          root: {\n            textTransform: 'capitalize',\n            fontWeight: 500,\n            letterSpacing: '0.00625rem',\n            borderColor: T.outline,\n            '&.Mui-selected': {\n              backgroundColor: T.primaryTab,\n              color: T.navy700,\n              fontWeight: 700,\n              boxShadow: `inset 0 0 0 1px ${T.navy700}`,\n              '&:hover': { backgroundColor: T.primaryTab },\n            },\n          },\n        },\n      },\n      MuiFab: {\n        styleOverrides: {\n          root: {\n            backgroundColor: T.navy700,\n            color: mode === 'dark' ? T.navy900 : '#fff',\n            '&:hover': { backgroundColor: T.navyDark },\n          },\n        },\n      },\n\n      MuiTextField: { defaultProps: { variant: 'outlined', size: 'small' } },\n      MuiSelect: { defaultProps: { size: 'small', IconComponent: ExpandMoreIcon } },\n      MuiFormControl: { defaultProps: { size: 'small' } },\n      MuiInputBase: {\n        styleOverrides: {\n          root: {\n            '&.MuiInputBase-sizeSmall': { fontSize: '0.875rem', lineHeight: '1.429' },\n          },\n        },\n      },\n      MuiOutlinedInput: {\n        styleOverrides: {\n          root: {\n            borderRadius: T.radiusXs,\n            '& .MuiOutlinedInput-notchedOutline': { borderColor: T.outlineVariant },\n            '&:hover .MuiOutlinedInput-notchedOutline': { borderColor: T.outline },\n            '&.Mui-focused .MuiOutlinedInput-notchedOutline': { borderColor: T.navy700, borderWidth: 2 },\n          },\n        },\n      },\n      MuiFilledInput: {\n        styleOverrides: {\n          root: {\n            backgroundColor: T.surfaceHighest,\n            borderRadius: `${T.radiusXs}px ${T.radiusXs}px 0 0`,\n            '&:hover': { backgroundColor: T.surfaceContainerHigh },\n            '&.Mui-focused': { backgroundColor: T.surfaceHighest },\n            '&:after': { borderBottomColor: T.navy700 },\n          },\n        },\n      },\n      MuiInputLabel: {\n        styleOverrides: {\n          root: {\n            '&.Mui-focused': { color: T.navy700 },\n            '&.MuiInputLabel-sizeSmall': { fontSize: '0.875rem' },\n          },\n        },\n      },\n\n      MuiCheckbox: {\n        styleOverrides: {\n          root: ({ ownerState, theme }) => {\n            if (ownerState.disabled) return {};\n            const colorKey = ownerState.color;\n            const checkedColor =\n              colorKey === 'primary'\n                ? theme.palette.primary.main\n                : colorKey === 'secondary'\n                  ? theme.palette.secondary.main\n                  : colorKey === 'error'\n                    ? theme.palette.error.main\n                    : colorKey === 'info'\n                      ? theme.palette.info.main\n                      : colorKey === 'success'\n                        ? theme.palette.success.main\n                        : colorKey === 'warning'\n                          ? theme.palette.warning.main\n                          : T.navy700;\n            return { color: T.outline, '&.Mui-checked': { color: checkedColor } };\n          },\n        },\n      },\n      MuiRadio: {\n        styleOverrides: {\n          root: ({ ownerState, theme }) => {\n            if (ownerState.disabled) return {};\n            const colorKey = ownerState.color;\n            const checkedColor =\n              colorKey === 'primary'\n                ? theme.palette.primary.main\n                : colorKey === 'secondary'\n                  ? theme.palette.secondary.main\n                  : colorKey === 'error'\n                    ? theme.palette.error.main\n                    : colorKey === 'info'\n                      ? theme.palette.info.main\n                      : colorKey === 'success'\n                        ? theme.palette.success.main\n                        : colorKey === 'warning'\n                          ? theme.palette.warning.main\n                          : T.navy700;\n            return { color: T.outline, '&.Mui-checked': { color: checkedColor } };\n          },\n        },\n      },\n      MuiSwitch: {\n        styleOverrides: {\n          switchBase: ({ ownerState, theme }) => {\n            if (ownerState.disabled) return {};\n            const colorKey = ownerState.color;\n            const trackColor =\n              colorKey === 'primary'\n                ? theme.palette.primary.main\n                : colorKey === 'secondary'\n                  ? theme.palette.secondary.main\n                  : colorKey === 'error'\n                    ? theme.palette.error.main\n                    : colorKey === 'info'\n                      ? theme.palette.info.main\n                      : colorKey === 'success'\n                        ? theme.palette.success.main\n                        : colorKey === 'warning'\n                          ? theme.palette.warning.main\n                          : T.navy700;\n            return {\n              '&.Mui-checked': {\n                color: '#fff',\n                '& + .MuiSwitch-track': { backgroundColor: trackColor, opacity: 1 },\n              },\n            };\n          },\n        },\n      },\n      MuiSlider: {\n        styleOverrides: {\n          colorPrimary: { color: T.navy700 },\n          rail: { backgroundColor: T.surfaceVariant, opacity: 1 },\n          track: { backgroundColor: 'currentColor', border: 'none' },\n          thumb: { backgroundColor: 'currentColor' },\n        },\n      },\n      MuiRating: {\n        styleOverrides: {\n          iconFilled: { color: T.ratingActive },\n          iconHover: { color: T.ratingActive },\n        },\n      },\n\n      MuiAppBar: {\n        defaultProps: {\n          color: 'primary',\n        },\n        styleOverrides: {\n          root: {\n            backgroundColor: T.navSurface,\n            color: '#ffffff',\n            boxShadow: E1,\n          },\n          colorPrimary: {\n            backgroundColor: T.navSurface,\n            color: '#ffffff',\n          },\n        },\n      },\n      MuiPaper: {\n        styleOverrides: {\n          rounded: { borderRadius: T.radiusSm },\n          root: {\n            backgroundImage: 'none',\n          },\n        },\n        defaultProps: { elevation: 1 },\n      },\n      MuiCard: { styleOverrides: { root: { borderRadius: T.radiusSm } }, defaultProps: { elevation: 1 } },\n      MuiDialog: { defaultProps: { maxWidth: 'xs' }, styleOverrides: { paper: { borderRadius: T.radiusXl, width: 'min(444px, calc(100vw - 32px))' } } },\n      MuiDialogTitle: {\n        styleOverrides: {\n          root: ({ theme }) => ({\n            backgroundColor: T.surfaceHighest,\n            padding: theme.spacing(3),\n            fontSize: '1.5rem',\n            fontWeight: 400,\n            lineHeight: 1.334,\n            letterSpacing: 0,\n          }),\n        },\n      },\n      MuiDialogContent: {\n        styleOverrides: {\n          root: ({ theme }) => ({\n            padding: theme.spacing(3),\n            paddingTop: `${theme.spacing(3)} !important`,\n          }),\n        },\n      },\n      MuiDialogActions: {\n        styleOverrides: {\n          root: ({ theme }) => ({\n            padding: theme.spacing(1, 3, 3),\n          }),\n        },\n      },\n      MuiMenu: { styleOverrides: { paper: { borderRadius: 0, boxShadow: 'none' } } },\n      MuiPickerDay: {\n        styleOverrides: {\n          root: ({ theme }) => ({\n            '&.Mui-selected': {\n              backgroundColor: theme.palette.primary.main,\n              color: theme.palette.primary.contrastText,\n              '&:hover, &:focus': {\n                backgroundColor: theme.palette.primary.dark,\n              },\n            },\n          }),\n        },\n      },\n      MuiAutocomplete: {\n        defaultProps: {\n          popupIcon: createElement(ExpandMoreIcon),\n        },\n        styleOverrides: {\n          paper: { borderRadius: T.radiusXs },\n          option: {\n            '&:hover': { backgroundColor: T.rowHover },\n            '&.Mui-focused': { backgroundColor: T.rowHover },\n            '&[aria-selected=\"true\"]': {\n              backgroundColor: T.rowSelected,\n              '&:hover, &.Mui-focused': { backgroundColor: T.rowSelectedHover },\n            },\n          },\n          groupLabel: { color: T.onSurfaceVariant, fontWeight: 600 },\n        },\n      },\n      MuiListSubheader: {\n        styleOverrides: {\n          root: {\n            fontWeight: 600,\n            // Only recolor the default subheader so color=\"primary\" / \"inherit\" keep working.\n            variants: [{ props: { color: 'default' }, style: { color: T.onSurfaceVariant } }],\n          },\n        },\n      },\n      MuiMenuItem: {\n        styleOverrides: {\n          root: {\n            '&:hover': { backgroundColor: T.rowHover },\n            '&.Mui-selected': {\n              backgroundColor: T.rowSelected,\n              '&:hover': { backgroundColor: T.rowSelectedHover },\n            },\n          },\n        },\n      },\n      MuiTooltip: {\n        styleOverrides: {\n          tooltip: {\n            backgroundColor: mode === 'dark' ? T.surfaceHighest : '#616161',\n            color: mode === 'dark' ? T.onSurface : '#ffffff',\n            fontSize: '0.75rem',\n            borderRadius: T.radiusXs,\n            border: `1px solid ${mode === 'dark' ? T.outlineVariant : 'transparent'}`,\n          },\n        },\n      },\n      MuiBadge: {\n        styleOverrides: {\n          badge: ({ ownerState, theme }) => {\n            const colorKey = ownerState.color;\n            const backgroundColor =\n              colorKey === 'primary'\n                ? theme.palette.primary.main\n                : colorKey === 'secondary'\n                  ? theme.palette.secondary.main\n                  : colorKey === 'error'\n                    ? theme.palette.error.main\n                    : colorKey === 'info'\n                      ? theme.palette.info.main\n                      : colorKey === 'success'\n                        ? theme.palette.success.main\n                        : colorKey === 'warning'\n                          ? theme.palette.warning.main\n                          : theme.palette.grey[400];\n\n            return {\n              backgroundColor,\n              color: colorKey === 'secondary' && mode === 'dark' ? T.onSurface : T.white,\n              ...(ownerState.variant === 'dot'\n                ? {\n                    minWidth: 8,\n                    height: 8,\n                    borderRadius: 4,\n                    padding: 0,\n                  }\n                : {\n                    fontWeight: 500,\n                    fontSize: '0.6875rem',\n                    lineHeight: '1rem',\n                    minWidth: 16,\n                    height: 16,\n                    padding: theme.spacing(0, 0.5),\n                    borderRadius: 8,\n                  }),\n            };\n          },\n        },\n      },\n      MuiDrawer: { styleOverrides: { paper: { borderRight: `1px solid ${T.outlineVariant}` } } },\n\n      MuiChip: {\n        defaultProps: {\n          size: 'medium',\n          deleteIcon: createElement(\n            'span',\n            { className: 'material-icons-outlined', 'aria-hidden': true },\n            'close',\n          ),\n        },\n        styleOverrides: {\n          root: {\n            borderRadius: T.radiusFull,\n            fontWeight: 500,\n            letterSpacing: '0.00625rem',\n            maxWidth: '100%',\n            '&.MuiChip-sizeSmall': {\n              height: 24,\n              fontSize: '0.75rem',\n            },\n            '&.MuiChip-sizeMedium': {\n              height: 32,\n              fontSize: '0.875rem',\n            },\n            '&.MuiChip-sizeSmall > .MuiChip-label': {\n              paddingLeft: '0.5rem',\n              paddingRight: '0.5rem',\n            },\n            '&.MuiChip-sizeMedium > .MuiChip-label': {\n              paddingLeft: '0.75rem',\n              paddingRight: '0.75rem',\n            },\n            '&.MuiChip-sizeSmall > .MuiChip-icon, &.MuiChip-sizeSmall > .MuiChip-deleteIcon': {\n              fontSize: '0.875rem',\n            },\n            '&.MuiChip-sizeMedium > .MuiChip-icon, &.MuiChip-sizeMedium > .MuiChip-deleteIcon': {\n              fontSize: '1.125rem',\n            },\n            variants: [\n              {\n                props: { variant: 'outlined', color: 'primary' },\n                style: {\n                  borderColor: T.outlineVariant,\n                  color: T.navy700,\n                  backgroundColor: T.surfaceLowest,\n                  '&:hover': { borderColor: T.navy400, backgroundColor: T.rowHover },\n                },\n              },\n              {\n                props: { variant: 'filled', color: 'primary' },\n                style: {\n                  backgroundColor: T.primaryTab,\n                  color: mode === 'dark' ? T.navy700 : T.navy700,\n                },\n              },\n            ],\n          },\n          outlined: { borderColor: T.outlineVariant, color: T.onSurfaceVariant, backgroundColor: T.surfaceLowest },\n        },\n      },\n      MuiAvatar: {\n        styleOverrides: {\n          root: ({ theme }) => ({\n            backgroundColor: theme.palette.grey[400],\n            color: T.white,\n            fontSize: '1.25rem',\n            fontWeight: 400,\n            letterSpacing: '0.00875rem',\n          }),\n        },\n      },\n      MuiTableCell: {\n        styleOverrides: {\n          root: { borderColor: T.outlineVariant, fontSize: '0.875rem', letterSpacing: '0.015625rem' },\n          head: { fontWeight: 600, color: T.onSurface },\n        },\n      },\n      MuiTableRow: {\n        styleOverrides: {\n          root: {\n            '&.MuiTableRow-hover:hover': { backgroundColor: T.rowHover },\n            '&.Mui-selected': {\n              backgroundColor: T.rowSelected,\n              '&:hover': { backgroundColor: T.rowSelectedHover },\n            },\n          },\n        },\n      },\n\n      MuiTabs: { styleOverrides: { indicator: { backgroundColor: T.navy700, height: 2 } } },\n      MuiTab: {\n        styleOverrides: {\n          root: {\n            textTransform: 'none',\n            fontWeight: 500,\n            letterSpacing: '0.00625rem',\n            color: T.onSurfaceVariant,\n            '&.Mui-selected': { color: T.navy700 },\n          },\n        },\n      },\n      MuiPaginationItem: {\n        styleOverrides: {\n          root: {\n            '&&.Mui-selected, &&.Mui-selected:hover, &&.Mui-selected.Mui-focusVisible': {\n              backgroundColor: `${T.navy700} !important`,\n              border: `1px solid ${T.navy700}`,\n              color: `${mode === 'dark' ? T.navy900 : T.white} !important`,\n              fontWeight: 600,\n            },\n          },\n        },\n      },\n      MuiBreadcrumbs: { styleOverrides: { separator: { color: T.onSurfaceVariant } } },\n      MuiLink: { defaultProps: { color: 'primary' }, styleOverrides: { root: { textDecorationColor: 'inherit' } } },\n      MuiStepIcon: {\n        styleOverrides: {\n          root: { '&.Mui-active': { color: T.navy700 }, '&.Mui-completed': { color: T.navy700 } },\n        },\n      },\n      MuiBottomNavigationAction: {\n        styleOverrides: {\n          root: {\n            color: T.onSurfaceVariant,\n            '& .MuiBottomNavigationAction-label, & .MuiSvgIcon-root': { color: T.onSurfaceVariant },\n            '&&.Mui-selected, &&.Mui-selected .MuiBottomNavigationAction-label, &&.Mui-selected .MuiSvgIcon-root': {\n              color: `${T.navy700} !important`,\n            },\n          },\n        },\n      },\n\n      MuiAlert: {\n        defaultProps: {\n          iconMapping: {\n            error: createElement('span', { className: 'material-icons-outlined' }, 'error_outline'),\n            warning: createElement('span', { className: 'material-icons-outlined' }, 'warning_amber'),\n            info: createElement('span', { className: 'material-icons-outlined' }, 'info_outline'),\n            success: createElement('span', { className: 'material-icons-outlined' }, 'check_circle_outline'),\n          },\n        },\n        styleOverrides: {\n          root: {\n            variants: [\n              {\n                props: { variant: 'standard', color: 'error' },\n                style: {\n                  backgroundColor: mode === 'dark' ? T.diffRemovedBg : '#fdeded',\n                  color: mode === 'dark' ? T.diffRemovedText : '#5f2120',\n                },\n              },\n              {\n                props: { variant: 'standard', color: 'warning' },\n                style: {\n                  backgroundColor: mode === 'dark' ? T.highlightYellow : '#fff4e5',\n                  color: mode === 'dark' ? T.onSurface : '#663c00',\n                },\n              },\n              {\n                props: { variant: 'standard', color: 'info' },\n                style: {\n                  backgroundColor: mode === 'dark' ? T.rowSelected : '#e5f6fd',\n                  color: mode === 'dark' ? T.onSurface : '#014361',\n                },\n              },\n              {\n                props: { variant: 'standard', color: 'success' },\n                style: {\n                  backgroundColor: mode === 'dark' ? T.diffAddedBg : '#edf7ed',\n                  color: mode === 'dark' ? T.diffAddedText : '#1e4620',\n                },\n              },\n            ],\n          },\n        },\n      },\n      MuiSnackbarContent: {\n        styleOverrides: {\n          root: ({ theme }) => ({\n            backgroundColor: mode === 'dark' ? T.surfaceHighest : T.mandatoryRow,\n            color: T.onSurface,\n            borderRadius: T.radiusMd,\n            boxShadow: 'none',\n            minHeight: 48,\n            padding: theme.spacing(1.5, 2),\n            fontSize: '0.875rem',\n            fontWeight: 400,\n            lineHeight: '1.25rem',\n            letterSpacing: '0.015625rem',\n            '& .MuiSnackbarContent-message': {\n              padding: 0,\n            },\n            '& .MuiSnackbarContent-action': {\n              marginRight: 0,\n              paddingLeft: theme.spacing(2),\n            },\n            '& .MuiButton-root': {\n              color: T.navy700,\n              minWidth: 'auto',\n              padding: 0,\n            },\n            '& .MuiIconButton-root': {\n              color: T.onSurface,\n            },\n          }),\n        },\n      },\n      MuiLinearProgress: { styleOverrides: { root: { borderRadius: T.radiusFull } } },\n      MuiAccordion: { styleOverrides: { root: { borderRadius: 0, '&:before': { display: 'none' } } } },\n    },\n  });\n};\n\nexport const inflowTheme = createInflowTheme('light');\n","import { createTheme } from '@mui/material/styles';\nimport { getInflowPalette, type InflowColorMode } from './inflow';\nimport { resolveInflowColorMode } from './featureFlags';\n\n/**\n * Default MUI v6 theme - vanilla Material Design\n * Used for side-by-side comparison with the Inflow theme\n */\nexport const createDefaultTheme = (requestedMode: InflowColorMode = 'light') => {\n  const mode = resolveInflowColorMode(requestedMode);\n\n  return createTheme({\n    palette: {\n      mode,\n      inflow: getInflowPalette(mode),\n    },\n  });\n};\n\nexport const defaultTheme = createDefaultTheme('light');\n","// File-type icon colors. Each family has a [light, dark] brand pair; the extension text\n// on the icon names the exact format, so color only reinforces it.\nexport type InflowFileTypeFamily =\n  | 'pdf'\n  | 'docx'\n  | 'xlsx'\n  | 'csv'\n  | 'pptx'\n  | 'audio'\n  | 'video'\n  | 'image'\n  | 'archive';\n\nexport const inflowFileTypeColors: Record<InflowFileTypeFamily, { light: string; dark: string }> = {\n  pdf: { light: '#c62828', dark: '#ff8a80' },\n  docx: { light: '#1f63ad', dark: '#8ab8ff' },\n  xlsx: { light: '#1e7a4c', dark: '#5fd08a' },\n  csv: { light: '#6b4fa0', dark: '#b9a2f0' },\n  pptx: { light: '#c43e1c', dark: '#ff9a76' },\n  audio: { light: '#ad1f6b', dark: '#ff8fc8' },\n  video: { light: '#0b7285', dark: '#6fd6e8' },\n  image: { light: '#9a6700', dark: '#ffc857' },\n  archive: { light: '#566270', dark: '#b3bfcc' },\n};\n\n/** Upper-case extensions that map to each family. Extensions not listed stay neutral. */\nexport const inflowFileTypeExtensions: Record<InflowFileTypeFamily, readonly string[]> = {\n  pdf: ['PDF'],\n  docx: ['DOCX'],\n  xlsx: ['XLSX'],\n  csv: ['CSV'],\n  pptx: ['PPTX'],\n  audio: ['MP3', 'WAV', 'FLAC', 'AAC', 'M4A', 'OGG'],\n  video: ['MP4', 'MOV', 'AVI', 'MKV', 'WEBM'],\n  image: ['PNG', 'JPG', 'JPEG', 'GIF', 'SVG', 'WEBP', 'TIFF'],\n  archive: ['ZIP', 'RAR', '7Z', 'TAR', 'GZ'],\n};\n\n/** Strips any path and leading dot, upper-cases, and keeps letters and digits only. */\nexport function normalizeFileExtension(raw: string): string {\n  const last = raw.trim().split(/[\\\\/]/).pop() ?? '';\n  return (last.split('.').pop() ?? '').toUpperCase().replace(/[^A-Z0-9]/g, '');\n}\n","import { forwardRef, useId } from 'react';\nimport type { ReactNode, SyntheticEvent } from 'react';\nimport {\n  Accordion,\n  AccordionDetails,\n  AccordionSummary,\n  Icon,\n} from '@mui/material';\n\nexport interface ThemedAccordionItem {\n  id: string;\n  summary: ReactNode;\n  details: ReactNode;\n  disabled?: boolean;\n}\n\nexport interface ThemedAccordionProps {\n  items: ThemedAccordionItem[];\n  /** Controlled expanded panel id(s). Pass an array to allow multiple panels. */\n  expanded?: string | string[];\n  /** If true, multiple panels can be open simultaneously. */\n  multiple?: boolean;\n  onChange?: (id: string, isExpanded: boolean) => void;\n}\n\nexport const ThemedAccordion = forwardRef<HTMLDivElement, ThemedAccordionProps>(\n  ({ items, expanded, multiple = false, onChange }, ref) => {\n    const accordionId = useId();\n    const isMultiple = multiple || Array.isArray(expanded);\n\n    const isExpanded = (id: string) => {\n      if (expanded === undefined) return false;\n      if (isMultiple && Array.isArray(expanded)) return expanded.includes(id);\n      return expanded === id;\n    };\n\n    const handleChange = (id: string) => (_event: SyntheticEvent, isOpen: boolean) => {\n      onChange?.(id, isOpen);\n    };\n\n    return (\n      <div ref={ref}>\n        {items.map((item) => {\n          const summaryId = `${accordionId}-${item.id}-summary`;\n          const detailsId = `${accordionId}-${item.id}-details`;\n\n          return (\n            <Accordion\n            key={item.id}\n            disabled={item.disabled}\n            expanded={expanded !== undefined ? isExpanded(item.id) : undefined}\n            onChange={handleChange(item.id)}\n            disableGutters\n            elevation={0}\n            sx={(theme) => ({\n              border: '1px solid',\n              borderColor: theme.palette.divider,\n              borderBottom: 'none',\n              '&:first-of-type': {\n                borderTopLeftRadius: theme.shape.borderRadius,\n                borderTopRightRadius: theme.shape.borderRadius,\n              },\n              '&:last-of-type': {\n                borderBottom: '1px solid',\n                borderColor: theme.palette.divider,\n                borderBottomLeftRadius: theme.shape.borderRadius,\n                borderBottomRightRadius: theme.shape.borderRadius,\n              },\n            })}\n          >\n            <AccordionSummary\n              id={summaryId}\n              aria-controls={detailsId}\n              expandIcon={\n                <Icon baseClassName=\"material-icons-outlined\" sx={{ fontSize: 20, color: 'text.secondary' }}>\n                  expand_more\n                </Icon>\n              }\n              sx={(theme) => ({\n                minHeight: 48,\n                px: 2,\n                fontSize: '0.875rem',\n                fontWeight: theme.typography.fontWeightMedium,\n                lineHeight: '20px',\n                letterSpacing: '0.1px',\n                '&:hover': { backgroundColor: theme.palette.action.hover },\n                '&.Mui-expanded': { minHeight: 48 },\n                '& .MuiAccordionSummary-content': { my: '14px', margin: '14px 0' },\n                '& .MuiAccordionSummary-content.Mui-expanded': { my: '14px', margin: '14px 0' },\n              })}\n            >\n              {item.summary}\n            </AccordionSummary>\n            <AccordionDetails\n              id={detailsId}\n              aria-labelledby={summaryId}\n              sx={(theme) => ({\n                px: 2,\n                pb: 2,\n                pt: 2,\n                fontSize: '0.875rem',\n                lineHeight: '20px',\n                letterSpacing: '0.25px',\n                color: theme.palette.text.secondary,\n              })}\n            >\n              {item.details}\n            </AccordionDetails>\n          </Accordion>\n          );\n        })}\n      </div>\n    );\n  },\n);\n\nThemedAccordion.displayName = 'ThemedAccordion';\n","import { forwardRef } from 'react';\nimport { Alert, AlertTitle } from '@mui/material';\nimport type { ReactNode } from 'react';\n\nexport type AlertSeverity = 'error' | 'warning' | 'info' | 'success';\n\nexport interface ThemedAlertProps {\n  severity?: AlertSeverity;\n  title?: ReactNode;\n  children: ReactNode;\n  onClose?: () => void;\n}\n\nconst iconMap: Record<AlertSeverity, string> = {\n  error: 'error_outline',\n  warning: 'warning_amber',\n  info: 'info_outline',\n  success: 'check_circle_outline',\n};\n\nexport const ThemedAlert = forwardRef<HTMLDivElement, ThemedAlertProps>(\n  ({ severity = 'info', title, children, onClose }, ref) => (\n    <Alert\n      ref={ref}\n      severity={severity}\n      onClose={onClose}\n      iconMapping={{\n        error: <span className=\"material-icons-outlined\" style={{ fontSize: 20 }}>{iconMap.error}</span>,\n        warning: <span className=\"material-icons-outlined\" style={{ fontSize: 20 }}>{iconMap.warning}</span>,\n        info: <span className=\"material-icons-outlined\" style={{ fontSize: 20 }}>{iconMap.info}</span>,\n        success: <span className=\"material-icons-outlined\" style={{ fontSize: 20 }}>{iconMap.success}</span>,\n      }}\n      sx={(theme) => ({\n        borderRadius: `${theme.shape.borderRadius}px`,\n        alignItems: 'center',\n        '& .MuiAlert-icon': {\n          marginTop: 0,\n          marginRight: theme.spacing(1.5),\n        },\n        '& .MuiAlert-message': {\n          minWidth: 0,\n          overflow: 'hidden',\n          whiteSpace: 'nowrap',\n          textOverflow: 'ellipsis',\n        },\n      })}\n    >\n      {title && (\n        <AlertTitle component=\"span\" sx={{ display: 'inline', fontWeight: 600, lineHeight: '20px', margin: 0, marginRight: 0.5 }}>\n          {title}\n        </AlertTitle>\n      )}\n      {children}\n    </Alert>\n  ),\n);\n\nThemedAlert.displayName = 'ThemedAlert';\n","import { forwardRef } from 'react';\nimport type { CSSProperties } from 'react';\nimport { Box, Icon } from '@mui/material';\nimport { alpha } from '@mui/material/styles';\nimport type { Theme } from '@mui/material/styles';\nimport { inflowTokens } from '../../theme';\n\nexport interface ThemedAppNavItem {\n  label: string;\n  icon: string;\n  active?: boolean;\n  href?: string;\n  onClick?: () => void;\n}\n\nexport interface ThemedAppNavProps {\n  items?: ThemedAppNavItem[];\n  /** Bottom-pinned items (settings, help, etc.). */\n  footer?: ThemedAppNavItem[];\n  style?: CSSProperties;\n}\n\nexport interface ThemedAppNavPlaceholderProps {\n  /** Number of placeholder dots to render. */\n  count?: number;\n  style?: CSSProperties;\n}\n\ninterface NavItemProps {\n  item: ThemedAppNavItem;\n}\n\nfunction NavItem({ item }: NavItemProps) {\n  const itemSx = (theme: Theme) => ({\n    display: 'flex',\n    flexDirection: 'column',\n    alignItems: 'center',\n    gap: theme.spacing(0.5),\n    width: '100%',\n    padding: theme.spacing(0.5, 1),\n    border: 0,\n    backgroundColor: 'transparent',\n    color: alpha(theme.palette.common.white, 0.85),\n    cursor: 'pointer',\n    fontFamily: String(theme.typography.fontFamily),\n    textDecoration: 'none',\n    '&:hover .ThemedAppNav-indicator': {\n      backgroundColor: alpha(theme.palette.common.white, 0.08),\n    },\n  });\n\n  const indicatorSx = (theme: Theme) => ({\n    display: 'flex',\n    alignItems: 'center',\n    justifyContent: 'center',\n    width: 56,\n    height: 32,\n    borderRadius: inflowTokens.radius.full,\n    backgroundColor: item.active ? theme.palette.common.white : 'transparent',\n    transition: 'background 0.15s ease',\n  });\n\n  const iconSx = (theme: Theme) => ({\n    fontSize: 24,\n    color: item.active ? theme.palette.primary.main : alpha(theme.palette.common.white, 0.85),\n  });\n\n  const labelSx = (theme: Theme) => ({\n    maxWidth: 56,\n    color: item.active ? theme.palette.common.white : alpha(theme.palette.common.white, 0.85),\n    fontFamily: String(theme.typography.fontFamily),\n    fontSize: 11,\n    fontWeight: Number(theme.typography.fontWeightMedium),\n    lineHeight: 1.2,\n    textAlign: 'center',\n    whiteSpace: 'normal',\n    wordBreak: 'break-word',\n  });\n\n  const content = (\n    <>\n      <Box className=\"ThemedAppNav-indicator\" sx={indicatorSx}>\n        <Icon aria-hidden baseClassName=\"material-icons-outlined\" sx={iconSx}>\n          {item.icon}\n        </Icon>\n      </Box>\n      <Box component=\"span\" sx={labelSx}>\n        {item.label}\n      </Box>\n    </>\n  );\n\n  return item.href ? (\n    <Box\n      component=\"a\"\n      href={item.href}\n      onClick={item.onClick}\n      aria-current={item.active ? 'page' : undefined}\n      sx={itemSx}\n    >\n      {content}\n    </Box>\n  ) : (\n    <Box\n      component=\"button\"\n      type=\"button\"\n      onClick={item.onClick}\n      aria-current={item.active ? 'page' : undefined}\n      sx={itemSx}\n    >\n      {content}\n    </Box>\n  );\n}\n\n/** A fixed-width Inflow application-navigation rail with optional pinned footer actions. */\nexport const ThemedAppNav = forwardRef<HTMLElement, ThemedAppNavProps>(\n  ({ items = [], footer = [], style }, ref) => (\n    <Box\n      component=\"nav\"\n      ref={ref}\n      aria-label=\"Primary\"\n      style={style}\n      sx={(theme) => ({\n        display: 'flex',\n        flexDirection: 'column',\n        alignItems: 'center',\n        width: 72,\n        minHeight: '100%',\n        padding: theme.spacing(1.5, 0),\n        backgroundColor: theme.palette.inflow.navSurface,\n        boxSizing: 'border-box',\n        flexShrink: 0,\n        fontFamily: String(theme.typography.fontFamily),\n      })}\n    >\n      <Box sx={{ display: 'flex', flex: 1, flexDirection: 'column', alignItems: 'center', width: '100%', gap: 0.5 }}>\n        {items.map((item, index) => (\n          <NavItem key={`${item.label}-${index}`} item={item} />\n        ))}\n      </Box>\n      {footer.length > 0 && (\n        <Box sx={{ display: 'flex', flexDirection: 'column', alignItems: 'center', width: '100%', paddingBottom: 0.5 }}>\n          {footer.map((item, index) => (\n            <NavItem key={`${item.label}-${index}`} item={item} />\n          ))}\n        </Box>\n      )}\n    </Box>\n  ),\n);\n\nThemedAppNav.displayName = 'ThemedAppNav';\n\n/** Skeleton rail for layout wireframes before navigation items are defined. */\nexport const ThemedAppNavPlaceholder = forwardRef<HTMLElement, ThemedAppNavPlaceholderProps>(\n  ({ count = 4, style }, ref) => (\n    <Box\n      component=\"nav\"\n      ref={ref}\n      aria-label=\"Primary\"\n      style={style}\n      sx={(theme) => ({\n        display: 'flex',\n        flexDirection: 'column',\n        alignItems: 'center',\n        gap: theme.spacing(1.25),\n        width: 72,\n        minHeight: '100%',\n        padding: theme.spacing(2, 0),\n        backgroundColor: theme.palette.inflow.navSurface,\n        boxSizing: 'border-box',\n        flexShrink: 0,\n      })}\n    >\n      {Array.from({ length: count }).map((_, index) => (\n        <Box\n          key={index}\n          component=\"span\"\n          aria-hidden\n          sx={(theme) => ({\n            width: 28,\n            height: 28,\n            flexShrink: 0,\n            borderRadius: inflowTokens.radius.full,\n            backgroundColor: alpha(theme.palette.common.white, index === 0 ? 0.85 : 0.25),\n          })}\n        />\n      ))}\n    </Box>\n  ),\n);\n\nThemedAppNavPlaceholder.displayName = 'ThemedAppNavPlaceholder';\n","import { Children, forwardRef } from 'react';\nimport type { CSSProperties, ReactNode } from 'react';\nimport { useTheme } from '@mui/material/styles';\n\nexport type ThemedAvatarSize = 40 | 32 | 24 | 18;\nexport type ThemedAvatarShape = 'circular' | 'rounded' | 'square';\n\nexport interface ThemedAvatarProps {\n  /** Initials or any text content. */\n  children?: ReactNode;\n  /** Image src — takes precedence over children/icon. */\n  src?: string;\n  alt?: string;\n  size?: ThemedAvatarSize;\n  shape?: ThemedAvatarShape;\n  /** Show green status badge. */\n  badge?: boolean;\n}\n\nexport interface ThemedAvatarGroupProps {\n  children: ReactNode;\n  max?: number;\n  size?: ThemedAvatarSize;\n}\n\nconst sizeStyles: Record<ThemedAvatarSize, CSSProperties> = {\n  40: { width: 40, height: 40, fontSize: 20, lineHeight: '20px' },\n  32: { width: 32, height: 32, fontSize: 16, lineHeight: '16px' },\n  24: { width: 24, height: 24, fontSize: 12, lineHeight: '12px' },\n  18: { width: 18, height: 18, fontSize: 9, lineHeight: '9px' },\n};\n\nconst badgeSizes: Record<ThemedAvatarSize, { size: number; offset: number }> = {\n  40: { size: 10, offset: 0 },\n  32: { size: 8, offset: 0 },\n  24: { size: 6, offset: 0 },\n  18: { size: 5, offset: -1 },\n};\n\nconst shapeRadius: Record<ThemedAvatarShape, string | number> = {\n  circular: '100px',\n  rounded: '5px',\n  square: 0,\n};\n\nconst overlapOffset: Record<ThemedAvatarSize, number> = {\n  40: -8,\n  32: -6,\n  24: -4,\n  18: -3,\n};\n\n/**\n * An Inflow avatar with the design system's fixed size, shape, and status-badge system.\n */\nexport const ThemedAvatar = forwardRef<HTMLDivElement, ThemedAvatarProps>(\n  ({ children, src, alt = '', size = 40, shape = 'circular', badge = false }, ref) => {\n    const { palette, typography } = useTheme();\n    const radius = shapeRadius[shape];\n    const avatarSize = sizeStyles[size];\n    const badgeSize = badgeSizes[size];\n\n    return (\n      <div\n        ref={ref}\n        style={{\n          position: 'relative',\n          display: 'inline-flex',\n          alignItems: 'center',\n          justifyContent: 'center',\n          background: palette.grey[400],\n          color: palette.common.white,\n          fontFamily: typography.fontFamily,\n          fontWeight: 400,\n          letterSpacing: '0.14px',\n          borderRadius: radius,\n          overflow: 'visible',\n          flexShrink: 0,\n          ...avatarSize,\n        }}\n      >\n        <div\n          style={{\n            position: 'relative',\n            width: '100%',\n            height: '100%',\n            display: 'flex',\n            alignItems: 'center',\n            justifyContent: 'center',\n            overflow: 'hidden',\n            borderRadius: radius,\n          }}\n        >\n          {src ? (\n            <img\n              src={src}\n              alt={alt}\n              style={{ width: '100%', height: '100%', objectFit: 'cover', display: 'block' }}\n            />\n          ) : children ? (\n            children\n          ) : (\n            <span className=\"material-icons-outlined\" style={{ fontSize: '60%', color: palette.common.white }}>\n              person\n            </span>\n          )}\n        </div>\n\n        {badge && (\n          <span\n            style={{\n              position: 'absolute',\n              right: badgeSize.offset,\n              bottom: badgeSize.offset,\n              width: badgeSize.size,\n              height: badgeSize.size,\n              borderRadius: '100px',\n              background: palette.success.main,\n              border: `1.5px solid ${palette.common.white}`,\n            }}\n          />\n        )}\n      </div>\n    );\n  },\n);\n\nThemedAvatar.displayName = 'ThemedAvatar';\n\n/**\n * An Inflow avatar group with fixed overlap, item rings, and an overflow count.\n */\nexport const ThemedAvatarGroup = forwardRef<HTMLDivElement, ThemedAvatarGroupProps>(\n  ({ children, max, size = 40 }, ref) => {\n    const { palette, typography } = useTheme();\n    const items = Children.toArray(children);\n    const visible = max ? items.slice(0, max) : items;\n    const overflow = max && items.length > max ? items.length - max : 0;\n    const offset = overlapOffset[size];\n    const avatarSize = sizeStyles[size];\n\n    return (\n      <div ref={ref} style={{ display: 'inline-flex', alignItems: 'center' }}>\n        {visible.map((child, index) => (\n          <div\n            key={index}\n            style={{\n              marginLeft: index === 0 ? 0 : offset,\n              border: `2px solid ${palette.background.paper}`,\n              borderRadius: '100px',\n              zIndex: visible.length - index,\n            }}\n          >\n            {child}\n          </div>\n        ))}\n        {overflow > 0 && (\n          <div\n            style={{\n              marginLeft: offset,\n              border: `2px solid ${palette.background.paper}`,\n              borderRadius: '100px',\n              background: palette.grey[400],\n              color: palette.common.white,\n              display: 'flex',\n              alignItems: 'center',\n              justifyContent: 'center',\n              fontFamily: typography.fontFamily,\n              fontWeight: 400,\n              letterSpacing: '0.14px',\n              zIndex: 0,\n              ...avatarSize,\n            }}\n          >\n            +{overflow}\n          </div>\n        )}\n      </div>\n    );\n  },\n);\n\nThemedAvatarGroup.displayName = 'ThemedAvatarGroup';\n","import { forwardRef } from 'react';\nimport { Badge as MuiBadge } from '@mui/material';\nimport type { BadgeProps as MuiBadgeProps } from '@mui/material/Badge';\nimport { styled } from '@mui/material/styles';\n\nexport type BadgeColor = 'error' | 'primary' | 'success';\n\nexport interface ThemedBadgeProps extends Omit<MuiBadgeProps, 'color'> {\n  color?: BadgeColor;\n}\n\nconst StyledBadge = styled(MuiBadge, {\n  shouldForwardProp: (prop) => prop !== '$badgecolor',\n})<{ $badgecolor: BadgeColor }>(({ theme, $badgecolor }) => {\n  const colorMap: Record<BadgeColor, string> = {\n    error: theme.palette.error.main,\n    primary: theme.palette.primary.main,\n    success: theme.palette.success.main,\n  };\n\n  return {\n    '& .MuiBadge-badge': {\n      backgroundColor: colorMap[$badgecolor],\n      color: theme.palette.common.white,\n      fontWeight: 500,\n      fontSize: '0.6875rem',\n      lineHeight: '16px',\n      minWidth: 16,\n      height: 16,\n      padding: '0 4px',\n      borderRadius: '8px',\n    },\n    '& .MuiBadge-dot': {\n      backgroundColor: colorMap[$badgecolor],\n      minWidth: 8,\n      height: 8,\n      borderRadius: '4px',\n      padding: 0,\n    },\n  };\n});\n\n/**\n * A Badge with fixed Inflow geometry and a constrained semantic color set.\n */\nexport const ThemedBadge = forwardRef<HTMLSpanElement, ThemedBadgeProps>(\n  ({ color = 'error', ...props }, ref) => <StyledBadge ref={ref} $badgecolor={color} {...props} />,\n);\n\nThemedBadge.displayName = 'ThemedBadge';\n","import { forwardRef, useState } from 'react';\nimport { Box, Breadcrumbs, Icon, IconButton, Link, Typography } from '@mui/material';\nimport type { ReactNode } from 'react';\n\nexport interface ThemedBreadcrumbItem {\n  label: ReactNode;\n  href?: string;\n  icon?: string;\n  onClick?: () => void;\n}\n\nexport interface ThemedBreadcrumbsProps {\n  items: ThemedBreadcrumbItem[];\n  /** Separator style — vertical bar (default), chevron, or slash. */\n  separator?: 'bar' | 'chevron' | 'slash';\n  /** Max items before collapsing to ellipsis. */\n  maxItems?: number;\n}\n\nexport const ThemedBreadcrumbs = forwardRef<HTMLElement, ThemedBreadcrumbsProps>(\n  ({ items, separator = 'bar', maxItems }, ref) => {\n    const [expanded, setExpanded] = useState(false);\n    const breadcrumbSeparator =\n      separator === 'chevron' ? (\n        <Icon\n          baseClassName=\"material-icons-outlined\"\n          sx={{ fontSize: 18, color: 'text.secondary', verticalAlign: 'middle' }}\n        >\n          chevron_right\n        </Icon>\n      ) : separator === 'bar' ? (\n        <Box\n          component=\"span\"\n          sx={(theme) => ({\n            display: 'inline-block',\n            width: '1px',\n            height: '0.9em',\n            backgroundColor: theme.palette.primary.main,\n            verticalAlign: 'middle',\n            userSelect: 'none',\n          })}\n        />\n      ) : (\n        <Typography\n          component=\"span\"\n          sx={{ color: 'text.secondary', opacity: 0.7, userSelect: 'none', fontSize: 'inherit' }}\n        >\n          /\n        </Typography>\n      );\n    const visibleItems =\n      !expanded && maxItems && items.length > maxItems\n        ? [...items.slice(0, 1), null, ...items.slice(items.length - (maxItems - 1))]\n        : items;\n\n    return (\n      <Breadcrumbs\n        ref={ref}\n        aria-label=\"breadcrumb\"\n        separator={breadcrumbSeparator}\n        sx={{\n          '& .MuiBreadcrumbs-ol': { flexWrap: 'nowrap', alignItems: 'center' },\n          '& .MuiBreadcrumbs-li': { display: 'flex', alignItems: 'center' },\n        }}\n      >\n        {visibleItems.map((item, index) => {\n          if (item === null) {\n            return (\n              <IconButton\n                key=\"ellipsis\"\n                aria-label=\"Show all breadcrumbs\"\n                size=\"small\"\n                onClick={() => setExpanded(true)}\n                sx={{ borderRadius: 1, color: 'text.secondary', fontSize: 14 }}\n              >\n                …\n              </IconButton>\n            );\n          }\n\n          const content = (\n            <>\n              {item.icon && (\n                <Icon\n                  baseClassName=\"material-icons-outlined\"\n                  sx={{ fontSize: 16, mr: '4px', verticalAlign: 'middle' }}\n                >\n                  {item.icon}\n                </Icon>\n              )}\n              {item.label}\n            </>\n          );\n\n          return (\n            <Link\n              key={index}\n              href={item.href ?? '#'}\n              onClick={item.onClick}\n              underline=\"always\"\n              variant=\"body2\"\n              color=\"primary.main\"\n              sx={{ display: 'flex', alignItems: 'center' }}\n            >\n              {content}\n            </Link>\n          );\n        })}\n      </Breadcrumbs>\n    );\n  },\n);\n\nThemedBreadcrumbs.displayName = 'ThemedBreadcrumbs';\n","import { forwardRef } from 'react';\nimport { Button } from '@mui/material';\nimport type { ButtonProps } from '@mui/material';\nimport type { Theme } from '@mui/material/styles';\n\nexport interface ThemedButtonProps extends ButtonProps {\n  /**\n   * Optional custom prop to signify if the button should use the explicit Inflow primary tokens.\n   * If true, applies specific inflow colors regardless of global theme overrides.\n   */\n  inflowVariant?: boolean;\n}\n\n/**\n * ThemedButton\n *\n * A pre-rendered, themed button component that follows the Inflow design system.\n * It extends the standard MUI Button and applies specific Inflow design tokens\n * for colors, border radius, and hover states.\n *\n * @deprecated Redundant with the theme: `createInflowTheme`'s `MuiButton`\n * `defaultProps`/`styleOverrides` already apply these Inflow tokens to a stock\n * MUI `Button` once wrapped in `InflowProvider`. Use `Button` from\n * `@mui/material` directly. Kept for backward compatibility; will be removed in\n * the next major version.\n *\n * @example\n * ```tsx\n * import { ThemedButton } from '@/components/themed';\n *\n * // Standard usage\n * <ThemedButton variant=\"contained\">Save</ThemedButton>\n *\n * // Outlined usage\n * <ThemedButton variant=\"outlined\">Cancel</ThemedButton>\n * ```\n */\nexport const ThemedButton = forwardRef<HTMLButtonElement, ThemedButtonProps>(\n  ({ inflowVariant = true, sx, ...props }, ref) => {\n    const customStyles = inflowVariant\n      ? (theme: Theme) => ({\n          borderRadius: `${theme.shape.borderRadius}px`,\n          fontWeight: theme.typography.fontWeightMedium,\n          letterSpacing: '0.00625rem',\n          ...(props.variant === 'contained' && (props.color === 'primary' || !props.color) && {\n            backgroundColor: theme.palette.primary.main,\n            color: theme.palette.primary.contrastText,\n            '&:hover': {\n              backgroundColor: theme.palette.primary.dark,\n            },\n          }),\n          ...(props.variant === 'outlined' && (props.color === 'primary' || !props.color) && {\n            color: theme.palette.primary.main,\n            borderColor: theme.palette.inflow.outlineVariant,\n            backgroundColor: theme.palette.inflow.surfaceLowest,\n            '&:hover': {\n              borderColor: theme.palette.inflow.outlineVariant,\n              backgroundColor: theme.palette.inflow.rowSelected,\n            },\n          }),\n          ...(props.variant === 'text' && (props.color === 'primary' || !props.color) && {\n            color: theme.palette.primary.main,\n            '&:hover': {\n              backgroundColor: theme.palette.inflow.rowSelected,\n            },\n          }),\n        })\n      : undefined;\n\n    return (\n      <Button\n        ref={ref}\n        disableElevation\n        sx={[\n          customStyles,\n          ...(Array.isArray(sx) ? sx : [sx])\n        ]}\n        {...props}\n      />\n    );\n  }\n);\n\nThemedButton.displayName = 'ThemedButton';\n","import { forwardRef } from 'react';\nimport { Card, CardHeader, CardContent, CardActions } from '@mui/material';\nimport type { CardProps } from '@mui/material';\nimport type { Theme } from '@mui/material/styles';\n\nexport interface ThemedCardProps extends Omit<CardProps, 'title'> {\n  /** Optional title to render in the card header */\n  title?: React.ReactNode;\n  /** Optional subheader to render in the card header */\n  subheader?: React.ReactNode;\n  /** Optional actions to render at the bottom of the card */\n  actions?: React.ReactNode;\n  /** Prevents the default padding on CardContent if true */\n  disableContentPadding?: boolean;\n}\n\n/**\n * ThemedCard\n * \n * A pre-rendered, themed card component that follows the Inflow design system.\n * It applies specific Inflow design tokens for shadows, border-radius, and provides\n * optional built-in slots for title, subheader, and actions.\n *\n * @example\n * ```tsx\n * import { ThemedCard } from '@/components/themed';\n *\n * <ThemedCard \n *   title=\"Project Details\" \n *   actions={<ThemedButton>Save</ThemedButton>}\n * >\n *   Main content goes here\n * </ThemedCard>\n * ```\n */\nexport const ThemedCard = forwardRef<HTMLDivElement, ThemedCardProps>(\n  ({ title, subheader, actions, children, disableContentPadding = false, sx, ...props }, ref) => {\n    return (\n      <Card\n        ref={ref}\n        elevation={1}\n        sx={[\n          (theme: Theme) => ({\n            borderRadius: `${theme.shape.borderRadius}px`,\n            boxShadow: theme.shadows[1],\n          }),\n          ...(Array.isArray(sx) ? sx : [sx])\n        ]}\n        {...props}\n      >\n        {(title || subheader) && (\n          <CardHeader \n            title={title} \n            subheader={subheader}\n            titleTypographyProps={{ variant: 'subtitle1' }}\n            sx={{ pb: 0 }}\n          />\n        )}\n        <CardContent sx={disableContentPadding ? { p: 0, '&:last-child': { pb: 0 } } : undefined}>\n          {children}\n        </CardContent>\n        {actions && (\n          <CardActions sx={{ px: 2, pb: 2, pt: 0 }}>\n            {actions}\n          </CardActions>\n        )}\n      </Card>\n    );\n  }\n);\n\nThemedCard.displayName = 'ThemedCard';\n","import { forwardRef, useId, useState } from 'react';\nimport type { ReactNode, SyntheticEvent } from 'react';\nimport {\n  Accordion,\n  AccordionDetails,\n  AccordionSummary,\n  Box,\n  CircularProgress,\n  Icon,\n} from '@mui/material';\nimport type { SxProps, Theme } from '@mui/material/styles';\n\nexport interface ThemedChatAccordionStep {\n  id: string;\n  label: ReactNode;\n  /** Shows the DS-owned progress indicator while `isStreaming` is true. */\n  isActive?: boolean;\n}\n\nexport interface ThemedChatAccordionProps {\n  /** Header text of the collapsed accordion (e.g. \"Reasoning\"). */\n  title: ReactNode;\n  /** Completed and in-flight steps for a single assistant turn. */\n  steps: readonly ThemedChatAccordionStep[];\n  /**\n   * When true the steps render inline as a flat list (active step shows a\n   * spinner); when false they fold into a collapsed accordion. Conditionally\n   * mounting the accordion means its uncontrolled expansion naturally starts\n   * from `defaultExpanded` once streaming ends.\n   */\n  isStreaming?: boolean;\n  /**\n   * Renders per-step todo/checklist status icons in the streaming view:\n   * done steps show `check_circle`, the active step shows the spinner, and\n   * pending steps show `radio_button_unchecked`.\n   */\n  stepStatusIcons?: boolean;\n  defaultExpanded?: boolean;\n  /** Controlled expansion. Omit to keep the product rule: collapsed when done. */\n  expanded?: boolean;\n  onChange?: (expanded: boolean) => void;\n  sx?: SxProps<Theme>;\n}\n\n/**\n * Chat \"Reasoning\" block for an assistant turn. While streaming it shows tool\n * steps inline; once streaming completes the same steps fold into a collapsed\n * accordion labelled `title`. Content construction (labels, Markdown, italics)\n * stays host-owned via `label: ReactNode`; the DS owns row layout and the\n * streaming spinner.\n *\n * @example\n * <ThemedChatAccordion\n *   title=\"Reasoning\"\n *   isStreaming={isStreaming}\n *   steps={[{ id: '1', label: 'Tool used: Loading file' }, { id: '2', label: 'Extracting data', isActive: true }]}\n * />\n */\nexport const ThemedChatAccordion = forwardRef<HTMLDivElement, ThemedChatAccordionProps>(\n  ({ title, steps, isStreaming = false, stepStatusIcons = false, defaultExpanded = false, expanded, onChange, sx }, ref) => {\n    const accordionId = useId();\n    const summaryId = `${accordionId}-summary`;\n    const detailsId = `${accordionId}-details`;\n\n    const isControlled = expanded !== undefined;\n    const [internalExpanded, setInternalExpanded] = useState(defaultExpanded);\n    const open = isControlled ? expanded : internalExpanded;\n\n    const handleChange = (_event: SyntheticEvent, isExpanded: boolean) => {\n      if (!isControlled) setInternalExpanded(isExpanded);\n      onChange?.(isExpanded);\n    };\n\n    const stepLabel = (step: ThemedChatAccordionStep, isActive = step.isActive === true) => (\n      <Box\n        component=\"span\"\n        sx={(theme) => ({\n          minWidth: 0,\n          flex: isActive ? '1 1 auto' : undefined,\n          fontSize: theme.typography.body2.fontSize,\n          lineHeight: theme.typography.body2.lineHeight,\n          letterSpacing: theme.typography.body2.letterSpacing,\n          color: 'text.secondary',\n          overflowWrap: 'anywhere',\n        })}\n      >\n        {step.label}\n      </Box>\n    );\n\n    const activeStepIndex = steps.reduce(\n      (latestIndex, step, index) => step.isActive ? index : latestIndex,\n      -1,\n    );\n\n    const activePillSx = {\n      display: 'flex',\n      alignItems: 'center',\n      gap: 1,\n      minHeight: 40,\n      mb: 1,\n      px: 1.5,\n      py: 1,\n      border: '1px solid',\n      borderColor: 'divider',\n      borderRadius: 2.5,\n    } as const;\n\n    const statusLeadingIcon = (status: 'done' | 'active' | 'pending') => {\n      if (status === 'active') {\n        return <CircularProgress aria-hidden=\"true\" size={16} thickness={5} sx={{ flexShrink: 0 }} />;\n      }\n      return (\n        <Icon\n          aria-hidden=\"true\"\n          baseClassName=\"material-icons-outlined\"\n          sx={{ flexShrink: 0, fontSize: 18, color: status === 'done' ? 'primary.main' : 'text.disabled' }}\n        >\n          {status === 'done' ? 'check_circle' : 'radio_button_unchecked'}\n        </Icon>\n      );\n    };\n\n    if (isStreaming) {\n      return (\n        <Box ref={ref} sx={sx}>\n          <Box component=\"ul\" aria-live=\"polite\" sx={{ listStyle: 'none', m: 0, p: 0 }}>\n            {steps.map((step, index) => {\n              const isActive = index === activeStepIndex;\n\n              if (stepStatusIcons) {\n                const status = activeStepIndex === -1 || index < activeStepIndex\n                  ? 'done'\n                  : isActive ? 'active' : 'pending';\n                return (\n                  <Box\n                    component=\"li\"\n                    key={step.id}\n                    aria-current={isActive ? 'step' : undefined}\n                    sx={isActive ? activePillSx : { display: 'flex', alignItems: 'center', gap: 1, mb: 1 }}\n                  >\n                    {statusLeadingIcon(status)}\n                    {stepLabel(step, isActive)}\n                  </Box>\n                );\n              }\n\n              return (\n                <Box\n                  component=\"li\"\n                  key={step.id}\n                  aria-current={isActive ? 'step' : undefined}\n                  sx={isActive ? activePillSx : { display: 'block', mb: 1 }}\n                >\n                  {isActive ? (\n                    <Icon\n                      aria-hidden=\"true\"\n                      baseClassName=\"material-icons-outlined\"\n                      sx={{ flexShrink: 0, color: 'text.secondary', fontSize: 16 }}\n                    >\n                      build\n                    </Icon>\n                  ) : null}\n                  {stepLabel(step, isActive)}\n                  {isActive ? (\n                    <CircularProgress aria-hidden=\"true\" size={14} thickness={5} sx={{ flexShrink: 0 }} />\n                  ) : null}\n                </Box>\n              );\n            })}\n          </Box>\n        </Box>\n      );\n    }\n\n    return (\n      <Box ref={ref} sx={sx}>\n        <Accordion\n          expanded={open}\n          onChange={handleChange}\n          disableGutters\n          elevation={0}\n          sx={{\n            m: 0,\n            bgcolor: 'transparent',\n            borderRadius: 0,\n            '&:before': { display: 'none' },\n            '&.Mui-expanded': { m: 0 },\n          }}\n        >\n          <AccordionSummary\n            id={summaryId}\n            aria-controls={detailsId}\n            expandIcon={\n              <Icon baseClassName=\"material-icons-outlined\" sx={{ fontSize: 18, color: 'text.secondary' }}>\n                {open ? 'expand_more' : 'chevron_right'}\n              </Icon>\n            }\n            sx={(theme) => ({\n              minHeight: 32,\n              px: 0,\n              width: 'fit-content',\n              fontSize: '0.75rem',\n              fontWeight: theme.typography.fontWeightMedium,\n              lineHeight: theme.typography.body2.lineHeight,\n              letterSpacing: theme.typography.body2.letterSpacing,\n              color: 'text.secondary',\n              '&.Mui-expanded': { minHeight: 32 },\n              '& .MuiAccordionSummary-content': { my: 0, flexGrow: 0 },\n              '& .MuiAccordionSummary-content.Mui-expanded': { my: 0 },\n              '& .MuiAccordionSummary-expandIconWrapper': { ml: 0.5 },\n              '& .MuiAccordionSummary-expandIconWrapper.Mui-expanded': { transform: 'none' },\n            })}\n          >\n            {title}\n          </AccordionSummary>\n          <AccordionDetails\n            id={detailsId}\n            aria-labelledby={summaryId}\n            sx={{ px: 0, pb: 0, pt: 0.75 }}\n          >\n            <Box component=\"ul\" sx={{ listStyle: 'none', m: 0, p: 0 }}>\n              {steps.map((step) => (\n                <Box component=\"li\" key={step.id} sx={{ mb: 1, '&:last-child': { mb: 0 } }}>\n                  {stepLabel(step, false)}\n                </Box>\n              ))}\n            </Box>\n          </AccordionDetails>\n        </Accordion>\n      </Box>\n    );\n  },\n);\n\nThemedChatAccordion.displayName = 'ThemedChatAccordion';\n","import { forwardRef } from 'react';\nimport { Chip, Icon } from '@mui/material';\nimport type { ChipProps } from '@mui/material';\nimport type { Theme } from '@mui/material/styles';\n\nexport type ThemedChipVariant = ChipProps['variant'] | 'filled-primary' | 'outlined-primary';\nexport type ThemedChipSize = ChipProps['size'] | 'sm' | 'md' | 'lg';\n\nexport interface ThemedChipProps extends Omit<ChipProps, 'size' | 'variant'> {\n  /** If true, applies specific inflow colors regardless of global overrides */\n  inflowVariant?: boolean;\n  /** MUI variants plus the Inflow primary variants used by the design system. */\n  variant?: ThemedChipVariant;\n  /** MUI sizes plus the Inflow design-system size aliases. */\n  size?: ThemedChipSize;\n  /** Material Symbols glyph rendered before the label. */\n  leadingIcon?: string;\n}\n\nconst chipSizeStyles = {\n  sm: { height: 24, paddingX: 8, fontSize: '0.75rem', iconSize: 14, gap: 6 },\n  md: { height: 32, paddingX: 12, fontSize: '0.875rem', iconSize: 18, gap: 8 },\n  lg: { height: 40, paddingX: 20, fontSize: '1rem', iconSize: 20, gap: 10 },\n} as const;\n\n/**\n * ThemedChip\n * \n * A pre-rendered, themed chip component that follows the Inflow design system.\n * It applies specific Inflow design tokens for radius, colors, and delete icons.\n *\n * @example\n * ```tsx\n * import { ThemedChip } from '@/components/themed';\n *\n * // Standard usage\n * <ThemedChip label=\"Active\" color=\"primary\" />\n * \n * // Outlined with delete\n * <ThemedChip label=\"Filter\" variant=\"outlined\" onDelete={() => {}} />\n * ```\n */\nexport const ThemedChip = forwardRef<HTMLDivElement, ThemedChipProps>(\n  ({\n    inflowVariant = true,\n    sx,\n    variant: requestedVariant,\n    color: requestedColor,\n    size: requestedSize = 'medium',\n    leadingIcon,\n    deleteIcon,\n    ...props\n  }, ref) => {\n    const isPrimaryVariant = requestedVariant === 'filled-primary' || requestedVariant === 'outlined-primary';\n    const variant = requestedVariant === 'filled-primary'\n      ? 'filled'\n      : requestedVariant === 'outlined-primary'\n        ? 'outlined'\n        : requestedVariant;\n    const color = isPrimaryVariant ? 'primary' : requestedColor;\n    const isDefaultColor = requestedColor === undefined || requestedColor === 'default';\n    const size = requestedSize === 'sm'\n      ? 'small'\n      : requestedSize === 'md' || requestedSize === 'lg'\n        ? 'medium'\n        : requestedSize;\n    const sizeKey = requestedSize === 'sm' || requestedSize === 'small'\n      ? 'sm'\n      : requestedSize === 'lg'\n        ? 'lg'\n        : 'md';\n    const chipSize = chipSizeStyles[sizeKey];\n    const sizeStyles = {\n      [`&&.MuiChip-size${size === 'small' ? 'Small' : 'Medium'}`]: {\n        height: chipSize.height,\n        width: 'fit-content',\n        flex: '0 0 auto',\n        paddingLeft: `${chipSize.paddingX}px`,\n        paddingRight: `${chipSize.paddingX}px`,\n        fontSize: chipSize.fontSize,\n        gap: `${chipSize.gap}px`,\n      },\n      '&& .MuiChip-label': { paddingLeft: 0, paddingRight: 0 },\n      '&& .MuiChip-icon': { marginLeft: 0, marginRight: 0, color: 'inherit' },\n      '&& .MuiChip-deleteIcon': { marginRight: 0 },\n    };\n    const customStyles = inflowVariant\n      ? (theme: Theme) => ({\n          borderRadius: '9999px',\n          fontWeight: theme.typography.fontWeightMedium,\n          letterSpacing: '0.00625rem',\n          ...(variant === 'outlined' && {\n            backgroundColor: theme.palette.inflow.surfaceLowest,\n            borderColor: requestedVariant === 'outlined-primary'\n              ? theme.palette.primary.main\n              : theme.palette.inflow.outlineVariant,\n            color: color === 'primary'\n              ? theme.palette.primary.main\n              : theme.palette.text.primary,\n            '& .MuiChip-deleteIcon': {\n              color: color === 'primary'\n                ? theme.palette.primary.main\n                : theme.palette.inflow.outline,\n              opacity: 1,\n              '&:hover': {\n                color: color === 'primary'\n                  ? theme.palette.primary.dark\n                  : theme.palette.text.primary,\n              },\n            },\n          }),\n          ...(variant !== 'outlined' && isDefaultColor && {\n            backgroundColor: theme.palette.mode === 'dark'\n              ? theme.palette.grey[700]\n              : theme.palette.grey[300],\n            color: theme.palette.text.primary,\n            '&:hover': {\n              backgroundColor: theme.palette.mode === 'dark'\n                ? theme.palette.grey[600]\n                : theme.palette.grey[400],\n            },\n            '& .MuiChip-deleteIcon': {\n              color: theme.palette.inflow.outline,\n              opacity: 1,\n              '&:hover': {\n                color: theme.palette.text.primary,\n              },\n            },\n          }),\n          ...(variant !== 'outlined' && color === 'primary' && {\n            backgroundColor: theme.palette.inflow.primaryTab,\n            color: theme.palette.primary.main,\n            '& .MuiChip-deleteIcon': {\n              color: theme.palette.primary.main,\n              opacity: 0.7,\n              '&:hover': {\n                opacity: 1,\n                color: theme.palette.primary.dark,\n              },\n            },\n          }),\n          ...(variant !== 'outlined' && color === 'error' && {\n            backgroundColor: theme.palette.inflow.diffRemovedBg,\n            color: theme.palette.inflow.diffRemovedText,\n            '& .MuiChip-deleteIcon': {\n              color: theme.palette.inflow.diffRemovedText,\n              opacity: 0.7,\n              '&:hover': {\n                opacity: 1,\n              },\n            },\n          }),\n          ...(variant !== 'outlined' && color === 'success' && {\n            backgroundColor: theme.palette.inflow.diffAddedBg,\n            color: theme.palette.inflow.diffAddedText,\n          }),\n        })\n      : undefined;\n\n    return (\n        <Chip\n          ref={ref}\n          variant={variant}\n          color={color}\n          size={size}\n          icon={leadingIcon ? (\n            <Icon\n              baseClassName=\"material-icons-outlined\"\n              sx={{ fontSize: `${chipSize.iconSize}px !important` }}\n            >\n              {leadingIcon}\n            </Icon>\n          ) : undefined}\n          deleteIcon={deleteIcon ?? (\n            <Icon baseClassName=\"material-icons-outlined\" sx={{ fontSize: `${chipSize.iconSize}px !important` }}>\n              close\n            </Icon>\n          )}\n          sx={[\n            customStyles,\n            sizeStyles,\n            ...(Array.isArray(sx) ? sx : [sx]),\n          ]}\n          {...props}\n        />\n    );\n  }\n);\n\nThemedChip.displayName = 'ThemedChip';\n","import {\n  Box,\n  Button,\n  Icon,\n  IconButton,\n  InputBase,\n  ListItemIcon,\n  LinearProgress,\n  Menu,\n  MenuItem,\n  SvgIcon,\n  Typography,\n} from '@mui/material';\nimport { forwardRef, useCallback, useEffect, useId, useRef, useState, type KeyboardEvent, type ReactNode } from 'react';\nimport { inflowTokens } from '../../theme';\nimport { ThemedChip } from './ThemedChip';\n\nexport type ThemedChatMessageRole = 'assistant' | 'user';\n\nexport interface ThemedChatAttachment {\n  id: string;\n  name: string;\n  status?: 'pending' | 'uploading' | 'done' | 'error';\n  progress?: number;\n}\n\nexport interface ThemedChatMessageDef {\n  id: string;\n  role: ThemedChatMessageRole;\n  content: ReactNode;\n  /** App-owned classification; tool detection remains outside the DS. */\n  kind?: 'text' | 'tool';\n  /** Suggestion chips below assistant message. */\n  chips?: string[];\n  /** Action buttons below assistant message. */\n  actions?: string[];\n}\n\nexport interface ThemedChatThreadRenderContext {\n  /** Invokes the panel's configured tool-message slot with DS-owned wrapping. */\n  renderToolMessage: (message: ThemedChatMessageDef) => ReactNode;\n  /** Invokes the panel's configured or default typing indicator when typing is active. */\n  renderTypingIndicator: () => ReactNode;\n}\n\nexport interface ThemedChatTool {\n  id: string;\n  label: ReactNode;\n  disabled?: boolean;\n  disabledLabel?: string;\n}\n\nexport interface ThemedChatPanelProps {\n  /** Currently selected assistant name shown in the header pill. */\n  title?: string;\n  /** Options in the assistant-switcher dropdown. */\n  dropdownOptions?: string[];\n  onSelectOption?: (name: string) => void;\n  messages?: ThemedChatMessageDef[];\n  onClose?: () => void;\n  onExpand?: () => void;\n  onMore?: () => void;\n  /** When true, the built-in header is not rendered (host provides its own). */\n  hideHeader?: boolean;\n  attachedFile?: string;\n  attachments?: ThemedChatAttachment[];\n  onAttachFile?: (files: File[]) => void;\n  onRemoveAttachment?: (id?: string) => void;\n  renderAttachment?: (attachment: ThemedChatAttachment) => ReactNode;\n  /** Defaults to whether an attachment callback is supplied for existing consumers. */\n  showAttach?: boolean;\n  attachAriaLabel?: string;\n  toolsAriaLabel?: string;\n  tools?: ThemedChatTool[];\n  onToolSelect?: (toolId: string) => void;\n  /** Aggregate host-owned upload progress, paired with attachment status/progress. */\n  uploadProgress?: number;\n  uploadProgressLabel?: ReactNode;\n  /** @deprecated Use onSendMessage to receive the composed text. */\n  onSend?: () => void;\n  inputValue?: string;\n  onInputChange?: (value: string) => void;\n  onSendMessage?: (text: string) => void;\n  isStreaming?: boolean;\n  onStop?: () => void;\n  isTyping?: boolean;\n  renderTypingIndicator?: () => ReactNode;\n  renderToolMessage?: (message: ThemedChatMessageDef) => ReactNode;\n  /** App-owned thread renderer for message types that are outside the DS message model. */\n  renderMessageThread?: (context: ThemedChatThreadRenderContext) => ReactNode;\n  inputPlaceholder?: string;\n  inputHint?: string;\n  creditsLabel?: ((used: number, total: number) => ReactNode) | string;\n  aiDisclaimer?: ReactNode;\n  userLabel?: string;\n  assistantLabel?: string;\n  expandAriaLabel?: string;\n  moreAriaLabel?: string;\n  closeAriaLabel?: string;\n  sendAriaLabel?: string;\n  stopAriaLabel?: string;\n  credits?: { used: number; total: number };\n  /** Visibility of the credits block. Defaults to whether `credits` is supplied. */\n  showCredits?: boolean;\n  charCount?: number;\n  charLimit?: number;\n  /** Visibility of the \"count / limit\" footer text. */\n  showCharCount?: boolean;\n  /** Visibility of the small hint line under the input (e.g. \"Type / to switch assistants\"). */\n  showInputHint?: boolean;\n  /** Keeps the composer presentational while allowing the host to mirror request state. */\n  isRunning?: boolean;\n  isInputDisabled?: boolean;\n  isSendDisabled?: boolean;\n  multiline?: boolean;\n  maxRows?: number;\n}\n\nconst DEFAULT_OPTIONS = [\n  'Query Assistant',\n  'Content Onboarding Assistant',\n  'Expression Assistant',\n  'Project Assistant',\n  'Enrich Assistant',\n];\n\nconst DEFAULT_STRINGS = {\n  title: 'Query Assistant',\n  inputPlaceholder: 'How can I help?',\n  inputHint: 'Type / to switch assistants',\n  creditsLabel: 'Credits',\n  aiDisclaimer: 'AI can make mistakes. Check important info.',\n  userLabel: 'Me',\n  assistantLabel: 'Assistant',\n  expandAriaLabel: 'Expand chat panel',\n  moreAriaLabel: 'More chat options',\n  closeAriaLabel: 'Close chat panel',\n  sendAriaLabel: 'Send message',\n  stopAriaLabel: 'Stop generating',\n  attachAriaLabel: 'Attach files',\n  toolsAriaLabel: 'Add tools',\n} as const;\n\nconst iconButtonSx = {\n  width: 32,\n  height: 32,\n  borderRadius: 1,\n  color: 'text.secondary',\n  '&:hover': { backgroundColor: 'action.hover' },\n} as const;\n\nconst sendButtonSx = {\n  color: 'text.secondary',\n  width: 48,\n  height: 48,\n  borderRadius: '50%',\n  '&:hover': { backgroundColor: 'action.hover' },\n} as const;\n\nconst selectedSurfaceSx = {\n  '&&': {\n    backgroundColor: 'inflow.navy100',\n    borderColor: 'primary.main',\n    color: 'primary.main',\n    '&:hover': { backgroundColor: 'inflow.navy100' },\n  },\n} as const;\n\n/** Official Google Material Symbols `pin_end` vector, inlined to avoid a second icon font. */\nconst PIN_END_PATH =\n  'M160-160q-33 0-56.5-23.5T80-240v-480q0-33 23.5-56.5T160-800h640q33 0 56.5 23.5T880-720v240h-80v-240H160v480h400v80H160Zm398-225L440-503v89h-80v-226h226v80h-90l118 118-56 57Zm202 225q-50 0-85-35t-35-85q0-50 35-85t85-35q50 0 85 35t35 85q0 50-35 85t-85 35Z';\n\nfunction PinEndIcon() {\n  return (\n    <SvgIcon viewBox=\"0 -960 960 960\" sx={{ fontSize: 22 }}>\n      <path d={PIN_END_PATH} />\n    </SvgIcon>\n  );\n}\n\n/** Solid Material `send` glyph, inlined so the composer's submit control stays filled regardless of icon font. */\nconst SEND_PATH = 'M2.01 21 23 12 2.01 3 2 10l15 2-15 2z';\n\nfunction SendIcon() {\n  return (\n    <SvgIcon viewBox=\"0 0 24 24\" sx={{ fontSize: 24 }}>\n      <path d={SEND_PATH} />\n    </SvgIcon>\n  );\n}\n\n/**\n * The AI assistant conversation content intended for composition inside a\n * `ThemedRightPanel`. The panel host owns layout and Escape behavior; this\n * component owns its chat header controls, including close.\n */\nexport const ThemedChatPanel = forwardRef<HTMLDivElement, ThemedChatPanelProps>(\n  function ThemedChatPanel(\n    {\n      title = DEFAULT_STRINGS.title,\n      dropdownOptions = DEFAULT_OPTIONS,\n      onSelectOption,\n      messages = [],\n      onClose,\n      onExpand,\n      onMore,\n      hideHeader = false,\n      attachedFile,\n      attachments,\n      onAttachFile,\n      onRemoveAttachment,\n      renderAttachment,\n      showAttach = Boolean(onAttachFile),\n      attachAriaLabel = DEFAULT_STRINGS.attachAriaLabel,\n      toolsAriaLabel = DEFAULT_STRINGS.toolsAriaLabel,\n      tools,\n      onToolSelect,\n      uploadProgress,\n      uploadProgressLabel,\n      onSend,\n      inputValue = '',\n      onInputChange,\n      onSendMessage,\n      isStreaming = false,\n      onStop,\n      isTyping = false,\n      renderTypingIndicator,\n      renderToolMessage,\n      renderMessageThread,\n      inputPlaceholder = DEFAULT_STRINGS.inputPlaceholder,\n      inputHint = DEFAULT_STRINGS.inputHint,\n      creditsLabel = DEFAULT_STRINGS.creditsLabel,\n      aiDisclaimer = DEFAULT_STRINGS.aiDisclaimer,\n      userLabel = DEFAULT_STRINGS.userLabel,\n      assistantLabel = DEFAULT_STRINGS.assistantLabel,\n      expandAriaLabel = DEFAULT_STRINGS.expandAriaLabel,\n      moreAriaLabel = DEFAULT_STRINGS.moreAriaLabel,\n      closeAriaLabel = DEFAULT_STRINGS.closeAriaLabel,\n      sendAriaLabel = DEFAULT_STRINGS.sendAriaLabel,\n      stopAriaLabel = DEFAULT_STRINGS.stopAriaLabel,\n      credits,\n      showCredits = Boolean(credits),\n      charCount = 0,\n      charLimit = 2000,\n      showCharCount = true,\n      showInputHint = true,\n      isRunning = false,\n      isInputDisabled = false,\n      isSendDisabled = false,\n      multiline = false,\n      maxRows = 4,\n    },\n    ref,\n  ) {\n    const scrollRef = useRef<HTMLDivElement>(null);\n    const fileInputRef = useRef<HTMLInputElement>(null);\n    const assistantMenuId = useId();\n    const assistantTriggerId = useId();\n    const toolsMenuId = useId();\n    const toolsTriggerId = useId();\n    const [anchorEl, setAnchorEl] = useState<HTMLElement | null>(null);\n    const [toolsAnchorEl, setToolsAnchorEl] = useState<HTMLElement | null>(null);\n    const [selected, setSelected] = useState(title);\n    const [prevTitle, setPrevTitle] = useState(title);\n\n    if (prevTitle !== title) {\n      setPrevTitle(title);\n      setSelected(title);\n    }\n\n    useEffect(() => {\n      if (scrollRef.current) {\n        scrollRef.current.scrollTop = scrollRef.current.scrollHeight;\n      }\n    }, [messages.length, isStreaming, isTyping]);\n\n    const handleSelect = useCallback((option: string) => {\n      setSelected(option);\n      setAnchorEl(null);\n      onSelectOption?.(option);\n    }, [onSelectOption]);\n\n    const handleSend = () => {\n      if ((inputValue.trim() === '' && !attachedFile && !attachments?.length) || isRunning || isSendDisabled) return;\n\n      onSendMessage?.(inputValue);\n      onSend?.();\n    };\n\n    const handleInputKeyDown = (event: KeyboardEvent<HTMLInputElement | HTMLTextAreaElement>) => {\n      if (event.key !== 'Enter') return;\n      if (multiline && (event.ctrlKey || event.metaKey)) return;\n\n      event.preventDefault();\n      handleSend();\n    };\n\n    const sendDisabled = isRunning || isSendDisabled || (inputValue.trim() === '' && !attachedFile && !attachments?.length);\n    const displayedAttachments = attachments ?? (attachedFile ? [{ id: 'legacy-attachment', name: attachedFile }] : []);\n    const renderToolMessageSlot = (message: ThemedChatMessageDef) => {\n      if (!renderToolMessage) return null;\n      return <Box key={message.id} data-chat-message-kind=\"tool\">{renderToolMessage(message)}</Box>;\n    };\n    const renderTypingIndicatorSlot = () => {\n      if (!isTyping) return null;\n      if (renderTypingIndicator) return renderTypingIndicator();\n      return (\n        <Box\n          data-testid=\"default-typing-indicator\"\n          role=\"status\"\n          aria-label={`${assistantLabel} is typing`}\n          sx={{ display: 'flex', gap: 0.5, p: 1.25 }}\n        >\n          {[0, 1, 2].map((dot) => (\n            <Box\n              key={dot}\n              aria-hidden=\"true\"\n              sx={{\n                width: 8,\n                height: 8,\n                borderRadius: '50%',\n                bgcolor: 'text.disabled',\n                '@keyframes inflowChatTypingBounce': {\n                  '0%, 60%, 100%': { transform: 'translateY(0)' },\n                  '30%': { transform: 'translateY(-6px)' },\n                },\n                animationName: 'inflowChatTypingBounce',\n                animationDuration: '1.4s',\n                animationTimingFunction: 'ease',\n                animationIterationCount: 'infinite',\n                animationDelay: `${dot * 0.2}s`,\n              }}\n            />\n          ))}\n        </Box>\n      );\n    };\n\n    return (\n      <Box\n        ref={ref}\n        data-testid=\"themed-chat-panel\"\n        sx={{\n          display: 'flex',\n          flexDirection: 'column',\n          height: '100%',\n          minHeight: 0,\n          bgcolor: 'background.paper',\n          overflow: 'hidden',\n        }}\n      >\n        {!hideHeader && (\n        <Box\n          component=\"header\"\n          sx={{\n            display: 'flex',\n            alignItems: 'center',\n            justifyContent: 'space-between',\n            gap: 2,\n            p: (theme) => theme.spacing(1.5, 1.5, 1.5, 2),\n            flexShrink: 0,\n          }}\n        >\n          <Box sx={{ position: 'relative', minWidth: 0 }}>\n          <Button\n            id={assistantTriggerId}\n            size=\"small\"\n            endIcon={<Icon baseClassName=\"material-icons-outlined\" sx={{ fontSize: 18 }}>arrow_drop_down</Icon>}\n            aria-haspopup=\"menu\"\n            aria-expanded={Boolean(anchorEl)}\n            aria-controls={anchorEl ? assistantMenuId : undefined}\n            onClick={(event) => setAnchorEl(event.currentTarget)}\n            sx={{\n              height: 24,\n              borderRadius: inflowTokens.radius.full,\n              border: 1,\n              borderColor: 'divider',\n              color: 'primary.main',\n              fontSize: 13,\n              fontWeight: 400,\n              pl: 1.5,\n              pr: 0.75,\n              py: 0,\n              minWidth: 0,\n              maxWidth: '100%',\n              bgcolor: 'background.paper',\n              textTransform: 'none',\n              whiteSpace: 'nowrap',\n              overflow: 'hidden',\n              textOverflow: 'ellipsis',\n              '& .MuiButton-endIcon': { ml: 0.5, mr: 0 },\n              '&:hover': { bgcolor: 'action.hover' },\n            }}\n          >\n            {selected}\n          </Button>\n          </Box>\n\n          <Menu\n            anchorEl={anchorEl}\n            open={Boolean(anchorEl)}\n            onClose={() => setAnchorEl(null)}\n            anchorOrigin={{ vertical: 'bottom', horizontal: 'left' }}\n            transformOrigin={{ vertical: 'top', horizontal: 'left' }}\n            slotProps={{\n              list: {\n                id: assistantMenuId,\n                'aria-labelledby': assistantTriggerId,\n              },\n              paper: {\n                sx: {\n                  minWidth: 248,\n                  border: 1,\n                  borderColor: 'divider',\n                  borderRadius: 1,\n                  boxShadow: 3,\n                  mt: 0.5,\n                },\n              },\n            }}\n          >\n            {dropdownOptions.map((option) => (\n              <MenuItem\n                key={option}\n                selected={option === selected}\n                onClick={() => handleSelect(option)}\n                sx={{\n                  fontSize: '1rem',\n                  py: 1.5,\n                  px: 2,\n                  gap: 1.5,\n                  '&.Mui-selected': {\n                    bgcolor: 'inflow.navy100',\n                    '&:hover': { bgcolor: 'inflow.navy100' },\n                  },\n                }}\n              >\n                <ListItemIcon sx={{ minWidth: 20 }}>\n                  <Icon\n                    baseClassName=\"material-icons-outlined\"\n                    sx={{\n                      fontSize: 20,\n                      color: 'primary.main',\n                      visibility: option === selected ? 'visible' : 'hidden',\n                    }}\n                  >\n                    check\n                  </Icon>\n                </ListItemIcon>\n                {option}\n              </MenuItem>\n            ))}\n          </Menu>\n\n          <Box sx={{ display: 'flex', alignItems: 'center', gap: 0.5, flexShrink: 0 }}>\n            {onExpand && (\n              <IconButton aria-label={expandAriaLabel} size=\"small\" onClick={onExpand} sx={iconButtonSx}>\n                <PinEndIcon />\n              </IconButton>\n            )}\n            {onMore && (\n              <IconButton aria-label={moreAriaLabel} size=\"small\" onClick={onMore} sx={iconButtonSx}>\n                <Icon baseClassName=\"material-icons-outlined\" sx={{ fontSize: 22 }}>more_vert</Icon>\n              </IconButton>\n            )}\n            {onClose && (\n              <IconButton aria-label={closeAriaLabel} size=\"small\" onClick={onClose} sx={iconButtonSx}>\n                <Icon baseClassName=\"material-icons-outlined\" sx={{ fontSize: 22 }}>close</Icon>\n              </IconButton>\n            )}\n          </Box>\n        </Box>\n        )}\n\n        <Box\n          ref={scrollRef}\n          data-testid=\"chat-message-thread\"\n          sx={{\n            flex: '1 1 auto',\n            minHeight: 0,\n            overflowY: 'auto',\n            p: (theme) => theme.spacing(1, 2, 2),\n            display: 'flex',\n            flexDirection: 'column',\n            gap: 2,\n          }}\n        >\n          {renderMessageThread ? renderMessageThread({\n            renderToolMessage: renderToolMessageSlot,\n            renderTypingIndicator: renderTypingIndicatorSlot,\n          }) : messages.map((message) => {\n            if (message.kind === 'tool') {\n              return renderToolMessageSlot(message);\n            }\n\n            return <ChatMessage key={message.id} message={message} userLabel={userLabel} assistantLabel={assistantLabel} />;\n          })}\n          {!renderMessageThread && renderTypingIndicatorSlot()}\n        </Box>\n\n        {displayedAttachments.length > 0 && (\n          <Box sx={{ flexShrink: 0, px: 2, pt: 1 }}>\n            {displayedAttachments.map((attachment) => renderAttachment ? (\n              <Box\n                key={attachment.id}\n                data-attachment-status={attachment.status ?? 'done'}\n                role={attachment.status === 'error' ? 'alert' : undefined}\n                aria-label={attachment.status === 'error' ? `Attachment ${attachment.name} failed to upload` : undefined}\n              >\n                {renderAttachment(attachment)}\n              </Box>\n            ) : (\n              <Box\n                key={attachment.id}\n                data-attachment-status={attachment.status ?? 'done'}\n                role={attachment.status === 'error' ? 'alert' : undefined}\n                aria-label={attachment.status === 'error' ? `Attachment ${attachment.name} failed to upload` : undefined}\n                sx={{ display: 'inline-flex', flexDirection: 'column', width: 'fit-content', minWidth: 0, maxWidth: '100%', mr: 1, mb: 0.5 }}\n              >\n                <ThemedChip\n                  label={attachment.name}\n                  onDelete={() => onRemoveAttachment?.(attachment.id)}\n                  size=\"sm\"\n                  variant=\"filled-primary\"\n                  sx={{ maxWidth: '100%', '& .MuiChip-label': { overflow: 'hidden', textOverflow: 'ellipsis' } }}\n                />\n                {(attachment.status === 'pending' || attachment.status === 'uploading') && (\n                  <LinearProgress variant=\"determinate\" value={Math.min(attachment.progress ?? 0, 100)} sx={{ mt: 0.5, borderRadius: 999 }} />\n                )}\n              </Box>\n            ))}\n          </Box>\n        )}\n        {uploadProgress !== undefined && (\n          <Box sx={{ flexShrink: 0, px: 2, pb: 0.5 }}>\n            <LinearProgress variant=\"determinate\" value={Math.min(uploadProgress, 100)} sx={{ borderRadius: 999 }} />\n            {uploadProgressLabel && <Typography variant=\"caption\" color=\"text.secondary\">{uploadProgressLabel}</Typography>}\n          </Box>\n        )}\n\n        <Box component=\"footer\" sx={{ flexShrink: 0, p: (theme) => theme.spacing(1, 2, 1.5) }}>\n          <Box\n            data-testid=\"chat-composer\"\n            sx={{\n              bgcolor: 'inflow.navy100',\n              borderRadius: `${inflowTokens.radius.sm}px`,\n              p: (theme) => theme.spacing(1, 0.5, 1, 1.5),\n              display: 'flex',\n              alignItems: 'center',\n              gap: 1,\n              minHeight: 56,\n            }}\n          >\n            {showAttach && (\n              <input ref={fileInputRef} data-testid=\"chat-file-input\" type=\"file\" hidden multiple onChange={(event) => {\n                const files = event.target.files;\n                if (files) onAttachFile?.(Array.from(files));\n                event.target.value = '';\n              }} />\n            )}\n            {tools?.length ? (\n              // A single leading `+` opens one menu; when attach is also enabled it\n              // becomes the menu's first item so the composer never shows two `+`.\n              <>\n                <IconButton\n                  id={toolsTriggerId}\n                  aria-label={toolsAriaLabel}\n                  aria-haspopup=\"menu\"\n                  aria-expanded={Boolean(toolsAnchorEl)}\n                  aria-controls={toolsAnchorEl ? toolsMenuId : undefined}\n                  onClick={(event) => setToolsAnchorEl(event.currentTarget)}\n                  sx={{ color: 'text.secondary', width: 32, height: 32 }}\n                >\n                  <Icon baseClassName=\"material-icons-outlined\" sx={{ fontSize: 24 }}>add</Icon>\n                </IconButton>\n                <Menu\n                  anchorEl={toolsAnchorEl}\n                  open={Boolean(toolsAnchorEl)}\n                  onClose={() => setToolsAnchorEl(null)}\n                  slotProps={{ list: { id: toolsMenuId, 'aria-labelledby': toolsTriggerId } }}\n                >\n                  {showAttach && (\n                    <MenuItem key=\"__attach\" onClick={() => {\n                      setToolsAnchorEl(null);\n                      fileInputRef.current?.click();\n                    }}>\n                      {attachAriaLabel}\n                    </MenuItem>\n                  )}\n                  {tools.map((tool) => (\n                    <MenuItem key={tool.id} disabled={tool.disabled} title={tool.disabled ? tool.disabledLabel : undefined} onClick={() => {\n                      setToolsAnchorEl(null);\n                      onToolSelect?.(tool.id);\n                    }}>\n                      {tool.label}\n                    </MenuItem>\n                  ))}\n                </Menu>\n              </>\n            ) : showAttach ? (\n              <IconButton aria-label={attachAriaLabel} onClick={() => fileInputRef.current?.click()} sx={{ color: 'text.secondary', width: 32, height: 32 }}>\n                <Icon baseClassName=\"material-icons-outlined\" sx={{ fontSize: 24 }}>add</Icon>\n              </IconButton>\n            ) : null}\n            <Box sx={{ flex: '1 1 auto', minWidth: 0 }}>\n              <InputBase\n                value={inputValue}\n                onChange={(event) => onInputChange?.(event.target.value)}\n                onKeyDown={handleInputKeyDown}\n                placeholder={inputPlaceholder}\n                disabled={isInputDisabled}\n                multiline={multiline}\n                maxRows={multiline ? maxRows : undefined}\n                inputProps={{ 'aria-label': inputPlaceholder, maxLength: charLimit }}\n                sx={{\n                  color: 'text.primary',\n                  width: '100%',\n                  '& .MuiInputBase-input': { fontSize: '1rem', lineHeight: 1.5, letterSpacing: '0.15px', p: '4px 0' },\n                }}\n              />\n              {showInputHint && inputHint && (\n                <Typography variant=\"caption\" color=\"text.secondary\" sx={{ lineHeight: '16px', letterSpacing: '0.4px' }}>\n                  {inputHint}\n                </Typography>\n              )}\n            </Box>\n            {isStreaming && onStop ? (\n              <IconButton aria-label={stopAriaLabel} onClick={onStop} sx={sendButtonSx}>\n                <Icon baseClassName=\"material-icons-outlined\" sx={{ fontSize: 24 }}>stop</Icon>\n              </IconButton>\n            ) : (\n              <IconButton aria-label={sendAriaLabel} onClick={handleSend} disabled={sendDisabled} sx={sendButtonSx}>\n                <SendIcon />\n              </IconButton>\n            )}\n          </Box>\n\n          <Box sx={{ display: 'flex', justifyContent: 'space-between', alignItems: 'center', pt: 0.5 }}>\n            {showCredits && credits ? (\n              <Box sx={{ display: 'flex', alignItems: 'center', gap: 0.5 }}>\n                <Typography variant=\"caption\" color=\"text.disabled\" sx={{ fontSize: '0.75rem', lineHeight: '16px', letterSpacing: '0.4px' }}>\n                  {typeof creditsLabel === 'function'\n                    ? creditsLabel(credits.used, credits.total)\n                    : `${creditsLabel} ${credits.used}/${credits.total}`}\n                </Typography>\n                <Icon baseClassName=\"material-icons-outlined\" sx={{ fontSize: 16, color: 'text.disabled' }}>info</Icon>\n              </Box>\n            ) : <span />}\n            {showCharCount && (\n              <Typography variant=\"caption\" color=\"primary\" sx={{ fontSize: '0.75rem', lineHeight: '16px', letterSpacing: '0.4px' }}>\n                {charCount} / {charLimit}\n              </Typography>\n            )}\n          </Box>\n\n          <Typography\n            variant=\"caption\"\n            color=\"text.disabled\"\n            sx={{ display: 'block', textAlign: 'center', fontSize: '0.6875rem', fontWeight: 500, lineHeight: '16px', letterSpacing: '0.5px', mt: 0.5 }}\n          >\n            {aiDisclaimer}\n          </Typography>\n        </Box>\n      </Box>\n    );\n  },\n);\n\nThemedChatPanel.displayName = 'ThemedChatPanel';\n\nfunction ChatMessage({\n  message,\n  userLabel,\n  assistantLabel,\n}: {\n  message: ThemedChatMessageDef;\n  userLabel: string;\n  assistantLabel: string;\n}) {\n  const [selectedChips, setSelectedChips] = useState<Set<string>>(new Set());\n  const isAssistant = message.role === 'assistant';\n\n  const toggleChip = (chip: string) => {\n    setSelectedChips((previous) => {\n      const next = new Set(previous);\n      if (next.has(chip)) next.delete(chip);\n      else next.add(chip);\n      return next;\n    });\n  };\n\n  if (!isAssistant) {\n    return (\n      <Box data-chat-role=\"user\" sx={{ display: 'flex', flexDirection: 'column', alignItems: 'flex-end', gap: 1 }}>\n        <Box sx={{ display: 'flex', alignItems: 'center', justifyContent: 'flex-end', gap: 1.25 }}>\n          <Typography variant=\"caption\" sx={{ fontSize: 12, fontWeight: 500, lineHeight: '20px', letterSpacing: '0.14px', color: 'text.secondary' }}>\n            {userLabel}\n          </Typography>\n          <Icon baseClassName=\"material-icons-outlined\" sx={{ fontSize: 24, color: 'info.main' }}>person</Icon>\n        </Box>\n        <Box\n          data-testid=\"chat-user-bubble\"\n          sx={{\n            bgcolor: 'inflow.navy100',\n            borderRadius: '10px',\n            p: 1.25,\n            maxWidth: '75%',\n            minWidth: 0,\n            textAlign: 'right',\n          }}\n        >\n          <Typography\n            variant=\"body2\"\n            color=\"text.primary\"\n            component=\"div\"\n            sx={{ lineHeight: '20px', letterSpacing: '0.17px', overflowWrap: 'anywhere' }}\n          >\n            {message.content}\n          </Typography>\n        </Box>\n      </Box>\n    );\n  }\n\n  return (\n    <Box data-chat-role=\"assistant\" sx={{ display: 'flex', flexDirection: 'column', gap: 1 }}>\n      <Box sx={{ display: 'flex', alignItems: 'center', gap: 1.25 }}>\n        <Icon baseClassName=\"material-icons-outlined\" sx={{ fontSize: 24, color: 'info.main', flexShrink: 0 }}>smart_toy</Icon>\n        <Typography variant=\"caption\" sx={{ fontSize: 12, fontWeight: 500, lineHeight: '20px', letterSpacing: '0.14px', color: 'text.secondary' }}>\n          {assistantLabel}\n        </Typography>\n      </Box>\n      <Typography\n        variant=\"body2\"\n        color=\"text.primary\"\n        component=\"div\"\n        sx={{\n          lineHeight: '20px',\n          letterSpacing: '0.17px',\n          overflowWrap: 'break-word',\n          wordBreak: 'keep-all',\n          minWidth: 0,\n        }}\n      >\n        {message.content}\n      </Typography>\n      {message.chips && message.chips.length > 0 && (\n        <Box sx={{ display: 'flex', flexWrap: 'wrap', gap: 1 }}>\n          {message.chips.map((chip) => (\n            <ThemedChip\n              key={chip}\n              label={chip}\n              variant={selectedChips.has(chip) ? 'filled-primary' : 'outlined'}\n              color=\"primary\"\n              size=\"sm\"\n              aria-pressed={selectedChips.has(chip)}\n              onClick={() => toggleChip(chip)}\n              sx={[\n                { '&&.MuiChip-sizeSmall': { paddingLeft: '12px', paddingRight: '12px' } },\n                selectedChips.has(chip) ? selectedSurfaceSx : {},\n              ]}\n            />\n          ))}\n        </Box>\n      )}\n      {message.actions && message.actions.length > 0 && (\n        <Box sx={{ display: 'flex', flexWrap: 'wrap', gap: 1 }}>\n          {message.actions.map((action) => (\n            <Button\n              key={action}\n              variant=\"outlined\"\n              size=\"small\"\n              sx={{ height: 32, px: 2 }}\n            >\n              {action}\n            </Button>\n          ))}\n        </Box>\n      )}\n    </Box>\n  );\n}\n","import { Box, Icon, IconButton, Typography } from '@mui/material';\nimport { forwardRef, type ReactNode } from 'react';\n\nexport interface ThemedDetailPanelSectionProps {\n  title: ReactNode;\n  headerAction?: ReactNode;\n  children: ReactNode;\n}\n\nexport interface ThemedDetailPanelProps {\n  title: ReactNode;\n  onClose?: () => void;\n  children?: ReactNode;\n  actions?: ReactNode;\n  width?: number | string;\n}\n\nexport const ThemedDetailPanel = forwardRef<HTMLDivElement, ThemedDetailPanelProps>(\n  function ThemedDetailPanel({ title, onClose, children, actions, width = '100%' }, ref) {\n    return (\n      <Box\n        ref={ref}\n        sx={{\n          display: 'flex',\n          flexDirection: 'column',\n          width,\n          height: '100%',\n          overflow: 'hidden',\n        }}\n      >\n        <Box\n          sx={(theme) => ({\n            display: 'flex',\n            alignItems: 'center',\n            justifyContent: 'space-between',\n            padding: theme.spacing(2, 2, 1.5, 2),\n            flexShrink: 0,\n          })}\n        >\n          <Typography variant=\"h6\" sx={{ fontWeight: 700, lineHeight: '28px', color: 'primary.main' }}>\n            {title}\n          </Typography>\n          {onClose && (\n            <IconButton\n              aria-label=\"Close detail panel\"\n              size=\"small\"\n              onClick={onClose}\n              sx={{ color: 'text.secondary', borderRadius: 1 }}\n            >\n              <Icon baseClassName=\"material-icons-outlined\" sx={{ fontSize: 24 }}>\n                close\n              </Icon>\n            </IconButton>\n          )}\n        </Box>\n\n        <Box\n          sx={(theme) => ({\n            flex: '1 1 auto',\n            overflowY: 'auto',\n            padding: theme.spacing(0, 2, 2),\n            display: 'flex',\n            flexDirection: 'column',\n            gap: theme.spacing(2.5),\n          })}\n        >\n          {children}\n        </Box>\n\n        {actions && (\n          <Box\n            sx={(theme) => ({\n              display: 'flex',\n              justifyContent: 'flex-end',\n              gap: theme.spacing(1),\n              padding: theme.spacing(2),\n              flexShrink: 0,\n            })}\n          >\n            {actions}\n          </Box>\n        )}\n      </Box>\n    );\n  },\n);\n\nThemedDetailPanel.displayName = 'ThemedDetailPanel';\n\nexport const ThemedDetailPanelSection = forwardRef<HTMLDivElement, ThemedDetailPanelSectionProps>(\n  function ThemedDetailPanelSection({ title, headerAction, children }, ref) {\n    return (\n      <Box ref={ref} sx={(theme) => ({ display: 'flex', flexDirection: 'column', gap: theme.spacing(1.5) })}>\n        {(title || headerAction) && (\n          <Box sx={(theme) => ({ display: 'flex', alignItems: 'center', gap: theme.spacing(1) })}>\n            <Typography variant=\"subtitle2\" sx={{ fontWeight: 700, color: 'primary.main', lineHeight: '20px' }}>\n              {title}\n            </Typography>\n            {headerAction}\n          </Box>\n        )}\n        {children}\n      </Box>\n    );\n  },\n);\n\nThemedDetailPanelSection.displayName = 'ThemedDetailPanelSection';\n","import { forwardRef } from 'react';\nimport {\n  Dialog, \n  DialogTitle, \n  DialogContent, \n  DialogActions,\n  IconButton\n} from '@mui/material';\nimport type { DialogProps } from '@mui/material';\nimport type { Theme } from '@mui/material/styles';\n\nexport interface ThemedDialogProps extends Omit<DialogProps, 'title'> {\n  /** The title of the dialog */\n  title?: React.ReactNode;\n  /** Actions to render at the bottom of the dialog */\n  actions?: React.ReactNode;\n  /** Callback fired when the component requests to be closed */\n  onClose?: (event: object, reason: \"backdropClick\" | \"escapeKeyDown\" | \"closeButtonClick\") => void;\n  /** Hide the default close button in the header */\n  hideCloseButton?: boolean;\n}\n\n/**\n * ThemedDialog\n * \n * A pre-rendered, themed dialog component that follows the Inflow design system.\n * Built-in slots for title, actions, and content, styling them with Inflow tokens.\n *\n * @example\n * ```tsx\n * import { ThemedDialog, ThemedButton } from '@/components/themed';\n *\n * <ThemedDialog\n *   open={isOpen}\n *   onClose={handleClose}\n *   title=\"Edit Profile\"\n *   actions={<ThemedButton onClick={handleClose}>Save</ThemedButton>}\n * >\n *   Dialog content goes here\n * </ThemedDialog>\n * ```\n */\nexport const ThemedDialog = forwardRef<HTMLDivElement, ThemedDialogProps>(\n  ({ title, actions, children, onClose, hideCloseButton = false, sx, ...props }, ref) => {\n    return (\n      <Dialog\n        ref={ref}\n        onClose={onClose}\n        sx={[...(Array.isArray(sx) ? sx : [sx])]}\n        {...props}\n        slotProps={{\n          paper: {\n            sx: (theme: Theme) => ({\n              borderRadius: `${Number(theme.shape.borderRadius) * 5.6}px`,\n            }),\n          }\n        }}>\n        {title && (\n          <DialogTitle\n            sx={(theme: Theme) => ({\n              backgroundColor: 'inflow.surfaceHighest',\n              padding: theme.spacing(3),\n              fontSize: '1.5rem',\n              fontWeight: 400,\n              lineHeight: 1.334,\n              letterSpacing: 0,\n              display: 'flex',\n              justifyContent: 'space-between',\n              alignItems: 'center'\n            })}\n          >\n            {title}\n            {!hideCloseButton && onClose && (\n              <IconButton\n                aria-label=\"close\"\n                onClick={(e) => onClose(e, 'closeButtonClick')}\n                sx={{\n                  color: 'text.secondary',\n                }}\n              >\n                <svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n                  <path d=\"M19 6.41L17.59 5L12 10.59L6.41 5L5 6.41L10.59 12L5 17.59L6.41 19L12 13.41L17.59 19L19 17.59L13.41 12L19 6.41Z\" fill=\"currentColor\"/>\n                </svg>\n              </IconButton>\n            )}\n          </DialogTitle>\n        )}\n\n        <DialogContent sx={(theme: Theme) => ({ padding: theme.spacing(3), paddingTop: `${theme.spacing(3)} !important` })}>\n          {children}\n        </DialogContent>\n\n        {actions && (\n          <DialogActions sx={(theme: Theme) => ({ padding: theme.spacing(1, 3, 3) })}>\n            {actions}\n          </DialogActions>\n        )}\n      </Dialog>\n    );\n  }\n);\n\nThemedDialog.displayName = 'ThemedDialog';\n","import { memo } from 'react';\nimport SvgIcon from '@mui/material/SvgIcon';\nimport { useTheme } from '@mui/material/styles';\nimport { inflowFileTypeColors, inflowFileTypeExtensions, normalizeFileExtension } from '../../theme/fileTypes';\nimport type { InflowFileTypeFamily } from '../../theme/fileTypes';\n\nexport interface ThemedFileTypeIconProps {\n  /** \"pdf\", \".PDF\", or \"report.docx\". Any extension renders. */\n  extension: string;\n  /** 'sm' is 24x28, 'md' is 48x56, or a width in px (height is 7/6 of the width). */\n  size?: 'sm' | 'md' | number;\n  /** Overrides the accessible name. Defaults to \"PDF file\". */\n  title?: string;\n  /** Hides the icon from assistive technology when a file name is shown beside it. */\n  decorative?: boolean;\n  /** 'auto' colors known formats; 'neutral' always uses the text color. */\n  tone?: 'auto' | 'neutral';\n}\n\nconst WIDTH = { sm: 24, md: 48 } as const;\n\nconst FAMILY_BY_EXTENSION = new Map<string, InflowFileTypeFamily>(\n  (Object.keys(inflowFileTypeExtensions) as InflowFileTypeFamily[]).flatMap((family) =>\n    inflowFileTypeExtensions[family].map((extension) => [extension, family] as const),\n  ),\n);\n\n/**\n * ThemedFileTypeIcon\n *\n * A page outline with a folded corner and a solid label that carries the file\n * extension. The text identifies the format; color only reinforces it.\n */\nexport const ThemedFileTypeIcon = memo(function ThemedFileTypeIcon({\n  extension,\n  size = 'sm',\n  title,\n  decorative = false,\n  tone = 'auto',\n}: ThemedFileTypeIconProps) {\n  const { palette } = useTheme();\n  const isDark = palette.mode === 'dark';\n  const ext = normalizeFileExtension(extension) || 'FILE';\n  const text = ext.length > 5 ? `${ext.slice(0, 4)}…` : ext;\n  const fontSize = ext.length <= 3 ? 7 : ext.length === 4 ? 6 : 5;\n  const width = typeof size === 'number' ? size : WIDTH[size];\n  const family = tone === 'auto' ? FAMILY_BY_EXTENSION.get(ext) : undefined;\n  const brand = family ? inflowFileTypeColors[family][isDark ? 'dark' : 'light'] : palette.text.primary;\n  const paper = palette.background.paper;\n  const labelColor = isDark ? palette.background.paper : palette.common.white;\n\n  return (\n    <SvgIcon\n      viewBox=\"0 0 24 28\"\n      titleAccess={decorative ? undefined : (title ?? `${ext} file`)}\n      sx={{\n        width,\n        height: (width * 28) / 24,\n        flex: 'none',\n        color: brand,\n        '@media (forced-colors: active)': { forcedColorAdjust: 'auto' },\n      }}\n    >\n      <path\n        d=\"M6.5 .75H14l5.5 5.5V25a2 2 0 0 1-2 2h-11a2 2 0 0 1-2-2V2.75a2 2 0 0 1 2-2Z\"\n        fill={paper}\n        stroke={brand}\n        strokeWidth={1.5}\n        strokeLinejoin=\"round\"\n      />\n      <path d=\"M14 .75v5.5h5.5\" fill=\"none\" stroke={brand} strokeWidth={1.5} strokeLinejoin=\"round\" />\n      <rect x={1} y={13} width={22} height={8.5} rx={1.8} fill={brand} />\n      <text\n        x={12}\n        y={17.25 + fontSize * 0.36}\n        textAnchor=\"middle\"\n        fontSize={fontSize}\n        fontWeight={700}\n        fill={labelColor}\n        fontFamily=\"Inter, system-ui, sans-serif\"\n        aria-hidden\n      >\n        {text}\n      </text>\n    </SvgIcon>\n  );\n});\n","import { forwardRef, Fragment } from 'react';\nimport {\n  Box,\n  Divider,\n  Icon,\n  ListItemIcon,\n  ListItemText,\n  Menu,\n  MenuItem,\n  Tooltip,\n} from '@mui/material';\nimport type { ReactNode } from 'react';\n\nexport interface ThemedMenuItemDef {\n  id: string;\n  label: ReactNode;\n  icon?: string;\n  shortcut?: string;\n  disabled?: boolean;\n  selected?: boolean;\n  /** Renders a divider before this item. */\n  dividerBefore?: boolean;\n  /** Prevents selection and shows a lock icon. */\n  locked?: boolean;\n  /** Tooltip shown on hover when the item is locked. */\n  lockedTooltip?: string;\n}\n\nexport interface ThemedMenuProps {\n  anchorEl: Element | null;\n  open: boolean;\n  onClose: () => void;\n  items: ThemedMenuItemDef[];\n  onSelect?: (id: string) => void;\n  dense?: boolean;\n}\n\nexport const ThemedMenu = forwardRef<HTMLDivElement, ThemedMenuProps>(\n  ({ anchorEl, open, onClose, items, onSelect, dense = false }, ref) => (\n    <Menu\n      ref={ref}\n      anchorEl={anchorEl}\n      open={open}\n      onClose={onClose}\n      slotProps={{\n        list: { dense },\n        paper: {\n          elevation: 0,\n          sx: {\n            minWidth: 200,\n            borderRadius: 0,\n            boxShadow: 'none',\n          },\n        },\n      }}\n    >\n      {items.map((item) => (\n        <Fragment key={item.id}>\n          {item.dividerBefore && <Divider />}\n          <Tooltip\n            title={item.locked ? (item.lockedTooltip ?? '') : ''}\n            placement=\"bottom-end\"\n            disableHoverListener={!item.locked}\n            disableFocusListener={!item.locked}\n            disableTouchListener={!item.locked}\n          >\n            <MenuItem\n              disabled={item.disabled}\n              selected={item.selected}\n              onClick={item.locked ? undefined : () => {\n                onSelect?.(item.id);\n                onClose();\n              }}\n              sx={{\n                ...(item.locked && {\n                  cursor: 'default',\n                  '&:hover': { backgroundColor: 'transparent' },\n                }),\n              }}\n            >\n              {item.icon && (\n                <ListItemIcon sx={{ minWidth: 32, color: 'text.secondary' }}>\n                  <Icon baseClassName=\"material-icons-outlined\" sx={{ fontSize: 20 }}>\n                    {item.icon}\n                  </Icon>\n                </ListItemIcon>\n              )}\n              <ListItemText\n                primary={item.label}\n                slotProps={{\n                  primary: {\n                    variant: 'body2',\n                    sx: {\n                      fontWeight: item.selected ? 500 : 400,\n                      color: item.locked ? 'text.disabled' : undefined,\n                    },\n                  },\n                }}\n              />\n              {item.locked && (\n                <Icon\n                  baseClassName=\"material-icons-outlined\"\n                  sx={{ fontSize: 18, color: 'text.disabled', flexShrink: 0 }}\n                >\n                  lock\n                </Icon>\n              )}\n              {!item.locked && item.shortcut && (\n                <Box\n                  component=\"span\"\n                  sx={{\n                    fontSize: '0.75rem',\n                    color: (theme) => theme.palette.inflow.outline,\n                    ml: 2,\n                    flexShrink: 0,\n                  }}\n                >\n                  {item.shortcut}\n                </Box>\n              )}\n            </MenuItem>\n          </Tooltip>\n        </Fragment>\n      ))}\n    </Menu>\n  ),\n);\n\nThemedMenu.displayName = 'ThemedMenu';\n","\"use client\";\n\nimport createSvgIcon from \"./utils/createSvgIcon.mjs\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nexport default createSvgIcon(/*#__PURE__*/_jsx(\"path\", {\n  d: \"M20 11H7.83l5.59-5.59L12 4l-8 8 8 8 1.41-1.41L7.83 13H20z\"\n}), 'ArrowBackOutlined');","import { forwardRef } from 'react';\nimport { Box, IconButton, Stack, Typography } from '@mui/material';\nimport ArrowBackOutlinedIcon from '@mui/icons-material/ArrowBackOutlined';\nimport type { CSSProperties, ReactNode } from 'react';\nimport { ThemedButton } from './ThemedButton';\n\nexport interface PageHeaderAction {\n  label: string;\n  variant?: 'outlined' | 'filled';\n  onClick?: () => void;\n}\n\nexport interface PageHeaderProps {\n  eyebrow?: string;\n  /** Breadcrumb trail shown above the title in place of the eyebrow, e.g. a `ThemedBreadcrumbs`. */\n  breadcrumbs?: ReactNode;\n  title?: string;\n  onBack?: () => void;\n  actions?: PageHeaderAction[];\n  style?: CSSProperties;\n}\n\nexport type ThemedPageHeaderProps = PageHeaderProps;\n\n/**\n * ThemedPageHeader\n *\n * Inflow's structural page chrome for an optional back action, page context,\n * and page-level actions.\n */\nexport const ThemedPageHeader = forwardRef<HTMLDivElement, ThemedPageHeaderProps>(\n  ({ eyebrow, breadcrumbs, title, onBack, actions = [], style }, ref) => (\n    <Box\n      ref={ref}\n      style={style}\n      sx={(theme) => ({\n        alignItems: 'center',\n        backgroundColor: theme.palette.inflow.appBackground,\n        boxSizing: 'border-box',\n        display: 'flex',\n        gap: theme.spacing(2),\n        minHeight: 76,\n        padding: theme.spacing(1.25, 3),\n      })}\n    >\n      {onBack && (\n        <IconButton\n          aria-label=\"Back\"\n          color=\"primary\"\n          onClick={onBack}\n          sx={(theme) => ({\n            backgroundColor: theme.palette.primary.main,\n            color: theme.palette.primary.contrastText,\n            flexShrink: 0,\n            height: 40,\n            width: 40,\n            '&:hover': { backgroundColor: theme.palette.primary.dark },\n          })}\n        >\n          <ArrowBackOutlinedIcon />\n        </IconButton>\n      )}\n\n      <Box sx={{ display: 'flex', flex: 1, flexDirection: 'column', minWidth: 0 }}>\n        {breadcrumbs ??\n          (eyebrow && (\n            <Typography color=\"primary\" variant=\"body2\">\n              {eyebrow}\n            </Typography>\n          ))}\n        {title && (\n          <Typography color=\"primary\" component=\"h1\" variant=\"h6\">\n            {title}\n          </Typography>\n        )}\n      </Box>\n\n      {actions.length > 0 && (\n        <Stack direction=\"row\" spacing={2} sx={{ alignItems: 'center', flexShrink: 0 }}>\n          {actions.map((action, index) => (\n            <ThemedButton\n              key={`${action.label}-${index}`}\n              onClick={action.onClick}\n              sx={action.variant !== 'filled' ? { backgroundColor: 'background.paper', '&:hover': { backgroundColor: 'background.paper' } } : undefined}\n              variant={action.variant === 'filled' ? 'contained' : 'outlined'}\n            >\n              {action.label}\n            </ThemedButton>\n          ))}\n        </Stack>\n      )}\n    </Box>\n  ),\n);\n\nThemedPageHeader.displayName = 'ThemedPageHeader';\n","import {\n  Box,\n  Button,\n  Fade,\n  Slide,\n  useTheme,\n} from '@mui/material';\nimport {\n  forwardRef,\n  useCallback,\n  useEffect,\n  useImperativeHandle,\n  useRef,\n  useState,\n  type ReactNode,\n} from 'react';\nimport { ThemedDialog } from './ThemedDialog';\n\nexport type ThemedRightPanelMode = 'push' | 'overlay';\nexport type ThemedRightPanelWidth = 'narrow' | 'medium' | 'wide';\nexport type ThemedRightPanelVariant = 'assistant' | 'editor' | 'modal';\n\nexport interface ThemedRightPanelRenderApi {\n  requestClose: () => void;\n}\n\nconst WIDTH_PX: Record<ThemedRightPanelWidth, number> = {\n  narrow: 320,\n  medium: 400,\n  wide: 520,\n};\n\nconst CSS_VAR = '--infl-right-panel-width';\nconst MIN_WIDTH = 280;\nconst MAX_WIDTH = 720;\n\ninterface ActivePanelRegistration {\n  id: symbol;\n  requestReplacement: () => Promise<boolean>;\n}\n\nlet activePanel: ActivePanelRegistration | null = null;\n\nexport interface ThemedRightPanelProps {\n  open: boolean;\n  mode?: ThemedRightPanelMode;\n  variant?: ThemedRightPanelVariant;\n  width?: ThemedRightPanelWidth;\n  onClose: () => void;\n  hasUnsavedChanges?: boolean;\n  resizable?: boolean;\n  closeOnNavigation?: boolean;\n  topOffset?: number;\n  children?: ReactNode | ((api: ThemedRightPanelRenderApi) => ReactNode);\n  'aria-label'?: string;\n}\n\nexport const ThemedRightPanel = forwardRef<HTMLDivElement, ThemedRightPanelProps>(\n  function ThemedRightPanel(\n    {\n      open,\n      mode = 'push',\n      variant = 'assistant',\n      width,\n      onClose,\n      hasUnsavedChanges = false,\n      resizable,\n      closeOnNavigation,\n      topOffset = 64,\n      children,\n      'aria-label': ariaLabel = 'Right panel',\n    },\n    ref,\n  ) {\n    const theme = useTheme();\n    const panelId = useRef(Symbol('themed-right-panel'));\n    const panelRef = useRef<HTMLDivElement>(null);\n    const dragRef = useRef<{ startX: number; startWidth: number } | null>(null);\n    const replacementResolverRef = useRef<((replace: boolean) => void) | null>(null);\n    const [discardOpen, setDiscardOpen] = useState(false);\n    const resolvedWidth = width ?? (variant === 'assistant' ? 'medium' : 'wide');\n    const [panelWidth, setPanelWidth] = useState(WIDTH_PX[resolvedWidth]);\n    const [isDragging, setIsDragging] = useState(false);\n    const [activationGranted, setActivationGranted] = useState(false);\n    const visibleOpen = open && activationGranted;\n\n    useImperativeHandle(ref, () => panelRef.current!);\n\n    useEffect(() => {\n      setPanelWidth(WIDTH_PX[resolvedWidth]);\n    }, [resolvedWidth]);\n\n    useEffect(() => {\n      if (mode !== 'push' || !visibleOpen) return undefined;\n\n      const host = panelRef.current?.closest<HTMLElement>('[data-inflow-root]');\n      if (!host) return undefined;\n\n      host.style.setProperty(CSS_VAR, `${panelWidth}px`);\n      return () => host.style.setProperty(CSS_VAR, '0px');\n    }, [mode, panelWidth, visibleOpen]);\n\n    useEffect(() => {\n      if (mode !== 'overlay' || !visibleOpen) return undefined;\n\n      const { body } = document;\n      const previousOverflow = body.style.overflow;\n      body.style.overflow = 'hidden';\n      return () => {\n        body.style.overflow = previousOverflow;\n      };\n    }, [mode, visibleOpen]);\n\n    const requestClose = useCallback(() => {\n      if (hasUnsavedChanges) {\n        setDiscardOpen(true);\n      } else {\n        onClose();\n      }\n    }, [hasUnsavedChanges, onClose]);\n\n    const requestReplacement = useCallback(() => {\n      if (!hasUnsavedChanges) {\n        setActivationGranted(false);\n        onClose();\n        return Promise.resolve(true);\n      }\n\n      setDiscardOpen(true);\n      return new Promise<boolean>((resolve) => {\n        replacementResolverRef.current = resolve;\n      });\n    }, [hasUnsavedChanges, onClose]);\n\n    const keepEditing = useCallback(() => {\n      setDiscardOpen(false);\n      replacementResolverRef.current?.(false);\n      replacementResolverRef.current = null;\n    }, []);\n\n    const discardChanges = useCallback(() => {\n      setDiscardOpen(false);\n      setActivationGranted(false);\n      onClose();\n      replacementResolverRef.current?.(true);\n      replacementResolverRef.current = null;\n    }, [onClose]);\n\n    useEffect(() => {\n      let cancelled = false;\n      const registration: ActivePanelRegistration = {\n        id: panelId.current,\n        requestReplacement,\n      };\n\n      if (!open) {\n        setActivationGranted(false);\n        return undefined;\n      }\n\n      const activate = async () => {\n        const currentPanel = activePanel;\n        if (currentPanel && currentPanel.id !== registration.id) {\n          const canReplace = await currentPanel.requestReplacement();\n          if (cancelled) return;\n          if (!canReplace) {\n            onClose();\n            return;\n          }\n        }\n\n        if (cancelled) return;\n        activePanel = registration;\n        setActivationGranted(true);\n      };\n\n      void activate();\n      return () => {\n        cancelled = true;\n        if (activePanel?.id === registration.id) activePanel = null;\n        replacementResolverRef.current?.(false);\n        replacementResolverRef.current = null;\n      };\n    }, [onClose, open, requestReplacement]);\n\n    useEffect(() => {\n      const shouldCloseOnNavigation = closeOnNavigation ?? variant === 'editor';\n      if (!visibleOpen || !shouldCloseOnNavigation) return undefined;\n\n      const handleNavigation = () => requestClose();\n      window.addEventListener('hashchange', handleNavigation);\n      window.addEventListener('popstate', handleNavigation);\n      return () => {\n        window.removeEventListener('hashchange', handleNavigation);\n        window.removeEventListener('popstate', handleNavigation);\n      };\n    }, [closeOnNavigation, requestClose, variant, visibleOpen]);\n\n    useEffect(() => {\n      if (!visibleOpen) return undefined;\n\n      const handleKeyDown = (event: KeyboardEvent) => {\n        if (event.key === 'Escape') requestClose();\n      };\n\n      document.addEventListener('keydown', handleKeyDown);\n      return () => document.removeEventListener('keydown', handleKeyDown);\n    }, [requestClose, visibleOpen]);\n\n    useEffect(() => {\n      if (visibleOpen) panelRef.current?.focus();\n    }, [visibleOpen]);\n\n    useEffect(() => {\n      const onPointerMove = (event: PointerEvent) => {\n        if (!dragRef.current) return;\n\n        const nextWidth = Math.max(\n          MIN_WIDTH,\n          Math.min(MAX_WIDTH, dragRef.current.startWidth + dragRef.current.startX - event.clientX),\n        );\n        setPanelWidth(nextWidth);\n      };\n      const stopDragging = () => {\n        dragRef.current = null;\n        setIsDragging(false);\n      };\n\n      document.addEventListener('pointermove', onPointerMove);\n      document.addEventListener('pointerup', stopDragging);\n      document.addEventListener('pointercancel', stopDragging);\n      return () => {\n        document.removeEventListener('pointermove', onPointerMove);\n        document.removeEventListener('pointerup', stopDragging);\n        document.removeEventListener('pointercancel', stopDragging);\n      };\n    }, []);\n\n    const handlePointerDown = (event: React.PointerEvent<HTMLDivElement>) => {\n      event.preventDefault();\n      dragRef.current = { startX: event.clientX, startWidth: panelWidth };\n      setIsDragging(true);\n    };\n\n    const isOverlay = mode === 'overlay';\n    const canResize = resizable ?? variant !== 'modal';\n    const panelContent = typeof children === 'function' ? children({ requestClose }) : children;\n    const panelSx = {\n      position: 'fixed',\n      top: isOverlay ? 0 : topOffset,\n      right: 0,\n      bottom: 0,\n      width: panelWidth,\n      maxWidth: '100vw',\n      zIndex: isOverlay ? theme.zIndex.modal + 1 : variant === 'editor' ? theme.zIndex.appBar + 1 : theme.zIndex.appBar,\n      display: 'flex',\n      flexDirection: 'column',\n      overflow: 'hidden',\n      bgcolor: theme.palette.background.paper,\n      borderLeft: 1,\n      borderColor: theme.palette.divider,\n      boxShadow:\n        variant === 'editor'\n          ? '-10px 0 28px rgba(11,45,110,0.1)'\n          : variant === 'modal'\n            ? '-12px 0 32px rgba(11,45,110,0.2)'\n            : 'none',\n      fontFamily: String(theme.typography.fontFamily),\n    };\n\n    return (\n      <>\n        {isOverlay && (\n          <Fade in={visibleOpen} mountOnEnter unmountOnExit>\n            <Box\n              aria-hidden=\"true\"\n              data-testid=\"right-panel-backdrop\"\n              onClick={requestClose}\n              sx={{\n                position: 'fixed',\n                inset: 0,\n                zIndex: theme.zIndex.modal,\n                bgcolor: 'rgba(0, 0, 0, 0.5)',\n              }}\n            />\n          </Fade>\n        )}\n\n        <Slide direction=\"left\" in={visibleOpen} mountOnEnter unmountOnExit>\n          <Box\n            ref={panelRef}\n            component=\"aside\"\n            role=\"complementary\"\n            aria-label={ariaLabel}\n            tabIndex={-1}\n            sx={panelSx}\n          >\n            {canResize && (\n              <Box\n                aria-label=\"Resize panel\"\n                data-testid=\"right-panel-resize-handle\"\n                onPointerDown={handlePointerDown}\n                sx={{\n                  position: 'absolute',\n                  left: -3,\n                  top: 0,\n                  bottom: 0,\n                  width: 7,\n                  cursor: 'col-resize',\n                  touchAction: 'none',\n                  zIndex: 1,\n                  '&::after': {\n                    content: '\"\"',\n                    position: 'absolute',\n                    left: 3,\n                    top: 0,\n                    bottom: 0,\n                    width: 2,\n                    bgcolor: isDragging ? theme.palette.primary.main : 'transparent',\n                    transition: theme.transitions.create('background', {\n                      duration: theme.transitions.duration.shortest,\n                    }),\n                  },\n                }}\n              />\n            )}\n            <Box sx={{ flex: '1 1 auto', minHeight: 0, overflow: 'hidden', display: 'flex', flexDirection: 'column' }}>\n              {panelContent}\n            </Box>\n          </Box>\n        </Slide>\n\n        <ThemedDialog\n          open={discardOpen}\n          onClose={keepEditing}\n          title=\"Discard changes?\"\n          actions={(\n            <>\n              <Button variant=\"outlined\" onClick={discardChanges}>\n                Discard\n              </Button>\n              <Button variant=\"contained\" onClick={keepEditing}>\n                Keep Editing\n              </Button>\n            </>\n          )}\n        >\n          Your progress will be lost.\n        </ThemedDialog>\n      </>\n    );\n  },\n);\n\nThemedRightPanel.displayName = 'ThemedRightPanel';\n","import { forwardRef } from \"react\";\nimport {\n  Stepper,\n  Step,\n  StepLabel,\n  StepButton,\n  StepConnector,\n} from \"@mui/material\";\nimport { styled } from \"@mui/material/styles\";\nimport type { StepIconProps, StepperProps, Theme } from \"@mui/material\";\nimport { useTheme } from \"@mui/material/styles\";\n\nexport interface ThemedStep {\n  /** Label shown beneath the step icon. */\n  label: React.ReactNode;\n  /** Optional label rendered as MUI StepLabel's optionalLabel. */\n  optional?: React.ReactNode;\n  /** Marks the step as errored. */\n  error?: boolean;\n  /** Disables the step (passed to MUI Step). */\n  disabled?: boolean;\n}\n\nexport interface ThemedStepperProps extends Omit<StepperProps, \"children\"> {\n  /** Steps to render. */\n  steps: ThemedStep[];\n  /** Callback fired when a step label is clicked. Enables non-linear navigation. */\n  onStepClick?: (index: number) => void;\n  /** Renders read-only labels even when onStepClick is supplied. */\n  disableStepClick?: boolean;\n  /**\n   * Furthest step that has been completed. Steps before this index show a checkmark.\n   * Defaults to `activeStep`, which gives standard linear stepper behavior.\n   */\n  completedStep?: number;\n}\n\ninterface ThemedStepIconProps extends StepIconProps {\n  /** True when this step is ahead of the furthest reached step. */\n  isFuture?: boolean;\n}\n\nconst ICON_SIZE = 24;\nconst INNER_CIRCLE_SIZE = 16;\n\nconst StepIconRoot = styled(\"span\")<{ ownerState: ThemedStepIconProps }>(\n  ({ theme, ownerState }) => ({\n    position: \"relative\",\n    zIndex: 2,\n    width: ICON_SIZE,\n    height: ICON_SIZE,\n    borderRadius: \"50%\",\n    display: \"inline-flex\",\n    alignItems: \"center\",\n    justifyContent: \"center\",\n    boxSizing: \"border-box\",\n    border: `2px solid ${ownerState.active ? theme.palette.primary.main : \"transparent\"}`,\n    backgroundColor: \"transparent\",\n    color: ownerState.completed\n      ? theme.palette.common.white\n      : ownerState.active\n        ? theme.palette.primary.main\n        : theme.palette.text.secondary,\n  }),\n);\n\nconst InnerCircle = styled(\"span\")<{ ownerState: ThemedStepIconProps }>(\n  ({ theme, ownerState }) => ({\n    width: INNER_CIRCLE_SIZE,\n    height: INNER_CIRCLE_SIZE,\n    borderRadius: \"50%\",\n    display: \"inline-flex\",\n    alignItems: \"center\",\n    justifyContent: \"center\",\n    boxSizing: \"border-box\",\n    backgroundColor: ownerState.completed\n      ? theme.palette.primary.main\n      : \"transparent\",\n    border: ownerState.completed\n      ? \"none\"\n      : `2px solid ${theme.palette.text.secondary}`,    opacity: ownerState.isFuture ? 0.5 : 1,\n    transition: theme.transitions.create(\"opacity\"),\n  }),\n);\n\nconst InnerDot = styled(\"span\")(({ theme }) => ({\n  width: 12,\n  height: 12,\n  borderRadius: \"50%\",\n  backgroundColor: theme.palette.primary.main,\n}));\n\nfunction StepIconCheckmark() {\n  return (\n    <svg\n      width=\"10\"\n      height=\"10\"\n      viewBox=\"0 0 24 24\"\n      fill=\"none\"\n      stroke=\"currentColor\"\n      strokeWidth=\"3\"\n      strokeLinecap=\"round\"\n      strokeLinejoin=\"round\"\n      aria-hidden=\"true\"\n    >\n      <polyline points=\"20 6 9 17 4 12\" />\n    </svg>\n  );\n}\n\nfunction ThemedStepIcon(props: ThemedStepIconProps) {\n  const { active, completed, className } = props;\n\n  return (\n    <StepIconRoot\n      ownerState={props}\n      className={`MuiStepIcon-root${className ? ` ${className}` : \"\"}`}\n      aria-label={completed ? \"Completed\" : active ? \"Current\" : \"Incomplete\"}\n    >\n      {active ? (\n        <InnerDot />\n      ) : (\n        <InnerCircle ownerState={props}>\n          {completed ? <StepIconCheckmark /> : null}\n        </InnerCircle>\n      )}\n    </StepIconRoot>\n  );\n}\n\nconst HiddenStepConnector = styled(StepConnector)({\n  \"&&\": {\n    display: \"none\",\n  },\n});\n\nconst ThemedStepConnector = styled(StepConnector)(({ theme }) => ({\n  \"& .MuiStepConnector-line\": {\n    borderColor: theme.palette.inflow.outlineVariant,\n    borderTopWidth: 2,\n  },\n  \"&.Mui-active .MuiStepConnector-line, &.Mui-completed .MuiStepConnector-line\": {\n    borderColor: theme.palette.primary.main,\n  },\n}));\n\nfunction buildConnectorGradient(\n  steps: ThemedStep[],\n  activeStep: number,\n  completedStep: number | undefined,\n  theme: Theme,\n) {\n  if (steps.length < 2) return \"none\";\n  const furthestReached = Math.max(activeStep, completedStep ?? activeStep);\n  const segments: string[] = [];\n  for (let i = 0; i < steps.length - 1; i++) {\n    const startPct = (i / (steps.length - 1)) * 100;\n    const endPct = ((i + 1) / (steps.length - 1)) * 100;\n    const visibleStart = `calc(${startPct}% + ${ICON_SIZE / 2}px + var(--ThemedStepper-connector-reduction, 0px) / 2)`;\n    const visibleEnd = `calc(${endPct}% - ${ICON_SIZE / 2}px - var(--ThemedStepper-connector-reduction, 0px) / 2)`;\n    const color =\n      i < furthestReached\n        ? theme.palette.primary.main\n        : theme.palette.inflow.outlineVariant;\n    segments.push(\n      `transparent ${startPct}%`,\n      `transparent ${visibleStart}`,\n      `${color} ${visibleStart}`,\n      `${color} ${visibleEnd}`,\n      `transparent ${visibleEnd}`,\n      `transparent ${endPct}%`,\n    );\n  }\n  return `linear-gradient(to right, ${segments.join(\", \")})`;\n}\n\nconst selectedLabelStyle = (theme: Theme) => ({\n  color: theme.palette.primary.main,\n  textDecoration: \"underline\" as const,\n});\n\nconst ThemedStepLabel = styled(StepLabel)(({ theme }) => ({\n  \"& .MuiStepLabel-label\": {\n    color: theme.palette.text.secondary,\n    fontWeight: theme.typography.fontWeightMedium,\n    \"&.Mui-completed\": {\n      color: theme.palette.primary.main,\n    },\n  },\n  \"&.inflow-selected .MuiStepLabel-label\": selectedLabelStyle(theme),\n}));\n\nconst StyledStepButton = styled(StepButton)(({ theme }) => ({\n  \"& .MuiStepLabel-label\": {\n    color: theme.palette.text.secondary,\n    fontWeight: theme.typography.fontWeightMedium,\n  },\n  \"& .MuiStepLabel-label.Mui-completed\": {\n    color: theme.palette.primary.main,\n  },\n  \"&.inflow-selected .MuiStepLabel-label\": selectedLabelStyle(theme),\n  \"&.Mui-focusVisible\": {\n    outline: `2px solid ${theme.palette.primary.main}`,\n    outlineOffset: 2,\n  },\n}));\n\n/**\n * ThemedStepper\n *\n * A future-proof, scoped stepper component built on top of MUI's public Stepper APIs.\n * It renders the Inflow design-system stepper look: labels beneath icons, completed\n * steps as checkmarks in solid navy circles, active steps as navy circles with an inner\n * dot, and inactive steps as outlined grey circles. Connector lines and label colors\n * reflect each step's state.\n *\n * `activeStep` is the currently viewed step: it renders the ring + inner dot and is never\n * underlined. `completedStep` is the furthest reached step: those steps keep their checkmarks\n * and are underlined unless they are the active step. When `completedStep` is omitted, it\n * defaults to `activeStep`, giving standard linear stepper behavior.\n *\n * @example\n * ```tsx\n * import { ThemedStepper } from '@/components/themed';\n *\n * const steps = [\n *   { label: 'Configure' },\n *   { label: 'Options' },\n *   { label: 'Test' },\n *   { label: 'Review' },\n * ];\n *\n * <ThemedStepper activeStep={1} steps={steps} />\n * <ThemedStepper\n *   activeStep={currentStep}\n *   completedStep={furthestStep}\n *   steps={steps}\n *   onStepClick={(index) => {\n *     setCurrentStep(index);\n *     if (index > furthestStep) setFurthestStep(index);\n *   }}\n * />\n * ```\n */\nexport const ThemedStepper = forwardRef<HTMLDivElement, ThemedStepperProps>(\n  (\n    {\n      steps,\n      onStepClick,\n      disableStepClick,\n      completedStep,\n      alternativeLabel = true,\n      connector,\n      sx,\n      ...props\n    },\n    ref,\n  ) => {\n    const theme = useTheme();\n    const activeStep = props.activeStep ?? 0;\n    const furthestCompletedStep = completedStep ?? activeStep;\n    const clickable = Boolean(onStepClick) && !disableStepClick;\n    const connectorGradient = buildConnectorGradient(\n      steps,\n      activeStep,\n      completedStep,\n      theme,\n    );\n    const hasCustomConnector = connector !== undefined && connector !== null;\n    const useOverlayConnector = alternativeLabel && !hasCustomConnector;\n    const resolvedConnector = connector ?? (\n      alternativeLabel ? <HiddenStepConnector /> : <ThemedStepConnector />\n    );\n\n    return (\n      <Stepper\n        ref={ref}\n        alternativeLabel={alternativeLabel}\n        connector={resolvedConnector}\n        activeStep={activeStep}\n        sx={[\n          {\n            ...(alternativeLabel\n              ? {\n                  position: \"relative\",\n                  justifyContent: \"space-between\",\n                  \"--ThemedStepper-connector-reduction\": \"0px\",\n                  ...(useOverlayConnector\n                    ? {\n                        \"&::before\": {\n                          content: '\"\"',\n                          position: \"absolute\",\n                          top: \"11px\",\n                          left: \"12px\",\n                          right: \"12px\",\n                          height: \"2px\",\n                          zIndex: 0,\n                          pointerEvents: \"none\",\n                          borderRadius: \"1px\",\n                          background: connectorGradient,\n                        },\n                      }\n                    : {}),\n                  \"& .MuiStep-root\": {\n                    flex: `0 0 ${ICON_SIZE}px`,\n                    minWidth: 0,\n                    zIndex: 1,\n                    padding: 0,\n                    display: \"flex\",\n                    justifyContent: \"center\",\n                  },\n                  \"& .MuiStepLabel-root\": {\n                    width: ICON_SIZE,\n                    minWidth: ICON_SIZE,\n                    maxWidth: ICON_SIZE,\n                    boxSizing: \"border-box\",\n                  },\n                  \"& .MuiStepLabel-iconContainer, & .MuiStepButton-iconContainer\": {\n                    width: ICON_SIZE,\n                    height: ICON_SIZE,\n                    padding: 0,\n                    display: \"flex\",\n                    alignItems: \"center\",\n                    justifyContent: \"center\",\n                    lineHeight: 0,\n                  },\n                  \"& .MuiStepLabel-labelContainer\": {\n                    width: \"max-content\",\n                    whiteSpace: \"nowrap\",\n                  },\n                  \"& .MuiStep-root:first-of-type\": {\n                    justifyContent: \"flex-start\",\n                    \"& .MuiStepLabel-root\": {\n                      alignItems: \"flex-start\",\n                    },\n                    \"& .MuiStepLabel-labelContainer\": {\n                      textAlign: \"left\",\n                    },\n                    \"& .MuiStepLabel-label\": {\n                      textAlign: \"left\",\n                    },\n                  },\n                  \"& .MuiStep-root:last-of-type\": {\n                    justifyContent: \"flex-end\",\n                    \"& .MuiStepLabel-root\": {\n                      alignItems: \"flex-end\",\n                    },\n                    \"& .MuiStepLabel-labelContainer\": {\n                      textAlign: \"right\",\n                    },\n                    \"& .MuiStepLabel-label\": {\n                      textAlign: \"right\",\n                    },\n                  },\n                }\n              : {}),\n          },\n          ...(Array.isArray(sx) ? sx : [sx]),\n        ]}\n        {...props}\n      >\n        {steps.map((step, index) => {\n          const active = index === activeStep;\n          const completed = index <= furthestCompletedStep && index !== activeStep;\n          const isFuture = index > furthestCompletedStep;\n          const underline = completed;\n\n          return (\n            <Step key={index} completed={completed} disabled={step.disabled}>\n              {clickable ? (\n                <StyledStepButton\n                  disableRipple\n                  onClick={() => onStepClick?.(index)}\n                  icon={\n                    <ThemedStepIcon\n                      icon={index + 1}\n                      active={active}\n                      completed={completed}\n                      isFuture={isFuture}\n                    />\n                  }\n                  className={underline ? \"inflow-selected\" : undefined}\n                >\n                  {step.label}\n                </StyledStepButton>\n              ) : (\n                <ThemedStepLabel\n                  slots={{ stepIcon: ThemedStepIcon }}\n                  slotProps={{\n                    stepIcon: { active, completed, isFuture } as ThemedStepIconProps,\n                  }}\n                  optional={step.optional}\n                  error={step.error}\n                  className={underline ? \"inflow-selected\" : undefined}\n                >\n                  {step.label}\n                </ThemedStepLabel>\n              )}\n            </Step>\n          );\n        })}\n      </Stepper>\n    );\n  },\n);\n\nThemedStepper.displayName = \"ThemedStepper\";\n","import { forwardRef } from 'react';\nimport type { ForwardedRef, MouseEvent, ReactElement, ReactNode, RefAttributes } from 'react';\nimport { \n  Table, \n  TableBody, \n  TableCell, \n  TableContainer, \n  TableHead, \n  TableRow, \n  Paper\n} from '@mui/material';\nimport type { TableProps } from '@mui/material';\nimport type { SxProps, Theme } from '@mui/material/styles';\n\ntype TableRowData = Record<string, unknown>;\n\nexport interface Column<T extends TableRowData = TableRowData> {\n  id: string;\n  label: ReactNode;\n  /** Function to render a specific cell, or keyof T */\n  render?: (row: T) => ReactNode;\n  align?: 'left' | 'center' | 'right';\n}\n\nexport interface ThemedTableProps<T extends TableRowData = TableRowData> extends Omit<TableProps, 'data'> {\n  /** Array of column definitions */\n  columns: Column<T>[];\n  /** Array of data objects */\n  data: T[];\n  /** Function to extract a unique key from a row */\n  keyExtractor?: (row: T, index: number) => string | number;\n  /** Enable striped rows */\n  striped?: boolean;\n  /** Styling applied to the outer table container */\n  containerSx?: SxProps<Theme>;\n  /** Mark rows as selected */\n  isRowSelected?: (row: T, index: number) => boolean;\n  /** Handle a row click */\n  onRowClick?: (row: T, index: number, event: MouseEvent<HTMLTableRowElement>) => void;\n}\n\n/**\n * ThemedTable\n * \n * A pre-rendered, themed table component that follows the Inflow design system.\n * It provides a simplified data/columns API while applying Inflow styling.\n *\n * @example\n * ```tsx\n * import { ThemedTable } from '@/components/themed';\n *\n * const columns = [\n *   { id: 'name', label: 'Name', render: (row) => row.name },\n *   { id: 'status', label: 'Status', render: (row) => <ThemedChip label={row.status} /> }\n * ];\n * \n * <ThemedTable columns={columns} data={myData} striped />\n * ```\n */\nconst ThemedTableBase = <T extends TableRowData = TableRowData>(\n  {\n    columns,\n    data,\n    keyExtractor,\n    striped = false,\n    containerSx,\n    isRowSelected,\n    onRowClick,\n    sx,\n    ...props\n  }: ThemedTableProps<T>,\n  ref: ForwardedRef<HTMLTableElement>\n) => {\n    return (\n        <TableContainer\n          component={Paper}\n          elevation={0}\n          sx={[\n            (theme: Theme) => ({\n              border: `1px solid ${theme.palette.inflow.outlineVariant}`,\n              borderRadius: `${theme.shape.borderRadius}px`,\n              boxShadow: 'none',\n            }),\n            ...(Array.isArray(containerSx) ? containerSx : [containerSx]),\n          ]}\n        >\n        <Table ref={ref} sx={[...(Array.isArray(sx) ? sx : [sx])]} {...props}>\n          <TableHead>\n            <TableRow>\n              {columns.map((column) => (\n                <TableCell \n                  key={column.id} \n                  align={column.align || 'left'}\n                  sx={(theme: Theme) => ({\n                    fontWeight: 600,\n                    color: theme.palette.text.primary,\n                    borderColor: theme.palette.inflow.outlineVariant,\n                    backgroundColor: theme.palette.background.paper,\n                    height: 48,\n                    boxSizing: 'border-box',\n                    padding: theme.spacing(0, 2),\n                  })}\n                >\n                  {column.label}\n                </TableCell>\n              ))}\n            </TableRow>\n          </TableHead>\n          <TableBody>\n            {data.map((row, index) => (\n              <TableRow \n                key={keyExtractor ? keyExtractor(row, index) : index}\n                selected={isRowSelected?.(row, index) ?? false}\n                aria-selected={isRowSelected ? isRowSelected(row, index) : undefined}\n                onClick={onRowClick ? (event) => onRowClick(row, index, event) : undefined}\n                sx={(theme: Theme) => ({\n                  '&:last-child td, &:last-child th': { border: 0 },\n                  '&:hover': {\n                    backgroundColor: theme.palette.inflow.rowHover,\n                  },\n                  '&.Mui-selected': {\n                    backgroundColor: 'rgba(11, 45, 110, 0.08)',\n                  },\n                  '&.Mui-selected:hover': {\n                    backgroundColor: 'rgba(11, 45, 110, 0.14)',\n                  },\n                  ...(onRowClick && { cursor: 'pointer' }),\n                  height: 52,\n                  ...(striped && index % 2 === 1 && {\n                    backgroundColor: theme.palette.mode === 'dark' ? 'rgba(255, 255, 255, 0.03)' : 'rgba(0, 0, 0, 0.02)',\n                  }),\n                })}\n              >\n                {columns.map((column) => (\n                  <TableCell \n                    key={column.id} \n                    align={column.align || 'left'}\n                    sx={(theme: Theme) => ({\n                      borderColor: theme.palette.inflow.outlineVariant,\n                      fontSize: '0.875rem',\n                      letterSpacing: '0.015625rem',\n                      color: theme.palette.text.secondary,\n                      boxSizing: 'border-box',\n                      padding: theme.spacing(0, 2),\n                    })}\n                  >\n                    {column.render ? column.render(row) : String(row[column.id] ?? '')}\n                  </TableCell>\n                ))}\n              </TableRow>\n            ))}\n            {data.length === 0 && (\n              <TableRow>\n                <TableCell colSpan={columns.length} align=\"center\" sx={{ py: 4, color: 'text.secondary' }}>\n                  No data available\n                </TableCell>\n              </TableRow>\n            )}\n          </TableBody>\n        </Table>\n      </TableContainer>\n    );\n  };\n\nconst ForwardedThemedTable = forwardRef(ThemedTableBase);\nForwardedThemedTable.displayName = 'ThemedTable';\n\nexport const ThemedTable = ForwardedThemedTable as <T extends TableRowData = TableRowData>(\n  props: ThemedTableProps<T> & RefAttributes<HTMLTableElement>\n) => ReactElement | null;\n","import { forwardRef, useRef, useState } from 'react';\nimport type { CSSProperties, KeyboardEvent, ReactNode, SyntheticEvent } from 'react';\nimport { Box, Icon } from '@mui/material';\nimport { alpha } from '@mui/material/styles';\nimport { inflowTokens } from '../../theme';\n\nexport interface ThemedTabItem {\n  label: string;\n  icon?: string;\n  disabled?: boolean;\n  id?: string;\n}\n\nexport interface ThemedTabsProps {\n  tabs: ThemedTabItem[];\n  value?: number;\n  onChange?: (event: SyntheticEvent, index: number) => void;\n  ariaLabel?: string;\n  style?: CSSProperties;\n}\n\nexport interface ThemedTabPanelProps {\n  value: number;\n  index: number;\n  id?: string;\n  children: ReactNode;\n  style?: CSSProperties;\n}\n\nexport const ThemedTabs = forwardRef<HTMLDivElement, ThemedTabsProps>(\n  ({ tabs, value: controlledValue, onChange, ariaLabel, style }, ref) => {\n    const buttonRefs = useRef<Array<HTMLButtonElement | null>>([]);\n    const [internal, setInternal] = useState(0);\n    const active = controlledValue ?? internal;\n\n    const selectIndex = (event: SyntheticEvent, index: number) => {\n      if (tabs[index]?.disabled) return;\n      if (controlledValue === undefined) setInternal(index);\n      onChange?.(event, index);\n    };\n\n    const focusAndSelect = (event: KeyboardEvent<HTMLButtonElement>, index: number) => {\n      selectIndex(event, index);\n      buttonRefs.current[index]?.focus();\n    };\n\n    const handleKeyDown = (event: KeyboardEvent<HTMLButtonElement>, currentIndex: number) => {\n      const enabledIndexes = tabs.flatMap((tab, index) => (tab.disabled ? [] : [index]));\n      if (enabledIndexes.length === 0) return;\n\n      const currentEnabledIndex = enabledIndexes.indexOf(currentIndex);\n      const nextIndex = (direction: 1 | -1) => {\n        const position = currentEnabledIndex === -1 ? 0 : currentEnabledIndex;\n        return enabledIndexes[(position + direction + enabledIndexes.length) % enabledIndexes.length];\n      };\n\n      switch (event.key) {\n        case 'ArrowRight':\n          event.preventDefault();\n          focusAndSelect(event, nextIndex(1));\n          break;\n        case 'ArrowLeft':\n          event.preventDefault();\n          focusAndSelect(event, nextIndex(-1));\n          break;\n        case 'Home':\n          event.preventDefault();\n          focusAndSelect(event, enabledIndexes[0]);\n          break;\n        case 'End':\n          event.preventDefault();\n          focusAndSelect(event, enabledIndexes[enabledIndexes.length - 1]);\n          break;\n        case 'Enter':\n        case ' ':\n          event.preventDefault();\n          selectIndex(event, currentIndex);\n          break;\n        default:\n          break;\n      }\n    };\n\n    return (\n      <Box ref={ref} role=\"tablist\" aria-label={ariaLabel} style={style} sx={{ display: 'flex' }}>\n        {tabs.map((tab, index) => {\n          const isActive = index === active;\n          const id = tab.id ?? `themed-tab-${index}`;\n\n          return (\n            <Box\n              key={id}\n              component=\"button\"\n              ref={(node: HTMLButtonElement | null) => {\n                buttonRefs.current[index] = node;\n              }}\n              type=\"button\"\n              role=\"tab\"\n              id={id}\n              aria-selected={isActive}\n              aria-controls={`${id}-panel`}\n              tabIndex={isActive ? 0 : -1}\n              disabled={tab.disabled}\n              onClick={(event) => selectIndex(event, index)}\n              onKeyDown={(event: KeyboardEvent<HTMLButtonElement>) => handleKeyDown(event, index)}\n              sx={(theme) => ({\n                flex: '1 1 0',\n                display: 'inline-flex',\n                alignItems: 'center',\n                justifyContent: 'center',\n                gap: theme.spacing(1),\n                padding: theme.spacing(0, 2),\n                minHeight: 26,\n                cursor: 'pointer',\n                border: 0,\n                backgroundColor: isActive ? theme.palette.inflow.primaryTab : 'transparent',\n                color: theme.palette.primary.main,\n                textDecoration: 'none',\n                whiteSpace: 'nowrap',\n                borderRadius: inflowTokens.radius.lg,\n                fontFamily: theme.typography.fontFamily,\n                fontSize: '0.875rem',\n                fontWeight: 500,\n                lineHeight: '20px',\n                letterSpacing: '0.1px',\n                transition: 'background-color 0.15s ease',\n                '&:hover': {\n                  backgroundColor: isActive\n                    ? theme.palette.inflow.primaryTab\n                    : alpha(theme.palette.inflow.primaryTab, 0.4),\n                },\n                '&:focus-visible': {\n                  outline: `2px solid ${theme.palette.primary.main}`,\n                  outlineOffset: -2,\n                },\n                '&:disabled': {\n                  opacity: 0.38,\n                  cursor: 'not-allowed',\n                },\n              })}\n            >\n              {tab.icon && (\n                <Icon baseClassName=\"material-icons-outlined\" sx={{ width: 18, height: 18, fontSize: 18, lineHeight: 1 }}>\n                  {tab.icon}\n                </Icon>\n              )}\n              {tab.label}\n            </Box>\n          );\n        })}\n      </Box>\n    );\n  },\n);\n\nThemedTabs.displayName = 'ThemedTabs';\n\nexport const ThemedTabPanel = forwardRef<HTMLDivElement, ThemedTabPanelProps>(\n  ({ value, index, id, children, style }, ref) => {\n    if (value !== index) return null;\n\n    const tabId = id ?? `themed-tab-${index}`;\n    return (\n      <Box\n        ref={ref}\n        role=\"tabpanel\"\n        id={`${tabId}-panel`}\n        aria-labelledby={tabId}\n        style={style}\n        sx={(theme) => ({\n          border: `1px solid ${theme.palette.inflow.outlineVariant}`,\n          borderTop: 0,\n          padding: theme.spacing(3),\n          backgroundColor: theme.palette.background.paper,\n          fontFamily: theme.typography.fontFamily,\n          fontSize: '0.875rem',\n          lineHeight: '20px',\n          color: theme.palette.text.secondary,\n        })}\n      >\n        {children}\n      </Box>\n    );\n  },\n);\n\nThemedTabPanel.displayName = 'ThemedTabPanel';\n","import { forwardRef } from 'react';\nimport { TextField } from '@mui/material';\nimport type { TextFieldProps } from '@mui/material';\nimport type { Theme } from '@mui/material/styles';\n\nexport type ThemedTextFieldProps = TextFieldProps;\n\n/**\n * ThemedTextField\n *\n * A pre-rendered, themed text field component that follows the Inflow design system.\n * It extends the standard MUI TextField and applies specific Inflow design tokens\n * for border colors, focus states, and error states.\n *\n * @deprecated Redundant with the theme: `createInflowTheme`'s `MuiTextField`\n * default props (`variant: 'outlined'`, `size: 'small'`) and `MuiOutlinedInput`/\n * `MuiFilledInput` overrides already apply these Inflow tokens to a stock MUI\n * `TextField` once wrapped in `InflowProvider`. Use `TextField` from\n * `@mui/material` directly. Kept for backward compatibility; will be removed in\n * the next major version.\n *\n * @example\n * ```tsx\n * import { ThemedTextField } from '@/components/themed';\n *\n * // Standard usage\n * <ThemedTextField label=\"Username\" placeholder=\"Enter username\" />\n *\n * // Error state\n * <ThemedTextField label=\"Password\" error helperText=\"Incorrect password\" />\n * ```\n */\nexport const ThemedTextField = forwardRef<HTMLDivElement, ThemedTextFieldProps>(\n  ({ sx, ...props }, ref) => {\n    return (\n      <TextField\n        ref={ref}\n        variant=\"outlined\"\n        size=\"small\"\n        sx={[\n          (theme: Theme) => ({\n            '& .MuiOutlinedInput-root': {\n              borderRadius: '4px',\n              '& .MuiOutlinedInput-notchedOutline': {\n                borderColor: theme.palette.inflow.outline,\n              },\n              '&:hover .MuiOutlinedInput-notchedOutline': {\n                borderColor: theme.palette.text.primary,\n              },\n              '&.Mui-focused .MuiOutlinedInput-notchedOutline': {\n                borderColor: theme.palette.primary.main,\n                borderWidth: 2,\n              },\n              '&.Mui-error .MuiOutlinedInput-notchedOutline': {\n                borderColor: theme.palette.error.main,\n              },\n              '&.Mui-error.Mui-focused .MuiOutlinedInput-notchedOutline': {\n                borderColor: theme.palette.error.main,\n              },\n            },\n            '& .MuiInputLabel-root': {\n              '&.Mui-focused': {\n                color: theme.palette.primary.main,\n              },\n              '&.Mui-error': {\n                color: theme.palette.error.main,\n              },\n            },\n            '& .MuiFilledInput-root': {\n              backgroundColor: theme.palette.inflow.surfaceHighest,\n              borderRadius: `${theme.shape.borderRadius}px ${theme.shape.borderRadius}px 0 0`,\n              '&:hover': {\n                backgroundColor: theme.palette.inflow.surfaceContainerHigh,\n              },\n              '&.Mui-focused': {\n                backgroundColor: theme.palette.inflow.surfaceHighest,\n              },\n              '&:after': {\n                borderBottomColor: theme.palette.primary.main,\n              },\n            },\n          }),\n          ...(Array.isArray(sx) ? sx : [sx])\n        ]}\n        {...props}\n      />\n    );\n  }\n);\n\nThemedTextField.displayName = 'ThemedTextField';\n","import { forwardRef } from 'react';\nimport { Box, Icon, IconButton } from '@mui/material';\nimport type { ReactNode } from 'react';\n\nexport type ThemedToastSeverity = 'error' | 'info' | 'success' | 'warning';\n\nexport interface ThemedToastProps {\n  severity?: ThemedToastSeverity;\n  title?: ReactNode;\n  message: ReactNode;\n  action?: { label: string; onClick: () => void };\n  onClose?: () => void;\n}\n\nconst iconNames: Record<ThemedToastSeverity, string> = {\n  error: 'error_outline',\n  info: 'info_outline',\n  success: 'check_circle_outline',\n  warning: 'warning_amber',\n};\n\n/**\n * An inline, persistent notification banner with severity-specific Inflow surfaces.\n */\nexport const ThemedToast = forwardRef<HTMLDivElement, ThemedToastProps>(\n  ({ severity = 'info', title, message, action, onClose }, ref) => (\n    <Box\n      component=\"div\"\n      ref={ref}\n      role={severity === 'error' || severity === 'warning' ? 'alert' : 'status'}\n      sx={(theme) => ({\n        display: 'inline-flex',\n        alignItems: 'center',\n        gap: 2.5,\n        height: 39,\n        padding: theme.spacing(0, 2.5),\n        borderRadius: `${theme.shape.borderRadius}px`,\n        backgroundColor: {\n          error: theme.palette.inflow.highlightRed,\n          info: theme.palette.inflow.toastInfoBg,\n          success: theme.palette.inflow.highlightGreen,\n          warning: theme.palette.inflow.highlightYellow,\n        }[severity],\n        color: theme.palette.text.primary,\n        width: '100%',\n        maxWidth: 389,\n        boxSizing: 'border-box',\n      })}\n    >\n      <Icon\n        baseClassName=\"material-icons-outlined\"\n        sx={(theme) => ({\n          color: theme.palette.text.primary,\n          flexShrink: 0,\n          fontSize: 18,\n          lineHeight: '18px',\n        })}\n      >\n        {iconNames[severity]}\n      </Icon>\n\n      <Box\n        component=\"span\"\n        sx={{\n          flex: '1 1 auto',\n          minWidth: 0,\n          display: 'flex',\n          alignItems: 'baseline',\n          gap: 0.5,\n          overflow: 'hidden',\n          whiteSpace: 'nowrap',\n          fontSize: '0.875rem',\n          fontWeight: 400,\n          lineHeight: '20px',\n          letterSpacing: '0.25px',\n        }}\n      >\n        {title && (\n          <Box component=\"span\" sx={{ flexShrink: 0, fontWeight: 600, lineHeight: '20px' }}>\n            {title}\n          </Box>\n        )}\n        <Box component=\"span\" sx={{ overflow: 'hidden', textOverflow: 'ellipsis' }}>\n          {message}\n        </Box>\n        {action && (\n          <Box\n            component=\"button\"\n            type=\"button\"\n            onClick={action.onClick}\n            sx={{\n              flexShrink: 0,\n              appearance: 'none',\n              border: 0,\n              padding: 0,\n              background: 'transparent',\n              color: 'inherit',\n              cursor: 'pointer',\n              font: 'inherit',\n              lineHeight: 'inherit',\n              textDecoration: 'underline',\n            }}\n          >\n            {action.label}\n          </Box>\n        )}\n      </Box>\n\n      {onClose && (\n        <IconButton\n          aria-label=\"Dismiss\"\n          onClick={onClose}\n          size=\"small\"\n          sx={(theme) => ({\n            color: theme.palette.text.primary,\n            flexShrink: 0,\n            width: 24,\n            height: 24,\n            padding: 0,\n            '&:hover': { backgroundColor: theme.palette.action.hover },\n          })}\n        >\n          <Icon baseClassName=\"material-icons-outlined\" sx={{ fontSize: 24 }}>\n            close\n          </Icon>\n        </IconButton>\n      )}\n    </Box>\n  ),\n);\n\nThemedToast.displayName = 'ThemedToast';\n","import { default as createCache, type EmotionCache } from '@emotion/cache';\nimport { CacheProvider } from '@emotion/react';\nimport { ScopedCssBaseline } from '@mui/material';\nimport { ThemeProvider, type SxProps, type Theme } from '@mui/material/styles';\nimport { useMemo, type ReactNode } from 'react';\nimport { createInflowTheme, type InflowColorMode } from '../theme/inflow';\n\ntype EmotionCacheFactory = (options: Parameters<typeof createCache>[0]) => EmotionCache;\ntype EmotionCacheFactoryModule = { readonly default: EmotionCacheFactory };\n\nfunction resolveEmotionCacheFactory(\n  factory: EmotionCacheFactory | EmotionCacheFactoryModule,\n): EmotionCacheFactory {\n  return typeof factory === 'function' ? factory : factory.default;\n}\n\nexport interface InflowProviderProps {\n  children: ReactNode;\n  /** Color mode used to create the Inflow theme. Defaults to light. */\n  mode?: InflowColorMode;\n  /** Class name applied to the scoped Inflow root. */\n  className?: string;\n  /** Additional styles for the scoped Inflow root. */\n  sx?: SxProps<Theme>;\n  /**\n   * Unique key for the Emotion cache created by this provider.\n   * Set a distinct value for independently deployed microfrontends sharing a page.\n   */\n  cacheKey?: string;\n  /**\n   * Caller-owned Emotion cache, for example one that targets a Shadow DOM or iframe.\n   * When supplied, cacheKey is ignored.\n   */\n  emotionCache?: EmotionCache;\n}\n\nconst createInflowVariables = (theme: Theme) => ({\n  '--infl-surface-container-lowest-color': theme.palette.inflow.surfaceLowest,\n  '--infl-surface-container-low-color': theme.palette.inflow.surfaceLow,\n  '--infl-surface-container-color': theme.palette.inflow.surfaceContainer,\n  '--infl-surface-container-high-color': theme.palette.inflow.surfaceContainerHigh,\n  '--infl-surface-container-highest-color': theme.palette.inflow.surfaceHighest,\n  '--infl-primary-color': theme.palette.primary.main,\n  '--infl-primary-fixed-color': theme.palette.inflow.primaryFixed,\n  '--infl-secondary-fixed-color': theme.palette.inflow.secondaryFixed,\n  '--infl-tertiary-fixed-color': theme.palette.inflow.tertiaryFixed,\n  '--infl-on-surface-color': theme.palette.text.primary,\n  '--infl-on-surface-variant-color': theme.palette.text.secondary,\n  '--infl-inverse-surface-color': theme.palette.inflow.inverseSurface,\n  '--infl-inverse-on-surface-color': theme.palette.inflow.inverseOnSurface,\n  '--infl-outline-color': theme.palette.inflow.outline,\n  '--infl-outline-variant-color': theme.palette.inflow.outlineVariant,\n  '--infl-certainty-high-color': theme.palette.inflow.certaintyHigh,\n  '--infl-certainty-medium-color': theme.palette.inflow.certaintyMedium,\n  '--infl-highlight-green-color': theme.palette.inflow.highlightGreen,\n  '--infl-highlight-red-color': theme.palette.inflow.highlightRed,\n  '--infl-highlight-yellow-color': theme.palette.inflow.highlightYellow,\n  '--infl-row-hover-color': theme.palette.inflow.rowHover,\n  '--infl-row-selected-color': theme.palette.inflow.rowSelected,\n  '--infl-mandatory-row-color': theme.palette.inflow.mandatoryRow,\n  '--infl-toast-info-bg-color': theme.palette.inflow.toastInfoBg,\n});\n\n/**\n * Provides a scoped Inflow theme for embedded React applications.\n *\n * Baseline styles and `--infl-*` variables are attached to this provider's root,\n * not the host document. Pass emotionCache when styles must target a Shadow DOM\n * or iframe container.\n */\nexport function InflowProvider({\n  children,\n  mode = 'light',\n  className,\n  sx,\n  cacheKey = 'inflow',\n  emotionCache,\n}: InflowProviderProps) {\n  const theme = useMemo(() => createInflowTheme(mode), [mode]);\n  const internalCache = useMemo(() => resolveEmotionCacheFactory(createCache)({ key: cacheKey }), [cacheKey]);\n  const cache = emotionCache ?? internalCache;\n  const rootSx = useMemo<SxProps<Theme>>(\n    () => [\n      createInflowVariables(theme),\n      ...(Array.isArray(sx) ? sx : sx ? [sx] : []),\n    ],\n    [sx, theme],\n  );\n\n  return (\n    <CacheProvider value={cache}>\n      <ThemeProvider theme={theme}>\n        <ScopedCssBaseline\n          data-inflow-root=\"\"\n          className={className}\n          enableColorScheme\n          sx={rootSx}\n        >\n          {children}\n        </ScopedCssBaseline>\n      </ThemeProvider>\n    </CacheProvider>\n  );\n}\n"],"ignoreList":[0,20],"mappings":"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"}