@cere/cere-design-system 0.0.6 → 0.0.9

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/index.ts","../src/theme/index.ts","../src/components/buttons/Button.tsx","../src/components/buttons/IconButton.tsx","../src/components/buttons/LoadingButton.tsx","../src/components/buttons/ButtonGroup.tsx","../src/components/inputs/TextField.tsx","../src/components/inputs/SearchField.tsx","../src/components/inputs/FormControl.tsx","../src/components/inputs/Dropdown.tsx","../src/components/inputs/ToggleButton.tsx","../src/components/inputs/Switch.tsx","../src/components/inputs/Checkbox.tsx","../src/components/inputs/Radio.tsx","../src/components/navigation/Sidebar.tsx","../src/components/navigation/SidebarItem.tsx","../src/components/navigation/ServiceSelector.tsx","../src/components/navigation/WorkspaceSelector.tsx","../src/components/navigation/Stepper.tsx","../src/components/feedback/Badge.tsx","../src/components/feedback/Chip.tsx","../src/components/feedback/Tooltip.tsx","../src/components/feedback/Progress.tsx","../src/components/navigation/Tab.tsx","../src/components/navigation/Menu.tsx","../src/components/navigation/Pagination.tsx","../src/components/navigation/Selector.tsx","../src/components/layout/Link.tsx","../src/components/layout/Dialog.tsx","../src/components/layout/Drawer.tsx","../src/components/layout/Card.tsx","../src/components/layout/List.tsx","../src/components/layout/Avatar.tsx","../src/components/layout/Table.tsx","../src/components/layout/Grid.tsx","../src/components/layout/Breadcrumbs.tsx","../src/components/layout/Accordion.tsx","../src/components/layout/Paper.tsx","../src/components/layout/Divider.tsx","../src/components/layout/Stack.tsx","../src/components/layout/Box.tsx","../src/components/layout/Typography.tsx","../src/components/layout/Container.tsx","../src/components/layout/AppBar.tsx","../src/components/layout/Collapse.tsx","../src/components/feedback/Alert.tsx","../src/components/feedback/EmptyState.tsx","../src/components/feedback/Loading.tsx","../src/components/feedback/AppLoading.tsx","../src/components/feedback/CircularProgress.tsx","../src/components/third-party/FlowEditor.tsx","../src/components/third-party/CodeEditor.tsx"],"sourcesContent":["// Theme\nexport { theme, colors } from './theme';\n\n// Buttons\nexport { Button } from './components/buttons/Button';\nexport type { ButtonProps } from './components/buttons/Button';\nexport { IconButton } from './components/buttons/IconButton';\nexport type { IconButtonProps } from './components/buttons/IconButton';\nexport { LoadingButton } from './components/buttons/LoadingButton';\nexport type { LoadingButtonProps } from './components/buttons/LoadingButton';\nexport { ButtonGroup } from './components/buttons/ButtonGroup';\nexport type { ButtonGroupProps } from './components/buttons/ButtonGroup';\n\n// Inputs\nexport { TextField } from './components/inputs/TextField';\nexport type { TextFieldProps } from './components/inputs/TextField';\nexport { SearchField } from './components/inputs/SearchField';\nexport type { SearchFieldProps } from './components/inputs/SearchField';\nexport {\n FormControl,\n FormLabel,\n FormHelperText,\n FormControlLabel,\n InputLabel,\n InputAdornment,\n} from './components/inputs/FormControl';\nexport type {\n FormControlProps,\n FormLabelProps,\n FormHelperTextProps,\n FormControlLabelProps,\n InputLabelProps,\n InputAdornmentProps,\n} from './components/inputs/FormControl';\nexport { Dropdown } from './components/inputs/Dropdown';\nexport type { DropdownProps } from './components/inputs/Dropdown';\nexport { ToggleButton, ToggleButtonGroup } from './components/inputs/ToggleButton';\nexport type { ToggleButtonProps, ToggleButtonGroupProps } from './components/inputs/ToggleButton';\nexport { Switch } from './components/inputs/Switch';\nexport type { SwitchProps } from './components/inputs/Switch';\nexport { Checkbox } from './components/inputs/Checkbox';\nexport type { CheckboxProps } from './components/inputs/Checkbox';\nexport { Radio, RadioGroup } from './components/inputs/Radio';\nexport type { RadioProps } from './components/inputs/Radio';\n\n// Navigation\nexport { Sidebar } from './components/navigation/Sidebar';\nexport type { SidebarProps } from './components/navigation/Sidebar';\nexport { SidebarItem } from './components/navigation/SidebarItem';\nexport type { SidebarItemProps } from './components/navigation/SidebarItem';\nexport { ServiceSelectorButton } from './components/navigation/ServiceSelector';\nexport type { ServiceSelectorButtonProps, Service } from './components/navigation/ServiceSelector';\nexport { WorkspaceSelectorButton } from './components/navigation/WorkspaceSelector';\nexport type { WorkspaceSelectorButtonProps, Workspace } from './components/navigation/WorkspaceSelector';\nexport { Stepper, Step, StepLabel, StepContent, StepButton } from './components/navigation/Stepper';\nexport type { StepperProps, StepProps, StepLabelProps, StepContentProps, StepButtonProps } from './components/navigation/Stepper';\n\n// Feedback\nexport { Badge } from './components/feedback/Badge';\nexport type { BadgeProps } from './components/feedback/Badge';\nexport { Chip } from './components/feedback/Chip';\nexport type { ChipProps } from './components/feedback/Chip';\nexport { Tooltip } from './components/feedback/Tooltip';\nexport type { TooltipProps } from './components/feedback/Tooltip';\nexport { Progress } from './components/feedback/Progress';\nexport type { ProgressProps } from './components/feedback/Progress';\n\n// Tabs\nexport { Tab } from './components/navigation/Tab';\nexport type { TabProps } from './components/navigation/Tab';\nexport { Menu, MenuItem } from './components/navigation/Menu';\nexport type { MenuProps, MenuItemProps } from './components/navigation/Menu';\nexport { Pagination } from './components/navigation/Pagination';\nexport type { PaginationProps } from './components/navigation/Pagination';\nexport { Selector } from './components/navigation/Selector';\nexport type { SelectorProps, SelectorOption } from './components/navigation/Selector';\n\n// Layout\nexport { Dialog } from './components/layout/Dialog';\nexport type { DialogProps } from './components/layout/Dialog';\nexport { Drawer } from './components/layout/Drawer';\nexport type { DrawerProps } from './components/layout/Drawer';\nexport { Card, CardContent, CardHeader, CardActions } from './components/layout/Card';\nexport type { CardProps } from './components/layout/Card';\nexport { List, ListItem, ListItemText, ListItemIcon, ListItemSecondaryAction } from './components/layout/List';\nexport type { ListProps, ListItemProps } from './components/layout/List';\nexport { Avatar } from './components/layout/Avatar';\nexport type { AvatarProps } from './components/layout/Avatar';\nexport { Table, TableHeader } from './components/layout/Table';\nexport type { TableProps, TableHeaderProps } from './components/layout/Table';\nexport { Grid } from './components/layout/Grid';\nexport type { GridProps, Grid2Props } from './components/layout/Grid';\nexport { Breadcrumbs } from './components/layout/Breadcrumbs';\nexport type { BreadcrumbsProps, BreadcrumbItem } from './components/layout/Breadcrumbs';\nexport { Accordion } from './components/layout/Accordion';\nexport type { AccordionProps } from './components/layout/Accordion';\nexport { Paper } from './components/layout/Paper';\nexport type { PaperProps } from './components/layout/Paper';\nexport { Divider } from './components/layout/Divider';\nexport type { DividerProps } from './components/layout/Divider';\nexport { Stack } from './components/layout/Stack';\nexport type { StackProps } from './components/layout/Stack';\nexport { Box } from './components/layout/Box';\nexport type { BoxProps } from './components/layout/Box';\nexport { Typography } from './components/layout/Typography';\nexport type { TypographyProps } from './components/layout/Typography';\nexport { Link } from './components/layout/Link';\nexport type { LinkProps } from './components/layout/Link';\nexport { Container } from './components/layout/Container';\nexport type { ContainerProps } from './components/layout/Container';\nexport { AppBar, Toolbar } from './components/layout/AppBar';\nexport type { AppBarProps, ToolbarProps } from './components/layout/AppBar';\nexport { Collapse } from './components/layout/Collapse';\nexport type { CollapseProps } from './components/layout/Collapse';\n\n// Feedback (extended)\nexport { Alert, Snackbar } from './components/feedback/Alert';\nexport type { AlertProps, SnackbarProps, AlertSeverity } from './components/feedback/Alert';\nexport { EmptyState } from './components/feedback/EmptyState';\nexport type { EmptyStateProps } from './components/feedback/EmptyState';\nexport { Loading } from './components/feedback/Loading';\nexport type { LoadingProps } from './components/feedback/Loading';\nexport { AppLoading } from './components/feedback/AppLoading';\nexport type { AppLoadingProps } from './components/feedback/AppLoading';\nexport { CircularProgress } from './components/feedback/CircularProgress';\nexport type { CircularProgressProps } from './components/feedback/CircularProgress';\n\n// Third Party Components\nexport { FlowEditor } from './components/third-party/FlowEditor';\nexport type { FlowEditorProps } from './components/third-party/FlowEditor';\nexport { CodeEditor } from './components/third-party/CodeEditor';\nexport type { CodeEditorProps, CodeEditorLanguage } from './components/third-party/CodeEditor';\n// Re-export commonly used ReactFlow types\nexport type {\n Node,\n Edge,\n NodeTypes,\n EdgeTypes,\n ReactFlowInstance,\n OnNodesChange,\n OnEdgesChange,\n} from './components/third-party/FlowEditor';\nexport {\n Background,\n Controls,\n MiniMap,\n BackgroundVariant,\n ConnectionLineType,\n} from './components/third-party/FlowEditor';\nexport { Panel } from 'reactflow';\n\n","import { createTheme, Theme } from '@mui/material/styles';\n\n// Color palette - matching ROB application\nconst colors = {\n primary: {\n main: '#1976d2', // ROB primary color\n light: '#1976d2', // Same as main for selected background\n dark: '#1565c0',\n contrastText: '#FFFFFF',\n },\n secondary: {\n main: '#666666',\n light: '#999999',\n dark: '#333333',\n contrastText: '#FFFFFF',\n },\n success: {\n main: '#10B981',\n light: '#34D399',\n dark: '#059669',\n contrastText: '#FFFFFF',\n },\n error: {\n main: '#EF4444',\n light: '#F87171',\n dark: '#DC2626',\n contrastText: '#FFFFFF',\n },\n warning: {\n main: '#F59E0B',\n light: '#FBBF24',\n dark: '#D97706',\n contrastText: '#FFFFFF',\n },\n tertiary: {\n main: '#F59E0B',\n light: '#FBBF24',\n dark: '#D97706',\n contrastText: '#1A1A1A',\n },\n grey: {\n 50: '#FAFAFA',\n 100: '#F5F5F5',\n 200: '#EEEEEE',\n 300: '#E0E0E0',\n 400: '#BDBDBD',\n 500: '#9E9E9E',\n 600: '#757575',\n 700: '#616161',\n 800: '#424242',\n 900: '#212121',\n },\n text: {\n primary: '#1A1A1A',\n secondary: '#666666',\n disabled: '#999999',\n },\n background: {\n default: '#FFFFFF',\n paper: '#FFFFFF',\n selected: 'rgba(123, 44, 191, 0.1)',\n },\n};\n\nexport const theme: Theme = createTheme({\n palette: {\n mode: 'light',\n primary: colors.primary,\n secondary: colors.secondary,\n success: colors.success,\n error: colors.error,\n warning: colors.warning,\n grey: colors.grey,\n text: colors.text,\n background: colors.background,\n },\n typography: {\n fontFamily: \"'Inter', -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Human Sans', 'Nohemi', sans-serif\",\n h1: {\n fontWeight: 700,\n fontSize: '96px',\n lineHeight: 1.2,\n },\n h2: {\n fontWeight: 700,\n fontSize: '60px',\n lineHeight: 1.2,\n },\n h3: {\n fontWeight: 700,\n fontSize: '48px',\n lineHeight: 1.2,\n },\n h4: {\n fontWeight: 600,\n fontSize: '34px',\n lineHeight: 1.2,\n },\n h5: {\n fontWeight: 600,\n fontSize: '24px',\n lineHeight: 1.2,\n },\n h6: {\n fontWeight: 600,\n fontSize: '20px',\n lineHeight: 1.2,\n },\n subtitle1: {\n fontWeight: 700,\n fontSize: '16px',\n lineHeight: 1.5,\n },\n subtitle2: {\n fontWeight: 700,\n fontSize: '14px',\n lineHeight: 1.5,\n },\n body1: {\n fontWeight: 400,\n fontSize: '16px',\n lineHeight: 1.5,\n },\n body2: {\n fontWeight: 400,\n fontSize: '14px',\n lineHeight: 1.5,\n },\n button: {\n fontWeight: 700,\n fontSize: '14px',\n textTransform: 'uppercase',\n letterSpacing: '0.5px',\n },\n caption: {\n fontWeight: 400,\n fontSize: '12px',\n lineHeight: 1.5,\n },\n overline: {\n fontWeight: 800,\n fontSize: '10px',\n textTransform: 'uppercase',\n letterSpacing: '1px',\n },\n },\n shape: {\n borderRadius: 16,\n },\n components: {\n MuiButton: {\n styleOverrides: {\n root: {\n textTransform: 'none',\n borderRadius: 12,\n fontWeight: 600,\n padding: '8px 24px',\n boxShadow: 'none',\n '&:hover': {\n boxShadow: 'none',\n },\n },\n sizeSmall: {\n padding: '4px 12px',\n fontSize: '12px',\n },\n sizeMedium: {\n padding: '8px 24px',\n fontSize: '14px',\n },\n sizeLarge: {\n padding: '12px 24px',\n fontSize: '16px',\n },\n },\n },\n MuiTextField: {\n styleOverrides: {\n root: {\n '& .MuiOutlinedInput-root': {\n borderRadius: 12,\n },\n },\n },\n },\n MuiSelect: {\n styleOverrides: {\n root: {\n borderRadius: 12,\n },\n },\n },\n MuiChip: {\n styleOverrides: {\n root: {\n borderRadius: 16,\n fontWeight: 500,\n },\n },\n },\n MuiPaper: {\n styleOverrides: {\n root: {\n boxShadow: '0px 4px 20px rgba(0, 0, 0, 0.05)',\n border: '1px solid rgba(0, 0, 0, 0.05)',\n },\n },\n },\n MuiDrawer: {\n styleOverrides: {\n paper: {\n borderRight: '1px solid rgba(0, 0, 0, 0.05)',\n },\n },\n },\n MuiAlert: {\n styleOverrides: {\n root: {\n borderRadius: 8,\n },\n filled: {\n borderRadius: 8,\n },\n },\n },\n },\n});\n\n// Export colors for use in components\nexport { colors };\n\n","import React from 'react';\nimport MuiButton, { ButtonProps as MuiButtonProps } from '@mui/material/Button';\nimport { styled } from '@mui/material/styles';\nimport { colors } from '../../theme';\n\nexport type ButtonVariant = 'primary' | 'secondary' | 'tertiary';\n\nexport interface ButtonProps extends Omit<MuiButtonProps, 'variant' | 'color'> {\n variant?: ButtonVariant;\n size?: 'small' | 'medium' | 'large';\n startIcon?: React.ReactNode;\n endIcon?: React.ReactNode;\n}\n\nconst StyledPrimaryButton = styled(MuiButton)(() => ({\n backgroundColor: colors.primary.main,\n color: colors.primary.contrastText,\n '&:hover': {\n backgroundColor: colors.primary.light,\n },\n '&:active': {\n backgroundColor: colors.primary.dark,\n },\n '&:disabled': {\n backgroundColor: colors.grey[300],\n color: colors.grey[500],\n },\n}));\n\nconst StyledSecondaryButton = styled(MuiButton)(() => ({\n backgroundColor: 'transparent',\n color: colors.primary.main,\n border: `1px solid ${colors.primary.main}`,\n '&:hover': {\n backgroundColor: colors.background.selected,\n borderColor: colors.primary.light,\n },\n '&:active': {\n backgroundColor: colors.background.selected,\n borderColor: colors.primary.dark,\n },\n '&:disabled': {\n borderColor: colors.grey[300],\n color: colors.grey[500],\n },\n}));\n\nconst StyledTertiaryButton = styled(MuiButton)(() => ({\n backgroundColor: 'transparent',\n color: colors.tertiary.main,\n '&:hover': {\n backgroundColor: 'rgba(245, 158, 11, 0.1)',\n },\n '&:active': {\n backgroundColor: 'rgba(245, 158, 11, 0.2)',\n },\n '&:disabled': {\n color: colors.grey[500],\n },\n}));\n\nexport const Button: React.FC<ButtonProps> = ({\n variant = 'primary',\n children,\n startIcon,\n endIcon,\n ...props\n}) => {\n const buttonProps = {\n ...props,\n startIcon,\n endIcon,\n };\n\n switch (variant) {\n case 'primary':\n return <StyledPrimaryButton {...buttonProps}>{children}</StyledPrimaryButton>;\n case 'secondary':\n return <StyledSecondaryButton {...buttonProps}>{children}</StyledSecondaryButton>;\n case 'tertiary':\n return <StyledTertiaryButton {...buttonProps}>{children}</StyledTertiaryButton>;\n default:\n return <StyledPrimaryButton {...buttonProps}>{children}</StyledPrimaryButton>;\n }\n};\n\n","import React from 'react';\nimport MuiIconButton, { IconButtonProps as MuiIconButtonProps } from '@mui/material/IconButton';\nimport { styled } from '@mui/material/styles';\nimport { colors } from '../../theme';\n\nexport interface IconButtonProps extends MuiIconButtonProps {\n variant?: 'default' | 'primary' | 'secondary';\n}\n\nconst StyledIconButton = styled(MuiIconButton, {\n shouldForwardProp: (prop) => prop !== 'buttonVariant',\n})<{ buttonVariant?: string }>(({ buttonVariant = 'default' }) => {\n const variants: Record<string, any> = {\n primary: {\n color: colors.primary.main,\n '&:hover': {\n backgroundColor: colors.background.selected,\n },\n },\n secondary: {\n color: colors.text.secondary,\n '&:hover': {\n backgroundColor: colors.grey[50],\n },\n },\n default: {\n color: colors.text.primary,\n '&:hover': {\n backgroundColor: colors.grey[50],\n },\n },\n };\n\n return variants[buttonVariant] || variants.default;\n});\n\nexport const IconButton: React.FC<IconButtonProps> = ({\n variant = 'default',\n ...props\n}) => {\n return <StyledIconButton buttonVariant={variant} {...props} />;\n};\n\n","import React from 'react';\nimport { LoadingButton as MuiLoadingButton, LoadingButtonProps as MuiLoadingButtonProps } from '@mui/lab';\n\nexport interface LoadingButtonProps extends MuiLoadingButtonProps {\n /**\n * If `true`, the button will show a loading indicator\n */\n loading?: boolean;\n /**\n * The loading indicator can be positioned inside the button or in the center\n */\n loadingPosition?: 'start' | 'end' | 'center';\n}\n\n/**\n * LoadingButton component - Button with loading state from MUI Lab\n * \n * @example\n * ```tsx\n * <LoadingButton\n * variant=\"contained\"\n * loading={isLoading}\n * onClick={handleSubmit}\n * >\n * Submit\n * </LoadingButton>\n * ```\n */\nexport const LoadingButton: React.FC<LoadingButtonProps> = ({\n loading = false,\n loadingPosition = 'center',\n ...props\n}) => {\n return (\n <MuiLoadingButton\n loading={loading}\n loadingPosition={loadingPosition}\n {...props}\n />\n );\n};\n\nexport default LoadingButton;\n\n","import React from 'react';\nimport {\n ButtonGroup as MuiButtonGroup,\n ButtonGroupProps as MuiButtonGroupProps,\n} from '@mui/material';\n\nexport interface ButtonGroupProps extends MuiButtonGroupProps {\n /**\n * The content of the button group\n */\n children?: React.ReactNode;\n /**\n * If `true`, the buttons will be disabled\n */\n disabled?: boolean;\n /**\n * If `true`, the button group will take full width\n */\n fullWidth?: boolean;\n /**\n * The orientation of the button group\n * @default 'horizontal'\n */\n orientation?: 'horizontal' | 'vertical';\n /**\n * The size of the buttons\n * @default 'medium'\n */\n size?: 'small' | 'medium' | 'large';\n /**\n * The variant to use\n * @default 'outlined'\n */\n variant?: 'text' | 'outlined' | 'contained';\n}\n\n/**\n * ButtonGroup component - groups related buttons together\n * \n * @example\n * ```tsx\n * <ButtonGroup variant=\"contained\">\n * <Button>One</Button>\n * <Button>Two</Button>\n * <Button>Three</Button>\n * </ButtonGroup>\n * ```\n */\nexport const ButtonGroup: React.FC<ButtonGroupProps> = ({\n orientation = 'horizontal',\n size = 'medium',\n variant = 'outlined',\n ...props\n}) => {\n return (\n <MuiButtonGroup\n orientation={orientation}\n size={size}\n variant={variant}\n {...props}\n />\n );\n};\n\nexport default ButtonGroup;\n\n","import React from 'react';\nimport MuiTextField, { TextFieldProps as MuiTextFieldProps } from '@mui/material/TextField';\nimport { styled } from '@mui/material/styles';\nimport { colors } from '../../theme';\n\nexport type TextFieldSize = 'small' | 'medium';\n\nexport interface TextFieldProps extends Omit<MuiTextFieldProps, 'size'> {\n size?: TextFieldSize;\n}\n\nconst StyledTextField = styled(MuiTextField)(({ error }) => ({\n '& .MuiOutlinedInput-root': {\n '&:hover fieldset': {\n borderColor: error ? colors.error.main : colors.primary.main,\n },\n '&.Mui-focused fieldset': {\n borderColor: error ? colors.error.main : colors.primary.main,\n },\n '&.Mui-error fieldset': {\n borderColor: colors.error.main,\n },\n },\n '& .MuiInputLabel-root': {\n '&.Mui-focused': {\n color: error ? colors.error.main : colors.primary.main,\n },\n },\n}));\n\nexport const TextField: React.FC<TextFieldProps> = ({\n size = 'medium',\n ...props\n}) => {\n return <StyledTextField size={size === 'medium' ? 'medium' : 'small'} {...props} />;\n};\n\n","import React from 'react';\nimport { TextField } from './TextField';\nimport { TextFieldProps } from './TextField';\nimport SearchIcon from '@mui/icons-material/Search';\nimport InputAdornment from '@mui/material/InputAdornment';\n\nexport interface SearchFieldProps extends Omit<TextFieldProps, 'InputProps'> {\n placeholder?: string;\n onSearch?: (value: string) => void;\n}\n\nexport const SearchField: React.FC<SearchFieldProps> = ({\n placeholder = 'Search...',\n onSearch,\n onChange,\n ...props\n}) => {\n const handleChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n if (onChange) {\n onChange(e);\n }\n if (onSearch) {\n onSearch(e.target.value);\n }\n };\n\n return (\n <TextField\n placeholder={placeholder}\n onChange={handleChange}\n InputProps={{\n startAdornment: (\n <InputAdornment position=\"start\">\n <SearchIcon style={{ fontSize: 18, color: '#999' }} />\n </InputAdornment>\n ),\n }}\n {...props}\n />\n );\n};\n\n","export {\n FormControl,\n FormLabel,\n FormHelperText,\n FormControlLabel,\n InputLabel,\n InputAdornment,\n} from '@mui/material';\nexport type {\n FormControlProps,\n FormLabelProps,\n FormHelperTextProps,\n FormControlLabelProps,\n InputLabelProps,\n InputAdornmentProps,\n} from '@mui/material';\n\n","import React from 'react';\nimport {\n Select,\n MenuItem,\n FormControl,\n InputLabel,\n SelectProps as MuiSelectProps,\n} from '@mui/material';\nimport { styled } from '@mui/material/styles';\nimport { colors } from '../../theme';\n\nexport type DropdownSize = 'small' | 'medium' | 'large';\n\nexport interface DropdownOption {\n value: string | number;\n label: string;\n disabled?: boolean;\n}\n\nexport interface DropdownProps extends Omit<MuiSelectProps, 'size'> {\n label?: string;\n options: DropdownOption[];\n size?: DropdownSize;\n placeholder?: string;\n}\n\nconst StyledFormControl = styled(FormControl)({\n minWidth: 120,\n});\n\nconst StyledSelect = styled(Select)(({ error }) => ({\n '&:hover .MuiOutlinedInput-notchedOutline': {\n borderColor: error ? colors.error.main : colors.primary.main,\n },\n '&.Mui-focused .MuiOutlinedInput-notchedOutline': {\n borderColor: error ? colors.error.main : colors.primary.main,\n },\n}));\n\nexport const Dropdown: React.FC<DropdownProps> = ({\n label,\n options,\n size = 'medium',\n placeholder,\n value,\n ...props\n}) => {\n const selectSize = size === 'large' ? 'medium' : size;\n\n return (\n <StyledFormControl size={selectSize} error={props.error} fullWidth={props.fullWidth}>\n {label && <InputLabel>{label}</InputLabel>}\n <StyledSelect\n value={value || ''}\n label={label}\n size={selectSize}\n {...props}\n >\n {placeholder && (\n <MenuItem value=\"\" disabled>\n {placeholder}\n </MenuItem>\n )}\n {options.map((option) => (\n <MenuItem key={option.value} value={option.value} disabled={option.disabled}>\n {option.label}\n </MenuItem>\n ))}\n </StyledSelect>\n </StyledFormControl>\n );\n};\n\n","import React from 'react';\nimport {\n ToggleButton as MuiToggleButton,\n ToggleButtonGroup as MuiToggleButtonGroup,\n ToggleButtonProps as MuiToggleButtonProps,\n ToggleButtonGroupProps as MuiToggleButtonGroupProps,\n} from '@mui/material';\nimport { styled } from '@mui/material/styles';\nimport { colors } from '../../theme';\n\nexport interface ToggleButtonProps extends MuiToggleButtonProps {}\n\nexport const ToggleButton: React.FC<ToggleButtonProps> = (props) => {\n return <MuiToggleButton {...props} />;\n};\n\nexport interface ToggleButtonGroupProps extends MuiToggleButtonGroupProps {}\n\nconst StyledToggleButtonGroup = styled(MuiToggleButtonGroup)({\n '& .MuiToggleButton-root': {\n border: `1px solid ${colors.grey[300]}`,\n '&.Mui-selected': {\n backgroundColor: colors.primary.main,\n color: colors.primary.contrastText,\n '&:hover': {\n backgroundColor: colors.primary.light,\n },\n },\n '&:hover': {\n backgroundColor: colors.grey[50],\n },\n },\n});\n\nexport const ToggleButtonGroup: React.FC<ToggleButtonGroupProps> = (props) => {\n return <StyledToggleButtonGroup {...props} />;\n};\n\n","import React from 'react';\nimport MuiSwitch, { SwitchProps as MuiSwitchProps } from '@mui/material/Switch';\nimport { styled } from '@mui/material/styles';\nimport { colors } from '../../theme';\n\nexport interface SwitchProps extends MuiSwitchProps {\n label?: string;\n labelPosition?: 'left' | 'right';\n}\n\nconst StyledSwitch = styled(MuiSwitch)(({ theme }) => ({\n width: 44,\n height: 24,\n padding: 0,\n '& .MuiSwitch-switchBase': {\n padding: 0,\n margin: 2,\n transitionDuration: '300ms',\n '&.Mui-checked': {\n transform: 'translateX(20px)',\n color: '#fff',\n '& + .MuiSwitch-track': {\n backgroundColor: colors.success.main,\n opacity: 1,\n border: 0,\n },\n '&.Mui-disabled + .MuiSwitch-track': {\n opacity: 0.5,\n },\n },\n '&.Mui-focusVisible .MuiSwitch-thumb': {\n color: colors.success.main,\n border: `6px solid #fff`,\n },\n '&.Mui-disabled .MuiSwitch-thumb': {\n color: colors.grey[300],\n },\n '&.Mui-disabled + .MuiSwitch-track': {\n opacity: 0.5,\n backgroundColor: colors.grey[300],\n },\n },\n '& .MuiSwitch-thumb': {\n boxSizing: 'border-box',\n width: 20,\n height: 20,\n },\n '& .MuiSwitch-track': {\n borderRadius: 24 / 2,\n backgroundColor: colors.grey[300],\n opacity: 1,\n transition: theme.transitions.create(['background-color'], {\n duration: 500,\n }),\n },\n}));\n\nexport const Switch: React.FC<SwitchProps> = ({\n label,\n labelPosition = 'right',\n ...props\n}) => {\n const switchComponent = <StyledSwitch {...props} />;\n\n if (!label) {\n return switchComponent;\n }\n\n return (\n <div style={{ display: 'flex', alignItems: 'center', gap: '8px' }}>\n {labelPosition === 'left' && <span>{label}</span>}\n {switchComponent}\n {labelPosition === 'right' && <span>{label}</span>}\n </div>\n );\n};\n\n","import React from 'react';\nimport MuiCheckbox, { CheckboxProps as MuiCheckboxProps } from '@mui/material/Checkbox';\nimport { styled } from '@mui/material/styles';\nimport { colors } from '../../theme';\nimport FormControlLabel from '@mui/material/FormControlLabel';\n\nexport interface CheckboxProps extends Omit<MuiCheckboxProps, 'color'> {\n label?: string;\n labelPosition?: 'left' | 'right';\n}\n\nconst StyledCheckbox = styled(MuiCheckbox)(() => ({\n color: colors.grey[400],\n '&.Mui-checked': {\n color: colors.primary.main,\n },\n '&.MuiCheckbox-indeterminate': {\n color: colors.primary.main,\n },\n '&.Mui-disabled': {\n color: colors.grey[300],\n },\n '&:hover': {\n backgroundColor: colors.background.selected,\n },\n '&.Mui-focusVisible': {\n outline: `2px solid ${colors.primary.main}`,\n outlineOffset: 2,\n },\n}));\n\nexport const Checkbox: React.FC<CheckboxProps> = ({\n label,\n labelPosition = 'right',\n ...props\n}) => {\n const checkboxComponent = <StyledCheckbox {...props} />;\n\n if (!label) {\n return checkboxComponent;\n }\n\n const labelPlacementMap: Record<string, 'start' | 'end' | 'top' | 'bottom'> = {\n left: 'start',\n right: 'end',\n };\n\n return (\n <FormControlLabel\n control={checkboxComponent}\n label={label}\n labelPlacement={labelPlacementMap[labelPosition] || 'end'}\n />\n );\n};\n\n","import React from 'react';\nimport MuiRadio, { RadioProps as MuiRadioProps } from '@mui/material/Radio';\nimport { styled } from '@mui/material/styles';\nimport { colors } from '../../theme';\nimport FormControlLabel from '@mui/material/FormControlLabel';\nimport RadioGroup from '@mui/material/RadioGroup';\n\nexport interface RadioProps extends Omit<MuiRadioProps, 'color'> {\n label?: string;\n labelPosition?: 'left' | 'right';\n}\n\nconst StyledRadio = styled(MuiRadio)(() => ({\n color: colors.grey[400],\n '&.Mui-checked': {\n color: colors.primary.main,\n },\n '&.Mui-disabled': {\n color: colors.grey[300],\n },\n '&:hover': {\n backgroundColor: colors.background.selected,\n },\n '&.Mui-focusVisible': {\n outline: `2px solid ${colors.primary.main}`,\n outlineOffset: 2,\n },\n}));\n\nexport const Radio: React.FC<RadioProps> = ({\n label,\n labelPosition = 'right',\n ...props\n}) => {\n const radioComponent = <StyledRadio {...props} />;\n\n if (!label) {\n return radioComponent;\n }\n\n const labelPlacementMap: Record<string, 'start' | 'end' | 'top' | 'bottom'> = {\n left: 'start',\n right: 'end',\n };\n\n return (\n <FormControlLabel\n control={radioComponent}\n label={label}\n labelPlacement={labelPlacementMap[labelPosition] || 'end'}\n />\n );\n};\n\nexport { RadioGroup };\n\n","import React from 'react';\nimport {\n Drawer,\n List,\n styled,\n Box,\n} from '@mui/material';\nimport { colors } from '../../theme';\nimport { SidebarItem, SidebarItemProps } from './SidebarItem';\n\nexport interface SidebarProps {\n open?: boolean;\n width?: number;\n items: SidebarItemProps[];\n onClose?: () => void;\n variant?: 'permanent' | 'persistent' | 'temporary';\n}\n\nconst StyledDrawer = styled(Drawer)(() => ({\n '& .MuiDrawer-paper': {\n backgroundColor: colors.background.paper,\n borderRight: `1px solid ${colors.grey[200]}`,\n boxShadow: 'none',\n },\n}));\n\nexport const Sidebar: React.FC<SidebarProps> = ({\n open = true,\n width = 280,\n items,\n onClose,\n variant = 'permanent',\n}) => {\n return (\n <StyledDrawer\n variant={variant}\n open={open}\n onClose={onClose}\n sx={{\n width,\n flexShrink: 0,\n '& .MuiDrawer-paper': {\n width,\n boxSizing: 'border-box',\n },\n }}\n >\n <Box sx={{ overflow: 'auto', padding: '8px 0' }}>\n <List>\n {items.map((item, index) => (\n <SidebarItem key={index} {...item} />\n ))}\n </List>\n </Box>\n </StyledDrawer>\n );\n};\n\n","import React from 'react';\nimport {\n ListItemButton,\n ListItemIcon,\n ListItemText,\n styled,\n} from '@mui/material';\nimport { colors } from '../../theme';\n\nexport interface SidebarItemProps {\n label: string;\n icon?: React.ReactNode;\n selected?: boolean;\n onClick?: () => void;\n size?: 'small' | 'medium' | 'large';\n endIcon?: React.ReactNode;\n children?: React.ReactNode;\n}\n\nconst StyledListItemButton = styled(ListItemButton, {\n shouldForwardProp: (prop) => prop !== 'selected' && prop !== 'size',\n})<{ selected?: boolean; size?: string }>(({ selected, size = 'medium' }) => {\n const heightMap: Record<string, string> = {\n small: '40px',\n medium: '56px',\n large: '64px',\n };\n\n return {\n height: heightMap[size],\n paddingLeft: '16px',\n paddingRight: '16px',\n borderRadius: '8px',\n margin: '4px 8px',\n color: selected ? colors.primary.main : colors.text.primary,\n backgroundColor: selected ? colors.background.selected : 'transparent',\n '&:hover': {\n backgroundColor: selected ? colors.background.selected : colors.grey[50],\n },\n '& .MuiListItemIcon-root': {\n color: selected ? colors.primary.main : colors.text.secondary,\n minWidth: '40px',\n },\n '& .MuiListItemText-primary': {\n fontWeight: selected ? 600 : 400,\n color: selected ? colors.primary.main : colors.text.primary,\n },\n };\n});\n\nexport const SidebarItem: React.FC<SidebarItemProps> = ({\n label,\n icon,\n selected = false,\n onClick,\n size = 'medium',\n endIcon,\n children,\n}) => {\n return (\n <StyledListItemButton selected={selected} size={size} onClick={onClick}>\n {icon && <ListItemIcon>{icon}</ListItemIcon>}\n <ListItemText primary={label} />\n {endIcon && <div style={{ marginLeft: 'auto' }}>{endIcon}</div>}\n {children}\n </StyledListItemButton>\n );\n};\n\n","import React, { useState, useCallback } from 'react';\nimport {\n Box,\n Typography,\n Avatar,\n Tooltip,\n IconButton,\n Link,\n Chip,\n TextField,\n InputAdornment,\n List,\n ListItem,\n ListItemAvatar,\n ListItemText,\n Button,\n Menu,\n} from '@mui/material';\nimport KeyboardArrowDownIcon from '@mui/icons-material/KeyboardArrowDown';\nimport ArchiveIcon from '@mui/icons-material/Archive';\nimport UnarchiveIcon from '@mui/icons-material/Unarchive';\nimport SearchIcon from '@mui/icons-material/Search';\nimport AddIcon from '@mui/icons-material/Add';\nimport CheckIcon from '@mui/icons-material/Check';\nimport SettingsIcon from '@mui/icons-material/Settings';\nimport PersonAddAltIcon from '@mui/icons-material/PersonAddAlt';\n\nexport interface Service {\n id: string;\n name: string;\n description?: string;\n type?: string;\n lastAccessed?: string;\n memberCount?: number;\n favorited?: boolean;\n isPersonal?: boolean;\n avatar?: string;\n archived?: boolean;\n}\n\nexport interface ServiceSelectorButtonProps {\n /**\n * List of services to display\n */\n services: Service[];\n /**\n * Currently selected service ID\n */\n selectedServiceId: string | null;\n /**\n * Loading state\n */\n loading?: boolean;\n /**\n * Compact mode for mobile or mini-sidebar\n */\n compact?: boolean;\n /**\n * Callback when service is selected\n */\n onSelectService?: (serviceId: string) => void;\n /**\n * Callback when service name is clicked (for navigation)\n */\n onServiceClick?: (serviceId: string) => void;\n /**\n * Callback when \"Create Service\" is clicked\n */\n onCreateService?: () => void;\n /**\n * Callback after service is created\n */\n onServiceCreated?: () => void;\n /**\n * Whether user is a manager for the selected service\n */\n isManager?: boolean;\n /**\n * Custom styles\n */\n sx?: any;\n /**\n * Panel width\n * @default 350\n */\n panelWidth?: number;\n /**\n * Callback when Settings button is clicked\n */\n onOpenSettings?: (serviceId: string) => void;\n /**\n * Callback when Add Member button is clicked\n */\n onOpenAddMember?: (serviceId: string) => void;\n}\n\nexport const ServiceSelectorButton: React.FC<ServiceSelectorButtonProps> = ({\n services,\n selectedServiceId,\n loading = false,\n compact = false,\n onSelectService,\n onServiceClick,\n onCreateService,\n onServiceCreated,\n isManager = false,\n sx = {},\n panelWidth = 350,\n onOpenSettings,\n onOpenAddMember,\n}) => {\n const [anchorEl, setAnchorEl] = useState<null | HTMLElement>(null);\n const [searchTerm, setSearchTerm] = useState('');\n const [showArchived, setShowArchived] = useState(false);\n\n // Handle opening the service selector\n const handleOpenSelector = (event: React.MouseEvent<HTMLElement>) => {\n event.stopPropagation();\n setAnchorEl(event.currentTarget);\n };\n\n // Handle closing the service selector\n const handleClose = () => {\n setAnchorEl(null);\n setSearchTerm('');\n setShowArchived(false);\n };\n\n // Handle clicking on the service name (navigates to dashboard)\n const handleServiceClick = (e: React.MouseEvent) => {\n e.stopPropagation();\n if (selectedServiceId && onServiceClick) {\n onServiceClick(selectedServiceId);\n }\n };\n\n // Handle selecting a service\n const handleSelectService = useCallback(\n (serviceId: string) => {\n handleClose();\n if (onSelectService) {\n onSelectService(serviceId);\n }\n },\n [onSelectService]\n );\n\n const handleCreateClick = () => {\n handleClose();\n if (onCreateService) {\n onCreateService();\n }\n };\n\n // Get the selected service\n const selectedService = Array.isArray(services)\n ? services.find((s) => s.id === selectedServiceId)\n : null;\n\n // Filter services based on search term and archived status\n const filteredServices = services.filter((service) => {\n const matchesSearch =\n searchTerm === '' ||\n service.name.toLowerCase().includes(searchTerm.toLowerCase());\n const isArchived = service.archived === true;\n const matchesArchivedFilter = showArchived ? isArchived : !isArchived;\n return matchesSearch && matchesArchivedFilter;\n });\n\n // Compact version for mobile or mini-sidebar\n if (compact) {\n return (\n <>\n <Box sx={{ position: 'relative' }}>\n <Tooltip title=\"Select service\" placement=\"right\">\n <IconButton\n onClick={handleOpenSelector}\n sx={{\n p: 1,\n '&:hover': {\n bgcolor: 'rgba(0, 0, 0, 0.04)',\n },\n ...sx,\n }}\n >\n <Avatar\n sx={{\n width: 32,\n height: 32,\n bgcolor: selectedServiceId ? 'primary.main' : 'grey.400',\n fontSize: '0.9rem',\n }}\n >\n {selectedService ? selectedService.name.charAt(0) : 'D'}\n </Avatar>\n </IconButton>\n </Tooltip>\n </Box>\n\n <ServiceSelectorPanel\n open={Boolean(anchorEl)}\n anchorEl={anchorEl}\n onClose={handleClose}\n services={services}\n selectedServiceId={selectedServiceId}\n onSelectService={handleSelectService}\n onCreateService={handleCreateClick}\n onServiceCreated={onServiceCreated}\n loading={loading}\n width={panelWidth}\n isManager={isManager}\n selectedService={selectedService}\n searchTerm={searchTerm}\n onSearchChange={setSearchTerm}\n showArchived={showArchived}\n onToggleArchived={() => setShowArchived(!showArchived)}\n filteredServices={filteredServices}\n onOpenSettings={onOpenSettings}\n onOpenAddMember={onOpenAddMember}\n />\n </>\n );\n }\n\n // Standard breadcrumb style\n return (\n <>\n <Box sx={{ display: 'flex', alignItems: 'center', ...sx }}>\n {selectedService ? (\n <>\n {/* Service name as a regular breadcrumb link if user is manager, otherwise just text */}\n {isManager ? (\n <Link\n underline=\"hover\"\n color=\"inherit\"\n onClick={handleServiceClick}\n sx={{\n display: 'flex',\n alignItems: 'center',\n fontSize: '0.875rem',\n cursor: 'pointer',\n mr: 0.5,\n }}\n >\n <Avatar\n sx={{\n width: 20,\n height: 20,\n bgcolor: 'primary.main',\n fontSize: '0.7rem',\n mr: 0.5,\n }}\n >\n {selectedService.name.charAt(0)}\n </Avatar>\n {selectedService.name}\n </Link>\n ) : (\n <Box\n sx={{\n display: 'flex',\n alignItems: 'center',\n fontSize: '0.875rem',\n mr: 0.5,\n color: 'text.primary',\n }}\n >\n <Avatar\n sx={{\n width: 20,\n height: 20,\n bgcolor: 'primary.main',\n fontSize: '0.7rem',\n mr: 0.5,\n }}\n >\n {selectedService.name.charAt(0)}\n </Avatar>\n {selectedService.name}\n </Box>\n )}\n\n {/* Show archived chip if service is archived */}\n {selectedService.archived && (\n <Chip\n size=\"small\"\n label=\"Archived\"\n color=\"error\"\n variant=\"outlined\"\n sx={{\n ml: 0.5,\n height: 20,\n fontSize: '0.8rem',\n '& .MuiChip-label': { px: 1 },\n '& .MuiChip-icon': { fontSize: '0.7rem', ml: 0.5 },\n }}\n />\n )}\n </>\n ) : (\n <Typography\n variant=\"body2\"\n color=\"text.secondary\"\n sx={{\n fontSize: '0.875rem',\n }}\n >\n Select Service\n </Typography>\n )}\n\n {/* Separate selector button */}\n <IconButton\n onClick={handleOpenSelector}\n size=\"small\"\n sx={{\n p: 0.2,\n ml: 0.5,\n color: 'text.secondary',\n }}\n >\n <KeyboardArrowDownIcon fontSize=\"small\" />\n </IconButton>\n </Box>\n\n <ServiceSelectorPanel\n open={Boolean(anchorEl)}\n anchorEl={anchorEl}\n onClose={handleClose}\n services={services}\n selectedServiceId={selectedServiceId}\n onSelectService={handleSelectService}\n onCreateService={handleCreateClick}\n onServiceCreated={onServiceCreated}\n loading={loading}\n width={panelWidth}\n isManager={isManager}\n selectedService={selectedService}\n searchTerm={searchTerm}\n onSearchChange={setSearchTerm}\n showArchived={showArchived}\n onToggleArchived={() => setShowArchived(!showArchived)}\n filteredServices={filteredServices}\n onOpenSettings={onOpenSettings}\n onOpenAddMember={onOpenAddMember}\n />\n </>\n );\n};\n\ninterface ServiceSelectorPanelProps {\n open: boolean;\n anchorEl: HTMLElement | null;\n onClose: () => void;\n services: Service[];\n selectedServiceId: string | null;\n onSelectService: (serviceId: string) => void;\n onCreateService?: () => void;\n onServiceCreated?: () => void;\n loading?: boolean;\n width?: number;\n isManager?: boolean;\n selectedService?: Service | null;\n searchTerm?: string;\n onSearchChange?: (term: string) => void;\n showArchived?: boolean;\n onToggleArchived?: () => void;\n filteredServices?: Service[];\n onOpenSettings?: (serviceId: string) => void;\n onOpenAddMember?: (serviceId: string) => void;\n}\n\nconst ServiceSelectorPanel: React.FC<ServiceSelectorPanelProps> = ({\n open,\n anchorEl,\n onClose,\n services,\n selectedServiceId,\n onSelectService,\n onCreateService,\n onServiceCreated,\n loading = false,\n width = 350,\n isManager = false,\n selectedService,\n searchTerm: externalSearchTerm,\n onSearchChange: externalOnSearchChange,\n showArchived: externalShowArchived,\n onToggleArchived: externalOnToggleArchived,\n filteredServices: externalFilteredServices,\n onOpenSettings,\n onOpenAddMember,\n}) => {\n const [internalSearchTerm, setInternalSearchTerm] = useState('');\n const [internalShowArchived, setInternalShowArchived] = useState(false);\n\n const searchTerm = externalSearchTerm !== undefined ? externalSearchTerm : internalSearchTerm;\n const setSearchTerm = externalOnSearchChange || setInternalSearchTerm;\n const showArchived = externalShowArchived !== undefined ? externalShowArchived : internalShowArchived;\n const toggleArchived = externalOnToggleArchived || (() => setInternalShowArchived(!internalShowArchived));\n\n // Filter services if not provided externally\n const filteredServices =\n externalFilteredServices ||\n services.filter((service) => {\n const matchesSearch =\n searchTerm === '' ||\n service.name.toLowerCase().includes(searchTerm.toLowerCase());\n const isArchived = service.archived === true;\n const matchesArchivedFilter = showArchived ? isArchived : !isArchived;\n return matchesSearch && matchesArchivedFilter;\n });\n\n const handleCreateClick = () => {\n if (onCreateService) {\n onCreateService();\n } else {\n // If no onCreateService handler, just close and call onServiceCreated\n onClose();\n if (onServiceCreated) {\n onServiceCreated();\n }\n }\n };\n\n return (\n <Menu\n anchorEl={anchorEl}\n open={open}\n onClose={onClose}\n anchorOrigin={{\n vertical: 'bottom',\n horizontal: 'left',\n }}\n transformOrigin={{\n vertical: 'top',\n horizontal: 'left',\n }}\n PaperProps={{\n sx: {\n width: width,\n maxHeight: '80vh',\n borderRadius: 1,\n boxShadow: '0 2px 10px rgba(0, 0, 0, 0.12)',\n overflow: 'hidden',\n mt: 1,\n },\n }}\n >\n {/* Header with selected service and management buttons */}\n {selectedService && (\n <Box\n sx={{\n paddingLeft: 2,\n paddingRight: 2,\n paddingTop: 1.5,\n paddingBottom: 1.5,\n borderBottom: 1,\n borderColor: 'divider',\n }}\n >\n {/* Top section with service name */}\n <Box sx={{ \n display: 'flex', \n alignItems: 'center', \n mb: 1.5\n }}>\n <Avatar\n sx={{\n width: 32,\n height: 32,\n bgcolor: 'primary.main',\n fontSize: '0.9rem',\n mr: 1.5\n }}\n >\n {selectedService.name.charAt(0)}\n </Avatar>\n <Box sx={{ flex: 1 }}>\n <Box sx={{ display: 'flex', alignItems: 'center', gap: 1 }}>\n <Typography variant=\"subtitle1\" sx={{ fontWeight: 600, fontSize: '1rem' }}>\n {selectedService.name}\n </Typography>\n <Box\n sx={{\n display: 'inline-block',\n bgcolor: 'rgba(0, 0, 0, 0.04)',\n color: 'text.secondary',\n px: 1,\n py: 0.3,\n borderRadius: '12px',\n fontSize: '0.7rem',\n fontWeight: 500,\n lineHeight: 1,\n }}\n >\n {isManager ? 'Manager' : 'Viewer'}\n </Box>\n </Box>\n </Box>\n </Box>\n \n {/* Bottom section with management buttons - always visible */}\n {(onOpenSettings || onOpenAddMember) && (\n <Box sx={{ display: 'flex', gap: 1 }}>\n {onOpenAddMember && (\n <Button\n startIcon={<PersonAddAltIcon />}\n variant=\"outlined\"\n size=\"small\"\n onClick={(e) => {\n e.stopPropagation();\n onClose();\n onOpenAddMember(selectedServiceId || '');\n }}\n disabled={!isManager}\n sx={{\n flex: 1,\n textTransform: 'none', \n color: 'text.secondary',\n fontSize: '0.8rem',\n py: 0.75,\n justifyContent: 'flex-start',\n borderColor: 'rgba(0, 0, 0, 0.12)',\n borderRadius: '6px',\n '&:hover': {\n borderColor: 'rgba(0, 0, 0, 0.23)',\n backgroundColor: 'rgba(0, 0, 0, 0.03)'\n },\n '&:disabled': {\n opacity: 0.5,\n cursor: 'not-allowed'\n }\n }}\n >\n Add member\n </Button>\n )}\n \n {onOpenSettings && (\n <Button\n startIcon={<SettingsIcon />}\n variant=\"outlined\"\n size=\"small\"\n onClick={(e) => {\n e.stopPropagation();\n onClose();\n onOpenSettings(selectedServiceId || '');\n }}\n disabled={!isManager}\n sx={{\n flex: 1,\n textTransform: 'none',\n color: 'text.secondary',\n fontSize: '0.8rem',\n py: 0.75,\n justifyContent: 'flex-start',\n borderColor: 'rgba(0, 0, 0, 0.12)',\n borderRadius: '6px',\n '&:hover': {\n borderColor: 'rgba(0, 0, 0, 0.23)',\n backgroundColor: 'rgba(0, 0, 0, 0.03)'\n },\n '&:disabled': {\n opacity: 0.5,\n cursor: 'not-allowed'\n }\n }}\n >\n Settings\n </Button>\n )}\n </Box>\n )}\n </Box>\n )}\n\n {/* Search box with archive toggle */}\n <Box sx={{ px: 2, pt: 2, pb: 1.5 }}>\n <Box sx={{ display: 'flex', alignItems: 'center', mb: 1.5 }}>\n <TextField\n size=\"small\"\n placeholder=\"Search services...\"\n value={searchTerm}\n onChange={(e) => setSearchTerm(e.target.value)}\n sx={{ flex: 1 }}\n InputProps={{\n startAdornment: (\n <InputAdornment position=\"start\">\n <SearchIcon fontSize=\"small\" color=\"action\" />\n </InputAdornment>\n ),\n sx: {\n borderRadius: 1.5,\n backgroundColor: 'rgba(0, 0, 0, 0.04)',\n '& fieldset': { border: 'none' },\n py: 0.5,\n },\n }}\n />\n <Tooltip title={showArchived ? 'Show active' : 'Show archived'}>\n <IconButton\n size=\"small\"\n onClick={toggleArchived}\n color={showArchived ? 'primary' : 'default'}\n sx={{ ml: 1 }}\n >\n {showArchived ? (\n <UnarchiveIcon fontSize=\"small\" />\n ) : (\n <ArchiveIcon fontSize=\"small\" />\n )}\n </IconButton>\n </Tooltip>\n </Box>\n\n {/* Service list content */}\n <Box\n sx={{\n maxHeight: 400,\n overflow: 'auto',\n py: 1,\n }}\n >\n {loading ? (\n <Box sx={{ p: 2, textAlign: 'center' }}>\n <Typography variant=\"body2\" color=\"text.secondary\">\n Loading services...\n </Typography>\n </Box>\n ) : filteredServices.length === 0 ? (\n <Box sx={{ p: 2, textAlign: 'center' }}>\n <Typography variant=\"body2\" color=\"text.secondary\">\n {searchTerm\n ? `No ${showArchived ? 'archived ' : ''}services matching \"${searchTerm}\"`\n : showArchived\n ? 'No archived services found'\n : 'No active services found'}\n </Typography>\n </Box>\n ) : (\n <>\n {/* Group Header */}\n <Typography\n variant=\"caption\"\n sx={{\n display: 'block',\n px: 2.5,\n py: 0.5,\n color: 'text.secondary',\n fontWeight: 600,\n textTransform: 'uppercase',\n fontSize: '0.65rem',\n letterSpacing: 0.5,\n }}\n >\n Services\n {showArchived && (\n <Chip\n size=\"small\"\n label=\"Archived\"\n color=\"error\"\n variant=\"outlined\"\n sx={{\n ml: 1,\n height: 20,\n fontSize: '0.6rem',\n '& .MuiChip-label': { px: 0.5 },\n '& .MuiChip-icon': { fontSize: '0.7rem', ml: 0.5 },\n }}\n />\n )}\n </Typography>\n\n {/* Group Services */}\n <List disablePadding>\n {filteredServices.map((service) => (\n <ListItem\n key={service.id}\n sx={{\n py: 0.75,\n px: 2,\n cursor: 'pointer',\n '&:hover': {\n backgroundColor: 'rgba(0, 0, 0, 0.04)',\n },\n backgroundColor:\n service.id === selectedServiceId\n ? 'rgba(25, 118, 210, 0.08)'\n : 'transparent',\n position: 'relative',\n }}\n onClick={() => onSelectService(service.id)}\n secondaryAction={\n service.id === selectedServiceId ? (\n <CheckIcon\n sx={{\n color: 'primary.main',\n fontSize: '1.2rem',\n }}\n />\n ) : null\n }\n >\n <ListItemAvatar sx={{ minWidth: 40 }}>\n <Avatar\n sx={{\n width: 26,\n height: 26,\n bgcolor:\n service.id === selectedServiceId ? 'primary.main' : 'grey.400',\n fontSize: '0.8rem',\n }}\n src={service.avatar}\n >\n {service.name.charAt(0)}\n </Avatar>\n </ListItemAvatar>\n <ListItemText\n primary={\n <Box sx={{ display: 'flex', alignItems: 'center', gap: 0.5 }}>\n <Typography\n variant=\"body2\"\n sx={{\n fontWeight: service.id === selectedServiceId ? 600 : 400,\n color:\n service.id === selectedServiceId\n ? 'primary.main'\n : 'text.primary',\n }}\n >\n {service.name}\n </Typography>\n </Box>\n }\n primaryTypographyProps={{ sx: { fontWeight: 500 } }}\n sx={{ my: 0 }}\n />\n </ListItem>\n ))}\n </List>\n </>\n )}\n </Box>\n\n {/* Footer actions */}\n <Box\n sx={{\n paddingTop: 2,\n paddingLeft: 2,\n paddingRight: 2,\n borderTop: 1,\n borderColor: 'divider',\n }}\n >\n <Button\n fullWidth\n variant=\"text\"\n startIcon={<AddIcon />}\n onClick={handleCreateClick}\n sx={{\n textTransform: 'none',\n fontWeight: 500,\n justifyContent: 'flex-start',\n color: 'primary.main',\n py: 1,\n px: 1.5,\n '&:hover': {\n backgroundColor: 'rgba(25, 118, 210, 0.08)',\n },\n }}\n >\n New Service\n </Button>\n </Box>\n </Box>\n </Menu>\n );\n};\n\nexport default ServiceSelectorButton;\n\n","import React, { useState, useCallback } from 'react';\nimport {\n Box,\n Typography,\n Avatar,\n IconButton,\n Link,\n TextField,\n InputAdornment,\n List,\n ListItem,\n ListItemAvatar,\n ListItemText,\n Button,\n Menu,\n} from '@mui/material';\nimport KeyboardArrowDownIcon from '@mui/icons-material/KeyboardArrowDown';\nimport SearchIcon from '@mui/icons-material/Search';\nimport AddIcon from '@mui/icons-material/Add';\nimport CheckIcon from '@mui/icons-material/Check';\n\nexport interface Workspace {\n id: string;\n name: string;\n description?: string;\n}\n\nexport interface WorkspaceSelectorButtonProps {\n /**\n * List of workspaces to display\n */\n workspaces: Workspace[];\n /**\n * Currently selected workspace ID\n */\n selectedWorkspaceId: string | null;\n /**\n * Loading state\n */\n loading?: boolean;\n /**\n * Callback when workspace is selected\n */\n onSelectWorkspace?: (workspaceId: string) => void;\n /**\n * Callback when workspace name is clicked (for navigation)\n */\n onWorkspaceClick?: (workspaceId: string) => void;\n /**\n * Callback when \"Create Workspace\" is clicked\n */\n onCreateWorkspace?: () => void;\n /**\n * Custom styles\n */\n sx?: any;\n /**\n * Panel width\n * @default 350\n */\n panelWidth?: number;\n}\n\nexport const WorkspaceSelectorButton: React.FC<WorkspaceSelectorButtonProps> = ({\n workspaces,\n selectedWorkspaceId,\n loading = false,\n onSelectWorkspace,\n onWorkspaceClick,\n onCreateWorkspace,\n sx = {},\n panelWidth = 350,\n}) => {\n const [anchorEl, setAnchorEl] = useState<null | HTMLElement>(null);\n\n // Handle opening the workspace selector\n const handleOpenSelector = (event: React.MouseEvent<HTMLElement>) => {\n event.stopPropagation();\n setAnchorEl(event.currentTarget);\n };\n\n // Handle closing the workspace selector\n const handleClose = () => {\n setAnchorEl(null);\n };\n\n // Handle selecting a workspace\n const handleSelectWorkspace = useCallback(\n (workspaceId: string) => {\n handleClose();\n if (onSelectWorkspace) {\n onSelectWorkspace(workspaceId);\n }\n },\n [onSelectWorkspace]\n );\n\n // Get the selected workspace\n const selectedWorkspace = Array.isArray(workspaces)\n ? workspaces.find((w) => w.id === selectedWorkspaceId)\n : null;\n\n if (!workspaces || workspaces.length === 0) {\n return null;\n }\n\n return (\n <>\n <Box sx={{ display: 'flex', alignItems: 'center', ...sx }}>\n {selectedWorkspace ? (\n <>\n {/* Workspace name as a regular breadcrumb link */}\n <Link\n underline=\"hover\"\n color=\"inherit\"\n onClick={(e) => {\n e.stopPropagation();\n if (onWorkspaceClick) {\n onWorkspaceClick(selectedWorkspace.id);\n }\n }}\n sx={{\n display: 'flex',\n alignItems: 'center',\n fontSize: '0.875rem',\n cursor: 'pointer',\n mr: 0.5,\n }}\n >\n <Avatar\n sx={{\n width: 20,\n height: 20,\n bgcolor: 'secondary.main',\n fontSize: '0.7rem',\n mr: 0.5,\n }}\n >\n {selectedWorkspace.name.charAt(0)}\n </Avatar>\n {selectedWorkspace.name}\n </Link>\n </>\n ) : (\n <Typography\n variant=\"body2\"\n color=\"text.secondary\"\n sx={{\n fontSize: '0.875rem',\n }}\n >\n Select Workspace\n </Typography>\n )}\n\n {/* Separate selector button */}\n <IconButton\n onClick={handleOpenSelector}\n size=\"small\"\n sx={{\n p: 0.2,\n ml: 0.5,\n color: 'text.secondary',\n }}\n >\n <KeyboardArrowDownIcon fontSize=\"small\" />\n </IconButton>\n </Box>\n\n <WorkspaceSelectorPanel\n open={Boolean(anchorEl)}\n anchorEl={anchorEl}\n onClose={handleClose}\n workspaces={workspaces}\n selectedWorkspaceId={selectedWorkspaceId}\n onSelectWorkspace={handleSelectWorkspace}\n onCreateWorkspace={onCreateWorkspace}\n loading={loading}\n width={panelWidth}\n />\n </>\n );\n};\n\ninterface WorkspaceSelectorPanelProps {\n open: boolean;\n anchorEl: HTMLElement | null;\n onClose: () => void;\n workspaces: Workspace[];\n selectedWorkspaceId: string | null;\n onSelectWorkspace: (workspaceId: string) => void;\n onCreateWorkspace?: () => void;\n loading?: boolean;\n width?: number;\n}\n\nconst WorkspaceSelectorPanel: React.FC<WorkspaceSelectorPanelProps> = ({\n open,\n anchorEl,\n onClose,\n workspaces,\n selectedWorkspaceId,\n onSelectWorkspace,\n onCreateWorkspace,\n loading = false,\n width = 350,\n}) => {\n const [searchTerm, setSearchTerm] = useState('');\n\n // Reset search when panel opens\n React.useEffect(() => {\n if (open) {\n setSearchTerm('');\n }\n }, [open]);\n\n const filteredWorkspaces = workspaces.filter((w) =>\n w.name.toLowerCase().includes(searchTerm.toLowerCase())\n );\n\n const handleCreateClick = () => {\n onClose();\n if (onCreateWorkspace) {\n onCreateWorkspace();\n }\n };\n\n const handleSelect = (workspaceId: string) => {\n onSelectWorkspace(workspaceId);\n onClose();\n };\n\n return (\n <Menu\n open={open}\n anchorEl={anchorEl}\n onClose={onClose}\n anchorOrigin={{ vertical: 'bottom', horizontal: 'left' }}\n transformOrigin={{ vertical: 'top', horizontal: 'left' }}\n PaperProps={{\n sx: {\n width: width,\n maxHeight: 600,\n mt: 1,\n borderRadius: 2,\n },\n }}\n >\n <Box>\n {/* Search box */}\n <Box sx={{ px: 2, pt: 2, pb: 1.5 }}>\n <TextField\n fullWidth\n size=\"small\"\n placeholder=\"Search workspaces...\"\n value={searchTerm}\n onChange={(e) => setSearchTerm(e.target.value)}\n InputProps={{\n startAdornment: (\n <InputAdornment position=\"start\">\n <SearchIcon fontSize=\"small\" />\n </InputAdornment>\n ),\n }}\n />\n </Box>\n\n {/* Workspace list */}\n <Box sx={{ maxHeight: 400, overflowY: 'auto' }}>\n {loading ? (\n <Box sx={{ p: 2, textAlign: 'center' }}>\n <Typography variant=\"body2\" color=\"text.secondary\">\n Loading...\n </Typography>\n </Box>\n ) : filteredWorkspaces.length === 0 ? (\n <Box sx={{ p: 2, textAlign: 'center' }}>\n <Typography variant=\"body2\" color=\"text.secondary\">\n No workspaces found\n </Typography>\n </Box>\n ) : (\n <List dense>\n {filteredWorkspaces.map((workspace) => (\n <ListItem\n key={workspace.id}\n onClick={() => handleSelect(workspace.id)}\n sx={{\n py: 0.5,\n cursor: 'pointer',\n bgcolor:\n workspace.id === selectedWorkspaceId\n ? 'action.selected'\n : 'transparent',\n '&:hover': {\n bgcolor: 'action.hover',\n },\n }}\n >\n <ListItemAvatar>\n <Avatar\n sx={{ width: 32, height: 32, bgcolor: 'secondary.main' }}\n >\n {workspace.name.charAt(0)}\n </Avatar>\n </ListItemAvatar>\n <ListItemText\n primary={\n <Box sx={{ display: 'flex', alignItems: 'center', gap: 1 }}>\n <Typography variant=\"body2\" fontWeight={500}>\n {workspace.name}\n </Typography>\n {workspace.id === selectedWorkspaceId && (\n <CheckIcon fontSize=\"small\" color=\"primary\" />\n )}\n </Box>\n }\n secondary={workspace.description}\n />\n </ListItem>\n ))}\n </List>\n )}\n </Box>\n\n {/* Footer actions */}\n <Box\n sx={{\n paddingTop: 2,\n paddingLeft: 2,\n paddingRight: 2,\n borderTop: 1,\n borderColor: 'divider',\n }}\n >\n <Button\n fullWidth\n variant=\"text\"\n startIcon={<AddIcon />}\n onClick={handleCreateClick}\n sx={{\n textTransform: 'none',\n fontWeight: 500,\n justifyContent: 'flex-start',\n color: 'primary.main',\n py: 1,\n px: 1.5,\n '&:hover': {\n backgroundColor: 'rgba(25, 118, 210, 0.08)',\n },\n }}\n >\n New Workspace\n </Button>\n </Box>\n </Box>\n </Menu>\n );\n};\n\nexport default WorkspaceSelectorButton;\n\n","import React from 'react';\nimport {\n Stepper as MuiStepper,\n Step as MuiStep,\n StepLabel as MuiStepLabel,\n StepContent as MuiStepContent,\n StepButton as MuiStepButton,\n StepperProps as MuiStepperProps,\n StepProps as MuiStepProps,\n StepLabelProps as MuiStepLabelProps,\n StepContentProps as MuiStepContentProps,\n StepButtonProps as MuiStepButtonProps,\n} from '@mui/material';\n\nexport interface StepperProps extends MuiStepperProps {}\n\n/**\n * Stepper component - displays progress through a sequence of steps\n * \n * @example\n * ```tsx\n * <Stepper activeStep={activeStep}>\n * <Step>\n * <StepLabel>Step 1</StepLabel>\n * </Step>\n * <Step>\n * <StepLabel>Step 2</StepLabel>\n * </Step>\n * </Stepper>\n * ```\n */\nexport const Stepper: React.FC<StepperProps> = (props) => {\n return <MuiStepper {...props} />;\n};\n\nexport interface StepProps extends MuiStepProps {}\n\n/**\n * Step component - represents a single step in a Stepper\n */\nexport const Step: React.FC<StepProps> = (props) => {\n return <MuiStep {...props} />;\n};\n\nexport interface StepLabelProps extends MuiStepLabelProps {}\n\n/**\n * StepLabel component - label for a Step\n */\nexport const StepLabel: React.FC<StepLabelProps> = (props) => {\n return <MuiStepLabel {...props} />;\n};\n\nexport interface StepContentProps extends MuiStepContentProps {}\n\n/**\n * StepContent component - optional content that appears below a StepLabel\n */\nexport const StepContent: React.FC<StepContentProps> = (props) => {\n return <MuiStepContent {...props} />;\n};\n\nexport interface StepButtonProps extends MuiStepButtonProps {}\n\n/**\n * StepButton component - makes a Step clickable\n */\nexport const StepButton: React.FC<StepButtonProps> = (props) => {\n return <MuiStepButton {...props} />;\n};\n\nexport default Stepper;\n\n","import React from 'react';\nimport MuiBadge, { BadgeProps as MuiBadgeProps } from '@mui/material/Badge';\nimport { styled } from '@mui/material/styles';\nimport { colors } from '../../theme';\n\nexport type BadgeVariant = 'default' | 'primary' | 'success' | 'error';\n\nexport interface BadgeProps extends Omit<MuiBadgeProps, 'color' | 'variant'> {\n variant?: BadgeVariant;\n children?: React.ReactNode;\n}\n\nconst getBadgeColor = (variant: BadgeVariant) => {\n switch (variant) {\n case 'primary':\n return colors.primary.main;\n case 'success':\n return colors.success.main;\n case 'error':\n return colors.error.main;\n default:\n return colors.grey[400];\n }\n};\n\nconst StyledBadge = styled(MuiBadge, {\n shouldForwardProp: (prop) => prop !== 'badgeVariant',\n})<{ badgeVariant?: BadgeVariant }>(({ badgeVariant = 'default' }) => ({\n '& .MuiBadge-badge': {\n backgroundColor: getBadgeColor(badgeVariant),\n color: '#FFFFFF',\n },\n}));\n\nexport const Badge: React.FC<BadgeProps> = ({\n variant = 'default',\n children,\n badgeContent,\n ...props\n}) => {\n return (\n <StyledBadge badgeVariant={variant} badgeContent={badgeContent} {...props}>\n {children}\n </StyledBadge>\n );\n};\n\n","import React from 'react';\nimport MuiChip, { ChipProps as MuiChipProps } from '@mui/material/Chip';\nimport { styled } from '@mui/material/styles';\nimport { colors } from '../../theme';\n\nexport type ChipVariant = 'default' | 'active';\n\nexport interface ChipProps extends Omit<MuiChipProps, 'color' | 'variant'> {\n variant?: ChipVariant;\n}\n\nconst StyledDefaultChip = styled(MuiChip)({\n backgroundColor: colors.grey[100],\n color: colors.text.primary,\n '&:hover': {\n backgroundColor: colors.grey[200],\n },\n});\n\nconst StyledActiveChip = styled(MuiChip)({\n backgroundColor: colors.background.selected,\n color: colors.primary.main,\n '&:hover': {\n backgroundColor: colors.background.selected,\n },\n});\n\nexport const Chip: React.FC<ChipProps> = ({\n variant = 'default',\n ...props\n}) => {\n if (variant === 'active') {\n return <StyledActiveChip {...props} />;\n }\n return <StyledDefaultChip {...props} />;\n};\n\n","import React from 'react';\nimport MuiTooltip, { TooltipProps as MuiTooltipProps } from '@mui/material/Tooltip';\nimport { styled } from '@mui/material/styles';\nimport { colors } from '../../theme';\n\nexport interface TooltipProps extends MuiTooltipProps {}\n\nconst StyledTooltip = styled(MuiTooltip)({\n '& .MuiTooltip-tooltip': {\n backgroundColor: colors.grey[800],\n color: '#FFFFFF',\n fontSize: '12px',\n padding: '8px 12px',\n borderRadius: '4px',\n },\n '& .MuiTooltip-arrow': {\n color: colors.grey[800],\n },\n});\n\nexport const Tooltip: React.FC<TooltipProps> = (props) => {\n return <StyledTooltip {...props} />;\n};\n\n","import React from 'react';\nimport {\n LinearProgress,\n CircularProgress,\n styled,\n} from '@mui/material';\nimport { colors } from '../../theme';\n\nexport type ProgressVariant = 'linear' | 'circular';\n\nexport interface ProgressProps {\n variant?: ProgressVariant;\n value?: number;\n size?: number;\n thickness?: number;\n}\n\nconst StyledLinearProgress = styled(LinearProgress)({\n height: 4,\n borderRadius: 2,\n backgroundColor: colors.grey[200],\n '& .MuiLinearProgress-bar': {\n backgroundColor: colors.primary.main,\n borderRadius: 2,\n },\n});\n\nconst StyledCircularProgress = styled(CircularProgress)({\n color: colors.primary.main,\n});\n\nexport const Progress: React.FC<ProgressProps> = ({\n variant = 'linear',\n value,\n size = 40,\n thickness = 4,\n}) => {\n if (variant === 'circular') {\n return <StyledCircularProgress size={size} thickness={thickness} />;\n }\n\n return (\n <StyledLinearProgress\n variant={value !== undefined ? 'determinate' : 'indeterminate'}\n value={value}\n />\n );\n};\n\n","import React from 'react';\nimport MuiTab, { TabProps as MuiTabProps } from '@mui/material/Tab';\nimport { styled } from '@mui/material/styles';\nimport { colors } from '../../theme';\nimport { Badge } from '../feedback/Badge';\n\nexport interface TabProps extends Omit<MuiTabProps, 'icon'> {\n badge?: number | string;\n badgeVariant?: 'default' | 'primary' | 'success' | 'error';\n}\n\nconst StyledTab = styled(MuiTab)({\n textTransform: 'none',\n minHeight: '48px',\n fontWeight: 400,\n color: colors.text.primary,\n borderBottom: '2px solid transparent',\n '&:hover': {\n color: colors.primary.main,\n },\n '&.Mui-selected': {\n fontWeight: 600,\n color: colors.primary.main,\n borderBottom: `2px solid ${colors.primary.main}`,\n },\n});\n\nexport const Tab: React.FC<TabProps> = ({\n badge,\n badgeVariant = 'primary',\n label,\n ...props\n}) => {\n const tabLabel = badge !== undefined ? (\n <Badge variant={badgeVariant} badgeContent={badge}>\n {label}\n </Badge>\n ) : (\n label\n );\n\n return <StyledTab label={tabLabel} {...props} />;\n};\n\n","import React from 'react';\nimport {\n Menu as MuiMenu,\n MenuItem as MuiMenuItem,\n MenuProps as MuiMenuProps,\n ListItemIcon,\n ListItemText,\n Divider,\n} from '@mui/material';\nimport { styled } from '@mui/material/styles';\nimport { colors } from '../../theme';\n\nexport interface MenuProps extends Omit<MuiMenuProps, 'open'> {\n anchorEl?: HTMLElement | null;\n onClose: () => void;\n}\n\nconst StyledMenu = styled(MuiMenu)({\n '& .MuiPaper-root': {\n borderRadius: 8,\n boxShadow: '0px 4px 12px rgba(0, 0, 0, 0.15)',\n minWidth: 200,\n },\n '& .MuiMenuItem-root': {\n padding: '8px 16px',\n '&:hover': {\n backgroundColor: colors.background.selected,\n },\n },\n});\n\nexport const Menu: React.FC<MenuProps> = ({ anchorEl, onClose, children, ...props }) => {\n return (\n <StyledMenu\n anchorEl={anchorEl}\n open={Boolean(anchorEl)}\n onClose={onClose}\n anchorOrigin={{\n vertical: 'bottom',\n horizontal: 'left',\n }}\n transformOrigin={{\n vertical: 'top',\n horizontal: 'left',\n }}\n {...props}\n >\n {children}\n </StyledMenu>\n );\n};\n\nexport interface MenuItemProps {\n icon?: React.ReactNode;\n label: string;\n onClick?: () => void;\n disabled?: boolean;\n divider?: boolean;\n}\n\nexport const MenuItem: React.FC<MenuItemProps> = ({\n icon,\n label,\n onClick,\n disabled = false,\n divider = false,\n}) => {\n return (\n <>\n <MuiMenuItem onClick={onClick} disabled={disabled}>\n {icon && <ListItemIcon>{icon}</ListItemIcon>}\n <ListItemText>{label}</ListItemText>\n </MuiMenuItem>\n {divider && <Divider />}\n </>\n );\n};\n\n","import React from 'react';\nimport MuiPagination, { PaginationProps as MuiPaginationProps } from '@mui/material/Pagination';\nimport { styled } from '@mui/material/styles';\nimport { colors } from '../../theme';\n\nexport interface PaginationProps extends Omit<MuiPaginationProps, 'color'> {\n color?: 'primary' | 'secondary' | 'standard';\n}\n\nconst StyledPagination = styled(MuiPagination)({\n '& .MuiPaginationItem-root': {\n '&.Mui-selected': {\n backgroundColor: colors.primary.main,\n color: colors.primary.contrastText,\n '&:hover': {\n backgroundColor: colors.primary.light,\n },\n },\n '&:hover': {\n backgroundColor: colors.background.selected,\n },\n },\n});\n\nexport const Pagination: React.FC<PaginationProps> = ({ color = 'primary', ...props }) => {\n return <StyledPagination color={color} {...props} />;\n};\n\n","import React, { useState } from 'react';\nimport {\n Box,\n Typography,\n Avatar,\n Menu,\n InputAdornment,\n List,\n ListItemButton,\n ListItemAvatar,\n ListItemText,\n CircularProgress,\n} from '@mui/material';\nimport KeyboardArrowDownIcon from '@mui/icons-material/KeyboardArrowDown';\nimport SearchIcon from '@mui/icons-material/Search';\nimport AddIcon from '@mui/icons-material/Add';\nimport { colors } from '../../theme';\nimport { Link } from '../layout/Link';\nimport { IconButton } from '../buttons/IconButton';\nimport { TextField } from '../inputs/TextField';\nimport { Button } from '../buttons/Button';\n\nexport interface SelectorOption {\n id: string;\n name: string;\n description?: string;\n avatar?: string;\n icon?: React.ReactNode;\n disabled?: boolean;\n}\n\nexport interface SelectorProps {\n options: SelectorOption[];\n selectedId: string | null;\n onSelect: (id: string) => void;\n onCreate?: () => void;\n loading?: boolean;\n placeholder?: string;\n emptyMessage?: string;\n compact?: boolean;\n renderSelected?: (option: SelectorOption) => React.ReactNode;\n width?: number;\n}\n\nexport const Selector: React.FC<SelectorProps> = ({\n options,\n selectedId,\n onSelect,\n onCreate,\n loading = false,\n placeholder = 'Select...',\n emptyMessage = 'No items found',\n compact = false,\n renderSelected,\n width = 350,\n}) => {\n const [anchorEl, setAnchorEl] = useState<HTMLElement | null>(null);\n const [searchTerm, setSearchTerm] = useState('');\n\n const open = Boolean(anchorEl);\n const selectedOption = options.find((opt) => opt.id === selectedId);\n\n const filteredOptions = options.filter((opt) =>\n opt.name.toLowerCase().includes(searchTerm.toLowerCase())\n );\n\n const handleOpen = (event: React.MouseEvent<HTMLElement>) => {\n event.stopPropagation();\n setAnchorEl(event.currentTarget);\n };\n\n const handleClose = () => {\n setAnchorEl(null);\n setSearchTerm('');\n };\n\n const handleSelect = (id: string) => {\n onSelect(id);\n handleClose();\n };\n\n const defaultRenderSelected = (option: SelectorOption) => (\n <Box sx={{ display: 'flex', alignItems: 'center', gap: 1 }}>\n {option.avatar ? (\n <Avatar src={option.avatar} sx={{ width: 20, height: 20 }} />\n ) : option.icon ? (\n option.icon\n ) : (\n <Avatar sx={{ width: 20, height: 20, bgcolor: colors.primary.main, fontSize: '0.7rem' }}>\n {option.name.charAt(0)}\n </Avatar>\n )}\n <Typography variant=\"body2\">{option.name}</Typography>\n </Box>\n );\n\n if (compact) {\n return (\n <>\n <IconButton onClick={handleOpen} size=\"small\">\n {selectedOption ? (\n selectedOption.avatar ? (\n <Avatar src={selectedOption.avatar} sx={{ width: 32, height: 32 }} />\n ) : (\n <Avatar sx={{ width: 32, height: 32, bgcolor: colors.primary.main }}>\n {selectedOption.name.charAt(0)}\n </Avatar>\n )\n ) : (\n <Avatar sx={{ width: 32, height: 32, bgcolor: colors.grey[400] }}>?</Avatar>\n )}\n </IconButton>\n <Menu\n anchorEl={anchorEl}\n open={open}\n onClose={handleClose}\n PaperProps={{\n sx: { width, maxHeight: 600, mt: 1 },\n }}\n >\n {loading ? (\n <Box sx={{ display: 'flex', justifyContent: 'center', p: 2 }}>\n <CircularProgress size={24} />\n </Box>\n ) : (\n <>\n {options.length > 5 && (\n <Box sx={{ p: 1, borderBottom: `1px solid ${colors.grey[200]}` }}>\n <TextField\n size=\"small\"\n fullWidth\n placeholder=\"Search...\"\n value={searchTerm}\n onChange={(e) => setSearchTerm(e.target.value)}\n InputProps={{\n startAdornment: (\n <InputAdornment position=\"start\">\n <SearchIcon fontSize=\"small\" />\n </InputAdornment>\n ),\n }}\n />\n </Box>\n )}\n <List sx={{ maxHeight: 400, overflow: 'auto' }}>\n {filteredOptions.map((option) => (\n <ListItemButton\n key={option.id}\n selected={option.id === selectedId}\n onClick={() => handleSelect(option.id)}\n disabled={option.disabled}\n >\n {option.avatar ? (\n <ListItemAvatar>\n <Avatar src={option.avatar} />\n </ListItemAvatar>\n ) : option.icon ? (\n <ListItemAvatar>{option.icon}</ListItemAvatar>\n ) : (\n <ListItemAvatar>\n <Avatar sx={{ bgcolor: colors.primary.main }}>\n {option.name.charAt(0)}\n </Avatar>\n </ListItemAvatar>\n )}\n <ListItemText primary={option.name} secondary={option.description} />\n </ListItemButton>\n ))}\n {filteredOptions.length === 0 && (\n <Box sx={{ p: 2, textAlign: 'center' }}>\n <Typography variant=\"body2\" color=\"text.secondary\">\n {emptyMessage}\n </Typography>\n </Box>\n )}\n </List>\n {onCreate && (\n <Box sx={{ p: 1, borderTop: `1px solid ${colors.grey[200]}` }}>\n <Button\n fullWidth\n startIcon={<AddIcon />}\n onClick={() => {\n onCreate();\n handleClose();\n }}\n >\n Create New\n </Button>\n </Box>\n )}\n </>\n )}\n </Menu>\n </>\n );\n }\n\n return (\n <>\n <Box sx={{ display: 'flex', alignItems: 'center', gap: 0.5 }}>\n {selectedOption ? (\n renderSelected ? (\n <Link onClick={handleOpen} underline=\"hover\">\n {renderSelected(selectedOption)}\n </Link>\n ) : (\n <Link onClick={handleOpen} underline=\"hover\">\n {defaultRenderSelected(selectedOption)}\n </Link>\n )\n ) : (\n <Typography variant=\"body2\" color=\"text.secondary\">\n {placeholder}\n </Typography>\n )}\n <IconButton onClick={handleOpen} size=\"small\" sx={{ p: 0.2, ml: 0.5 }}>\n <KeyboardArrowDownIcon fontSize=\"small\" />\n </IconButton>\n </Box>\n <Menu\n anchorEl={anchorEl}\n open={open}\n onClose={handleClose}\n PaperProps={{\n sx: { width, maxHeight: 600, mt: 1 },\n }}\n >\n {loading ? (\n <Box sx={{ display: 'flex', justifyContent: 'center', p: 2 }}>\n <CircularProgress size={24} />\n </Box>\n ) : (\n <>\n {options.length > 5 && (\n <Box sx={{ p: 1, borderBottom: `1px solid ${colors.grey[200]}` }}>\n <TextField\n size=\"small\"\n fullWidth\n placeholder=\"Search...\"\n value={searchTerm}\n onChange={(e) => setSearchTerm(e.target.value)}\n InputProps={{\n startAdornment: (\n <InputAdornment position=\"start\">\n <SearchIcon fontSize=\"small\" />\n </InputAdornment>\n ),\n }}\n />\n </Box>\n )}\n <List sx={{ maxHeight: 400, overflow: 'auto' }}>\n {filteredOptions.map((option) => (\n <ListItemButton\n key={option.id}\n selected={option.id === selectedId}\n onClick={() => handleSelect(option.id)}\n disabled={option.disabled}\n >\n {option.avatar ? (\n <ListItemAvatar>\n <Avatar src={option.avatar} />\n </ListItemAvatar>\n ) : option.icon ? (\n <ListItemAvatar>{option.icon}</ListItemAvatar>\n ) : (\n <ListItemAvatar>\n <Avatar sx={{ bgcolor: colors.primary.main }}>\n {option.name.charAt(0)}\n </Avatar>\n </ListItemAvatar>\n )}\n <ListItemText primary={option.name} secondary={option.description} />\n </ListItemButton>\n ))}\n {filteredOptions.length === 0 && (\n <Box sx={{ p: 2, textAlign: 'center' }}>\n <Typography variant=\"body2\" color=\"text.secondary\">\n {emptyMessage}\n </Typography>\n </Box>\n )}\n </List>\n {onCreate && (\n <Box sx={{ p: 1, borderTop: `1px solid ${colors.grey[200]}` }}>\n <Button\n fullWidth\n startIcon={<AddIcon />}\n onClick={() => {\n onCreate();\n handleClose();\n }}\n >\n Create New\n </Button>\n </Box>\n )}\n </>\n )}\n </Menu>\n </>\n );\n};\n\n","import React from 'react';\nimport MuiLink, { LinkProps as MuiLinkProps } from '@mui/material/Link';\nimport { styled } from '@mui/material/styles';\nimport { colors } from '../../theme';\n\nexport interface LinkProps extends MuiLinkProps {\n underline?: 'none' | 'hover' | 'always';\n}\n\nconst StyledLink = styled(MuiLink)({\n color: colors.primary.main,\n '&:hover': {\n color: colors.primary.light,\n },\n});\n\nexport const Link: React.FC<LinkProps> = ({ underline = 'hover', ...props }) => {\n return <StyledLink underline={underline} {...props} />;\n};\n\n","import React, { ReactNode } from 'react';\nimport {\n Dialog as MuiDialog,\n DialogTitle,\n DialogContent,\n DialogActions,\n Button,\n IconButton,\n Box,\n Typography,\n Divider,\n DialogProps as MuiDialogProps,\n CircularProgress,\n} from '@mui/material';\nimport CloseIcon from '@mui/icons-material/Close';\n\nexport interface DialogProps extends Omit<MuiDialogProps, 'title'> {\n open: boolean;\n title: ReactNode;\n onClose: () => void;\n onSubmit?: () => void;\n submitLabel?: string;\n cancelLabel?: string;\n isLoading?: boolean;\n disableSubmit?: boolean;\n showActions?: boolean;\n headerAction?: ReactNode;\n fullWidth?: boolean;\n maxWidth?: 'xs' | 'sm' | 'md' | 'lg' | 'xl';\n children: ReactNode;\n dividers?: boolean;\n confirmBeforeClose?: boolean;\n /**\n * Custom actions to render instead of default actions\n * If provided, showActions is ignored and custom actions are used\n */\n customActions?: ReactNode;\n}\n\nexport const Dialog: React.FC<DialogProps> = ({\n open,\n title,\n onClose,\n onSubmit,\n submitLabel = 'Save',\n cancelLabel = 'Cancel',\n isLoading = false,\n disableSubmit = false,\n showActions = true,\n headerAction,\n fullWidth = true,\n maxWidth = 'md',\n children,\n dividers = true,\n confirmBeforeClose = false,\n customActions,\n ...dialogProps\n}) => {\n const handleCloseAttempt = (e?: React.MouseEvent) => {\n if (e) e.stopPropagation();\n onClose();\n };\n\n return (\n <MuiDialog\n open={open}\n onClose={(_, reason) => {\n if (reason === 'backdropClick' || reason === 'escapeKeyDown' && !confirmBeforeClose) {\n onClose();\n }\n }}\n fullWidth={fullWidth}\n maxWidth={maxWidth}\n {...dialogProps}\n PaperProps={{\n sx: { minHeight: dialogProps.fullScreen ? undefined : 'auto' },\n ...dialogProps.PaperProps\n }}\n >\n <DialogTitle sx={{ display: 'flex', justifyContent: 'space-between', alignItems: 'center', p: 2 }}>\n <Box sx={{ display: 'flex', alignItems: 'center' }}>\n {typeof title === 'string' ? (\n <Typography variant=\"h6\">{title}</Typography>\n ) : (\n title\n )}\n </Box>\n <Box sx={{ display: 'flex', alignItems: 'center' }}>\n {headerAction}\n <IconButton\n edge=\"end\"\n color=\"inherit\"\n onClick={handleCloseAttempt}\n aria-label=\"close\"\n >\n <CloseIcon />\n </IconButton>\n </Box>\n </DialogTitle>\n\n {dividers && <Divider />}\n\n <DialogContent dividers={dividers}>\n {children}\n </DialogContent>\n\n {(showActions || customActions) && (\n <>\n {dividers && <Divider />}\n <DialogActions>\n {customActions || (\n <>\n <Button\n onClick={handleCloseAttempt}\n disabled={isLoading}\n >\n {cancelLabel}\n </Button>\n {onSubmit && (\n <Button\n variant=\"contained\"\n color=\"primary\"\n onClick={onSubmit}\n disabled={disableSubmit || isLoading}\n startIcon={isLoading ? <CircularProgress size={20} /> : undefined}\n >\n {submitLabel}\n </Button>\n )}\n </>\n )}\n </DialogActions>\n </>\n )}\n </MuiDialog>\n );\n};\n\n","import React, { ReactNode } from 'react';\nimport MuiDrawer, { DrawerProps as MuiDrawerProps } from '@mui/material/Drawer';\nimport { styled } from '@mui/material/styles';\nimport { Box, IconButton, Typography, Divider, Tabs, Tab, BoxProps } from '@mui/material';\nimport CloseIcon from '@mui/icons-material/Close';\n\nexport interface DrawerProps extends Omit<MuiDrawerProps, 'title'> {\n /**\n * Width of the drawer when open\n * @default 400 for temporary/temporary variant, 240 for permanent\n */\n width?: number;\n /**\n * Width of the drawer when collapsed (mini variant)\n * @default 72\n */\n miniWidth?: number;\n /**\n * Whether the drawer is in collapsed/mini state\n * @default false\n */\n collapsed?: boolean;\n /**\n * Title to display in the drawer header\n */\n title?: ReactNode;\n /**\n * Custom header content (replaces title if provided)\n */\n header?: ReactNode;\n /**\n * Show close button in header\n * @default true for temporary variant, false for permanent\n */\n showCloseButton?: boolean;\n /**\n * Tab labels for tabbed drawer content\n */\n tabs?: string[];\n /**\n * Active tab index\n */\n activeTab?: number;\n /**\n * Callback when tab changes\n */\n onTabChange?: (index: number) => void;\n /**\n * Footer content (actions, buttons, etc.)\n */\n footer?: ReactNode;\n /**\n * Props for drawer content container\n */\n contentProps?: BoxProps;\n /**\n * Anchor position\n * @default 'right'\n */\n anchor?: 'left' | 'right' | 'top' | 'bottom';\n /**\n * Top offset in pixels (e.g., for header + breadcrumbs)\n * @default 0\n */\n topOffset?: number;\n}\n\nconst StyledDrawer = styled(MuiDrawer, {\n shouldForwardProp: (prop) => prop !== 'width' && prop !== 'miniWidth' && prop !== 'collapsed' && prop !== 'topOffset',\n})<Pick<DrawerProps, 'width' | 'miniWidth' | 'collapsed' | 'topOffset'>>(({ theme, width = 240, miniWidth = 72, collapsed, topOffset = 0 }) => ({\n width: collapsed ? miniWidth : width,\n flexShrink: 0,\n '& .MuiDrawer-paper': {\n width: collapsed ? miniWidth : width,\n boxSizing: 'border-box',\n boxShadow: '0px 2px 10px rgba(0, 0, 0, 0.05)',\n transition: theme.transitions.create(['width', 'top', 'height'], {\n easing: theme.transitions.easing.sharp,\n duration: theme.transitions.duration.enteringScreen,\n }),\n overflow: 'visible', // Let internal content handle scrolling\n display: 'flex',\n flexDirection: 'column',\n top: `${topOffset}px !important`,\n height: topOffset > 0 ? `calc(100% - ${topOffset}px) !important` : '100%',\n zIndex: `${theme.zIndex.modal} !important`, // Use modal zIndex to be above everything except AppBar (which is modal + 1)\n },\n}));\n\n/**\n * Drawer component for navigation drawers and side panels\n * Can be used as a replacement for Dialog for better UX\n * \n * @example\n * ```tsx\n * // Simple drawer\n * <Drawer open={true} variant=\"temporary\" width={400} title=\"Settings\" onClose={handleClose}>\n * <Box p={2}>Content here</Box>\n * </Drawer>\n * \n * // Drawer with tabs\n * <Drawer \n * open={true} \n * variant=\"temporary\" \n * width={600} \n * title=\"Edit Stream\"\n * tabs={['General', 'Rules', 'Settings']}\n * activeTab={activeTab}\n * onTabChange={setActiveTab}\n * onClose={handleClose}\n * >\n * <Box p={2}>{tabContent}</Box>\n * </Drawer>\n * ```\n */\nexport const Drawer: React.FC<DrawerProps> = ({\n width,\n miniWidth = 72,\n collapsed = false,\n title,\n header,\n showCloseButton,\n tabs,\n activeTab = 0,\n onTabChange,\n footer,\n contentProps,\n anchor = 'right',\n variant = 'temporary',\n topOffset = 0,\n children,\n onClose,\n ...props\n}) => {\n // Determine default width based on variant\n const defaultWidth = variant === 'temporary' || variant === 'persistent' ? 400 : 240;\n const finalWidth = width ?? defaultWidth;\n \n // Determine if close button should be shown\n const shouldShowClose = showCloseButton ?? (variant === 'temporary' || variant === 'persistent');\n \n // Determine if we should show header\n const hasHeader = title || header || shouldShowClose || tabs;\n \n return (\n <StyledDrawer\n width={finalWidth}\n miniWidth={miniWidth}\n collapsed={collapsed}\n anchor={anchor}\n variant={variant}\n topOffset={topOffset}\n onClose={onClose}\n ModalProps={{\n ...props.ModalProps,\n style: {\n zIndex: topOffset > 0 ? undefined : undefined, // Let styled component handle zIndex\n },\n }}\n BackdropProps={{\n ...props.BackdropProps,\n style: {\n backgroundColor: 'rgba(0, 0, 0, 0.5)',\n },\n }}\n {...props}\n >\n {hasHeader && (\n <>\n <Box\n sx={{\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n p: 2,\n minHeight: 64,\n borderBottom: 1,\n borderColor: 'divider',\n }}\n >\n {header || (\n <>\n <Box sx={{ flex: 1 }}>\n {typeof title === 'string' ? (\n <Typography variant=\"h6\">{title}</Typography>\n ) : (\n title\n )}\n </Box>\n {shouldShowClose && onClose && (\n <IconButton\n onClick={(e) => {\n e.stopPropagation();\n onClose(e, 'backdropClick');\n }}\n size=\"small\"\n sx={{ ml: 1 }}\n aria-label=\"close\"\n >\n <CloseIcon />\n </IconButton>\n )}\n </>\n )}\n </Box>\n {tabs && tabs.length > 0 && (\n <Tabs\n value={activeTab}\n onChange={(_, newValue) => onTabChange?.(newValue)}\n variant={tabs.length > 4 ? \"scrollable\" : \"standard\"}\n scrollButtons={tabs.length > 4 ? \"auto\" : false}\n sx={{\n borderBottom: 1,\n borderColor: 'divider',\n px: 2,\n '& .MuiTabs-scrollableContainer': {\n overflow: 'auto',\n },\n }}\n >\n {tabs.map((tab, index) => (\n <Tab key={index} label={tab} />\n ))}\n </Tabs>\n )}\n </>\n )}\n \n <Box\n sx={{\n flex: 1,\n overflow: 'auto',\n display: 'flex',\n flexDirection: 'column',\n }}\n {...contentProps}\n >\n {children}\n </Box>\n \n {footer && (\n <>\n <Divider />\n <Box\n sx={{\n p: 2,\n borderTop: 1,\n borderColor: 'divider',\n }}\n >\n {footer}\n </Box>\n </>\n )}\n </StyledDrawer>\n );\n};\n\nexport default Drawer;\n\n","import React from 'react';\nimport MuiCard, { CardProps as MuiCardProps } from '@mui/material/Card';\nimport MuiCardContent, { CardContentProps } from '@mui/material/CardContent';\nimport MuiCardHeader, { CardHeaderProps } from '@mui/material/CardHeader';\nimport MuiCardActions, { CardActionsProps } from '@mui/material/CardActions';\nimport { styled } from '@mui/material/styles';\n\nexport interface CardProps extends MuiCardProps {\n hoverable?: boolean;\n clickable?: boolean;\n}\n\nconst StyledCard = styled(MuiCard, {\n shouldForwardProp: (prop) => prop !== 'hoverable' && prop !== 'clickable',\n})<{ hoverable?: boolean; clickable?: boolean }>(({ hoverable, clickable }) => ({\n borderRadius: 8,\n boxShadow: '0px 1px 3px rgba(0, 0, 0, 0.12)',\n transition: 'all 0.2s ease-in-out',\n ...(clickable && {\n cursor: 'pointer',\n }),\n ...(hoverable && {\n '&:hover': {\n boxShadow: '0px 4px 12px rgba(0, 0, 0, 0.15)',\n transform: 'translateY(-2px)',\n },\n }),\n}));\n\nexport const Card: React.FC<CardProps> = ({ hoverable = false, clickable = false, children, ...props }) => {\n return (\n <StyledCard hoverable={hoverable} clickable={clickable} {...props}>\n {children}\n </StyledCard>\n );\n};\n\nexport const CardContent: React.FC<CardContentProps> = (props) => {\n return <MuiCardContent {...props} />;\n};\n\nexport const CardHeader: React.FC<CardHeaderProps> = (props) => {\n return <MuiCardHeader {...props} />;\n};\n\nexport const CardActions: React.FC<CardActionsProps> = (props) => {\n return <MuiCardActions {...props} />;\n};\n\n","import React from 'react';\nimport {\n List as MuiList,\n ListItem as MuiListItem,\n ListItemText,\n ListItemIcon,\n ListItemSecondaryAction,\n ListProps as MuiListProps,\n ListItemProps as MuiListItemProps,\n} from '@mui/material';\nimport { styled } from '@mui/material/styles';\nimport { colors } from '../../theme';\n\nexport interface ListProps extends MuiListProps {}\n\nexport const List: React.FC<ListProps> = (props) => {\n return <MuiList {...props} />;\n};\n\nexport interface ListItemProps extends MuiListItemProps {\n primary?: React.ReactNode;\n secondary?: React.ReactNode;\n icon?: React.ReactNode;\n action?: React.ReactNode;\n hoverable?: boolean;\n}\n\nconst StyledListItem = styled(MuiListItem, {\n shouldForwardProp: (prop) => prop !== 'hoverable',\n})<{ hoverable?: boolean }>(({ hoverable = true }) => ({\n border: `1px solid ${colors.grey[200]}`,\n borderRadius: 8,\n marginBottom: 8,\n ...(hoverable && {\n '&:hover': {\n backgroundColor: colors.grey[50],\n },\n }),\n}));\n\nexport const ListItem: React.FC<ListItemProps> = ({\n primary,\n secondary,\n icon,\n action,\n hoverable = true,\n children,\n ...props\n}) => {\n return (\n <StyledListItem hoverable={hoverable} {...props}>\n {icon && <ListItemIcon>{icon}</ListItemIcon>}\n {(primary || secondary) && (\n <ListItemText\n primary={primary}\n secondary={secondary}\n />\n )}\n {children}\n {action && <ListItemSecondaryAction>{action}</ListItemSecondaryAction>}\n </StyledListItem>\n );\n};\n\nexport { ListItemText, ListItemIcon, ListItemSecondaryAction };\n\n","import React from 'react';\nimport MuiAvatar, { AvatarProps as MuiAvatarProps } from '@mui/material/Avatar';\nimport { styled } from '@mui/material/styles';\nimport { colors } from '../../theme';\n\nexport interface AvatarProps extends MuiAvatarProps {\n size?: 'small' | 'medium' | 'large' | number;\n}\n\nconst sizeMap = {\n small: 32,\n medium: 40,\n large: 56,\n};\n\nconst StyledAvatar = styled(MuiAvatar, {\n shouldForwardProp: (prop) => prop !== 'avatarSize',\n})<{ avatarSize?: number }>(({ avatarSize = 40 }) => ({\n width: avatarSize,\n height: avatarSize,\n backgroundColor: colors.primary.main,\n color: colors.primary.contrastText,\n fontWeight: 600,\n}));\n\nexport const Avatar: React.FC<AvatarProps> = ({ size = 'medium', ...props }) => {\n const avatarSize = typeof size === 'number' ? size : sizeMap[size];\n\n return <StyledAvatar avatarSize={avatarSize} {...props} />;\n};\n\n","import React from 'react';\nimport {\n Table as MuiTable,\n TableBody,\n TableCell,\n TableContainer,\n TableHead,\n TableRow,\n TableProps as MuiTableProps,\n TableSortLabel,\n} from '@mui/material';\nimport { styled } from '@mui/material/styles';\nimport { colors } from '../../theme';\n\nexport interface TableProps extends MuiTableProps {\n stickyHeader?: boolean;\n}\n\nconst StyledTableContainer = styled(TableContainer)({\n borderRadius: 8,\n border: `1px solid ${colors.grey[200]}`,\n});\n\nconst StyledTableHead = styled(TableHead)({\n backgroundColor: colors.grey[50],\n '& .MuiTableCell-head': {\n fontWeight: 600,\n color: colors.text.primary,\n },\n});\n\n\nexport const Table: React.FC<TableProps> = ({ stickyHeader = false, children, ...props }) => {\n return (\n <StyledTableContainer>\n <MuiTable stickyHeader={stickyHeader} {...props}>\n {children}\n </MuiTable>\n </StyledTableContainer>\n );\n};\n\nexport interface TableHeaderProps {\n columns: Array<{\n id: string;\n label: string;\n sortable?: boolean;\n align?: 'left' | 'center' | 'right';\n }>;\n orderBy?: string;\n order?: 'asc' | 'desc';\n onSort?: (columnId: string) => void;\n}\n\nexport const TableHeader: React.FC<TableHeaderProps> = ({\n columns,\n orderBy,\n order = 'asc',\n onSort,\n}) => {\n return (\n <StyledTableHead>\n <TableRow>\n {columns.map((column) => (\n <TableCell key={column.id} align={column.align || 'left'}>\n {column.sortable && onSort ? (\n <TableSortLabel\n active={orderBy === column.id}\n direction={orderBy === column.id ? order : 'asc'}\n onClick={() => onSort(column.id)}\n >\n {column.label}\n </TableSortLabel>\n ) : (\n column.label\n )}\n </TableCell>\n ))}\n </TableRow>\n </StyledTableHead>\n );\n};\n\nexport { TableBody, TableCell, TableContainer, TableHead, TableRow, TableSortLabel };\n\n","export { Grid } from '@mui/material';\nexport type { GridProps, Grid2Props } from '@mui/material';\n\n","import React from 'react';\nimport MuiBreadcrumbs, { BreadcrumbsProps as MuiBreadcrumbsProps } from '@mui/material/Breadcrumbs';\nimport Link from '@mui/material/Link';\nimport Typography from '@mui/material/Typography';\nimport { styled } from '@mui/material/styles';\nimport { colors } from '../../theme';\n\nexport interface BreadcrumbItem {\n label: string;\n href?: string;\n onClick?: () => void;\n}\n\nexport interface BreadcrumbsProps extends Omit<MuiBreadcrumbsProps, 'children'> {\n items: BreadcrumbItem[];\n}\n\nconst StyledBreadcrumbs = styled(MuiBreadcrumbs)({\n '& .MuiBreadcrumbs-ol': {\n flexWrap: 'nowrap',\n },\n '& .MuiBreadcrumbs-separator': {\n color: colors.text.secondary,\n },\n});\n\nconst StyledLink = styled(Link)({\n color: colors.primary.main,\n textDecoration: 'none',\n '&:hover': {\n textDecoration: 'underline',\n },\n});\n\nexport const Breadcrumbs: React.FC<BreadcrumbsProps> = ({ items, ...props }) => {\n return (\n <StyledBreadcrumbs {...props}>\n {items.map((item, index) => {\n const isLast = index === items.length - 1;\n\n if (isLast || (!item.href && !item.onClick)) {\n return (\n <Typography key={index} color=\"text.primary\">\n {item.label}\n </Typography>\n );\n }\n\n return (\n <StyledLink\n key={index}\n href={item.href}\n onClick={(e) => {\n if (item.onClick) {\n e.preventDefault();\n item.onClick();\n }\n }}\n >\n {item.label}\n </StyledLink>\n );\n })}\n </StyledBreadcrumbs>\n );\n};\n\n","import React from 'react';\nimport {\n Accordion as MuiAccordion,\n AccordionSummary,\n AccordionDetails,\n AccordionProps as MuiAccordionProps,\n} from '@mui/material';\nimport ExpandMoreIcon from '@mui/icons-material/ExpandMore';\nimport { styled } from '@mui/material/styles';\nimport { colors } from '../../theme';\n\nexport interface AccordionProps extends Omit<MuiAccordionProps, 'children'> {\n title: string;\n children: NonNullable<React.ReactNode>;\n defaultExpanded?: boolean;\n}\n\nconst StyledAccordion = styled(MuiAccordion)({\n borderRadius: 8,\n boxShadow: 'none',\n border: `1px solid ${colors.grey[200]}`,\n '&:before': {\n display: 'none',\n },\n '&.Mui-expanded': {\n margin: 0,\n },\n});\n\nconst StyledAccordionSummary = styled(AccordionSummary)({\n backgroundColor: colors.grey[50],\n borderRadius: '8px 8px 0 0',\n '&.Mui-expanded': {\n borderRadius: '8px 8px 0 0',\n },\n '& .MuiAccordionSummary-content': {\n margin: '12px 0',\n },\n});\n\nconst StyledAccordionDetails = styled(AccordionDetails)({\n padding: '16px',\n});\n\nexport const Accordion: React.FC<AccordionProps> = ({\n title,\n children,\n defaultExpanded = false,\n ...props\n}) => {\n return (\n <StyledAccordion defaultExpanded={defaultExpanded} {...props}>\n <StyledAccordionSummary expandIcon={<ExpandMoreIcon />}>\n {title}\n </StyledAccordionSummary>\n <StyledAccordionDetails>{children}</StyledAccordionDetails>\n </StyledAccordion>\n );\n};\n\n","import React from 'react';\nimport MuiPaper, { PaperProps as MuiPaperProps } from '@mui/material/Paper';\nimport { styled } from '@mui/material/styles';\nimport { colors } from '../../theme';\n\nexport interface PaperProps extends MuiPaperProps {\n variant?: 'elevation' | 'outlined';\n}\n\nconst StyledPaper = styled(MuiPaper)({\n borderRadius: 8,\n '&.MuiPaper-elevation': {\n boxShadow: '0px 2px 8px rgba(0, 0, 0, 0.08)',\n },\n '&.MuiPaper-outlined': {\n border: `1px solid ${colors.grey[200]}`,\n boxShadow: 'none',\n },\n});\n\nexport const Paper: React.FC<PaperProps> = ({ variant = 'elevation', ...props }) => {\n return <StyledPaper variant={variant} elevation={variant === 'elevation' ? 1 : 0} {...props} />;\n};\n\n","import React from 'react';\nimport MuiDivider, { DividerProps as MuiDividerProps } from '@mui/material/Divider';\nimport { styled } from '@mui/material/styles';\nimport { colors } from '../../theme';\n\nexport interface DividerProps extends MuiDividerProps {\n variant?: 'fullWidth' | 'inset' | 'middle';\n}\n\nconst StyledDivider = styled(MuiDivider)({\n borderColor: colors.grey[200],\n});\n\nexport const Divider: React.FC<DividerProps> = ({ ...props }) => {\n return <StyledDivider {...props} />;\n};\n\n","export { Stack } from '@mui/material';\nexport type { StackProps } from '@mui/material';\n\n","export { Box } from '@mui/material';\nexport type { BoxProps } from '@mui/material';\n\n","export { Typography } from '@mui/material';\nexport type { TypographyProps } from '@mui/material';\n\n","export { Container } from '@mui/material';\nexport type { ContainerProps } from '@mui/material';\n\n","import React from 'react';\nimport {\n AppBar as MuiAppBar,\n Toolbar,\n AppBarProps as MuiAppBarProps,\n ToolbarProps,\n} from '@mui/material';\nimport { styled } from '@mui/material/styles';\nimport { colors } from '../../theme';\n\nexport interface AppBarProps extends MuiAppBarProps {\n height?: number;\n}\n\nconst StyledAppBar = styled(MuiAppBar, {\n shouldForwardProp: (prop) => prop !== 'appBarHeight',\n})<{ appBarHeight?: number }>(({ appBarHeight = 64 }) => ({\n backgroundColor: colors.background.paper,\n borderBottom: `1px solid ${colors.grey[200]}`,\n boxShadow: 'none',\n height: appBarHeight,\n zIndex: 1300,\n}));\n\nconst StyledToolbar = styled(Toolbar)(({ theme }) => ({\n height: '100%',\n paddingLeft: theme.spacing(2),\n paddingRight: theme.spacing(2),\n gap: theme.spacing(2),\n}));\n\nexport const AppBar: React.FC<AppBarProps> = ({ height = 64, children, ...props }) => {\n return (\n <StyledAppBar position=\"fixed\" appBarHeight={height} {...props}>\n <StyledToolbar>{children}</StyledToolbar>\n </StyledAppBar>\n );\n};\n\nexport { Toolbar };\nexport type { ToolbarProps };\n\n","import React from 'react';\nimport {\n Collapse as MuiCollapse,\n CollapseProps as MuiCollapseProps,\n} from '@mui/material';\n\nexport interface CollapseProps extends MuiCollapseProps {\n /**\n * If `true`, the component will transition in\n */\n in?: boolean;\n /**\n * The content to collapse\n */\n children?: React.ReactNode;\n}\n\n/**\n * Collapse component - provides a collapse animation\n * \n * @example\n * ```tsx\n * <Collapse in={open}>\n * <Box>Collapsible content</Box>\n * </Collapse>\n * ```\n */\nexport const Collapse: React.FC<CollapseProps> = (props) => {\n return <MuiCollapse {...props} />;\n};\n\nexport default Collapse;\n\n","import React from 'react';\nimport MuiAlert, { AlertProps as MuiAlertProps } from '@mui/material/Alert';\nimport { AlertTitle as MuiAlertTitle } from '@mui/material';\nimport MuiSnackbar, { SnackbarProps as MuiSnackbarProps } from '@mui/material/Snackbar';\nimport { styled } from '@mui/material/styles';\n\nexport type AlertSeverity = 'success' | 'error' | 'warning' | 'info';\n\nexport interface AlertProps extends Omit<MuiAlertProps, 'severity'> {\n severity?: AlertSeverity;\n /**\n * Title to display above the alert message\n */\n title?: string;\n}\n\nconst StyledAlert = styled(MuiAlert)({\n borderRadius: 8,\n '&.MuiAlert-filled': {\n borderRadius: 8,\n },\n});\n\nexport const Alert: React.FC<AlertProps> = ({ \n severity = 'info', \n title,\n children,\n ...props \n}) => {\n return (\n <StyledAlert severity={severity} {...props}>\n {title && <MuiAlertTitle>{title}</MuiAlertTitle>}\n {children}\n </StyledAlert>\n );\n};\n\nexport { MuiAlertTitle as AlertTitle };\n\nexport interface SnackbarProps extends Omit<MuiSnackbarProps, 'children'> {\n /**\n * Message to display in the snackbar\n */\n message?: string;\n /**\n * Severity of the alert inside snackbar\n */\n severity?: AlertSeverity;\n /**\n * Title to display in the alert (optional)\n */\n title?: string;\n /**\n * Alert variant\n * @default 'filled'\n */\n variant?: 'filled' | 'standard' | 'outlined';\n /**\n * Callback when snackbar is closed\n */\n onClose?: () => void;\n /**\n * Children to render instead of message (allows custom content)\n * Must be a ReactElement to match MuiSnackbar requirements\n */\n children?: React.ReactElement;\n}\n\nconst StyledSnackbar = styled(MuiSnackbar)({});\n\nexport const Snackbar: React.FC<SnackbarProps> = ({\n message,\n severity = 'info',\n title,\n variant = 'filled',\n onClose,\n children,\n anchorOrigin = { vertical: 'bottom', horizontal: 'center' },\n autoHideDuration = 6000,\n ...props\n}) => {\n const handleClose = (_event?: React.SyntheticEvent | Event, reason?: string) => {\n // Prevent closing on clickaway if we have a custom onClose handler\n if (reason === 'clickaway' && onClose) {\n return;\n }\n onClose?.();\n };\n\n const content = children || (message ? (\n <Alert \n onClose={onClose ? handleClose : undefined} \n severity={severity} \n variant={variant}\n title={title}\n sx={{ width: '100%', borderRadius: 2 }}\n >\n {message}\n </Alert>\n ) : undefined);\n\n if (!content) {\n return null;\n }\n\n // Create a simple transition component that doesn't access scrollTop\n const NoTransition = React.forwardRef<HTMLDivElement, { children: React.ReactElement }>(\n (props, ref) => {\n return React.cloneElement(props.children, {\n ref,\n style: {\n ...props.children.props.style,\n transition: 'opacity 0.3s ease-in-out',\n },\n });\n }\n );\n NoTransition.displayName = 'NoTransition';\n\n return (\n <StyledSnackbar\n anchorOrigin={anchorOrigin}\n autoHideDuration={autoHideDuration}\n onClose={handleClose}\n disableWindowBlurListener\n ClickAwayListenerProps={{\n onClickAway: () => {} // Prevent scroll issues\n }}\n TransitionComponent={NoTransition}\n {...props}\n >\n {content}\n </StyledSnackbar>\n );\n};\n\n","import React from 'react';\nimport { Box, Typography } from '@mui/material';\nimport { colors } from '../../theme';\n\nexport interface EmptyStateProps {\n title?: string;\n description?: string;\n icon?: React.ReactNode;\n action?: React.ReactNode;\n}\n\nexport const EmptyState: React.FC<EmptyStateProps> = ({\n title = 'No items found',\n description,\n icon,\n action,\n}) => {\n return (\n <Box\n sx={{\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'center',\n justifyContent: 'center',\n padding: 6,\n textAlign: 'center',\n minHeight: 200,\n }}\n >\n {icon && (\n <Box\n sx={{\n color: colors.text.secondary,\n marginBottom: 2,\n fontSize: 64,\n }}\n >\n {icon}\n </Box>\n )}\n <Typography variant=\"h6\" sx={{ marginBottom: 1, color: colors.text.primary }}>\n {title}\n </Typography>\n {description && (\n <Typography variant=\"body2\" sx={{ color: colors.text.secondary, marginBottom: 3 }}>\n {description}\n </Typography>\n )}\n {action && <Box>{action}</Box>}\n </Box>\n );\n};\n\n","import React from 'react';\nimport { Box, CircularProgress, Typography } from '@mui/material';\nimport { colors } from '../../theme';\n\nexport interface LoadingProps {\n message?: string;\n size?: number;\n fullScreen?: boolean;\n}\n\nexport const Loading: React.FC<LoadingProps> = ({\n message = 'Loading...',\n size = 40,\n fullScreen = false,\n}) => {\n const content = (\n <Box\n sx={{\n display: 'flex',\n flexDirection: 'column',\n justifyContent: 'center',\n alignItems: 'center',\n gap: 2,\n ...(fullScreen && {\n height: '100vh',\n width: '100vw',\n position: 'fixed',\n top: 0,\n left: 0,\n backgroundColor: colors.background.default,\n zIndex: 9999,\n }),\n ...(!fullScreen && {\n padding: 4,\n }),\n }}\n >\n <CircularProgress size={size} thickness={4} />\n {message && (\n <Typography variant=\"body2\" color=\"text.secondary\">\n {message}\n </Typography>\n )}\n </Box>\n );\n\n return content;\n};\n\n","import React from 'react';\nimport { Box, CircularProgress, Typography } from '@mui/material';\n\nexport interface AppLoadingProps {\n /**\n * Loading message to display\n * @default \"Loading...\"\n */\n message?: string;\n /**\n * Logo source URL or path\n * @default \"/icons/logo.png\"\n */\n logo?: string;\n /**\n * Custom styles\n */\n sx?: any;\n}\n\n/**\n * AppLoading component - Full-screen loading indicator with logo\n * \n * @example\n * ```tsx\n * <AppLoading message=\"Initializing application...\" />\n * ```\n */\nexport const AppLoading: React.FC<AppLoadingProps> = ({\n message = 'Loading...',\n logo = '/icons/logo.png',\n sx = {},\n}) => {\n return (\n <Box\n sx={{\n display: 'flex',\n flexDirection: 'column',\n justifyContent: 'center',\n alignItems: 'center',\n height: '100vh',\n width: '100vw',\n position: 'fixed',\n top: 0,\n left: 0,\n backgroundColor: '#f8f9fa', // Light background\n zIndex: 9999,\n ...sx,\n }}\n >\n {logo && (\n <Box\n component=\"img\"\n src={logo}\n alt=\"Logo\"\n sx={{\n height: 80,\n width: 'auto',\n mb: 4,\n }}\n />\n )}\n\n <CircularProgress size={40} thickness={4} sx={{ mb: 2 }} />\n\n <Typography variant=\"body1\" color=\"text.secondary\">\n {message}\n </Typography>\n </Box>\n );\n};\n\nexport default AppLoading;\n\n","import React from 'react';\nimport {\n CircularProgress as MuiCircularProgress,\n CircularProgressProps as MuiCircularProgressProps,\n} from '@mui/material';\n\nexport interface CircularProgressProps extends MuiCircularProgressProps {\n /**\n * Size of the progress indicator\n * @default 40\n */\n size?: number | string;\n /**\n * Thickness of the progress indicator\n * @default 4\n */\n thickness?: number;\n}\n\n/**\n * CircularProgress component - wrapper around MUI CircularProgress\n * \n * @example\n * ```tsx\n * <CircularProgress size={40} thickness={4} />\n * ```\n */\nexport const CircularProgress: React.FC<CircularProgressProps> = ({\n size = 40,\n thickness = 4,\n ...props\n}) => {\n return <MuiCircularProgress size={size} thickness={thickness} {...props} />;\n};\n\nexport default CircularProgress;\n\n","import React, { useCallback } from 'react';\nimport ReactFlow, {\n Background,\n Controls,\n MiniMap,\n ReactFlowProvider,\n BackgroundVariant,\n ConnectionLineType,\n Node,\n Edge,\n OnNodesChange,\n OnEdgesChange,\n NodeTypes,\n EdgeTypes,\n ReactFlowInstance,\n ReactFlowProps,\n} from 'reactflow';\n// Note: reactflow CSS should be imported in Storybook preview.tsx\n// This ensures styles are available globally\nimport { Box, BoxProps } from '@mui/material';\nimport { useTheme } from '@mui/material/styles';\n\nexport interface FlowEditorProps extends Omit<ReactFlowProps, 'nodes' | 'edges'> {\n /**\n * Nodes to display in the flow\n */\n nodes: Node[];\n /**\n * Edges to display in the flow\n */\n edges: Edge[];\n /**\n * Callback when nodes change\n */\n onNodesChange?: OnNodesChange;\n /**\n * Callback when edges change\n */\n onEdgesChange?: OnEdgesChange;\n /**\n * Custom node types\n */\n nodeTypes?: NodeTypes;\n /**\n * Custom edge types\n */\n edgeTypes?: EdgeTypes;\n /**\n * Height of the flow editor\n * @default '600px'\n */\n height?: string | number;\n /**\n * Show background grid\n * @default true\n */\n showBackground?: boolean;\n /**\n * Background variant\n * @default 'dots'\n */\n backgroundVariant?: BackgroundVariant;\n /**\n * Show controls\n * @default true\n */\n showControls?: boolean;\n /**\n * Show minimap\n * @default false\n */\n showMinimap?: boolean;\n /**\n * Container props\n */\n containerProps?: BoxProps;\n /**\n * Callback when flow instance is initialized\n */\n onInit?: (instance: ReactFlowInstance) => void;\n}\n\n/**\n * FlowEditor component - wrapper around ReactFlow with theme integration\n * \n * @example\n * ```tsx\n * <FlowEditor\n * nodes={nodes}\n * edges={edges}\n * onNodesChange={onNodesChange}\n * onEdgesChange={onEdgesChange}\n * height=\"500px\"\n * showBackground\n * showControls\n * />\n * ```\n */\nexport const FlowEditor: React.FC<FlowEditorProps> = ({\n nodes,\n edges,\n onNodesChange,\n onEdgesChange,\n nodeTypes,\n edgeTypes,\n height = '600px',\n showBackground = true,\n backgroundVariant = BackgroundVariant.Dots,\n showControls = true,\n showMinimap = false,\n containerProps,\n onInit,\n ...reactFlowProps\n}) => {\n const theme = useTheme();\n\n const handleInit = useCallback(\n (instance: ReactFlowInstance) => {\n if (onInit) {\n onInit(instance);\n }\n },\n [onInit]\n );\n\n return (\n <ReactFlowProvider>\n <Box\n sx={{\n width: '100%',\n height: typeof height === 'number' ? `${height}px` : height,\n border: `1px solid ${theme.palette.divider}`,\n borderRadius: theme.shape.borderRadius,\n overflow: 'hidden',\n backgroundColor: theme.palette.background.paper,\n ...containerProps?.sx,\n }}\n {...containerProps}\n >\n <ReactFlow\n nodes={nodes}\n edges={edges}\n onNodesChange={onNodesChange}\n onEdgesChange={onEdgesChange}\n nodeTypes={nodeTypes}\n edgeTypes={edgeTypes}\n onInit={handleInit}\n connectionLineType={ConnectionLineType.SmoothStep}\n defaultEdgeOptions={{\n style: {\n stroke: theme.palette.primary.main,\n strokeWidth: 2,\n },\n }}\n style={{\n backgroundColor: 'transparent',\n }}\n {...reactFlowProps}\n >\n {showBackground && (\n <Background\n variant={backgroundVariant}\n gap={16}\n size={1}\n color={theme.palette.divider}\n />\n )}\n {showControls && <Controls />}\n {showMinimap && (\n <MiniMap\n nodeColor={(node) => {\n const color = node.data?.color || theme.palette.primary.main;\n return typeof color === 'string' ? color : theme.palette.primary.main;\n }}\n nodeStrokeWidth={3}\n nodeBorderRadius={8}\n maskColor={`${theme.palette.background.paper}80`}\n style={{\n backgroundColor: theme.palette.background.paper,\n }}\n />\n )}\n </ReactFlow>\n </Box>\n </ReactFlowProvider>\n );\n};\n\nexport default FlowEditor;\n\n// Re-export commonly used types and components from reactflow\nexport type {\n Node,\n Edge,\n NodeTypes,\n EdgeTypes,\n ReactFlowInstance,\n OnNodesChange,\n OnEdgesChange,\n} from 'reactflow';\nexport { Background, Controls, MiniMap, Panel, BackgroundVariant, ConnectionLineType } from 'reactflow';\n\n","import React, { useCallback, useEffect, useState, useRef } from 'react';\nimport Editor, { Monaco } from '@monaco-editor/react';\nimport { Box, BoxProps, IconButton, Tooltip, Alert } from '@mui/material';\nimport FullscreenIcon from '@mui/icons-material/Fullscreen';\nimport FullscreenExitIcon from '@mui/icons-material/FullscreenExit';\nimport type { editor } from 'monaco-editor';\n\nexport type CodeEditorLanguage =\n | 'typescript'\n | 'javascript'\n | 'json'\n | 'html'\n | 'css'\n | 'python'\n | 'yaml'\n | 'markdown'\n | 'sql'\n | 'xml'\n | 'plaintext';\n\nexport interface CodeEditorProps {\n /**\n * Current value of the editor\n */\n value: string;\n /**\n * Callback when value changes\n */\n onChange: (value: string) => void;\n /**\n * Programming language\n * @default 'typescript'\n */\n language?: CodeEditorLanguage;\n /**\n * Height of the editor\n * @default '400px'\n */\n height?: string | number;\n /**\n * Minimum height\n */\n minHeight?: string | number;\n /**\n * Theme ('light' | 'dark' | 'vs-dark' | 'hc-black')\n * If not provided, will use theme from design system\n */\n theme?: string;\n /**\n * Show line numbers\n * @default 'on'\n */\n lineNumbers?: 'on' | 'off' | 'relative' | 'interval';\n /**\n * Editor options (monaco editor options)\n */\n options?: editor.IStandaloneEditorConstructionOptions;\n /**\n * Callback when editor is mounted\n */\n onMount?: (editor: editor.IStandaloneCodeEditor, monaco: Monaco) => void;\n /**\n * Callback for validation errors\n */\n onValidate?: (markers: editor.IMarker[]) => void;\n /**\n * Ref to editor instance\n */\n editorRef?: React.MutableRefObject<editor.IStandaloneCodeEditor | null>;\n /**\n * Ref to Monaco instance\n */\n monacoRef?: React.MutableRefObject<Monaco | null>;\n /**\n * Callback when fullscreen state changes\n */\n onFullscreenChange?: (isFullscreen: boolean) => void;\n /**\n * Props for the container Box.\n */\n containerProps?: BoxProps;\n /**\n * Additional TypeScript type definitions to add to the editor context.\n * Can be a string with type definitions or an array of type definition strings.\n * Each string will be added as a separate extra lib to Monaco.\n * \n * @example\n * ```tsx\n * <CodeEditor\n * value={code}\n * onChange={setCode}\n * typeDefinitions={`\n * declare interface MyCustomType {\n * id: string;\n * name: string;\n * }\n * `}\n * />\n * ```\n */\n typeDefinitions?: string | string[];\n}\n\n// Monaco Editor will use the local version from node_modules automatically\n// No need to configure loader.config() - @monaco-editor/react handles it\n\n// Configure TypeScript settings when Monaco is loaded\nconst configureTypeScript = (monaco: Monaco) => {\n // Configure TypeScript settings\n monaco.languages.typescript.typescriptDefaults.setCompilerOptions({\n target: monaco.languages.typescript.ScriptTarget.ES2020,\n allowNonTsExtensions: true,\n moduleResolution: monaco.languages.typescript.ModuleResolutionKind.NodeJs,\n module: monaco.languages.typescript.ModuleKind.CommonJS,\n noEmit: false,\n lib: ['es2020', 'dom'],\n noUnusedLocals: false,\n noUnusedParameters: false,\n noImplicitAny: false,\n noImplicitReturns: false,\n noFallthroughCasesInSwitch: false,\n });\n\n monaco.languages.typescript.typescriptDefaults.setDiagnosticsOptions({\n noSemanticValidation: false,\n noSyntaxValidation: false,\n noSuggestionDiagnostics: true,\n diagnosticCodesToIgnore: [\n 6133, // 'x' is declared but its value is never read\n 6196, // 'x' is declared but its value is never read (different variant)\n ],\n });\n};\n\n/**\n * CodeEditor component - wrapper around Monaco Editor matching dynamic-indexer-client implementation\n *\n * @example\n * ```tsx\n * <CodeEditor\n * value={code}\n * onChange={setCode}\n * language=\"typescript\"\n * height=\"500px\"\n * onValidate={(markers) => console.log('Errors:', markers)}\n * />\n * ```\n */\nexport const CodeEditor: React.FC<CodeEditorProps> = ({\n value,\n onChange,\n language = 'typescript',\n height = '400px',\n minHeight,\n theme: themeProp,\n lineNumbers = 'on',\n options,\n onMount,\n onValidate,\n editorRef,\n monacoRef,\n onFullscreenChange,\n containerProps,\n typeDefinitions,\n}) => {\n const [isEditorReady, setIsEditorReady] = useState(false);\n const [validationErrors, setValidationErrors] = useState<editor.IMarker[]>([]);\n const [isFullscreen, setIsFullscreen] = useState(false);\n const [tsCode, setTsCode] = useState<string>(value);\n const [actualHeight, setActualHeight] = useState<string>(\n typeof height === 'number' ? `${height}px` : height\n );\n\n const internalEditorRef = useRef<editor.IStandaloneCodeEditor | null>(null);\n const internalMonacoRef = useRef<Monaco | null>(null);\n\n // Use provided refs or internal refs\n const finalEditorRef = editorRef || internalEditorRef;\n const finalMonacoRef = monacoRef || internalMonacoRef;\n\n useEffect(() => {\n if (isFullscreen) {\n // Account for header height (64px) + padding (16px) = 80px\n setActualHeight('calc(100vh - 80px)');\n } else {\n setActualHeight(typeof height === 'number' ? `${height}px` : height);\n }\n }, [height, isFullscreen]);\n\n // Toggle fullscreen\n const toggleFullscreen = useCallback(() => {\n const newFullscreenState = !isFullscreen;\n setIsFullscreen(newFullscreenState);\n if (onFullscreenChange) {\n onFullscreenChange(newFullscreenState);\n }\n }, [isFullscreen, onFullscreenChange]);\n\n // Handle ESC key for fullscreen exit\n useEffect(() => {\n if (!isFullscreen) return;\n\n function escapeHandler(event: KeyboardEvent) {\n if (event.key === 'Escape') {\n event.preventDefault();\n event.stopPropagation();\n\n setIsFullscreen(false);\n if (onFullscreenChange) {\n onFullscreenChange(false);\n }\n }\n }\n\n window.addEventListener('keydown', escapeHandler, { capture: true });\n\n return () => {\n window.removeEventListener('keydown', escapeHandler, { capture: true });\n };\n }, [isFullscreen, onFullscreenChange]);\n\n const handleEditorDidMount = useCallback(\n (editor: editor.IStandaloneCodeEditor, monaco: Monaco) => {\n console.log('CodeEditor: onMount called', { editor: !!editor, monaco: !!monaco });\n \n try {\n // Configure TypeScript settings when Monaco is loaded\n configureTypeScript(monaco);\n } catch (e) {\n console.error('CodeEditor: Failed to configure TypeScript', e);\n }\n\n if (finalEditorRef) {\n finalEditorRef.current = editor;\n }\n if (finalMonacoRef) {\n finalMonacoRef.current = monaco;\n }\n\n setIsEditorReady(true);\n console.log('CodeEditor: Editor ready');\n\n try {\n // Add ESC key binding directly in editor\n editor.addCommand(monaco.KeyCode.Escape, () => {\n if (isFullscreen) {\n setIsFullscreen(false);\n if (onFullscreenChange) {\n onFullscreenChange(false);\n }\n return true; // Command handled\n }\n return false; // Let default behavior work when not fullscreen\n });\n\n // Add validation callback\n editor.onDidChangeModelDecorations(() => {\n const model = editor.getModel();\n if (model && onValidate) {\n const markers = monaco.editor.getModelMarkers({ resource: model.uri });\n onValidate(markers);\n setValidationErrors(markers);\n }\n });\n\n // Also check initial markers\n const model = editor.getModel();\n if (model && onValidate) {\n const markers = monaco.editor.getModelMarkers({ resource: model.uri });\n onValidate(markers);\n setValidationErrors(markers);\n }\n } catch (e) {\n console.error('CodeEditor: Error setting up editor callbacks', e);\n }\n\n // Call custom onMount if provided\n if (onMount) {\n try {\n onMount(editor, monaco);\n } catch (e) {\n console.error('CodeEditor: Error in custom onMount', e);\n }\n }\n },\n [isFullscreen, onFullscreenChange, onValidate, onMount, finalEditorRef, finalMonacoRef]\n );\n\n // Add custom type definitions when Monaco is ready and typeDefinitions change\n useEffect(() => {\n if (!isEditorReady || !finalMonacoRef?.current || !typeDefinitions) return;\n\n const monaco = finalMonacoRef.current;\n const definitions = Array.isArray(typeDefinitions) ? typeDefinitions : [typeDefinitions];\n const uris: string[] = [];\n\n try {\n // Add each type definition as a separate extra lib\n definitions.forEach((def: string, index: number) => {\n if (def && def.trim()) {\n const uri = `ts:filename/custom-types-${index}.d.ts`;\n uris.push(uri);\n monaco.languages.typescript.typescriptDefaults.addExtraLib(def, uri);\n }\n });\n } catch (error) {\n console.error('CodeEditor: Error adding type definitions:', error);\n }\n\n // Note: Monaco doesn't have a direct removeExtraLib method\n // The definitions will be replaced when the component updates with new definitions\n // This is acceptable as extra libs are additive and don't cause conflicts\n }, [isEditorReady, finalMonacoRef, typeDefinitions]);\n\n const handleCodeChange = (newValue: string | undefined) => {\n const valueStr = newValue || '';\n setTsCode(valueStr);\n onChange(valueStr);\n };\n\n // Sync external value prop with internal state\n useEffect(() => {\n if (value !== tsCode) {\n setTsCode(value);\n if (isEditorReady && finalEditorRef?.current) {\n const editor = finalEditorRef.current;\n const currentValue = editor.getValue();\n if (currentValue !== value) {\n editor.setValue(value);\n }\n }\n }\n }, [value, tsCode, isEditorReady, finalEditorRef]);\n\n const editorMinHeight = minHeight\n ? typeof minHeight === 'number'\n ? `${minHeight}px`\n : minHeight\n : '400px';\n\n const defaultOptions: editor.IStandaloneEditorConstructionOptions = {\n lineNumbers,\n minimap: { enabled: false },\n readOnly: false,\n wordWrap: 'on',\n fontSize: 14,\n fontFamily: 'Monaco, Menlo, \"Ubuntu Mono\", Consolas, \"source-code-pro\", monospace',\n automaticLayout: true,\n scrollBeyondLastLine: false,\n theme: themeProp || 'vs',\n ...options,\n };\n\n return (\n <Box\n sx={{\n display: 'flex',\n flexDirection: 'column',\n height: isFullscreen ? '100vh' : '100%',\n minHeight: isFullscreen ? '100vh' : editorMinHeight,\n position: isFullscreen ? 'fixed' : 'relative',\n top: isFullscreen ? 0 : 'auto',\n left: isFullscreen ? 0 : 'auto',\n right: isFullscreen ? 0 : 'auto',\n bottom: isFullscreen ? 0 : 'auto',\n zIndex: isFullscreen ? 9999 : 'auto',\n bgcolor: 'background.paper',\n pt: isFullscreen ? '80px' : 0, // Add padding top in fullscreen to account for header (64px) + spacing (16px)\n px: isFullscreen ? 2 : 0,\n pb: isFullscreen ? 2 : 0,\n overflow: isFullscreen ? 'hidden' : 'visible',\n }}\n >\n <Box\n sx={{\n flex: 1,\n border: 1,\n borderColor: validationErrors.length > 0 ? 'error.main' : 'divider',\n borderRadius: 1,\n minHeight: editorMinHeight,\n overflow: 'hidden',\n position: 'relative',\n display: 'flex',\n flexDirection: 'column',\n }}\n {...containerProps}\n >\n <Tooltip title={isFullscreen ? 'Exit Fullscreen' : 'Fullscreen'}>\n <IconButton\n onClick={toggleFullscreen}\n size=\"small\"\n sx={{\n position: isFullscreen ? 'fixed' : 'absolute',\n top: isFullscreen ? 72 : 8, // Position below header in fullscreen mode (header is ~64px)\n right: isFullscreen ? 16 : 8,\n zIndex: 10000, // Ensure it's above other elements\n bgcolor: 'rgba(255, 255, 255, 0.7)',\n '&:hover': {\n bgcolor: 'rgba(255, 255, 255, 0.9)',\n },\n boxShadow: 1,\n }}\n >\n {isFullscreen ? (\n <FullscreenExitIcon fontSize=\"small\" />\n ) : (\n <FullscreenIcon fontSize=\"small\" />\n )}\n </IconButton>\n </Tooltip>\n\n <Box\n sx={{\n flex: 1,\n display: 'flex',\n overflow: 'hidden',\n minHeight: editorMinHeight,\n position: 'relative',\n }}\n >\n <Editor\n height={actualHeight}\n defaultLanguage={language}\n defaultValue={value}\n value={tsCode}\n onChange={handleCodeChange}\n onMount={handleEditorDidMount}\n theme={themeProp || 'vs'}\n options={defaultOptions}\n loading={\n <Box sx={{ p: 2, textAlign: 'center' }}>\n Loading Monaco Editor...\n </Box>\n }\n beforeMount={(monaco) => {\n console.log('CodeEditor: beforeMount called', { monaco: !!monaco });\n }}\n />\n </Box>\n\n {/* Error Alert - positioned as overlay at bottom */}\n {validationErrors.length > 0 && (\n <Alert\n severity=\"error\"\n sx={{\n position: 'absolute',\n bottom: 8,\n left: 8,\n right: 8,\n zIndex: 20,\n boxShadow: 3,\n border: '1px solid',\n borderColor: 'error.main',\n borderRadius: 1,\n maxHeight: '150px',\n overflow: 'auto',\n }}\n >\n <Box sx={{ mb: 1, fontWeight: 600 }}>Please fix the following errors:</Box>\n <Box component=\"ul\" sx={{ m: 0, pl: 2 }}>\n {validationErrors.slice(0, 3).map((error, index) => (\n <Box component=\"li\" key={index} sx={{ fontSize: '0.85rem' }}>\n Line {error.startLineNumber}: {error.message}\n </Box>\n ))}\n {validationErrors.length > 3 && (\n <Box component=\"li\" sx={{ fontSize: '0.85rem' }}>\n {validationErrors.length - 3} more error\n {validationErrors.length - 3 > 1 ? 's' : ''}...\n </Box>\n )}\n </Box>\n </Alert>\n )}\n </Box>\n </Box>\n );\n};\n\nexport default CodeEditor;\n"],"mappings":"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","names":["Avatar","Chip","CircularProgress","Divider","Drawer","Link","List","ListItem","Menu","MenuItem","RadioGroup","Tooltip","import_styles","MuiButton","import_styles","import_jsx_runtime","MuiIconButton","import_jsx_runtime","MuiLoadingButton","import_jsx_runtime","MuiButtonGroup","import_styles","import_jsx_runtime","MuiTextField","import_jsx_runtime","InputAdornment","SearchIcon","import_material","import_material","import_styles","import_jsx_runtime","import_material","import_styles","import_jsx_runtime","MuiToggleButton","MuiToggleButtonGroup","import_styles","import_jsx_runtime","MuiSwitch","theme","import_styles","import_jsx_runtime","MuiCheckbox","FormControlLabel","import_styles","import_FormControlLabel","import_jsx_runtime","MuiRadio","FormControlLabel","import_material","import_material","import_jsx_runtime","import_jsx_runtime","import_material","import_Search","import_jsx_runtime","KeyboardArrowDownIcon","PersonAddAltIcon","SettingsIcon","SearchIcon","UnarchiveIcon","ArchiveIcon","CheckIcon","AddIcon","import_react","import_material","import_KeyboardArrowDown","import_Search","import_Add","import_Check","import_jsx_runtime","KeyboardArrowDownIcon","React","SearchIcon","CheckIcon","AddIcon","import_material","import_jsx_runtime","MuiStepper","MuiStep","MuiStepLabel","MuiStepContent","MuiStepButton","import_styles","import_jsx_runtime","MuiBadge","import_styles","import_jsx_runtime","MuiChip","Chip","import_styles","import_jsx_runtime","MuiTooltip","Tooltip","import_material","import_jsx_runtime","import_styles","import_jsx_runtime","MuiTab","import_material","import_styles","import_jsx_runtime","MuiMenu","Menu","MenuItem","MuiMenuItem","import_styles","import_jsx_runtime","MuiPagination","import_react","import_material","import_KeyboardArrowDown","import_Search","import_Add","import_styles","import_jsx_runtime","MuiLink","Link","import_jsx_runtime","SearchIcon","AddIcon","Link","KeyboardArrowDownIcon","import_material","import_jsx_runtime","MuiDialog","CloseIcon","import_styles","import_material","import_Close","import_jsx_runtime","StyledDrawer","MuiDrawer","theme","Drawer","CloseIcon","import_styles","import_jsx_runtime","MuiCard","MuiCardContent","MuiCardHeader","MuiCardActions","import_material","import_styles","import_jsx_runtime","List","MuiList","MuiListItem","ListItem","import_styles","import_jsx_runtime","MuiAvatar","Avatar","import_material","import_styles","import_jsx_runtime","MuiTable","import_material","import_Link","import_styles","import_jsx_runtime","MuiBreadcrumbs","StyledLink","Link","Typography","import_material","import_styles","import_jsx_runtime","MuiAccordion","ExpandMoreIcon","import_styles","import_jsx_runtime","MuiPaper","import_styles","import_jsx_runtime","MuiDivider","Divider","import_material","import_material","import_material","import_material","import_material","import_styles","import_jsx_runtime","MuiAppBar","theme","import_material","import_jsx_runtime","MuiCollapse","import_react","import_material","import_styles","import_jsx_runtime","MuiAlert","MuiAlertTitle","MuiSnackbar","React","props","import_material","import_jsx_runtime","import_material","import_jsx_runtime","import_material","import_jsx_runtime","import_material","import_jsx_runtime","CircularProgress","MuiCircularProgress","import_react","import_material","import_styles","import_reactflow","import_jsx_runtime","theme","ReactFlow","import_react","import_material","import_jsx_runtime","model","FullscreenExitIcon","FullscreenIcon","Editor","import_reactflow"]}
1
+ {"version":3,"sources":["../src/index.ts","../src/theme/index.ts","../src/components/buttons/Button.tsx","../src/components/buttons/IconButton.tsx","../src/components/buttons/LoadingButton.tsx","../src/components/buttons/ButtonGroup.tsx","../src/components/inputs/TextField.tsx","../src/components/inputs/SearchField.tsx","../src/components/inputs/FormControl.tsx","../src/components/inputs/Dropdown.tsx","../src/components/inputs/ToggleButton.tsx","../src/components/inputs/Switch.tsx","../src/components/inputs/Checkbox.tsx","../src/components/inputs/Radio.tsx","../src/components/navigation/Sidebar.tsx","../src/components/navigation/SidebarItem.tsx","../src/components/navigation/ServiceSelector.tsx","../src/components/navigation/WorkspaceSelector.tsx","../src/components/navigation/Stepper.tsx","../src/components/feedback/Badge.tsx","../src/components/feedback/Chip.tsx","../src/components/feedback/Tooltip.tsx","../src/components/feedback/Progress.tsx","../src/components/navigation/Tab.tsx","../src/components/navigation/Menu.tsx","../src/components/navigation/Pagination.tsx","../src/components/navigation/Selector.tsx","../src/components/layout/Link.tsx","../src/components/layout/Dialog.tsx","../src/components/layout/Drawer.tsx","../src/components/layout/Card.tsx","../src/components/layout/List.tsx","../src/components/layout/Avatar.tsx","../src/components/layout/Table.tsx","../src/components/layout/Grid.tsx","../src/components/layout/Breadcrumbs.tsx","../src/components/layout/Accordion.tsx","../src/components/layout/Paper.tsx","../src/components/layout/Divider.tsx","../src/components/layout/Stack.tsx","../src/components/layout/Box.tsx","../src/components/layout/Typography.tsx","../src/components/layout/Container.tsx","../src/components/layout/AppBar.tsx","../src/components/layout/Collapse.tsx","../src/components/feedback/Alert.tsx","../src/components/feedback/EmptyState.tsx","../src/components/feedback/Loading.tsx","../src/components/feedback/AppLoading.tsx","../src/components/feedback/CircularProgress.tsx","../src/components/third-party/FlowEditor.tsx","../src/components/third-party/CodeEditor.tsx"],"sourcesContent":["// Theme\nexport { theme, colors } from './theme';\n\n// Buttons\nexport { Button } from './components/buttons/Button';\nexport type { ButtonProps } from './components/buttons/Button';\nexport { IconButton } from './components/buttons/IconButton';\nexport type { IconButtonProps } from './components/buttons/IconButton';\nexport { LoadingButton } from './components/buttons/LoadingButton';\nexport type { LoadingButtonProps } from './components/buttons/LoadingButton';\nexport { ButtonGroup } from './components/buttons/ButtonGroup';\nexport type { ButtonGroupProps } from './components/buttons/ButtonGroup';\n\n// Inputs\nexport { TextField } from './components/inputs/TextField';\nexport type { TextFieldProps } from './components/inputs/TextField';\nexport { SearchField } from './components/inputs/SearchField';\nexport type { SearchFieldProps } from './components/inputs/SearchField';\nexport {\n FormControl,\n FormLabel,\n FormHelperText,\n FormControlLabel,\n InputLabel,\n InputAdornment,\n} from './components/inputs/FormControl';\nexport type {\n FormControlProps,\n FormLabelProps,\n FormHelperTextProps,\n FormControlLabelProps,\n InputLabelProps,\n InputAdornmentProps,\n} from './components/inputs/FormControl';\nexport { Dropdown } from './components/inputs/Dropdown';\nexport type { DropdownProps } from './components/inputs/Dropdown';\nexport { ToggleButton, ToggleButtonGroup } from './components/inputs/ToggleButton';\nexport type { ToggleButtonProps, ToggleButtonGroupProps } from './components/inputs/ToggleButton';\nexport { Switch } from './components/inputs/Switch';\nexport type { SwitchProps } from './components/inputs/Switch';\nexport { Checkbox } from './components/inputs/Checkbox';\nexport type { CheckboxProps } from './components/inputs/Checkbox';\nexport { Radio, RadioGroup } from './components/inputs/Radio';\nexport type { RadioProps } from './components/inputs/Radio';\n\n// Navigation\nexport { Sidebar } from './components/navigation/Sidebar';\nexport type { SidebarProps } from './components/navigation/Sidebar';\nexport { SidebarItem } from './components/navigation/SidebarItem';\nexport type { SidebarItemProps } from './components/navigation/SidebarItem';\nexport { ServiceSelectorButton } from './components/navigation/ServiceSelector';\nexport type { ServiceSelectorButtonProps, Service } from './components/navigation/ServiceSelector';\nexport { WorkspaceSelectorButton } from './components/navigation/WorkspaceSelector';\nexport type { WorkspaceSelectorButtonProps, Workspace } from './components/navigation/WorkspaceSelector';\nexport { Stepper, Step, StepLabel, StepContent, StepButton } from './components/navigation/Stepper';\nexport type { StepperProps, StepProps, StepLabelProps, StepContentProps, StepButtonProps } from './components/navigation/Stepper';\n\n// Feedback\nexport { Badge } from './components/feedback/Badge';\nexport type { BadgeProps } from './components/feedback/Badge';\nexport { Chip } from './components/feedback/Chip';\nexport type { ChipProps } from './components/feedback/Chip';\nexport { Tooltip } from './components/feedback/Tooltip';\nexport type { TooltipProps } from './components/feedback/Tooltip';\nexport { Progress } from './components/feedback/Progress';\nexport type { ProgressProps } from './components/feedback/Progress';\n\n// Tabs\nexport { Tab } from './components/navigation/Tab';\nexport type { TabProps } from './components/navigation/Tab';\nexport { Menu, MenuItem } from './components/navigation/Menu';\nexport type { MenuProps, MenuItemProps } from './components/navigation/Menu';\nexport { Pagination } from './components/navigation/Pagination';\nexport type { PaginationProps } from './components/navigation/Pagination';\nexport { Selector } from './components/navigation/Selector';\nexport type { SelectorProps, SelectorOption } from './components/navigation/Selector';\n\n// Layout\nexport { Dialog } from './components/layout/Dialog';\nexport type { DialogProps } from './components/layout/Dialog';\nexport { Drawer } from './components/layout/Drawer';\nexport type { DrawerProps } from './components/layout/Drawer';\nexport { Card, CardContent, CardHeader, CardActions } from './components/layout/Card';\nexport type { CardProps } from './components/layout/Card';\nexport { List, ListItem, ListItemText, ListItemIcon, ListItemSecondaryAction } from './components/layout/List';\nexport type { ListProps, ListItemProps } from './components/layout/List';\nexport { Avatar } from './components/layout/Avatar';\nexport type { AvatarProps } from './components/layout/Avatar';\nexport { Table, TableHeader } from './components/layout/Table';\nexport type { TableProps, TableHeaderProps } from './components/layout/Table';\nexport { Grid } from './components/layout/Grid';\nexport type { GridProps } from './components/layout/Grid';\nexport { Breadcrumbs } from './components/layout/Breadcrumbs';\nexport type { BreadcrumbsProps, BreadcrumbItem } from './components/layout/Breadcrumbs';\nexport { Accordion } from './components/layout/Accordion';\nexport type { AccordionProps } from './components/layout/Accordion';\nexport { Paper } from './components/layout/Paper';\nexport type { PaperProps } from './components/layout/Paper';\nexport { Divider } from './components/layout/Divider';\nexport type { DividerProps } from './components/layout/Divider';\nexport { Stack } from './components/layout/Stack';\nexport type { StackProps } from './components/layout/Stack';\nexport { Box } from './components/layout/Box';\nexport type { BoxProps } from './components/layout/Box';\nexport { Typography } from './components/layout/Typography';\nexport type { TypographyProps } from './components/layout/Typography';\nexport { Link } from './components/layout/Link';\nexport type { LinkProps } from './components/layout/Link';\nexport { Container } from './components/layout/Container';\nexport type { ContainerProps } from './components/layout/Container';\nexport { AppBar, Toolbar } from './components/layout/AppBar';\nexport type { AppBarProps, ToolbarProps } from './components/layout/AppBar';\nexport { Collapse } from './components/layout/Collapse';\nexport type { CollapseProps } from './components/layout/Collapse';\n\n// Feedback (extended)\nexport { Alert, Snackbar } from './components/feedback/Alert';\nexport type { AlertProps, SnackbarProps, AlertSeverity } from './components/feedback/Alert';\nexport { EmptyState } from './components/feedback/EmptyState';\nexport type { EmptyStateProps } from './components/feedback/EmptyState';\nexport { Loading } from './components/feedback/Loading';\nexport type { LoadingProps } from './components/feedback/Loading';\nexport { AppLoading } from './components/feedback/AppLoading';\nexport type { AppLoadingProps } from './components/feedback/AppLoading';\nexport { CircularProgress } from './components/feedback/CircularProgress';\nexport type { CircularProgressProps } from './components/feedback/CircularProgress';\n\n// Third Party Components\nexport { FlowEditor } from './components/third-party/FlowEditor';\nexport type { FlowEditorProps } from './components/third-party/FlowEditor';\nexport { CodeEditor } from './components/third-party/CodeEditor';\nexport type { CodeEditorProps, CodeEditorLanguage } from './components/third-party/CodeEditor';\n// Re-export commonly used ReactFlow types\nexport type {\n Node,\n Edge,\n NodeTypes,\n EdgeTypes,\n ReactFlowInstance,\n OnNodesChange,\n OnEdgesChange,\n} from './components/third-party/FlowEditor';\nexport {\n Background,\n Controls,\n MiniMap,\n BackgroundVariant,\n ConnectionLineType,\n} from './components/third-party/FlowEditor';\nexport { Panel } from 'reactflow';\n\n","import { createTheme, Theme } from '@mui/material/styles';\n\n// Color palette - matching ROB application\nconst colors = {\n primary: {\n main: '#1976d2', // ROB primary color\n light: '#1976d2', // Same as main for selected background\n dark: '#1565c0',\n contrastText: '#FFFFFF',\n },\n secondary: {\n main: '#666666',\n light: '#999999',\n dark: '#333333',\n contrastText: '#FFFFFF',\n },\n success: {\n main: '#10B981',\n light: '#34D399',\n dark: '#059669',\n contrastText: '#FFFFFF',\n },\n error: {\n main: '#EF4444',\n light: '#F87171',\n dark: '#DC2626',\n contrastText: '#FFFFFF',\n },\n warning: {\n main: '#F59E0B',\n light: '#FBBF24',\n dark: '#D97706',\n contrastText: '#FFFFFF',\n },\n tertiary: {\n main: '#F59E0B',\n light: '#FBBF24',\n dark: '#D97706',\n contrastText: '#1A1A1A',\n },\n grey: {\n 50: '#FAFAFA',\n 100: '#F5F5F5',\n 200: '#EEEEEE',\n 300: '#E0E0E0',\n 400: '#BDBDBD',\n 500: '#9E9E9E',\n 600: '#757575',\n 700: '#616161',\n 800: '#424242',\n 900: '#212121',\n },\n text: {\n primary: '#1A1A1A',\n secondary: '#666666',\n disabled: '#999999',\n },\n background: {\n default: '#FFFFFF',\n paper: '#FFFFFF',\n selected: 'rgba(123, 44, 191, 0.1)',\n },\n};\n\nexport const theme: Theme = createTheme({\n palette: {\n mode: 'light',\n primary: colors.primary,\n secondary: colors.secondary,\n success: colors.success,\n error: colors.error,\n warning: colors.warning,\n grey: colors.grey,\n text: colors.text,\n background: colors.background,\n },\n typography: {\n fontFamily: \"'Inter', -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Human Sans', 'Nohemi', sans-serif\",\n h1: {\n fontWeight: 700,\n fontSize: '96px',\n lineHeight: 1.2,\n },\n h2: {\n fontWeight: 700,\n fontSize: '60px',\n lineHeight: 1.2,\n },\n h3: {\n fontWeight: 700,\n fontSize: '48px',\n lineHeight: 1.2,\n },\n h4: {\n fontWeight: 600,\n fontSize: '34px',\n lineHeight: 1.2,\n },\n h5: {\n fontWeight: 600,\n fontSize: '24px',\n lineHeight: 1.2,\n },\n h6: {\n fontWeight: 600,\n fontSize: '20px',\n lineHeight: 1.2,\n },\n subtitle1: {\n fontWeight: 700,\n fontSize: '16px',\n lineHeight: 1.5,\n },\n subtitle2: {\n fontWeight: 700,\n fontSize: '14px',\n lineHeight: 1.5,\n },\n body1: {\n fontWeight: 400,\n fontSize: '16px',\n lineHeight: 1.5,\n },\n body2: {\n fontWeight: 400,\n fontSize: '14px',\n lineHeight: 1.5,\n },\n button: {\n fontWeight: 700,\n fontSize: '14px',\n textTransform: 'uppercase',\n letterSpacing: '0.5px',\n },\n caption: {\n fontWeight: 400,\n fontSize: '12px',\n lineHeight: 1.5,\n },\n overline: {\n fontWeight: 800,\n fontSize: '10px',\n textTransform: 'uppercase',\n letterSpacing: '1px',\n },\n },\n shape: {\n borderRadius: 16,\n },\n components: {\n MuiButton: {\n styleOverrides: {\n root: {\n textTransform: 'none',\n borderRadius: 12,\n fontWeight: 600,\n padding: '8px 24px',\n boxShadow: 'none',\n '&:hover': {\n boxShadow: 'none',\n },\n },\n sizeSmall: {\n padding: '4px 12px',\n fontSize: '12px',\n },\n sizeMedium: {\n padding: '8px 24px',\n fontSize: '14px',\n },\n sizeLarge: {\n padding: '12px 24px',\n fontSize: '16px',\n },\n },\n },\n MuiTextField: {\n styleOverrides: {\n root: {\n '& .MuiOutlinedInput-root': {\n borderRadius: 12,\n },\n },\n },\n },\n MuiSelect: {\n styleOverrides: {\n root: {\n borderRadius: 12,\n },\n },\n },\n MuiChip: {\n styleOverrides: {\n root: {\n borderRadius: 16,\n fontWeight: 500,\n },\n },\n },\n MuiPaper: {\n styleOverrides: {\n root: {\n boxShadow: '0px 4px 20px rgba(0, 0, 0, 0.05)',\n border: '1px solid rgba(0, 0, 0, 0.05)',\n },\n },\n },\n MuiDrawer: {\n styleOverrides: {\n paper: {\n borderRight: '1px solid rgba(0, 0, 0, 0.05)',\n },\n },\n },\n MuiAlert: {\n styleOverrides: {\n root: {\n borderRadius: 8,\n },\n filled: {\n borderRadius: 8,\n },\n },\n },\n },\n});\n\n// Export colors for use in components\nexport { colors };\n\n","import React from 'react';\nimport MuiButton, { ButtonProps as MuiButtonProps } from '@mui/material/Button';\nimport { styled } from '@mui/material/styles';\nimport { colors } from '../../theme';\n\nexport type ButtonVariant = 'primary' | 'secondary' | 'tertiary';\n\nexport interface ButtonProps extends Omit<MuiButtonProps, 'variant' | 'color'> {\n variant?: ButtonVariant;\n size?: 'small' | 'medium' | 'large';\n startIcon?: React.ReactNode;\n endIcon?: React.ReactNode;\n}\n\nconst StyledPrimaryButton = styled(MuiButton)(() => ({\n backgroundColor: colors.primary.main,\n color: colors.primary.contrastText,\n '&:hover': {\n backgroundColor: colors.primary.light,\n },\n '&:active': {\n backgroundColor: colors.primary.dark,\n },\n '&:disabled': {\n backgroundColor: colors.grey[300],\n color: colors.grey[500],\n },\n}));\n\nconst StyledSecondaryButton = styled(MuiButton)(() => ({\n backgroundColor: 'transparent',\n color: colors.primary.main,\n border: `1px solid ${colors.primary.main}`,\n '&:hover': {\n backgroundColor: colors.background.selected,\n borderColor: colors.primary.light,\n },\n '&:active': {\n backgroundColor: colors.background.selected,\n borderColor: colors.primary.dark,\n },\n '&:disabled': {\n borderColor: colors.grey[300],\n color: colors.grey[500],\n },\n}));\n\nconst StyledTertiaryButton = styled(MuiButton)(() => ({\n backgroundColor: 'transparent',\n color: colors.tertiary.main,\n '&:hover': {\n backgroundColor: 'rgba(245, 158, 11, 0.1)',\n },\n '&:active': {\n backgroundColor: 'rgba(245, 158, 11, 0.2)',\n },\n '&:disabled': {\n color: colors.grey[500],\n },\n}));\n\nexport const Button: React.FC<ButtonProps> = ({\n variant = 'primary',\n children,\n startIcon,\n endIcon,\n ...props\n}) => {\n const buttonProps = {\n ...props,\n startIcon,\n endIcon,\n };\n\n switch (variant) {\n case 'primary':\n return <StyledPrimaryButton {...buttonProps}>{children}</StyledPrimaryButton>;\n case 'secondary':\n return <StyledSecondaryButton {...buttonProps}>{children}</StyledSecondaryButton>;\n case 'tertiary':\n return <StyledTertiaryButton {...buttonProps}>{children}</StyledTertiaryButton>;\n default:\n return <StyledPrimaryButton {...buttonProps}>{children}</StyledPrimaryButton>;\n }\n};\n\n","import React from 'react';\nimport MuiIconButton, { IconButtonProps as MuiIconButtonProps } from '@mui/material/IconButton';\nimport { styled } from '@mui/material/styles';\nimport { colors } from '../../theme';\n\nexport interface IconButtonProps extends MuiIconButtonProps {\n variant?: 'default' | 'primary' | 'secondary';\n}\n\nconst StyledIconButton = styled(MuiIconButton, {\n shouldForwardProp: (prop) => prop !== 'buttonVariant',\n})<{ buttonVariant?: string }>(({ buttonVariant = 'default' }) => {\n const variants: Record<string, any> = {\n primary: {\n color: colors.primary.main,\n '&:hover': {\n backgroundColor: colors.background.selected,\n },\n },\n secondary: {\n color: colors.text.secondary,\n '&:hover': {\n backgroundColor: colors.grey[50],\n },\n },\n default: {\n color: colors.text.primary,\n '&:hover': {\n backgroundColor: colors.grey[50],\n },\n },\n };\n\n return variants[buttonVariant] || variants.default;\n});\n\nexport const IconButton: React.FC<IconButtonProps> = ({\n variant = 'default',\n ...props\n}) => {\n return <StyledIconButton buttonVariant={variant} {...props} />;\n};\n\n","import React from 'react';\nimport { LoadingButton as MuiLoadingButton, LoadingButtonProps as MuiLoadingButtonProps } from '@mui/lab';\n\nexport interface LoadingButtonProps extends MuiLoadingButtonProps {\n /**\n * If `true`, the button will show a loading indicator\n */\n loading?: boolean;\n /**\n * The loading indicator can be positioned inside the button or in the center\n */\n loadingPosition?: 'start' | 'end' | 'center';\n}\n\n/**\n * LoadingButton component - Button with loading state from MUI Lab\n * \n * @example\n * ```tsx\n * <LoadingButton\n * variant=\"contained\"\n * loading={isLoading}\n * onClick={handleSubmit}\n * >\n * Submit\n * </LoadingButton>\n * ```\n */\nexport const LoadingButton: React.FC<LoadingButtonProps> = ({\n loading = false,\n loadingPosition = 'center',\n ...props\n}) => {\n return (\n <MuiLoadingButton\n loading={loading}\n loadingPosition={loadingPosition}\n {...props}\n />\n );\n};\n\nexport default LoadingButton;\n\n","import React from 'react';\nimport {\n ButtonGroup as MuiButtonGroup,\n ButtonGroupProps as MuiButtonGroupProps,\n} from '@mui/material';\n\nexport interface ButtonGroupProps extends MuiButtonGroupProps {\n /**\n * The content of the button group\n */\n children?: React.ReactNode;\n /**\n * If `true`, the buttons will be disabled\n */\n disabled?: boolean;\n /**\n * If `true`, the button group will take full width\n */\n fullWidth?: boolean;\n /**\n * The orientation of the button group\n * @default 'horizontal'\n */\n orientation?: 'horizontal' | 'vertical';\n /**\n * The size of the buttons\n * @default 'medium'\n */\n size?: 'small' | 'medium' | 'large';\n /**\n * The variant to use\n * @default 'outlined'\n */\n variant?: 'text' | 'outlined' | 'contained';\n}\n\n/**\n * ButtonGroup component - groups related buttons together\n * \n * @example\n * ```tsx\n * <ButtonGroup variant=\"contained\">\n * <Button>One</Button>\n * <Button>Two</Button>\n * <Button>Three</Button>\n * </ButtonGroup>\n * ```\n */\nexport const ButtonGroup: React.FC<ButtonGroupProps> = ({\n orientation = 'horizontal',\n size = 'medium',\n variant = 'outlined',\n ...props\n}) => {\n return (\n <MuiButtonGroup\n orientation={orientation}\n size={size}\n variant={variant}\n {...props}\n />\n );\n};\n\nexport default ButtonGroup;\n\n","import React from 'react';\nimport MuiTextField, { TextFieldProps as MuiTextFieldProps } from '@mui/material/TextField';\nimport { styled } from '@mui/material/styles';\nimport { colors } from '../../theme';\n\nexport type TextFieldSize = 'small' | 'medium';\n\nexport interface TextFieldProps extends Omit<MuiTextFieldProps, 'size'> {\n size?: TextFieldSize;\n}\n\nconst StyledTextField = styled(MuiTextField)(({ error }) => ({\n '& .MuiOutlinedInput-root': {\n '&:hover fieldset': {\n borderColor: error ? colors.error.main : colors.primary.main,\n },\n '&.Mui-focused fieldset': {\n borderColor: error ? colors.error.main : colors.primary.main,\n },\n '&.Mui-error fieldset': {\n borderColor: colors.error.main,\n },\n },\n '& .MuiInputLabel-root': {\n '&.Mui-focused': {\n color: error ? colors.error.main : colors.primary.main,\n },\n },\n}));\n\nexport const TextField: React.FC<TextFieldProps> = ({\n size = 'medium',\n ...props\n}) => {\n return <StyledTextField size={size === 'medium' ? 'medium' : 'small'} {...props} />;\n};\n\n","import React from 'react';\nimport { TextField } from './TextField';\nimport { TextFieldProps } from './TextField';\nimport SearchIcon from '@mui/icons-material/Search';\nimport InputAdornment from '@mui/material/InputAdornment';\n\nexport interface SearchFieldProps extends Omit<TextFieldProps, 'InputProps'> {\n placeholder?: string;\n onSearch?: (value: string) => void;\n}\n\nexport const SearchField: React.FC<SearchFieldProps> = ({\n placeholder = 'Search...',\n onSearch,\n onChange,\n ...props\n}) => {\n const handleChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n if (onChange) {\n onChange(e);\n }\n if (onSearch) {\n onSearch(e.target.value);\n }\n };\n\n return (\n <TextField\n placeholder={placeholder}\n onChange={handleChange}\n InputProps={{\n startAdornment: (\n <InputAdornment position=\"start\">\n <SearchIcon style={{ fontSize: 18, color: '#999' }} />\n </InputAdornment>\n ),\n }}\n {...props}\n />\n );\n};\n\n","export {\n FormControl,\n FormLabel,\n FormHelperText,\n FormControlLabel,\n InputLabel,\n InputAdornment,\n} from '@mui/material';\nexport type {\n FormControlProps,\n FormLabelProps,\n FormHelperTextProps,\n FormControlLabelProps,\n InputLabelProps,\n InputAdornmentProps,\n} from '@mui/material';\n\n","import React from 'react';\nimport {\n Select,\n MenuItem,\n FormControl,\n InputLabel,\n SelectProps as MuiSelectProps,\n} from '@mui/material';\nimport { styled } from '@mui/material/styles';\nimport { colors } from '../../theme';\n\nexport type DropdownSize = 'small' | 'medium' | 'large';\n\nexport interface DropdownOption {\n value: string | number;\n label: string;\n disabled?: boolean;\n}\n\nexport interface DropdownProps extends Omit<MuiSelectProps, 'size'> {\n label?: string;\n options: DropdownOption[];\n size?: DropdownSize;\n placeholder?: string;\n}\n\nconst StyledFormControl = styled(FormControl)({\n minWidth: 120,\n});\n\nconst StyledSelect = styled(Select)(({ error }) => ({\n '&:hover .MuiOutlinedInput-notchedOutline': {\n borderColor: error ? colors.error.main : colors.primary.main,\n },\n '&.Mui-focused .MuiOutlinedInput-notchedOutline': {\n borderColor: error ? colors.error.main : colors.primary.main,\n },\n}));\n\nexport const Dropdown: React.FC<DropdownProps> = ({\n label,\n options,\n size = 'medium',\n placeholder,\n value,\n ...props\n}) => {\n const selectSize = size === 'large' ? 'medium' : size;\n\n return (\n <StyledFormControl size={selectSize} error={props.error} fullWidth={props.fullWidth}>\n {label && <InputLabel>{label}</InputLabel>}\n <StyledSelect\n value={value || ''}\n label={label}\n size={selectSize}\n {...props}\n >\n {placeholder && (\n <MenuItem value=\"\" disabled>\n {placeholder}\n </MenuItem>\n )}\n {options.map((option) => (\n <MenuItem key={option.value} value={option.value} disabled={option.disabled}>\n {option.label}\n </MenuItem>\n ))}\n </StyledSelect>\n </StyledFormControl>\n );\n};\n\n","import React from 'react';\nimport {\n ToggleButton as MuiToggleButton,\n ToggleButtonGroup as MuiToggleButtonGroup,\n ToggleButtonProps as MuiToggleButtonProps,\n ToggleButtonGroupProps as MuiToggleButtonGroupProps,\n} from '@mui/material';\nimport { styled } from '@mui/material/styles';\nimport { colors } from '../../theme';\n\nexport type ToggleButtonProps = MuiToggleButtonProps\n\nexport const ToggleButton: React.FC<ToggleButtonProps> = (props) => {\n return <MuiToggleButton {...props} />;\n};\n\nexport type ToggleButtonGroupProps = MuiToggleButtonGroupProps\n\nconst StyledToggleButtonGroup = styled(MuiToggleButtonGroup)({\n '& .MuiToggleButton-root': {\n border: `1px solid ${colors.grey[300]}`,\n '&.Mui-selected': {\n backgroundColor: colors.primary.main,\n color: colors.primary.contrastText,\n '&:hover': {\n backgroundColor: colors.primary.light,\n },\n },\n '&:hover': {\n backgroundColor: colors.grey[50],\n },\n },\n});\n\nexport const ToggleButtonGroup: React.FC<ToggleButtonGroupProps> = (props) => {\n return <StyledToggleButtonGroup {...props} />;\n};\n\n","import React from 'react';\nimport MuiSwitch, { SwitchProps as MuiSwitchProps } from '@mui/material/Switch';\nimport { styled } from '@mui/material/styles';\nimport { colors } from '../../theme';\n\nexport interface SwitchProps extends MuiSwitchProps {\n label?: string;\n labelPosition?: 'left' | 'right';\n}\n\nconst StyledSwitch = styled(MuiSwitch)(({ theme }) => ({\n width: 44,\n height: 24,\n padding: 0,\n '& .MuiSwitch-switchBase': {\n padding: 0,\n margin: 2,\n transitionDuration: '300ms',\n '&.Mui-checked': {\n transform: 'translateX(20px)',\n color: '#fff',\n '& + .MuiSwitch-track': {\n backgroundColor: colors.success.main,\n opacity: 1,\n border: 0,\n },\n '&.Mui-disabled + .MuiSwitch-track': {\n opacity: 0.5,\n },\n },\n '&.Mui-focusVisible .MuiSwitch-thumb': {\n color: colors.success.main,\n border: `6px solid #fff`,\n },\n '&.Mui-disabled .MuiSwitch-thumb': {\n color: colors.grey[300],\n },\n '&.Mui-disabled + .MuiSwitch-track': {\n opacity: 0.5,\n backgroundColor: colors.grey[300],\n },\n },\n '& .MuiSwitch-thumb': {\n boxSizing: 'border-box',\n width: 20,\n height: 20,\n },\n '& .MuiSwitch-track': {\n borderRadius: 24 / 2,\n backgroundColor: colors.grey[300],\n opacity: 1,\n transition: theme.transitions.create(['background-color'], {\n duration: 500,\n }),\n },\n}));\n\nexport const Switch: React.FC<SwitchProps> = ({\n label,\n labelPosition = 'right',\n ...props\n}) => {\n const switchComponent = <StyledSwitch {...props} />;\n\n if (!label) {\n return switchComponent;\n }\n\n return (\n <div style={{ display: 'flex', alignItems: 'center', gap: '8px' }}>\n {labelPosition === 'left' && <span>{label}</span>}\n {switchComponent}\n {labelPosition === 'right' && <span>{label}</span>}\n </div>\n );\n};\n\n","import React from 'react';\nimport MuiCheckbox, { CheckboxProps as MuiCheckboxProps } from '@mui/material/Checkbox';\nimport { styled } from '@mui/material/styles';\nimport { colors } from '../../theme';\nimport FormControlLabel from '@mui/material/FormControlLabel';\n\nexport interface CheckboxProps extends Omit<MuiCheckboxProps, 'color'> {\n label?: string;\n labelPosition?: 'left' | 'right';\n}\n\nconst StyledCheckbox = styled(MuiCheckbox)(() => ({\n color: colors.grey[400],\n '&.Mui-checked': {\n color: colors.primary.main,\n },\n '&.MuiCheckbox-indeterminate': {\n color: colors.primary.main,\n },\n '&.Mui-disabled': {\n color: colors.grey[300],\n },\n '&:hover': {\n backgroundColor: colors.background.selected,\n },\n '&.Mui-focusVisible': {\n outline: `2px solid ${colors.primary.main}`,\n outlineOffset: 2,\n },\n}));\n\nexport const Checkbox: React.FC<CheckboxProps> = ({\n label,\n labelPosition = 'right',\n ...props\n}) => {\n const checkboxComponent = <StyledCheckbox {...props} />;\n\n if (!label) {\n return checkboxComponent;\n }\n\n const labelPlacementMap: Record<string, 'start' | 'end' | 'top' | 'bottom'> = {\n left: 'start',\n right: 'end',\n };\n\n return (\n <FormControlLabel\n control={checkboxComponent}\n label={label}\n labelPlacement={labelPlacementMap[labelPosition] || 'end'}\n />\n );\n};\n\n","import React from 'react';\nimport MuiRadio, { RadioProps as MuiRadioProps } from '@mui/material/Radio';\nimport { styled } from '@mui/material/styles';\nimport { colors } from '../../theme';\nimport FormControlLabel from '@mui/material/FormControlLabel';\nimport RadioGroup from '@mui/material/RadioGroup';\n\nexport interface RadioProps extends Omit<MuiRadioProps, 'color'> {\n label?: string;\n labelPosition?: 'left' | 'right';\n}\n\nconst StyledRadio = styled(MuiRadio)(() => ({\n color: colors.grey[400],\n '&.Mui-checked': {\n color: colors.primary.main,\n },\n '&.Mui-disabled': {\n color: colors.grey[300],\n },\n '&:hover': {\n backgroundColor: colors.background.selected,\n },\n '&.Mui-focusVisible': {\n outline: `2px solid ${colors.primary.main}`,\n outlineOffset: 2,\n },\n}));\n\nexport const Radio: React.FC<RadioProps> = ({\n label,\n labelPosition = 'right',\n ...props\n}) => {\n const radioComponent = <StyledRadio {...props} />;\n\n if (!label) {\n return radioComponent;\n }\n\n const labelPlacementMap: Record<string, 'start' | 'end' | 'top' | 'bottom'> = {\n left: 'start',\n right: 'end',\n };\n\n return (\n <FormControlLabel\n control={radioComponent}\n label={label}\n labelPlacement={labelPlacementMap[labelPosition] || 'end'}\n />\n );\n};\n\nexport { RadioGroup };\n\n","import React from 'react';\nimport {\n Drawer,\n List,\n styled,\n Box,\n} from '@mui/material';\nimport { colors } from '../../theme';\nimport { SidebarItem, SidebarItemProps } from './SidebarItem';\n\nexport interface SidebarProps {\n open?: boolean;\n width?: number;\n items: SidebarItemProps[];\n onClose?: () => void;\n variant?: 'permanent' | 'persistent' | 'temporary';\n}\n\nconst StyledDrawer = styled(Drawer)(() => ({\n '& .MuiDrawer-paper': {\n backgroundColor: colors.background.paper,\n borderRight: `1px solid ${colors.grey[200]}`,\n boxShadow: 'none',\n },\n}));\n\nexport const Sidebar: React.FC<SidebarProps> = ({\n open = true,\n width = 280,\n items,\n onClose,\n variant = 'permanent',\n}) => {\n return (\n <StyledDrawer\n variant={variant}\n open={open}\n onClose={onClose}\n sx={{\n width,\n flexShrink: 0,\n '& .MuiDrawer-paper': {\n width,\n boxSizing: 'border-box',\n },\n }}\n >\n <Box sx={{ overflow: 'auto', padding: '8px 0' }}>\n <List>\n {items.map((item, index) => (\n <SidebarItem key={index} {...item} />\n ))}\n </List>\n </Box>\n </StyledDrawer>\n );\n};\n\n","import React from 'react';\nimport {\n ListItemButton,\n ListItemIcon,\n ListItemText,\n styled,\n} from '@mui/material';\nimport { colors } from '../../theme';\n\nexport interface SidebarItemProps {\n label: string;\n icon?: React.ReactNode;\n selected?: boolean;\n onClick?: () => void;\n size?: 'small' | 'medium' | 'large';\n endIcon?: React.ReactNode;\n children?: React.ReactNode;\n}\n\nconst StyledListItemButton = styled(ListItemButton, {\n shouldForwardProp: (prop) => prop !== 'selected' && prop !== 'size',\n})<{ selected?: boolean; size?: string }>(({ selected, size = 'medium' }) => {\n const heightMap: Record<string, string> = {\n small: '40px',\n medium: '56px',\n large: '64px',\n };\n\n return {\n height: heightMap[size],\n paddingLeft: '16px',\n paddingRight: '16px',\n borderRadius: '8px',\n margin: '4px 8px',\n color: selected ? colors.primary.main : colors.text.primary,\n backgroundColor: selected ? colors.background.selected : 'transparent',\n '&:hover': {\n backgroundColor: selected ? colors.background.selected : colors.grey[50],\n },\n '& .MuiListItemIcon-root': {\n color: selected ? colors.primary.main : colors.text.secondary,\n minWidth: '40px',\n },\n '& .MuiListItemText-primary': {\n fontWeight: selected ? 600 : 400,\n color: selected ? colors.primary.main : colors.text.primary,\n },\n };\n});\n\nexport const SidebarItem: React.FC<SidebarItemProps> = ({\n label,\n icon,\n selected = false,\n onClick,\n size = 'medium',\n endIcon,\n children,\n}) => {\n return (\n <StyledListItemButton selected={selected} size={size} onClick={onClick}>\n {icon && <ListItemIcon>{icon}</ListItemIcon>}\n <ListItemText primary={label} />\n {endIcon && <div style={{ marginLeft: 'auto' }}>{endIcon}</div>}\n {children}\n </StyledListItemButton>\n );\n};\n\n","import React, { useState, useCallback } from 'react';\nimport {\n Box,\n Typography,\n Avatar,\n Tooltip,\n IconButton,\n Link,\n Chip,\n TextField,\n InputAdornment,\n List,\n ListItem,\n ListItemAvatar,\n ListItemText,\n Button,\n Menu,\n} from '@mui/material';\nimport KeyboardArrowDownIcon from '@mui/icons-material/KeyboardArrowDown';\nimport ArchiveIcon from '@mui/icons-material/Archive';\nimport UnarchiveIcon from '@mui/icons-material/Unarchive';\nimport SearchIcon from '@mui/icons-material/Search';\nimport AddIcon from '@mui/icons-material/Add';\nimport CheckIcon from '@mui/icons-material/Check';\nimport SettingsIcon from '@mui/icons-material/Settings';\nimport PersonAddAltIcon from '@mui/icons-material/PersonAddAlt';\n\nexport interface Service {\n id: string;\n name: string;\n description?: string;\n type?: string;\n lastAccessed?: string;\n memberCount?: number;\n favorited?: boolean;\n isPersonal?: boolean;\n avatar?: string;\n archived?: boolean;\n}\n\nexport interface ServiceSelectorButtonProps {\n /**\n * List of services to display\n */\n services: Service[];\n /**\n * Currently selected service ID\n */\n selectedServiceId: string | null;\n /**\n * Loading state\n */\n loading?: boolean;\n /**\n * Compact mode for mobile or mini-sidebar\n */\n compact?: boolean;\n /**\n * Callback when service is selected\n */\n onSelectService?: (serviceId: string) => void;\n /**\n * Callback when service name is clicked (for navigation)\n */\n onServiceClick?: (serviceId: string) => void;\n /**\n * Callback when \"Create Service\" is clicked\n */\n onCreateService?: () => void;\n /**\n * Callback after service is created\n */\n onServiceCreated?: () => void;\n /**\n * Whether user is a manager for the selected service\n */\n isManager?: boolean;\n /**\n * Custom styles\n */\n sx?: never;\n /**\n * Panel width\n * @default 350\n */\n panelWidth?: number;\n /**\n * Callback when Settings button is clicked\n */\n onOpenSettings?: (serviceId: string) => void;\n /**\n * Callback when Add Member button is clicked\n */\n onOpenAddMember?: (serviceId: string) => void;\n}\n\nexport const ServiceSelectorButton: React.FC<ServiceSelectorButtonProps> = ({\n services,\n selectedServiceId,\n loading = false,\n compact = false,\n onSelectService,\n onServiceClick,\n onCreateService,\n onServiceCreated,\n isManager = false,\n sx = {},\n panelWidth = 350,\n onOpenSettings,\n onOpenAddMember,\n}) => {\n const [anchorEl, setAnchorEl] = useState<null | HTMLElement>(null);\n const [searchTerm, setSearchTerm] = useState('');\n const [showArchived, setShowArchived] = useState(false);\n\n // Handle opening the service selector\n const handleOpenSelector = (event: React.MouseEvent<HTMLElement>) => {\n event.stopPropagation();\n setAnchorEl(event.currentTarget);\n };\n\n // Handle closing the service selector\n const handleClose = () => {\n setAnchorEl(null);\n setSearchTerm('');\n setShowArchived(false);\n };\n\n // Handle clicking on the service name (navigates to dashboard)\n const handleServiceClick = (e: React.MouseEvent) => {\n e.stopPropagation();\n if (selectedServiceId && onServiceClick) {\n onServiceClick(selectedServiceId);\n }\n };\n\n // Handle selecting a service\n const handleSelectService = useCallback(\n (serviceId: string) => {\n handleClose();\n if (onSelectService) {\n onSelectService(serviceId);\n }\n },\n [onSelectService]\n );\n\n const handleCreateClick = () => {\n handleClose();\n if (onCreateService) {\n onCreateService();\n }\n };\n\n // Get the selected service\n const selectedService = Array.isArray(services)\n ? services.find((s) => s.id === selectedServiceId)\n : null;\n\n // Filter services based on search term and archived status\n const filteredServices = services.filter((service) => {\n const matchesSearch =\n searchTerm === '' ||\n service.name.toLowerCase().includes(searchTerm.toLowerCase());\n const isArchived = service.archived === true;\n const matchesArchivedFilter = showArchived ? isArchived : !isArchived;\n return matchesSearch && matchesArchivedFilter;\n });\n\n // Compact version for mobile or mini-sidebar\n if (compact) {\n return (\n <>\n <Box sx={{ position: 'relative' }}>\n <Tooltip title=\"Select service\" placement=\"right\">\n <IconButton\n onClick={handleOpenSelector}\n sx={{\n p: 1,\n '&:hover': {\n bgcolor: 'rgba(0, 0, 0, 0.04)',\n },\n ...sx,\n }}\n >\n <Avatar\n sx={{\n width: 32,\n height: 32,\n bgcolor: selectedServiceId ? 'primary.main' : 'grey.400',\n fontSize: '0.9rem',\n }}\n >\n {selectedService ? selectedService.name.charAt(0) : 'D'}\n </Avatar>\n </IconButton>\n </Tooltip>\n </Box>\n\n <ServiceSelectorPanel\n open={Boolean(anchorEl)}\n anchorEl={anchorEl}\n onClose={handleClose}\n services={services}\n selectedServiceId={selectedServiceId}\n onSelectService={handleSelectService}\n onCreateService={handleCreateClick}\n onServiceCreated={onServiceCreated}\n loading={loading}\n width={panelWidth}\n isManager={isManager}\n selectedService={selectedService}\n searchTerm={searchTerm}\n onSearchChange={setSearchTerm}\n showArchived={showArchived}\n onToggleArchived={() => setShowArchived(!showArchived)}\n filteredServices={filteredServices}\n onOpenSettings={onOpenSettings}\n onOpenAddMember={onOpenAddMember}\n />\n </>\n );\n }\n\n // Standard breadcrumb style\n return (\n <>\n <Box sx={{ display: 'flex', alignItems: 'center', ...sx }}>\n {selectedService ? (\n <>\n {/* Service name as a regular breadcrumb link if user is manager, otherwise just text */}\n {isManager ? (\n <Link\n underline=\"hover\"\n color=\"inherit\"\n onClick={handleServiceClick}\n sx={{\n display: 'flex',\n alignItems: 'center',\n fontSize: '0.875rem',\n cursor: 'pointer',\n mr: 0.5,\n }}\n >\n <Avatar\n sx={{\n width: 20,\n height: 20,\n bgcolor: 'primary.main',\n fontSize: '0.7rem',\n mr: 0.5,\n }}\n >\n {selectedService.name.charAt(0)}\n </Avatar>\n {selectedService.name}\n </Link>\n ) : (\n <Box\n sx={{\n display: 'flex',\n alignItems: 'center',\n fontSize: '0.875rem',\n mr: 0.5,\n color: 'text.primary',\n }}\n >\n <Avatar\n sx={{\n width: 20,\n height: 20,\n bgcolor: 'primary.main',\n fontSize: '0.7rem',\n mr: 0.5,\n }}\n >\n {selectedService.name.charAt(0)}\n </Avatar>\n {selectedService.name}\n </Box>\n )}\n\n {/* Show archived chip if service is archived */}\n {selectedService.archived && (\n <Chip\n size=\"small\"\n label=\"Archived\"\n color=\"error\"\n variant=\"outlined\"\n sx={{\n ml: 0.5,\n height: 20,\n fontSize: '0.8rem',\n '& .MuiChip-label': { px: 1 },\n '& .MuiChip-icon': { fontSize: '0.7rem', ml: 0.5 },\n }}\n />\n )}\n </>\n ) : (\n <Typography\n variant=\"body2\"\n color=\"text.secondary\"\n sx={{\n fontSize: '0.875rem',\n }}\n >\n Select Service\n </Typography>\n )}\n\n {/* Separate selector button */}\n <IconButton\n onClick={handleOpenSelector}\n size=\"small\"\n sx={{\n p: 0.2,\n ml: 0.5,\n color: 'text.secondary',\n }}\n >\n <KeyboardArrowDownIcon fontSize=\"small\" />\n </IconButton>\n </Box>\n\n <ServiceSelectorPanel\n open={Boolean(anchorEl)}\n anchorEl={anchorEl}\n onClose={handleClose}\n services={services}\n selectedServiceId={selectedServiceId}\n onSelectService={handleSelectService}\n onCreateService={handleCreateClick}\n onServiceCreated={onServiceCreated}\n loading={loading}\n width={panelWidth}\n isManager={isManager}\n selectedService={selectedService}\n searchTerm={searchTerm}\n onSearchChange={setSearchTerm}\n showArchived={showArchived}\n onToggleArchived={() => setShowArchived(!showArchived)}\n filteredServices={filteredServices}\n onOpenSettings={onOpenSettings}\n onOpenAddMember={onOpenAddMember}\n />\n </>\n );\n};\n\ninterface ServiceSelectorPanelProps {\n open: boolean;\n anchorEl: HTMLElement | null;\n onClose: () => void;\n services: Service[];\n selectedServiceId: string | null;\n onSelectService: (serviceId: string) => void;\n onCreateService?: () => void;\n onServiceCreated?: () => void;\n loading?: boolean;\n width?: number;\n isManager?: boolean;\n selectedService?: Service | null;\n searchTerm?: string;\n onSearchChange?: (term: string) => void;\n showArchived?: boolean;\n onToggleArchived?: () => void;\n filteredServices?: Service[];\n onOpenSettings?: (serviceId: string) => void;\n onOpenAddMember?: (serviceId: string) => void;\n}\n\nconst ServiceSelectorPanel: React.FC<ServiceSelectorPanelProps> = ({\n open,\n anchorEl,\n onClose,\n services,\n selectedServiceId,\n onSelectService,\n onCreateService,\n onServiceCreated,\n loading = false,\n width = 350,\n isManager = false,\n selectedService,\n searchTerm: externalSearchTerm,\n onSearchChange: externalOnSearchChange,\n showArchived: externalShowArchived,\n onToggleArchived: externalOnToggleArchived,\n filteredServices: externalFilteredServices,\n onOpenSettings,\n onOpenAddMember,\n}) => {\n const [internalSearchTerm, setInternalSearchTerm] = useState('');\n const [internalShowArchived, setInternalShowArchived] = useState(false);\n\n const searchTerm = externalSearchTerm !== undefined ? externalSearchTerm : internalSearchTerm;\n const setSearchTerm = externalOnSearchChange || setInternalSearchTerm;\n const showArchived = externalShowArchived !== undefined ? externalShowArchived : internalShowArchived;\n const toggleArchived = externalOnToggleArchived || (() => setInternalShowArchived(!internalShowArchived));\n\n // Filter services if not provided externally\n const filteredServices =\n externalFilteredServices ||\n services.filter((service) => {\n const matchesSearch =\n searchTerm === '' ||\n service.name.toLowerCase().includes(searchTerm.toLowerCase());\n const isArchived = service.archived === true;\n const matchesArchivedFilter = showArchived ? isArchived : !isArchived;\n return matchesSearch && matchesArchivedFilter;\n });\n\n const handleCreateClick = () => {\n if (onCreateService) {\n onCreateService();\n } else {\n // If no onCreateService handler, just close and call onServiceCreated\n onClose();\n if (onServiceCreated) {\n onServiceCreated();\n }\n }\n };\n\n return (\n <Menu\n anchorEl={anchorEl}\n open={open}\n onClose={onClose}\n anchorOrigin={{\n vertical: 'bottom',\n horizontal: 'left',\n }}\n transformOrigin={{\n vertical: 'top',\n horizontal: 'left',\n }}\n PaperProps={{\n sx: {\n width: width,\n maxHeight: '80vh',\n borderRadius: 1,\n boxShadow: '0 2px 10px rgba(0, 0, 0, 0.12)',\n overflow: 'hidden',\n mt: 1,\n },\n }}\n >\n {/* Header with selected service and management buttons */}\n {selectedService && (\n <Box\n sx={{\n paddingLeft: 2,\n paddingRight: 2,\n paddingTop: 1.5,\n paddingBottom: 1.5,\n borderBottom: 1,\n borderColor: 'divider',\n }}\n >\n {/* Top section with service name */}\n <Box sx={{\n display: 'flex',\n alignItems: 'center',\n mb: 1.5\n }}>\n <Avatar\n sx={{\n width: 32,\n height: 32,\n bgcolor: 'primary.main',\n fontSize: '0.9rem',\n mr: 1.5\n }}\n >\n {selectedService.name.charAt(0)}\n </Avatar>\n <Box sx={{ flex: 1 }}>\n <Box sx={{ display: 'flex', alignItems: 'center', gap: 1 }}>\n <Typography variant=\"subtitle1\" sx={{ fontWeight: 600, fontSize: '1rem' }}>\n {selectedService.name}\n </Typography>\n <Box\n sx={{\n display: 'inline-block',\n bgcolor: 'rgba(0, 0, 0, 0.04)',\n color: 'text.secondary',\n px: 1,\n py: 0.3,\n borderRadius: '12px',\n fontSize: '0.7rem',\n fontWeight: 500,\n lineHeight: 1,\n }}\n >\n {isManager ? 'Manager' : 'Viewer'}\n </Box>\n </Box>\n </Box>\n </Box>\n\n {/* Bottom section with management buttons - always visible */}\n {(onOpenSettings || onOpenAddMember) && (\n <Box sx={{ display: 'flex', gap: 1 }}>\n {onOpenAddMember && (\n <Button\n startIcon={<PersonAddAltIcon />}\n variant=\"outlined\"\n size=\"small\"\n onClick={(e) => {\n e.stopPropagation();\n onClose();\n onOpenAddMember(selectedServiceId || '');\n }}\n disabled={!isManager}\n sx={{\n flex: 1,\n textTransform: 'none',\n color: 'text.secondary',\n fontSize: '0.8rem',\n py: 0.75,\n justifyContent: 'flex-start',\n borderColor: 'rgba(0, 0, 0, 0.12)',\n borderRadius: '6px',\n '&:hover': {\n borderColor: 'rgba(0, 0, 0, 0.23)',\n backgroundColor: 'rgba(0, 0, 0, 0.03)'\n },\n '&:disabled': {\n opacity: 0.5,\n cursor: 'not-allowed'\n }\n }}\n >\n Add member\n </Button>\n )}\n\n {onOpenSettings && (\n <Button\n startIcon={<SettingsIcon />}\n variant=\"outlined\"\n size=\"small\"\n onClick={(e) => {\n e.stopPropagation();\n onClose();\n onOpenSettings(selectedServiceId || '');\n }}\n disabled={!isManager}\n sx={{\n flex: 1,\n textTransform: 'none',\n color: 'text.secondary',\n fontSize: '0.8rem',\n py: 0.75,\n justifyContent: 'flex-start',\n borderColor: 'rgba(0, 0, 0, 0.12)',\n borderRadius: '6px',\n '&:hover': {\n borderColor: 'rgba(0, 0, 0, 0.23)',\n backgroundColor: 'rgba(0, 0, 0, 0.03)'\n },\n '&:disabled': {\n opacity: 0.5,\n cursor: 'not-allowed'\n }\n }}\n >\n Settings\n </Button>\n )}\n </Box>\n )}\n </Box>\n )}\n\n {/* Search box with archive toggle */}\n <Box sx={{ px: 2, pt: 2, pb: 1.5 }}>\n <Box sx={{ display: 'flex', alignItems: 'center', mb: 1.5 }}>\n <TextField\n size=\"small\"\n placeholder=\"Search services...\"\n value={searchTerm}\n onChange={(e) => setSearchTerm(e.target.value)}\n sx={{ flex: 1 }}\n InputProps={{\n startAdornment: (\n <InputAdornment position=\"start\">\n <SearchIcon fontSize=\"small\" color=\"action\" />\n </InputAdornment>\n ),\n sx: {\n borderRadius: 1.5,\n backgroundColor: 'rgba(0, 0, 0, 0.04)',\n '& fieldset': { border: 'none' },\n py: 0.5,\n },\n }}\n />\n <Tooltip title={showArchived ? 'Show active' : 'Show archived'}>\n <IconButton\n size=\"small\"\n onClick={toggleArchived}\n color={showArchived ? 'primary' : 'default'}\n sx={{ ml: 1 }}\n >\n {showArchived ? (\n <UnarchiveIcon fontSize=\"small\" />\n ) : (\n <ArchiveIcon fontSize=\"small\" />\n )}\n </IconButton>\n </Tooltip>\n </Box>\n\n {/* Service list content */}\n <Box\n sx={{\n maxHeight: 400,\n overflow: 'auto',\n py: 1,\n }}\n >\n {loading ? (\n <Box sx={{ p: 2, textAlign: 'center' }}>\n <Typography variant=\"body2\" color=\"text.secondary\">\n Loading services...\n </Typography>\n </Box>\n ) : filteredServices.length === 0 ? (\n <Box sx={{ p: 2, textAlign: 'center' }}>\n <Typography variant=\"body2\" color=\"text.secondary\">\n {searchTerm\n ? `No ${showArchived ? 'archived ' : ''}services matching \"${searchTerm}\"`\n : showArchived\n ? 'No archived services found'\n : 'No active services found'}\n </Typography>\n </Box>\n ) : (\n <>\n {/* Group Header */}\n <Typography\n variant=\"caption\"\n sx={{\n display: 'block',\n px: 2.5,\n py: 0.5,\n color: 'text.secondary',\n fontWeight: 600,\n textTransform: 'uppercase',\n fontSize: '0.65rem',\n letterSpacing: 0.5,\n }}\n >\n Services\n {showArchived && (\n <Chip\n size=\"small\"\n label=\"Archived\"\n color=\"error\"\n variant=\"outlined\"\n sx={{\n ml: 1,\n height: 20,\n fontSize: '0.6rem',\n '& .MuiChip-label': { px: 0.5 },\n '& .MuiChip-icon': { fontSize: '0.7rem', ml: 0.5 },\n }}\n />\n )}\n </Typography>\n\n {/* Group Services */}\n <List disablePadding>\n {filteredServices.map((service) => (\n <ListItem\n key={service.id}\n sx={{\n py: 0.75,\n px: 2,\n cursor: 'pointer',\n '&:hover': {\n backgroundColor: 'rgba(0, 0, 0, 0.04)',\n },\n backgroundColor:\n service.id === selectedServiceId\n ? 'rgba(25, 118, 210, 0.08)'\n : 'transparent',\n position: 'relative',\n }}\n onClick={() => onSelectService(service.id)}\n secondaryAction={\n service.id === selectedServiceId ? (\n <CheckIcon\n sx={{\n color: 'primary.main',\n fontSize: '1.2rem',\n }}\n />\n ) : null\n }\n >\n <ListItemAvatar sx={{ minWidth: 40 }}>\n <Avatar\n sx={{\n width: 26,\n height: 26,\n bgcolor:\n service.id === selectedServiceId ? 'primary.main' : 'grey.400',\n fontSize: '0.8rem',\n }}\n src={service.avatar}\n >\n {service.name.charAt(0)}\n </Avatar>\n </ListItemAvatar>\n <ListItemText\n primary={\n <Box sx={{ display: 'flex', alignItems: 'center', gap: 0.5 }}>\n <Typography\n variant=\"body2\"\n sx={{\n fontWeight: service.id === selectedServiceId ? 600 : 400,\n color:\n service.id === selectedServiceId\n ? 'primary.main'\n : 'text.primary',\n }}\n >\n {service.name}\n </Typography>\n </Box>\n }\n primaryTypographyProps={{ sx: { fontWeight: 500 } }}\n sx={{ my: 0 }}\n />\n </ListItem>\n ))}\n </List>\n </>\n )}\n </Box>\n\n {/* Footer actions */}\n <Box\n sx={{\n paddingTop: 2,\n paddingLeft: 2,\n paddingRight: 2,\n borderTop: 1,\n borderColor: 'divider',\n }}\n >\n <Button\n fullWidth\n variant=\"text\"\n startIcon={<AddIcon />}\n onClick={handleCreateClick}\n sx={{\n textTransform: 'none',\n fontWeight: 500,\n justifyContent: 'flex-start',\n color: 'primary.main',\n py: 1,\n px: 1.5,\n '&:hover': {\n backgroundColor: 'rgba(25, 118, 210, 0.08)',\n },\n }}\n >\n New Service\n </Button>\n </Box>\n </Box>\n </Menu>\n );\n};\n\nexport default ServiceSelectorButton;\n\n","import React, { useState, useCallback } from 'react';\nimport {\n Box,\n Typography,\n Avatar,\n IconButton,\n Link,\n TextField,\n InputAdornment,\n List,\n ListItem,\n ListItemAvatar,\n ListItemText,\n Button,\n Menu,\n} from '@mui/material';\nimport KeyboardArrowDownIcon from '@mui/icons-material/KeyboardArrowDown';\nimport SearchIcon from '@mui/icons-material/Search';\nimport AddIcon from '@mui/icons-material/Add';\nimport CheckIcon from '@mui/icons-material/Check';\n\nexport interface Workspace {\n id: string;\n name: string;\n description?: string;\n}\n\nexport interface WorkspaceSelectorButtonProps {\n /**\n * List of workspaces to display\n */\n workspaces: Workspace[];\n /**\n * Currently selected workspace ID\n */\n selectedWorkspaceId: string | null;\n /**\n * Loading state\n */\n loading?: boolean;\n /**\n * Callback when workspace is selected\n */\n onSelectWorkspace?: (workspaceId: string) => void;\n /**\n * Callback when workspace name is clicked (for navigation)\n */\n onWorkspaceClick?: (workspaceId: string) => void;\n /**\n * Callback when \"Create Workspace\" is clicked\n */\n onCreateWorkspace?: () => void;\n /**\n * Custom styles\n */\n sx?: any;\n /**\n * Panel width\n * @default 350\n */\n panelWidth?: number;\n}\n\nexport const WorkspaceSelectorButton: React.FC<WorkspaceSelectorButtonProps> = ({\n workspaces,\n selectedWorkspaceId,\n loading = false,\n onSelectWorkspace,\n onWorkspaceClick,\n onCreateWorkspace,\n sx = {},\n panelWidth = 350,\n}) => {\n const [anchorEl, setAnchorEl] = useState<null | HTMLElement>(null);\n\n // Handle opening the workspace selector\n const handleOpenSelector = (event: React.MouseEvent<HTMLElement>) => {\n event.stopPropagation();\n setAnchorEl(event.currentTarget);\n };\n\n // Handle closing the workspace selector\n const handleClose = () => {\n setAnchorEl(null);\n };\n\n // Handle selecting a workspace\n const handleSelectWorkspace = useCallback(\n (workspaceId: string) => {\n handleClose();\n if (onSelectWorkspace) {\n onSelectWorkspace(workspaceId);\n }\n },\n [onSelectWorkspace]\n );\n\n // Get the selected workspace\n const selectedWorkspace = Array.isArray(workspaces)\n ? workspaces.find((w) => w.id === selectedWorkspaceId)\n : null;\n\n if (!workspaces || workspaces.length === 0) {\n return null;\n }\n\n return (\n <>\n <Box sx={{ display: 'flex', alignItems: 'center', ...sx }}>\n {selectedWorkspace ? (\n <>\n {/* Workspace name as a regular breadcrumb link */}\n <Link\n underline=\"hover\"\n color=\"inherit\"\n onClick={(e) => {\n e.stopPropagation();\n if (onWorkspaceClick) {\n onWorkspaceClick(selectedWorkspace.id);\n }\n }}\n sx={{\n display: 'flex',\n alignItems: 'center',\n fontSize: '0.875rem',\n cursor: 'pointer',\n mr: 0.5,\n }}\n >\n <Avatar\n sx={{\n width: 20,\n height: 20,\n bgcolor: 'secondary.main',\n fontSize: '0.7rem',\n mr: 0.5,\n }}\n >\n {selectedWorkspace.name.charAt(0)}\n </Avatar>\n {selectedWorkspace.name}\n </Link>\n </>\n ) : (\n <Typography\n variant=\"body2\"\n color=\"text.secondary\"\n sx={{\n fontSize: '0.875rem',\n }}\n >\n Select Workspace\n </Typography>\n )}\n\n {/* Separate selector button */}\n <IconButton\n onClick={handleOpenSelector}\n size=\"small\"\n sx={{\n p: 0.2,\n ml: 0.5,\n color: 'text.secondary',\n }}\n >\n <KeyboardArrowDownIcon fontSize=\"small\" />\n </IconButton>\n </Box>\n\n <WorkspaceSelectorPanel\n open={Boolean(anchorEl)}\n anchorEl={anchorEl}\n onClose={handleClose}\n workspaces={workspaces}\n selectedWorkspaceId={selectedWorkspaceId}\n onSelectWorkspace={handleSelectWorkspace}\n onCreateWorkspace={onCreateWorkspace}\n loading={loading}\n width={panelWidth}\n />\n </>\n );\n};\n\ninterface WorkspaceSelectorPanelProps {\n open: boolean;\n anchorEl: HTMLElement | null;\n onClose: () => void;\n workspaces: Workspace[];\n selectedWorkspaceId: string | null;\n onSelectWorkspace: (workspaceId: string) => void;\n onCreateWorkspace?: () => void;\n loading?: boolean;\n width?: number;\n}\n\nconst WorkspaceSelectorPanel: React.FC<WorkspaceSelectorPanelProps> = ({\n open,\n anchorEl,\n onClose,\n workspaces,\n selectedWorkspaceId,\n onSelectWorkspace,\n onCreateWorkspace,\n loading = false,\n width = 350,\n}) => {\n const [searchTerm, setSearchTerm] = useState('');\n\n // Reset search when panel opens\n React.useEffect(() => {\n if (open) {\n setSearchTerm('');\n }\n }, [open]);\n\n const filteredWorkspaces = workspaces.filter((w) =>\n w.name.toLowerCase().includes(searchTerm.toLowerCase())\n );\n\n const handleCreateClick = () => {\n onClose();\n if (onCreateWorkspace) {\n onCreateWorkspace();\n }\n };\n\n const handleSelect = (workspaceId: string) => {\n onSelectWorkspace(workspaceId);\n onClose();\n };\n\n return (\n <Menu\n open={open}\n anchorEl={anchorEl}\n onClose={onClose}\n anchorOrigin={{ vertical: 'bottom', horizontal: 'left' }}\n transformOrigin={{ vertical: 'top', horizontal: 'left' }}\n PaperProps={{\n sx: {\n width: width,\n maxHeight: 600,\n mt: 1,\n borderRadius: 2,\n },\n }}\n >\n <Box>\n {/* Search box */}\n <Box sx={{ px: 2, pt: 2, pb: 1.5 }}>\n <TextField\n fullWidth\n size=\"small\"\n placeholder=\"Search workspaces...\"\n value={searchTerm}\n onChange={(e) => setSearchTerm(e.target.value)}\n InputProps={{\n startAdornment: (\n <InputAdornment position=\"start\">\n <SearchIcon fontSize=\"small\" />\n </InputAdornment>\n ),\n }}\n />\n </Box>\n\n {/* Workspace list */}\n <Box sx={{ maxHeight: 400, overflowY: 'auto' }}>\n {loading ? (\n <Box sx={{ p: 2, textAlign: 'center' }}>\n <Typography variant=\"body2\" color=\"text.secondary\">\n Loading...\n </Typography>\n </Box>\n ) : filteredWorkspaces.length === 0 ? (\n <Box sx={{ p: 2, textAlign: 'center' }}>\n <Typography variant=\"body2\" color=\"text.secondary\">\n No workspaces found\n </Typography>\n </Box>\n ) : (\n <List dense>\n {filteredWorkspaces.map((workspace) => (\n <ListItem\n key={workspace.id}\n onClick={() => handleSelect(workspace.id)}\n sx={{\n py: 0.5,\n cursor: 'pointer',\n bgcolor:\n workspace.id === selectedWorkspaceId\n ? 'action.selected'\n : 'transparent',\n '&:hover': {\n bgcolor: 'action.hover',\n },\n }}\n >\n <ListItemAvatar>\n <Avatar\n sx={{ width: 32, height: 32, bgcolor: 'secondary.main' }}\n >\n {workspace.name.charAt(0)}\n </Avatar>\n </ListItemAvatar>\n <ListItemText\n primary={\n <Box sx={{ display: 'flex', alignItems: 'center', gap: 1 }}>\n <Typography variant=\"body2\" fontWeight={500}>\n {workspace.name}\n </Typography>\n {workspace.id === selectedWorkspaceId && (\n <CheckIcon fontSize=\"small\" color=\"primary\" />\n )}\n </Box>\n }\n secondary={workspace.description}\n />\n </ListItem>\n ))}\n </List>\n )}\n </Box>\n\n {/* Footer actions */}\n <Box\n sx={{\n paddingTop: 2,\n paddingLeft: 2,\n paddingRight: 2,\n borderTop: 1,\n borderColor: 'divider',\n }}\n >\n <Button\n fullWidth\n variant=\"text\"\n startIcon={<AddIcon />}\n onClick={handleCreateClick}\n sx={{\n textTransform: 'none',\n fontWeight: 500,\n justifyContent: 'flex-start',\n color: 'primary.main',\n py: 1,\n px: 1.5,\n '&:hover': {\n backgroundColor: 'rgba(25, 118, 210, 0.08)',\n },\n }}\n >\n New Workspace\n </Button>\n </Box>\n </Box>\n </Menu>\n );\n};\n\nexport default WorkspaceSelectorButton;\n\n","import React from 'react';\nimport {\n Stepper as MuiStepper,\n Step as MuiStep,\n StepLabel as MuiStepLabel,\n StepContent as MuiStepContent,\n StepButton as MuiStepButton,\n StepperProps as MuiStepperProps,\n StepProps as MuiStepProps,\n StepLabelProps as MuiStepLabelProps,\n StepContentProps as MuiStepContentProps,\n StepButtonProps as MuiStepButtonProps,\n} from '@mui/material';\n\nexport type StepperProps = MuiStepperProps\n\n/**\n * Stepper component - displays progress through a sequence of steps\n *\n * @example\n * ```tsx\n * <Stepper activeStep={activeStep}>\n * <Step>\n * <StepLabel>Step 1</StepLabel>\n * </Step>\n * <Step>\n * <StepLabel>Step 2</StepLabel>\n * </Step>\n * </Stepper>\n * ```\n */\nexport const Stepper: React.FC<StepperProps> = (props) => {\n return <MuiStepper {...props} />;\n};\n\nexport type StepProps = MuiStepProps\n\n/**\n * Step component - represents a single step in a Stepper\n */\nexport const Step: React.FC<StepProps> = (props) => {\n return <MuiStep {...props} />;\n};\n\nexport type StepLabelProps = MuiStepLabelProps\n\n/**\n * StepLabel component - label for a Step\n */\nexport const StepLabel: React.FC<StepLabelProps> = (props) => {\n return <MuiStepLabel {...props} />;\n};\n\nexport type StepContentProps = MuiStepContentProps\n\n/**\n * StepContent component - optional content that appears below a StepLabel\n */\nexport const StepContent: React.FC<StepContentProps> = (props) => {\n return <MuiStepContent {...props} />;\n};\n\nexport type StepButtonProps = MuiStepButtonProps\n\n/**\n * StepButton component - makes a Step clickable\n */\nexport const StepButton: React.FC<StepButtonProps> = (props) => {\n return <MuiStepButton {...props} />;\n};\n\nexport default Stepper;\n\n","import React from 'react';\nimport MuiBadge, { BadgeProps as MuiBadgeProps } from '@mui/material/Badge';\nimport { styled } from '@mui/material/styles';\nimport { colors } from '../../theme';\n\nexport type BadgeVariant = 'default' | 'primary' | 'success' | 'error';\n\nexport interface BadgeProps extends Omit<MuiBadgeProps, 'color' | 'variant'> {\n variant?: BadgeVariant;\n children?: React.ReactNode;\n}\n\nconst getBadgeColor = (variant: BadgeVariant) => {\n switch (variant) {\n case 'primary':\n return colors.primary.main;\n case 'success':\n return colors.success.main;\n case 'error':\n return colors.error.main;\n default:\n return colors.grey[400];\n }\n};\n\nconst StyledBadge = styled(MuiBadge, {\n shouldForwardProp: (prop) => prop !== 'badgeVariant',\n})<{ badgeVariant?: BadgeVariant }>(({ badgeVariant = 'default' }) => ({\n '& .MuiBadge-badge': {\n backgroundColor: getBadgeColor(badgeVariant),\n color: '#FFFFFF',\n },\n}));\n\nexport const Badge: React.FC<BadgeProps> = ({\n variant = 'default',\n children,\n badgeContent,\n ...props\n}) => {\n return (\n <StyledBadge badgeVariant={variant} badgeContent={badgeContent} {...props}>\n {children}\n </StyledBadge>\n );\n};\n\n","import React from 'react';\nimport MuiChip, { ChipProps as MuiChipProps } from '@mui/material/Chip';\nimport { styled } from '@mui/material/styles';\nimport { colors } from '../../theme';\n\nexport type ChipVariant = 'default' | 'active';\n\nexport interface ChipProps extends Omit<MuiChipProps, 'color' | 'variant'> {\n variant?: ChipVariant;\n}\n\nconst StyledDefaultChip = styled(MuiChip)({\n backgroundColor: colors.grey[100],\n color: colors.text.primary,\n '&:hover': {\n backgroundColor: colors.grey[200],\n },\n});\n\nconst StyledActiveChip = styled(MuiChip)({\n backgroundColor: colors.background.selected,\n color: colors.primary.main,\n '&:hover': {\n backgroundColor: colors.background.selected,\n },\n});\n\nexport const Chip: React.FC<ChipProps> = ({\n variant = 'default',\n ...props\n}) => {\n if (variant === 'active') {\n return <StyledActiveChip {...props} />;\n }\n return <StyledDefaultChip {...props} />;\n};\n\n","import React from 'react';\nimport MuiTooltip, { TooltipProps as MuiTooltipProps } from '@mui/material/Tooltip';\nimport { styled } from '@mui/material/styles';\nimport { colors } from '../../theme';\n\nexport type TooltipProps = MuiTooltipProps\n\nconst StyledTooltip = styled(MuiTooltip)({\n '& .MuiTooltip-tooltip': {\n backgroundColor: colors.grey[800],\n color: '#FFFFFF',\n fontSize: '12px',\n padding: '8px 12px',\n borderRadius: '4px',\n },\n '& .MuiTooltip-arrow': {\n color: colors.grey[800],\n },\n});\n\nexport const Tooltip: React.FC<TooltipProps> = (props) => {\n return <StyledTooltip {...props} />;\n};\n\n","import React from 'react';\nimport {\n LinearProgress,\n CircularProgress,\n styled,\n} from '@mui/material';\nimport { colors } from '../../theme';\n\nexport type ProgressVariant = 'linear' | 'circular';\n\nexport interface ProgressProps {\n variant?: ProgressVariant;\n value?: number;\n size?: number;\n thickness?: number;\n}\n\nconst StyledLinearProgress = styled(LinearProgress)({\n height: 4,\n borderRadius: 2,\n backgroundColor: colors.grey[200],\n '& .MuiLinearProgress-bar': {\n backgroundColor: colors.primary.main,\n borderRadius: 2,\n },\n});\n\nconst StyledCircularProgress = styled(CircularProgress)({\n color: colors.primary.main,\n});\n\nexport const Progress: React.FC<ProgressProps> = ({\n variant = 'linear',\n value,\n size = 40,\n thickness = 4,\n}) => {\n if (variant === 'circular') {\n return <StyledCircularProgress size={size} thickness={thickness} />;\n }\n\n return (\n <StyledLinearProgress\n variant={value !== undefined ? 'determinate' : 'indeterminate'}\n value={value}\n />\n );\n};\n\n","import React from 'react';\nimport MuiTab, { TabProps as MuiTabProps } from '@mui/material/Tab';\nimport { styled } from '@mui/material/styles';\nimport { colors } from '../../theme';\nimport { Badge } from '../feedback/Badge';\n\nexport interface TabProps extends Omit<MuiTabProps, 'icon'> {\n badge?: number | string;\n badgeVariant?: 'default' | 'primary' | 'success' | 'error';\n}\n\nconst StyledTab = styled(MuiTab)({\n textTransform: 'none',\n minHeight: '48px',\n fontWeight: 400,\n color: colors.text.primary,\n borderBottom: '2px solid transparent',\n '&:hover': {\n color: colors.primary.main,\n },\n '&.Mui-selected': {\n fontWeight: 600,\n color: colors.primary.main,\n borderBottom: `2px solid ${colors.primary.main}`,\n },\n});\n\nexport const Tab: React.FC<TabProps> = ({\n badge,\n badgeVariant = 'primary',\n label,\n ...props\n}) => {\n const tabLabel = badge !== undefined ? (\n <Badge variant={badgeVariant} badgeContent={badge}>\n {label}\n </Badge>\n ) : (\n label\n );\n\n return <StyledTab label={tabLabel} {...props} />;\n};\n\n","import React from 'react';\nimport {\n Menu as MuiMenu,\n MenuItem as MuiMenuItem,\n MenuProps as MuiMenuProps,\n ListItemIcon,\n ListItemText,\n Divider,\n} from '@mui/material';\nimport { styled } from '@mui/material/styles';\nimport { colors } from '../../theme';\n\nexport interface MenuProps extends Omit<MuiMenuProps, 'open'> {\n anchorEl?: HTMLElement | null;\n onClose: () => void;\n}\n\nconst StyledMenu = styled(MuiMenu)({\n '& .MuiPaper-root': {\n borderRadius: 8,\n boxShadow: '0px 4px 12px rgba(0, 0, 0, 0.15)',\n minWidth: 200,\n },\n '& .MuiMenuItem-root': {\n padding: '8px 16px',\n '&:hover': {\n backgroundColor: colors.background.selected,\n },\n },\n});\n\nexport const Menu: React.FC<MenuProps> = ({ anchorEl, onClose, children, ...props }) => {\n return (\n <StyledMenu\n anchorEl={anchorEl}\n open={Boolean(anchorEl)}\n onClose={onClose}\n anchorOrigin={{\n vertical: 'bottom',\n horizontal: 'left',\n }}\n transformOrigin={{\n vertical: 'top',\n horizontal: 'left',\n }}\n {...props}\n >\n {children}\n </StyledMenu>\n );\n};\n\nexport interface MenuItemProps {\n icon?: React.ReactNode;\n label: string;\n onClick?: () => void;\n disabled?: boolean;\n divider?: boolean;\n}\n\nexport const MenuItem: React.FC<MenuItemProps> = ({\n icon,\n label,\n onClick,\n disabled = false,\n divider = false,\n}) => {\n return (\n <>\n <MuiMenuItem onClick={onClick} disabled={disabled}>\n {icon && <ListItemIcon>{icon}</ListItemIcon>}\n <ListItemText>{label}</ListItemText>\n </MuiMenuItem>\n {divider && <Divider />}\n </>\n );\n};\n\n","import React from 'react';\nimport MuiPagination, { PaginationProps as MuiPaginationProps } from '@mui/material/Pagination';\nimport { styled } from '@mui/material/styles';\nimport { colors } from '../../theme';\n\nexport interface PaginationProps extends Omit<MuiPaginationProps, 'color'> {\n color?: 'primary' | 'secondary' | 'standard';\n}\n\nconst StyledPagination = styled(MuiPagination)({\n '& .MuiPaginationItem-root': {\n '&.Mui-selected': {\n backgroundColor: colors.primary.main,\n color: colors.primary.contrastText,\n '&:hover': {\n backgroundColor: colors.primary.light,\n },\n },\n '&:hover': {\n backgroundColor: colors.background.selected,\n },\n },\n});\n\nexport const Pagination: React.FC<PaginationProps> = ({ color = 'primary', ...props }) => {\n return <StyledPagination color={color} {...props} />;\n};\n\n","import React, { useState } from 'react';\nimport {\n Box,\n Typography,\n Avatar,\n Menu,\n InputAdornment,\n List,\n ListItemButton,\n ListItemAvatar,\n ListItemText,\n CircularProgress,\n} from '@mui/material';\nimport KeyboardArrowDownIcon from '@mui/icons-material/KeyboardArrowDown';\nimport SearchIcon from '@mui/icons-material/Search';\nimport AddIcon from '@mui/icons-material/Add';\nimport { colors } from '../../theme';\nimport { Link } from '../layout/Link';\nimport { IconButton } from '../buttons/IconButton';\nimport { TextField } from '../inputs/TextField';\nimport { Button } from '../buttons/Button';\n\nexport interface SelectorOption {\n id: string;\n name: string;\n description?: string;\n avatar?: string;\n icon?: React.ReactNode;\n disabled?: boolean;\n}\n\nexport interface SelectorProps {\n options: SelectorOption[];\n selectedId: string | null;\n onSelect: (id: string) => void;\n onCreate?: () => void;\n loading?: boolean;\n placeholder?: string;\n emptyMessage?: string;\n compact?: boolean;\n renderSelected?: (option: SelectorOption) => React.ReactNode;\n width?: number;\n}\n\nexport const Selector: React.FC<SelectorProps> = ({\n options,\n selectedId,\n onSelect,\n onCreate,\n loading = false,\n placeholder = 'Select...',\n emptyMessage = 'No items found',\n compact = false,\n renderSelected,\n width = 350,\n}) => {\n const [anchorEl, setAnchorEl] = useState<HTMLElement | null>(null);\n const [searchTerm, setSearchTerm] = useState('');\n\n const open = Boolean(anchorEl);\n const selectedOption = options.find((opt) => opt.id === selectedId);\n\n const filteredOptions = options.filter((opt) =>\n opt.name.toLowerCase().includes(searchTerm.toLowerCase())\n );\n\n const handleOpen = (event: React.MouseEvent<HTMLElement>) => {\n event.stopPropagation();\n setAnchorEl(event.currentTarget);\n };\n\n const handleClose = () => {\n setAnchorEl(null);\n setSearchTerm('');\n };\n\n const handleSelect = (id: string) => {\n onSelect(id);\n handleClose();\n };\n\n const defaultRenderSelected = (option: SelectorOption) => (\n <Box sx={{ display: 'flex', alignItems: 'center', gap: 1 }}>\n {option.avatar ? (\n <Avatar src={option.avatar} sx={{ width: 20, height: 20 }} />\n ) : option.icon ? (\n option.icon\n ) : (\n <Avatar sx={{ width: 20, height: 20, bgcolor: colors.primary.main, fontSize: '0.7rem' }}>\n {option.name.charAt(0)}\n </Avatar>\n )}\n <Typography variant=\"body2\">{option.name}</Typography>\n </Box>\n );\n\n if (compact) {\n return (\n <>\n <IconButton onClick={handleOpen} size=\"small\">\n {selectedOption ? (\n selectedOption.avatar ? (\n <Avatar src={selectedOption.avatar} sx={{ width: 32, height: 32 }} />\n ) : (\n <Avatar sx={{ width: 32, height: 32, bgcolor: colors.primary.main }}>\n {selectedOption.name.charAt(0)}\n </Avatar>\n )\n ) : (\n <Avatar sx={{ width: 32, height: 32, bgcolor: colors.grey[400] }}>?</Avatar>\n )}\n </IconButton>\n <Menu\n anchorEl={anchorEl}\n open={open}\n onClose={handleClose}\n PaperProps={{\n sx: { width, maxHeight: 600, mt: 1 },\n }}\n >\n {loading ? (\n <Box sx={{ display: 'flex', justifyContent: 'center', p: 2 }}>\n <CircularProgress size={24} />\n </Box>\n ) : (\n <>\n {options.length > 5 && (\n <Box sx={{ p: 1, borderBottom: `1px solid ${colors.grey[200]}` }}>\n <TextField\n size=\"small\"\n fullWidth\n placeholder=\"Search...\"\n value={searchTerm}\n onChange={(e) => setSearchTerm(e.target.value)}\n InputProps={{\n startAdornment: (\n <InputAdornment position=\"start\">\n <SearchIcon fontSize=\"small\" />\n </InputAdornment>\n ),\n }}\n />\n </Box>\n )}\n <List sx={{ maxHeight: 400, overflow: 'auto' }}>\n {filteredOptions.map((option) => (\n <ListItemButton\n key={option.id}\n selected={option.id === selectedId}\n onClick={() => handleSelect(option.id)}\n disabled={option.disabled}\n >\n {option.avatar ? (\n <ListItemAvatar>\n <Avatar src={option.avatar} />\n </ListItemAvatar>\n ) : option.icon ? (\n <ListItemAvatar>{option.icon}</ListItemAvatar>\n ) : (\n <ListItemAvatar>\n <Avatar sx={{ bgcolor: colors.primary.main }}>\n {option.name.charAt(0)}\n </Avatar>\n </ListItemAvatar>\n )}\n <ListItemText primary={option.name} secondary={option.description} />\n </ListItemButton>\n ))}\n {filteredOptions.length === 0 && (\n <Box sx={{ p: 2, textAlign: 'center' }}>\n <Typography variant=\"body2\" color=\"text.secondary\">\n {emptyMessage}\n </Typography>\n </Box>\n )}\n </List>\n {onCreate && (\n <Box sx={{ p: 1, borderTop: `1px solid ${colors.grey[200]}` }}>\n <Button\n fullWidth\n startIcon={<AddIcon />}\n onClick={() => {\n onCreate();\n handleClose();\n }}\n >\n Create New\n </Button>\n </Box>\n )}\n </>\n )}\n </Menu>\n </>\n );\n }\n\n return (\n <>\n <Box sx={{ display: 'flex', alignItems: 'center', gap: 0.5 }}>\n {selectedOption ? (\n renderSelected ? (\n <Link onClick={handleOpen} underline=\"hover\">\n {renderSelected(selectedOption)}\n </Link>\n ) : (\n <Link onClick={handleOpen} underline=\"hover\">\n {defaultRenderSelected(selectedOption)}\n </Link>\n )\n ) : (\n <Typography variant=\"body2\" color=\"text.secondary\">\n {placeholder}\n </Typography>\n )}\n <IconButton onClick={handleOpen} size=\"small\" sx={{ p: 0.2, ml: 0.5 }}>\n <KeyboardArrowDownIcon fontSize=\"small\" />\n </IconButton>\n </Box>\n <Menu\n anchorEl={anchorEl}\n open={open}\n onClose={handleClose}\n PaperProps={{\n sx: { width, maxHeight: 600, mt: 1 },\n }}\n >\n {loading ? (\n <Box sx={{ display: 'flex', justifyContent: 'center', p: 2 }}>\n <CircularProgress size={24} />\n </Box>\n ) : (\n <>\n {options.length > 5 && (\n <Box sx={{ p: 1, borderBottom: `1px solid ${colors.grey[200]}` }}>\n <TextField\n size=\"small\"\n fullWidth\n placeholder=\"Search...\"\n value={searchTerm}\n onChange={(e) => setSearchTerm(e.target.value)}\n InputProps={{\n startAdornment: (\n <InputAdornment position=\"start\">\n <SearchIcon fontSize=\"small\" />\n </InputAdornment>\n ),\n }}\n />\n </Box>\n )}\n <List sx={{ maxHeight: 400, overflow: 'auto' }}>\n {filteredOptions.map((option) => (\n <ListItemButton\n key={option.id}\n selected={option.id === selectedId}\n onClick={() => handleSelect(option.id)}\n disabled={option.disabled}\n >\n {option.avatar ? (\n <ListItemAvatar>\n <Avatar src={option.avatar} />\n </ListItemAvatar>\n ) : option.icon ? (\n <ListItemAvatar>{option.icon}</ListItemAvatar>\n ) : (\n <ListItemAvatar>\n <Avatar sx={{ bgcolor: colors.primary.main }}>\n {option.name.charAt(0)}\n </Avatar>\n </ListItemAvatar>\n )}\n <ListItemText primary={option.name} secondary={option.description} />\n </ListItemButton>\n ))}\n {filteredOptions.length === 0 && (\n <Box sx={{ p: 2, textAlign: 'center' }}>\n <Typography variant=\"body2\" color=\"text.secondary\">\n {emptyMessage}\n </Typography>\n </Box>\n )}\n </List>\n {onCreate && (\n <Box sx={{ p: 1, borderTop: `1px solid ${colors.grey[200]}` }}>\n <Button\n fullWidth\n startIcon={<AddIcon />}\n onClick={() => {\n onCreate();\n handleClose();\n }}\n >\n Create New\n </Button>\n </Box>\n )}\n </>\n )}\n </Menu>\n </>\n );\n};\n\n","import React from 'react';\nimport MuiLink, { LinkProps as MuiLinkProps } from '@mui/material/Link';\nimport { styled } from '@mui/material/styles';\nimport { colors } from '../../theme';\n\nexport interface LinkProps extends MuiLinkProps {\n underline?: 'none' | 'hover' | 'always';\n}\n\nconst StyledLink = styled(MuiLink)({\n color: colors.primary.main,\n '&:hover': {\n color: colors.primary.light,\n },\n});\n\nexport const Link: React.FC<LinkProps> = ({ underline = 'hover', ...props }) => {\n return <StyledLink underline={underline} {...props} />;\n};\n\n","import React, { ReactNode } from 'react';\nimport {\n Dialog as MuiDialog,\n DialogTitle,\n DialogContent,\n DialogActions,\n Button,\n IconButton,\n Box,\n Typography,\n Divider,\n DialogProps as MuiDialogProps,\n CircularProgress,\n} from '@mui/material';\nimport CloseIcon from '@mui/icons-material/Close';\n\nexport interface DialogProps extends Omit<MuiDialogProps, 'title'> {\n open: boolean;\n title: ReactNode;\n onClose: () => void;\n onSubmit?: () => void;\n submitLabel?: string;\n cancelLabel?: string;\n isLoading?: boolean;\n disableSubmit?: boolean;\n showActions?: boolean;\n headerAction?: ReactNode;\n fullWidth?: boolean;\n maxWidth?: 'xs' | 'sm' | 'md' | 'lg' | 'xl';\n children: ReactNode;\n dividers?: boolean;\n confirmBeforeClose?: boolean;\n /**\n * Custom actions to render instead of default actions\n * If provided, showActions is ignored and custom actions are used\n */\n customActions?: ReactNode;\n}\n\nexport const Dialog: React.FC<DialogProps> = ({\n open,\n title,\n onClose,\n onSubmit,\n submitLabel = 'Save',\n cancelLabel = 'Cancel',\n isLoading = false,\n disableSubmit = false,\n showActions = true,\n headerAction,\n fullWidth = true,\n maxWidth = 'md',\n children,\n dividers = true,\n confirmBeforeClose = false,\n customActions,\n ...dialogProps\n}) => {\n const handleCloseAttempt = (e?: React.MouseEvent) => {\n if (e) e.stopPropagation();\n onClose();\n };\n\n return (\n <MuiDialog\n open={open}\n onClose={(_, reason) => {\n if (reason === 'backdropClick' || reason === 'escapeKeyDown' && !confirmBeforeClose) {\n onClose();\n }\n }}\n fullWidth={fullWidth}\n maxWidth={maxWidth}\n {...dialogProps}\n PaperProps={{\n sx: { minHeight: dialogProps.fullScreen ? undefined : 'auto' },\n ...dialogProps.PaperProps\n }}\n >\n <DialogTitle sx={{ display: 'flex', justifyContent: 'space-between', alignItems: 'center', p: 2 }}>\n <Box sx={{ display: 'flex', alignItems: 'center' }}>\n {typeof title === 'string' ? (\n <Typography variant=\"h6\">{title}</Typography>\n ) : (\n title\n )}\n </Box>\n <Box sx={{ display: 'flex', alignItems: 'center' }}>\n {headerAction}\n <IconButton\n edge=\"end\"\n color=\"inherit\"\n onClick={handleCloseAttempt}\n aria-label=\"close\"\n >\n <CloseIcon />\n </IconButton>\n </Box>\n </DialogTitle>\n\n {dividers && <Divider />}\n\n <DialogContent dividers={dividers}>\n {children}\n </DialogContent>\n\n {(showActions || customActions) && (\n <>\n {dividers && <Divider />}\n <DialogActions>\n {customActions || (\n <>\n <Button\n onClick={handleCloseAttempt}\n disabled={isLoading}\n >\n {cancelLabel}\n </Button>\n {onSubmit && (\n <Button\n variant=\"contained\"\n color=\"primary\"\n onClick={onSubmit}\n disabled={disableSubmit || isLoading}\n startIcon={isLoading ? <CircularProgress size={20} /> : undefined}\n >\n {submitLabel}\n </Button>\n )}\n </>\n )}\n </DialogActions>\n </>\n )}\n </MuiDialog>\n );\n};\n\n","import React, { ReactNode } from 'react';\nimport MuiDrawer, { DrawerProps as MuiDrawerProps } from '@mui/material/Drawer';\nimport { styled } from '@mui/material/styles';\nimport { Box, IconButton, Typography, Divider, Tabs, Tab, BoxProps } from '@mui/material';\nimport CloseIcon from '@mui/icons-material/Close';\n\nexport interface DrawerProps extends Omit<MuiDrawerProps, 'title'> {\n /**\n * Width of the drawer when open\n * @default 400 for temporary/temporary variant, 240 for permanent\n */\n width?: number;\n /**\n * Width of the drawer when collapsed (mini variant)\n * @default 72\n */\n miniWidth?: number;\n /**\n * Whether the drawer is in collapsed/mini state\n * @default false\n */\n collapsed?: boolean;\n /**\n * Title to display in the drawer header\n */\n title?: ReactNode;\n /**\n * Custom header content (replaces title if provided)\n */\n header?: ReactNode;\n /**\n * Show close button in header\n * @default true for temporary variant, false for permanent\n */\n showCloseButton?: boolean;\n /**\n * Tab labels for tabbed drawer content\n */\n tabs?: string[];\n /**\n * Active tab index\n */\n activeTab?: number;\n /**\n * Callback when tab changes\n */\n onTabChange?: (index: number) => void;\n /**\n * Footer content (actions, buttons, etc.)\n */\n footer?: ReactNode;\n /**\n * Props for drawer content container\n */\n contentProps?: BoxProps;\n /**\n * Anchor position\n * @default 'right'\n */\n anchor?: 'left' | 'right' | 'top' | 'bottom';\n /**\n * Top offset in pixels (e.g., for header + breadcrumbs)\n * @default 0\n */\n topOffset?: number;\n}\n\nconst StyledDrawer = styled(MuiDrawer, {\n shouldForwardProp: (prop) => prop !== 'width' && prop !== 'miniWidth' && prop !== 'collapsed' && prop !== 'topOffset',\n})<Pick<DrawerProps, 'width' | 'miniWidth' | 'collapsed' | 'topOffset'>>(({ theme, width = 240, miniWidth = 72, collapsed, topOffset = 0 }) => ({\n width: collapsed ? miniWidth : width,\n flexShrink: 0,\n '& .MuiDrawer-paper': {\n width: collapsed ? miniWidth : width,\n boxSizing: 'border-box',\n boxShadow: '0px 2px 10px rgba(0, 0, 0, 0.05)',\n transition: theme.transitions.create(['width', 'top', 'height'], {\n easing: theme.transitions.easing.sharp,\n duration: theme.transitions.duration.enteringScreen,\n }),\n overflow: 'visible', // Let internal content handle scrolling\n display: 'flex',\n flexDirection: 'column',\n top: `${topOffset}px !important`,\n height: topOffset > 0 ? `calc(100% - ${topOffset}px) !important` : '100%',\n zIndex: `${theme.zIndex.modal} !important`, // Use modal zIndex to be above everything except AppBar (which is modal + 1)\n },\n}));\n\n/**\n * Drawer component for navigation drawers and side panels\n * Can be used as a replacement for Dialog for better UX\n * \n * @example\n * ```tsx\n * // Simple drawer\n * <Drawer open={true} variant=\"temporary\" width={400} title=\"Settings\" onClose={handleClose}>\n * <Box p={2}>Content here</Box>\n * </Drawer>\n * \n * // Drawer with tabs\n * <Drawer \n * open={true} \n * variant=\"temporary\" \n * width={600} \n * title=\"Edit Stream\"\n * tabs={['General', 'Rules', 'Settings']}\n * activeTab={activeTab}\n * onTabChange={setActiveTab}\n * onClose={handleClose}\n * >\n * <Box p={2}>{tabContent}</Box>\n * </Drawer>\n * ```\n */\nexport const Drawer: React.FC<DrawerProps> = ({\n width,\n miniWidth = 72,\n collapsed = false,\n title,\n header,\n showCloseButton,\n tabs,\n activeTab = 0,\n onTabChange,\n footer,\n contentProps,\n anchor = 'right',\n variant = 'temporary',\n topOffset = 0,\n children,\n onClose,\n ...props\n}) => {\n // Determine default width based on variant\n const defaultWidth = variant === 'temporary' || variant === 'persistent' ? 400 : 240;\n const finalWidth = width ?? defaultWidth;\n \n // Determine if close button should be shown\n const shouldShowClose = showCloseButton ?? (variant === 'temporary' || variant === 'persistent');\n \n // Determine if we should show header\n const hasHeader = title || header || shouldShowClose || tabs;\n \n return (\n <StyledDrawer\n width={finalWidth}\n miniWidth={miniWidth}\n collapsed={collapsed}\n anchor={anchor}\n variant={variant}\n topOffset={topOffset}\n onClose={onClose}\n ModalProps={{\n ...props.ModalProps,\n style: {\n zIndex: topOffset > 0 ? undefined : undefined, // Let styled component handle zIndex\n },\n }}\n BackdropProps={{\n ...props.BackdropProps,\n style: {\n backgroundColor: 'rgba(0, 0, 0, 0.5)',\n },\n }}\n {...props}\n >\n {hasHeader && (\n <>\n <Box\n sx={{\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n p: 2,\n minHeight: 64,\n borderBottom: 1,\n borderColor: 'divider',\n }}\n >\n {header || (\n <>\n <Box sx={{ flex: 1 }}>\n {typeof title === 'string' ? (\n <Typography variant=\"h6\">{title}</Typography>\n ) : (\n title\n )}\n </Box>\n {shouldShowClose && onClose && (\n <IconButton\n onClick={(e) => {\n e.stopPropagation();\n onClose(e, 'backdropClick');\n }}\n size=\"small\"\n sx={{ ml: 1 }}\n aria-label=\"close\"\n >\n <CloseIcon />\n </IconButton>\n )}\n </>\n )}\n </Box>\n {tabs && tabs.length > 0 && (\n <Tabs\n value={activeTab}\n onChange={(_, newValue) => onTabChange?.(newValue)}\n variant={tabs.length > 4 ? \"scrollable\" : \"standard\"}\n scrollButtons={tabs.length > 4 ? \"auto\" : false}\n sx={{\n borderBottom: 1,\n borderColor: 'divider',\n px: 2,\n '& .MuiTabs-scrollableContainer': {\n overflow: 'auto',\n },\n }}\n >\n {tabs.map((tab, index) => (\n <Tab key={index} label={tab} />\n ))}\n </Tabs>\n )}\n </>\n )}\n \n <Box\n sx={{\n flex: 1,\n overflow: 'auto',\n display: 'flex',\n flexDirection: 'column',\n }}\n {...contentProps}\n >\n {children}\n </Box>\n \n {footer && (\n <>\n <Divider />\n <Box\n sx={{\n p: 2,\n borderTop: 1,\n borderColor: 'divider',\n }}\n >\n {footer}\n </Box>\n </>\n )}\n </StyledDrawer>\n );\n};\n\nexport default Drawer;\n\n","import React from 'react';\nimport MuiCard, { CardProps as MuiCardProps } from '@mui/material/Card';\nimport MuiCardContent, { CardContentProps } from '@mui/material/CardContent';\nimport MuiCardHeader, { CardHeaderProps } from '@mui/material/CardHeader';\nimport MuiCardActions, { CardActionsProps } from '@mui/material/CardActions';\nimport { styled } from '@mui/material/styles';\n\nexport interface CardProps extends MuiCardProps {\n hoverable?: boolean;\n clickable?: boolean;\n}\n\nconst StyledCard = styled(MuiCard, {\n shouldForwardProp: (prop) => prop !== 'hoverable' && prop !== 'clickable',\n})<{ hoverable?: boolean; clickable?: boolean }>(({ hoverable, clickable }) => ({\n borderRadius: 8,\n boxShadow: '0px 1px 3px rgba(0, 0, 0, 0.12)',\n transition: 'all 0.2s ease-in-out',\n ...(clickable && {\n cursor: 'pointer',\n }),\n ...(hoverable && {\n '&:hover': {\n boxShadow: '0px 4px 12px rgba(0, 0, 0, 0.15)',\n transform: 'translateY(-2px)',\n },\n }),\n}));\n\nexport const Card: React.FC<CardProps> = ({ hoverable = false, clickable = false, children, ...props }) => {\n return (\n <StyledCard hoverable={hoverable} clickable={clickable} {...props}>\n {children}\n </StyledCard>\n );\n};\n\nexport const CardContent: React.FC<CardContentProps> = (props) => {\n return <MuiCardContent {...props} />;\n};\n\nexport const CardHeader: React.FC<CardHeaderProps> = (props) => {\n return <MuiCardHeader {...props} />;\n};\n\nexport const CardActions: React.FC<CardActionsProps> = (props) => {\n return <MuiCardActions {...props} />;\n};\n\n","import React from 'react';\nimport {\n List as MuiList,\n ListItem as MuiListItem,\n ListItemText,\n ListItemIcon,\n ListItemSecondaryAction,\n ListProps as MuiListProps,\n ListItemProps as MuiListItemProps,\n} from '@mui/material';\nimport { styled } from '@mui/material/styles';\nimport { colors } from '../../theme';\n\nexport type ListProps = MuiListProps\n\nexport const List: React.FC<ListProps> = (props) => {\n return <MuiList {...props} />;\n};\n\nexport interface ListItemProps extends MuiListItemProps {\n primary?: React.ReactNode;\n secondary?: React.ReactNode;\n icon?: React.ReactNode;\n action?: React.ReactNode;\n hoverable?: boolean;\n}\n\nconst StyledListItem = styled(MuiListItem, {\n shouldForwardProp: (prop) => prop !== 'hoverable',\n})<{ hoverable?: boolean }>(({ hoverable = true }) => ({\n border: `1px solid ${colors.grey[200]}`,\n borderRadius: 8,\n marginBottom: 8,\n ...(hoverable && {\n '&:hover': {\n backgroundColor: colors.grey[50],\n },\n }),\n}));\n\nexport const ListItem: React.FC<ListItemProps> = ({\n primary,\n secondary,\n icon,\n action,\n hoverable = true,\n children,\n ...props\n}) => {\n return (\n <StyledListItem hoverable={hoverable} {...props}>\n {icon && <ListItemIcon>{icon}</ListItemIcon>}\n {(primary || secondary) && (\n <ListItemText\n primary={primary}\n secondary={secondary}\n />\n )}\n {children}\n {action && (action)}\n </StyledListItem>\n );\n};\n\nexport { ListItemText, ListItemIcon, ListItemSecondaryAction };\n\n","import React from 'react';\nimport MuiAvatar, { AvatarProps as MuiAvatarProps } from '@mui/material/Avatar';\nimport { styled } from '@mui/material/styles';\nimport { colors } from '../../theme';\n\nexport interface AvatarProps extends MuiAvatarProps {\n size?: 'small' | 'medium' | 'large' | number;\n}\n\nconst sizeMap = {\n small: 32,\n medium: 40,\n large: 56,\n};\n\nconst StyledAvatar = styled(MuiAvatar, {\n shouldForwardProp: (prop) => prop !== 'avatarSize',\n})<{ avatarSize?: number }>(({ avatarSize = 40 }) => ({\n width: avatarSize,\n height: avatarSize,\n backgroundColor: colors.primary.main,\n color: colors.primary.contrastText,\n fontWeight: 600,\n}));\n\nexport const Avatar: React.FC<AvatarProps> = ({ size = 'medium', ...props }) => {\n const avatarSize = typeof size === 'number' ? size : sizeMap[size];\n\n return <StyledAvatar avatarSize={avatarSize} {...props} />;\n};\n\n","import React from 'react';\nimport {\n Table as MuiTable,\n TableBody,\n TableCell,\n TableContainer,\n TableHead,\n TableRow,\n TableProps as MuiTableProps,\n TableSortLabel,\n} from '@mui/material';\nimport { styled } from '@mui/material/styles';\nimport { colors } from '../../theme';\n\nexport interface TableProps extends MuiTableProps {\n stickyHeader?: boolean;\n}\n\nconst StyledTableContainer = styled(TableContainer)({\n borderRadius: 8,\n border: `1px solid ${colors.grey[200]}`,\n});\n\nconst StyledTableHead = styled(TableHead)({\n backgroundColor: colors.grey[50],\n '& .MuiTableCell-head': {\n fontWeight: 600,\n color: colors.text.primary,\n },\n});\n\n\nexport const Table: React.FC<TableProps> = ({ stickyHeader = false, children, ...props }) => {\n return (\n <StyledTableContainer>\n <MuiTable stickyHeader={stickyHeader} {...props}>\n {children}\n </MuiTable>\n </StyledTableContainer>\n );\n};\n\nexport interface TableHeaderProps {\n columns: Array<{\n id: string;\n label: string;\n sortable?: boolean;\n align?: 'left' | 'center' | 'right';\n }>;\n orderBy?: string;\n order?: 'asc' | 'desc';\n onSort?: (columnId: string) => void;\n}\n\nexport const TableHeader: React.FC<TableHeaderProps> = ({\n columns,\n orderBy,\n order = 'asc',\n onSort,\n}) => {\n return (\n <StyledTableHead>\n <TableRow>\n {columns.map((column) => (\n <TableCell key={column.id} align={column.align || 'left'}>\n {column.sortable && onSort ? (\n <TableSortLabel\n active={orderBy === column.id}\n direction={orderBy === column.id ? order : 'asc'}\n onClick={() => onSort(column.id)}\n >\n {column.label}\n </TableSortLabel>\n ) : (\n column.label\n )}\n </TableCell>\n ))}\n </TableRow>\n </StyledTableHead>\n );\n};\n\nexport { TableBody, TableCell, TableContainer, TableHead, TableRow, TableSortLabel };\n\n","export { Grid2 as Grid } from '@mui/material';\nexport type { Grid2Props as GridProps } from '@mui/material';\n\n","import React from 'react';\nimport MuiBreadcrumbs, { BreadcrumbsProps as MuiBreadcrumbsProps } from '@mui/material/Breadcrumbs';\nimport Link from '@mui/material/Link';\nimport Typography from '@mui/material/Typography';\nimport { styled } from '@mui/material/styles';\nimport { colors } from '../../theme';\n\nexport interface BreadcrumbItem {\n label: string;\n href?: string;\n onClick?: () => void;\n}\n\nexport interface BreadcrumbsProps extends Omit<MuiBreadcrumbsProps, 'children'> {\n items: BreadcrumbItem[];\n}\n\nconst StyledBreadcrumbs = styled(MuiBreadcrumbs)({\n '& .MuiBreadcrumbs-ol': {\n flexWrap: 'nowrap',\n },\n '& .MuiBreadcrumbs-separator': {\n color: colors.text.secondary,\n },\n});\n\nconst StyledLink = styled(Link)({\n color: colors.primary.main,\n textDecoration: 'none',\n '&:hover': {\n textDecoration: 'underline',\n },\n});\n\nexport const Breadcrumbs: React.FC<BreadcrumbsProps> = ({ items, ...props }) => {\n return (\n <StyledBreadcrumbs {...props}>\n {items.map((item, index) => {\n const isLast = index === items.length - 1;\n\n if (isLast || (!item.href && !item.onClick)) {\n return (\n <Typography key={index} color=\"text.primary\">\n {item.label}\n </Typography>\n );\n }\n\n return (\n <StyledLink\n key={index}\n href={item.href}\n onClick={(e) => {\n if (item.onClick) {\n e.preventDefault();\n item.onClick();\n }\n }}\n >\n {item.label}\n </StyledLink>\n );\n })}\n </StyledBreadcrumbs>\n );\n};\n\n","import React from 'react';\nimport {\n Accordion as MuiAccordion,\n AccordionSummary,\n AccordionDetails,\n AccordionProps as MuiAccordionProps,\n} from '@mui/material';\nimport ExpandMoreIcon from '@mui/icons-material/ExpandMore';\nimport { styled } from '@mui/material/styles';\nimport { colors } from '../../theme';\n\nexport interface AccordionProps extends Omit<MuiAccordionProps, 'children'> {\n title: string;\n children: NonNullable<React.ReactNode>;\n defaultExpanded?: boolean;\n}\n\nconst StyledAccordion = styled(MuiAccordion)({\n borderRadius: 8,\n boxShadow: 'none',\n border: `1px solid ${colors.grey[200]}`,\n '&:before': {\n display: 'none',\n },\n '&.Mui-expanded': {\n margin: 0,\n },\n});\n\nconst StyledAccordionSummary = styled(AccordionSummary)({\n backgroundColor: colors.grey[50],\n borderRadius: '8px 8px 0 0',\n '&.Mui-expanded': {\n borderRadius: '8px 8px 0 0',\n },\n '& .MuiAccordionSummary-content': {\n margin: '12px 0',\n },\n});\n\nconst StyledAccordionDetails = styled(AccordionDetails)({\n padding: '16px',\n});\n\nexport const Accordion: React.FC<AccordionProps> = ({\n title,\n children,\n defaultExpanded = false,\n ...props\n}) => {\n return (\n <StyledAccordion defaultExpanded={defaultExpanded} {...props}>\n <StyledAccordionSummary expandIcon={<ExpandMoreIcon />}>\n {title}\n </StyledAccordionSummary>\n <StyledAccordionDetails>{children}</StyledAccordionDetails>\n </StyledAccordion>\n );\n};\n\n","import React from 'react';\nimport MuiPaper, { PaperProps as MuiPaperProps } from '@mui/material/Paper';\nimport { styled } from '@mui/material/styles';\nimport { colors } from '../../theme';\n\nexport interface PaperProps extends MuiPaperProps {\n variant?: 'elevation' | 'outlined';\n}\n\nconst StyledPaper = styled(MuiPaper)({\n borderRadius: 8,\n '&.MuiPaper-elevation': {\n boxShadow: '0px 2px 8px rgba(0, 0, 0, 0.08)',\n },\n '&.MuiPaper-outlined': {\n border: `1px solid ${colors.grey[200]}`,\n boxShadow: 'none',\n },\n});\n\nexport const Paper: React.FC<PaperProps> = ({ variant = 'elevation', ...props }) => {\n return <StyledPaper variant={variant} elevation={variant === 'elevation' ? 1 : 0} {...props} />;\n};\n\n","import React from 'react';\nimport MuiDivider, { DividerProps as MuiDividerProps } from '@mui/material/Divider';\nimport { styled } from '@mui/material/styles';\nimport { colors } from '../../theme';\n\nexport interface DividerProps extends MuiDividerProps {\n variant?: 'fullWidth' | 'inset' | 'middle';\n}\n\nconst StyledDivider = styled(MuiDivider)({\n borderColor: colors.grey[200],\n});\n\nexport const Divider: React.FC<DividerProps> = ({ ...props }) => {\n return <StyledDivider {...props} />;\n};\n\n","export { Stack } from '@mui/material';\nexport type { StackProps } from '@mui/material';\n\n","export { Box } from '@mui/material';\nexport type { BoxProps } from '@mui/material';\n\n","export { Typography } from '@mui/material';\nexport type { TypographyProps } from '@mui/material';\n\n","export { Container } from '@mui/material';\nexport type { ContainerProps } from '@mui/material';\n\n","import React from 'react';\nimport {\n AppBar as MuiAppBar,\n Toolbar,\n AppBarProps as MuiAppBarProps,\n ToolbarProps,\n} from '@mui/material';\nimport { styled } from '@mui/material/styles';\nimport { colors } from '../../theme';\n\nexport interface AppBarProps extends MuiAppBarProps {\n height?: number;\n}\n\nconst StyledAppBar = styled(MuiAppBar, {\n shouldForwardProp: (prop) => prop !== 'appBarHeight',\n})<{ appBarHeight?: number }>(({ appBarHeight = 64 }) => ({\n backgroundColor: colors.background.paper,\n borderBottom: `1px solid ${colors.grey[200]}`,\n boxShadow: 'none',\n height: appBarHeight,\n zIndex: 1300,\n}));\n\nconst StyledToolbar = styled(Toolbar)(({ theme }) => ({\n height: '100%',\n paddingLeft: theme.spacing(2),\n paddingRight: theme.spacing(2),\n gap: theme.spacing(2),\n}));\n\nexport const AppBar: React.FC<AppBarProps> = ({ height = 64, children, ...props }) => {\n return (\n <StyledAppBar position=\"fixed\" appBarHeight={height} {...props}>\n <StyledToolbar>{children}</StyledToolbar>\n </StyledAppBar>\n );\n};\n\nexport { Toolbar };\nexport type { ToolbarProps };\n\n","import React from 'react';\nimport {\n Collapse as MuiCollapse,\n CollapseProps as MuiCollapseProps,\n} from '@mui/material';\n\nexport interface CollapseProps extends MuiCollapseProps {\n /**\n * If `true`, the component will transition in\n */\n in?: boolean;\n /**\n * The content to collapse\n */\n children?: React.ReactNode;\n}\n\n/**\n * Collapse component - provides a collapse animation\n * \n * @example\n * ```tsx\n * <Collapse in={open}>\n * <Box>Collapsible content</Box>\n * </Collapse>\n * ```\n */\nexport const Collapse: React.FC<CollapseProps> = (props) => {\n return <MuiCollapse {...props} />;\n};\n\nexport default Collapse;\n\n","import React from 'react';\nimport MuiAlert, { AlertProps as MuiAlertProps } from '@mui/material/Alert';\nimport { AlertTitle as MuiAlertTitle } from '@mui/material';\nimport MuiSnackbar, { SnackbarProps as MuiSnackbarProps } from '@mui/material/Snackbar';\nimport { styled } from '@mui/material/styles';\n\nexport type AlertSeverity = 'success' | 'error' | 'warning' | 'info';\n\nexport interface AlertProps extends Omit<MuiAlertProps, 'severity'> {\n severity?: AlertSeverity;\n /**\n * Title to display above the alert message\n */\n title?: string;\n}\n\nconst StyledAlert = styled(MuiAlert)({\n borderRadius: 8,\n '&.MuiAlert-filled': {\n borderRadius: 8,\n },\n});\n\nexport const Alert: React.FC<AlertProps> = ({ \n severity = 'info', \n title,\n children,\n ...props \n}) => {\n return (\n <StyledAlert severity={severity} {...props}>\n {title && <MuiAlertTitle>{title}</MuiAlertTitle>}\n {children}\n </StyledAlert>\n );\n};\n\nexport { MuiAlertTitle as AlertTitle };\n\nexport interface SnackbarProps extends Omit<MuiSnackbarProps, 'children'> {\n /**\n * Message to display in the snackbar\n */\n message?: string;\n /**\n * Severity of the alert inside snackbar\n */\n severity?: AlertSeverity;\n /**\n * Title to display in the alert (optional)\n */\n title?: string;\n /**\n * Alert variant\n * @default 'filled'\n */\n variant?: 'filled' | 'standard' | 'outlined';\n /**\n * Callback when snackbar is closed\n */\n onClose?: () => void;\n /**\n * Children to render instead of message (allows custom content)\n * Must be a ReactElement to match MuiSnackbar requirements\n */\n children?: React.ReactElement;\n}\n\nconst StyledSnackbar = styled(MuiSnackbar)({});\n\nexport const Snackbar: React.FC<SnackbarProps> = ({\n message,\n severity = 'info',\n title,\n variant = 'filled',\n onClose,\n children,\n anchorOrigin = { vertical: 'bottom', horizontal: 'center' },\n autoHideDuration = 6000,\n ...props\n}) => {\n const handleClose = (_event?: React.SyntheticEvent | Event, reason?: string) => {\n // Prevent closing on clickaway if we have a custom onClose handler\n if (reason === 'clickaway' && onClose) {\n return;\n }\n onClose?.();\n };\n\n const content = children || (message ? (\n <Alert \n onClose={onClose ? handleClose : undefined} \n severity={severity} \n variant={variant}\n title={title}\n sx={{ width: '100%', borderRadius: 2 }}\n >\n {message}\n </Alert>\n ) : undefined);\n\n if (!content) {\n return null;\n }\n\n // Create a simple transition component that doesn't access scrollTop\n const NoTransition = React.forwardRef<HTMLDivElement, { children: React.ReactElement }>(\n (props, ref) => {\n return React.cloneElement(props.children, {\n ref,\n style: {\n ...props.children.props.style,\n transition: 'opacity 0.3s ease-in-out',\n },\n });\n }\n );\n NoTransition.displayName = 'NoTransition';\n\n return (\n <StyledSnackbar\n anchorOrigin={anchorOrigin}\n autoHideDuration={autoHideDuration}\n onClose={handleClose}\n disableWindowBlurListener\n ClickAwayListenerProps={{\n onClickAway: () => {} // Prevent scroll issues\n }}\n TransitionComponent={NoTransition}\n {...props}\n >\n {content}\n </StyledSnackbar>\n );\n};\n\n","import React from 'react';\nimport { Box, Typography } from '@mui/material';\nimport { colors } from '../../theme';\n\nexport interface EmptyStateProps {\n title?: string;\n description?: string;\n icon?: React.ReactNode;\n action?: React.ReactNode;\n}\n\nexport const EmptyState: React.FC<EmptyStateProps> = ({\n title = 'No items found',\n description,\n icon,\n action,\n}) => {\n return (\n <Box\n sx={{\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'center',\n justifyContent: 'center',\n padding: 6,\n textAlign: 'center',\n minHeight: 200,\n }}\n >\n {icon && (\n <Box\n sx={{\n color: colors.text.secondary,\n marginBottom: 2,\n fontSize: 64,\n }}\n >\n {icon}\n </Box>\n )}\n <Typography variant=\"h6\" sx={{ marginBottom: 1, color: colors.text.primary }}>\n {title}\n </Typography>\n {description && (\n <Typography variant=\"body2\" sx={{ color: colors.text.secondary, marginBottom: 3 }}>\n {description}\n </Typography>\n )}\n {action && <Box>{action}</Box>}\n </Box>\n );\n};\n\n","import React from 'react';\nimport { Box, CircularProgress, Typography } from '@mui/material';\nimport { colors } from '../../theme';\n\nexport interface LoadingProps {\n message?: string;\n size?: number;\n fullScreen?: boolean;\n}\n\nexport const Loading: React.FC<LoadingProps> = ({\n message = 'Loading...',\n size = 40,\n fullScreen = false,\n}) => {\n const content = (\n <Box\n sx={{\n display: 'flex',\n flexDirection: 'column',\n justifyContent: 'center',\n alignItems: 'center',\n gap: 2,\n ...(fullScreen && {\n height: '100vh',\n width: '100vw',\n position: 'fixed',\n top: 0,\n left: 0,\n backgroundColor: colors.background.default,\n zIndex: 9999,\n }),\n ...(!fullScreen && {\n padding: 4,\n }),\n }}\n >\n <CircularProgress size={size} thickness={4} />\n {message && (\n <Typography variant=\"body2\" color=\"text.secondary\">\n {message}\n </Typography>\n )}\n </Box>\n );\n\n return content;\n};\n\n","import React from 'react';\nimport { Box, CircularProgress, Typography } from '@mui/material';\n\nexport interface AppLoadingProps {\n /**\n * Loading message to display\n * @default \"Loading...\"\n */\n message?: string;\n /**\n * Logo source URL or path\n * @default \"/icons/logo.png\"\n */\n logo?: string;\n /**\n * Custom styles\n */\n sx?: any;\n}\n\n/**\n * AppLoading component - Full-screen loading indicator with logo\n * \n * @example\n * ```tsx\n * <AppLoading message=\"Initializing application...\" />\n * ```\n */\nexport const AppLoading: React.FC<AppLoadingProps> = ({\n message = 'Loading...',\n logo = '/icons/logo.png',\n sx = {},\n}) => {\n return (\n <Box\n sx={{\n display: 'flex',\n flexDirection: 'column',\n justifyContent: 'center',\n alignItems: 'center',\n height: '100vh',\n width: '100vw',\n position: 'fixed',\n top: 0,\n left: 0,\n backgroundColor: '#f8f9fa', // Light background\n zIndex: 9999,\n ...sx,\n }}\n >\n {logo && (\n <Box\n component=\"img\"\n src={logo}\n alt=\"Logo\"\n sx={{\n height: 80,\n width: 'auto',\n mb: 4,\n }}\n />\n )}\n\n <CircularProgress size={40} thickness={4} sx={{ mb: 2 }} />\n\n <Typography variant=\"body1\" color=\"text.secondary\">\n {message}\n </Typography>\n </Box>\n );\n};\n\nexport default AppLoading;\n\n","import React from 'react';\nimport {\n CircularProgress as MuiCircularProgress,\n CircularProgressProps as MuiCircularProgressProps,\n} from '@mui/material';\n\nexport interface CircularProgressProps extends MuiCircularProgressProps {\n /**\n * Size of the progress indicator\n * @default 40\n */\n size?: number | string;\n /**\n * Thickness of the progress indicator\n * @default 4\n */\n thickness?: number;\n}\n\n/**\n * CircularProgress component - wrapper around MUI CircularProgress\n * \n * @example\n * ```tsx\n * <CircularProgress size={40} thickness={4} />\n * ```\n */\nexport const CircularProgress: React.FC<CircularProgressProps> = ({\n size = 40,\n thickness = 4,\n ...props\n}) => {\n return <MuiCircularProgress size={size} thickness={thickness} {...props} />;\n};\n\nexport default CircularProgress;\n\n","import React, { useCallback } from 'react';\nimport ReactFlow, {\n Background,\n Controls,\n MiniMap,\n ReactFlowProvider,\n BackgroundVariant,\n ConnectionLineType,\n Node,\n Edge,\n OnNodesChange,\n OnEdgesChange,\n NodeTypes,\n EdgeTypes,\n ReactFlowInstance,\n ReactFlowProps,\n} from 'reactflow';\n// Note: reactflow CSS should be imported in Storybook preview.tsx\n// This ensures styles are available globally\nimport { Box, BoxProps } from '@mui/material';\nimport { useTheme } from '@mui/material/styles';\n\nexport interface FlowEditorProps extends Omit<ReactFlowProps, 'nodes' | 'edges'> {\n /**\n * Nodes to display in the flow\n */\n nodes: Node[];\n /**\n * Edges to display in the flow\n */\n edges: Edge[];\n /**\n * Callback when nodes change\n */\n onNodesChange?: OnNodesChange;\n /**\n * Callback when edges change\n */\n onEdgesChange?: OnEdgesChange;\n /**\n * Custom node types\n */\n nodeTypes?: NodeTypes;\n /**\n * Custom edge types\n */\n edgeTypes?: EdgeTypes;\n /**\n * Height of the flow editor\n * @default '600px'\n */\n height?: string | number;\n /**\n * Show background grid\n * @default true\n */\n showBackground?: boolean;\n /**\n * Background variant\n * @default 'dots'\n */\n backgroundVariant?: BackgroundVariant;\n /**\n * Show controls\n * @default true\n */\n showControls?: boolean;\n /**\n * Show minimap\n * @default false\n */\n showMinimap?: boolean;\n /**\n * Container props\n */\n containerProps?: BoxProps;\n /**\n * Callback when flow instance is initialized\n */\n onInit?: (instance: ReactFlowInstance) => void;\n}\n\n/**\n * FlowEditor component - wrapper around ReactFlow with theme integration\n * \n * @example\n * ```tsx\n * <FlowEditor\n * nodes={nodes}\n * edges={edges}\n * onNodesChange={onNodesChange}\n * onEdgesChange={onEdgesChange}\n * height=\"500px\"\n * showBackground\n * showControls\n * />\n * ```\n */\nexport const FlowEditor: React.FC<FlowEditorProps> = ({\n nodes,\n edges,\n onNodesChange,\n onEdgesChange,\n nodeTypes,\n edgeTypes,\n height = '600px',\n showBackground = true,\n backgroundVariant = BackgroundVariant.Dots,\n showControls = true,\n showMinimap = false,\n containerProps,\n onInit,\n ...reactFlowProps\n}) => {\n const theme = useTheme();\n\n const handleInit = useCallback(\n (instance: ReactFlowInstance) => {\n if (onInit) {\n onInit(instance);\n }\n },\n [onInit]\n );\n\n return (\n <ReactFlowProvider>\n <Box\n sx={{\n width: '100%',\n height: typeof height === 'number' ? `${height}px` : height,\n border: `1px solid ${theme.palette.divider}`,\n borderRadius: theme.shape.borderRadius,\n overflow: 'hidden',\n backgroundColor: theme.palette.background.paper,\n ...containerProps?.sx,\n }}\n {...containerProps}\n >\n <ReactFlow\n nodes={nodes}\n edges={edges}\n onNodesChange={onNodesChange}\n onEdgesChange={onEdgesChange}\n nodeTypes={nodeTypes}\n edgeTypes={edgeTypes}\n onInit={handleInit}\n connectionLineType={ConnectionLineType.SmoothStep}\n defaultEdgeOptions={{\n style: {\n stroke: theme.palette.primary.main,\n strokeWidth: 2,\n },\n }}\n style={{\n backgroundColor: 'transparent',\n }}\n {...reactFlowProps}\n >\n {showBackground && (\n <Background\n variant={backgroundVariant}\n gap={16}\n size={1}\n color={theme.palette.divider}\n />\n )}\n {showControls && <Controls />}\n {showMinimap && (\n <MiniMap\n nodeColor={(node) => {\n const color = node.data?.color || theme.palette.primary.main;\n return typeof color === 'string' ? color : theme.palette.primary.main;\n }}\n nodeStrokeWidth={3}\n nodeBorderRadius={8}\n maskColor={`${theme.palette.background.paper}80`}\n style={{\n backgroundColor: theme.palette.background.paper,\n }}\n />\n )}\n </ReactFlow>\n </Box>\n </ReactFlowProvider>\n );\n};\n\nexport default FlowEditor;\n\n// Re-export commonly used types and components from reactflow\nexport type {\n Node,\n Edge,\n NodeTypes,\n EdgeTypes,\n ReactFlowInstance,\n OnNodesChange,\n OnEdgesChange,\n} from 'reactflow';\nexport { Background, Controls, MiniMap, Panel, BackgroundVariant, ConnectionLineType } from 'reactflow';\n\n","import React, { useCallback, useEffect, useState, useRef } from 'react';\nimport Editor, { Monaco } from '@monaco-editor/react';\nimport { Box, BoxProps, IconButton, Tooltip } from '@mui/material';\nimport FullscreenIcon from '@mui/icons-material/Fullscreen';\nimport FullscreenExitIcon from '@mui/icons-material/FullscreenExit';\nimport ErrorOutlineIcon from '@mui/icons-material/ErrorOutline';\nimport ExpandMoreIcon from '@mui/icons-material/ExpandMore';\nimport ExpandLessIcon from '@mui/icons-material/ExpandLess';\nimport type { editor } from 'monaco-editor';\n\nexport type CodeEditorLanguage =\n | 'typescript'\n | 'javascript'\n | 'json'\n | 'html'\n | 'css'\n | 'python'\n | 'yaml'\n | 'markdown'\n | 'sql'\n | 'xml'\n | 'plaintext';\n\nexport interface CodeEditorProps {\n /**\n * Current value of the editor\n */\n value: string;\n /**\n * Callback when value changes\n */\n onChange: (value: string) => void;\n /**\n * Programming language\n * @default 'typescript'\n */\n language?: CodeEditorLanguage;\n /**\n * Height of the editor\n * @default '400px'\n */\n height?: string | number;\n /**\n * Minimum height\n */\n minHeight?: string | number;\n /**\n * Theme ('light' | 'dark' | 'vs-dark' | 'hc-black')\n * If not provided, will use theme from design system\n */\n theme?: string;\n /**\n * Show line numbers\n * @default 'on'\n */\n lineNumbers?: 'on' | 'off' | 'relative' | 'interval';\n /**\n * Editor options (monaco editor options)\n */\n options?: editor.IStandaloneEditorConstructionOptions;\n /**\n * Callback when editor is mounted\n */\n onMount?: (editor: editor.IStandaloneCodeEditor, monaco: Monaco) => void;\n /**\n * Callback for validation errors\n */\n onValidate?: (markers: editor.IMarker[]) => void;\n /**\n * Ref to editor instance\n */\n editorRef?: React.MutableRefObject<editor.IStandaloneCodeEditor | null>;\n /**\n * Ref to Monaco instance\n */\n monacoRef?: React.MutableRefObject<Monaco | null>;\n /**\n * Callback when fullscreen state changes\n */\n onFullscreenChange?: (isFullscreen: boolean) => void;\n /**\n * Props for the container Box.\n */\n containerProps?: BoxProps;\n /**\n * Additional TypeScript type definitions to add to the editor context.\n * Can be a string with type definitions or an array of type definition strings.\n * Each string will be added as a separate extra lib to Monaco.\n *\n * @example\n * ```tsx\n * <CodeEditor\n * value={code}\n * onChange={setCode}\n * typeDefinitions={`\n * declare interface MyCustomType {\n * id: string;\n * name: string;\n * }\n * `}\n * />\n * ```\n */\n typeDefinitions?: string | string[];\n}\n\n// Monaco Editor will use the local version from node_modules automatically\n// No need to configure loader.config() - @monaco-editor/react handles it\n\n// Configure TypeScript settings when Monaco is loaded\nconst configureTypeScript = (monaco: Monaco) => {\n // Configure TypeScript settings\n monaco.languages.typescript.typescriptDefaults.setCompilerOptions({\n target: monaco.languages.typescript.ScriptTarget.ES2020,\n allowNonTsExtensions: true,\n moduleResolution: monaco.languages.typescript.ModuleResolutionKind.NodeJs,\n module: monaco.languages.typescript.ModuleKind.CommonJS,\n noEmit: false,\n lib: ['es2020', 'dom'],\n noUnusedLocals: false,\n noUnusedParameters: false,\n noImplicitAny: false,\n noImplicitReturns: false,\n noFallthroughCasesInSwitch: false,\n });\n\n monaco.languages.typescript.typescriptDefaults.setDiagnosticsOptions({\n noSemanticValidation: false,\n noSyntaxValidation: false,\n noSuggestionDiagnostics: true,\n diagnosticCodesToIgnore: [\n 6133, // 'x' is declared but its value is never read\n 6196, // 'x' is declared but its value is never read (different variant)\n ],\n });\n};\n\n/**\n * CodeEditor component - wrapper around Monaco Editor matching dynamic-indexer-client implementation\n *\n * @example\n * ```tsx\n * <CodeEditor\n * value={code}\n * onChange={setCode}\n * language=\"typescript\"\n * height=\"500px\"\n * onValidate={(markers) => console.log('Errors:', markers)}\n * />\n * ```\n */\nexport const CodeEditor: React.FC<CodeEditorProps> = ({\n value,\n onChange,\n language = 'typescript',\n height = '400px',\n minHeight,\n theme: themeProp,\n lineNumbers = 'on',\n options,\n onMount,\n onValidate,\n editorRef,\n monacoRef,\n onFullscreenChange,\n containerProps,\n typeDefinitions,\n}) => {\n const [isEditorReady, setIsEditorReady] = useState(false);\n const [validationErrors, setValidationErrors] = useState<editor.IMarker[]>([]);\n const [isFullscreen, setIsFullscreen] = useState(false);\n const [tsCode, setTsCode] = useState<string>(value);\n const [actualHeight, setActualHeight] = useState<string>(\n typeof height === 'number' ? `${height}px` : height\n );\n const [showProblems, setShowProblems] = useState(false);\n const [hasUserToggledProblems, setHasUserToggledProblems] = useState(false);\n\n // Auto-open the Problems panel only until the user manually toggles it.\n useEffect(() => {\n if (hasUserToggledProblems) return; // respect user's choice after first toggle\n if (validationErrors.length > 0) {\n setShowProblems(true);\n } else {\n setShowProblems(false);\n }\n }, [validationErrors, hasUserToggledProblems]);\n\n const internalEditorRef = useRef<editor.IStandaloneCodeEditor | null>(null);\n const internalMonacoRef = useRef<Monaco | null>(null);\n\n // Use provided refs or internal refs\n const finalEditorRef = editorRef || internalEditorRef;\n const finalMonacoRef = monacoRef || internalMonacoRef;\n\n useEffect(() => {\n if (isFullscreen) {\n // Account for header height (64px) + padding (16px) = 80px\n setActualHeight('calc(100vh - 80px)');\n } else {\n setActualHeight(typeof height === 'number' ? `${height}px` : height);\n }\n }, [height, isFullscreen]);\n\n // Toggle fullscreen\n const toggleFullscreen = useCallback(() => {\n const newFullscreenState = !isFullscreen;\n setIsFullscreen(newFullscreenState);\n if (onFullscreenChange) {\n onFullscreenChange(newFullscreenState);\n }\n }, [isFullscreen, onFullscreenChange]);\n\n // Jump to a marker position in the editor\n const gotoMarker = useCallback(\n (marker: editor.IMarker) => {\n const ed = finalEditorRef?.current;\n if (!ed) return;\n const position = { lineNumber: marker.startLineNumber, column: marker.startColumn || 1 };\n try {\n ed.revealPositionInCenter(position);\n ed.setPosition(position);\n ed.focus();\n } catch (e) {\n console.error('CodeEditor: Failed to navigate to marker', e);\n }\n },\n [finalEditorRef]\n );\n\n // Handle ESC key for fullscreen exit\n useEffect(() => {\n if (!isFullscreen) return;\n\n function escapeHandler(event: KeyboardEvent) {\n if (event.key === 'Escape') {\n event.preventDefault();\n event.stopPropagation();\n\n setIsFullscreen(false);\n if (onFullscreenChange) {\n onFullscreenChange(false);\n }\n }\n }\n\n window.addEventListener('keydown', escapeHandler, { capture: true });\n\n return () => {\n window.removeEventListener('keydown', escapeHandler, { capture: true });\n };\n }, [isFullscreen, onFullscreenChange]);\n\n const handleEditorDidMount = useCallback(\n (editor: editor.IStandaloneCodeEditor, monaco: Monaco) => {\n console.log('CodeEditor: onMount called', { editor: !!editor, monaco: !!monaco });\n\n try {\n // Configure TypeScript settings when Monaco is loaded\n configureTypeScript(monaco);\n } catch (e) {\n console.error('CodeEditor: Failed to configure TypeScript', e);\n }\n\n if (finalEditorRef) {\n finalEditorRef.current = editor;\n }\n if (finalMonacoRef) {\n finalMonacoRef.current = monaco;\n }\n\n setIsEditorReady(true);\n console.log('CodeEditor: Editor ready');\n\n try {\n // Add ESC key binding directly in editor\n editor.addCommand(monaco.KeyCode.Escape, () => {\n if (isFullscreen) {\n setIsFullscreen(false);\n if (onFullscreenChange) {\n onFullscreenChange(false);\n }\n return true; // Command handled\n }\n return false; // Let default behavior work when not fullscreen\n });\n\n // Add validation callback\n editor.onDidChangeModelDecorations(() => {\n const model = editor.getModel();\n if (model && onValidate) {\n const markers = monaco.editor.getModelMarkers({ resource: model.uri });\n onValidate(markers);\n setValidationErrors(markers);\n }\n });\n\n // Also check initial markers\n const model = editor.getModel();\n if (model && onValidate) {\n const markers = monaco.editor.getModelMarkers({ resource: model.uri });\n onValidate(markers);\n setValidationErrors(markers);\n }\n } catch (e) {\n console.error('CodeEditor: Error setting up editor callbacks', e);\n }\n\n // Call custom onMount if provided\n if (onMount) {\n try {\n onMount(editor, monaco);\n } catch (e) {\n console.error('CodeEditor: Error in custom onMount', e);\n }\n }\n },\n [isFullscreen, onFullscreenChange, onValidate, onMount, finalEditorRef, finalMonacoRef]\n );\n\n // Add custom type definitions when Monaco is ready and typeDefinitions change\n useEffect(() => {\n if (!isEditorReady || !finalMonacoRef?.current || !typeDefinitions) return;\n\n const monaco = finalMonacoRef.current;\n const definitions = Array.isArray(typeDefinitions) ? typeDefinitions : [typeDefinitions];\n const uris: string[] = [];\n\n try {\n // Add each type definition as a separate extra lib\n definitions.forEach((def: string, index: number) => {\n if (def && def.trim()) {\n const uri = `ts:filename/custom-types-${index}.d.ts`;\n uris.push(uri);\n monaco.languages.typescript.typescriptDefaults.addExtraLib(def, uri);\n }\n });\n } catch (error) {\n console.error('CodeEditor: Error adding type definitions:', error);\n }\n\n // Note: Monaco doesn't have a direct removeExtraLib method\n // The definitions will be replaced when the component updates with new definitions\n // This is acceptable as extra libs are additive and don't cause conflicts\n }, [isEditorReady, finalMonacoRef, typeDefinitions]);\n\n const handleCodeChange = (newValue: string | undefined) => {\n const valueStr = newValue || '';\n setTsCode(valueStr);\n onChange(valueStr);\n };\n\n // Sync external value prop with internal state\n useEffect(() => {\n if (value !== tsCode) {\n setTsCode(value);\n if (isEditorReady && finalEditorRef?.current) {\n const editor = finalEditorRef.current;\n const currentValue = editor.getValue();\n if (currentValue !== value) {\n editor.setValue(value);\n }\n }\n }\n }, [value, tsCode, isEditorReady, finalEditorRef]);\n\n const editorMinHeight = minHeight\n ? typeof minHeight === 'number'\n ? `${minHeight}px`\n : minHeight\n : '400px';\n\n const defaultOptions: editor.IStandaloneEditorConstructionOptions = {\n lineNumbers,\n minimap: { enabled: false },\n readOnly: false,\n wordWrap: 'on',\n fontSize: 14,\n fontFamily: 'Monaco, Menlo, \"Ubuntu Mono\", Consolas, \"source-code-pro\", monospace',\n automaticLayout: true,\n scrollBeyondLastLine: false,\n theme: themeProp || 'vs',\n ...options,\n };\n\n return (\n <Box\n sx={{\n display: 'flex',\n flexDirection: 'column',\n height: isFullscreen ? '100vh' : '100%',\n minHeight: isFullscreen ? '100vh' : editorMinHeight,\n position: isFullscreen ? 'fixed' : 'relative',\n top: isFullscreen ? 0 : 'auto',\n left: isFullscreen ? 0 : 'auto',\n right: isFullscreen ? 0 : 'auto',\n bottom: isFullscreen ? 0 : 'auto',\n zIndex: isFullscreen ? 9999 : 'auto',\n bgcolor: 'background.paper',\n pt: isFullscreen ? '80px' : 0, // Add padding top in fullscreen to account for header (64px) + spacing (16px)\n px: isFullscreen ? 2 : 0,\n pb: isFullscreen ? 2 : 0,\n overflow: isFullscreen ? 'hidden' : 'visible',\n }}\n >\n <Box\n sx={{\n flex: 1,\n border: 1,\n borderColor: validationErrors.length > 0 ? 'error.main' : 'divider',\n borderRadius: 1,\n minHeight: editorMinHeight,\n overflow: 'hidden',\n position: 'relative',\n display: 'flex',\n flexDirection: 'column',\n }}\n {...containerProps}\n >\n <Tooltip title={isFullscreen ? 'Exit Fullscreen' : 'Fullscreen'}>\n <IconButton\n onClick={toggleFullscreen}\n size=\"small\"\n sx={{\n position: isFullscreen ? 'fixed' : 'absolute',\n top: isFullscreen ? 72 : 8, // Position below header in fullscreen mode (header is ~64px)\n right: isFullscreen ? 16 : 8,\n zIndex: 10000, // Ensure it's above other elements\n bgcolor: 'rgba(255, 255, 255, 0.7)',\n '&:hover': {\n bgcolor: 'rgba(255, 255, 255, 0.9)',\n },\n boxShadow: 1,\n }}\n >\n {isFullscreen ? (\n <FullscreenExitIcon fontSize=\"small\" />\n ) : (\n <FullscreenIcon fontSize=\"small\" />\n )}\n </IconButton>\n </Tooltip>\n\n <Box\n sx={{\n flex: 1,\n display: 'flex',\n flexDirection: 'column',\n overflow: 'hidden',\n minHeight: editorMinHeight,\n position: 'relative',\n height: isFullscreen ? '100%' : actualHeight,\n }}\n >\n <Editor\n height=\"100%\"\n defaultLanguage={language}\n defaultValue={value}\n value={tsCode}\n onChange={handleCodeChange}\n onMount={handleEditorDidMount}\n theme={themeProp || 'vs'}\n options={defaultOptions}\n loading={\n <Box sx={{ p: 2, textAlign: 'center' }}>\n Loading Monaco Editor...\n </Box>\n }\n beforeMount={(monaco) => {\n console.log('CodeEditor: beforeMount called', { monaco: !!monaco });\n }}\n />\n </Box>\n\n {/* Problems panel at the bottom (Monaco-style) */}\n {validationErrors.length > 0 && (\n <Box\n sx={{\n borderTop: 1,\n borderColor: 'divider',\n bgcolor: 'background.default',\n display: 'flex',\n flexDirection: 'column',\n maxHeight: showProblems ? 180 : 40,\n minHeight: 40,\n transition: 'max-height 0.2s ease',\n }}\n >\n {/* Panel header */}\n <Box\n sx={{\n display: 'flex',\n alignItems: 'center',\n px: 1,\n py: 0.5,\n gap: 1,\n borderBottom: showProblems ? '1px solid' : 'none',\n borderColor: 'divider',\n fontSize: '0.875rem',\n color: 'text.secondary',\n }}\n >\n <ErrorOutlineIcon color=\"error\" fontSize=\"small\" />\n <Box sx={{ fontWeight: 600, color: 'text.primary' }}>Problems</Box>\n <Box sx={{ ml: 1 }}>\n {validationErrors.length} error{validationErrors.length > 1 ? 's' : ''}\n </Box>\n <Box sx={{ flex: 1 }} />\n <IconButton\n size=\"small\"\n aria-label=\"Toggle problems panel\"\n onClick={() => {\n setHasUserToggledProblems(true);\n setShowProblems((s) => !s);\n }}\n >\n {showProblems ? <ExpandMoreIcon fontSize=\"small\" /> : <ExpandLessIcon fontSize=\"small\" />}\n </IconButton>\n </Box>\n {/* Problems list */}\n {showProblems && (\n <Box sx={{ overflow: 'auto' }}>\n {validationErrors.map((error, index) => (\n <Box\n key={`${error.startLineNumber}-${error.startColumn}-${index}`}\n onClick={() => gotoMarker(error)}\n sx={{\n display: 'flex',\n alignItems: 'center',\n px: 1.5,\n py: 0.75,\n gap: 1,\n cursor: 'pointer',\n '&:hover': { bgcolor: 'action.hover' },\n borderBottom: '1px dashed',\n borderColor: 'divider',\n fontSize: '0.85rem',\n }}\n >\n <ErrorOutlineIcon color=\"error\" sx={{ fontSize: 18 }} />\n <Box sx={{ color: 'text.secondary', width: 64 }}>Line {error.startLineNumber}</Box>\n <Box sx={{ color: 'text.primary', flex: 1, minWidth: 0 }}>\n {error.message}\n </Box>\n </Box>\n ))}\n </Box>\n )}\n </Box>\n )}\n </Box>\n </Box>\n );\n};\n\nexport default CodeEditor;\n"],"mappings":"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","names":["Avatar","Chip","CircularProgress","Divider","Drawer","Link","List","ListItem","Menu","MenuItem","RadioGroup","Tooltip","import_styles","MuiButton","import_styles","import_jsx_runtime","MuiIconButton","import_jsx_runtime","MuiLoadingButton","import_jsx_runtime","MuiButtonGroup","import_styles","import_jsx_runtime","MuiTextField","import_jsx_runtime","InputAdornment","SearchIcon","import_material","import_material","import_styles","import_jsx_runtime","import_material","import_styles","import_jsx_runtime","MuiToggleButton","MuiToggleButtonGroup","import_styles","import_jsx_runtime","MuiSwitch","theme","import_styles","import_jsx_runtime","MuiCheckbox","FormControlLabel","import_styles","import_FormControlLabel","import_jsx_runtime","MuiRadio","FormControlLabel","import_material","import_material","import_jsx_runtime","import_jsx_runtime","import_material","import_Search","import_jsx_runtime","KeyboardArrowDownIcon","PersonAddAltIcon","SettingsIcon","SearchIcon","UnarchiveIcon","ArchiveIcon","CheckIcon","AddIcon","import_react","import_material","import_KeyboardArrowDown","import_Search","import_Add","import_Check","import_jsx_runtime","KeyboardArrowDownIcon","React","SearchIcon","CheckIcon","AddIcon","import_material","import_jsx_runtime","MuiStepper","MuiStep","MuiStepLabel","MuiStepContent","MuiStepButton","import_styles","import_jsx_runtime","MuiBadge","import_styles","import_jsx_runtime","MuiChip","Chip","import_styles","import_jsx_runtime","MuiTooltip","Tooltip","import_material","import_jsx_runtime","import_styles","import_jsx_runtime","MuiTab","import_material","import_styles","import_jsx_runtime","MuiMenu","Menu","MenuItem","MuiMenuItem","import_styles","import_jsx_runtime","MuiPagination","import_react","import_material","import_KeyboardArrowDown","import_Search","import_Add","import_styles","import_jsx_runtime","MuiLink","Link","import_jsx_runtime","SearchIcon","AddIcon","Link","KeyboardArrowDownIcon","import_material","import_jsx_runtime","MuiDialog","CloseIcon","import_styles","import_material","import_Close","import_jsx_runtime","StyledDrawer","MuiDrawer","theme","Drawer","CloseIcon","import_styles","import_jsx_runtime","MuiCard","MuiCardContent","MuiCardHeader","MuiCardActions","import_material","import_styles","import_jsx_runtime","List","MuiList","MuiListItem","ListItem","import_styles","import_jsx_runtime","MuiAvatar","Avatar","import_material","import_styles","import_jsx_runtime","MuiTable","import_material","import_Link","import_styles","import_jsx_runtime","MuiBreadcrumbs","StyledLink","Link","Typography","import_material","import_styles","import_jsx_runtime","MuiAccordion","ExpandMoreIcon","import_styles","import_jsx_runtime","MuiPaper","import_styles","import_jsx_runtime","MuiDivider","Divider","import_material","import_material","import_material","import_material","import_material","import_styles","import_jsx_runtime","MuiAppBar","theme","import_material","import_jsx_runtime","MuiCollapse","import_react","import_material","import_styles","import_jsx_runtime","MuiAlert","MuiAlertTitle","MuiSnackbar","React","props","import_material","import_jsx_runtime","import_material","import_jsx_runtime","import_material","import_jsx_runtime","import_material","import_jsx_runtime","CircularProgress","MuiCircularProgress","import_react","import_material","import_styles","import_reactflow","import_jsx_runtime","theme","ReactFlow","import_react","import_material","import_ExpandMore","import_jsx_runtime","model","FullscreenExitIcon","FullscreenIcon","Editor","ErrorOutlineIcon","ExpandMoreIcon","ExpandLessIcon","import_reactflow"]}