bluconndesign 1.0.0
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/README.md +95 -0
- package/dist/index.d.mts +2178 -0
- package/dist/index.d.ts +2178 -0
- package/dist/index.js +12390 -0
- package/dist/index.js.map +1 -0
- package/dist/index.mjs +12277 -0
- package/dist/index.mjs.map +1 -0
- package/dist/theme/index.d.mts +102 -0
- package/dist/theme/index.d.ts +102 -0
- package/dist/theme/index.js +2262 -0
- package/dist/theme/index.js.map +1 -0
- package/dist/theme/index.mjs +2139 -0
- package/dist/theme/index.mjs.map +1 -0
- package/dist/theme-BTyiMh3f.d.mts +310 -0
- package/dist/theme-BTyiMh3f.d.ts +310 -0
- package/package.json +64 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/theme/theme.ts","../src/theme/types.ts","../src/tokens/tokens.json","../src/theme/colour.ts","../src/theme/typography.ts","../src/theme/components/button.ts","../src/theme/components/buttonGroup.ts","../src/theme/components/card.ts","../src/theme/components/progress.ts","../src/theme/components/chip.ts","../src/theme/components/textField.ts","../src/theme/components/select.ts","../src/theme/components/menu.ts","../src/theme/components/autocomplete.ts","../src/theme/components/avatar.ts","../src/theme/components/switch.ts","../src/theme/components/checkbox.ts","../src/theme/components/radio.ts","../src/theme/components/datePicker.ts","../src/theme/components/table.ts","../src/theme/components/sectionHeader.ts","../src/theme/components/modal.ts","../src/theme/components/index.ts","../src/components/Button/Button.tsx","../src/components/ButtonGroup/ButtonGroup.tsx","../src/components/Checkbox/Checkbox.tsx","../src/components/Toggle/Toggle.tsx","../src/components/Tag/Tag.tsx","../src/components/Radio/Radio.tsx","../src/components/Input/Input.tsx","../src/components/TextArea/TextArea.tsx","../src/components/Badge/Badge.tsx","../src/utils/colorMapping.ts","../src/components/Avatar/Avatar.tsx","../src/theme/icons.ts","../src/components/Tooltip/Tooltip.tsx","../src/components/Progress/Progress.tsx","../src/components/Box/Box.tsx","../src/components/Container/Container.tsx","../src/components/Grid/Grid.tsx","../src/components/Stack/Stack.tsx","../src/components/Typography/Typography.tsx","../src/components/Divider/Divider.tsx","../src/components/AppBar/AppBar.tsx","../src/components/Breadcrumbs/Breadcrumbs.tsx","../src/components/Drawer/Drawer.tsx","../src/components/Link/Link.tsx","../src/components/SectionFooter/SectionFooter.tsx","../src/components/ToggleButton/ToggleButton.tsx","../src/components/Menu/Menu.tsx","../src/components/Menu/MenuItem.tsx","../src/components/Tabs/Tabs.tsx","../src/components/Tabs/Tab.tsx","../src/components/Tabs/VerticalTabs.tsx","../src/components/Tabs/HorizontalTabs.tsx","../src/components/Toolbar/Toolbar.tsx","../src/components/List/List.tsx","../src/components/Table/Table.tsx","../src/components/Paper/Paper.tsx","../src/components/Accordion/Accordion.tsx","../src/components/Card/Card.tsx","../src/components/Autocomplete/Autocomplete.tsx","../src/components/Select/Select.tsx","../src/components/FormControl/FormControl.tsx","../src/components/IconButton/IconButton.tsx","../src/components/Fab/Fab.tsx","../src/components/Alert/Alert.tsx","../src/components/Dialog/Dialog.tsx","../src/components/EmptyState/EmptyState.tsx","../src/components/Modal/Modal.tsx","../src/components/Modal/ModalActions.tsx","../src/components/Modal/ModalHeader.tsx","../src/components/Modal/ModalExtras.tsx","../src/components/Stepper/Stepper.tsx","../src/components/DatePicker/DatePicker.tsx","../src/components/DataGrid/DataGrid.tsx","../src/components/Pagination/Pagination.tsx","../src/components/CommandMenu/CommandMenu.tsx","../src/components/SlideMenu/SlideMenu.tsx","../src/components/ApplicationNavigation/ApplicationNavigation.tsx","../src/components/ApplicationNavigation/ApplicationNavigationSidebar.tsx","../src/components/ApplicationNavigation/ApplicationNavigationTopBar.tsx","../src/components/FileUpload/FileUpload.tsx","../src/components/SectionHeader/SectionHeader.tsx","../src/components/LoadingIndicator/LoadingIndicator.tsx","../node_modules/@mui/styled-engine/esm/index.js","../src/theme/components/loadingIndicator.ts","../src/components/PieChart/PieChart.tsx","../src/components/ActivityGauge/ActivityGauge.tsx","../src/components/MetricItem/MetricItem.tsx","../src/components/Message/Message.tsx","../src/index.ts"],"sourcesContent":["import { createTheme, ThemeOptions } from '@mui/material/styles';\r\nimport './types';\r\nimport { palette } from './colour';\r\nimport { typography } from './typography';\r\nimport { components } from './components';\r\nimport rawTokens from '../tokens/tokens.json';\r\n\r\nconst colorTokens = rawTokens.color;\r\nconst typographyTokens = rawTokens.typography;\r\nconst borderRadiusTokens = rawTokens.borderRadius;\r\nconst shadowTokens = rawTokens.shadows;\r\n\r\nconst themeOptions: ThemeOptions = {\r\n palette,\r\n typography,\r\n spacing: 8, // Base unit for theme.spacing() function\r\n shape: {\r\n borderRadiusSm: borderRadiusTokens.sm,\r\n borderRadiusMd: borderRadiusTokens.md,\r\n borderRadiusLg: borderRadiusTokens.lg,\r\n borderRadiusXl: borderRadiusTokens.xl,\r\n },\r\n components,\r\n};\r\n\r\nexport const theme = createTheme(themeOptions);\r\n\r\n\r\nexport const tokens = {\r\n color: colorTokens,\r\n typography: typographyTokens,\r\n borderRadius: borderRadiusTokens,\r\n shadows: shadowTokens,\r\n};\r\n","import tokens from '../tokens/tokens.json';\r\nimport '@mui/material/styles';\r\nimport type {} from '@mui/x-date-pickers/themeAugmentation';\r\nimport type {} from '@mui/x-data-grid/themeAugmentation';\r\n\r\ndeclare module '@mui/material/styles' {\r\n interface Shape {\r\n borderRadiusSm: number | string;\r\n borderRadiusMd: number | string;\r\n borderRadiusLg: number | string;\r\n borderRadiusXl: number | string;\r\n }\r\n interface ShapeOptions {\r\n borderRadiusSm?: number | string;\r\n borderRadiusMd?: number | string;\r\n borderRadiusLg?: number | string;\r\n borderRadiusXl?: number | string;\r\n }\r\n}\r\n\r\ndeclare module '@mui/material/Chip' {\r\n interface ChipPropsSizeOverrides {\r\n large: true;\r\n }\r\n}\r\n\r\nexport type DesignSystemColor = keyof typeof tokens.color;\r\n","{\r\n \"color\": {\r\n \"primary\": {\r\n \"25\": \"#F2FDF6\",\r\n \"50\": \"#D4F7E1\",\r\n \"100\": \"#B5F2CC\",\r\n \"200\": \"#97EDB8\",\r\n \"300\": \"#78E8A1\",\r\n \"400\": \"#5AE28C\",\r\n \"500\": \"#3BDD77\",\r\n \"600\": \"#1EAB52\",\r\n \"700\": \"#1A9849\",\r\n \"800\": \"#176B34\",\r\n \"900\": \"#134C25\",\r\n \"950\": \"#102D16\"\r\n },\r\n \"base\": {\r\n \"white\": \"#FFFFFF\",\r\n \"black\": \"#000000\",\r\n \"transparent\": \"#FFFFFF 10%\"\r\n },\r\n \"gray\": {\r\n \"25\": \"#FDFDFD\",\r\n \"50\": \"#FAFAFA\",\r\n \"100\": \"#F5F5F5\",\r\n \"200\": \"#E9EAEB\",\r\n \"300\": \"#D5D7DA\",\r\n \"400\": \"#A4A7AE\",\r\n \"500\": \"#717680\",\r\n \"600\": \"#535862\",\r\n \"700\": \"#414651\",\r\n \"800\": \"#252B37\",\r\n \"900\": \"#181D27\",\r\n \"950\": \"#0A0D12\"\r\n },\r\n \"gray-dark\": {\r\n \"25\": \"#FAFAFA\",\r\n \"50\": \"#F7F7F7\",\r\n \"100\": \"#F0F0F1\",\r\n \"200\": \"#ECECED\",\r\n \"300\": \"#CECFD2\",\r\n \"400\": \"#94979C\",\r\n \"500\": \"#85888E\",\r\n \"600\": \"#61656C\",\r\n \"700\": \"#52565D\",\r\n \"800\": \"#3E4248\",\r\n \"900\": \"#24272C\",\r\n \"950\": \"#1A1C1F\"\r\n },\r\n \"error\": {\r\n \"25\": \"#FFFBFA\",\r\n \"50\": \"#FEF3F2\",\r\n \"100\": \"#FEE4E2\",\r\n \"200\": \"#FECDCA\",\r\n \"300\": \"#FDA29B\",\r\n \"400\": \"#F97066\",\r\n \"500\": \"#F04438\",\r\n \"600\": \"#D92D20\",\r\n \"700\": \"#B42318\",\r\n \"800\": \"#912018\",\r\n \"900\": \"#7A271A\",\r\n \"950\": \"#55160C\"\r\n },\r\n \"success\": {\r\n \"25\": \"#F6FEF9\",\r\n \"50\": \"#ECFDF3\",\r\n \"100\": \"#DCFAE6\",\r\n \"200\": \"#ABEFC6\",\r\n \"300\": \"#75E0A7\",\r\n \"400\": \"#47CD89\",\r\n \"500\": \"#17B26A\",\r\n \"600\": \"#079455\",\r\n \"700\": \"#067647\",\r\n \"800\": \"#085D3A\",\r\n \"900\": \"#074D31\",\r\n \"950\": \"#053321\"\r\n },\r\n \"warning\": {\r\n \"25\": \"#FFFCF5\",\r\n \"50\": \"#FFFAEB\",\r\n \"100\": \"#FEF0C7\",\r\n \"200\": \"#FEDF89\",\r\n \"300\": \"#FEC84B\",\r\n \"400\": \"#FDB022\",\r\n \"500\": \"#F79009\",\r\n \"600\": \"#DC6803\",\r\n \"700\": \"#B54708\",\r\n \"800\": \"#93370D\",\r\n \"900\": \"#7A2E0E\",\r\n \"950\": \"#4E1D09\"\r\n },\r\n \"secondary\": {\r\n \"25\": \"#FDFDFD\",\r\n \"50\": \"#F4F4F4\",\r\n \"100\": \"#F1F1F1\",\r\n \"200\": \"#E9EAEE\",\r\n \"300\": \"#D5D7DA\",\r\n \"400\": \"#A4A7AE\",\r\n \"500\": \"#717680\",\r\n \"600\": \"#535862\",\r\n \"700\": \"#414651\",\r\n \"800\": \"#252B37\",\r\n \"900\": \"#181D27\",\r\n \"950\": \"#0A0D12\"\r\n }\r\n },\r\n \"spacing\": {\r\n \"xxs\": \"2px\",\r\n \"xs\": \"4px\",\r\n \"sm\": \"6px\",\r\n \"md\": \"8px\",\r\n \"lg\": \"12px\",\r\n \"xl\": \"16px\",\r\n \"2xl\": \"20px\",\r\n \"3xl\": \"24px\",\r\n \"4xl\": \"32px\",\r\n \"5xl\": \"40px\",\r\n \"6xl\": \"48px\",\r\n \"7xl\": \"64px\",\r\n \"8xl\": \"80px\",\r\n \"9xl\": \"96px\"\r\n },\r\n \"typography\": {\r\n \"fontFamily\": {\r\n \"display\": \"DM Sans, sans-serif\",\r\n \"body\": \"DM Sans, sans-serif\"\r\n },\r\n \"fontWeight\": {\r\n \"regular\": \"400\",\r\n \"medium\": \"500\",\r\n \"semibold\": \"600\",\r\n \"bold\": \"700\"\r\n },\r\n \"fontSize\": {\r\n \"display-2xl\": \"72px\",\r\n \"display-xl\": \"60px\",\r\n \"display-lg\": \"48px\",\r\n \"display-md\": \"36px\",\r\n \"display-sm\": \"30px\",\r\n \"display-xs\": \"24px\",\r\n \"text-xl\": \"20px\",\r\n \"text-lg\": \"18px\",\r\n \"text-md\": \"16px\",\r\n \"text-sm\": \"14px\",\r\n \"text-xs\": \"12px\"\r\n },\r\n \"lineHeight\": {\r\n \"display-2xl\": \"90px\",\r\n \"display-xl\": \"72px\",\r\n \"display-lg\": \"60px\",\r\n \"display-md\": \"44px\",\r\n \"display-sm\": \"38px\",\r\n \"display-xs\": \"32px\",\r\n \"text-xl\": \"30px\",\r\n \"text-lg\": \"28px\",\r\n \"text-md\": \"24px\",\r\n \"text-sm\": \"20px\",\r\n \"text-xs\": \"18px\"\r\n },\r\n \"letterSpacing\": {\r\n \"display-2xl\": \"-2%\",\r\n \"display-xl\": \"-2%\",\r\n \"display-lg\": \"-2%\",\r\n \"display-md\": \"-2%\",\r\n \"display-sm\": \"0\",\r\n \"display-xs\": \"0\",\r\n \"text-xl\": \"0\",\r\n \"text-lg\": \"0\",\r\n \"text-md\": \"0\",\r\n \"text-sm\": \"0\",\r\n \"text-xs\": \"0\"\r\n }\r\n },\r\n \"borderRadius\": {\r\n \"sm\": 6,\r\n \"md\": 8,\r\n \"lg\": 10,\r\n \"xl\": 12,\r\n \"full\": 9999\r\n },\r\n \"shadows\": {\r\n \"xs\": \"0px 1px 2px 0px rgba(10, 13, 18, 0.05)\",\r\n \"sm\": \"0px 1px 2px 0px rgba(10, 13, 18, 0.06), 0px 1px 3px 0px rgba(10, 13, 18, 0.1)\",\r\n \"md\": \"0px 2px 4px -2px rgba(10, 13, 18, 0.06), 0px 4px 8px -2px rgba(10, 13, 18, 0.1)\",\r\n \"lg\": \"0px 4px 6px -2px rgba(10, 13, 18, 0.03), 0px 12px 16px -4px rgba(10, 13, 18, 0.08)\",\r\n \"xl\": \"0px 8px 8px -4px rgba(10, 13, 18, 0.03), 0px 20px 24px -4px rgba(10, 13, 18, 0.08)\",\r\n \"2xl\": \"0px 24px 48px -12px rgba(10, 13, 18, 0.18)\",\r\n \"3xl\": \"0px 32px 64px -12px rgba(10, 13, 18, 0.14)\",\r\n \"skeumorphic-inner\": \"inset 0px -2px 0px 0px rgba(10, 13, 18, 0.05)\",\r\n \"skeumorphic-inner-border\": \"inset 0px 0px 0px 1px rgba(10, 13, 18, 0.06)\"\r\n },\r\n \"effects\": {\r\n \"focusRings\": {\r\n \"focus-ring\": \"#3BDD77\",\r\n \"focus-ring-error\": \"#F04438\"\r\n }\r\n }\r\n}","import { PaletteOptions } from '@mui/material/styles';\r\nimport tokens from '../tokens/tokens.json';\r\n\r\nconst colorTokens = tokens.color;\r\n\r\nexport const palette: PaletteOptions = {\r\n primary: {\r\n main: colorTokens.primary['500'],\r\n light: colorTokens.primary['100'],\r\n dark: colorTokens.primary['900'],\r\n },\r\n secondary: {\r\n main: colorTokens.secondary['500'],\r\n light: colorTokens.secondary['100'],\r\n dark: colorTokens.secondary['900'],\r\n },\r\n error: {\r\n main: colorTokens.error['500'],\r\n light: colorTokens.error['100'],\r\n dark: colorTokens.error['900'],\r\n },\r\n success: {\r\n main: colorTokens.success['500'],\r\n light: colorTokens.success['100'],\r\n dark: colorTokens.success['900'],\r\n },\r\n warning: {\r\n main: colorTokens.warning['500'],\r\n light: colorTokens.warning['100'],\r\n dark: colorTokens.warning['900'],\r\n },\r\n\r\n};\r\n","import { TypographyVariantsOptions } from '@mui/material/styles';\r\nimport tokens from '../tokens/tokens.json';\r\n\r\nconst { fontFamily, fontWeight, fontSize, lineHeight, letterSpacing } = tokens.typography;\r\n\r\nexport const typography: TypographyVariantsOptions = {\r\n fontFamily: fontFamily.body,\r\n h1: {\r\n fontFamily: fontFamily.display,\r\n fontSize: fontSize['display-2xl'],\r\n fontWeight: parseInt(fontWeight.bold),\r\n lineHeight: lineHeight['display-2xl'],\r\n letterSpacing: letterSpacing['display-2xl'],\r\n },\r\n h2: {\r\n fontFamily: fontFamily.display,\r\n fontSize: fontSize['display-xl'],\r\n fontWeight: parseInt(fontWeight.bold),\r\n lineHeight: lineHeight['display-xl'],\r\n letterSpacing: letterSpacing['display-xl'],\r\n },\r\n h3: {\r\n fontFamily: fontFamily.display,\r\n fontSize: fontSize['display-lg'],\r\n fontWeight: parseInt(fontWeight.semibold),\r\n lineHeight: lineHeight['display-lg'],\r\n letterSpacing: letterSpacing['display-lg'],\r\n },\r\n h4: {\r\n fontFamily: fontFamily.display,\r\n fontSize: fontSize['display-md'],\r\n fontWeight: parseInt(fontWeight.semibold),\r\n lineHeight: lineHeight['display-md'],\r\n letterSpacing: letterSpacing['display-md'],\r\n },\r\n h5: {\r\n fontFamily: fontFamily.display,\r\n fontSize: fontSize['display-sm'],\r\n fontWeight: parseInt(fontWeight.medium),\r\n lineHeight: lineHeight['display-sm'],\r\n letterSpacing: letterSpacing['display-sm'],\r\n },\r\n h6: {\r\n fontFamily: fontFamily.display,\r\n fontSize: fontSize['display-xs'],\r\n fontWeight: parseInt(fontWeight.medium),\r\n lineHeight: lineHeight['display-xs'],\r\n letterSpacing: letterSpacing['display-xs'],\r\n },\r\n subtitle1: {\r\n fontFamily: fontFamily.body,\r\n fontSize: fontSize['text-lg'],\r\n fontWeight: parseInt(fontWeight.medium),\r\n lineHeight: lineHeight['text-lg'],\r\n letterSpacing: letterSpacing['text-lg'],\r\n },\r\n subtitle2: {\r\n fontFamily: fontFamily.body,\r\n fontSize: fontSize['text-md'],\r\n fontWeight: parseInt(fontWeight.medium),\r\n lineHeight: lineHeight['text-md'],\r\n letterSpacing: letterSpacing['text-md'],\r\n },\r\n body1: {\r\n fontFamily: fontFamily.body,\r\n fontSize: fontSize['text-md'],\r\n fontWeight: parseInt(fontWeight.regular),\r\n lineHeight: lineHeight['text-md'],\r\n letterSpacing: letterSpacing['text-md'],\r\n },\r\n body2: {\r\n fontFamily: fontFamily.body,\r\n fontSize: fontSize['text-sm'],\r\n fontWeight: parseInt(fontWeight.regular),\r\n lineHeight: lineHeight['text-sm'],\r\n letterSpacing: letterSpacing['text-sm'],\r\n },\r\n caption: {\r\n fontFamily: fontFamily.body,\r\n fontSize: fontSize['text-xs'],\r\n fontWeight: parseInt(fontWeight.regular),\r\n lineHeight: lineHeight['text-xs'],\r\n letterSpacing: letterSpacing['text-xs'],\r\n },\r\n overline: {\r\n fontFamily: fontFamily.body,\r\n fontSize: fontSize['text-xs'],\r\n fontWeight: parseInt(fontWeight.medium),\r\n lineHeight: lineHeight['text-xs'],\r\n letterSpacing: letterSpacing['text-xs'],\r\n textTransform: 'uppercase',\r\n },\r\n};\r\n","import { Components, Theme } from '@mui/material/styles';\r\nimport tokens from '../../tokens/tokens.json';\r\n\r\nconst borderRadiusTokens = tokens.borderRadius;\r\n\r\nexport const buttonOverrides: Components<Omit<Theme, \"palette\" | \"components\">>['MuiButton'] = {\r\n styleOverrides: {\r\n root: {\r\n textTransform: 'none',\r\n borderRadius: borderRadiusTokens.md,\r\n fontWeight: tokens.typography.fontWeight.semibold,\r\n boxShadow: 'none',\r\n transition: 'all 0.2s ease-in-out',\r\n '&:hover': {\r\n boxShadow: 'none',\r\n },\r\n },\r\n // Size variants\r\n sizeSmall: {\r\n padding: '8px 14px',\r\n fontSize: tokens.typography.fontSize['text-sm'],\r\n lineHeight: tokens.typography.lineHeight['text-sm'],\r\n height: '36px',\r\n },\r\n sizeMedium: {\r\n padding: '10px 16px',\r\n fontSize: tokens.typography.fontSize['text-sm'],\r\n lineHeight: tokens.typography.lineHeight['text-sm'],\r\n height: '40px',\r\n },\r\n sizeLarge: {\r\n padding: '10px 18px',\r\n fontSize: tokens.typography.fontSize['text-md'],\r\n lineHeight: tokens.typography.lineHeight['text-md'],\r\n height: '44px',\r\n },\r\n // Contained variant styles\r\n containedPrimary: {\r\n backgroundColor: tokens.color.primary[600],\r\n color: tokens.color.base.white,\r\n '&:hover': {\r\n backgroundColor: tokens.color.primary[700],\r\n },\r\n '&:active': {\r\n backgroundColor: tokens.color.primary[700],\r\n },\r\n '&.Mui-disabled': {\r\n backgroundColor: tokens.color.secondary[100],\r\n color: tokens.color.secondary[400],\r\n },\r\n },\r\n containedSecondary: {\r\n backgroundColor: tokens.color.secondary[600],\r\n color: tokens.color.base.white,\r\n '&:hover': {\r\n backgroundColor: tokens.color.secondary[700],\r\n },\r\n '&:active': {\r\n backgroundColor: tokens.color.secondary[700],\r\n },\r\n '&.Mui-disabled': {\r\n backgroundColor: tokens.color.secondary[100],\r\n color: tokens.color.secondary[400],\r\n },\r\n },\r\n containedError: {\r\n backgroundColor: tokens.color.error[600],\r\n color: tokens.color.base.white,\r\n '&:hover': {\r\n backgroundColor: tokens.color.error[700],\r\n },\r\n '&:active': {\r\n backgroundColor: tokens.color.error[700],\r\n },\r\n '&.Mui-disabled': {\r\n backgroundColor: tokens.color.secondary[100],\r\n color: tokens.color.secondary[400],\r\n },\r\n },\r\n containedWarning: {\r\n backgroundColor: tokens.color.warning[600],\r\n color: tokens.color.base.white,\r\n '&:hover': {\r\n backgroundColor: tokens.color.warning[700],\r\n },\r\n '&:active': {\r\n backgroundColor: tokens.color.warning[700],\r\n },\r\n '&.Mui-disabled': {\r\n backgroundColor: tokens.color.secondary[100],\r\n color: tokens.color.secondary[400],\r\n },\r\n },\r\n containedSuccess: {\r\n backgroundColor: tokens.color.success[600],\r\n color: tokens.color.base.white,\r\n '&:hover': {\r\n backgroundColor: tokens.color.success[700],\r\n },\r\n '&:active': {\r\n backgroundColor: tokens.color.success[700],\r\n },\r\n '&.Mui-disabled': {\r\n backgroundColor: tokens.color.secondary[100],\r\n color: tokens.color.secondary[400],\r\n },\r\n },\r\n // Outlined variant styles\r\n outlinedPrimary: {\r\n backgroundColor: tokens.color.base.white,\r\n color: tokens.color.primary[700],\r\n borderColor: tokens.color.primary[300],\r\n '&:hover': {\r\n backgroundColor: tokens.color.primary[50],\r\n borderColor: tokens.color.primary[300],\r\n },\r\n '&:active': {\r\n backgroundColor: tokens.color.primary[50],\r\n },\r\n '&.Mui-disabled': {\r\n backgroundColor: tokens.color.base.white,\r\n color: tokens.color.secondary[300],\r\n borderColor: tokens.color.secondary[200],\r\n },\r\n },\r\n outlinedSecondary: {\r\n backgroundColor: tokens.color.base.white,\r\n color: tokens.color.secondary[700],\r\n borderColor: tokens.color.secondary[300],\r\n '&:hover': {\r\n backgroundColor: tokens.color.secondary[50],\r\n borderColor: tokens.color.secondary[300],\r\n },\r\n '&:active': {\r\n backgroundColor: tokens.color.secondary[50],\r\n },\r\n '&.Mui-disabled': {\r\n backgroundColor: tokens.color.base.white,\r\n color: tokens.color.secondary[300],\r\n borderColor: tokens.color.secondary[200],\r\n },\r\n },\r\n outlinedError: {\r\n backgroundColor: tokens.color.base.white,\r\n color: tokens.color.error[700],\r\n borderColor: tokens.color.error[300],\r\n '&:hover': {\r\n backgroundColor: tokens.color.error[50],\r\n borderColor: tokens.color.error[300],\r\n },\r\n '&:active': {\r\n backgroundColor: tokens.color.error[50],\r\n },\r\n '&.Mui-disabled': {\r\n backgroundColor: tokens.color.base.white,\r\n color: tokens.color.secondary[300],\r\n borderColor: tokens.color.secondary[200],\r\n },\r\n },\r\n outlinedWarning: {\r\n backgroundColor: tokens.color.base.white,\r\n color: tokens.color.warning[700],\r\n borderColor: tokens.color.warning[300],\r\n '&:hover': {\r\n backgroundColor: tokens.color.warning[50],\r\n borderColor: tokens.color.warning[300],\r\n },\r\n '&:active': {\r\n backgroundColor: tokens.color.warning[50],\r\n },\r\n '&.Mui-disabled': {\r\n backgroundColor: tokens.color.base.white,\r\n color: tokens.color.secondary[300],\r\n borderColor: tokens.color.secondary[200],\r\n },\r\n },\r\n outlinedSuccess: {\r\n backgroundColor: tokens.color.base.white,\r\n color: tokens.color.success[700],\r\n borderColor: tokens.color.success[300],\r\n '&:hover': {\r\n backgroundColor: tokens.color.success[50],\r\n borderColor: tokens.color.success[300],\r\n },\r\n '&:active': {\r\n backgroundColor: tokens.color.success[50],\r\n },\r\n '&.Mui-disabled': {\r\n backgroundColor: tokens.color.base.white,\r\n color: tokens.color.secondary[300],\r\n borderColor: tokens.color.secondary[200],\r\n },\r\n },\r\n // Text variant styles\r\n textPrimary: {\r\n color: tokens.color.primary[700],\r\n '&:hover': {\r\n backgroundColor: tokens.color.primary[50],\r\n },\r\n '&:active': {\r\n backgroundColor: tokens.color.primary[50],\r\n },\r\n '&.Mui-disabled': {\r\n color: tokens.color.secondary[300],\r\n },\r\n },\r\n textSecondary: {\r\n color: tokens.color.secondary[700],\r\n '&:hover': {\r\n backgroundColor: tokens.color.secondary[50],\r\n },\r\n '&:active': {\r\n backgroundColor: tokens.color.secondary[50],\r\n },\r\n '&.Mui-disabled': {\r\n color: tokens.color.secondary[300],\r\n },\r\n },\r\n textError: {\r\n color: tokens.color.error[700],\r\n '&:hover': {\r\n backgroundColor: tokens.color.error[50],\r\n },\r\n '&:active': {\r\n backgroundColor: tokens.color.error[50],\r\n },\r\n '&.Mui-disabled': {\r\n color: tokens.color.secondary[300],\r\n },\r\n },\r\n textWarning: {\r\n color: tokens.color.warning[700],\r\n '&:hover': {\r\n backgroundColor: tokens.color.warning[50],\r\n },\r\n '&:active': {\r\n backgroundColor: tokens.color.warning[50],\r\n },\r\n '&.Mui-disabled': {\r\n color: tokens.color.secondary[300],\r\n },\r\n },\r\n textSuccess: {\r\n color: tokens.color.success[700],\r\n '&:hover': {\r\n backgroundColor: tokens.color.success[50],\r\n },\r\n '&:active': {\r\n backgroundColor: tokens.color.success[50],\r\n },\r\n '&.Mui-disabled': {\r\n color: tokens.color.secondary[300],\r\n },\r\n },\r\n },\r\n};\r\n","import { Components, Theme } from '@mui/material/styles';\r\nimport tokens from '../../tokens/tokens.json';\r\n\r\nconst borderRadiusTokens = tokens.borderRadius;\r\n\r\nexport const buttonGroupOverrides: Components<Omit<Theme, \"palette\" | \"components\">>['MuiButtonGroup'] = {\r\n styleOverrides: {\r\n root: {\r\n boxShadow: 'none',\r\n borderRadius: borderRadiusTokens.md,\r\n },\r\n grouped: {\r\n '&:not(:last-of-type)': {\r\n borderRight: `1px solid ${tokens.color.secondary[300]}`,\r\n },\r\n '&:hover': {\r\n backgroundColor: tokens.color.secondary[50],\r\n },\r\n },\r\n // Outlined variant\r\n groupedOutlined: {\r\n borderColor: tokens.color.secondary[300],\r\n '&:not(:last-of-type)': {\r\n borderRightColor: tokens.color.secondary[300],\r\n },\r\n },\r\n groupedOutlinedPrimary: {\r\n borderColor: tokens.color.primary[300],\r\n '&:not(:last-of-type)': {\r\n borderRightColor: tokens.color.primary[300],\r\n },\r\n },\r\n groupedOutlinedSecondary: {\r\n borderColor: tokens.color.secondary[300],\r\n '&:not(:last-of-type)': {\r\n borderRightColor: tokens.color.secondary[300],\r\n },\r\n },\r\n // Contained variant\r\n groupedContained: {\r\n '&:not(:last-of-type)': {\r\n borderRight: `1px solid ${tokens.color.secondary[400]}`,\r\n },\r\n },\r\n groupedContainedPrimary: {\r\n '&:not(:last-of-type)': {\r\n borderRight: `1px solid ${tokens.color.primary[700]}`,\r\n },\r\n },\r\n // Text variant\r\n groupedText: {\r\n '&:not(:last-of-type)': {\r\n borderRight: `1px solid ${tokens.color.secondary[300]}`,\r\n },\r\n },\r\n },\r\n};\r\n","import { Components, Theme } from '@mui/material/styles';\r\nimport tokens from '../../tokens/tokens.json';\r\n\r\nconst borderRadiusTokens = tokens.borderRadius;\r\n\r\nexport const cardOverrides: Components<Omit<Theme, \"palette\" | \"components\">>['MuiCard'] = {\r\n styleOverrides: {\r\n root: {\r\n borderRadius: borderRadiusTokens.lg,\r\n boxShadow: tokens.shadows.md,\r\n border: '1px solid rgba(0, 0, 0, 0.05)',\r\n },\r\n },\r\n};\r\n","import { Components, Theme } from '@mui/material/styles';\r\nimport tokens from '../../tokens/tokens.json';\r\n\r\nconst colorTokens = tokens.color;\r\n\r\nexport const progressOverrides: Components<Omit<Theme, \"palette\" | \"components\">> = {\r\n MuiCircularProgress: {\r\n styleOverrides: {\r\n root: {\r\n color: colorTokens.primary['500'],\r\n },\r\n },\r\n },\r\n MuiLinearProgress: {\r\n styleOverrides: {\r\n root: {\r\n '& .MuiLinearProgress-bar': {\r\n backgroundColor: colorTokens.primary['500'],\r\n },\r\n },\r\n },\r\n },\r\n};\r\n","import { Components, Theme } from '@mui/material/styles';\r\nimport tokens from '../../tokens/tokens.json';\r\n\r\nconst borderRadiusTokens = tokens.borderRadius;\r\n\r\nexport const chipOverrides: Components<Omit<Theme, \"palette\" | \"components\">>['MuiChip'] = {\r\n styleOverrides: {\r\n root: {\r\n fontWeight: tokens.typography.fontWeight.medium,\r\n fontSize: tokens.typography.fontSize['text-sm'],\r\n lineHeight: tokens.typography.lineHeight['text-sm'],\r\n borderRadius: borderRadiusTokens.md,\r\n height: '28px', // Adjusted to match design\r\n transition: 'all 0.2s ease-in-out',\r\n border: '1px solid transparent',\r\n },\r\n // Size variants\r\n sizeSmall: {\r\n height: '24px',\r\n fontSize: tokens.typography.fontSize['text-xs'],\r\n lineHeight: tokens.typography.lineHeight['text-xs'],\r\n '& .MuiChip-label': {\r\n paddingLeft: '8px',\r\n paddingRight: '8px',\r\n },\r\n '& .MuiChip-icon': {\r\n fontSize: '12px',\r\n marginLeft: '6px',\r\n marginRight: '-4px',\r\n },\r\n '& .MuiChip-avatar': {\r\n width: '16px',\r\n height: '16px',\r\n marginLeft: '4px',\r\n marginRight: '-4px',\r\n },\r\n '& .MuiChip-deleteIcon': {\r\n fontSize: '12px',\r\n marginRight: '4px',\r\n marginLeft: '-4px',\r\n },\r\n },\r\n sizeMedium: {\r\n height: '28px',\r\n fontSize: tokens.typography.fontSize['text-sm'],\r\n lineHeight: tokens.typography.lineHeight['text-sm'],\r\n '& .MuiChip-label': {\r\n paddingLeft: '10px',\r\n paddingRight: '10px',\r\n },\r\n '& .MuiChip-icon': {\r\n fontSize: '14px',\r\n marginLeft: '8px',\r\n marginRight: '-6px',\r\n },\r\n '& .MuiChip-avatar': {\r\n width: '20px',\r\n height: '20px',\r\n marginLeft: '6px',\r\n marginRight: '-6px',\r\n },\r\n '& .MuiChip-deleteIcon': {\r\n fontSize: '14px',\r\n marginRight: '6px',\r\n marginLeft: '-6px',\r\n },\r\n },\r\n deleteIcon: {\r\n transition: 'all 0.2s ease-in-out',\r\n '&:hover': {\r\n opacity: 0.8,\r\n },\r\n },\r\n clickable: {\r\n cursor: 'pointer',\r\n '&:hover': {\r\n opacity: 0.9,\r\n },\r\n '&:active': {\r\n boxShadow: 'none',\r\n },\r\n },\r\n },\r\n variants: [\r\n {\r\n props: { size: 'large' },\r\n style: {\r\n height: '32px',\r\n fontSize: tokens.typography.fontSize['text-sm'],\r\n lineHeight: tokens.typography.lineHeight['text-sm'],\r\n '& .MuiChip-label': {\r\n paddingLeft: '12px',\r\n paddingRight: '12px',\r\n },\r\n '& .MuiChip-icon': {\r\n fontSize: '16px',\r\n marginLeft: '10px',\r\n marginRight: '-8px',\r\n },\r\n '& .MuiChip-avatar': {\r\n width: '24px',\r\n height: '24px',\r\n marginLeft: '8px',\r\n marginRight: '-8px',\r\n },\r\n '& .MuiChip-deleteIcon': {\r\n fontSize: '16px',\r\n marginRight: '8px',\r\n marginLeft: '-8px',\r\n },\r\n },\r\n },\r\n {\r\n props: { variant: 'filled', color: 'primary' },\r\n style: {\r\n backgroundColor: tokens.color.primary[50],\r\n color: tokens.color.secondary[700],\r\n borderColor: tokens.color.primary[200],\r\n '&:hover': {\r\n backgroundColor: tokens.color.primary[100],\r\n },\r\n '& .MuiChip-icon': { color: tokens.color.primary[700] },\r\n '& .MuiChip-deleteIcon': { color: tokens.color.primary[700] },\r\n },\r\n },\r\n {\r\n props: { variant: 'filled', color: 'secondary' },\r\n style: {\r\n backgroundColor: tokens.color.secondary[50],\r\n color: tokens.color.secondary[700],\r\n borderColor: tokens.color.secondary[200],\r\n '&:hover': {\r\n backgroundColor: tokens.color.secondary[100],\r\n },\r\n '& .MuiChip-icon': { color: tokens.color.secondary[700] },\r\n '& .MuiChip-deleteIcon': { color: tokens.color.secondary[700] },\r\n },\r\n },\r\n {\r\n props: { variant: 'filled', color: 'error' },\r\n style: {\r\n backgroundColor: tokens.color.error[50],\r\n color: tokens.color.secondary[700],\r\n borderColor: tokens.color.error[200],\r\n '&:hover': {\r\n backgroundColor: tokens.color.error[100],\r\n },\r\n '& .MuiChip-icon': { color: tokens.color.error[700] },\r\n '& .MuiChip-deleteIcon': { color: tokens.color.error[700] },\r\n },\r\n },\r\n {\r\n props: { variant: 'filled', color: 'success' },\r\n style: {\r\n backgroundColor: tokens.color.success[50],\r\n color: tokens.color.secondary[700],\r\n borderColor: tokens.color.success[200],\r\n '&:hover': {\r\n backgroundColor: tokens.color.success[100],\r\n },\r\n '& .MuiChip-icon': { color: tokens.color.success[700] },\r\n '& .MuiChip-deleteIcon': { color: tokens.color.success[700] },\r\n },\r\n },\r\n {\r\n props: { variant: 'outlined', color: 'primary' },\r\n style: {\r\n backgroundColor: 'transparent',\r\n color: tokens.color.secondary[700],\r\n borderColor: tokens.color.primary[300],\r\n '&:hover': {\r\n backgroundColor: tokens.color.primary[25],\r\n },\r\n },\r\n },\r\n {\r\n props: { variant: 'outlined', color: 'secondary' },\r\n style: {\r\n backgroundColor: 'transparent',\r\n color: tokens.color.secondary[700],\r\n borderColor: tokens.color.secondary[300],\r\n '&:hover': {\r\n backgroundColor: tokens.color.secondary[25],\r\n },\r\n },\r\n },\r\n {\r\n props: { variant: 'outlined', color: 'error' },\r\n style: {\r\n backgroundColor: 'transparent',\r\n color: tokens.color.error[700],\r\n borderColor: tokens.color.error[300],\r\n '&:hover': {\r\n backgroundColor: tokens.color.error[25],\r\n },\r\n },\r\n },\r\n {\r\n props: { variant: 'outlined', color: 'success' },\r\n style: {\r\n backgroundColor: 'transparent',\r\n color: tokens.color.success[700],\r\n borderColor: tokens.color.success[300],\r\n '&:hover': {\r\n backgroundColor: tokens.color.success[25],\r\n },\r\n },\r\n },\r\n ],\r\n};\r\n","import { Components, Theme } from '@mui/material/styles';\r\nimport tokens from '../../tokens/tokens.json';\r\n\r\nconst borderRadiusTokens = tokens.borderRadius;\r\n\r\nexport const textFieldOverrides: Components<Omit<Theme, \"palette\" | \"components\">> = {\r\n MuiTextField: {\r\n defaultProps: {\r\n variant: 'outlined',\r\n size: 'medium',\r\n fullWidth: true,\r\n },\r\n },\r\n MuiFormLabel: {\r\n styleOverrides: {\r\n asterisk: {\r\n color: tokens.color.primary[600],\r\n '&.Mui-error': {\r\n color: tokens.color.error[600],\r\n },\r\n },\r\n },\r\n },\r\n MuiInputLabel: {\r\n styleOverrides: {\r\n root: {\r\n position: 'relative',\r\n transform: 'none',\r\n marginBottom: '6px',\r\n fontSize: tokens.typography.fontSize['text-sm'],\r\n lineHeight: tokens.typography.lineHeight['text-sm'],\r\n fontWeight: 500,\r\n color: tokens.color.secondary[700],\r\n '&.Mui-focused': {\r\n color: tokens.color.secondary[700],\r\n },\r\n '&.Mui-error': {\r\n color: tokens.color.secondary[700],\r\n },\r\n '&.Mui-disabled': {\r\n color: tokens.color.secondary[500],\r\n },\r\n },\r\n shrink: {\r\n transform: 'none',\r\n },\r\n },\r\n },\r\n MuiOutlinedInput: {\r\n styleOverrides: {\r\n root: {\r\n borderRadius: borderRadiusTokens.md,\r\n backgroundColor: tokens.color.base.white,\r\n boxShadow: tokens.shadows.xs,\r\n transition: 'box-shadow 0.2s ease-in-out, border-color 0.2s ease-in-out',\r\n '& .MuiOutlinedInput-notchedOutline': {\r\n borderColor: tokens.color.secondary[300],\r\n borderWidth: '2px',\r\n transition: 'border-color 0.2s ease-in-out',\r\n top: 0,\r\n '& legend': {\r\n display: 'none',\r\n },\r\n },\r\n '&:hover:not(.Mui-focused):not(.Mui-disabled):not(.Mui-error)': {\r\n '& .MuiOutlinedInput-notchedOutline': {\r\n borderColor: tokens.color.gray[400],\r\n },\r\n },\r\n '&.Mui-focused': {\r\n boxShadow: tokens.shadows.xs,\r\n '& .MuiOutlinedInput-notchedOutline': {\r\n borderColor: tokens.color.primary[300],\r\n borderWidth: '3px',\r\n },\r\n },\r\n '&.Mui-error': {\r\n '& .MuiOutlinedInput-notchedOutline': {\r\n borderColor: tokens.color.error[300],\r\n borderWidth: '2px',\r\n },\r\n '&:hover:not(.Mui-focused)': {\r\n '& .MuiOutlinedInput-notchedOutline': {\r\n borderColor: tokens.color.error[400],\r\n },\r\n },\r\n '&.Mui-focused': {\r\n boxShadow: tokens.shadows.xs,\r\n '& .MuiOutlinedInput-notchedOutline': {\r\n borderColor: tokens.color.error[300],\r\n borderWidth: '3px',\r\n },\r\n },\r\n },\r\n '&.Mui-disabled': {\r\n backgroundColor: tokens.color.secondary[50],\r\n boxShadow: 'none',\r\n '& .MuiOutlinedInput-notchedOutline': {\r\n borderColor: tokens.color.secondary[200],\r\n borderWidth: '2px',\r\n },\r\n },\r\n '&.MuiInputBase-multiline': {\r\n padding: 0,\r\n },\r\n },\r\n input: {\r\n padding: '10px 14px',\r\n height: '24px',\r\n fontSize: tokens.typography.fontSize['text-md'],\r\n lineHeight: tokens.typography.lineHeight['text-md'],\r\n fontWeight: 400,\r\n color: tokens.color.secondary[900],\r\n '&::placeholder': {\r\n color: tokens.color.secondary[500],\r\n opacity: 1,\r\n },\r\n '&.Mui-disabled': {\r\n color: tokens.color.secondary[500],\r\n WebkitTextFillColor: tokens.color.secondary[500],\r\n },\r\n },\r\n inputSizeSmall: {\r\n padding: '8px 12px',\r\n height: '20px',\r\n },\r\n multiline: {\r\n padding: 0,\r\n alignItems: 'flex-start',\r\n },\r\n inputMultiline: {\r\n padding: '12px 14px',\r\n height: 'auto',\r\n minHeight: '80px',\r\n resize: 'vertical',\r\n lineHeight: tokens.typography.lineHeight['text-md'],\r\n },\r\n adornedStart: {\r\n paddingLeft: '14px',\r\n '& .MuiOutlinedInput-input': {\r\n paddingLeft: '8px',\r\n },\r\n },\r\n adornedEnd: {\r\n paddingRight: '14px',\r\n '& .MuiOutlinedInput-input': {\r\n paddingRight: '8px',\r\n },\r\n },\r\n },\r\n },\r\n MuiInputAdornment: {\r\n styleOverrides: {\r\n root: {\r\n color: tokens.color.secondary[400],\r\n '& .MuiTypography-root': {\r\n color: 'inherit',\r\n fontSize: tokens.typography.fontSize['text-md'],\r\n },\r\n '& .MuiSvgIcon-root': {\r\n fontSize: '20px',\r\n color: tokens.color.secondary[400],\r\n },\r\n },\r\n positionStart: {\r\n marginRight: '0px',\r\n },\r\n positionEnd: {\r\n marginLeft: '0px',\r\n },\r\n },\r\n },\r\n MuiFormHelperText: {\r\n styleOverrides: {\r\n root: {\r\n marginLeft: 0,\r\n marginTop: '6px',\r\n fontSize: tokens.typography.fontSize['text-sm'],\r\n lineHeight: tokens.typography.lineHeight['text-sm'],\r\n fontWeight: 400,\r\n color: tokens.color.secondary[600],\r\n '&.Mui-error': {\r\n color: tokens.color.error[600],\r\n },\r\n },\r\n },\r\n },\r\n};\r\n","import { Components, Theme } from '@mui/material/styles';\r\nimport tokens from '../../tokens/tokens.json';\r\n\r\nexport const selectOverrides: Components<Omit<Theme, \"palette\" | \"components\">>['MuiSelect'] = {\r\n defaultProps: {\r\n variant: 'outlined',\r\n size: 'medium',\r\n fullWidth: true,\r\n },\r\n styleOverrides: {\r\n select: {\r\n padding: '10px 14px',\r\n '&:focus': {\r\n backgroundColor: 'transparent',\r\n },\r\n display: 'flex',\r\n alignItems: 'center',\r\n gap: '8px',\r\n },\r\n icon: {\r\n color: tokens.color.secondary[500],\r\n right: '12px',\r\n },\r\n },\r\n};\r\n","import { Components, Theme } from '@mui/material/styles';\r\nimport tokens from '../../tokens/tokens.json';\r\n\r\nexport const menuOverrides: Components<Omit<Theme, \"palette\" | \"components\">> = {\r\n MuiMenu: {\r\n defaultProps: {\r\n elevation: 0,\r\n anchorOrigin: {\r\n vertical: 'bottom',\r\n horizontal: 'right',\r\n },\r\n transformOrigin: {\r\n vertical: 'top',\r\n horizontal: 'right',\r\n },\r\n },\r\n styleOverrides: {\r\n paper: {\r\n borderRadius: tokens.borderRadius.lg,\r\n marginTop: '8px',\r\n minWidth: 180,\r\n border: `1px solid ${tokens.color.secondary[200]}`,\r\n boxShadow: tokens.shadows.lg,\r\n },\r\n list: {\r\n padding: '4px',\r\n },\r\n },\r\n },\r\n MuiMenuItem: {\r\n styleOverrides: {\r\n root: {\r\n borderRadius: tokens.borderRadius.sm,\r\n margin: '2px 4px',\r\n padding: '10px 12px',\r\n fontSize: tokens.typography.fontSize['text-sm'],\r\n fontWeight: tokens.typography.fontWeight.medium,\r\n color: tokens.color.secondary[700],\r\n transition: 'all 0.2s ease-in-out',\r\n '&:hover': {\r\n backgroundColor: tokens.color.secondary[50],\r\n color: tokens.color.secondary[900],\r\n },\r\n '&.Mui-selected': {\r\n backgroundColor: tokens.color.primary[50],\r\n color: tokens.color.primary[700],\r\n '&:hover': {\r\n backgroundColor: tokens.color.primary[100],\r\n },\r\n },\r\n '& .MuiListItemIcon-root': {\r\n minWidth: 'auto',\r\n marginRight: '12px',\r\n color: tokens.color.secondary[500],\r\n fontSize: '18px',\r\n },\r\n },\r\n },\r\n },\r\n MuiDivider: {\r\n styleOverrides: {\r\n root: {\r\n margin: '4px 0',\r\n borderColor: tokens.color.secondary[100],\r\n },\r\n },\r\n },\r\n};\r\n","import { Components, Theme } from '@mui/material/styles';\r\nimport tokens from '../../tokens/tokens.json';\r\n\r\nexport const autocompleteOverrides: Components<Omit<Theme, \"palette\" | \"components\">>['MuiAutocomplete'] = {\r\n styleOverrides: {\r\n root: {\r\n '& .MuiOutlinedInput-root': {\r\n backgroundColor: tokens.color.base.white,\r\n borderRadius: tokens.borderRadius.md,\r\n boxShadow: tokens.shadows.xs,\r\n '& fieldset': {\r\n borderColor: tokens.color.secondary[300],\r\n borderWidth: '1px',\r\n },\r\n '&:hover fieldset': {\r\n borderColor: tokens.color.secondary[400],\r\n },\r\n '&.Mui-focused fieldset': {\r\n borderColor: tokens.color.primary[500],\r\n borderWidth: '2px',\r\n },\r\n '&.Mui-disabled': {\r\n backgroundColor: tokens.color.secondary[50],\r\n '& fieldset': {\r\n borderColor: tokens.color.secondary[200],\r\n },\r\n },\r\n },\r\n // Size variants\r\n '&.MuiAutocomplete-sizeSmall .MuiOutlinedInput-root': {\r\n padding: '4px 12px',\r\n '& .MuiAutocomplete-input': {\r\n padding: '4px 0',\r\n fontSize: tokens.typography.fontSize['text-md'],\r\n lineHeight: tokens.typography.lineHeight['text-md'],\r\n },\r\n },\r\n '& .MuiOutlinedInput-root.MuiInputBase-sizeSmall': {\r\n padding: '4px 12px',\r\n },\r\n },\r\n input: {\r\n fontSize: tokens.typography.fontSize['text-md'],\r\n lineHeight: tokens.typography.lineHeight['text-md'],\r\n fontWeight: tokens.typography.fontWeight.regular,\r\n color: tokens.color.secondary[900],\r\n '&::placeholder': {\r\n color: tokens.color.secondary[500],\r\n opacity: 1,\r\n },\r\n },\r\n inputRoot: {\r\n padding: '6px 14px !important',\r\n gap: '8px',\r\n '&.MuiInputBase-sizeSmall': {\r\n padding: '4px 12px !important',\r\n },\r\n },\r\n paper: {\r\n borderRadius: tokens.borderRadius.md,\r\n border: `1px solid ${tokens.color.secondary[200]}`,\r\n marginTop: '4px',\r\n boxShadow: tokens.shadows.lg,\r\n },\r\n listbox: {\r\n padding: '4px',\r\n '& .MuiAutocomplete-option': {\r\n borderRadius: tokens.borderRadius.sm,\r\n margin: '2px 0',\r\n padding: '10px 12px',\r\n fontSize: tokens.typography.fontSize['text-sm'],\r\n fontWeight: tokens.typography.fontWeight.medium,\r\n color: tokens.color.secondary[700],\r\n minHeight: 'auto',\r\n '&[aria-selected=\"true\"]': {\r\n backgroundColor: tokens.color.primary[50],\r\n color: tokens.color.primary[700],\r\n '&.Mui-focused': {\r\n backgroundColor: tokens.color.primary[100],\r\n },\r\n },\r\n '&.Mui-focused': {\r\n backgroundColor: tokens.color.secondary[50],\r\n },\r\n '&:hover': {\r\n backgroundColor: tokens.color.secondary[50],\r\n },\r\n },\r\n },\r\n tag: {\r\n margin: '2px',\r\n height: '24px',\r\n backgroundColor: '#FFFFFF',\r\n border: `1px solid ${tokens.color.secondary[300]}`,\r\n borderRadius: tokens.borderRadius.sm,\r\n fontSize: tokens.typography.fontSize['text-sm'],\r\n fontWeight: tokens.typography.fontWeight.medium,\r\n color: tokens.color.secondary[700],\r\n '& .MuiChip-deleteIcon': {\r\n color: tokens.color.secondary[400],\r\n fontSize: '12px',\r\n '&:hover': {\r\n color: tokens.color.secondary[600],\r\n },\r\n },\r\n },\r\n endAdornment: {\r\n right: '12px',\r\n '& .MuiIconButton-root': {\r\n padding: '4px',\r\n },\r\n '& .MuiSvgIcon-root': {\r\n fontSize: '20px',\r\n color: tokens.color.secondary[400],\r\n },\r\n },\r\n clearIndicator: {\r\n padding: '4px',\r\n '& .MuiSvgIcon-root': {\r\n fontSize: '16px',\r\n color: tokens.color.secondary[400],\r\n },\r\n },\r\n popupIndicator: {\r\n padding: '4px',\r\n '& .MuiSvgIcon-root': {\r\n fontSize: '20px',\r\n color: tokens.color.secondary[400],\r\n },\r\n },\r\n noOptions: {\r\n fontSize: tokens.typography.fontSize['text-sm'],\r\n color: tokens.color.secondary[500],\r\n padding: '10px 12px',\r\n },\r\n loading: {\r\n fontSize: tokens.typography.fontSize['text-sm'],\r\n color: tokens.color.secondary[500],\r\n padding: '10px 12px',\r\n },\r\n },\r\n};\r\n","import { Components, Theme } from '@mui/material/styles';\r\n\r\nexport const avatarOverrides: Components<Omit<Theme, \"palette\" | \"components\">>['MuiAvatar'] = {\r\n styleOverrides: {\r\n root: {\r\n fontSize: '14px',\r\n fontWeight: 500,\r\n },\r\n },\r\n};\r\n","import { Components, Theme } from '@mui/material/styles';\r\nimport tokens from '../../tokens/tokens.json';\r\n\r\nexport const switchOverrides: Components<Omit<Theme, \"palette\" | \"components\">>['MuiSwitch'] = {\r\n defaultProps: {\r\n disableRipple: true,\r\n },\r\n styleOverrides: {\r\n root: {\r\n width: 44,\r\n height: 24,\r\n padding: 0,\r\n '& .MuiSwitch-switchBase': {\r\n padding: 2,\r\n transitionDuration: '200ms',\r\n '&.Mui-checked': {\r\n transform: 'translateX(20px)',\r\n '& + .MuiSwitch-track': {\r\n backgroundColor: tokens.color.primary[600],\r\n opacity: 1,\r\n border: 0,\r\n },\r\n '& .MuiSwitch-thumb': {\r\n backgroundColor: tokens.color.base.white,\r\n },\r\n '&:hover + .MuiSwitch-track': {\r\n backgroundColor: tokens.color.primary[700],\r\n },\r\n '&.Mui-disabled + .MuiSwitch-track': {\r\n backgroundColor: tokens.color.secondary[50],\r\n opacity: 1,\r\n },\r\n '&.Mui-disabled .MuiSwitch-thumb': {\r\n backgroundColor: tokens.color.gray[50],\r\n },\r\n },\r\n '&.Mui-focusVisible + .MuiSwitch-track': {\r\n boxShadow: `0px 0px 0px 2px ${tokens.color.base.white}, 0px 0px 0px 4px ${tokens.effects.focusRings['focus-ring']}`,\r\n },\r\n '&.Mui-disabled': {\r\n '& + .MuiSwitch-track': {\r\n backgroundColor: tokens.color.secondary[50],\r\n opacity: 1,\r\n },\r\n '& .MuiSwitch-thumb': {\r\n backgroundColor: tokens.color.gray[50],\r\n },\r\n },\r\n },\r\n },\r\n switchBase: {\r\n padding: 2,\r\n '&.Mui-checked': {\r\n transform: 'translateX(20px)',\r\n },\r\n },\r\n thumb: {\r\n boxSizing: 'border-box',\r\n width: 20,\r\n height: 20,\r\n backgroundColor: tokens.color.base.white,\r\n boxShadow: tokens.shadows.sm,\r\n },\r\n track: {\r\n borderRadius: 9999,\r\n backgroundColor: tokens.color.secondary[50],\r\n opacity: 1,\r\n transition: 'background-color 200ms, box-shadow 200ms',\r\n },\r\n sizeSmall: {\r\n width: 36,\r\n height: 20,\r\n '& .MuiSwitch-switchBase': {\r\n padding: 2,\r\n '&.Mui-checked': {\r\n transform: 'translateX(16px)',\r\n },\r\n },\r\n '& .MuiSwitch-thumb': {\r\n width: 16,\r\n height: 16,\r\n },\r\n },\r\n },\r\n};\r\n","import { Components, Theme } from '@mui/material/styles';\r\nimport tokens from '../../tokens/tokens.json';\r\n\r\nexport const checkboxOverrides: Components<Omit<Theme, \"palette\" | \"components\">>['MuiCheckbox'] = {\r\n defaultProps: {\r\n disableRipple: true,\r\n },\r\n styleOverrides: {\r\n root: {\r\n padding: 0,\r\n transition: 'all 200ms ease-in-out',\r\n '&:hover': {\r\n backgroundColor: 'transparent',\r\n '& rect[stroke]': {\r\n stroke: tokens.color.primary[600],\r\n fill: tokens.color.primary[50],\r\n },\r\n },\r\n '&.Mui-checked:hover, &.MuiCheckbox-indeterminate:hover': {\r\n '& rect:first-of-type': {\r\n fill: tokens.color.primary[700],\r\n },\r\n },\r\n '&.Mui-focusVisible': {\r\n '& .MuiSvgIcon-root': {\r\n boxShadow: `0px 0px 0px 2px ${tokens.color.base.white}, 0px 0px 0px 4px ${tokens.effects.focusRings['focus-ring']}`,\r\n borderRadius: tokens.borderRadius.md,\r\n },\r\n },\r\n '&.Mui-disabled': {\r\n '& rect[stroke]': {\r\n fill: tokens.color.secondary[50],\r\n stroke: tokens.color.secondary[300],\r\n },\r\n '& rect:first-of-type': {\r\n fill: tokens.color.secondary[50],\r\n },\r\n '& path, & rect:not(:first-of-type)': {\r\n fill: tokens.color.secondary[300],\r\n },\r\n },\r\n },\r\n sizeSmall: {\r\n '&.Mui-focusVisible': {\r\n '& .MuiSvgIcon-root': {\r\n borderRadius: tokens.borderRadius.sm,\r\n },\r\n },\r\n },\r\n },\r\n};\r\n","import { Components, Theme } from '@mui/material/styles';\r\nimport tokens from '../../tokens/tokens.json';\r\n\r\nexport const radioOverrides: Components<Omit<Theme, \"palette\" | \"components\">>['MuiRadio'] = {\r\n defaultProps: {\r\n disableRipple: true,\r\n },\r\n styleOverrides: {\r\n root: {\r\n padding: 0,\r\n transition: 'all 200ms ease-in-out',\r\n '& svg': {\r\n transition: 'all 200ms ease-in-out',\r\n },\r\n '& svg circle': {\r\n transition: 'all 200ms ease-in-out',\r\n },\r\n '&:hover:not(.Mui-checked):not(.Mui-disabled)': {\r\n '& svg circle': {\r\n stroke: tokens.color.primary[600],\r\n },\r\n },\r\n '&.Mui-checked:hover:not(.Mui-disabled)': {\r\n '& svg circle:first-of-type': {\r\n stroke: ' tokens.color.primary[700]',\r\n },\r\n '& svg circle:last-of-type': {\r\n fill: ' tokens.color.primary[700]',\r\n },\r\n },\r\n '&.Mui-focusVisible': {\r\n '& > span': {\r\n boxShadow: `0px 0px 0px 2px ${tokens.color.base.white}, 0px 0px 0px 4px ${tokens.effects.focusRings['focus-ring']}`,\r\n borderRadius: '50%',\r\n },\r\n },\r\n // Disabled state unchecked\r\n '&.Mui-disabled:not(.Mui-checked)': {\r\n '& svg circle': {\r\n fill: tokens.color.secondary[50],\r\n stroke: tokens.color.secondary[300],\r\n },\r\n },\r\n // Disabled state checked\r\n '&.Mui-disabled.Mui-checked': {\r\n '& svg circle:first-of-type': {\r\n fill: tokens.color.secondary[50],\r\n stroke: tokens.color.secondary[300],\r\n },\r\n '& svg circle:last-of-type': {\r\n fill: tokens.color.secondary[300],\r\n },\r\n },\r\n },\r\n },\r\n};\r\n","import { Components, Theme } from '@mui/material/styles';\r\nimport tokens from '../../tokens/tokens.json';\r\n\r\nexport const datePickerOverrides: Components = {\r\n MuiPickersDay: {\r\n styleOverrides: {\r\n root: {\r\n width: '40px',\r\n height: '40px',\r\n margin: 0,\r\n borderRadius: tokens.borderRadius.full,\r\n fontSize: tokens.typography.fontSize['text-sm'],\r\n fontWeight: tokens.typography.fontWeight.regular,\r\n fontFamily: tokens.typography.fontFamily.body,\r\n color: tokens.color.gray[900],\r\n '&:hover': {\r\n backgroundColor: tokens.color.gray[50],\r\n },\r\n '&.Mui-selected': {\r\n backgroundColor: `${tokens.color.primary[600]} !important`,\r\n color: `${tokens.color.base.white} !important`,\r\n fontWeight: tokens.typography.fontWeight.medium,\r\n '&:hover': {\r\n backgroundColor: `${tokens.color.primary[700]} !important`,\r\n },\r\n },\r\n '&.MuiPickersDay-today': {\r\n border: `1px solid ${tokens.color.primary[600]}`,\r\n backgroundColor: 'transparent',\r\n '&:not(.Mui-selected)': {\r\n color: tokens.color.gray[900],\r\n borderColor: tokens.color.gray[300],\r\n },\r\n },\r\n '&.Mui-disabled': {\r\n color: tokens.color.gray[400],\r\n },\r\n },\r\n },\r\n },\r\n MuiDateCalendar: {\r\n styleOverrides: {\r\n root: {\r\n width: '100%',\r\n maxWidth: '328px',\r\n maxHeight: 'none',\r\n fontFamily: tokens.typography.fontFamily.body,\r\n },\r\n },\r\n },\r\n MuiPickersCalendarHeader: {\r\n styleOverrides: {\r\n root: {\r\n paddingLeft: 0,\r\n paddingRight: 0,\r\n marginTop: 0,\r\n marginBottom: `${tokens.borderRadius.md}px`,\r\n display: 'flex',\r\n alignItems: 'center',\r\n justifyContent: 'space-between',\r\n },\r\n label: {\r\n fontSize: tokens.typography.fontSize['text-md'],\r\n fontWeight: tokens.typography.fontWeight.semibold,\r\n fontFamily: tokens.typography.fontFamily.body,\r\n color: tokens.color.gray[900],\r\n },\r\n },\r\n },\r\n MuiPickersArrowSwitcher: {\r\n styleOverrides: {\r\n root: {\r\n display: 'inline-flex',\r\n gap: `${tokens.borderRadius.sm}px`,\r\n },\r\n button: {\r\n padding: `${tokens.borderRadius.sm}px`,\r\n width: '32px',\r\n height: '32px',\r\n borderRadius: `${tokens.borderRadius.sm}px`,\r\n color: tokens.color.gray[500],\r\n '&:hover': {\r\n backgroundColor: tokens.color.gray[50],\r\n },\r\n },\r\n },\r\n },\r\n MuiDayCalendar: {\r\n styleOverrides: {\r\n header: {\r\n gap: 0,\r\n justifyContent: 'space-between',\r\n paddingLeft: 0,\r\n paddingRight: 0,\r\n },\r\n weekContainer: {\r\n margin: 0,\r\n justifyContent: 'space-between',\r\n },\r\n weekDayLabel: {\r\n width: '40px',\r\n height: '40px',\r\n fontSize: tokens.typography.fontSize['text-xs'],\r\n fontWeight: tokens.typography.fontWeight.medium,\r\n fontFamily: tokens.typography.fontFamily.body,\r\n color: tokens.color.gray[600],\r\n margin: 0,\r\n },\r\n },\r\n },\r\n MuiPickersLayout: {\r\n styleOverrides: {\r\n root: {\r\n backgroundColor: tokens.color.base.white,\r\n borderRadius: `${tokens.borderRadius.xl}px`,\r\n boxShadow: tokens.shadows.lg,\r\n overflow: 'hidden',\r\n },\r\n contentWrapper: {\r\n padding: `${tokens.borderRadius.xl * 1.5}px ${tokens.borderRadius.xl * 2}px`,\r\n },\r\n },\r\n },\r\n MuiPickerPopper: {\r\n styleOverrides: {\r\n paper: {\r\n borderRadius: `${tokens.borderRadius.xl}px`,\r\n boxShadow: tokens.shadows.lg,\r\n overflow: 'hidden',\r\n },\r\n },\r\n },\r\n MuiDialogActions: {\r\n styleOverrides: {\r\n root: {\r\n padding: `${tokens.borderRadius.md * 2}px`,\r\n borderTop: `1px solid ${tokens.color.gray[200]}`,\r\n gap: `${tokens.borderRadius.lg}px`,\r\n '& .MuiButton-root': {\r\n flex: 1,\r\n minWidth: 'auto',\r\n fontFamily: tokens.typography.fontFamily.body,\r\n },\r\n },\r\n },\r\n },\r\n MuiPickersToolbar: {\r\n styleOverrides: {\r\n root: {\r\n padding: `${tokens.borderRadius.md * 2}px`,\r\n borderTop: `1px solid ${tokens.color.gray[200]}`,\r\n gap: `${tokens.borderRadius.lg}px`,\r\n display: 'flex',\r\n '& .MuiButton-root': {\r\n flex: 1,\r\n minWidth: 'auto',\r\n textTransform: 'none',\r\n fontSize: tokens.typography.fontSize['text-md'],\r\n fontWeight: tokens.typography.fontWeight.semibold,\r\n fontFamily: tokens.typography.fontFamily.body,\r\n padding: '10px 16px',\r\n borderRadius: `${tokens.borderRadius.md}px`,\r\n lineHeight: tokens.typography.lineHeight['text-md'],\r\n boxShadow: 'none',\r\n '&:hover': {\r\n boxShadow: 'none',\r\n },\r\n },\r\n '& .MuiButton-root:first-of-type': {\r\n backgroundColor: tokens.color.base.white,\r\n border: `1px solid ${tokens.color.gray[300]}`,\r\n color: tokens.color.gray[700],\r\n '&:hover': {\r\n backgroundColor: tokens.color.gray[50],\r\n border: `1px solid ${tokens.color.gray[300]}`,\r\n },\r\n },\r\n '& .MuiButton-root:last-of-type': {\r\n backgroundColor: `${tokens.color.primary[600]} !important`,\r\n color: `${tokens.color.base.white} !important`,\r\n border: 'none !important',\r\n '&:hover': {\r\n backgroundColor: `${tokens.color.primary[700]} !important`,\r\n },\r\n },\r\n },\r\n },\r\n },\r\n};\r\n","import { Components, Theme } from '@mui/material/styles';\r\nimport tokens from '../../tokens/tokens.json';\r\n\r\nexport const tableOverrides: Components<Omit<Theme, \"palette\" | \"components\">> = {\r\n MuiTable: {\r\n styleOverrides: {\r\n root: {\r\n borderCollapse: 'separate',\r\n borderSpacing: 0,\r\n },\r\n },\r\n },\r\n MuiTableHead: {\r\n styleOverrides: {\r\n root: {\r\n '& .MuiTableCell-root': {\r\n backgroundColor: tokens.color.gray[50],\r\n borderBottom: `1px solid ${tokens.color.gray[200]}`,\r\n fontFamily: tokens.typography.fontFamily.body,\r\n fontSize: tokens.typography.fontSize['text-xs'],\r\n fontWeight: tokens.typography.fontWeight.medium,\r\n lineHeight: tokens.typography.lineHeight['text-xs'],\r\n color: tokens.color.gray[600],\r\n textTransform: 'uppercase',\r\n padding: '12px 24px',\r\n },\r\n },\r\n },\r\n },\r\n MuiTableBody: {\r\n styleOverrides: {\r\n root: {\r\n '& .MuiTableRow-root': {\r\n '&:hover': {\r\n backgroundColor: tokens.color.gray[25],\r\n },\r\n '&:last-child .MuiTableCell-root': {\r\n borderBottom: 0,\r\n },\r\n },\r\n },\r\n },\r\n },\r\n MuiTableCell: {\r\n styleOverrides: {\r\n root: {\r\n fontFamily: tokens.typography.fontFamily.body,\r\n fontSize: tokens.typography.fontSize['text-sm'],\r\n fontWeight: tokens.typography.fontWeight.regular,\r\n lineHeight: tokens.typography.lineHeight['text-sm'],\r\n color: tokens.color.gray[900],\r\n padding: '16px 24px',\r\n borderBottom: `1px solid ${tokens.color.gray[200]}`,\r\n },\r\n head: {\r\n backgroundColor: tokens.color.gray[50],\r\n fontWeight: tokens.typography.fontWeight.medium,\r\n color: tokens.color.gray[600],\r\n fontSize: tokens.typography.fontSize['text-xs'],\r\n lineHeight: tokens.typography.lineHeight['text-xs'],\r\n textTransform: 'uppercase',\r\n padding: '12px 24px',\r\n },\r\n },\r\n },\r\n MuiTablePagination: {\r\n styleOverrides: {\r\n root: {\r\n borderTop: `1px solid ${tokens.color.gray[200]}`,\r\n padding: '12px 24px 16px',\r\n display: 'flex',\r\n alignItems: 'center',\r\n justifyContent: 'center',\r\n gap: '12px',\r\n color: tokens.color.gray[700],\r\n fontFamily: tokens.typography.fontFamily.body,\r\n },\r\n toolbar: {\r\n padding: 0,\r\n minHeight: 'unset',\r\n gap: '12px',\r\n justifyContent: 'center',\r\n width: '100%',\r\n },\r\n spacer: {\r\n display: 'none',\r\n },\r\n selectLabel: {\r\n display: 'none',\r\n },\r\n select: {\r\n display: 'none',\r\n },\r\n displayedRows: {\r\n margin: 0,\r\n fontFamily: tokens.typography.fontFamily.body,\r\n fontSize: tokens.typography.fontSize['text-sm'],\r\n fontWeight: tokens.typography.fontWeight.medium,\r\n color: tokens.color.gray[700],\r\n order: 1,\r\n },\r\n actions: {\r\n display: 'flex',\r\n gap: '2px',\r\n alignItems: 'center',\r\n order: 2,\r\n marginLeft: 0,\r\n '& .MuiIconButton-root': {\r\n backgroundColor: tokens.color.base.white,\r\n border: `1px solid ${tokens.color.gray[300]}`,\r\n borderRadius: tokens.borderRadius.md,\r\n padding: '8px 12px',\r\n margin: 0,\r\n boxShadow: tokens.shadows.xs,\r\n fontFamily: tokens.typography.fontFamily.body,\r\n fontSize: tokens.typography.fontSize['text-sm'],\r\n fontWeight: tokens.typography.fontWeight.semibold,\r\n color: tokens.color.gray[700],\r\n gap: '4px',\r\n minWidth: '40px',\r\n height: '36px',\r\n '&:hover': {\r\n backgroundColor: tokens.color.gray[50],\r\n borderColor: tokens.color.gray[300],\r\n },\r\n '&.Mui-disabled': {\r\n backgroundColor: tokens.color.base.white,\r\n borderColor: tokens.color.gray[200],\r\n color: tokens.color.gray[400],\r\n opacity: 0.6,\r\n },\r\n '&:first-of-type': {\r\n '&::after': {\r\n content: '\"Previous\"',\r\n marginLeft: '4px',\r\n },\r\n },\r\n '&:last-of-type': {\r\n '&::before': {\r\n content: '\"Next\"',\r\n marginRight: '4px',\r\n },\r\n },\r\n },\r\n },\r\n },\r\n },\r\n};\r\n","import { Components, Theme } from '@mui/material/styles';\r\nimport tokens from '../../tokens/tokens.json';\r\n\r\nexport const sectionHeaderOverrides: Components<Omit<Theme, \"palette\" | \"components\">> = {\r\n // Future: Add any SectionHeader-specific MUI component overrides here if needed\r\n};\r\n","import { Components, Theme } from '@mui/material/styles';\r\nimport tokens from '../../tokens/tokens.json';\r\n\r\nexport const modalOverrides: Components<Omit<Theme, \"palette\" | \"components\">> = {\r\n MuiModal: {\r\n styleOverrides: {\r\n root: {\r\n display: 'flex',\r\n alignItems: 'center',\r\n justifyContent: 'center',\r\n },\r\n backdrop: {\r\n backgroundColor: tokens.color.gray[950],\r\n opacity: '0.5 !important',\r\n backdropFilter: 'blur(8px)',\r\n },\r\n },\r\n },\r\n MuiDialog: {\r\n styleOverrides: {\r\n root: {\r\n '& .MuiBackdrop-root': {\r\n backgroundColor: tokens.color.gray[950],\r\n opacity: '0.5 !important',\r\n backdropFilter: 'blur(8px)',\r\n },\r\n },\r\n paper: {\r\n backgroundColor: tokens.color.base.white,\r\n borderRadius: tokens.borderRadius['2xl'],\r\n boxShadow: `0px 20px 24px -4px rgba(10,13,18,0.08), 0px 8px 8px -4px rgba(10,13,18,0.03), 0px 3px 3px -1.5px rgba(10,13,18,0.02)`,\r\n overflow: 'hidden',\r\n },\r\n },\r\n },\r\n MuiDialogTitle: {\r\n styleOverrides: {\r\n root: {\r\n fontFamily: tokens.typography.fontFamily.body,\r\n fontSize: tokens.typography.fontSize['text-lg'],\r\n fontWeight: tokens.typography.fontWeight.semibold,\r\n lineHeight: tokens.typography.lineHeight['text-lg'],\r\n color: tokens.color.gray[900],\r\n padding: `${tokens.spacing['3xl']} ${tokens.spacing['3xl']} ${tokens.spacing.lg}`,\r\n },\r\n },\r\n },\r\n MuiDialogContent: {\r\n styleOverrides: {\r\n root: {\r\n fontFamily: tokens.typography.fontFamily.body,\r\n fontSize: tokens.typography.fontSize['text-sm'],\r\n fontWeight: tokens.typography.fontWeight.regular,\r\n lineHeight: tokens.typography.lineHeight['text-sm'],\r\n color: tokens.color.gray[600],\r\n padding: `0 ${tokens.spacing['3xl']}`,\r\n },\r\n },\r\n },\r\n MuiDialogContentText: {\r\n styleOverrides: {\r\n root: {\r\n fontFamily: tokens.typography.fontFamily.body,\r\n fontSize: tokens.typography.fontSize['text-sm'],\r\n fontWeight: tokens.typography.fontWeight.regular,\r\n lineHeight: tokens.typography.lineHeight['text-sm'],\r\n color: tokens.color.gray[600],\r\n },\r\n },\r\n },\r\n MuiDialogActions: {\r\n styleOverrides: {\r\n root: {\r\n padding: `${tokens.spacing['4xl']} ${tokens.spacing['3xl']} ${tokens.spacing['3xl']}`,\r\n gap: tokens.spacing.lg,\r\n '& > :not(:first-of-type)': {\r\n marginLeft: 0,\r\n },\r\n },\r\n },\r\n },\r\n};\r\n","import { Components, Theme } from '@mui/material/styles';\r\nimport { buttonOverrides } from './button';\r\nimport { buttonGroupOverrides } from './buttonGroup';\r\nimport { cardOverrides } from './card';\r\nimport { progressOverrides } from './progress';\r\nimport { chipOverrides } from './chip';\r\nimport { textFieldOverrides } from './textField';\r\nimport { selectOverrides } from './select';\r\nimport { menuOverrides } from './menu';\r\nimport { autocompleteOverrides } from './autocomplete';\r\nimport { avatarOverrides } from './avatar';\r\nimport { switchOverrides } from './switch';\r\nimport { checkboxOverrides } from './checkbox';\r\nimport { radioOverrides } from './radio';\r\nimport { datePickerOverrides } from './datePicker';\r\nimport { tableOverrides } from './table';\r\nimport { sectionHeaderOverrides } from './sectionHeader';\r\nimport { modalOverrides } from './modal';\r\n\r\nexport const components: Components<Omit<Theme, \"palette\" | \"components\">> = {\r\n MuiButton: buttonOverrides,\r\n MuiButtonGroup: buttonGroupOverrides,\r\n MuiCard: cardOverrides,\r\n MuiChip: chipOverrides,\r\n MuiSelect: selectOverrides,\r\n MuiAutocomplete: autocompleteOverrides,\r\n MuiAvatar: avatarOverrides,\r\n MuiSwitch: switchOverrides,\r\n MuiCheckbox: checkboxOverrides,\r\n MuiRadio: radioOverrides,\r\n ...datePickerOverrides,\r\n ...textFieldOverrides,\r\n ...menuOverrides,\r\n ...progressOverrides,\r\n ...tableOverrides,\r\n ...sectionHeaderOverrides,\r\n ...modalOverrides,\r\n};\r\n","import React from 'react';\r\nimport { Button as MuiButton, ButtonProps as MuiButtonProps, CircularProgress } from '@mui/material';\r\nimport { DesignSystemColor } from '../../theme/types';\r\n\r\nexport type ButtonSize = 'small' | 'medium' | 'large';\r\n\r\nexport interface ButtonProps extends Omit<MuiButtonProps, 'color' | 'size'> {\r\n label?: string;\r\n color?: DesignSystemColor | 'inherit';\r\n size?: ButtonSize;\r\n loading?: boolean;\r\n iconLeading?: React.ReactNode;\r\n iconTrailing?: React.ReactNode;\r\n iconOnly?: boolean;\r\n}\r\n\r\n// Map design system colors to MUI colors\r\nconst mapColorToMui = (color?: DesignSystemColor | 'inherit'): MuiButtonProps['color'] => {\r\n if (!color) return 'primary';\r\n // Map custom colors to closest MUI equivalent\r\n const colorMap: Record<string, MuiButtonProps['color']> = {\r\n 'base': 'primary',\r\n 'gray': 'secondary',\r\n 'gray-dark': 'secondary',\r\n 'primary': 'primary',\r\n 'secondary': 'secondary',\r\n 'error': 'error',\r\n 'success': 'success',\r\n 'warning': 'warning',\r\n 'inherit': 'inherit',\r\n };\r\n return colorMap[color] || 'primary';\r\n};\r\n\r\nexport const Button: React.FC<ButtonProps> = ({\r\n label,\r\n children,\r\n size,\r\n loading = false,\r\n iconLeading,\r\n iconTrailing,\r\n iconOnly = false,\r\n disabled,\r\n variant,\r\n color,\r\n ...props\r\n}) => {\r\n const content = label || children;\r\n const isDisabled = disabled || loading;\r\n\r\n return (\r\n <MuiButton\r\n variant={variant || 'contained'}\r\n size={size || 'medium'}\r\n color={mapColorToMui(color)}\r\n disabled={isDisabled}\r\n {...props}\r\n sx={{\r\n ...props.sx,\r\n ...(iconOnly && {\r\n minWidth: 'auto',\r\n padding: size === 'small' ? '6px' : size === 'medium' ? '8px' : '10px',\r\n }),\r\n }}\r\n >\r\n {loading && (\r\n <CircularProgress\r\n size={size === 'small' ? 16 : size === 'medium' ? 20 : 24}\r\n sx={{ mr: iconOnly ? 0 : 1 }}\r\n />\r\n )}\r\n {!loading && iconLeading && (\r\n <span style={{ marginRight: iconOnly ? 0 : 8, display: 'flex', alignItems: 'center' }}>\r\n {iconLeading}\r\n </span>\r\n )}\r\n {!iconOnly && content}\r\n {!loading && iconTrailing && (\r\n <span style={{ marginLeft: iconOnly ? 0 : 8, display: 'flex', alignItems: 'center' }}>\r\n {iconTrailing}\r\n </span>\r\n )}\r\n </MuiButton>\r\n );\r\n};\r\n","import React from 'react';\r\nimport { ButtonGroup as MuiButtonGroup, ButtonGroupProps as MuiButtonGroupProps } from '@mui/material';\r\n\r\nexport interface ButtonGroupProps extends MuiButtonGroupProps {\r\n // Inherits all MUI ButtonGroup props\r\n}\r\n\r\nexport const ButtonGroup: React.FC<ButtonGroupProps> = (props) => {\r\n return (\r\n <MuiButtonGroup\r\n variant=\"outlined\"\r\n color=\"secondary\"\r\n size=\"medium\"\r\n {...props}\r\n />\r\n );\r\n};\r\n","import React from 'react';\r\nimport { Checkbox as MuiCheckbox, CheckboxProps as MuiCheckboxProps, FormControlLabel, SvgIcon } from '@mui/material';\r\nimport { DesignSystemColor } from '../../theme/types';\r\n\r\n// Custom unchecked icon - empty box with border\r\nconst UncheckedIcon = ({ size = 20 }: { size?: number }) => (\r\n <SvgIcon sx={{ fontSize: size }}>\r\n <rect\r\n x=\"2\"\r\n y=\"2\"\r\n width=\"20\"\r\n height=\"20\"\r\n rx=\"4\"\r\n fill=\"white\"\r\n stroke=\"#D5D7DA\"\r\n strokeWidth=\"1.5\"\r\n />\r\n </SvgIcon>\r\n);\r\n\r\n// Custom checked icon - filled box with checkmark\r\nconst CheckedIcon = ({ size = 20 }: { size?: number }) => (\r\n <SvgIcon sx={{ fontSize: size }}>\r\n <rect x=\"0\" y=\"0\" width=\"24\" height=\"24\" rx=\"4\" fill=\"#1EAE52\" />\r\n <path\r\n d=\"M9.5 16.5L5.5 12.5L6.91 11.09L9.5 13.67L17.09 6.09L18.5 7.5L9.5 16.5Z\"\r\n fill=\"white\"\r\n />\r\n </SvgIcon>\r\n);\r\n\r\n// Custom indeterminate icon - filled box with dash\r\nconst IndeterminateIcon = ({ size = 20 }: { size?: number }) => (\r\n <SvgIcon sx={{ fontSize: size }}>\r\n <rect x=\"0\" y=\"0\" width=\"24\" height=\"24\" rx=\"4\" fill=\"#1EAE52\" />\r\n <rect x=\"6\" y=\"11\" width=\"12\" height=\"2\" rx=\"1\" fill=\"white\" />\r\n </SvgIcon>\r\n);\r\n\r\n// Small versions\r\nconst UncheckedIconSmall = () => <UncheckedIcon size={16} />;\r\nconst CheckedIconSmall = () => <CheckedIcon size={16} />;\r\nconst IndeterminateIconSmall = () => <IndeterminateIcon size={16} />;\r\n\r\nexport interface CheckboxProps extends Omit<MuiCheckboxProps, 'color' | 'size'> {\r\n /**\r\n * Optional label to display next to the checkbox\r\n */\r\n label?: string;\r\n /**\r\n * The color of the checkbox when checked\r\n */\r\n color?: DesignSystemColor;\r\n /**\r\n * The size of the checkbox\r\n * @default 'medium'\r\n */\r\n size?: 'small' | 'medium';\r\n}\r\n\r\n// Map design system colors to MUI colors\r\nconst mapColorToMui = (color?: DesignSystemColor): MuiCheckboxProps['color'] => {\r\n if (!color) return undefined;\r\n const colorMap: Record<string, MuiCheckboxProps['color']> = {\r\n 'primary': 'primary',\r\n 'secondary': 'secondary',\r\n 'error': 'error',\r\n 'success': 'success',\r\n 'warning': 'warning',\r\n };\r\n return colorMap[color];\r\n};\r\n\r\n/**\r\n * Checkbox component following the design system specifications.\r\n *\r\n * Features:\r\n * - Two sizes: small (16x16px) and medium (20x20px)\r\n * - Green checked state with hover effect\r\n * - Focus ring on keyboard navigation\r\n * - Disabled state styling\r\n * - Indeterminate state support\r\n */\r\nexport const Checkbox = ({ label, size = 'medium', color, ...props }: CheckboxProps) => {\r\n const isSmall = size === 'small';\r\n\r\n const checkboxComponent = (\r\n <MuiCheckbox\r\n size={size}\r\n color={mapColorToMui(color)}\r\n icon={isSmall ? <UncheckedIconSmall /> : <UncheckedIcon />}\r\n checkedIcon={isSmall ? <CheckedIconSmall /> : <CheckedIcon />}\r\n indeterminateIcon={isSmall ? <IndeterminateIconSmall /> : <IndeterminateIcon />}\r\n {...props}\r\n />\r\n );\r\n\r\n if (label) {\r\n return (\r\n <FormControlLabel control={checkboxComponent} label={label} />\r\n );\r\n }\r\n return checkboxComponent;\r\n};\r\n","import React from 'react';\r\nimport { Switch as MuiSwitch, SwitchProps as MuiSwitchProps, FormControlLabel } from '@mui/material';\r\nimport { DesignSystemColor } from '../../theme/types';\r\n\r\nexport interface ToggleProps extends Omit<MuiSwitchProps, 'color'> {\r\n /**\r\n * Optional label to display next to the toggle\r\n */\r\n label?: string;\r\n /**\r\n * The color of the toggle when checked\r\n */\r\n color?: DesignSystemColor;\r\n /**\r\n * The size of the toggle\r\n * @default 'medium'\r\n */\r\n size?: 'small' | 'medium';\r\n}\r\n\r\n/**\r\n * Toggle component (Switch) following the design system specifications.\r\n *\r\n * Features:\r\n * - Two sizes: small (sm: 36x20px) and medium (md: 44x24px)\r\n * - Green checked state with hover effect\r\n * - Focus ring on keyboard navigation\r\n * - Disabled state styling\r\n */\r\nexport const Toggle = ({ label, size = 'medium', color, ...props }: ToggleProps) => {\r\n // Map design system colors to MUI Switch colors or use default\r\n const muiColor: MuiSwitchProps['color'] = \r\n color === 'primary' || color === 'secondary' || color === 'error' || \r\n color === 'warning' || color === 'success' \r\n ? color \r\n : 'primary';\r\n \r\n const switchComponent = <MuiSwitch size={size} color={muiColor} {...props} />;\r\n\r\n if (label) {\r\n return (\r\n <FormControlLabel control={switchComponent} label={label} />\r\n );\r\n }\r\n return switchComponent;\r\n};\r\n","import React from 'react';\r\nimport { Chip as MuiChip, ChipProps as MuiChipProps } from '@mui/material';\r\nexport type TagSize = 'small' | 'medium' | 'large';\r\nexport type TagVariant = 'filled' | 'outlined';\r\nexport type TagColor = 'primary' | 'secondary' | 'error' | 'success';\r\n\r\nexport interface TagProps extends Omit<MuiChipProps, 'color' | 'size' | 'variant'> {\r\n label?: string;\r\n color?: TagColor;\r\n size?: TagSize;\r\n variant?: TagVariant;\r\n icon?: React.ReactElement;\r\n onDelete?: (event: any) => void;\r\n deleteIcon?: React.ReactElement;\r\n avatar?: React.ReactElement;\r\n clickable?: boolean;\r\n}\r\n\r\n/**\r\n * Tag component (wrapper for MUI Chip)\r\n *\r\n * A compact element that represents an input, attribute, or action.\r\n * Tags can be used in Autocomplete components with the limitTags prop.\r\n *\r\n * @example\r\n * // Basic tag\r\n * <Tag label=\"Tag Label\" color=\"primary\" />\r\n *\r\n * @example\r\n * // Deletable tag\r\n * <Tag label=\"Deletable\" color=\"primary\" onDelete={() => handleDelete()} />\r\n *\r\n * @example\r\n * // With Autocomplete (limit tags)\r\n * <Autocomplete\r\n * multiple\r\n * limitTags={2}\r\n * options={options}\r\n * renderTags={(value, getTagProps) =>\r\n * value.map((option, index) => (\r\n * <Tag\r\n * label={option}\r\n * {...getTagProps({ index })}\r\n * />\r\n * ))\r\n * }\r\n * />\r\n */\r\nexport const Tag: React.FC<TagProps> = ({\r\n label,\r\n color = 'primary',\r\n size = 'medium',\r\n variant = 'filled',\r\n icon,\r\n onDelete,\r\n deleteIcon,\r\n avatar,\r\n clickable,\r\n ...props\r\n}) => {\r\n return (\r\n <MuiChip\r\n label={label}\r\n color={color}\r\n size={size}\r\n variant={variant}\r\n icon={icon}\r\n onDelete={onDelete}\r\n deleteIcon={deleteIcon}\r\n avatar={avatar}\r\n clickable={clickable}\r\n {...props}\r\n />\r\n );\r\n};\r\n","import React from 'react';\r\nimport { Radio as MuiRadio, RadioGroup as MuiRadioGroup, RadioGroupProps as MuiRadioGroupProps, FormControlLabel, RadioProps as MuiRadioProps, styled } from '@mui/material';\r\nimport { DesignSystemColor } from '../../theme/types';\r\nimport tokens from '../../tokens/tokens.json';\r\n\r\n// Design tokens from Figma\r\nconst COLORS = {\r\n borderPrimary: tokens.color.secondary[300],\r\n borderDisabled: tokens.color.secondary[300],\r\n bgBrandSolid: '#1EAE52',\r\n bgDisabledSubtle: tokens.color.gray[50],\r\n fgWhite: tokens.color.base.white,\r\n fgDisabledSubtle:tokens.color.gray[300],\r\n focusRing: tokens.effects.focusRings['focus-ring'],\r\n bgPrimary: tokens.color.base.white,\r\n};\r\n\r\n// Styled icon containers\r\nconst RadioIcon = styled('span')<{ size: number }>(({ size }) => ({\r\n width: size,\r\n height: size,\r\n display: 'flex',\r\n alignItems: 'center',\r\n justifyContent: 'center',\r\n}));\r\n\r\n// Custom unchecked icon - empty circle with border (no fill per Figma design)\r\nconst UncheckedIcon = ({ size = 20, disabled = false }: { size?: number; disabled?: boolean }) => (\r\n <RadioIcon size={size}>\r\n <svg width={size} height={size} viewBox={`0 0 ${size} ${size}`} fill=\"none\">\r\n <circle\r\n cx={size / 2}\r\n cy={size / 2}\r\n r={size / 2 - 0.5}\r\n fill={disabled ? COLORS.bgDisabledSubtle : 'none'}\r\n stroke={disabled ? COLORS.borderDisabled : COLORS.borderPrimary}\r\n strokeWidth=\"1\"\r\n />\r\n </svg>\r\n </RadioIcon>\r\n);\r\n\r\n// Custom checked icon - solid green background with white center dot (per Figma design)\r\nconst CheckedIcon = ({ size = 20, disabled = false }: { size?: number; disabled?: boolean }) => {\r\n // Center dot inset: 31.25% for sm (16px), 30% for md (20px)\r\n const insetPercent = size === 16 ? 0.3125 : 0.30;\r\n const centerDotRadius = (size / 2) * (1 - insetPercent * 2);\r\n\r\n return (\r\n <RadioIcon size={size}>\r\n <svg width={size} height={size} viewBox={`0 0 ${size} ${size}`} fill=\"none\">\r\n {disabled ? (\r\n <>\r\n {/* Disabled state: gray background with border and gray dot */}\r\n <circle\r\n cx={size / 2}\r\n cy={size / 2}\r\n r={size / 2 - 0.5}\r\n fill={COLORS.bgDisabledSubtle}\r\n stroke={COLORS.borderDisabled}\r\n strokeWidth=\"1\"\r\n />\r\n <circle\r\n cx={size / 2}\r\n cy={size / 2}\r\n r={centerDotRadius}\r\n fill={COLORS.fgDisabledSubtle}\r\n />\r\n </>\r\n ) : (\r\n <>\r\n {/* Active state: solid green background with white dot */}\r\n <circle\r\n cx={size / 2}\r\n cy={size / 2}\r\n r={size / 2}\r\n fill={COLORS.bgBrandSolid}\r\n />\r\n <circle\r\n cx={size / 2}\r\n cy={size / 2}\r\n r={centerDotRadius}\r\n fill={COLORS.fgWhite}\r\n />\r\n </>\r\n )}\r\n </svg>\r\n </RadioIcon>\r\n );\r\n};\r\n\r\nexport interface RadioOption {\r\n label: string;\r\n value: string | number;\r\n disabled?: boolean;\r\n}\r\n\r\nexport interface RadioProps extends Omit<MuiRadioProps, 'color'> {\r\n /**\r\n * The color of the radio when checked\r\n */\r\n color?: DesignSystemColor;\r\n /**\r\n * The size of the radio\r\n * @default 'medium'\r\n */\r\n size?: 'small' | 'medium';\r\n}\r\n\r\n// Styled Radio with focus ring per Figma design\r\nconst StyledRadio = styled(MuiRadio)(() => ({\r\n padding: 4,\r\n '&:hover': {\r\n backgroundColor: 'transparent',\r\n },\r\n '&.Mui-focusVisible': {\r\n '& .MuiSvgIcon-root, & > span': {\r\n borderRadius: '50%',\r\n boxShadow: `0px 0px 0px 2px ${COLORS.bgPrimary}, 0px 0px 0px 4px ${COLORS.focusRing}`,\r\n },\r\n },\r\n '&.Mui-disabled': {\r\n opacity: 1,\r\n },\r\n}));\r\n\r\n/**\r\n * Radio component following the design system specifications.\r\n *\r\n * Features:\r\n * - Two sizes: small (16x16px) and medium (20x20px)\r\n * - Green checked state with solid background and white dot\r\n * - Focus ring on keyboard navigation\r\n * - Disabled state styling\r\n */\r\nexport const Radio = ({ size = 'medium', disabled, color, ...props }: RadioProps) => {\r\n const iconSize = size === 'small' ? 16 : 20;\r\n \r\n // Map design system colors to MUI Radio colors or use default\r\n const muiColor: MuiRadioProps['color'] = \r\n color === 'primary' || color === 'secondary' || color === 'error' || \r\n color === 'warning' || color === 'success' \r\n ? color \r\n : 'primary';\r\n\r\n return (\r\n <StyledRadio\r\n size={size}\r\n disabled={disabled}\r\n color={muiColor}\r\n icon={<UncheckedIcon size={iconSize} disabled={disabled} />}\r\n checkedIcon={<CheckedIcon size={iconSize} disabled={disabled} />}\r\n disableRipple\r\n {...props}\r\n />\r\n );\r\n};\r\n\r\nexport interface RadioGroupProps extends Omit<MuiRadioGroupProps, 'color'> {\r\n options: RadioOption[];\r\n color?: DesignSystemColor;\r\n /**\r\n * The size of the radio buttons\r\n * @default 'medium'\r\n */\r\n size?: 'small' | 'medium';\r\n}\r\n\r\n/**\r\n * RadioGroup component following the design system specifications.\r\n */\r\nexport const RadioGroup = ({ options, color = 'primary', size = 'medium', ...props }: RadioGroupProps) => {\r\n return (\r\n <MuiRadioGroup {...props}>\r\n {options.map((option) => (\r\n <FormControlLabel\r\n key={option.value}\r\n value={option.value}\r\n control={<Radio size={size} disabled={option.disabled} />}\r\n label={option.label}\r\n sx={{\r\n marginLeft: 0,\r\n '& .MuiFormControlLabel-label': {\r\n marginLeft: '8px',\r\n }\r\n }}\r\n />\r\n ))}\r\n </MuiRadioGroup>\r\n );\r\n};\r\n","import React from 'react';\r\nimport { TextField as MuiTextField, TextFieldProps as MuiTextFieldProps } from '@mui/material';\r\nimport { DesignSystemColor } from '../../theme/types';\r\n\r\nexport interface InputProps extends Omit<MuiTextFieldProps, 'color' | 'size'> {\r\n /**\r\n * The color of the input field\r\n */\r\n color?: DesignSystemColor;\r\n /**\r\n * The size of the input field\r\n * @default 'medium'\r\n */\r\n size?: 'small' | 'medium';\r\n}\r\n\r\n// Map design system colors to MUI colors\r\nconst mapColorToMui = (color?: DesignSystemColor): MuiTextFieldProps['color'] => {\r\n if (!color) return undefined;\r\n const colorMap: Record<string, MuiTextFieldProps['color']> = {\r\n 'primary': 'primary',\r\n 'secondary': 'secondary',\r\n 'error': 'error',\r\n 'success': 'success',\r\n 'warning': 'warning',\r\n };\r\n return colorMap[color];\r\n};\r\n\r\n/**\r\n * Input component following the design system specifications.\r\n *\r\n * Features:\r\n * - Two sizes: small (sm) and medium (md)\r\n * - Support for leading and trailing adornments\r\n * - Error state with destructive styling\r\n * - Disabled state\r\n * - Helper text support\r\n */\r\nexport const Input = ({ size = 'medium', color, ...props }: InputProps) => {\r\n return (\r\n <MuiTextField\r\n variant=\"outlined\"\r\n fullWidth\r\n size={size}\r\n color={mapColorToMui(color)}\r\n {...props}\r\n />\r\n );\r\n};\r\n","import React from 'react';\r\nimport { TextField as MuiTextField, TextFieldProps as MuiTextFieldProps } from '@mui/material';\r\nimport { DesignSystemColor } from '../../theme/types';\r\n\r\nexport interface TextAreaProps extends Omit<MuiTextFieldProps, 'color' | 'multiline'> {\r\n /**\r\n * The color of the textarea field\r\n */\r\n color?: DesignSystemColor;\r\n /**\r\n * Minimum number of rows to display\r\n * @default 4\r\n */\r\n minRows?: number;\r\n /**\r\n * Maximum number of rows to display before scrolling\r\n */\r\n maxRows?: number;\r\n}\r\n\r\n// Map design system colors to MUI colors\r\nconst mapColorToMui = (color?: DesignSystemColor): MuiTextFieldProps['color'] => {\r\n if (!color) return undefined;\r\n const colorMap: Record<string, MuiTextFieldProps['color']> = {\r\n 'primary': 'primary',\r\n 'secondary': 'secondary',\r\n 'error': 'error',\r\n 'success': 'success',\r\n 'warning': 'warning',\r\n };\r\n return colorMap[color];\r\n};\r\n\r\n/**\r\n * TextArea component following the design system specifications.\r\n *\r\n * A multiline input field for longer text content.\r\n *\r\n * Features:\r\n * - Resizable textarea with optional min/max rows\r\n * - Error state with destructive styling\r\n * - Disabled state\r\n * - Helper text support\r\n * - Label with required indicator\r\n */\r\nexport const TextArea = ({\r\n minRows = 4,\r\n maxRows,\r\n color,\r\n ...props\r\n}: TextAreaProps) => {\r\n return (\r\n <MuiTextField\r\n variant=\"outlined\"\r\n fullWidth\r\n multiline\r\n minRows={minRows}\r\n maxRows={maxRows}\r\n color={mapColorToMui(color)}\r\n {...props}\r\n />\r\n );\r\n};\r\n","import React from 'react';\r\nimport { Badge as MuiBadge, BadgeProps as MuiBadgeProps, Box } from '@mui/material';\r\nimport { DesignSystemColor } from '../../theme/types';\r\nimport { mapColorToMui } from '../../utils/colorMapping';\r\nimport tokens from '../../tokens/tokens.json';\r\n\r\nexport interface BadgeProps extends Omit<MuiBadgeProps, 'color' | 'variant' | 'content'> {\r\n color?: DesignSystemColor;\r\n /**\r\n * Size of the badge\r\n */\r\n size?: 'sm' | 'md';\r\n /**\r\n * Variant: 'dot' for overlay badge (default MUI behavior), 'inline' for pill badge next to content\r\n * @default 'dot'\r\n */\r\n variant?: 'dot' | 'inline';\r\n /**\r\n * For inline variant: the content to display in the badge\r\n */\r\n content?: React.ReactNode;\r\n /**\r\n * Whether the badge represents an active/selected state (for inline variant)\r\n */\r\n active?: boolean;\r\n}\r\n\r\nexport const Badge = ({ color, size, variant = 'dot', content, active = false, ...props }: BadgeProps) => {\r\n // Inline variant: render as a pill badge\r\n if (variant === 'inline') {\r\n const isSuccess = color === 'success';\r\n const isBrand = active || isSuccess;\r\n const badgeValue = content || props.badgeContent;\r\n const isSingleChar = typeof badgeValue === 'number' || (typeof badgeValue === 'string' && badgeValue.length === 1);\r\n\r\n return (\r\n <Box\r\n component=\"span\"\r\n sx={{\r\n display: 'inline-flex',\r\n alignItems: 'center',\r\n justifyContent: 'center',\r\n minWidth: isSingleChar ? '20px' : 'auto',\r\n height: '20px',\r\n px: isSingleChar ? '4px' : '8px',\r\n borderRadius: `${tokens.borderRadius.full}px`,\r\n border: '1px solid',\r\n backgroundColor: isBrand ? tokens.color.primary['50'] : tokens.color.gray['50'],\r\n borderColor: isBrand ? tokens.color.primary['200'] : tokens.color.gray['200'],\r\n fontSize: tokens.typography.fontSize['text-xs'],\r\n lineHeight: tokens.typography.lineHeight['text-xs'],\r\n fontWeight: tokens.typography.fontWeight.medium,\r\n color: isBrand ? tokens.color.primary['700'] : tokens.color.gray['700'],\r\n flexShrink: 0,\r\n position: 'relative',\r\n verticalAlign: 'middle',\r\n ml: '4px',\r\n }}\r\n >\r\n {badgeValue}\r\n </Box>\r\n );\r\n }\r\n\r\n // Default: use MUI Badge for overlay/dot badges\r\n return <MuiBadge color={mapColorToMui(color)} {...props} />;\r\n};\r\n","import { DesignSystemColor } from '../theme/types';\r\n\r\n/**\r\n * Maps design system colors to MUI-compatible colors\r\n * This utility ensures type safety when passing custom colors to MUI components\r\n */\r\nexport const mapColorToMui = <T extends string = 'primary' | 'secondary' | 'error' | 'success' | 'warning' | 'inherit'>(\r\n color?: DesignSystemColor | 'inherit' | 'default' | 'standard' | 'textPrimary' | 'textSecondary' | 'initial' | 'transparent'\r\n): T | undefined => {\r\n if (!color) return undefined;\r\n\r\n const colorMap: Record<string, string> = {\r\n 'base': 'primary',\r\n 'gray': 'secondary',\r\n 'gray-dark': 'secondary',\r\n 'primary': 'primary',\r\n 'secondary': 'secondary',\r\n 'error': 'error',\r\n 'success': 'success',\r\n 'warning': 'warning',\r\n 'inherit': 'inherit',\r\n 'default': 'default',\r\n 'standard': 'standard',\r\n 'textPrimary': 'textPrimary',\r\n 'textSecondary': 'textSecondary',\r\n 'initial': 'initial',\r\n 'transparent': 'transparent',\r\n };\r\n\r\n return (colorMap[color] as T) || ('primary' as T);\r\n};\r\n","import React from 'react';\r\nimport { Avatar as MuiAvatar, AvatarProps as MuiAvatarProps, styled, Box } from '@mui/material';\r\nimport { PersonOutlineIcon } from '../../theme/icons';\r\n\r\n// Design tokens from Figma\r\nconst COLORS = {\r\n bgPrimary: '#FFFFFF',\r\n bgTertiary: '#F5F5F5',\r\n borderSecondaryAlt: 'rgba(0, 0, 0, 0.08)',\r\n textQuaternary: '#717680',\r\n iconPlaceholder: '#A4A7AE',\r\n verifiedBlue: '#2E90FA',\r\n};\r\n\r\nexport type AvatarSize = 'xxs' | 'xs' | 'sm' | 'md' | 'lg';\r\n\r\nexport interface AvatarProps extends Omit<MuiAvatarProps, 'variant'> {\r\n /**\r\n * Size of the avatar\r\n * @default 'sm'\r\n */\r\n size?: AvatarSize;\r\n /**\r\n * Whether to show placeholder (user icon or initials) instead of image\r\n * @default false\r\n */\r\n placeholder?: boolean;\r\n /**\r\n * Initials to display when placeholder is true and text is provided\r\n */\r\n initials?: string;\r\n /**\r\n * Whether to show the verified badge\r\n * @default false\r\n */\r\n verified?: boolean;\r\n}\r\n\r\n// Size configurations from Figma\r\nconst sizeConfig = {\r\n xxs: {\r\n size: 24,\r\n padding: 1,\r\n iconSize: 16,\r\n fontSize: 10,\r\n lineHeight: 12,\r\n badgeSize: 8,\r\n badgeOffset: 0,\r\n },\r\n xs: {\r\n size: 32,\r\n padding: 2,\r\n iconSize: 20,\r\n fontSize: 12,\r\n lineHeight: 14,\r\n badgeSize: 10,\r\n badgeOffset: 0,\r\n },\r\n sm: {\r\n size: 72,\r\n padding: 4,\r\n iconSize: 54,\r\n fontSize: 30,\r\n lineHeight: 38,\r\n badgeSize: 20,\r\n badgeOffset: 2,\r\n },\r\n md: {\r\n size: 96,\r\n padding: 5,\r\n iconSize: 96,\r\n fontSize: 36,\r\n lineHeight: 44,\r\n badgeSize: 24,\r\n badgeOffset: 4,\r\n },\r\n lg: {\r\n size: 160,\r\n padding: 7,\r\n iconSize: 216,\r\n fontSize: 60,\r\n lineHeight: 72,\r\n badgeSize: 32,\r\n badgeOffset: 8,\r\n },\r\n};\r\n\r\n// Wrapper component - white background with subtle border\r\nconst AvatarWrapper = styled(Box)<{ ownerState: { size: AvatarSize } }>(({ ownerState }) => {\r\n const config = sizeConfig[ownerState.size];\r\n return {\r\n position: 'relative',\r\n width: config.size,\r\n height: config.size,\r\n borderRadius: '50%',\r\n };\r\n});\r\n\r\nconst AvatarOuter = styled(Box)<{ ownerState: { size: AvatarSize } }>(({ ownerState }) => {\r\n const config = sizeConfig[ownerState.size];\r\n return {\r\n position: 'absolute',\r\n top: 0,\r\n left: 0,\r\n width: config.size,\r\n height: config.size,\r\n borderRadius: '50%',\r\n backgroundColor: COLORS.bgPrimary,\r\n border: `1px solid ${COLORS.borderSecondaryAlt}`,\r\n padding: config.padding,\r\n boxSizing: 'border-box',\r\n display: 'flex',\r\n alignItems: 'center',\r\n justifyContent: 'center',\r\n };\r\n});\r\n\r\nconst AvatarContent = styled(Box)<{ ownerState: { size: AvatarSize; placeholder?: boolean } }>(({ ownerState }) => {\r\n const config = sizeConfig[ownerState.size];\r\n const innerSize = config.size - (config.padding * 2) - 2; // Account for border\r\n return {\r\n width: innerSize,\r\n height: innerSize,\r\n borderRadius: '50%',\r\n border: `1px solid ${COLORS.borderSecondaryAlt}`,\r\n backgroundColor: ownerState.placeholder ? COLORS.bgTertiary : 'transparent',\r\n overflow: 'hidden',\r\n display: 'flex',\r\n alignItems: 'center',\r\n justifyContent: 'center',\r\n position: 'relative',\r\n };\r\n});\r\n\r\nconst StyledAvatar = styled(MuiAvatar)(() => ({\r\n width: '100%',\r\n height: '100%',\r\n borderRadius: '50%',\r\n}));\r\n\r\nconst PlaceholderIcon = styled(PersonOutlineIcon)<{ ownerState: { size: AvatarSize } }>(({ ownerState }) => {\r\n const config = sizeConfig[ownerState.size];\r\n const iconDisplaySize = ownerState.size === 'xxs' ? 16 : ownerState.size === 'xs' ? 20 : ownerState.size === 'sm' ? 36 : ownerState.size === 'md' ? 56 : 100;\r\n return {\r\n color: COLORS.iconPlaceholder,\r\n fontSize: iconDisplaySize,\r\n };\r\n});\r\n\r\nconst InitialsText = styled('span')<{ ownerState: { size: AvatarSize } }>(({ ownerState }) => {\r\n const config = sizeConfig[ownerState.size];\r\n return {\r\n fontFamily: '\"DM Sans\", sans-serif',\r\n fontWeight: 600,\r\n fontSize: config.fontSize,\r\n lineHeight: `${config.lineHeight}px`,\r\n color: COLORS.textQuaternary,\r\n textAlign: 'center',\r\n letterSpacing: ownerState.size === 'sm' ? 0 : '-0.02em',\r\n };\r\n});\r\n\r\n// Verified badge SVG component\r\nconst VerifiedBadge = ({ size }: { size: number }) => (\r\n <svg width={size} height={size} viewBox=\"0 0 20 20\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <path\r\n d=\"M10 0L12.2451 2.06621L15.2647 1.67557L15.9563 4.63932L18.6603 5.86824L17.5 8.66025L18.6603 11.4523L15.9563 12.6812L15.2647 15.6449L12.2451 15.2543L10 17.3205L7.75486 15.2543L4.73528 15.6449L4.04371 12.6812L1.33975 11.4523L2.5 8.66025L1.33975 5.86824L4.04371 4.63932L4.73528 1.67557L7.75486 2.06621L10 0Z\"\r\n fill={COLORS.verifiedBlue}\r\n />\r\n <path\r\n d=\"M6.5 9.5L8.5 11.5L13.5 6.5\"\r\n stroke=\"white\"\r\n strokeWidth=\"1.5\"\r\n strokeLinecap=\"round\"\r\n strokeLinejoin=\"round\"\r\n />\r\n </svg>\r\n);\r\n\r\nconst BadgeWrapper = styled(Box)<{ ownerState: { size: AvatarSize } }>(({ ownerState }) => {\r\n const config = sizeConfig[ownerState.size];\r\n return {\r\n position: 'absolute',\r\n bottom: config.badgeOffset,\r\n right: config.badgeOffset,\r\n width: config.badgeSize,\r\n height: config.badgeSize,\r\n zIndex: 1,\r\n };\r\n});\r\n\r\n/**\r\n * Avatar component following the design system specifications.\r\n *\r\n * Features:\r\n * - Three sizes: sm (72px), md (96px), lg (160px)\r\n * - Wrapper with white background and subtle border\r\n * - Placeholder state with user icon\r\n * - Initials state with text\r\n * - Optional verified badge\r\n */\r\nexport const Avatar = ({\r\n size = 'sm',\r\n placeholder = false,\r\n initials,\r\n verified = false,\r\n src,\r\n alt,\r\n children,\r\n sx,\r\n ...props\r\n}: AvatarProps) => {\r\n const showPlaceholder = placeholder || (!src && !children);\r\n const showInitials = showPlaceholder && initials;\r\n\r\n return (\r\n <AvatarWrapper ownerState={{ size }}>\r\n <AvatarOuter ownerState={{ size }}>\r\n <AvatarContent ownerState={{ size, placeholder: showPlaceholder }}>\r\n {showInitials ? (\r\n <InitialsText ownerState={{ size }}>{initials}</InitialsText>\r\n ) : showPlaceholder ? (\r\n <PlaceholderIcon ownerState={{ size }} />\r\n ) : (\r\n <StyledAvatar src={src} alt={alt} sx={sx} {...props}>\r\n {children}\r\n </StyledAvatar>\r\n )}\r\n </AvatarContent>\r\n </AvatarOuter>\r\n {verified && (\r\n <BadgeWrapper ownerState={{ size }}>\r\n <VerifiedBadge size={sizeConfig[size].badgeSize} />\r\n </BadgeWrapper>\r\n )}\r\n </AvatarWrapper>\r\n );\r\n};\r\n","/**\r\n * Centralized Icon Exports\r\n * \r\n * All icons used in the design system are exported from this file.\r\n * To add a new icon, simply add an export line here.\r\n * \r\n * Usage:\r\n * import { SearchIcon, MenuIcon } from '../theme/icons';\r\n * // or\r\n * import { Icons } from '../theme/icons';\r\n * <Icons.Search />\r\n */\r\n\r\n// Navigation Icons\r\nexport { default as CloseIcon } from '@mui/icons-material/Close';\r\nexport { default as MenuIcon } from '@mui/icons-material/Menu';\r\nexport { default as ChevronLeftIcon } from '@mui/icons-material/ChevronLeft';\r\nexport { default as ChevronRightIcon } from '@mui/icons-material/ChevronRight';\r\nexport { default as KeyboardArrowDownIcon } from '@mui/icons-material/KeyboardArrowDown';\r\nexport { default as KeyboardArrowUpIcon } from '@mui/icons-material/KeyboardArrowUp';\r\nexport { default as KeyboardArrowRightIcon } from '@mui/icons-material/KeyboardArrowRight';\r\nexport { default as OpenInNewIcon } from '@mui/icons-material/OpenInNew';\r\nexport { default as LogoutOutlinedIcon } from '@mui/icons-material/LogoutOutlined';\r\n\r\n// Action Icons\r\nexport { default as AddIcon } from '@mui/icons-material/Add';\r\nexport { default as EditIcon } from '@mui/icons-material/Edit';\r\nexport { default as DeleteIcon } from '@mui/icons-material/Delete';\r\nexport { default as DeleteOutlineIcon } from '@mui/icons-material/DeleteOutline';\r\nexport { default as ContentCopyIcon } from '@mui/icons-material/ContentCopy';\r\nexport { default as SendIcon } from '@mui/icons-material/Send';\r\nexport { default as SearchIcon } from '@mui/icons-material/Search';\r\nexport { default as CloudUploadIcon } from '@mui/icons-material/CloudUpload';\r\nexport { default as CloudUploadOutlinedIcon } from '@mui/icons-material/CloudUploadOutlined';\r\nexport { default as CloudDownloadIcon } from '@mui/icons-material/CloudDownload';\r\nexport { default as DownloadIcon } from '@mui/icons-material/Download';\r\nexport { default as AttachFileIcon } from '@mui/icons-material/AttachFile';\r\nexport { default as CreateIcon } from '@mui/icons-material/Create';\r\nexport { default as PlayArrowIcon } from '@mui/icons-material/PlayArrow';\r\nexport { default as UploadFileIcon } from '@mui/icons-material/UploadFile';\r\nexport { default as PauseIcon } from '@mui/icons-material/Pause';\r\nexport { default as VolumeUpIcon } from '@mui/icons-material/VolumeUp';\r\nexport { default as FullscreenIcon } from '@mui/icons-material/Fullscreen';\r\n\r\n// Status Icons\r\nexport { default as CheckIcon } from '@mui/icons-material/Check';\r\nexport { default as CheckCircleIcon } from '@mui/icons-material/CheckCircle';\r\nexport { default as CheckCircleOutlineIcon } from '@mui/icons-material/CheckCircleOutline';\r\nexport { default as CheckCircleOutlinedIcon } from '@mui/icons-material/CheckCircleOutlined';\r\nexport { default as ErrorOutlineIcon } from '@mui/icons-material/ErrorOutline';\r\nexport { default as ErrorOutlinedIcon } from '@mui/icons-material/ErrorOutlined';\r\nexport { default as WarningAmberIcon } from '@mui/icons-material/WarningAmber';\r\nexport { default as WarningAmberOutlinedIcon } from '@mui/icons-material/WarningAmberOutlined';\r\nexport { default as InfoOutlinedIcon } from '@mui/icons-material/InfoOutlined';\r\nexport { default as VerifiedIcon } from '@mui/icons-material/Verified';\r\nexport { default as CancelOutlinedIcon } from '@mui/icons-material/CancelOutlined';\r\n\r\n// Social Icons\r\nexport { default as GitHubIcon } from '@mui/icons-material/GitHub';\r\nexport { default as TwitterIcon } from '@mui/icons-material/Twitter';\r\nexport { default as LinkedInIcon } from '@mui/icons-material/LinkedIn';\r\nexport { default as PublicIcon } from '@mui/icons-material/Public';\r\nexport { default as EmailIcon } from '@mui/icons-material/Email';\r\nexport { default as MailIcon } from '@mui/icons-material/Mail';\r\n\r\n// Content Icons\r\nexport { default as FolderIcon } from '@mui/icons-material/FolderOutlined';\r\nexport { default as FolderOutlinedIcon } from '@mui/icons-material/FolderOutlined';\r\nexport { default as DescriptionIcon } from '@mui/icons-material/DescriptionOutlined';\r\nexport { default as DescriptionOutlinedIcon } from '@mui/icons-material/DescriptionOutlined';\r\nexport { default as ArticleOutlinedIcon } from '@mui/icons-material/ArticleOutlined';\r\nexport { default as InsertDriveFileOutlinedIcon } from '@mui/icons-material/InsertDriveFileOutlined';\r\nexport { default as ImageIcon } from '@mui/icons-material/Image';\r\n\r\n// User & People Icons\r\nexport { default as PersonIcon } from '@mui/icons-material/Person';\r\nexport { default as PersonOutlineIcon } from '@mui/icons-material/PersonOutline';\r\nexport { default as PeopleOutlinedIcon } from '@mui/icons-material/PeopleOutlined';\r\nexport { default as GroupAddOutlinedIcon } from '@mui/icons-material/GroupAddOutlined';\r\n\r\n// Settings & System Icons\r\nexport { default as SettingsIcon } from '@mui/icons-material/Settings';\r\nexport { default as SettingsOutlinedIcon } from '@mui/icons-material/SettingsOutlined';\r\nexport { default as NotificationsIcon } from '@mui/icons-material/Notifications';\r\nexport { default as NotificationsOutlinedIcon } from '@mui/icons-material/NotificationsOutlined';\r\nexport { default as HelpOutlineIcon } from '@mui/icons-material/HelpOutline';\r\nexport { default as MoreVertIcon } from '@mui/icons-material/MoreVert';\r\n\r\n// Dashboard & Analytics Icons\r\nexport { default as DashboardOutlinedIcon } from '@mui/icons-material/DashboardOutlined';\r\nexport { default as BarChartIcon } from '@mui/icons-material/BarChart';\r\nexport { default as BarChartOutlinedIcon } from '@mui/icons-material/BarChartOutlined';\r\nexport { default as AssessmentOutlinedIcon } from '@mui/icons-material/AssessmentOutlined';\r\nexport { default as CircleIcon } from '@mui/icons-material/Circle';\r\n\r\n// Home & Navigation Icons\r\nexport { default as HomeOutlinedIcon } from '@mui/icons-material/HomeOutlined';\r\nexport { default as AssignmentOutlinedIcon } from '@mui/icons-material/AssignmentOutlined';\r\n\r\n// Time & Calendar Icons\r\nexport { default as AccessTimeIcon } from '@mui/icons-material/AccessTime';\r\nexport { default as CalendarTodayIcon } from '@mui/icons-material/CalendarToday';\r\nexport { default as CalendarTodayOutlinedIcon } from '@mui/icons-material/CalendarTodayOutlined';\r\nexport { default as AlarmIcon } from '@mui/icons-material/Alarm';\r\n\r\n// Misc Icons\r\nexport { default as FlashOnIcon } from '@mui/icons-material/FlashOn';\r\nexport { default as BoltIcon } from '@mui/icons-material/Bolt';\r\nexport { default as AutoAwesomeIcon } from '@mui/icons-material/AutoAwesome';\r\nexport { default as MicIcon } from '@mui/icons-material/Mic';\r\nexport { default as LinkIcon } from '@mui/icons-material/Link';\r\nexport { default as BookmarkBorderIcon } from '@mui/icons-material/BookmarkBorder';\r\nexport { default as CreditCardIcon } from '@mui/icons-material/CreditCard';\r\nexport { default as IntegrationInstructionsIcon } from '@mui/icons-material/IntegrationInstructions';\r\nexport { default as ChatBubbleOutlineIcon } from '@mui/icons-material/ChatBubbleOutline';\r\nexport { default as MailOutlineIcon } from '@mui/icons-material/MailOutline';\r\nexport { default as StarOutlineIcon } from '@mui/icons-material/StarOutline';\r\nexport { default as RefreshIcon } from '@mui/icons-material/Refresh';\r\nexport { default as DoneAllIcon } from '@mui/icons-material/DoneAll';\r\n\r\n// Type for icon names\r\nexport type IconName =\r\n | 'Close' | 'Menu' | 'ChevronLeft' | 'ChevronRight' | 'KeyboardArrowDown' | 'OpenInNew'\r\n | 'Add' | 'Edit' | 'Delete' | 'DeleteOutline' | 'ContentCopy' | 'Send' | 'Search'\r\n | 'CloudUpload' | 'CloudUploadOutlined' | 'CloudDownload' | 'Download' | 'AttachFile' | 'Create' | 'PlayArrow' | 'UploadFile' | 'Pause' | 'VolumeUp' | 'Fullscreen'\r\n | 'Check' | 'CheckCircle' | 'CheckCircleOutline' | 'CheckCircleOutlined' | 'ErrorOutline'\r\n | 'WarningAmber' | 'InfoOutlined' | 'Verified' | 'CancelOutlined'\r\n | 'GitHub' | 'Twitter' | 'LinkedIn' | 'Public' | 'Email'\r\n | 'Folder' | 'FolderOutlined' | 'Description' | 'DescriptionOutlined' | 'ArticleOutlined'\r\n | 'InsertDriveFileOutlined' | 'Image'\r\n | 'Person' | 'PersonOutline' | 'PeopleOutlined' | 'GroupAddOutlined'\r\n | 'Settings' | 'SettingsOutlined' | 'Notifications' | 'NotificationsOutlined' | 'HelpOutline' | 'MoreVert'\r\n | 'DashboardOutlined' | 'BarChart' | 'BarChartOutlined' | 'AssessmentOutlined' | 'Circle'\r\n | 'HomeOutlined' | 'AssignmentOutlined'\r\n | 'AccessTime' | 'CalendarToday' | 'Alarm'\r\n | 'FlashOn' | 'Bolt' | 'AutoAwesome' | 'Mic' | 'Link' | 'BookmarkBorder' | 'CreditCard'\r\n | 'IntegrationInstructions' | 'ChatBubbleOutline' | 'MailOutline' | 'StarOutline' | 'Refresh' | 'DoneAll';\r\n","import React from 'react';\r\nimport { Tooltip as MuiTooltip, TooltipProps as MuiTooltipProps, styled, Box, Typography } from '@mui/material';\r\nimport tokens from '../../tokens/tokens.json';\r\n\r\n// Design tokens from Figma\r\nconst COLORS = {\r\n bgPrimarySolid: '#0A0D12',\r\n textWhite: '#FFFFFF',\r\n tooltipSupportingText: '#D5D7DA',\r\n};\r\n\r\nconst SPACING = {\r\n xxs: 2,\r\n md: 8,\r\n lg: 12,\r\n};\r\n\r\nconst RADIUS = {\r\n md: 8,\r\n};\r\n\r\nexport interface TooltipProps extends Omit<MuiTooltipProps, 'title'> {\r\n /**\r\n * The main tooltip text\r\n */\r\n title: string;\r\n /**\r\n * Optional supporting text for more detailed descriptions\r\n */\r\n supportingText?: string;\r\n}\r\n\r\n// Custom styled tooltip content for supporting text variant\r\nconst TooltipContent = styled(Box)<{ hasSupportingText: boolean }>(({ hasSupportingText }) => ({\r\n display: 'flex',\r\n flexDirection: 'column',\r\n gap: hasSupportingText ? SPACING.xxs : 0,\r\n maxWidth: hasSupportingText ? 296 : 'none',\r\n}));\r\n\r\nconst TooltipTitle = styled(Typography)(() => ({\r\n fontFamily: '\"DM Sans\", sans-serif',\r\n fontWeight: 600,\r\n fontSize: 12,\r\n lineHeight: '18px',\r\n color: COLORS.textWhite,\r\n}));\r\n\r\nconst TooltipSupportingText = styled(Typography)(() => ({\r\n fontFamily: '\"DM Sans\", sans-serif',\r\n fontWeight: 500,\r\n fontSize: 12,\r\n lineHeight: '18px',\r\n color: COLORS.tooltipSupportingText,\r\n}));\r\n\r\n// Styled Tooltip with Figma design tokens\r\nconst StyledTooltip = styled(({ className, ...props }: MuiTooltipProps) => (\r\n <MuiTooltip {...props} classes={{ popper: className }} />\r\n))<{ ownerState?: { hasSupportingText?: boolean } }>(({ ownerState }) => {\r\n const hasSupportingText = ownerState?.hasSupportingText ?? false;\r\n\r\n return {\r\n '& .MuiTooltip-tooltip': {\r\n backgroundColor: COLORS.bgPrimarySolid,\r\n borderRadius: RADIUS.md,\r\n padding: hasSupportingText\r\n ? SPACING.lg\r\n : `${SPACING.md}px ${SPACING.lg}px`,\r\n maxWidth: hasSupportingText ? 320 : 300,\r\n boxShadow: tokens.shadows.lg,\r\n },\r\n '& .MuiTooltip-arrow': {\r\n color: COLORS.bgPrimarySolid,\r\n '&::before': {\r\n backgroundColor: COLORS.bgPrimarySolid,\r\n },\r\n },\r\n };\r\n});\r\n\r\n/**\r\n * Tooltip component following the design system specifications.\r\n *\r\n * Features:\r\n * - Dark background (#0A0D12) with 8px border radius\r\n * - Optional supporting text for detailed descriptions\r\n * - Proper arrow styling matching the tooltip background\r\n * - Typography: 12px DM Sans, semibold title, medium supporting text\r\n */\r\nexport const Tooltip = ({\r\n title,\r\n supportingText,\r\n children,\r\n arrow = true,\r\n placement = 'top',\r\n ...props\r\n}: TooltipProps) => {\r\n const hasSupportingText = Boolean(supportingText);\r\n\r\n const tooltipContent = (\r\n <TooltipContent hasSupportingText={hasSupportingText}>\r\n <TooltipTitle>{title}</TooltipTitle>\r\n {supportingText && (\r\n <TooltipSupportingText>{supportingText}</TooltipSupportingText>\r\n )}\r\n </TooltipContent>\r\n );\r\n\r\n return (\r\n <StyledTooltip\r\n title={tooltipContent}\r\n arrow={arrow}\r\n placement={placement}\r\n ownerState={{ hasSupportingText }}\r\n {...props}\r\n >\r\n {children}\r\n </StyledTooltip>\r\n );\r\n};\r\n","import React from 'react';\r\nimport { CircularProgress as MuiCircularProgress, CircularProgressProps as MuiCircularProgressProps, LinearProgress as MuiLinearProgress, LinearProgressProps as MuiLinearProgressProps, Box, styled } from '@mui/material';\r\nimport { DesignSystemColor } from '../../theme/types';\r\nimport tokens from '../../tokens/tokens.json';\r\n\r\nexport interface CircularProgressProps extends Omit<MuiCircularProgressProps, 'color'> {\r\n color?: DesignSystemColor | 'inherit';\r\n}\r\nexport interface LinearProgressProps extends Omit<MuiLinearProgressProps, 'color'> {\r\n color?: DesignSystemColor | 'inherit';\r\n}\r\n\r\n// Map design system colors to MUI colors\r\nconst mapColorToMui = (color?: DesignSystemColor | 'inherit'): MuiCircularProgressProps['color'] => {\r\n if (!color) return 'primary';\r\n const colorMap: Record<string, MuiCircularProgressProps['color']> = {\r\n 'base': 'primary',\r\n 'gray': 'secondary',\r\n 'gray-dark': 'secondary',\r\n 'primary': 'primary',\r\n 'secondary': 'secondary',\r\n 'error': 'error',\r\n 'success': 'success',\r\n 'warning': 'warning',\r\n 'inherit': 'inherit',\r\n };\r\n return colorMap[color] || 'primary';\r\n};\r\n\r\nexport const CircularProgress = ({ color, ...props }: CircularProgressProps) => {\r\n return <MuiCircularProgress color={mapColorToMui(color)} {...props} />;\r\n};\r\n\r\nexport const LinearProgress = ({ color, ...props }: LinearProgressProps) => {\r\n return <MuiLinearProgress color={mapColorToMui(color)} {...props} />;\r\n};\r\n\r\n// ProgressCircle Component\r\nexport type ProgressCircleSize = 'xxs' | 'xs' | 'sm' | 'md' | 'lg';\r\nexport type ProgressCircleShape = 'circle' | 'half-circle';\r\n\r\nexport interface ProgressCircleProps {\r\n /**\r\n * The progress value (0-100)\r\n */\r\n value: number;\r\n /**\r\n * Size of the progress circle\r\n */\r\n size?: ProgressCircleSize;\r\n /**\r\n * Shape of the progress indicator\r\n */\r\n shape?: ProgressCircleShape;\r\n /**\r\n * Show label below the percentage\r\n */\r\n showLabel?: boolean;\r\n /**\r\n * Custom label text\r\n */\r\n label?: string;\r\n /**\r\n * Color of the progress bar\r\n */\r\n color?: 'primary' | 'success' | 'warning' | 'error';\r\n}\r\n\r\nconst sizeConfig = {\r\n xxs: {\r\n containerSize: 64,\r\n strokeWidth: 6,\r\n fontSize: tokens.typography.fontSize['text-sm'],\r\n fontSizeLabel: tokens.typography.fontSize['text-xs'],\r\n lineHeight: tokens.typography.lineHeight['text-sm'],\r\n fontWeight: tokens.typography.fontWeight.semibold,\r\n },\r\n xs: {\r\n containerSize: 160,\r\n strokeWidth: 16,\r\n fontSize: tokens.typography.fontSize['display-xs'],\r\n fontSizeLabel: tokens.typography.fontSize['text-xs'],\r\n lineHeight: tokens.typography.lineHeight['display-xs'],\r\n fontWeight: tokens.typography.fontWeight.semibold,\r\n },\r\n sm: {\r\n containerSize: 200,\r\n strokeWidth: 20,\r\n fontSize: tokens.typography.fontSize['display-sm'],\r\n fontSizeLabel: tokens.typography.fontSize['text-xs'],\r\n lineHeight: tokens.typography.lineHeight['display-sm'],\r\n fontWeight: tokens.typography.fontWeight.semibold,\r\n },\r\n md: {\r\n containerSize: 240,\r\n strokeWidth: 24,\r\n fontSize: tokens.typography.fontSize['display-md'],\r\n fontSizeLabel: tokens.typography.fontSize['text-sm'],\r\n lineHeight: tokens.typography.lineHeight['display-md'],\r\n fontWeight: tokens.typography.fontWeight.semibold,\r\n },\r\n lg: {\r\n containerSize: 280,\r\n strokeWidth: 28,\r\n fontSize: tokens.typography.fontSize['display-lg'],\r\n fontSizeLabel: tokens.typography.fontSize['text-sm'],\r\n lineHeight: tokens.typography.lineHeight['display-lg'],\r\n fontWeight: tokens.typography.fontWeight.semibold,\r\n },\r\n};\r\n\r\nconst ProgressCircleRoot = styled(Box)({\r\n display: 'flex',\r\n flexDirection: 'column',\r\n alignItems: 'center',\r\n position: 'relative',\r\n});\r\n\r\nconst SVGContainer = styled('svg')({\r\n transform: 'rotate(-90deg)',\r\n});\r\n\r\nconst CenterContent = styled(Box)<{ shape: string }>(({ shape }) => ({\r\n position: 'absolute',\r\n top: shape === 'half-circle' ? '60%' : '50%',\r\n left: '50%',\r\n transform: 'translate(-50%, -50%)',\r\n display: 'flex',\r\n flexDirection: 'column',\r\n alignItems: 'center',\r\n textAlign: 'center',\r\n}));\r\n\r\nconst PercentageText = styled('div')<{ size: ProgressCircleSize }>(({ size }) => {\r\n const config = sizeConfig[size];\r\n return {\r\n fontFamily: tokens.typography.fontFamily.display,\r\n fontSize: config.fontSize,\r\n fontWeight: config.fontWeight,\r\n lineHeight: config.lineHeight,\r\n color: tokens.color.gray[900],\r\n letterSpacing: size === 'md' || size === 'lg' ? '-0.02em' : '0',\r\n };\r\n});\r\n\r\nconst LabelText = styled('div')<{ size: ProgressCircleSize }>(({ size }) => {\r\n const config = sizeConfig[size];\r\n return {\r\n fontFamily: tokens.typography.fontFamily.body,\r\n fontSize: config.fontSizeLabel,\r\n fontWeight: tokens.typography.fontWeight.medium,\r\n lineHeight: size === 'xxs' ? tokens.typography.lineHeight['text-xs'] : tokens.typography.lineHeight['text-sm'],\r\n color: tokens.color.gray[600],\r\n marginTop: size === 'xxs' ? '4px' : '0',\r\n };\r\n});\r\n\r\nconst ExternalLabel = styled('div')({\r\n fontFamily: tokens.typography.fontFamily.body,\r\n fontSize: tokens.typography.fontSize['text-xs'],\r\n fontWeight: tokens.typography.fontWeight.medium,\r\n lineHeight: tokens.typography.lineHeight['text-xs'],\r\n color: tokens.color.gray[600],\r\n marginTop: '4px',\r\n});\r\n\r\nexport const ProgressCircle: React.FC<ProgressCircleProps> = ({\r\n value,\r\n size = 'md',\r\n shape = 'circle',\r\n showLabel = true,\r\n label = 'Active users',\r\n color = 'primary',\r\n}) => {\r\n const config = sizeConfig[size];\r\n const { containerSize, strokeWidth } = config;\r\n\r\n const isHalfCircle = shape === 'half-circle';\r\n const containerHeight = isHalfCircle ? containerSize / 2 + strokeWidth : containerSize;\r\n\r\n const radius = (containerSize - strokeWidth) / 2;\r\n const circumference = isHalfCircle ? Math.PI * radius : 2 * Math.PI * radius;\r\n const progress = Math.min(100, Math.max(0, value));\r\n const strokeDashoffset = circumference - (progress / 100) * circumference;\r\n\r\n const center = containerSize / 2;\r\n\r\n const colorMap = {\r\n primary: tokens.color.primary[600],\r\n success: tokens.color.success[600],\r\n warning: tokens.color.warning[600],\r\n error: tokens.color.error[600],\r\n };\r\n\r\n const progressColor = colorMap[color];\r\n const isXXS = size === 'xxs';\r\n\r\n return (\r\n <ProgressCircleRoot\r\n sx={{\r\n gap: isXXS ? '4px' : 0,\r\n width: containerSize,\r\n height: isXXS ? 'auto' : containerHeight,\r\n }}\r\n >\r\n <Box sx={{ position: 'relative', width: containerSize, height: containerHeight }}>\r\n <SVGContainer\r\n width={containerSize}\r\n height={containerHeight}\r\n viewBox={`0 0 ${containerSize} ${containerHeight}`}\r\n >\r\n {/* Background circle/arc */}\r\n <circle\r\n cx={center}\r\n cy={center}\r\n r={radius}\r\n fill=\"none\"\r\n stroke={tokens.color.gray[200]}\r\n strokeWidth={strokeWidth}\r\n strokeDasharray={isHalfCircle ? `${circumference} ${circumference}` : undefined}\r\n strokeDashoffset={0}\r\n />\r\n\r\n {/* Progress circle/arc */}\r\n <circle\r\n cx={center}\r\n cy={center}\r\n r={radius}\r\n fill=\"none\"\r\n stroke={progressColor}\r\n strokeWidth={strokeWidth}\r\n strokeDasharray={circumference}\r\n strokeDashoffset={strokeDashoffset}\r\n strokeLinecap=\"round\"\r\n style={{\r\n transition: 'stroke-dashoffset 0.5s ease',\r\n }}\r\n />\r\n </SVGContainer>\r\n\r\n {/* Center content */}\r\n <CenterContent shape={shape}>\r\n {showLabel && (size === 'md' || size === 'lg') && (\r\n <LabelText size={size}>{label}</LabelText>\r\n )}\r\n <PercentageText size={size}>{Math.round(progress)}%</PercentageText>\r\n {showLabel && (size === 'xs' || size === 'sm') && (\r\n <LabelText size={size}>{label}</LabelText>\r\n )}\r\n </CenterContent>\r\n </Box>\r\n\r\n {/* External label for xxs size */}\r\n {isXXS && showLabel && (\r\n <ExternalLabel>{label === 'Active users' ? 'Users' : label}</ExternalLabel>\r\n )}\r\n </ProgressCircleRoot>\r\n );\r\n};\r\n","import { Box as MuiBox, BoxProps as MuiBoxProps } from '@mui/material';\r\n\r\nexport type BoxProps<C extends React.ElementType = 'div'> = MuiBoxProps<C, { component?: C }>;\r\n\r\nexport const Box = MuiBox;\r\n","import React from 'react';\r\nimport { Container as MuiContainer, ContainerProps as MuiContainerProps } from '@mui/material';\r\n\r\nexport type ContainerProps = MuiContainerProps;\r\n\r\nexport const Container: React.FC<ContainerProps> = (props) => {\r\n return <MuiContainer {...props} />;\r\n};\r\n","import React from 'react';\r\nimport { Grid as MuiGrid, GridProps as MuiGridProps } from '@mui/material';\r\n\r\nexport type GridProps = MuiGridProps;\r\n\r\nexport const Grid: React.FC<GridProps> = (props) => {\r\n return <MuiGrid {...props} />;\r\n};\r\n","import React from 'react';\r\nimport { Stack as MuiStack, StackProps as MuiStackProps } from '@mui/material';\r\n\r\nexport type StackProps = MuiStackProps;\r\n\r\nexport const Stack: React.FC<StackProps> = (props) => {\r\n return <MuiStack {...props} />;\r\n};\r\n","import React from 'react';\r\nimport { Typography as MuiTypography, TypographyProps as MuiTypographyProps } from '@mui/material';\r\nimport { DesignSystemColor } from '../../theme/types';\r\nimport { mapColorToMui } from '../../utils/colorMapping';\r\n\r\nexport interface TypographyProps extends Omit<MuiTypographyProps, 'color'> {\r\n color?: DesignSystemColor | 'textPrimary' | 'textSecondary' | 'error' | 'inherit';\r\n}\r\n\r\nexport const Typography: React.FC<TypographyProps> = ({ color, ...props }) => {\r\n return <MuiTypography color={mapColorToMui(color)} {...props} />;\r\n};\r\n","import React from 'react';\r\nimport { Divider as MuiDivider, DividerProps as MuiDividerProps } from '@mui/material';\r\n\r\nexport type DividerProps = MuiDividerProps;\r\n\r\nexport const Divider: React.FC<DividerProps> = (props) => {\r\n return <MuiDivider {...props} />;\r\n};\r\n","import React from 'react';\r\nimport { AppBar as MuiAppBar, AppBarProps as MuiAppBarProps } from '@mui/material';\r\nimport { DesignSystemColor } from '../../theme/types';\r\nimport { mapColorToMui } from '../../utils/colorMapping';\r\n\r\nexport interface AppBarProps extends Omit<MuiAppBarProps, 'color'> {\r\n color?: DesignSystemColor | 'transparent' | 'inherit' | 'default';\r\n}\r\n\r\nexport const AppBar: React.FC<AppBarProps> = ({ color, ...props }) => {\r\n return <MuiAppBar color={mapColorToMui(color)} {...props} />;\r\n};\r\n","import React from 'react';\r\nimport { Box, BoxProps, styled, useMediaQuery, useTheme } from '@mui/material';\r\nimport HomeIcon from '@mui/icons-material/Home';\r\nimport ChevronRightIcon from '@mui/icons-material/ChevronRight';\r\nimport tokens from '../../tokens/tokens.json';\r\n\r\nexport type BreadcrumbDivider = 'Chevron' | 'Slash';\r\nexport type BreadcrumbType = 'Text' | 'Text with line' | 'Button';\r\nexport type BreadcrumbBreakpoint = 'Desktop' | 'Mobile';\r\n\r\nexport interface BreadcrumbItem {\r\n label: string;\r\n href?: string;\r\n isCurrentPage?: boolean;\r\n}\r\n\r\nexport interface BreadcrumbsProps {\r\n items: BreadcrumbItem[];\r\n divider?: BreadcrumbDivider;\r\n type?: BreadcrumbType;\r\n breakpoint?: BreadcrumbBreakpoint;\r\n showHomeIcon?: boolean;\r\n maxItems?: number;\r\n onItemClick?: (item: BreadcrumbItem, index: number) => void;\r\n}\r\n\r\nconst Root = styled(Box, {\r\n shouldForwardProp: (prop) => !['breadcrumbType', 'breadcrumbBreakpoint'].includes(prop as string),\r\n})<BoxProps & {\r\n breadcrumbType: BreadcrumbType;\r\n breadcrumbBreakpoint: BreadcrumbBreakpoint;\r\n}>(({ breadcrumbType, breadcrumbBreakpoint }) => {\r\n const isDesktop = breadcrumbBreakpoint === 'Desktop';\r\n const isMobile = breadcrumbBreakpoint === 'Mobile';\r\n const isText = breadcrumbType === 'Text';\r\n const isTextWithLine = breadcrumbType === 'Text with line';\r\n const isButton = breadcrumbType === 'Button';\r\n\r\n // Base styles\r\n const baseStyles = {\r\n display: 'flex',\r\n position: 'relative' as const,\r\n };\r\n\r\n // Text with line variant\r\n if (isTextWithLine && isDesktop) {\r\n return {\r\n ...baseStyles,\r\n flexDirection: 'column' as const,\r\n gap: 0,\r\n alignItems: 'flex-start',\r\n justifyContent: 'center',\r\n borderTop: `1px solid ${tokens.color.secondary[200]}`,\r\n borderBottom: `1px solid ${tokens.color.secondary[200]}`,\r\n padding: `${tokens.spacing.md} 0`,\r\n width: '480px',\r\n };\r\n }\r\n\r\n if (isTextWithLine && isMobile) {\r\n return {\r\n ...baseStyles,\r\n flexDirection: 'column' as const,\r\n gap: 0,\r\n alignItems: 'flex-start',\r\n justifyContent: 'center',\r\n borderTop: `1px solid ${tokens.color.secondary[200]}`,\r\n borderBottom: `1px solid ${tokens.color.secondary[200]}`,\r\n padding: `${tokens.spacing.md} 0`,\r\n width: '320px',\r\n };\r\n }\r\n\r\n // Text variant\r\n if (isText && isDesktop) {\r\n return {\r\n ...baseStyles,\r\n gap: tokens.spacing.md,\r\n alignItems: 'center',\r\n };\r\n }\r\n\r\n if (isText && isMobile) {\r\n return {\r\n ...baseStyles,\r\n gap: tokens.spacing.sm,\r\n alignItems: 'center',\r\n };\r\n }\r\n\r\n // Button variant\r\n if (isButton) {\r\n return {\r\n ...baseStyles,\r\n alignItems: 'center',\r\n };\r\n }\r\n\r\n return baseStyles;\r\n});\r\n\r\nconst BreadcrumbList = styled(Box, {\r\n shouldForwardProp: (prop) => !['breadcrumbType', 'breadcrumbBreakpoint'].includes(prop as string),\r\n})<BoxProps & {\r\n breadcrumbType: BreadcrumbType;\r\n breadcrumbBreakpoint: BreadcrumbBreakpoint;\r\n}>(({ breadcrumbType, breadcrumbBreakpoint }) => {\r\n const isDesktop = breadcrumbBreakpoint === 'Desktop';\r\n const isMobile = breadcrumbBreakpoint === 'Mobile';\r\n const isTextWithLine = breadcrumbType === 'Text with line';\r\n const isButton = breadcrumbType === 'Button';\r\n\r\n const baseStyles = {\r\n display: 'flex',\r\n alignItems: 'center',\r\n listStyle: 'none',\r\n margin: 0,\r\n padding: 0,\r\n };\r\n\r\n if (isTextWithLine && isDesktop) {\r\n return {\r\n ...baseStyles,\r\n gap: tokens.spacing.md,\r\n paddingLeft: tokens.spacing.md,\r\n };\r\n }\r\n\r\n if (isTextWithLine && isMobile) {\r\n return {\r\n ...baseStyles,\r\n gap: tokens.spacing.sm,\r\n };\r\n }\r\n\r\n if (isButton && isDesktop) {\r\n return {\r\n ...baseStyles,\r\n gap: tokens.spacing.xs,\r\n };\r\n }\r\n\r\n if (isButton && isMobile) {\r\n return {\r\n ...baseStyles,\r\n gap: tokens.spacing.xxs,\r\n };\r\n }\r\n\r\n return baseStyles;\r\n});\r\n\r\nconst BreadcrumbItemWrapper = styled(Box, {\r\n shouldForwardProp: (prop) => !['isCurrentPage', 'breadcrumbType'].includes(prop as string),\r\n})<BoxProps & {\r\n isCurrentPage?: boolean;\r\n breadcrumbType: BreadcrumbType;\r\n}>(({ isCurrentPage, breadcrumbType }) => {\r\n const isButton = breadcrumbType === 'Button';\r\n\r\n if (isButton && isCurrentPage) {\r\n return {\r\n display: 'flex',\r\n alignItems: 'center',\r\n justifyContent: 'center',\r\n padding: `${tokens.spacing.xs} ${tokens.spacing.md}`,\r\n borderRadius: tokens.borderRadius.sm,\r\n backgroundColor: tokens.color.gray[50],\r\n cursor: 'default',\r\n };\r\n }\r\n\r\n if (isButton) {\r\n return {\r\n display: 'flex',\r\n alignItems: 'center',\r\n justifyContent: 'center',\r\n padding: `${tokens.spacing.xs} ${tokens.spacing.md}`,\r\n borderRadius: tokens.borderRadius.sm,\r\n backgroundColor: 'transparent',\r\n cursor: 'pointer',\r\n transition: 'background-color 0.2s ease',\r\n '&:hover': {\r\n backgroundColor: tokens.color.gray[50],\r\n },\r\n };\r\n }\r\n\r\n return {\r\n display: 'flex',\r\n alignItems: 'center',\r\n justifyContent: 'center',\r\n };\r\n});\r\n\r\nconst BreadcrumbText = styled(Box, {\r\n shouldForwardProp: (prop) => !['isCurrentPage', 'breadcrumbType'].includes(prop as string),\r\n})<BoxProps & {\r\n isCurrentPage?: boolean;\r\n breadcrumbType: BreadcrumbType;\r\n}>(({ isCurrentPage, breadcrumbType }) => {\r\n const isButton = breadcrumbType === 'Button';\r\n\r\n return {\r\n fontFamily: tokens.typography.fontFamily.body,\r\n fontSize: tokens.typography.fontSize['text-sm'],\r\n lineHeight: tokens.typography.lineHeight['text-sm'],\r\n fontWeight: tokens.typography.fontWeight.semibold,\r\n color: isCurrentPage\r\n ? (isButton ? tokens.color.secondary[700] : tokens.color.primary[700])\r\n : tokens.color.secondary[500],\r\n textDecoration: 'none',\r\n cursor: isCurrentPage ? 'default' : 'pointer',\r\n transition: 'color 0.2s ease',\r\n };\r\n});\r\n\r\nconst Divider = styled(Box)<{\r\n dividerType: BreadcrumbDivider;\r\n}>(({ dividerType }) => ({\r\n display: 'flex',\r\n alignItems: 'center',\r\n justifyContent: 'center',\r\n width: dividerType === 'Slash' ? '16.667px' : '10.667px',\r\n height: dividerType === 'Slash' ? '16.667px' : '10.667px',\r\n overflow: 'hidden',\r\n position: 'relative' as const,\r\n flexShrink: 0,\r\n}));\r\n\r\nconst SlashIcon = styled(Box)({\r\n width: '100%',\r\n height: '100%',\r\n position: 'relative' as const,\r\n '&::before': {\r\n content: '\"/\"',\r\n display: 'flex',\r\n alignItems: 'center',\r\n justifyContent: 'center',\r\n position: 'absolute',\r\n inset: 0,\r\n fontSize: tokens.typography.fontSize['text-sm'],\r\n lineHeight: tokens.typography.lineHeight['text-sm'],\r\n color: tokens.color.secondary[400],\r\n },\r\n});\r\n\r\nconst HomeIconWrapper = styled(Box)<BoxProps>({\r\n width: '16.667px',\r\n height: '16.667px',\r\n overflow: 'hidden',\r\n position: 'relative' as const,\r\n display: 'flex',\r\n alignItems: 'center',\r\n justifyContent: 'center',\r\n flexShrink: 0,\r\n '& svg': {\r\n fontSize: '16.667px',\r\n color: tokens.color.secondary[400],\r\n },\r\n});\r\n\r\nexport const Breadcrumbs: React.FC<BreadcrumbsProps> = ({\r\n items,\r\n divider = 'Chevron',\r\n type = 'Text',\r\n breakpoint: manualBreakpoint,\r\n showHomeIcon = true,\r\n maxItems,\r\n onItemClick,\r\n}) => {\r\n const theme = useTheme();\r\n const autoIsMobile = useMediaQuery(theme.breakpoints.down('sm'));\r\n const isMobile = manualBreakpoint ? manualBreakpoint === 'Mobile' : autoIsMobile;\r\n const actualBreakpoint: BreadcrumbBreakpoint = isMobile ? 'Mobile' : 'Desktop';\r\n\r\n // Handle item collapse with ellipsis\r\n const getDisplayedItems = () => {\r\n if (!maxItems || items.length <= maxItems) {\r\n return items;\r\n }\r\n\r\n // Show first item, ellipsis, and last (maxItems - 1) items\r\n const ellipsisItem: BreadcrumbItem = { label: '...', isCurrentPage: false };\r\n const firstItems = items.slice(0, 1);\r\n const lastItems = items.slice(-(maxItems - 1));\r\n\r\n return [...firstItems, ellipsisItem, ...lastItems];\r\n };\r\n\r\n const displayedItems = getDisplayedItems();\r\n\r\n const handleItemClick = (item: BreadcrumbItem, index: number, e: React.MouseEvent) => {\r\n if (item.label === '...' || item.isCurrentPage) {\r\n e.preventDefault();\r\n return;\r\n }\r\n\r\n if (onItemClick) {\r\n e.preventDefault();\r\n onItemClick(item, index);\r\n }\r\n };\r\n\r\n const renderDivider = () => {\r\n if (divider === 'Slash') {\r\n return (\r\n <Divider dividerType=\"Slash\">\r\n <SlashIcon />\r\n </Divider>\r\n );\r\n }\r\n return (\r\n <Divider dividerType=\"Chevron\">\r\n <ChevronRightIcon sx={{ fontSize: '10.667px', color: tokens.color.secondary[400] }} />\r\n </Divider>\r\n );\r\n };\r\n\r\n return (\r\n <Root\r\n component=\"nav\"\r\n breadcrumbType={type}\r\n breadcrumbBreakpoint={actualBreakpoint}\r\n >\r\n <BreadcrumbList\r\n component=\"ol\"\r\n breadcrumbType={type}\r\n breadcrumbBreakpoint={actualBreakpoint}\r\n >\r\n {showHomeIcon && (\r\n <>\r\n <HomeIconWrapper component=\"li\">\r\n <HomeIcon />\r\n </HomeIconWrapper>\r\n {renderDivider()}\r\n </>\r\n )}\r\n\r\n {displayedItems.map((item, index) => (\r\n <React.Fragment key={index}>\r\n <BreadcrumbItemWrapper\r\n component=\"li\"\r\n isCurrentPage={item.isCurrentPage}\r\n breadcrumbType={type}\r\n onClick={(e) => !item.isCurrentPage && handleItemClick(item, index, e as any)}\r\n >\r\n <BreadcrumbText\r\n component={item.href && !item.isCurrentPage ? 'a' : 'span'}\r\n isCurrentPage={item.isCurrentPage}\r\n breadcrumbType={type}\r\n {...(item.href && !item.isCurrentPage ? { href: item.href } : {})}\r\n >\r\n {item.label}\r\n </BreadcrumbText>\r\n </BreadcrumbItemWrapper>\r\n\r\n {index < displayedItems.length - 1 && renderDivider()}\r\n </React.Fragment>\r\n ))}\r\n </BreadcrumbList>\r\n </Root>\r\n );\r\n};\r\n\r\nBreadcrumbs.displayName = 'Breadcrumbs';\r\n","import React from 'react';\r\nimport { Drawer as MuiDrawer, DrawerProps as MuiDrawerProps } from '@mui/material';\r\n\r\nexport type DrawerProps = MuiDrawerProps;\r\n\r\nexport const Drawer: React.FC<DrawerProps> = (props) => {\r\n return <MuiDrawer {...props} />;\r\n};\r\n","import React from 'react';\r\nimport { Link as MuiLink, LinkProps as MuiLinkProps } from '@mui/material';\r\nimport { DesignSystemColor } from '../../theme/types';\r\nimport { mapColorToMui } from '../../utils/colorMapping';\r\n\r\nexport interface LinkProps extends Omit<MuiLinkProps, 'color'> {\r\n color?: DesignSystemColor | 'inherit' | 'initial';\r\n}\r\n\r\nexport const Link: React.FC<LinkProps> = ({ color, ...props }) => {\r\n return <MuiLink color={mapColorToMui(color)} {...props} />;\r\n};\r\n","import React from 'react';\r\nimport { Box, Stack } from '@mui/material';\r\nimport { AddIcon } from '../../theme/icons';\r\nimport { Button } from '../Button';\r\nimport { ToggleButton, ToggleButtonGroup } from '../ToggleButton';\r\nimport { Link } from '../Link';\r\nimport tokens from '../../tokens/tokens.json';\r\n\r\nexport interface SectionFooterAction {\r\n label: string;\r\n variant?: 'text' | 'outlined' | 'contained';\r\n onClick?: () => void;\r\n disabled?: boolean;\r\n}\r\n\r\nexport interface SectionFooterPeriod {\r\n label: string;\r\n value: string;\r\n}\r\n\r\nexport interface SectionFooterProps {\r\n /**\r\n * Time period options for toggle buttons\r\n */\r\n periods?: SectionFooterPeriod[];\r\n /**\r\n * Selected period value\r\n */\r\n selectedPeriod?: string;\r\n /**\r\n * Period change handler\r\n */\r\n onPeriodChange?: (value: string) => void;\r\n /**\r\n * Show custom period button\r\n */\r\n showCustomButton?: boolean;\r\n /**\r\n * Custom button click handler\r\n */\r\n onCustomClick?: () => void;\r\n /**\r\n * Show \"Learn more\" link\r\n */\r\n showLearnMore?: boolean;\r\n /**\r\n * Learn more click handler\r\n */\r\n onLearnMoreClick?: () => void;\r\n /**\r\n * Action buttons to display\r\n */\r\n actions?: SectionFooterAction[];\r\n}\r\n\r\n/**\r\n * SectionFooter component for consistent section footers with time periods and actions.\r\n *\r\n * Features:\r\n * - Time period toggle buttons (12 months, 30 days, 7 days, etc.)\r\n * - Custom period button with + icon\r\n * - Learn more link\r\n * - Action buttons (Tertiary, Secondary, Primary)\r\n * - Responsive layout\r\n */\r\nexport const SectionFooter: React.FC<SectionFooterProps> = ({\r\n periods = [],\r\n selectedPeriod,\r\n onPeriodChange,\r\n showCustomButton = false,\r\n onCustomClick,\r\n showLearnMore = false,\r\n onLearnMoreClick,\r\n actions = [],\r\n}) => {\r\n const handlePeriodChange = (\r\n _event: React.MouseEvent<HTMLElement>,\r\n newValue: string | null\r\n ) => {\r\n if (newValue !== null) {\r\n onPeriodChange?.(newValue);\r\n }\r\n };\r\n\r\n return (\r\n <Box\r\n sx={{\r\n display: 'flex',\r\n flexDirection: { xs: 'column', md: 'row' },\r\n justifyContent: 'space-between',\r\n alignItems: { xs: 'flex-start', md: 'center' },\r\n gap: 2,\r\n padding: `${tokens.borderRadius.md * 2}px`,\r\n borderTop: `1px solid ${tokens.color.gray[200]}`,\r\n backgroundColor: tokens.color.base.white,\r\n }}\r\n >\r\n {/* Left Section: Time Periods & Learn More */}\r\n <Stack\r\n direction=\"row\"\r\n spacing={2}\r\n alignItems=\"center\"\r\n sx={{\r\n flexWrap: 'wrap',\r\n gap: 1.5,\r\n }}\r\n >\r\n {/* Time Period Toggle Buttons */}\r\n {periods.length > 0 && (\r\n <ToggleButtonGroup\r\n value={selectedPeriod}\r\n exclusive\r\n onChange={handlePeriodChange}\r\n sx={{\r\n '& .MuiToggleButton-root': {\r\n textTransform: 'none',\r\n fontSize: tokens.typography.fontSize['text-sm'],\r\n fontWeight: tokens.typography.fontWeight.medium,\r\n fontFamily: tokens.typography.fontFamily.body,\r\n color: tokens.color.gray[700],\r\n borderColor: tokens.color.gray[300],\r\n padding: '8px 14px',\r\n borderRadius: `${tokens.borderRadius.md}px`,\r\n '&:not(:first-of-type)': {\r\n marginLeft: '-1px',\r\n borderLeft: `1px solid ${tokens.color.gray[300]}`,\r\n },\r\n '&.Mui-selected': {\r\n backgroundColor: tokens.color.gray[50],\r\n color: tokens.color.gray[900],\r\n fontWeight: tokens.typography.fontWeight.semibold,\r\n borderColor: tokens.color.gray[300],\r\n '&:hover': {\r\n backgroundColor: tokens.color.gray[100],\r\n },\r\n },\r\n '&:hover': {\r\n backgroundColor: tokens.color.gray[50],\r\n },\r\n },\r\n }}\r\n >\r\n {periods.map((period) => (\r\n <ToggleButton key={period.value} value={period.value}>\r\n {period.label}\r\n </ToggleButton>\r\n ))}\r\n </ToggleButtonGroup>\r\n )}\r\n\r\n {/* Custom Button */}\r\n {showCustomButton && (\r\n <Button\r\n variant=\"outlined\"\r\n onClick={onCustomClick}\r\n size=\"small\"\r\n sx={{\r\n textTransform: 'none',\r\n fontSize: tokens.typography.fontSize['text-sm'],\r\n fontWeight: tokens.typography.fontWeight.medium,\r\n fontFamily: tokens.typography.fontFamily.body,\r\n color: tokens.color.gray[700],\r\n borderColor: tokens.color.gray[300],\r\n backgroundColor: tokens.color.base.white,\r\n padding: '8px 14px',\r\n minWidth: 'auto',\r\n borderRadius: `${tokens.borderRadius.md}px`,\r\n '&:hover': {\r\n backgroundColor: tokens.color.gray[50],\r\n borderColor: tokens.color.gray[300],\r\n },\r\n }}\r\n iconLeading={<AddIcon sx={{ fontSize: '16px' }} />}\r\n >\r\n Custom\r\n </Button>\r\n )}\r\n\r\n {/* Learn More Link */}\r\n {showLearnMore && (\r\n <Link\r\n onClick={onLearnMoreClick}\r\n sx={{\r\n fontSize: tokens.typography.fontSize['text-sm'],\r\n fontWeight: tokens.typography.fontWeight.semibold,\r\n fontFamily: tokens.typography.fontFamily.body,\r\n color: tokens.color.gray[700],\r\n textDecoration: 'none',\r\n cursor: 'pointer',\r\n display: 'flex',\r\n alignItems: 'center',\r\n padding: '8px 14px',\r\n '&:hover': {\r\n color: tokens.color.gray[900],\r\n },\r\n }}\r\n >\r\n Learn more\r\n </Link>\r\n )}\r\n </Stack>\r\n\r\n {/* Right Section: Action Buttons */}\r\n {actions.length > 0 && (\r\n <Stack\r\n direction=\"row\"\r\n spacing={1.5}\r\n alignItems=\"center\"\r\n sx={{\r\n width: { xs: '100%', md: 'auto' },\r\n }}\r\n >\r\n {actions.map((action, index) => (\r\n <Button\r\n key={index}\r\n variant={action.variant || 'outlined'}\r\n onClick={action.onClick}\r\n disabled={action.disabled}\r\n size=\"medium\"\r\n sx={{\r\n textTransform: 'none',\r\n fontSize: tokens.typography.fontSize['text-sm'],\r\n fontWeight: tokens.typography.fontWeight.semibold,\r\n fontFamily: tokens.typography.fontFamily.body,\r\n padding: '10px 16px',\r\n borderRadius: `${tokens.borderRadius.md}px`,\r\n minWidth: 'auto',\r\n whiteSpace: 'nowrap',\r\n ...(action.variant === 'text' && {\r\n color: tokens.color.gray[700],\r\n border: 'none',\r\n '&:hover': {\r\n backgroundColor: tokens.color.gray[50],\r\n },\r\n }),\r\n ...(action.variant === 'outlined' && {\r\n borderColor: tokens.color.gray[300],\r\n backgroundColor: tokens.color.base.white,\r\n color: tokens.color.gray[700],\r\n '&:hover': {\r\n backgroundColor: tokens.color.gray[50],\r\n borderColor: tokens.color.gray[300],\r\n },\r\n }),\r\n ...(action.variant === 'contained' && {\r\n backgroundColor: tokens.color.primary[600],\r\n color: tokens.color.base.white,\r\n border: 'none',\r\n '&:hover': {\r\n backgroundColor: tokens.color.primary[700],\r\n },\r\n }),\r\n }}\r\n >\r\n {action.label}\r\n </Button>\r\n ))}\r\n </Stack>\r\n )}\r\n </Box>\r\n );\r\n};\r\n","import React from 'react';\r\nimport {\r\n ToggleButton as MuiToggleButton, ToggleButtonProps as MuiToggleButtonProps,\r\n ToggleButtonGroup as MuiToggleButtonGroup, ToggleButtonGroupProps as MuiToggleButtonGroupProps\r\n} from '@mui/material';\r\nimport { DesignSystemColor } from '../../theme/types';\r\nimport { mapColorToMui } from '../../utils/colorMapping';\r\n\r\nexport interface ToggleButtonProps extends Omit<MuiToggleButtonProps, 'color'> {\r\n color?: DesignSystemColor | 'standard';\r\n}\r\nexport const ToggleButton: React.FC<ToggleButtonProps> = ({ color, ...props }) => <MuiToggleButton color={mapColorToMui(color)} {...props} />;\r\n\r\nexport interface ToggleButtonGroupProps extends Omit<MuiToggleButtonGroupProps, 'color'> {\r\n color?: DesignSystemColor | 'standard';\r\n}\r\nexport const ToggleButtonGroup: React.FC<ToggleButtonGroupProps> = ({ color, ...props }) => <MuiToggleButtonGroup color={mapColorToMui(color)} {...props} />;\r\n","import React from 'react';\r\nimport { Menu as MuiMenu, MenuProps as MuiMenuProps } from '@mui/material';\r\n\r\nexport type MenuProps = MuiMenuProps;\r\n\r\nexport const Menu: React.FC<MenuProps> = (props) => {\r\n return <MuiMenu {...props} />;\r\n};\r\n","import React from 'react';\r\nimport { MenuItem as MuiMenuItem, MenuItemProps as MuiMenuItemProps } from '@mui/material';\r\n\r\nexport type MenuItemProps = MuiMenuItemProps;\r\n\r\nexport const MenuItem: React.FC<MenuItemProps> = (props) => {\r\n return <MuiMenuItem {...props} />;\r\n};\r\n","import React from 'react';\r\nimport { Tabs as MuiTabs, TabsProps as MuiTabsProps } from '@mui/material';\r\n\r\nexport type TabsProps = MuiTabsProps;\r\n\r\nexport const Tabs: React.FC<TabsProps> = (props) => {\r\n return <MuiTabs {...props} />;\r\n};\r\n","import React from 'react';\r\nimport { Tab as MuiTab, TabProps as MuiTabProps } from '@mui/material';\r\n\r\nexport type TabProps = MuiTabProps;\r\n\r\nexport const Tab: React.FC<TabProps> = (props) => {\r\n return <MuiTab {...props} />;\r\n};\r\n","import React from 'react';\r\nimport { Box, BoxProps, styled, useMediaQuery, useTheme, MenuItem, Select, SelectChangeEvent } from '@mui/material';\r\nimport { KeyboardArrowDownIcon } from '../../theme/icons';\r\nimport tokens from '../../tokens/tokens.json';\r\nimport { Badge } from '../Badge';\r\n\r\nexport type VerticalTabsType = 'Button primary' | 'Button gray' | 'Line' | 'Button border' | 'Button minimal';\r\nexport type VerticalTabsSize = 'sm' | 'md';\r\nexport type VerticalTabsBreakpoint = 'Desktop' | 'Mobile';\r\n\r\nexport interface VerticalTab {\r\n label: string;\r\n value: string;\r\n badge?: number;\r\n}\r\n\r\nexport interface VerticalTabsProps extends Omit<BoxProps, 'onChange'> {\r\n /**\r\n * Visual style of the tabs\r\n */\r\n type?: VerticalTabsType;\r\n /**\r\n * Size of the tabs\r\n */\r\n size?: VerticalTabsSize;\r\n /**\r\n * Responsive breakpoint (manual override)\r\n */\r\n breakpoint?: VerticalTabsBreakpoint;\r\n /**\r\n * Array of tab items\r\n */\r\n tabs?: VerticalTab[];\r\n /**\r\n * Currently active tab value\r\n */\r\n value?: string;\r\n /**\r\n * Callback when tab changes\r\n */\r\n onChange?: (value: string) => void;\r\n}\r\n\r\nconst Root = styled(Box, {\r\n shouldForwardProp: (prop) => !['tabsType', 'tabsSize', 'isMobile'].includes(prop as string),\r\n})<{ tabsType: VerticalTabsType; tabsSize: VerticalTabsSize; isMobile: boolean }>(\r\n ({ tabsType, tabsSize, isMobile }) => {\r\n if (isMobile) {\r\n return {\r\n display: 'flex',\r\n alignItems: 'center',\r\n width: '343px',\r\n gap: 0,\r\n };\r\n }\r\n\r\n const baseStyles = {\r\n display: 'flex',\r\n flexDirection: 'column' as const,\r\n alignItems: 'flex-start',\r\n position: 'relative' as const,\r\n };\r\n\r\n if (tabsType === 'Button primary' || tabsType === 'Button gray') {\r\n return {\r\n ...baseStyles,\r\n gap: tokens.spacing.xs,\r\n };\r\n }\r\n\r\n if (tabsType === 'Line') {\r\n return {\r\n ...baseStyles,\r\n gap: tokens.spacing.md,\r\n };\r\n }\r\n\r\n if (tabsType === 'Button border') {\r\n return {\r\n ...baseStyles,\r\n backgroundColor: tokens.color.gray[50],\r\n border: `1px solid ${tokens.color.gray[200]}`,\r\n borderRadius: tabsSize === 'md' ? tokens.borderRadius.xl : tokens.borderRadius.lg,\r\n padding: tabsSize === 'md' ? tokens.spacing.sm : tokens.spacing.xs,\r\n gap: tokens.spacing.xs,\r\n };\r\n }\r\n\r\n if (tabsType === 'Button minimal') {\r\n return {\r\n ...baseStyles,\r\n backgroundColor: tokens.color.gray[50],\r\n border: `1px solid ${tokens.color.gray[200]}`,\r\n borderRadius: tokens.borderRadius.md,\r\n gap: tokens.spacing.xxs,\r\n };\r\n }\r\n\r\n return baseStyles;\r\n }\r\n);\r\n\r\nconst TabButton = styled(Box, {\r\n shouldForwardProp: (prop) =>\r\n !['tabsType', 'tabsSize', 'isActive'].includes(prop as string),\r\n})<{ tabsType: VerticalTabsType; tabsSize: VerticalTabsSize; isActive: boolean }>(\r\n ({ tabsType, tabsSize, isActive }) => {\r\n const fontSize = tabsSize === 'md' ? tokens.typography.fontSize['text-md'] : tokens.typography.fontSize['text-sm'];\r\n const lineHeight = tabsSize === 'md' ? tokens.typography.lineHeight['text-md'] : tokens.typography.lineHeight['text-sm'];\r\n const height = tabsSize === 'md' ? '44px' : '36px';\r\n\r\n const baseStyles = {\r\n display: 'flex',\r\n alignItems: 'center',\r\n gap: tokens.spacing.md,\r\n width: '100%',\r\n cursor: 'pointer',\r\n fontFamily: tokens.typography.fontFamily.body,\r\n fontSize,\r\n lineHeight,\r\n fontWeight: tokens.typography.fontWeight.semibold,\r\n transition: 'all 0.2s ease',\r\n };\r\n\r\n // Line type\r\n if (tabsType === 'Line') {\r\n const lineHeight = tabsSize === 'md' ? '32px' : '24px';\r\n const padding = tabsSize === 'md' ? `${tokens.spacing.xs} 14px` : `${tokens.spacing.xxs} ${tokens.spacing.lg}`;\r\n\r\n return {\r\n ...baseStyles,\r\n height: lineHeight,\r\n padding,\r\n borderLeft: isActive ? `2px solid ${tokens.color.primary[600]}` : 'none',\r\n color: isActive ? tokens.color.primary[700] : tokens.color.gray[500],\r\n '&:hover': {\r\n color: isActive ? tokens.color.primary[700] : tokens.color.gray[700],\r\n },\r\n };\r\n }\r\n\r\n // Button primary\r\n if (tabsType === 'Button primary') {\r\n return {\r\n ...baseStyles,\r\n height,\r\n padding: `${tokens.spacing.md} ${tokens.spacing.lg}`,\r\n borderRadius: tokens.borderRadius.sm,\r\n backgroundColor: isActive ? tokens.color.primary[50] : 'transparent',\r\n color: isActive ? tokens.color.primary[700] : tokens.color.gray[500],\r\n overflow: 'hidden',\r\n '&:hover': {\r\n backgroundColor: isActive ? tokens.color.primary[50] : tokens.color.gray[50],\r\n color: isActive ? tokens.color.primary[700] : tokens.color.gray[700],\r\n },\r\n };\r\n }\r\n\r\n // Button gray\r\n if (tabsType === 'Button gray') {\r\n return {\r\n ...baseStyles,\r\n height,\r\n padding: `${tokens.spacing.md} ${tokens.spacing.lg}`,\r\n borderRadius: tokens.borderRadius.sm,\r\n backgroundColor: isActive ? tokens.color.gray[100] : 'transparent',\r\n color: isActive ? tokens.color.gray[700] : tokens.color.gray[500],\r\n overflow: 'hidden',\r\n '&:hover': {\r\n backgroundColor: isActive ? tokens.color.gray[100] : tokens.color.gray[50],\r\n color: tokens.color.gray[700],\r\n },\r\n };\r\n }\r\n\r\n // Button border\r\n if (tabsType === 'Button border') {\r\n return {\r\n ...baseStyles,\r\n height,\r\n padding: `${tokens.spacing.md} ${tokens.spacing.lg}`,\r\n borderRadius: tokens.borderRadius.sm,\r\n backgroundColor: isActive ? tokens.color.base.white : 'transparent',\r\n color: isActive ? tokens.color.gray[700] : tokens.color.gray[500],\r\n overflow: 'hidden',\r\n boxShadow: isActive\r\n ? '0px 1px 3px 0px rgba(10,13,18,0.1), 0px 1px 2px -1px rgba(10,13,18,0.1)'\r\n : 'none',\r\n '&:hover': {\r\n backgroundColor: isActive ? tokens.color.base.white : 'rgba(0,0,0,0.02)',\r\n color: tokens.color.gray[700],\r\n },\r\n };\r\n }\r\n\r\n // Button minimal\r\n if (tabsType === 'Button minimal') {\r\n return {\r\n ...baseStyles,\r\n height,\r\n padding: `${tokens.spacing.md} ${tokens.spacing.lg}`,\r\n borderRadius: tokens.borderRadius.md,\r\n backgroundColor: isActive ? tokens.color.base.white : 'transparent',\r\n border: isActive ? `1px solid ${tokens.color.gray[300]}` : 'none',\r\n color: isActive ? tokens.color.gray[700] : tokens.color.gray[500],\r\n overflow: 'hidden',\r\n boxShadow: isActive ? '0px 1px 2px 0px rgba(10,13,18,0.05)' : 'none',\r\n '&:hover': {\r\n backgroundColor: isActive ? tokens.color.base.white : 'rgba(0,0,0,0.02)',\r\n color: tokens.color.gray[700],\r\n },\r\n };\r\n }\r\n\r\n return baseStyles;\r\n }\r\n);\r\n\r\nconst MobileSelect = styled(Select)({\r\n width: '100%',\r\n '& .MuiOutlinedInput-notchedOutline': {\r\n borderColor: tokens.color.gray[300],\r\n },\r\n '&:hover .MuiOutlinedInput-notchedOutline': {\r\n borderColor: tokens.color.gray[400],\r\n },\r\n '&.Mui-focused .MuiOutlinedInput-notchedOutline': {\r\n borderColor: tokens.color.primary[600],\r\n },\r\n});\r\n\r\nconst defaultTabs: VerticalTab[] = [\r\n { label: 'My details', value: 'my-details' },\r\n { label: 'Profile', value: 'profile' },\r\n { label: 'Password', value: 'password' },\r\n { label: 'Team', value: 'team' },\r\n { label: 'Plan', value: 'plan' },\r\n { label: 'Billing', value: 'billing' },\r\n { label: 'Email', value: 'email' },\r\n { label: 'Notifications', value: 'notifications', badge: 2 },\r\n { label: 'Integrations', value: 'integrations' },\r\n { label: 'API', value: 'api' },\r\n];\r\n\r\nexport const VerticalTabs: React.FC<VerticalTabsProps> = ({\r\n type = 'Button primary',\r\n size = 'sm',\r\n breakpoint: manualBreakpoint,\r\n tabs = defaultTabs,\r\n value,\r\n onChange,\r\n ...rest\r\n}) => {\r\n const theme = useTheme();\r\n const autoIsMobile = useMediaQuery(theme.breakpoints.down('sm'));\r\n const isMobile = manualBreakpoint ? manualBreakpoint === 'Mobile' : autoIsMobile;\r\n\r\n const [activeTab, setActiveTab] = React.useState(value || tabs[0]?.value || '');\r\n\r\n React.useEffect(() => {\r\n if (value !== undefined) {\r\n setActiveTab(value);\r\n }\r\n }, [value]);\r\n\r\n const handleTabClick = (tabValue: string) => {\r\n setActiveTab(tabValue);\r\n onChange?.(tabValue);\r\n };\r\n\r\n const handleSelectChange = (event: SelectChangeEvent<string>) => {\r\n const newValue = event.target.value;\r\n setActiveTab(newValue);\r\n onChange?.(newValue);\r\n };\r\n\r\n if (isMobile) {\r\n return (\r\n <Root tabsType={type} tabsSize={size} isMobile={isMobile} {...rest}>\r\n <MobileSelect\r\n value={activeTab}\r\n onChange={(e: any) => handleSelectChange(e)}\r\n IconComponent={KeyboardArrowDownIcon}\r\n sx={{\r\n '& .MuiSelect-select': {\r\n fontSize: tokens.typography.fontSize['text-md'],\r\n fontFamily: tokens.typography.fontFamily.body,\r\n fontWeight: tokens.typography.fontWeight.medium,\r\n color: tokens.color.gray[900],\r\n padding: '10px 14px',\r\n },\r\n }}\r\n >\r\n {tabs.map((tab) => (\r\n <MenuItem key={tab.value} value={tab.value}>\r\n <Box sx={{ display: 'flex', alignItems: 'center', gap: 1, width: '100%' }}>\r\n {tab.label}\r\n {tab.badge && (\r\n <Badge\r\n badgeContent={tab.badge}\r\n color=\"gray\"\r\n sx={{ ml: 'auto' }}\r\n />\r\n )}\r\n </Box>\r\n </MenuItem>\r\n ))}\r\n </MobileSelect>\r\n </Root>\r\n );\r\n }\r\n\r\n return (\r\n <Root tabsType={type} tabsSize={size} isMobile={isMobile} {...rest}>\r\n {tabs.map((tab) => {\r\n const isActive = activeTab === tab.value;\r\n\r\n return (\r\n <TabButton\r\n key={tab.value}\r\n tabsType={type}\r\n tabsSize={size}\r\n isActive={isActive}\r\n onClick={() => handleTabClick(tab.value)}\r\n >\r\n {tab.label}\r\n {tab.badge && (\r\n <Badge\r\n badgeContent={tab.badge}\r\n color=\"gray\"\r\n sx={{ ml: 'auto' }}\r\n />\r\n )}\r\n </TabButton>\r\n );\r\n })}\r\n </Root>\r\n );\r\n};\r\n\r\nVerticalTabs.displayName = 'VerticalTabs';\r\n","import React from 'react';\r\nimport { Box, BoxProps, styled, useMediaQuery, useTheme, MenuItem, Select, SelectChangeEvent } from '@mui/material';\r\nimport { KeyboardArrowDownIcon } from '../../theme/icons';\r\nimport tokens from '../../tokens/tokens.json';\r\nimport { Badge } from '../Badge';\r\n\r\nexport type HorizontalTabsType = 'Button brand' | 'Button gray' | 'Button white' | 'Underline' | 'Button border' | 'Button minimal';\r\nexport type HorizontalTabsSize = 'sm' | 'md';\r\nexport type HorizontalTabsBreakpoint = 'Desktop' | 'Mobile';\r\n\r\nexport interface HorizontalTab {\r\n label: string;\r\n value: string;\r\n badge?: number;\r\n}\r\n\r\nexport interface HorizontalTabsProps extends Omit<BoxProps, 'onChange'> {\r\n /**\r\n * Visual style of the tabs\r\n */\r\n type?: HorizontalTabsType;\r\n /**\r\n * Size of the tabs\r\n */\r\n size?: HorizontalTabsSize;\r\n /**\r\n * Whether tabs should expand to fill available width\r\n */\r\n fullWidth?: boolean;\r\n /**\r\n * Responsive breakpoint (manual override)\r\n */\r\n breakpoint?: HorizontalTabsBreakpoint;\r\n /**\r\n * Array of tab items\r\n */\r\n tabs?: HorizontalTab[];\r\n /**\r\n * Currently active tab value\r\n */\r\n value?: string;\r\n /**\r\n * Callback when tab changes\r\n */\r\n onChange?: (value: string) => void;\r\n}\r\n\r\nconst Root = styled(Box, {\r\n shouldForwardProp: (prop) => !['tabsType', 'tabsSize', 'fullWidth', 'isMobile'].includes(prop as string),\r\n})<{ tabsType: HorizontalTabsType; tabsSize: HorizontalTabsSize; fullWidth: boolean; isMobile: boolean }>(\r\n ({ tabsType, tabsSize, fullWidth, isMobile }) => {\r\n if (isMobile) {\r\n return {\r\n display: 'flex',\r\n alignItems: 'center',\r\n width: '343px',\r\n };\r\n }\r\n\r\n const baseStyles = {\r\n display: 'flex',\r\n flexDirection: 'row' as const,\r\n alignItems: 'center',\r\n position: 'relative' as const,\r\n gap: 0,\r\n };\r\n\r\n // Underline type has different gap\r\n if (tabsType === 'Underline') {\r\n return {\r\n ...baseStyles,\r\n gap: tokens.spacing.lg,\r\n };\r\n }\r\n\r\n // Button border and minimal types have container styling\r\n if (tabsType === 'Button border') {\r\n return {\r\n ...baseStyles,\r\n backgroundColor: tokens.color.gray[50],\r\n border: `1px solid ${tokens.color.gray[200]}`,\r\n borderRadius: tabsSize === 'md' ? tokens.borderRadius.xl : tokens.borderRadius.lg,\r\n padding: tabsSize === 'md' ? tokens.spacing.sm : tokens.spacing.xs,\r\n gap: tokens.spacing.xs,\r\n };\r\n }\r\n\r\n if (tabsType === 'Button minimal') {\r\n return {\r\n ...baseStyles,\r\n backgroundColor: tokens.color.gray[50],\r\n border: `1px solid ${tokens.color.gray[200]}`,\r\n borderRadius: tokens.borderRadius.md,\r\n gap: tokens.spacing.xxs,\r\n };\r\n }\r\n\r\n return baseStyles;\r\n }\r\n);\r\n\r\nconst TabButton = styled(Box, {\r\n shouldForwardProp: (prop) =>\r\n !['tabsType', 'tabsSize', 'isActive', 'fullWidth'].includes(prop as string),\r\n})<{ tabsType: HorizontalTabsType; tabsSize: HorizontalTabsSize; isActive: boolean; fullWidth: boolean }>(\r\n ({ tabsType, tabsSize, isActive, fullWidth }) => {\r\n const fontSize = tabsSize === 'md' ? tokens.typography.fontSize['text-md'] : tokens.typography.fontSize['text-sm'];\r\n const lineHeight = tabsSize === 'md' ? tokens.typography.lineHeight['text-md'] : tokens.typography.lineHeight['text-sm'];\r\n const height = tabsSize === 'md' ? '44px' : '36px';\r\n\r\n const baseStyles = {\r\n display: 'flex',\r\n alignItems: 'center',\r\n justifyContent: 'center',\r\n gap: tokens.spacing.md,\r\n cursor: 'pointer',\r\n fontFamily: tokens.typography.fontFamily.body,\r\n fontSize,\r\n lineHeight,\r\n fontWeight: tokens.typography.fontWeight.semibold,\r\n transition: 'all 0.2s ease',\r\n flexShrink: 0,\r\n whiteSpace: 'nowrap' as const,\r\n position: 'relative' as const,\r\n ...(fullWidth && { flex: '1 0 0', minWidth: 0 }),\r\n };\r\n\r\n // Underline type\r\n if (tabsType === 'Underline') {\r\n const padding = tabsSize === 'md' ? `12px ${tokens.spacing.xs}` : `10px ${tokens.spacing.xs}`;\r\n\r\n return {\r\n ...baseStyles,\r\n padding,\r\n borderBottom: `2px solid ${isActive ? tokens.color.primary[600] : 'transparent'}`,\r\n color: isActive ? tokens.color.primary[700] : tokens.color.gray[500],\r\n borderRadius: 0,\r\n '&:hover': {\r\n borderBottom: `2px solid ${tokens.color.primary[600]}`,\r\n color: isActive ? tokens.color.primary[700] : tokens.color.gray[700],\r\n },\r\n '&:focus-visible': {\r\n outline: `2px solid ${tokens.effects.focusRings['focus-ring']}`,\r\n outlineOffset: '2px',\r\n },\r\n };\r\n }\r\n\r\n // Button brand\r\n if (tabsType === 'Button brand') {\r\n return {\r\n ...baseStyles,\r\n height,\r\n padding: `${tokens.spacing.md} ${tokens.spacing.lg}`,\r\n borderRadius: tokens.borderRadius.sm,\r\n backgroundColor: isActive ? tokens.color.primary[50] : 'transparent',\r\n color: isActive ? tokens.color.primary[700] : tokens.color.gray[500],\r\n overflow: 'hidden',\r\n '&:hover': {\r\n backgroundColor: tokens.color.primary[50],\r\n color: isActive ? tokens.color.primary[700] : tokens.color.gray[700],\r\n },\r\n '&:focus-visible': {\r\n backgroundColor: tokens.color.primary[50],\r\n boxShadow: `0px 0px 0px 2px ${tokens.color.base.white}, 0px 0px 0px 4px ${tokens.effects.focusRings['focus-ring']}`,\r\n outline: 'none',\r\n },\r\n };\r\n }\r\n\r\n // Button gray\r\n if (tabsType === 'Button gray') {\r\n return {\r\n ...baseStyles,\r\n height,\r\n padding: `${tokens.spacing.md} ${tokens.spacing.lg}`,\r\n borderRadius: tokens.borderRadius.sm,\r\n backgroundColor: isActive ? tokens.color.gray[100] : 'transparent',\r\n color: tokens.color.gray[700],\r\n overflow: 'hidden',\r\n '&:hover': {\r\n backgroundColor: tokens.color.gray[50],\r\n color: tokens.color.gray[700],\r\n },\r\n '&:focus-visible': {\r\n backgroundColor: tokens.color.gray[100],\r\n boxShadow: `0px 0px 0px 2px ${tokens.color.base.white}, 0px 0px 0px 4px ${tokens.effects.focusRings['focus-ring']}`,\r\n outline: 'none',\r\n },\r\n };\r\n }\r\n\r\n // Button white\r\n if (tabsType === 'Button white') {\r\n return {\r\n ...baseStyles,\r\n height,\r\n padding: `${tokens.spacing.md} ${tokens.spacing.lg}`,\r\n borderRadius: tokens.borderRadius.sm,\r\n backgroundColor: tokens.color.base.white,\r\n color: tokens.color.gray[700],\r\n overflow: 'hidden',\r\n boxShadow: tokens.shadows.sm,\r\n '&:hover': {\r\n backgroundColor: tokens.color.base.white,\r\n color: tokens.color.gray[700],\r\n boxShadow: tokens.shadows.sm,\r\n },\r\n '&:focus-visible': {\r\n backgroundColor: tokens.color.base.white,\r\n boxShadow: `${tokens.shadows.sm}, 0px 0px 0px 2px ${tokens.color.base.white}, 0px 0px 0px 4px ${tokens.effects.focusRings['focus-ring']}`,\r\n outline: 'none',\r\n },\r\n };\r\n }\r\n\r\n // Button border\r\n if (tabsType === 'Button border') {\r\n return {\r\n ...baseStyles,\r\n height,\r\n padding: `${tokens.spacing.md} ${tokens.spacing.lg}`,\r\n borderRadius: tokens.borderRadius.sm,\r\n backgroundColor: isActive ? tokens.color.base.white : 'transparent',\r\n color: isActive ? tokens.color.gray[700] : tokens.color.gray[500],\r\n overflow: 'hidden',\r\n boxShadow: isActive\r\n ? '0px 1px 3px 0px rgba(10,13,18,0.1), 0px 1px 2px -1px rgba(10,13,18,0.1)'\r\n : 'none',\r\n '&:hover': {\r\n backgroundColor: isActive ? tokens.color.base.white : 'rgba(0,0,0,0.02)',\r\n color: tokens.color.gray[700],\r\n },\r\n };\r\n }\r\n\r\n // Button minimal\r\n if (tabsType === 'Button minimal') {\r\n return {\r\n ...baseStyles,\r\n height,\r\n padding: `${tokens.spacing.md} ${tokens.spacing.lg}`,\r\n borderRadius: tokens.borderRadius.md,\r\n backgroundColor: isActive ? tokens.color.base.white : 'transparent',\r\n border: isActive ? `1px solid ${tokens.color.gray[300]}` : 'none',\r\n color: tokens.color.gray[700],\r\n overflow: 'hidden',\r\n boxShadow: isActive ? tokens.shadows.xs : 'none',\r\n '&:hover': {\r\n backgroundColor: isActive ? tokens.color.base.white : 'transparent',\r\n color: tokens.color.gray[700],\r\n boxShadow: isActive ? tokens.shadows.xs : 'none',\r\n },\r\n '&:focus-visible': {\r\n backgroundColor: tokens.color.base.white,\r\n border: `1px solid ${tokens.color.gray[300]}`,\r\n boxShadow: `${tokens.shadows.xs}, 0px 0px 0px 2px ${tokens.color.base.white}, 0px 0px 0px 4px ${tokens.effects.focusRings['focus-ring']}`,\r\n outline: 'none',\r\n },\r\n };\r\n }\r\n\r\n return baseStyles;\r\n }\r\n);\r\n\r\nconst MobileSelect = styled(Select)({\r\n width: '100%',\r\n '& .MuiOutlinedInput-notchedOutline': {\r\n borderColor: tokens.color.gray[300],\r\n },\r\n '&:hover .MuiOutlinedInput-notchedOutline': {\r\n borderColor: tokens.color.gray[400],\r\n },\r\n '&.Mui-focused .MuiOutlinedInput-notchedOutline': {\r\n borderColor: tokens.color.primary[600],\r\n },\r\n});\r\n\r\nconst defaultTabs: HorizontalTab[] = [\r\n { label: 'My details', value: 'my-details' },\r\n { label: 'Profile', value: 'profile' },\r\n { label: 'Password', value: 'password' },\r\n { label: 'Team', value: 'team' },\r\n { label: 'Plan', value: 'plan' },\r\n { label: 'Billing', value: 'billing' },\r\n { label: 'Email', value: 'email' },\r\n { label: 'Notifications', value: 'notifications', badge: 2 },\r\n { label: 'Integrations', value: 'integrations' },\r\n { label: 'API', value: 'api' },\r\n];\r\n\r\nexport const HorizontalTabs: React.FC<HorizontalTabsProps> = ({\r\n type = 'Button brand',\r\n size = 'sm',\r\n fullWidth = false,\r\n breakpoint: manualBreakpoint,\r\n tabs = defaultTabs,\r\n value,\r\n onChange,\r\n ...rest\r\n}) => {\r\n const theme = useTheme();\r\n const autoIsMobile = useMediaQuery(theme.breakpoints.down('sm'));\r\n const isMobile = manualBreakpoint ? manualBreakpoint === 'Mobile' : autoIsMobile;\r\n\r\n const [activeTab, setActiveTab] = React.useState(value || tabs[0]?.value || '');\r\n\r\n React.useEffect(() => {\r\n if (value !== undefined) {\r\n setActiveTab(value);\r\n }\r\n }, [value]);\r\n\r\n const handleTabClick = (tabValue: string) => {\r\n setActiveTab(tabValue);\r\n onChange?.(tabValue);\r\n };\r\n\r\n const handleSelectChange = (event: SelectChangeEvent<string>) => {\r\n const newValue = event.target.value;\r\n setActiveTab(newValue);\r\n onChange?.(newValue);\r\n };\r\n\r\n if (isMobile) {\r\n return (\r\n <Root tabsType={type} tabsSize={size} fullWidth={fullWidth} isMobile={isMobile} {...rest}>\r\n <MobileSelect\r\n value={activeTab}\r\n onChange={(e: any) => handleSelectChange(e)}\r\n IconComponent={KeyboardArrowDownIcon}\r\n sx={{\r\n '& .MuiSelect-select': {\r\n fontSize: tokens.typography.fontSize['text-md'],\r\n fontFamily: tokens.typography.fontFamily.body,\r\n fontWeight: tokens.typography.fontWeight.medium,\r\n color: tokens.color.gray[900],\r\n padding: '10px 14px',\r\n },\r\n }}\r\n >\r\n {tabs.map((tab) => (\r\n <MenuItem key={tab.value} value={tab.value}>\r\n <Box sx={{ display: 'flex', alignItems: 'center', gap: 1, width: '100%' }}>\r\n {tab.label}\r\n {tab.badge && (\r\n <Box sx={{ ml: 'auto' }}>\r\n <Badge\r\n variant=\"inline\"\r\n content={tab.badge}\r\n color=\"gray\"\r\n />\r\n </Box>\r\n )}\r\n </Box>\r\n </MenuItem>\r\n ))}\r\n </MobileSelect>\r\n </Root>\r\n );\r\n }\r\n\r\n return (\r\n <Root tabsType={type} tabsSize={size} fullWidth={fullWidth} isMobile={isMobile} {...rest}>\r\n {tabs.map((tab) => {\r\n const isActive = activeTab === tab.value;\r\n const badgeSize = size === 'md' ? 'md' : 'sm';\r\n\r\n return (\r\n <TabButton\r\n key={tab.value}\r\n tabsType={type}\r\n tabsSize={size}\r\n isActive={isActive}\r\n fullWidth={fullWidth}\r\n onClick={() => handleTabClick(tab.value)}\r\n >\r\n {tab.label}\r\n {tab.badge && (\r\n <Badge\r\n variant=\"inline\"\r\n content={tab.badge}\r\n color={isActive && type === 'Button brand' ? 'success' : 'gray'}\r\n active={isActive && type === 'Button brand'}\r\n />\r\n )}\r\n </TabButton>\r\n );\r\n })}\r\n </Root>\r\n );\r\n};\r\n\r\nHorizontalTabs.displayName = 'HorizontalTabs';\r\n","import React from 'react';\r\nimport { Toolbar as MuiToolbar, ToolbarProps as MuiToolbarProps } from '@mui/material';\r\n\r\nexport type ToolbarProps = MuiToolbarProps;\r\n\r\nexport const Toolbar: React.FC<ToolbarProps> = (props) => {\r\n return <MuiToolbar {...props} />;\r\n};\r\n","import React from 'react';\r\nimport { List as MuiList, ListProps as MuiListProps, ListItem as MuiListItem, ListItemProps as MuiListItemProps, ListItemAvatar as MuiListItemAvatar, ListItemAvatarProps as MuiListItemAvatarProps, ListItemButton as MuiListItemButton, ListItemButtonProps as MuiListItemButtonProps, ListItemIcon as MuiListItemIcon, ListItemIconProps as MuiListItemIconProps, ListItemSecondaryAction as MuiListItemSecondaryAction, ListItemSecondaryActionProps as MuiListItemSecondaryActionProps, ListItemText as MuiListItemText, ListItemTextProps as MuiListItemTextProps } from '@mui/material';\r\n\r\nexport type ListProps = MuiListProps;\r\nexport const List: React.FC<ListProps> = (props) => <MuiList {...props} />;\r\n\r\nexport type ListItemProps = MuiListItemProps;\r\nexport const ListItem: React.FC<ListItemProps> = (props) => <MuiListItem {...props} />;\r\n\r\nexport type ListItemAvatarProps = MuiListItemAvatarProps;\r\nexport const ListItemAvatar: React.FC<ListItemAvatarProps> = (props) => <MuiListItemAvatar {...props} />;\r\n\r\nexport type ListItemButtonProps = MuiListItemButtonProps;\r\nexport const ListItemButton: React.FC<ListItemButtonProps> = (props) => <MuiListItemButton {...props} />;\r\n\r\nexport type ListItemIconProps = MuiListItemIconProps;\r\nexport const ListItemIcon: React.FC<ListItemIconProps> = (props) => <MuiListItemIcon {...props} />;\r\n\r\nexport type ListItemSecondaryActionProps = MuiListItemSecondaryActionProps;\r\nexport const ListItemSecondaryAction: React.FC<ListItemSecondaryActionProps> = (props) => <MuiListItemSecondaryAction {...props} />;\r\n\r\nexport type ListItemTextProps = MuiListItemTextProps;\r\nexport const ListItemText: React.FC<ListItemTextProps> = (props) => <MuiListItemText {...props} />;\r\n","import React from 'react';\r\nimport {\r\n Table as MuiTable,\r\n TableProps as MuiTableProps,\r\n TableBody as MuiTableBody,\r\n TableBodyProps as MuiTableBodyProps,\r\n TableCell as MuiTableCell,\r\n TableCellProps as MuiTableCellProps,\r\n TableContainer as MuiTableContainer,\r\n TableContainerProps as MuiTableContainerProps,\r\n TableHead as MuiTableHead,\r\n TableHeadProps as MuiTableHeadProps,\r\n TableRow as MuiTableRow,\r\n TableRowProps as MuiTableRowProps\r\n} from '@mui/material';\r\n\r\n/**\r\n * Table component - wrapper around MUI Table\r\n *\r\n * For pagination, use the design system's Pagination component from '../Pagination'\r\n * instead of MUI's TablePagination.\r\n *\r\n * @example\r\n * import { Table, TableBody, TableCell, TableContainer, TableHead, TableRow } from 'design_system';\r\n * import { Pagination } from 'design_system';\r\n */\r\n\r\nexport type TableProps = MuiTableProps;\r\nexport const Table: React.FC<TableProps> = (props) => <MuiTable {...props} />;\r\n\r\nexport type TableBodyProps = MuiTableBodyProps;\r\nexport const TableBody: React.FC<TableBodyProps> = (props) => <MuiTableBody {...props} />;\r\n\r\nexport type TableCellProps = MuiTableCellProps;\r\nexport const TableCell: React.FC<TableCellProps> = (props) => <MuiTableCell {...props} />;\r\n\r\nexport type TableContainerProps = MuiTableContainerProps;\r\nexport const TableContainer: React.FC<TableContainerProps> = (props) => <MuiTableContainer {...props} />;\r\n\r\nexport type TableHeadProps = MuiTableHeadProps;\r\nexport const TableHead: React.FC<TableHeadProps> = (props) => <MuiTableHead {...props} />;\r\n\r\nexport type TableRowProps = MuiTableRowProps;\r\nexport const TableRow: React.FC<TableRowProps> = (props) => <MuiTableRow {...props} />;\r\n","import React from 'react';\r\nimport { Paper as MuiPaper, PaperProps as MuiPaperProps } from '@mui/material';\r\n\r\nexport type PaperProps = MuiPaperProps;\r\n\r\nexport const Paper: React.FC<PaperProps> = (props) => {\r\n return <MuiPaper {...props} />;\r\n};\r\n","import React from 'react';\r\nimport { Accordion as MuiAccordion, AccordionProps as MuiAccordionProps, AccordionDetails as MuiAccordionDetails, AccordionDetailsProps as MuiAccordionDetailsProps, AccordionSummary as MuiAccordionSummary, AccordionSummaryProps as MuiAccordionSummaryProps } from '@mui/material';\r\n\r\nexport type AccordionProps = MuiAccordionProps;\r\nexport const Accordion: React.FC<AccordionProps> = (props) => <MuiAccordion {...props} />;\r\n\r\nexport type AccordionDetailsProps = MuiAccordionDetailsProps;\r\nexport const AccordionDetails: React.FC<AccordionDetailsProps> = (props) => <MuiAccordionDetails {...props} />;\r\n\r\nexport type AccordionSummaryProps = MuiAccordionSummaryProps;\r\nexport const AccordionSummary: React.FC<AccordionSummaryProps> = (props) => <MuiAccordionSummary {...props} />;\r\n","import React from 'react';\r\nimport { Card as MuiCard, CardProps as MuiCardProps, CardActions as MuiCardActions, CardActionsProps as MuiCardActionsProps, CardContent as MuiCardContent, CardContentProps as MuiCardContentProps, CardMedia as MuiCardMedia, CardMediaProps as MuiCardMediaProps, Box, styled, Divider, Avatar as MuiAvatar, IconButton } from '@mui/material';\r\nimport { MoreVertIcon } from '../../theme/icons';\r\nimport tokens from '../../tokens/tokens.json';\r\n\r\nexport type CardProps = MuiCardProps;\r\nexport const Card: React.FC<CardProps> = (props) => <MuiCard {...props} />;\r\n\r\nexport type CardMediaProps = MuiCardMediaProps;\r\nexport const CardMedia: React.FC<CardMediaProps> = (props) => <MuiCardMedia {...props} />;\r\n\r\n// Styled CardContent with design system tokens\r\nconst StyledCardContent = styled(MuiCardContent)({\r\n padding: '24px',\r\n '&:last-child': {\r\n paddingBottom: '24px',\r\n },\r\n fontFamily: tokens.typography.fontFamily.body,\r\n fontSize: tokens.typography.fontSize['text-sm'],\r\n fontWeight: tokens.typography.fontWeight.regular,\r\n lineHeight: tokens.typography.lineHeight['text-sm'],\r\n color: tokens.color.gray[600],\r\n});\r\n\r\nexport type CardContentProps = MuiCardContentProps;\r\nexport const CardContent: React.FC<CardContentProps> = (props) => <StyledCardContent {...props} />;\r\n\r\n// Styled CardActions with design system tokens\r\nconst StyledCardActions = styled(MuiCardActions)({\r\n padding: '16px 24px',\r\n gap: '12px',\r\n '& > :not(:first-of-type)': {\r\n marginLeft: 0,\r\n },\r\n});\r\n\r\nexport type CardActionsProps = MuiCardActionsProps;\r\nexport const CardActions: React.FC<CardActionsProps> = (props) => <StyledCardActions {...props} />;\r\n\r\n// CardHeader Badge\r\nexport interface CardHeaderBadgeProps {\r\n label: string;\r\n color?: 'primary' | 'success' | 'warning' | 'error' | 'gray';\r\n}\r\n\r\n// CardHeader Action Button\r\nexport interface CardHeaderActionButton {\r\n label: string;\r\n onClick?: () => void;\r\n variant?: 'tertiary' | 'secondary' | 'primary';\r\n}\r\n\r\n// CardHeader Props\r\nexport interface CardHeaderProps {\r\n title: string;\r\n subheader?: string;\r\n badge?: CardHeaderBadgeProps;\r\n avatar?: string | React.ReactElement;\r\n actions?: CardHeaderActionButton[];\r\n showDropdown?: boolean;\r\n onDropdownClick?: () => void;\r\n showDivider?: boolean;\r\n}\r\n\r\nconst HeaderRoot = styled(Box)({\r\n backgroundColor: tokens.color.base.white,\r\n display: 'flex',\r\n flexDirection: 'column',\r\n gap: '20px',\r\n width: '100%',\r\n});\r\n\r\nconst HeaderContent = styled(Box)({\r\n display: 'flex',\r\n gap: '16px',\r\n alignItems: 'flex-start',\r\n paddingTop: '20px',\r\n paddingLeft: '24px',\r\n paddingRight: '24px',\r\n paddingBottom: 0,\r\n width: '100%',\r\n});\r\n\r\nconst AvatarWrapper = styled(Box)({\r\n flexShrink: 0,\r\n});\r\n\r\nconst StyledAvatar = styled(MuiAvatar)({\r\n width: '56px',\r\n height: '56px',\r\n border: '1px solid rgba(0, 0, 0, 0.08)',\r\n});\r\n\r\nconst TextContainer = styled(Box)({\r\n display: 'flex',\r\n flexDirection: 'column',\r\n gap: '2px',\r\n flex: 1,\r\n minWidth: 0,\r\n});\r\n\r\nconst TitleRow = styled(Box)({\r\n display: 'flex',\r\n gap: '8px',\r\n alignItems: 'center',\r\n width: '100%',\r\n});\r\n\r\nconst Title = styled('h3')({\r\n fontFamily: tokens.typography.fontFamily.body,\r\n fontSize: tokens.typography.fontSize['text-lg'],\r\n fontWeight: tokens.typography.fontWeight.semibold,\r\n lineHeight: tokens.typography.lineHeight['text-lg'],\r\n color: tokens.color.gray[900],\r\n margin: 0,\r\n});\r\n\r\nconst Subheader = styled('p')({\r\n fontFamily: tokens.typography.fontFamily.body,\r\n fontSize: tokens.typography.fontSize['text-sm'],\r\n fontWeight: tokens.typography.fontWeight.regular,\r\n lineHeight: tokens.typography.lineHeight['text-sm'],\r\n color: tokens.color.gray[600],\r\n margin: 0,\r\n overflow: 'hidden',\r\n textOverflow: 'ellipsis',\r\n whiteSpace: 'nowrap',\r\n});\r\n\r\nconst Badge = styled(Box)<{ badgeColor: string }>(({ badgeColor }) => {\r\n const colorMap = {\r\n primary: {\r\n bg: tokens.color.primary[50],\r\n border: tokens.color.primary[200],\r\n text: tokens.color.primary[700],\r\n },\r\n success: {\r\n bg: tokens.color.success[50],\r\n border: tokens.color.success[200],\r\n text: tokens.color.success[700],\r\n },\r\n warning: {\r\n bg: tokens.color.warning[50],\r\n border: tokens.color.warning[200],\r\n text: tokens.color.warning[700],\r\n },\r\n error: {\r\n bg: tokens.color.error[50],\r\n border: tokens.color.error[200],\r\n text: tokens.color.error[700],\r\n },\r\n gray: {\r\n bg: tokens.color.gray[50],\r\n border: tokens.color.gray[200],\r\n text: tokens.color.gray[700],\r\n },\r\n };\r\n\r\n const colors = colorMap[badgeColor as keyof typeof colorMap] || colorMap.primary;\r\n\r\n return {\r\n display: 'inline-flex',\r\n alignItems: 'center',\r\n padding: '2px 8px',\r\n backgroundColor: colors.bg,\r\n border: `1px solid ${colors.border}`,\r\n borderRadius: tokens.borderRadius.full,\r\n fontFamily: tokens.typography.fontFamily.body,\r\n fontSize: tokens.typography.fontSize['text-xs'],\r\n fontWeight: tokens.typography.fontWeight.medium,\r\n lineHeight: tokens.typography.lineHeight['text-xs'],\r\n color: colors.text,\r\n whiteSpace: 'nowrap',\r\n flexShrink: 0,\r\n };\r\n});\r\n\r\nconst ActionsContainer = styled(Box)({\r\n display: 'flex',\r\n gap: '12px',\r\n alignItems: 'center',\r\n flexShrink: 0,\r\n});\r\n\r\nconst ActionButton = styled('button')<{ variant?: 'tertiary' | 'secondary' | 'primary' }>(({ variant = 'secondary' }) => {\r\n const baseStyles = {\r\n fontFamily: tokens.typography.fontFamily.body,\r\n fontSize: tokens.typography.fontSize['text-sm'],\r\n fontWeight: tokens.typography.fontWeight.semibold,\r\n lineHeight: tokens.typography.lineHeight['text-sm'],\r\n padding: '10px 14px',\r\n borderRadius: tokens.borderRadius.md,\r\n cursor: 'pointer',\r\n transition: 'all 0.2s',\r\n border: 'none',\r\n display: 'flex',\r\n alignItems: 'center',\r\n justifyContent: 'center',\r\n };\r\n\r\n if (variant === 'primary') {\r\n return {\r\n ...baseStyles,\r\n backgroundColor: tokens.color.primary[600],\r\n color: tokens.color.base.white,\r\n border: '2px solid transparent',\r\n boxShadow: tokens.shadows.xs,\r\n '&:hover': {\r\n backgroundColor: tokens.color.primary[700],\r\n },\r\n };\r\n }\r\n\r\n if (variant === 'tertiary') {\r\n return {\r\n ...baseStyles,\r\n backgroundColor: 'transparent',\r\n color: tokens.color.gray[600],\r\n '&:hover': {\r\n backgroundColor: tokens.color.gray[50],\r\n },\r\n };\r\n }\r\n\r\n // secondary\r\n return {\r\n ...baseStyles,\r\n backgroundColor: tokens.color.base.white,\r\n color: tokens.color.gray[700],\r\n border: `1px solid ${tokens.color.gray[300]}`,\r\n boxShadow: tokens.shadows.xs,\r\n '&:hover': {\r\n backgroundColor: tokens.color.gray[50],\r\n },\r\n };\r\n});\r\n\r\nconst DropdownButton = styled(IconButton)({\r\n padding: 0,\r\n flexShrink: 0,\r\n color: tokens.color.gray[400],\r\n '&:hover': {\r\n backgroundColor: 'transparent',\r\n color: tokens.color.gray[600],\r\n },\r\n});\r\n\r\nconst HeaderDivider = styled(Divider)({\r\n borderColor: tokens.color.gray[200],\r\n margin: 0,\r\n});\r\n\r\nexport const CardHeader: React.FC<CardHeaderProps> = ({\r\n title,\r\n subheader,\r\n badge,\r\n avatar,\r\n actions,\r\n showDropdown = false,\r\n onDropdownClick,\r\n showDivider = false,\r\n}) => {\r\n return (\r\n <HeaderRoot>\r\n <HeaderContent>\r\n {avatar && (\r\n <AvatarWrapper>\r\n {typeof avatar === 'string' ? (\r\n <StyledAvatar src={avatar} alt={title} />\r\n ) : (\r\n avatar\r\n )}\r\n </AvatarWrapper>\r\n )}\r\n\r\n <TextContainer>\r\n <TitleRow>\r\n <Title>{title}</Title>\r\n {badge && (\r\n <Badge badgeColor={badge.color || 'primary'}>\r\n {badge.label}\r\n </Badge>\r\n )}\r\n </TitleRow>\r\n {subheader && <Subheader>{subheader}</Subheader>}\r\n </TextContainer>\r\n\r\n {actions && actions.length > 0 && (\r\n <ActionsContainer>\r\n {actions.map((action, index) => (\r\n <ActionButton\r\n key={index}\r\n variant={action.variant}\r\n onClick={action.onClick}\r\n >\r\n {action.label}\r\n </ActionButton>\r\n ))}\r\n </ActionsContainer>\r\n )}\r\n\r\n {showDropdown && (\r\n <DropdownButton onClick={onDropdownClick} size=\"small\">\r\n <MoreVertIcon />\r\n </DropdownButton>\r\n )}\r\n </HeaderContent>\r\n\r\n {showDivider && <HeaderDivider />}\r\n </HeaderRoot>\r\n );\r\n};\r\n","import React from 'react';\r\nimport {\r\n Autocomplete as MuiAutocomplete,\r\n AutocompleteProps as MuiAutocompleteProps,\r\n SxProps,\r\n Theme,\r\n} from '@mui/material';\r\n\r\nexport type AutocompleteSize = 'sm' | 'md';\r\n\r\nexport type AutocompleteProps<\r\n T,\r\n Multiple extends boolean | undefined = undefined,\r\n DisableClearable extends boolean | undefined = undefined,\r\n FreeSolo extends boolean | undefined = undefined\r\n> = Omit<MuiAutocompleteProps<T, Multiple, DisableClearable, FreeSolo>, 'size'> & {\r\n /**\r\n * The size of the autocomplete input\r\n * @default 'md'\r\n */\r\n size?: AutocompleteSize;\r\n};\r\n\r\nconst sizeToMuiSize: Record<AutocompleteSize, 'small' | 'medium'> = {\r\n sm: 'small',\r\n md: 'medium',\r\n};\r\n\r\nexport const Autocomplete = <\r\n T,\r\n Multiple extends boolean | undefined = undefined,\r\n DisableClearable extends boolean | undefined = undefined,\r\n FreeSolo extends boolean | undefined = undefined\r\n>(\r\n props: AutocompleteProps<T, Multiple, DisableClearable, FreeSolo>\r\n) => {\r\n const { size = 'md', sx, ...rest } = props;\r\n\r\n const muiSize = sizeToMuiSize[size];\r\n\r\n // Custom sx to handle size-specific styling\r\n const customSx: SxProps<Theme> = {\r\n ...(size === 'sm' && {\r\n '& .MuiOutlinedInput-root': {\r\n padding: '4px 12px !important',\r\n },\r\n '& .MuiAutocomplete-input': {\r\n padding: '4px 0 !important',\r\n },\r\n }),\r\n ...(size === 'md' && {\r\n '& .MuiOutlinedInput-root': {\r\n padding: '6px 14px !important',\r\n },\r\n }),\r\n ...(typeof sx === 'object' ? sx : {}),\r\n };\r\n\r\n return (\r\n <MuiAutocomplete\r\n size={muiSize}\r\n sx={customSx}\r\n {...rest}\r\n />\r\n );\r\n};\r\n","import React from 'react';\r\nimport { Select as MuiSelect, SelectProps as MuiSelectProps, MenuItem } from '@mui/material';\r\n\r\nexport interface SelectOption {\r\n value: string | number;\r\n label: string;\r\n}\r\n\r\nexport interface SelectProps extends Omit<MuiSelectProps, 'children'> {\r\n /**\r\n * Array of options for the select dropdown\r\n * If provided, will render MenuItem children automatically\r\n */\r\n options?: SelectOption[];\r\n /**\r\n * Children to render (MenuItem components)\r\n * If options prop is provided, this will be ignored\r\n */\r\n children?: React.ReactNode;\r\n /**\r\n * Placeholder text to display when no value is selected\r\n */\r\n placeholder?: string;\r\n}\r\n\r\nexport const Select: React.FC<SelectProps> = ({ options, children, placeholder, displayEmpty, renderValue, ...props }) => {\r\n // If placeholder is provided, automatically set displayEmpty and handle renderValue\r\n const shouldDisplayEmpty = displayEmpty !== undefined ? displayEmpty : !!placeholder;\r\n const customRenderValue = renderValue || (placeholder ? (selected: unknown): React.ReactNode => {\r\n if (!selected || (typeof selected === 'string' && selected === '')) {\r\n return <span style={{ color: '#a4a7ae' }}>{placeholder}</span>;\r\n }\r\n // Find the label for the selected value if using options\r\n if (options) {\r\n const selectedOption = options.find(opt => opt.value === selected);\r\n return selectedOption ? selectedOption.label : String(selected);\r\n }\r\n return String(selected);\r\n } : undefined);\r\n\r\n return (\r\n <MuiSelect\r\n {...props}\r\n displayEmpty={shouldDisplayEmpty}\r\n renderValue={customRenderValue}\r\n >\r\n {options\r\n ? options.map((option) => (\r\n <MenuItem key={option.value} value={option.value}>\r\n {option.label}\r\n </MenuItem>\r\n ))\r\n : children}\r\n </MuiSelect>\r\n );\r\n};\r\n","import React from 'react';\r\nimport {\r\n FormControl as MuiFormControl, FormControlProps as MuiFormControlProps,\r\n FormControlLabel as MuiFormControlLabel, FormControlLabelProps as MuiFormControlLabelProps,\r\n FormHelperText as MuiFormHelperText, FormHelperTextProps as MuiFormHelperTextProps,\r\n FormLabel as MuiFormLabel, FormLabelProps as MuiFormLabelProps,\r\n InputLabel as MuiInputLabel, InputLabelProps as MuiInputLabelProps,\r\n} from '@mui/material';\r\n\r\nexport type FormControlProps = MuiFormControlProps;\r\nexport const FormControl: React.FC<FormControlProps> = (props) => <MuiFormControl {...props} />;\r\n\r\nexport type FormControlLabelProps = MuiFormControlLabelProps;\r\nexport const FormControlLabel: React.FC<FormControlLabelProps> = (props) => <MuiFormControlLabel {...props} />;\r\n\r\nexport type FormHelperTextProps = MuiFormHelperTextProps;\r\nexport const FormHelperText: React.FC<FormHelperTextProps> = (props) => <MuiFormHelperText {...props} />;\r\n\r\nexport type FormLabelProps = MuiFormLabelProps;\r\nexport const FormLabel: React.FC<FormLabelProps> = (props) => <MuiFormLabel {...props} />;\r\n\r\nexport type InputLabelProps = MuiInputLabelProps;\r\nexport const InputLabel: React.FC<InputLabelProps> = (props) => <MuiInputLabel {...props} />;\r\n","import React from 'react';\r\nimport { IconButton as MuiIconButton, IconButtonProps as MuiIconButtonProps } from '@mui/material';\r\nimport { DesignSystemColor } from '../../theme/types';\r\nimport { mapColorToMui } from '../../utils/colorMapping';\r\n\r\nexport interface IconButtonProps extends Omit<MuiIconButtonProps, 'color'> {\r\n color?: DesignSystemColor | 'inherit' | 'default';\r\n}\r\n\r\nexport const IconButton: React.FC<IconButtonProps> = ({ color, ...props }) => {\r\n return <MuiIconButton color={mapColorToMui(color)} {...props} />;\r\n};\r\n","import React from 'react';\r\nimport { Fab as MuiFab, FabProps as MuiFabProps } from '@mui/material';\r\nimport { DesignSystemColor } from '../../theme/types';\r\nimport { mapColorToMui } from '../../utils/colorMapping';\r\n\r\nexport interface FabProps extends Omit<MuiFabProps, 'color'> {\r\n color?: DesignSystemColor | 'inherit' | 'default';\r\n}\r\n\r\nexport const Fab: React.FC<FabProps> = ({ color, ...props }) => {\r\n return <MuiFab color={mapColorToMui(color)} {...props} />;\r\n};\r\n","import React from 'react';\r\nimport { Box, IconButton, styled } from '@mui/material';\r\nimport {\r\n InfoOutlinedIcon,\r\n CheckCircleOutlinedIcon,\r\n WarningAmberOutlinedIcon,\r\n ErrorOutlinedIcon,\r\n CloseIcon\r\n} from '../../theme/icons';\r\nimport tokens from '../../tokens/tokens.json';\r\nimport { Button } from '../Button';\r\n\r\nexport type AlertSeverity = 'info' | 'success' | 'warning' | 'error' | 'default' | 'gray';\r\nexport type AlertVariant = 'floating' | 'full-width';\r\n\r\nexport interface AlertAction {\r\n label: string;\r\n onClick?: () => void;\r\n variant?: 'text' | 'contained';\r\n}\r\n\r\nexport interface AlertProps {\r\n /**\r\n * The severity of the alert\r\n */\r\n severity?: AlertSeverity;\r\n /**\r\n * The title of the alert\r\n */\r\n title: string;\r\n /**\r\n * Optional supporting text\r\n */\r\n description?: string;\r\n /**\r\n * Optional actions\r\n */\r\n actions?: AlertAction[];\r\n /**\r\n * Show close button\r\n */\r\n onClose?: () => void;\r\n /**\r\n * Alert variant (floating or full-width)\r\n */\r\n variant?: AlertVariant;\r\n /**\r\n * Custom className\r\n */\r\n className?: string;\r\n}\r\n\r\nconst AlertRoot = styled(Box)<{ severity: AlertSeverity; variant: AlertVariant }>(({ severity, variant }) => {\r\n const isFloating = variant === 'floating';\r\n\r\n return {\r\n display: 'flex',\r\n position: 'relative',\r\n alignItems: isFloating ? 'flex-start' : 'center',\r\n gap: '16px',\r\n padding: isFloating ? '16px' : '12px 32px',\r\n backgroundColor: tokens.color.base.white,\r\n border: `1px solid ${tokens.color.secondary[300]}`,\r\n borderRadius: isFloating ? '12px' : 0,\r\n borderLeft: isFloating ? undefined : 0,\r\n borderRight: isFloating ? undefined : 0,\r\n borderTop: isFloating ? undefined : 0,\r\n boxShadow: isFloating ? tokens.shadows.xs : 'none',\r\n width: isFloating ? 'auto' : '100%',\r\n maxWidth: isFloating ? '1216px' : undefined,\r\n flexDirection: 'row',\r\n\r\n '@media (max-width: 768px)': {\r\n flexDirection: isFloating ? 'column' : 'column',\r\n padding: '16px',\r\n },\r\n };\r\n});\r\n\r\nconst IconContainer = styled(Box)<{ severity: AlertSeverity }>(({ severity }) => {\r\n const colorMap = {\r\n info: tokens.color.primary[600],\r\n success: tokens.color.success[600],\r\n warning: tokens.color.warning[600],\r\n error: tokens.color.error[600],\r\n default: tokens.color.gray[700],\r\n gray: tokens.color.gray[600],\r\n };\r\n\r\n const color = colorMap[severity];\r\n\r\n if (severity === 'default') {\r\n return {\r\n position: 'relative',\r\n width: '40px',\r\n height: '40px',\r\n flexShrink: 0,\r\n backgroundColor: tokens.color.base.white,\r\n border: `1px solid ${tokens.color.secondary[300]}`,\r\n borderRadius: '8px',\r\n boxShadow: `${tokens.shadows.xs}, ${tokens.shadows['skeumorphic-inner']}, ${tokens.shadows['skeumorphic-inner-border']}`,\r\n display: 'flex',\r\n alignItems: 'center',\r\n justifyContent: 'center',\r\n\r\n '& svg': {\r\n width: '20px',\r\n height: '20px',\r\n color: color,\r\n },\r\n };\r\n }\r\n\r\n return {\r\n position: 'relative',\r\n width: '20px',\r\n height: '20px',\r\n flexShrink: 0,\r\n borderRadius: '50%',\r\n display: 'flex',\r\n alignItems: 'center',\r\n justifyContent: 'center',\r\n\r\n '&::before': {\r\n content: '\"\"',\r\n position: 'absolute',\r\n inset: '-20%',\r\n border: `2px solid ${color}`,\r\n borderRadius: '50%',\r\n opacity: 0.3,\r\n pointerEvents: 'none',\r\n },\r\n\r\n '&::after': {\r\n content: '\"\"',\r\n position: 'absolute',\r\n inset: '-45%',\r\n border: `2px solid ${color}`,\r\n borderRadius: '50%',\r\n opacity: 0.1,\r\n pointerEvents: 'none',\r\n },\r\n\r\n '& svg': {\r\n width: '16.67px',\r\n height: '16.67px',\r\n color: color,\r\n position: 'relative',\r\n zIndex: 1,\r\n },\r\n };\r\n});\r\n\r\nconst ContentContainer = styled(Box)({\r\n display: 'flex',\r\n flexDirection: 'column',\r\n gap: '12px',\r\n flex: 1,\r\n minWidth: 0,\r\n});\r\n\r\nconst TextContainer = styled(Box)({\r\n display: 'flex',\r\n flexDirection: 'column',\r\n gap: '4px',\r\n});\r\n\r\nconst TitleText = styled('div')({\r\n fontFamily: tokens.typography.fontFamily.body,\r\n fontSize: tokens.typography.fontSize['text-sm'],\r\n fontWeight: tokens.typography.fontWeight.semibold,\r\n lineHeight: tokens.typography.lineHeight['text-sm'],\r\n color: tokens.color.gray[700],\r\n});\r\n\r\nconst DescriptionText = styled('div')({\r\n fontFamily: tokens.typography.fontFamily.body,\r\n fontSize: tokens.typography.fontSize['text-sm'],\r\n fontWeight: tokens.typography.fontWeight.regular,\r\n lineHeight: tokens.typography.lineHeight['text-sm'],\r\n color: tokens.color.gray[600],\r\n});\r\n\r\nconst ActionsContainer = styled(Box)({\r\n display: 'flex',\r\n gap: '12px',\r\n alignItems: 'center',\r\n flexWrap: 'wrap',\r\n});\r\n\r\nconst TextButton = styled('button')({\r\n background: 'none',\r\n border: 'none',\r\n padding: 0,\r\n fontFamily: tokens.typography.fontFamily.body,\r\n fontSize: tokens.typography.fontSize['text-sm'],\r\n fontWeight: tokens.typography.fontWeight.semibold,\r\n lineHeight: tokens.typography.lineHeight['text-sm'],\r\n cursor: 'pointer',\r\n transition: 'opacity 0.2s',\r\n\r\n '&:hover': {\r\n opacity: 0.8,\r\n },\r\n});\r\n\r\nconst CloseButton = styled(IconButton)({\r\n position: 'absolute',\r\n top: '7px',\r\n right: '7px',\r\n padding: '8px',\r\n borderRadius: '8px',\r\n color: tokens.color.gray[400],\r\n '&:hover': {\r\n backgroundColor: tokens.color.gray[50],\r\n },\r\n '& svg': {\r\n fontSize: '20px',\r\n },\r\n});\r\n\r\nconst getIcon = (severity: AlertSeverity) => {\r\n switch (severity) {\r\n case 'success':\r\n return <CheckCircleOutlinedIcon />;\r\n case 'warning':\r\n return <WarningAmberOutlinedIcon />;\r\n case 'error':\r\n return <ErrorOutlinedIcon />;\r\n case 'info':\r\n case 'gray':\r\n case 'default':\r\n default:\r\n return <InfoOutlinedIcon />;\r\n }\r\n};\r\n\r\nexport const Alert: React.FC<AlertProps> = ({\r\n severity = 'info',\r\n title,\r\n description,\r\n actions,\r\n onClose,\r\n variant = 'floating',\r\n className,\r\n}) => {\r\n const isFloating = variant === 'floating';\r\n\r\n return (\r\n <AlertRoot severity={severity} variant={variant} className={className}>\r\n {onClose && isFloating && (\r\n <CloseButton size=\"small\" onClick={onClose}>\r\n <CloseIcon />\r\n </CloseButton>\r\n )}\r\n\r\n <IconContainer severity={severity}>\r\n {getIcon(severity)}\r\n </IconContainer>\r\n\r\n <ContentContainer>\r\n <TextContainer>\r\n <TitleText>{title}</TitleText>\r\n {description && (\r\n <DescriptionText>{description}</DescriptionText>\r\n )}\r\n </TextContainer>\r\n\r\n {actions && actions.length > 0 && (\r\n <ActionsContainer>\r\n {isFloating ? (\r\n // Floating variant: text-only buttons\r\n actions.map((action, index) => (\r\n <TextButton\r\n key={index}\r\n onClick={action.onClick}\r\n style={{\r\n color: index === 0\r\n ? tokens.color.gray[600]\r\n : tokens.color.primary[700]\r\n }}\r\n >\r\n {action.label}\r\n </TextButton>\r\n ))\r\n ) : (\r\n // Full-width variant: proper buttons\r\n actions.map((action, index) => (\r\n <Button\r\n key={index}\r\n label={action.label}\r\n variant={action.variant || (index === 0 ? 'outlined' : 'contained')}\r\n size=\"small\"\r\n onClick={action.onClick}\r\n color={index === 0 ? 'secondary' : 'primary'}\r\n />\r\n ))\r\n )}\r\n {onClose && !isFloating && (\r\n <CloseButton size=\"small\" onClick={onClose} sx={{ position: 'relative', top: 0, right: 0 }}>\r\n <CloseIcon />\r\n </CloseButton>\r\n )}\r\n </ActionsContainer>\r\n )}\r\n </ContentContainer>\r\n </AlertRoot>\r\n );\r\n};\r\n\r\n// Legacy exports for backwards compatibility\r\nexport type AlertTitleProps = {\r\n children: React.ReactNode;\r\n};\r\nexport const AlertTitle: React.FC<AlertTitleProps> = ({ children }) => (\r\n <TitleText>{children}</TitleText>\r\n);\r\n","import React from 'react';\r\nimport {\r\n Dialog as MuiDialog, DialogProps as MuiDialogProps,\r\n DialogActions as MuiDialogActions, DialogActionsProps as MuiDialogActionsProps,\r\n DialogContent as MuiDialogContent, DialogContentProps as MuiDialogContentProps,\r\n DialogContentText as MuiDialogContentText, DialogContentTextProps as MuiDialogContentTextProps,\r\n DialogTitle as MuiDialogTitle, DialogTitleProps as MuiDialogTitleProps\r\n} from '@mui/material';\r\n\r\nexport type DialogProps = MuiDialogProps;\r\nexport const Dialog: React.FC<DialogProps> = (props) => <MuiDialog {...props} />;\r\n\r\nexport type DialogActionsProps = MuiDialogActionsProps;\r\nexport const DialogActions: React.FC<DialogActionsProps> = (props) => <MuiDialogActions {...props} />;\r\n\r\nexport type DialogContentProps = MuiDialogContentProps;\r\nexport const DialogContent: React.FC<DialogContentProps> = (props) => <MuiDialogContent {...props} />;\r\n\r\nexport type DialogContentTextProps = MuiDialogContentTextProps;\r\nexport const DialogContentText: React.FC<DialogContentTextProps> = (props) => <MuiDialogContentText {...props} />;\r\n\r\nexport type DialogTitleProps = MuiDialogTitleProps;\r\nexport const DialogTitle: React.FC<DialogTitleProps> = (props) => <MuiDialogTitle {...props} />;\r\n","import React from 'react';\r\nimport { Box, styled } from '@mui/material';\r\nimport { SearchIcon, FolderIcon, DescriptionIcon, AddIcon } from '../../theme/icons';\r\nimport tokens from '../../tokens/tokens.json';\r\nimport { Button } from '../Button';\r\n\r\nexport type EmptyStateIconType = 'featured' | 'illustration' | 'fileType' | 'folder';\r\nexport type EmptyStateSize = 'sm' | 'md' | 'lg';\r\n\r\nexport interface EmptyStateAction {\r\n label: string;\r\n onClick?: () => void;\r\n variant?: 'text' | 'outlined' | 'contained';\r\n color?: 'primary' | 'secondary' | 'error' | 'warning' | 'success';\r\n icon?: React.ReactNode;\r\n}\r\n\r\nexport interface EmptyStateProps {\r\n /**\r\n * The type of icon to display\r\n */\r\n iconType?: EmptyStateIconType;\r\n /**\r\n * The size of the empty state\r\n */\r\n size?: EmptyStateSize;\r\n /**\r\n * The heading text\r\n */\r\n heading?: string;\r\n /**\r\n * The description/supporting text\r\n */\r\n description?: string;\r\n /**\r\n * Primary action button\r\n */\r\n primaryAction?: EmptyStateAction;\r\n /**\r\n * Secondary action button\r\n */\r\n secondaryAction?: EmptyStateAction;\r\n /**\r\n * Whether to show the decorative background pattern\r\n */\r\n showBackground?: boolean;\r\n /**\r\n * Custom className\r\n */\r\n className?: string;\r\n}\r\n\r\nconst EmptyStateRoot = styled(Box)({\r\n position: 'relative',\r\n display: 'flex',\r\n flexDirection: 'column',\r\n alignItems: 'center',\r\n justifyContent: 'center',\r\n width: '100%',\r\n padding: tokens.spacing['4xl'],\r\n minHeight: '300px',\r\n});\r\n\r\nconst BackgroundPattern = styled(Box)({\r\n position: 'absolute',\r\n top: '-176px',\r\n left: '50%',\r\n transform: 'translateX(-50%)',\r\n width: '480px',\r\n height: '480px',\r\n backgroundImage: `\r\n linear-gradient(${tokens.color.gray[200]} 1px, transparent 1px),\r\n linear-gradient(90deg, ${tokens.color.gray[200]} 1px, transparent 1px)\r\n `,\r\n backgroundSize: '24px 24px',\r\n pointerEvents: 'none',\r\n opacity: 0.5,\r\n});\r\n\r\nconst ContentContainer = styled(Box)({\r\n display: 'flex',\r\n flexDirection: 'column',\r\n alignItems: 'center',\r\n gap: tokens.spacing['4xl'],\r\n position: 'relative',\r\n zIndex: 1,\r\n maxWidth: '100%',\r\n});\r\n\r\nconst IconTextContainer = styled(Box)({\r\n display: 'flex',\r\n flexDirection: 'column',\r\n alignItems: 'center',\r\n gap: tokens.spacing['2xl'],\r\n width: '100%',\r\n});\r\n\r\nconst FeaturedIconContainer = styled(Box)<{ size: EmptyStateSize }>(({ size }) => {\r\n const sizeMap = {\r\n sm: '40px',\r\n md: '48px',\r\n lg: '56px',\r\n };\r\n\r\n const iconSizeMap = {\r\n sm: '20px',\r\n md: '24px',\r\n lg: '28px',\r\n };\r\n\r\n return {\r\n display: 'flex',\r\n alignItems: 'center',\r\n justifyContent: 'center',\r\n width: sizeMap[size],\r\n height: sizeMap[size],\r\n backgroundColor: tokens.color.base.white,\r\n border: `1px solid ${tokens.color.gray[300]}`,\r\n borderRadius: tokens.borderRadius.lg,\r\n boxShadow: tokens.shadows.xs,\r\n flexShrink: 0,\r\n\r\n '& svg': {\r\n fontSize: iconSizeMap[size],\r\n color: tokens.color.gray[700],\r\n },\r\n };\r\n});\r\n\r\nconst IllustrationContainer = styled(Box)<{ size: EmptyStateSize }>(({ size }) => {\r\n const sizeMap = {\r\n sm: '112px',\r\n md: '128px',\r\n lg: '160px',\r\n };\r\n\r\n const iconSizeMap = {\r\n sm: '48px',\r\n md: '56px',\r\n lg: '64px',\r\n };\r\n\r\n return {\r\n position: 'relative',\r\n width: '172px',\r\n height: sizeMap[size],\r\n display: 'flex',\r\n alignItems: 'center',\r\n justifyContent: 'center',\r\n\r\n '& .background-circle': {\r\n position: 'absolute',\r\n width: sizeMap[size],\r\n height: sizeMap[size],\r\n backgroundColor: tokens.color.gray[100],\r\n borderRadius: '50%',\r\n top: 0,\r\n left: '50%',\r\n transform: 'translateX(-50%)',\r\n },\r\n\r\n '& .cloud-icon': {\r\n position: 'absolute',\r\n width: '140px',\r\n height: '80px',\r\n top: '16px',\r\n left: '16px',\r\n opacity: 0.6,\r\n },\r\n\r\n '& .search-icon-container': {\r\n position: 'absolute',\r\n width: iconSizeMap[size],\r\n height: iconSizeMap[size],\r\n backgroundColor: 'rgba(0, 0, 0, 0.2)',\r\n backdropFilter: 'blur(8px)',\r\n borderRadius: '50%',\r\n display: 'flex',\r\n alignItems: 'center',\r\n justifyContent: 'center',\r\n top: '60px',\r\n left: '58px',\r\n zIndex: 2,\r\n\r\n '& svg': {\r\n fontSize: size === 'sm' ? '24px' : size === 'md' ? '28px' : '32px',\r\n color: tokens.color.base.white,\r\n },\r\n },\r\n\r\n '& .decorative-circle': {\r\n position: 'absolute',\r\n backgroundColor: tokens.color.gray[100],\r\n borderRadius: '50%',\r\n },\r\n\r\n '& .circle-1': {\r\n width: '12px',\r\n height: '12px',\r\n top: '14px',\r\n left: '14px',\r\n },\r\n\r\n '& .circle-2': {\r\n width: '16px',\r\n height: '16px',\r\n top: '104px',\r\n left: '9px',\r\n },\r\n\r\n '& .circle-3': {\r\n width: '16px',\r\n height: '16px',\r\n top: '28px',\r\n right: '4px',\r\n },\r\n\r\n '& .circle-4': {\r\n width: '10px',\r\n height: '10px',\r\n top: '4px',\r\n right: '14px',\r\n },\r\n };\r\n});\r\n\r\nconst FileIconContainer = styled(Box)<{ size: EmptyStateSize }>(({ size }) => {\r\n const sizeMap = {\r\n sm: '40px',\r\n md: '48px',\r\n lg: '56px',\r\n };\r\n\r\n const iconSizeMap = {\r\n sm: '20px',\r\n md: '24px',\r\n lg: '28px',\r\n };\r\n\r\n return {\r\n display: 'flex',\r\n alignItems: 'center',\r\n justifyContent: 'center',\r\n width: sizeMap[size],\r\n height: sizeMap[size],\r\n backgroundColor: tokens.color.primary[50],\r\n borderRadius: tokens.borderRadius.lg,\r\n flexShrink: 0,\r\n\r\n '& svg': {\r\n fontSize: iconSizeMap[size],\r\n color: tokens.color.primary[600],\r\n },\r\n };\r\n});\r\n\r\nconst FolderIconContainer = styled(Box)<{ size: EmptyStateSize }>(({ size }) => {\r\n const sizeMap = {\r\n sm: '40px',\r\n md: '48px',\r\n lg: '56px',\r\n };\r\n\r\n const iconSizeMap = {\r\n sm: '20px',\r\n md: '24px',\r\n lg: '28px',\r\n };\r\n\r\n return {\r\n display: 'flex',\r\n alignItems: 'center',\r\n justifyContent: 'center',\r\n width: sizeMap[size],\r\n height: sizeMap[size],\r\n backgroundColor: 'transparent',\r\n flexShrink: 0,\r\n\r\n '& svg': {\r\n fontSize: iconSizeMap[size],\r\n color: tokens.color.gray[500],\r\n },\r\n };\r\n});\r\n\r\nconst TextContainer = styled(Box)({\r\n display: 'flex',\r\n flexDirection: 'column',\r\n alignItems: 'center',\r\n gap: tokens.spacing.md,\r\n maxWidth: '352px',\r\n textAlign: 'center',\r\n width: '100%',\r\n});\r\n\r\nconst HeadingText = styled('div')({\r\n fontFamily: tokens.typography.fontFamily.body,\r\n fontSize: tokens.typography.fontSize['text-lg'],\r\n fontWeight: tokens.typography.fontWeight.semibold,\r\n lineHeight: tokens.typography.lineHeight['text-lg'],\r\n color: tokens.color.gray[900],\r\n whiteSpace: 'pre-wrap',\r\n});\r\n\r\nconst DescriptionText = styled('div')({\r\n fontFamily: tokens.typography.fontFamily.body,\r\n fontSize: tokens.typography.fontSize['text-sm'],\r\n fontWeight: tokens.typography.fontWeight.regular,\r\n lineHeight: tokens.typography.lineHeight['text-sm'],\r\n color: tokens.color.gray[600],\r\n whiteSpace: 'pre-wrap',\r\n});\r\n\r\nconst ActionsContainer = styled(Box)({\r\n display: 'flex',\r\n gap: tokens.spacing.lg,\r\n alignItems: 'center',\r\n justifyContent: 'center',\r\n flexWrap: 'wrap',\r\n});\r\n\r\nconst CloudSVG = () => (\r\n <svg\r\n className=\"cloud-icon\"\r\n viewBox=\"0 0 140 80\"\r\n fill=\"none\"\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n >\r\n <path\r\n d=\"M110.5 50C110.5 38.4 101.6 29 90 29C88.5 29 87.1 29.2 85.7 29.5C81.9 19.1 71.9 12 60.5 12C45.8 12 34 23.8 34 38.5C34 39.3 34 40.1 34.1 40.9C25.4 42.4 19 50.1 19 59.5C19 69.7 27.3 78 37.5 78H104C108.4 78 112 74.4 112 70C112 65.6 108.4 62 104 62H90.5C99.6 62 107 54.6 107 45.5C107 42.8 106.3 40.3 105.1 38.1C108.1 40.6 110.5 44.1 110.5 48.5V50Z\"\r\n fill={tokens.color.gray[200]}\r\n />\r\n </svg>\r\n);\r\n\r\nconst renderIcon = (iconType: EmptyStateIconType, size: EmptyStateSize) => {\r\n switch (iconType) {\r\n case 'featured':\r\n return (\r\n <FeaturedIconContainer size={size}>\r\n <SearchIcon />\r\n </FeaturedIconContainer>\r\n );\r\n case 'illustration':\r\n return (\r\n <IllustrationContainer size={size}>\r\n <div className=\"background-circle\" />\r\n <div className=\"decorative-circle circle-1\" />\r\n <div className=\"decorative-circle circle-2\" />\r\n <div className=\"decorative-circle circle-3\" />\r\n <div className=\"decorative-circle circle-4\" />\r\n <CloudSVG />\r\n <div className=\"search-icon-container\">\r\n <SearchIcon />\r\n </div>\r\n </IllustrationContainer>\r\n );\r\n case 'fileType':\r\n return (\r\n <FileIconContainer size={size}>\r\n <DescriptionIcon />\r\n </FileIconContainer>\r\n );\r\n case 'folder':\r\n return (\r\n <FolderIconContainer size={size}>\r\n <FolderIcon />\r\n </FolderIconContainer>\r\n );\r\n default:\r\n return null;\r\n }\r\n};\r\n\r\nexport const EmptyState: React.FC<EmptyStateProps> = ({\r\n iconType = 'featured',\r\n size = 'md',\r\n heading = 'No items found',\r\n description,\r\n primaryAction,\r\n secondaryAction,\r\n showBackground = false,\r\n className,\r\n}) => {\r\n return (\r\n <EmptyStateRoot className={className}>\r\n {showBackground && <BackgroundPattern />}\r\n\r\n <ContentContainer>\r\n <IconTextContainer>\r\n {renderIcon(iconType, size)}\r\n\r\n <TextContainer>\r\n <HeadingText>{heading}</HeadingText>\r\n {description && (\r\n <DescriptionText>{description}</DescriptionText>\r\n )}\r\n </TextContainer>\r\n </IconTextContainer>\r\n\r\n {(primaryAction || secondaryAction) && (\r\n <ActionsContainer>\r\n {secondaryAction && (\r\n <Button\r\n label={secondaryAction.label}\r\n variant={secondaryAction.variant || 'outlined'}\r\n color={secondaryAction.color || 'secondary'}\r\n onClick={secondaryAction.onClick}\r\n size=\"medium\"\r\n />\r\n )}\r\n {primaryAction && (\r\n <Button\r\n label={primaryAction.label}\r\n variant={primaryAction.variant || 'contained'}\r\n color={primaryAction.color || 'primary'}\r\n onClick={primaryAction.onClick}\r\n iconLeading={primaryAction.icon}\r\n size=\"medium\"\r\n />\r\n )}\r\n </ActionsContainer>\r\n )}\r\n </ContentContainer>\r\n </EmptyStateRoot>\r\n );\r\n};\r\n","import React from 'react';\r\nimport { Box, styled, IconButton } from '@mui/material';\r\nimport { CloseIcon, CheckCircleOutlineIcon } from '../../theme/icons';\r\nimport tokens from '../../tokens/tokens.json';\r\n\r\n// Modal Types\r\nexport type ModalType = \r\n | 'stacked-left-aligned'\r\n | 'horizontal'\r\n | 'warning-horizontal'\r\n | 'destructive-horizontal'\r\n | 'destructive-stacked-left-aligned'\r\n | 'warning-stacked-left-aligned';\r\n\r\nexport type ModalSize = 'sm' | 'md' | 'lg';\r\n\r\nexport interface ModalProps {\r\n open: boolean;\r\n onClose: () => void;\r\n /**\r\n * Modal type/variant\r\n */\r\n type?: ModalType;\r\n /**\r\n * Modal title\r\n */\r\n title?: string;\r\n /**\r\n * Supporting/description text\r\n */\r\n description?: string;\r\n /**\r\n * Show featured icon\r\n */\r\n showIcon?: boolean;\r\n /**\r\n * Custom icon component\r\n */\r\n icon?: React.ReactNode;\r\n /**\r\n * Show close button\r\n */\r\n showCloseButton?: boolean;\r\n /**\r\n * Content to render in the modal body\r\n */\r\n children?: React.ReactNode;\r\n /**\r\n * Primary button text\r\n */\r\n primaryButtonText?: string;\r\n /**\r\n * Secondary button text\r\n */\r\n secondaryButtonText?: string;\r\n /**\r\n * Tertiary button text (for horizontal layouts)\r\n */\r\n tertiaryButtonText?: string;\r\n /**\r\n * Primary button handler\r\n */\r\n onPrimaryClick?: () => void;\r\n /**\r\n * Secondary button handler\r\n */\r\n onSecondaryClick?: () => void;\r\n /**\r\n * Tertiary button handler\r\n */\r\n onTertiaryClick?: () => void;\r\n /**\r\n * Show checkbox option (for horizontal layouts)\r\n */\r\n showCheckbox?: boolean;\r\n /**\r\n * Checkbox label\r\n */\r\n checkboxLabel?: string;\r\n /**\r\n * Modal width size\r\n */\r\n size?: ModalSize;\r\n /**\r\n * Show divider between header and content\r\n */\r\n showDivider?: boolean;\r\n}\r\n\r\n// Styled Components\r\nconst Backdrop = styled(Box)({\r\n position: 'fixed',\r\n top: 0,\r\n left: 0,\r\n right: 0,\r\n bottom: 0,\r\n backgroundColor: tokens.color.gray[950],\r\n opacity: 0.5,\r\n backdropFilter: 'blur(8px)',\r\n zIndex: 1300,\r\n});\r\n\r\nconst ModalContainer = styled(Box)({\r\n position: 'fixed',\r\n top: '50%',\r\n left: '50%',\r\n transform: 'translate(-50%, -50%)',\r\n zIndex: 1301,\r\n outline: 'none',\r\n display: 'flex',\r\n alignItems: 'center',\r\n justifyContent: 'center',\r\n});\r\n\r\nconst ModalPaper = styled(Box)<{ modalSize: ModalSize }>(({ modalSize }) => {\r\n const widthMap = {\r\n sm: '400px',\r\n md: '544px',\r\n lg: '672px',\r\n };\r\n\r\n return {\r\n backgroundColor: tokens.color.base.white,\r\n borderRadius: tokens.borderRadius.xl,\r\n boxShadow: `0px 20px 24px -4px rgba(10,13,18,0.08), 0px 8px 8px -4px rgba(10,13,18,0.03), 0px 3px 3px -1.5px rgba(10,13,18,0.02)`,\r\n width: widthMap[modalSize],\r\n maxWidth: '90vw',\r\n maxHeight: '90vh',\r\n overflow: 'hidden',\r\n display: 'flex',\r\n flexDirection: 'column',\r\n position: 'relative',\r\n };\r\n});\r\n\r\nconst ModalHeader = styled(Box)<{ variant: 'stacked' | 'horizontal' }>(({ variant }) => ({\r\n display: 'flex',\r\n flexDirection: variant === 'stacked' ? 'column' : 'row',\r\n gap: tokens.spacing.xl,\r\n padding: `${tokens.spacing['3xl']} ${tokens.spacing['3xl']} 0`,\r\n alignItems: variant === 'stacked' ? 'flex-start' : 'flex-start',\r\n}));\r\n\r\nconst FeaturedIcon = styled(Box)<{ variant: 'success' | 'warning' | 'error' }>(({ variant }) => {\r\n const colorMap = {\r\n success: {\r\n bg: tokens.color.success[50],\r\n icon: tokens.color.success[600],\r\n },\r\n warning: {\r\n bg: tokens.color.warning[50],\r\n icon: tokens.color.warning[600],\r\n },\r\n error: {\r\n bg: tokens.color.error[50],\r\n icon: tokens.color.error[600],\r\n },\r\n };\r\n\r\n const colors = colorMap[variant];\r\n\r\n return {\r\n width: '48px',\r\n height: '48px',\r\n borderRadius: tokens.borderRadius.full,\r\n backgroundColor: colors.bg,\r\n display: 'flex',\r\n alignItems: 'center',\r\n justifyContent: 'center',\r\n flexShrink: 0,\r\n '& svg': {\r\n width: '24px',\r\n height: '24px',\r\n color: colors.icon,\r\n },\r\n };\r\n});\r\n\r\nconst TextContent = styled(Box)({\r\n display: 'flex',\r\n flexDirection: 'column',\r\n gap: tokens.spacing.xxs,\r\n flex: 1,\r\n});\r\n\r\nconst Title = styled('h2')({\r\n fontFamily: tokens.typography.fontFamily.body,\r\n fontSize: tokens.typography.fontSize['text-md'],\r\n fontWeight: tokens.typography.fontWeight.semibold,\r\n lineHeight: tokens.typography.lineHeight['text-md'],\r\n color: tokens.color.gray[900],\r\n margin: 0,\r\n});\r\n\r\nconst Description = styled('p')({\r\n fontFamily: tokens.typography.fontFamily.body,\r\n fontSize: tokens.typography.fontSize['text-sm'],\r\n fontWeight: tokens.typography.fontWeight.regular,\r\n lineHeight: tokens.typography.lineHeight['text-sm'],\r\n color: tokens.color.gray[600],\r\n margin: 0,\r\n});\r\n\r\nconst CloseButton = styled(IconButton)({\r\n position: 'absolute',\r\n top: '12px',\r\n right: '12px',\r\n width: '44px',\r\n height: '44px',\r\n padding: tokens.spacing.md,\r\n borderRadius: tokens.borderRadius.md,\r\n color: tokens.color.gray[400],\r\n '&:hover': {\r\n backgroundColor: tokens.color.gray[50],\r\n },\r\n '& svg': {\r\n width: '24px',\r\n height: '24px',\r\n },\r\n});\r\n\r\nconst ContentSection = styled(Box)({\r\n padding: `${tokens.spacing['4xl']} 0 0`,\r\n});\r\n\r\nconst Divider = styled(Box)({\r\n width: '100%',\r\n height: '1px',\r\n backgroundColor: tokens.color.gray[200],\r\n margin: `${tokens.spacing.xl} 0 0`,\r\n});\r\n\r\nconst ModalActions = styled(Box)<{ layout: 'stacked' | 'horizontal' }>(({ layout }) => ({\r\n display: 'flex',\r\n flexDirection: layout === 'horizontal' ? 'row' : 'column',\r\n gap: tokens.spacing.lg,\r\n padding: `0 ${tokens.spacing['3xl']} ${tokens.spacing['3xl']}`,\r\n alignItems: layout === 'horizontal' ? 'center' : 'stretch',\r\n}));\r\n\r\nconst CheckboxWrapper = styled(Box)({\r\n display: 'flex',\r\n gap: tokens.spacing.md,\r\n alignItems: 'center',\r\n});\r\n\r\nconst CheckboxBase = styled('input')({\r\n width: '16px',\r\n height: '16px',\r\n border: `1px solid ${tokens.color.gray[300]}`,\r\n borderRadius: tokens.spacing.xs,\r\n cursor: 'pointer',\r\n '&:checked': {\r\n backgroundColor: tokens.color.primary[600],\r\n borderColor: tokens.color.primary[600],\r\n },\r\n});\r\n\r\nconst CheckboxLabel = styled('label')({\r\n fontFamily: tokens.typography.fontFamily.body,\r\n fontSize: tokens.typography.fontSize['text-sm'],\r\n fontWeight: tokens.typography.fontWeight.medium,\r\n lineHeight: tokens.typography.lineHeight['text-sm'],\r\n color: tokens.color.gray[700],\r\n cursor: 'pointer',\r\n});\r\n\r\nconst ButtonGroup = styled(Box)<{ layout: 'stacked' | 'horizontal' }>(({ layout }) => ({\r\n display: 'flex',\r\n gap: tokens.spacing.lg,\r\n flex: layout === 'horizontal' ? 1 : 'none',\r\n justifyContent: layout === 'horizontal' ? 'flex-end' : 'stretch',\r\n width: layout === 'stacked' ? '100%' : 'auto',\r\n}));\r\n\r\nconst TertiaryButton = styled('button')({\r\n display: 'flex',\r\n gap: tokens.spacing.sm,\r\n alignItems: 'center',\r\n justifyContent: 'center',\r\n padding: `10px ${tokens.spacing.xl}`,\r\n borderRadius: tokens.borderRadius.md,\r\n border: 'none',\r\n backgroundColor: 'transparent',\r\n fontFamily: tokens.typography.fontFamily.body,\r\n fontSize: tokens.typography.fontSize['text-md'],\r\n fontWeight: tokens.typography.fontWeight.semibold,\r\n lineHeight: tokens.typography.lineHeight['text-md'],\r\n color: tokens.color.gray[600],\r\n cursor: 'pointer',\r\n transition: 'background-color 0.2s',\r\n '&:hover': {\r\n backgroundColor: tokens.color.gray[50],\r\n },\r\n});\r\n\r\nconst SecondaryButton = styled('button')<{ layout: 'stacked' | 'horizontal' }>(({ layout }) => ({\r\n display: 'flex',\r\n gap: tokens.spacing.sm,\r\n alignItems: 'center',\r\n justifyContent: 'center',\r\n padding: `10px ${tokens.spacing.xl}`,\r\n borderRadius: tokens.borderRadius.md,\r\n backgroundColor: tokens.color.base.white,\r\n border: `1px solid ${tokens.color.gray[300]}`,\r\n boxShadow: tokens.shadows.xs,\r\n fontFamily: tokens.typography.fontFamily.body,\r\n fontSize: tokens.typography.fontSize['text-md'],\r\n fontWeight: tokens.typography.fontWeight.semibold,\r\n lineHeight: tokens.typography.lineHeight['text-md'],\r\n color: tokens.color.gray[700],\r\n cursor: 'pointer',\r\n transition: 'background-color 0.2s',\r\n flex: layout === 'stacked' ? 1 : 'none',\r\n position: 'relative',\r\n '&:hover': {\r\n backgroundColor: tokens.color.gray[50],\r\n },\r\n '&::after': {\r\n content: '\"\"',\r\n position: 'absolute',\r\n inset: 0,\r\n pointerEvents: 'none',\r\n boxShadow: 'inset 0px 0px 0px 1px rgba(10,13,18,0), inset 0px -2px 0px 0px rgba(10,13,18,0)',\r\n },\r\n}));\r\n\r\nconst PrimaryButton = styled('button')<{ variant: 'primary' | 'error'; layout: 'stacked' | 'horizontal' }>(({ variant, layout }) => ({\r\n display: 'flex',\r\n gap: tokens.spacing.sm,\r\n alignItems: 'center',\r\n justifyContent: 'center',\r\n padding: `10px ${tokens.spacing.xl}`,\r\n borderRadius: tokens.borderRadius.md,\r\n backgroundColor: variant === 'error' ? tokens.color.error[600] : tokens.color.primary[600],\r\n border: '2px solid transparent',\r\n boxShadow: tokens.shadows.xs,\r\n fontFamily: tokens.typography.fontFamily.body,\r\n fontSize: tokens.typography.fontSize['text-md'],\r\n fontWeight: tokens.typography.fontWeight.semibold,\r\n lineHeight: tokens.typography.lineHeight['text-md'],\r\n color: tokens.color.base.white,\r\n cursor: 'pointer',\r\n transition: 'background-color 0.2s',\r\n flex: layout === 'stacked' ? 1 : 'none',\r\n position: 'relative',\r\n '&:hover': {\r\n backgroundColor: variant === 'error' ? tokens.color.error[700] : tokens.color.primary[700],\r\n },\r\n '&::after': {\r\n content: '\"\"',\r\n position: 'absolute',\r\n inset: 0,\r\n pointerEvents: 'none',\r\n boxShadow: 'inset 0px 0px 0px 1px rgba(10,13,18,0), inset 0px -2px 0px 0px rgba(10,13,18,0)',\r\n },\r\n}));\r\n\r\nexport const Modal: React.FC<ModalProps> = ({\r\n open,\r\n onClose,\r\n type = 'stacked-left-aligned',\r\n title = 'Modal title',\r\n description,\r\n showIcon = true,\r\n icon,\r\n showCloseButton = true,\r\n children,\r\n primaryButtonText = 'Confirm',\r\n secondaryButtonText = 'Cancel',\r\n tertiaryButtonText,\r\n onPrimaryClick,\r\n onSecondaryClick,\r\n onTertiaryClick,\r\n showCheckbox = false,\r\n checkboxLabel = \"Don't show again\",\r\n size = 'sm',\r\n showDivider = false,\r\n}) => {\r\n const [checkboxChecked, setCheckboxChecked] = React.useState(false);\r\n\r\n if (!open) return null;\r\n\r\n // Determine layout and icon variant based on type\r\n const isHorizontal = type.includes('horizontal');\r\n const isDestructive = type.includes('destructive');\r\n const isWarning = type.includes('warning');\r\n\r\n const layout = isHorizontal ? 'horizontal' : 'stacked';\r\n const iconVariant = isDestructive ? 'error' : isWarning ? 'warning' : 'success';\r\n const buttonVariant = isDestructive ? 'error' : 'primary';\r\n\r\n // Determine modal size based on layout\r\n const modalSize = isHorizontal ? 'md' : size;\r\n\r\n const handleBackdropClick = (e: React.MouseEvent) => {\r\n if (e.target === e.currentTarget) {\r\n onClose();\r\n }\r\n };\r\n\r\n const defaultIcon = <CheckCircleOutlineIcon />;\r\n\r\n return (\r\n <>\r\n <Backdrop onClick={handleBackdropClick} />\r\n <ModalContainer onClick={handleBackdropClick}>\r\n <ModalPaper modalSize={modalSize} onClick={(e: React.MouseEvent) => e.stopPropagation()}>\r\n <ModalHeader variant={layout}>\r\n {showIcon && (\r\n <FeaturedIcon variant={iconVariant}>\r\n {icon || defaultIcon}\r\n </FeaturedIcon>\r\n )}\r\n <TextContent>\r\n <Title>{title}</Title>\r\n {description && <Description>{description}</Description>}\r\n </TextContent>\r\n </ModalHeader>\r\n\r\n {showCloseButton && (\r\n <CloseButton onClick={onClose} size=\"small\">\r\n <CloseIcon />\r\n </CloseButton>\r\n )}\r\n\r\n {showDivider && <Divider />}\r\n\r\n {children && (\r\n <ContentSection>\r\n {children}\r\n </ContentSection>\r\n )}\r\n\r\n <ContentSection>\r\n <ModalActions layout={layout}>\r\n {isHorizontal && showCheckbox && (\r\n <CheckboxWrapper>\r\n <CheckboxBase\r\n type=\"checkbox\"\r\n checked={checkboxChecked}\r\n onChange={(e) => setCheckboxChecked(e.target.checked)}\r\n id=\"modal-checkbox\"\r\n />\r\n <CheckboxLabel htmlFor=\"modal-checkbox\">\r\n {checkboxLabel}\r\n </CheckboxLabel>\r\n </CheckboxWrapper>\r\n )}\r\n\r\n <ButtonGroup layout={layout}>\r\n {tertiaryButtonText && (\r\n <TertiaryButton onClick={onTertiaryClick || onClose}>\r\n {tertiaryButtonText}\r\n </TertiaryButton>\r\n )}\r\n <SecondaryButton\r\n layout={layout}\r\n onClick={onSecondaryClick || onClose}\r\n >\r\n {secondaryButtonText}\r\n </SecondaryButton>\r\n <PrimaryButton\r\n variant={buttonVariant}\r\n layout={layout}\r\n onClick={onPrimaryClick}\r\n >\r\n {primaryButtonText}\r\n </PrimaryButton>\r\n </ButtonGroup>\r\n </ModalActions>\r\n </ContentSection>\r\n </ModalPaper>\r\n </ModalContainer>\r\n </>\r\n );\r\n};\r\n\r\nModal.displayName = 'Modal';\r\n","import React from 'react';\r\nimport { Box, styled, Checkbox as MuiCheckbox, FormControlLabel, Divider } from '@mui/material';\r\nimport { SettingsIcon } from '../../theme/icons';\r\nimport tokens from '../../tokens/tokens.json';\r\n\r\nexport type ModalActionsLayoutType = \r\n | 'vertical-fill-container' \r\n | 'horizontal-fill-container' \r\n | 'horizontal-right-aligned-checkbox';\r\n\r\nexport type ModalActionsBreakpoint = 'desktop' | 'mobile';\r\n\r\nexport interface ModalActionsProps {\r\n /**\r\n * Whether to show the checkbox (\"Don't show again\")\r\n * @default false\r\n */\r\n checkbox?: boolean;\r\n \r\n /**\r\n * Whether to show the tertiary button (Settings)\r\n * @default false\r\n */\r\n tertiaryButton?: boolean;\r\n \r\n /**\r\n * Whether to show the divider above the actions\r\n * @default true\r\n */\r\n divider?: boolean;\r\n \r\n /**\r\n * The layout type of the modal actions\r\n * @default 'horizontal-fill-container'\r\n */\r\n type?: ModalActionsLayoutType;\r\n \r\n /**\r\n * Whether this is a destructive action (shows Delete button)\r\n * @default false\r\n */\r\n destructive?: boolean;\r\n \r\n /**\r\n * The breakpoint for responsive design\r\n * @default 'desktop'\r\n */\r\n breakpoint?: ModalActionsBreakpoint;\r\n \r\n /**\r\n * Callback when the Cancel button is clicked\r\n */\r\n onCancel?: () => void;\r\n \r\n /**\r\n * Callback when the Confirm/Delete button is clicked\r\n */\r\n onConfirm?: () => void;\r\n \r\n /**\r\n * Callback when the tertiary button (Settings) is clicked\r\n */\r\n onTertiaryAction?: () => void;\r\n \r\n /**\r\n * Callback when the checkbox is toggled\r\n */\r\n onCheckboxChange?: (checked: boolean) => void;\r\n \r\n /**\r\n * The checked state of the checkbox\r\n */\r\n checkboxChecked?: boolean;\r\n \r\n /**\r\n * Custom label for the confirm button\r\n * @default 'Confirm'\r\n */\r\n confirmLabel?: string;\r\n \r\n /**\r\n * Custom label for the cancel button\r\n * @default 'Cancel'\r\n */\r\n cancelLabel?: string;\r\n \r\n /**\r\n * Custom label for the delete button\r\n * @default 'Delete'\r\n */\r\n deleteLabel?: string;\r\n \r\n /**\r\n * Custom label for the tertiary button\r\n * @default 'Settings'\r\n */\r\n tertiaryLabel?: string;\r\n \r\n /**\r\n * Custom label for the checkbox\r\n * @default \"Don't show again\"\r\n */\r\n checkboxLabel?: string;\r\n}\r\n\r\n// Styled Components\r\nconst ActionsContainer = styled(Box)<{ \r\n breakpoint: ModalActionsBreakpoint;\r\n type: ModalActionsLayoutType;\r\n}>(({ breakpoint, type }) => ({\r\n display: 'flex',\r\n flexDirection: 'column',\r\n alignItems: breakpoint === 'desktop' && type === 'horizontal-right-aligned-checkbox' ? 'center' : 'flex-start',\r\n paddingTop: breakpoint === 'desktop' ? tokens.spacing['4xl'] : tokens.spacing['3xl'],\r\n paddingBottom: 0,\r\n paddingLeft: 0,\r\n paddingRight: 0,\r\n width: breakpoint === 'desktop' ? '560px' : '343px',\r\n maxWidth: '100%',\r\n}));\r\n\r\nconst ContentArea = styled(Box)<{\r\n layout: ModalActionsLayoutType;\r\n breakpoint: ModalActionsBreakpoint;\r\n}>(({ layout, breakpoint }) => ({\r\n display: 'flex',\r\n gap: tokens.spacing.lg,\r\n paddingTop: 0,\r\n paddingBottom: breakpoint === 'desktop' ? tokens.spacing['3xl'] : tokens.spacing.xl,\r\n paddingLeft: breakpoint === 'desktop' ? tokens.spacing['3xl'] : tokens.spacing.xl,\r\n paddingRight: breakpoint === 'desktop' ? tokens.spacing['3xl'] : tokens.spacing.xl,\r\n width: '100%',\r\n flexDirection: layout === 'vertical-fill-container' ? 'column' : 'row',\r\n alignItems: layout === 'vertical-fill-container' ? 'flex-start' : \r\n layout === 'horizontal-right-aligned-checkbox' ? 'center' : 'flex-start',\r\n}));\r\n\r\nconst StyledButton = styled('button')<{\r\n variant: 'primary' | 'secondary' | 'destructive';\r\n fullWidth?: boolean;\r\n flex?: boolean;\r\n}>(({ variant, fullWidth, flex }) => ({\r\n display: 'flex',\r\n alignItems: 'center',\r\n justifyContent: 'center',\r\n gap: tokens.spacing.sm,\r\n paddingTop: '10px',\r\n paddingBottom: '10px',\r\n paddingLeft: tokens.spacing.xl,\r\n paddingRight: tokens.spacing.xl,\r\n borderRadius: tokens.borderRadius.md,\r\n fontSize: tokens.typography.fontSize['text-md'],\r\n fontFamily: tokens.typography.fontFamily.body,\r\n fontWeight: tokens.typography.fontWeight.semibold,\r\n lineHeight: tokens.typography.lineHeight['text-md'],\r\n cursor: 'pointer',\r\n transition: 'all 0.2s ease-in-out',\r\n border: variant === 'secondary' ? `1px solid ${tokens.color.gray[300]}` : \r\n variant === 'primary' ? `2px solid transparent` : \r\n `2px solid transparent`,\r\n backgroundColor: variant === 'primary' ? tokens.color.primary[600] : \r\n variant === 'destructive' ? tokens.color.error[600] : \r\n tokens.color.base.white,\r\n color: variant === 'secondary' ? tokens.color.gray[700] : tokens.color.base.white,\r\n width: fullWidth ? '100%' : flex ? 'auto' : 'auto',\r\n flex: flex ? '1 0 0' : 'none',\r\n minWidth: 0,\r\n overflow: 'hidden',\r\n \r\n '&:hover': {\r\n backgroundColor: variant === 'primary' ? tokens.color.primary[700] : \r\n variant === 'destructive' ? tokens.color.error[700] : \r\n tokens.color.gray[50],\r\n },\r\n \r\n '&:focus': {\r\n outline: `2px solid ${tokens.color.primary[600]}`,\r\n outlineOffset: '2px',\r\n },\r\n \r\n '&:active': {\r\n transform: 'translateY(1px)',\r\n },\r\n \r\n '&:disabled': {\r\n opacity: 0.5,\r\n cursor: 'not-allowed',\r\n },\r\n}));\r\n\r\nconst TertiaryButton = styled('button')({\r\n display: 'flex',\r\n alignItems: 'center',\r\n justifyContent: 'center',\r\n gap: tokens.spacing.sm,\r\n padding: 0,\r\n border: 'none',\r\n backgroundColor: 'transparent',\r\n color: tokens.color.gray[600],\r\n fontSize: tokens.typography.fontSize['text-md'],\r\n fontFamily: tokens.typography.fontFamily.body,\r\n fontWeight: tokens.typography.fontWeight.semibold,\r\n lineHeight: tokens.typography.lineHeight['text-md'],\r\n cursor: 'pointer',\r\n transition: 'color 0.2s ease-in-out',\r\n \r\n '&:hover': {\r\n color: tokens.color.gray[700],\r\n },\r\n \r\n '&:focus': {\r\n outline: `2px solid ${tokens.color.primary[600]}`,\r\n outlineOffset: '2px',\r\n borderRadius: tokens.borderRadius.sm,\r\n },\r\n});\r\n\r\nconst CheckboxContainer = styled(Box)<{ shouldFlexGrow?: boolean }>(({ shouldFlexGrow }) => ({\r\n display: 'flex',\r\n gap: tokens.spacing.md,\r\n alignItems: 'flex-start',\r\n flex: shouldFlexGrow ? '1 0 0' : 'none',\r\n minWidth: 0,\r\n}));\r\n\r\nconst ActionsGroup = styled(Box)({\r\n display: 'flex',\r\n flex: '1 0 0',\r\n gap: tokens.spacing.lg,\r\n alignItems: 'center',\r\n justifyContent: 'flex-end',\r\n minWidth: 0,\r\n});\r\n\r\nconst StyledDivider = styled(Divider)({\r\n width: '100%',\r\n borderColor: tokens.color.gray[200],\r\n});\r\n\r\nconst CheckboxAndButtonGroup = styled(Box)({\r\n display: 'flex',\r\n gap: tokens.spacing.lg,\r\n alignItems: 'center',\r\n width: '100%',\r\n});\r\n\r\n/**\r\n * ModalActions component provides standardized action areas for modal dialogs\r\n * with support for different layouts, responsive breakpoints, and destructive actions.\r\n * \r\n * Features:\r\n * - Three layout types: vertical fill, horizontal fill, and horizontal with checkbox\r\n * - Desktop and mobile breakpoints\r\n * - Optional checkbox, tertiary button, and divider\r\n * - Support for destructive actions (Delete button)\r\n * - Consistent spacing and styling from design tokens\r\n */\r\nexport const ModalActions: React.FC<ModalActionsProps> = ({\r\n checkbox = false,\r\n tertiaryButton = false,\r\n divider = true,\r\n type = 'horizontal-fill-container',\r\n destructive = false,\r\n breakpoint = 'desktop',\r\n onCancel,\r\n onConfirm,\r\n onTertiaryAction,\r\n onCheckboxChange,\r\n checkboxChecked = false,\r\n confirmLabel = 'Confirm',\r\n cancelLabel = 'Cancel',\r\n deleteLabel = 'Delete',\r\n tertiaryLabel = 'Settings',\r\n checkboxLabel = \"Don't show again\",\r\n}) => {\r\n const isVertical = type === 'vertical-fill-container';\r\n const isHorizontalFill = type === 'horizontal-fill-container';\r\n const isHorizontalCheckbox = type === 'horizontal-right-aligned-checkbox';\r\n const isMobile = breakpoint === 'mobile';\r\n\r\n const renderPrimaryButton = () => {\r\n if (destructive) {\r\n return (\r\n <StyledButton\r\n variant=\"destructive\"\r\n fullWidth={isVertical || (isHorizontalFill && isMobile) || (isHorizontalCheckbox && isMobile)}\r\n flex={isHorizontalFill && !isMobile}\r\n onClick={onConfirm}\r\n >\r\n {deleteLabel}\r\n </StyledButton>\r\n );\r\n }\r\n \r\n return (\r\n <StyledButton\r\n variant=\"primary\"\r\n fullWidth={isVertical || (isHorizontalFill && isMobile) || (isHorizontalCheckbox && isMobile)}\r\n flex={isHorizontalFill && !isMobile}\r\n onClick={onConfirm}\r\n >\r\n {confirmLabel}\r\n </StyledButton>\r\n );\r\n };\r\n\r\n const renderSecondaryButton = () => (\r\n <StyledButton\r\n variant=\"secondary\"\r\n fullWidth={isVertical || (isHorizontalFill && isMobile) || (isHorizontalCheckbox && isMobile)}\r\n flex={isHorizontalFill && !isMobile}\r\n onClick={onCancel}\r\n >\r\n {cancelLabel}\r\n </StyledButton>\r\n );\r\n\r\n const renderCheckbox = () => {\r\n if (!checkbox) return null;\r\n \r\n return (\r\n <CheckboxContainer shouldFlexGrow={isHorizontalCheckbox && isMobile}>\r\n <FormControlLabel\r\n control={\r\n <MuiCheckbox\r\n checked={checkboxChecked}\r\n onChange={(e) => onCheckboxChange?.(e.target.checked)}\r\n size=\"small\"\r\n sx={{\r\n padding: '2px 0 0 0',\r\n '& .MuiSvgIcon-root': {\r\n fontSize: '16px',\r\n },\r\n }}\r\n />\r\n }\r\n label={checkboxLabel}\r\n sx={{\r\n margin: 0,\r\n gap: tokens.spacing.md,\r\n '& .MuiFormControlLabel-label': {\r\n fontFamily: tokens.typography.fontFamily.body,\r\n fontSize: tokens.typography.fontSize['text-sm'],\r\n fontWeight: tokens.typography.fontWeight.medium,\r\n lineHeight: tokens.typography.lineHeight['text-sm'],\r\n color: tokens.color.gray[700],\r\n },\r\n }}\r\n />\r\n </CheckboxContainer>\r\n );\r\n };\r\n\r\n const renderTertiaryButton = () => {\r\n if (!tertiaryButton) return null;\r\n \r\n return (\r\n <TertiaryButton onClick={onTertiaryAction}>\r\n <SettingsIcon sx={{ fontSize: '20px', color: tokens.color.gray[400] }} />\r\n {tertiaryLabel}\r\n </TertiaryButton>\r\n );\r\n };\r\n\r\n const renderContent = () => {\r\n // Vertical layout (stacked buttons)\r\n if (isVertical) {\r\n return (\r\n <>\r\n {!destructive ? (\r\n <>\r\n {renderPrimaryButton()}\r\n {renderSecondaryButton()}\r\n </>\r\n ) : (\r\n <>\r\n {renderSecondaryButton()}\r\n {renderPrimaryButton()}\r\n </>\r\n )}\r\n </>\r\n );\r\n }\r\n\r\n // Horizontal fill layout (side by side buttons)\r\n if (isHorizontalFill) {\r\n return (\r\n <>\r\n {!destructive ? (\r\n <>\r\n {renderSecondaryButton()}\r\n {renderPrimaryButton()}\r\n </>\r\n ) : (\r\n <>\r\n {renderSecondaryButton()}\r\n {renderPrimaryButton()}\r\n </>\r\n )}\r\n </>\r\n );\r\n }\r\n\r\n // Horizontal right-aligned with checkbox layout\r\n if (isHorizontalCheckbox) {\r\n if (isMobile) {\r\n return (\r\n <>\r\n <CheckboxAndButtonGroup>\r\n {renderCheckbox()}\r\n {renderTertiaryButton()}\r\n </CheckboxAndButtonGroup>\r\n {!destructive ? renderPrimaryButton() : null}\r\n {renderSecondaryButton()}\r\n {destructive ? renderPrimaryButton() : null}\r\n </>\r\n );\r\n } else {\r\n return (\r\n <>\r\n {renderCheckbox()}\r\n {renderTertiaryButton()}\r\n <ActionsGroup>\r\n {renderSecondaryButton()}\r\n {renderPrimaryButton()}\r\n </ActionsGroup>\r\n </>\r\n );\r\n }\r\n }\r\n\r\n return null;\r\n };\r\n\r\n return (\r\n <ActionsContainer breakpoint={breakpoint} type={type}>\r\n {divider && !isMobile && <StyledDivider />}\r\n <ContentArea layout={type} breakpoint={breakpoint}>\r\n {renderContent()}\r\n </ContentArea>\r\n {divider && isMobile && <StyledDivider />}\r\n </ActionsContainer>\r\n );\r\n};\r\n","import React from 'react';\r\nimport { Box, styled, IconButton } from '@mui/material';\r\nimport { CloseIcon, CheckCircleOutlineIcon } from '../../theme/icons';\r\nimport tokens from '../../tokens/tokens.json';\r\n\r\nexport type ModalHeaderType = 'left-aligned' | 'center-aligned' | 'horizontal-left-aligned';\r\nexport type ModalHeaderBreakpoint = 'desktop' | 'mobile';\r\nexport type IconVariant = 'success' | 'warning' | 'error' | 'info';\r\n\r\nexport interface ModalHeaderProps {\r\n /**\r\n * Whether to show the close (X) button\r\n * @default true\r\n */\r\n xCloseButton?: boolean;\r\n \r\n /**\r\n * Whether to show the featured icon\r\n * @default true\r\n */\r\n featuredIcon?: boolean;\r\n \r\n /**\r\n * Whether to add padding at the bottom\r\n * @default true\r\n */\r\n paddingBottom?: boolean;\r\n \r\n /**\r\n * Whether to show the divider\r\n * @default true\r\n */\r\n divider?: boolean;\r\n \r\n /**\r\n * The layout type of the modal header\r\n * @default 'left-aligned'\r\n */\r\n type?: ModalHeaderType;\r\n \r\n /**\r\n * The breakpoint for responsive design\r\n * @default 'desktop'\r\n */\r\n breakpoint?: ModalHeaderBreakpoint;\r\n \r\n /**\r\n * The icon variant/color scheme\r\n * @default 'success'\r\n */\r\n iconVariant?: IconVariant;\r\n \r\n /**\r\n * Custom icon component\r\n */\r\n icon?: React.ReactNode;\r\n \r\n /**\r\n * The title text\r\n */\r\n title?: string;\r\n \r\n /**\r\n * The supporting/description text\r\n */\r\n description?: string;\r\n \r\n /**\r\n * Callback when close button is clicked\r\n */\r\n onClose?: () => void;\r\n}\r\n\r\n// Styled Components\r\nconst HeaderContainer = styled(Box)<{ type: ModalHeaderType }>(({ type }) => ({\r\n display: 'flex',\r\n flexDirection: 'column',\r\n width: '100%',\r\n alignItems: type === 'left-aligned' || type === 'horizontal-left-aligned' ? 'flex-start' : 'center',\r\n position: 'relative',\r\n}));\r\n\r\nconst ContentArea = styled(Box)<{\r\n type: ModalHeaderType;\r\n breakpoint: ModalHeaderBreakpoint;\r\n}>(({ type, breakpoint }) => {\r\n const isDesktop = breakpoint === 'desktop';\r\n const isHorizontal = type === 'horizontal-left-aligned';\r\n const isCenter = type === 'center-aligned';\r\n \r\n return {\r\n display: 'flex',\r\n gap: tokens.spacing.xl,\r\n paddingTop: isDesktop ? tokens.spacing['3xl'] : tokens.spacing['2xl'],\r\n paddingLeft: isDesktop ? tokens.spacing['3xl'] : tokens.spacing.xl,\r\n paddingRight: isDesktop ? tokens.spacing['3xl'] : tokens.spacing.xl,\r\n paddingBottom: 0,\r\n width: '100%',\r\n flexDirection: isHorizontal && isDesktop ? 'row' : 'column',\r\n alignItems: isHorizontal && isDesktop ? 'flex-start' : \r\n isCenter ? 'center' : 'flex-start',\r\n };\r\n});\r\n\r\nconst FeaturedIconContainer = styled(Box)<{ variant: IconVariant }>(({ variant }) => {\r\n const colorMap = {\r\n success: {\r\n bg: tokens.color.success[50],\r\n icon: tokens.color.success[600],\r\n },\r\n warning: {\r\n bg: tokens.color.warning[50],\r\n icon: tokens.color.warning[600],\r\n },\r\n error: {\r\n bg: tokens.color.error[50],\r\n icon: tokens.color.error[600],\r\n },\r\n info: {\r\n bg: tokens.color.gray[100],\r\n icon: tokens.color.gray[600],\r\n },\r\n };\r\n \r\n const colors = colorMap[variant];\r\n \r\n return {\r\n width: '48px',\r\n height: '48px',\r\n borderRadius: tokens.borderRadius.full,\r\n backgroundColor: colors.bg,\r\n display: 'flex',\r\n alignItems: 'center',\r\n justifyContent: 'center',\r\n flexShrink: 0,\r\n overflow: 'hidden',\r\n \r\n '& .MuiSvgIcon-root': {\r\n fontSize: '24px',\r\n color: colors.icon,\r\n },\r\n };\r\n});\r\n\r\nconst TextContainer = styled(Box)<{\r\n type: ModalHeaderType;\r\n isHorizontal: boolean;\r\n}>(({ type, isHorizontal }) => ({\r\n display: 'flex',\r\n flexDirection: 'column',\r\n gap: tokens.spacing.xxs,\r\n width: '100%',\r\n flex: isHorizontal ? '1 0 0' : 'none',\r\n minWidth: 0,\r\n alignItems: type === 'center-aligned' ? 'center' : 'flex-start',\r\n textAlign: type === 'center-aligned' ? 'center' : 'left',\r\n whiteSpace: 'pre-wrap',\r\n}));\r\n\r\nconst Title = styled('p')({\r\n fontFamily: tokens.typography.fontFamily.body,\r\n fontSize: tokens.typography.fontSize['text-md'],\r\n fontWeight: tokens.typography.fontWeight.semibold,\r\n lineHeight: tokens.typography.lineHeight['text-md'],\r\n color: tokens.color.gray[900],\r\n margin: 0,\r\n width: '100%',\r\n});\r\n\r\nconst Description = styled('p')({\r\n fontFamily: tokens.typography.fontFamily.body,\r\n fontSize: tokens.typography.fontSize['text-sm'],\r\n fontWeight: tokens.typography.fontWeight.regular,\r\n lineHeight: tokens.typography.lineHeight['text-sm'],\r\n color: tokens.color.gray[600],\r\n margin: 0,\r\n width: '100%',\r\n});\r\n\r\nconst CloseButton = styled(IconButton)({\r\n position: 'absolute',\r\n top: '12px',\r\n right: '12px',\r\n width: '44px',\r\n height: '44px',\r\n padding: tokens.spacing.md,\r\n borderRadius: tokens.borderRadius.md,\r\n \r\n '& .MuiSvgIcon-root': {\r\n fontSize: '24px',\r\n color: tokens.color.gray[400],\r\n },\r\n \r\n '&:hover': {\r\n backgroundColor: tokens.color.gray[50],\r\n \r\n '& .MuiSvgIcon-root': {\r\n color: tokens.color.gray[600],\r\n },\r\n },\r\n \r\n '&:focus': {\r\n outline: `2px solid ${tokens.color.primary[600]}`,\r\n outlineOffset: '2px',\r\n },\r\n});\r\n\r\nconst PaddingBottom = styled(Box)({\r\n height: '20px',\r\n width: '100%',\r\n flexShrink: 0,\r\n});\r\n\r\nconst Divider = styled(Box)({\r\n height: '1px',\r\n width: '100%',\r\n backgroundColor: tokens.color.gray[200],\r\n flexShrink: 0,\r\n});\r\n\r\n/**\r\n * ModalHeader component provides standardized header sections for modal dialogs\r\n * with support for different layouts, responsive breakpoints, and icon variants.\r\n * \r\n * Features:\r\n * - Three layout types: left-aligned, center-aligned, and horizontal left-aligned\r\n * - Desktop and mobile breakpoints\r\n * - Optional featured icon with color variants (success, warning, error, info)\r\n * - Optional close button\r\n * - Optional divider and padding\r\n * - Customizable title and description text\r\n * - Consistent spacing and styling from design tokens\r\n */\r\nexport const ModalHeader: React.FC<ModalHeaderProps> = ({\r\n xCloseButton = true,\r\n featuredIcon = true,\r\n paddingBottom = true,\r\n divider = true,\r\n type = 'left-aligned',\r\n breakpoint = 'desktop',\r\n iconVariant = 'success',\r\n icon,\r\n title = 'Blog post published',\r\n description = 'This blog post has been published. Team members will be able to edit this post and republish changes.',\r\n onClose,\r\n}) => {\r\n const isHorizontal = type === 'horizontal-left-aligned' && breakpoint === 'desktop';\r\n \r\n const renderIcon = () => {\r\n if (!featuredIcon) return null;\r\n \r\n return (\r\n <FeaturedIconContainer variant={iconVariant}>\r\n {icon || <CheckCircleOutlineIcon />}\r\n </FeaturedIconContainer>\r\n );\r\n };\r\n \r\n return (\r\n <HeaderContainer type={type}>\r\n <ContentArea type={type} breakpoint={breakpoint}>\r\n {renderIcon()}\r\n \r\n <TextContainer type={type} isHorizontal={isHorizontal}>\r\n {title && <Title>{title}</Title>}\r\n {description && <Description>{description}</Description>}\r\n </TextContainer>\r\n </ContentArea>\r\n \r\n {xCloseButton && (\r\n <CloseButton onClick={onClose} aria-label=\"Close\">\r\n <CloseIcon />\r\n </CloseButton>\r\n )}\r\n \r\n {paddingBottom && <PaddingBottom />}\r\n {divider && <Divider />}\r\n </HeaderContainer>\r\n );\r\n};\r\n","import React from 'react';\r\nimport {\r\n Modal as MuiModal, ModalProps as MuiModalProps,\r\n Popover as MuiPopover, PopoverProps as MuiPopoverProps\r\n} from '@mui/material';\r\n\r\nexport type ModalProps = MuiModalProps;\r\nexport const Modal: React.FC<ModalProps> = (props) => <MuiModal {...props} />;\r\n\r\nexport type PopoverProps = MuiPopoverProps;\r\nexport const Popover: React.FC<PopoverProps> = (props) => <MuiPopover {...props} />;\r\n","import React from 'react';\r\nimport {\r\n Stepper as MuiStepper, StepperProps as MuiStepperProps,\r\n Step as MuiStep, StepProps as MuiStepProps,\r\n StepLabel as MuiStepLabel, StepLabelProps as MuiStepLabelProps,\r\n StepContent as MuiStepContent, StepContentProps as MuiStepContentProps,\r\n StepButton as MuiStepButton, StepButtonProps as MuiStepButtonProps\r\n} from '@mui/material';\r\n\r\nexport type StepperProps = MuiStepperProps;\r\nexport const Stepper: React.FC<StepperProps> = (props) => <MuiStepper {...props} />;\r\n\r\nexport type StepProps = MuiStepProps;\r\nexport const Step: React.FC<StepProps> = (props) => <MuiStep {...props} />;\r\n\r\nexport type StepLabelProps = MuiStepLabelProps;\r\nexport const StepLabel: React.FC<StepLabelProps> = (props) => <MuiStepLabel {...props} />;\r\n\r\nexport type StepContentProps = MuiStepContentProps;\r\nexport const StepContent: React.FC<StepContentProps> = (props) => <MuiStepContent {...props} />;\r\n\r\nexport type StepButtonProps = MuiStepButtonProps;\r\nexport const StepButton: React.FC<StepButtonProps> = (props) => <MuiStepButton {...props} />;\r\n","import React from 'react';\r\nimport {\r\n DatePicker as MuiDatePicker,\r\n DatePickerProps as MuiDatePickerProps,\r\n DateCalendar as MuiDateCalendar,\r\n TimePicker as MuiTimePicker,\r\n TimePickerProps as MuiTimePickerProps,\r\n LocalizationProvider as MuiLocalizationProvider,\r\n LocalizationProviderProps as MuiLocalizationProviderProps,\r\n PickersDay,\r\n PickersDayProps,\r\n} from '@mui/x-date-pickers';\r\nimport { AdapterDayjs } from '@mui/x-date-pickers/AdapterDayjs';\r\nimport dayjs, { Dayjs } from 'dayjs';\r\nimport tokens from '../../tokens/tokens.json';\r\nimport { Box } from '../Box';\r\nimport { Input } from '../Input';\r\nimport { Button } from '../Button';\r\nimport { GlobalStyles } from '@mui/material';\r\n\r\n// Global styles for date picker popups to override dark green\r\nconst DatePickerGlobalStyles = () => (\r\n <GlobalStyles\r\n styles={{\r\n // Year picker styles\r\n '.MuiPickersYear-yearButton.Mui-selected, .MuiPickersYear-root .Mui-selected': {\r\n backgroundColor: `${tokens.color.primary[700]} !important`,\r\n color: `${tokens.color.base.white} !important`,\r\n fontWeight: `${tokens.typography.fontWeight.semibold} !important`,\r\n },\r\n '.MuiPickersYear-yearButton.Mui-selected:hover, .MuiPickersYear-root .Mui-selected:hover': {\r\n backgroundColor: `${tokens.color.primary[800]} !important`,\r\n },\r\n '.MuiPickersYear-yearButton.Mui-selected:focus, .MuiPickersYear-root .Mui-selected:focus': {\r\n backgroundColor: `${tokens.color.primary[700]} !important`,\r\n },\r\n // Month picker styles\r\n '.MuiPickersMonth-monthButton.Mui-selected, .MuiMonthCalendar-root .Mui-selected': {\r\n backgroundColor: `${tokens.color.primary[700]} !important`,\r\n color: `${tokens.color.base.white} !important`,\r\n fontWeight: `${tokens.typography.fontWeight.semibold} !important`,\r\n },\r\n '.MuiPickersMonth-monthButton.Mui-selected:hover, .MuiMonthCalendar-root .Mui-selected:hover': {\r\n backgroundColor: `${tokens.color.primary[800]} !important`,\r\n },\r\n '.MuiPickersMonth-monthButton.Mui-selected:focus, .MuiMonthCalendar-root .Mui-selected:focus': {\r\n backgroundColor: `${tokens.color.primary[700]} !important`,\r\n },\r\n // Day picker styles\r\n '.MuiPickersDay-root.Mui-selected, .MuiDayCalendar-weekContainer .Mui-selected': {\r\n backgroundColor: `${tokens.color.primary[700]} !important`,\r\n color: `${tokens.color.base.white} !important`,\r\n fontWeight: `${tokens.typography.fontWeight.semibold} !important`,\r\n },\r\n '.MuiPickersDay-root.Mui-selected:hover, .MuiDayCalendar-weekContainer .Mui-selected:hover': {\r\n backgroundColor: `${tokens.color.primary[800]} !important`,\r\n },\r\n '.MuiPickersDay-root.Mui-selected:focus, .MuiDayCalendar-weekContainer .Mui-selected:focus': {\r\n backgroundColor: `${tokens.color.primary[700]} !important`,\r\n },\r\n // Override any button with Mui-selected class in picker context\r\n '.MuiPickersPopper-root .Mui-selected, .MuiPickersLayout-root .Mui-selected, .MuiDateCalendar-root .Mui-selected': {\r\n backgroundColor: `${tokens.color.primary[700]} !important`,\r\n color: `${tokens.color.base.white} !important`,\r\n },\r\n '.MuiPickersPopper-root .Mui-selected:hover, .MuiPickersLayout-root .Mui-selected:hover, .MuiDateCalendar-root .Mui-selected:hover': {\r\n backgroundColor: `${tokens.color.primary[800]} !important`,\r\n },\r\n }}\r\n />\r\n);\r\n\r\n// Static DateCalendar component as shown in Figma\r\nexport interface DateCalendarComponentProps {\r\n /**\r\n * The selected date value\r\n */\r\n value?: Dayjs | null;\r\n /**\r\n * Callback fired when the value changes\r\n */\r\n onChange?: (value: Dayjs | null) => void;\r\n /**\r\n * Show the Today button\r\n */\r\n showTodayButton?: boolean;\r\n /**\r\n * Dates with event indicators (small green dots)\r\n */\r\n highlightedDates?: Dayjs[];\r\n /**\r\n * Show Cancel and Apply buttons\r\n */\r\n showActionButtons?: boolean;\r\n /**\r\n * Cancel button callback\r\n */\r\n onCancel?: () => void;\r\n /**\r\n * Apply button callback\r\n */\r\n onApply?: () => void;\r\n}\r\n\r\nexport const DateCalendarComponent: React.FC<DateCalendarComponentProps> = ({\r\n value,\r\n onChange,\r\n showTodayButton = false,\r\n highlightedDates = [],\r\n showActionButtons = true,\r\n onCancel,\r\n onApply,\r\n}) => {\r\n // Local state for input text to allow free typing\r\n const [inputValue, setInputValue] = React.useState(value ? value.format('MMM DD, YYYY') : '');\r\n\r\n // Update input value when external value changes\r\n React.useEffect(() => {\r\n if (value) {\r\n setInputValue(value.format('MMM DD, YYYY'));\r\n }\r\n }, [value]);\r\n\r\n // Custom day renderer with event dots\r\n const ServerDay = (pickersDayProps: PickersDayProps) => {\r\n const { day, outsideCurrentMonth, ...other } = pickersDayProps;\r\n\r\n const isHighlighted = highlightedDates.some((highlightedDate) =>\r\n day.isSame(highlightedDate, 'day')\r\n );\r\n\r\n return (\r\n <Box sx={{ position: 'relative', display: 'inline-flex' }}>\r\n <PickersDay\r\n {...other}\r\n day={day}\r\n outsideCurrentMonth={outsideCurrentMonth}\r\n sx={{\r\n fontFamily: tokens.typography.fontFamily.body,\r\n fontSize: tokens.typography.fontSize['text-sm'],\r\n fontWeight: tokens.typography.fontWeight.medium,\r\n color: outsideCurrentMonth ? tokens.color.gray[400] : tokens.color.gray[700],\r\n '&.Mui-selected': {\r\n backgroundColor: tokens.color.primary[700],\r\n color: tokens.color.base.white,\r\n fontWeight: tokens.typography.fontWeight.semibold,\r\n '&:hover': {\r\n backgroundColor: tokens.color.primary[800],\r\n },\r\n '&:focus': {\r\n backgroundColor: tokens.color.primary[700],\r\n },\r\n },\r\n '&:hover': {\r\n backgroundColor: tokens.color.gray[100],\r\n },\r\n '&.MuiPickersDay-today': {\r\n border: `1px solid ${tokens.color.primary[700]}`,\r\n backgroundColor: 'transparent',\r\n },\r\n }}\r\n />\r\n {isHighlighted && !outsideCurrentMonth && (\r\n <Box\r\n sx={{\r\n position: 'absolute',\r\n bottom: '4px',\r\n left: '50%',\r\n transform: 'translateX(-50%)',\r\n width: '4px',\r\n height: '4px',\r\n borderRadius: '50%',\r\n backgroundColor: tokens.color.primary[700],\r\n }}\r\n />\r\n )}\r\n </Box>\r\n );\r\n };\r\n\r\n return (\r\n <Box\r\n sx={{\r\n display: 'inline-flex',\r\n flexDirection: 'column',\r\n bgcolor: tokens.color.base.white,\r\n border: `1px solid ${tokens.color.gray[200]}`,\r\n borderRadius: `${tokens.borderRadius.lg}px`,\r\n padding: '16px',\r\n boxShadow: tokens.shadows.sm,\r\n }}\r\n >\r\n {/* Date Input and Today Button */}\r\n <Box sx={{ display: 'flex', gap: '8px', mb: '16px' }}>\r\n <Input\r\n value={inputValue}\r\n onChange={(e) => {\r\n const newValue = e.target.value;\r\n // Always update the input to allow free typing\r\n setInputValue(newValue);\r\n\r\n // Try to parse with multiple formats as user types\r\n let parsedDate = dayjs(newValue, 'MMM DD, YYYY', true);\r\n if (!parsedDate.isValid()) {\r\n parsedDate = dayjs(newValue, 'MMM D, YYYY', true);\r\n }\r\n if (!parsedDate.isValid()) {\r\n parsedDate = dayjs(newValue, 'MM/DD/YYYY', true);\r\n }\r\n if (!parsedDate.isValid()) {\r\n parsedDate = dayjs(newValue, 'M/D/YYYY', true);\r\n }\r\n if (!parsedDate.isValid()) {\r\n parsedDate = dayjs(newValue, 'YYYY-MM-DD', true);\r\n }\r\n\r\n // If valid, update the date value\r\n if (parsedDate.isValid()) {\r\n onChange?.(parsedDate);\r\n }\r\n }}\r\n onBlur={(e) => {\r\n const trimmedValue = e.target.value.trim();\r\n\r\n // Try flexible parsing on blur\r\n const parsedDate = dayjs(trimmedValue);\r\n\r\n if (parsedDate.isValid()) {\r\n onChange?.(parsedDate);\r\n setInputValue(parsedDate.format('MMM DD, YYYY'));\r\n } else if (value) {\r\n // Reset to last valid value if invalid\r\n setInputValue(value.format('MMM DD, YYYY'));\r\n } else {\r\n // Clear if no valid value\r\n setInputValue('');\r\n }\r\n }}\r\n placeholder=\"MMM DD, YYYY\"\r\n sx={{\r\n flex: 1,\r\n }}\r\n />\r\n {showTodayButton && (\r\n <Button\r\n variant=\"outlined\"\r\n onClick={() => {\r\n const today = dayjs();\r\n onChange?.(today);\r\n setInputValue(today.format('MMM DD, YYYY'));\r\n }}\r\n sx={{\r\n textTransform: 'none',\r\n minWidth: 'auto',\r\n px: '16px',\r\n }}\r\n >\r\n Today\r\n </Button>\r\n )}\r\n </Box>\r\n\r\n {/* Static Calendar */}\r\n <MuiDateCalendar\r\n value={value}\r\n onChange={onChange}\r\n views={['year', 'month', 'day']}\r\n slots={{\r\n day: ServerDay,\r\n }}\r\n sx={{\r\n width: '100%',\r\n maxWidth: '320px',\r\n '& .MuiPickersCalendarHeader-root': {\r\n paddingLeft: 0,\r\n paddingRight: 0,\r\n marginTop: 0,\r\n marginBottom: '8px',\r\n },\r\n '& .MuiPickersCalendarHeader-label': {\r\n fontFamily: tokens.typography.fontFamily.body,\r\n fontSize: tokens.typography.fontSize['text-md'],\r\n fontWeight: tokens.typography.fontWeight.semibold,\r\n color: tokens.color.gray[900],\r\n },\r\n '& .MuiPickersArrowSwitcher-button': {\r\n color: tokens.color.gray[500],\r\n '&:hover': {\r\n backgroundColor: tokens.color.gray[50],\r\n },\r\n },\r\n '& .MuiDayCalendar-header': {\r\n justifyContent: 'space-between',\r\n },\r\n '& .MuiDayCalendar-weekDayLabel': {\r\n fontFamily: tokens.typography.fontFamily.body,\r\n fontSize: tokens.typography.fontSize['text-sm'],\r\n fontWeight: tokens.typography.fontWeight.medium,\r\n color: tokens.color.gray[600],\r\n width: '40px',\r\n height: '40px',\r\n },\r\n '& .MuiDayCalendar-slideTransition': {\r\n minHeight: '240px',\r\n },\r\n '& .MuiPickersDay-root': {\r\n width: '40px',\r\n height: '40px',\r\n },\r\n // Year picker styling\r\n '& .MuiYearCalendar-root': {\r\n width: '100%',\r\n },\r\n '& .MuiPickersYear-yearButton': {\r\n fontFamily: tokens.typography.fontFamily.body,\r\n fontSize: tokens.typography.fontSize['text-sm'],\r\n fontWeight: tokens.typography.fontWeight.medium,\r\n color: tokens.color.gray[700],\r\n '&:hover': {\r\n backgroundColor: tokens.color.gray[100],\r\n },\r\n '&.Mui-selected': {\r\n backgroundColor: `${tokens.color.primary[700]} !important`,\r\n color: `${tokens.color.base.white} !important`,\r\n fontWeight: tokens.typography.fontWeight.semibold,\r\n '&:hover': {\r\n backgroundColor: `${tokens.color.primary[800]} !important`,\r\n },\r\n '&:focus': {\r\n backgroundColor: `${tokens.color.primary[700]} !important`,\r\n },\r\n },\r\n },\r\n // Month picker styling\r\n '& .MuiMonthCalendar-root': {\r\n width: '100%',\r\n },\r\n '& .MuiPickersMonth-monthButton': {\r\n fontFamily: tokens.typography.fontFamily.body,\r\n fontSize: tokens.typography.fontSize['text-sm'],\r\n fontWeight: tokens.typography.fontWeight.medium,\r\n color: tokens.color.gray[700],\r\n '&:hover': {\r\n backgroundColor: tokens.color.gray[100],\r\n },\r\n '&.Mui-selected': {\r\n backgroundColor: `${tokens.color.primary[700]} !important`,\r\n color: `${tokens.color.base.white} !important`,\r\n fontWeight: tokens.typography.fontWeight.semibold,\r\n '&:hover': {\r\n backgroundColor: `${tokens.color.primary[800]} !important`,\r\n },\r\n '&:focus': {\r\n backgroundColor: `${tokens.color.primary[700]} !important`,\r\n },\r\n },\r\n },\r\n }}\r\n />\r\n\r\n {/* Action Buttons */}\r\n {showActionButtons && (\r\n <Box sx={{ display: 'flex', gap: '8px', mt: '16px' }}>\r\n <Button\r\n variant=\"outlined\"\r\n onClick={onCancel}\r\n sx={{\r\n flex: 1,\r\n textTransform: 'none',\r\n }}\r\n >\r\n Cancel\r\n </Button>\r\n <Button\r\n variant=\"contained\"\r\n onClick={onApply}\r\n sx={{\r\n flex: 1,\r\n textTransform: 'none',\r\n }}\r\n >\r\n Apply\r\n </Button>\r\n </Box>\r\n )}\r\n </Box>\r\n );\r\n};\r\n\r\n// Original DatePicker component (popup version)\r\n// @ts-ignore - MUI v8 type constraint issue\r\nexport type DatePickerProps = Omit<MuiDatePickerProps<Dayjs>, 'open'>;\r\n\r\nexport const DatePicker: React.FC<DatePickerProps> = (props) => {\r\n return (\r\n <>\r\n <DatePickerGlobalStyles />\r\n <MuiDatePicker {...props} />\r\n </>\r\n );\r\n};\r\n\r\n// @ts-ignore - MUI v8 type constraint issue\r\nexport type TimePickerProps = MuiTimePickerProps<Dayjs>;\r\nexport const TimePicker: React.FC<TimePickerProps> = (props) => (\r\n <>\r\n <DatePickerGlobalStyles />\r\n <MuiTimePicker {...props} />\r\n </>\r\n);\r\n\r\n// @ts-ignore - MUI v8 type constraint issue\r\nexport type LocalizationProviderProps = MuiLocalizationProviderProps<Dayjs>;\r\nexport const LocalizationProvider: React.FC<LocalizationProviderProps> = (props) => (\r\n // @ts-ignore - AdapterDayjs type compatibility issue with MUI v8\r\n <MuiLocalizationProvider dateAdapter={AdapterDayjs} {...props} />\r\n);\r\n","import React from 'react';\r\nimport { DataGrid as MuiDataGrid, DataGridProps as MuiDataGridProps, GridColDef, GridRenderCellParams } from '@mui/x-data-grid';\r\nimport { styled } from '@mui/material/styles';\r\nimport { Box } from '../Box';\r\nimport { Stack } from '../Stack';\r\nimport { Avatar } from '../Avatar';\r\nimport { Badge } from '../Badge';\r\nimport { Tag } from '../Tag';\r\nimport { IconButton } from '../IconButton';\r\nimport { Typography } from '../Typography';\r\nimport { Checkbox } from '../Checkbox';\r\nimport { Pagination } from '../Pagination';\r\nimport { Button } from '../Button';\r\nimport {\r\n InfoOutlinedIcon,\r\n DeleteOutlineIcon,\r\n CreateIcon,\r\n MoreVertIcon,\r\n CircleIcon,\r\n CloudUploadOutlinedIcon,\r\n DescriptionOutlinedIcon\r\n} from '../../theme/icons';\r\nimport tokens from '../../tokens/tokens.json';\r\n\r\nexport type DataGridProps = MuiDataGridProps & {\r\n /**\r\n * Show the table header with title and badge\r\n */\r\n showHeader?: boolean;\r\n /**\r\n * Title text for the header\r\n */\r\n headerTitle?: string;\r\n /**\r\n * Badge content for the header (e.g., \"100 users\")\r\n */\r\n headerBadgeContent?: string;\r\n /**\r\n * Show header menu icon\r\n */\r\n showHeaderMenu?: boolean;\r\n /**\r\n * Callback when header menu is clicked\r\n */\r\n onHeaderMenuClick?: () => void;\r\n /**\r\n * Show custom pagination\r\n */\r\n showCustomPagination?: boolean;\r\n /**\r\n * Pagination type\r\n */\r\n paginationType?: 'Page default' | 'Card minimal left aligned';\r\n /**\r\n * Show header action buttons (for file table)\r\n */\r\n showHeaderActions?: boolean;\r\n /**\r\n * Download all button label\r\n */\r\n downloadAllLabel?: string;\r\n /**\r\n * Upload button label\r\n */\r\n uploadLabel?: string;\r\n /**\r\n * Callback when download all is clicked\r\n */\r\n onDownloadAll?: () => void;\r\n /**\r\n * Callback when files are selected for upload\r\n */\r\n onUpload?: (files: FileList | null) => void;\r\n};\r\n\r\n// Styled components for custom header\r\nconst TableHeader = styled(Box)({\r\n display: 'flex',\r\n alignItems: 'center',\r\n justifyContent: 'space-between',\r\n padding: `${tokens.spacing['2xl']} ${tokens.spacing['3xl']}`,\r\n borderBottom: `1px solid ${tokens.color.secondary[200]}`,\r\n});\r\n\r\nconst HeaderLeft = styled(Box)({\r\n display: 'flex',\r\n alignItems: 'center',\r\n gap: tokens.spacing.md,\r\n});\r\n\r\nconst StyledDataGrid = styled(MuiDataGrid)({\r\n border: 'none',\r\n '& .MuiDataGrid-columnHeaders': {\r\n borderBottom: `1px solid ${tokens.color.secondary[200]}`,\r\n backgroundColor: tokens.color.gray[50],\r\n minHeight: '44px !important',\r\n maxHeight: '44px !important',\r\n },\r\n '& .MuiDataGrid-columnHeader': {\r\n padding: `${tokens.spacing.sm} ${tokens.spacing['3xl']}`,\r\n '&:focus, &:focus-within': {\r\n outline: 'none',\r\n },\r\n },\r\n '& .MuiDataGrid-columnHeaderCheckbox': {\r\n padding: '0 !important',\r\n minWidth: '56px !important',\r\n maxWidth: '56px !important',\r\n justifyContent: 'center',\r\n '& .MuiCheckbox-root': {\r\n padding: '8px',\r\n },\r\n },\r\n '& .MuiDataGrid-cellCheckbox': {\r\n padding: '0 !important',\r\n minWidth: '56px !important',\r\n maxWidth: '56px !important',\r\n justifyContent: 'center',\r\n '& .MuiCheckbox-root': {\r\n padding: '8px',\r\n },\r\n },\r\n '& .MuiDataGrid-columnHeaderTitle': {\r\n fontFamily: tokens.typography.fontFamily.body,\r\n fontSize: tokens.typography.fontSize['text-xs'],\r\n lineHeight: tokens.typography.lineHeight['text-xs'],\r\n fontWeight: tokens.typography.fontWeight.medium,\r\n color: tokens.color.secondary[600],\r\n },\r\n '& .MuiDataGrid-row': {\r\n borderBottom: `1px solid ${tokens.color.secondary[200]}`,\r\n '&:hover': {\r\n backgroundColor: tokens.color.gray[50],\r\n },\r\n '&.Mui-selected': {\r\n backgroundColor: tokens.color.gray[50],\r\n '&:hover': {\r\n backgroundColor: tokens.color.gray[100],\r\n },\r\n },\r\n },\r\n '& .MuiDataGrid-cell': {\r\n padding: `${tokens.spacing.lg} ${tokens.spacing['3xl']}`,\r\n borderBottom: 'none',\r\n display: 'flex',\r\n alignItems: 'center',\r\n '&:focus, &:focus-within': {\r\n outline: 'none',\r\n },\r\n },\r\n '& .MuiDataGrid-checkboxInput': {\r\n color: tokens.color.secondary[300],\r\n '&.Mui-checked': {\r\n color: tokens.color.primary[600],\r\n },\r\n '&.MuiCheckbox-indeterminate': {\r\n color: tokens.color.primary[600],\r\n },\r\n },\r\n '& .MuiDataGrid-columnHeaderTitleContainer': {\r\n padding: 0,\r\n },\r\n '& .MuiDataGrid-footerContainer': {\r\n display: 'none', // Hide default footer when using custom pagination\r\n },\r\n});\r\n\r\n// Custom cell renderers\r\nconst renderNameCell = (params: GridRenderCellParams) => {\r\n const { name, username, avatar } = params.row;\r\n const initials = name ? name.split(' ').map((n: string) => n[0]).join('').substring(0, 2).toUpperCase() : '??';\r\n\r\n return (\r\n <Stack direction=\"row\" spacing={1.5} alignItems=\"center\">\r\n {avatar ? (\r\n <Avatar\r\n src={avatar}\r\n alt={name}\r\n size=\"xs\"\r\n />\r\n ) : (\r\n <Avatar\r\n size=\"xs\"\r\n placeholder\r\n initials={initials}\r\n />\r\n )}\r\n <Box sx={{ minWidth: 0, flex: 1 }}>\r\n <Typography\r\n variant=\"body2\"\r\n sx={{\r\n fontWeight: tokens.typography.fontWeight.medium,\r\n color: tokens.color.secondary[900],\r\n lineHeight: tokens.typography.lineHeight['text-sm'],\r\n fontSize: tokens.typography.fontSize['text-sm'],\r\n }}\r\n >\r\n {name}\r\n </Typography>\r\n <Typography\r\n variant=\"body2\"\r\n sx={{\r\n color: tokens.color.secondary[600],\r\n fontSize: tokens.typography.fontSize['text-sm'],\r\n lineHeight: tokens.typography.lineHeight['text-sm'],\r\n }}\r\n >\r\n {username}\r\n </Typography>\r\n </Box>\r\n </Stack>\r\n );\r\n};\r\n\r\nconst renderStatusCell = (params: GridRenderCellParams) => {\r\n const status = params.value as string;\r\n return (\r\n <Box\r\n sx={{\r\n display: 'inline-flex',\r\n alignItems: 'center',\r\n gap: tokens.spacing.xs,\r\n padding: `${tokens.spacing.xxs} ${tokens.spacing.sm}`,\r\n borderRadius: tokens.borderRadius.full,\r\n backgroundColor: tokens.color.success[50],\r\n border: `1px solid ${tokens.color.success[200]}`,\r\n }}\r\n >\r\n <CircleIcon\r\n sx={{\r\n fontSize: '8px',\r\n color: tokens.color.success[500],\r\n }}\r\n />\r\n <Typography\r\n variant=\"body2\"\r\n sx={{\r\n fontSize: tokens.typography.fontSize['text-sm'],\r\n fontWeight: tokens.typography.fontWeight.medium,\r\n color: tokens.color.success[700],\r\n lineHeight: tokens.typography.lineHeight['text-sm'],\r\n }}\r\n >\r\n {status}\r\n </Typography>\r\n </Box>\r\n );\r\n};\r\n\r\nconst renderRoleCell = (params: GridRenderCellParams) => {\r\n return (\r\n <Typography\r\n variant=\"body2\"\r\n sx={{\r\n fontSize: tokens.typography.fontSize['text-sm'],\r\n color: tokens.color.secondary[600],\r\n lineHeight: tokens.typography.lineHeight['text-sm'],\r\n }}\r\n >\r\n {params.value}\r\n </Typography>\r\n );\r\n};\r\n\r\nconst renderEmailCell = (params: GridRenderCellParams) => {\r\n return (\r\n <Typography\r\n variant=\"body2\"\r\n sx={{\r\n fontSize: tokens.typography.fontSize['text-sm'],\r\n color: tokens.color.secondary[600],\r\n lineHeight: tokens.typography.lineHeight['text-sm'],\r\n }}\r\n >\r\n {params.value}\r\n </Typography>\r\n );\r\n};\r\n\r\nconst renderTeamsCell = (params: GridRenderCellParams) => {\r\n const teams = params.value as string[];\r\n const visibleTeams = teams.slice(0, 3);\r\n const remainingCount = teams.length - 3;\r\n\r\n return (\r\n <Stack direction=\"row\" spacing={0.5} alignItems=\"center\">\r\n {visibleTeams.map((team: string, index: number) => (\r\n <Tag\r\n key={index}\r\n label={team}\r\n size=\"small\"\r\n color={team === 'Design' ? 'success' : team === 'Product' ? 'secondary' : 'primary'}\r\n sx={{\r\n fontSize: tokens.typography.fontSize['text-xs'],\r\n fontWeight: tokens.typography.fontWeight.medium,\r\n }}\r\n />\r\n ))}\r\n {remainingCount > 0 && (\r\n <Typography\r\n variant=\"body2\"\r\n sx={{\r\n fontSize: tokens.typography.fontSize['text-sm'],\r\n color: tokens.color.secondary[600],\r\n fontWeight: tokens.typography.fontWeight.medium,\r\n }}\r\n >\r\n +{remainingCount}\r\n </Typography>\r\n )}\r\n </Stack>\r\n );\r\n};\r\n\r\nconst renderActionsCell = (params: GridRenderCellParams) => {\r\n return (\r\n <Stack direction=\"row\" spacing={0.5} alignItems=\"center\">\r\n <IconButton\r\n size=\"small\"\r\n onClick={() => console.log('Delete', params.row.id)}\r\n sx={{\r\n color: tokens.color.secondary[400],\r\n '&:hover': {\r\n color: tokens.color.secondary[600],\r\n backgroundColor: tokens.color.gray[50],\r\n },\r\n }}\r\n >\r\n <DeleteOutlineIcon fontSize=\"small\" />\r\n </IconButton>\r\n <IconButton\r\n size=\"small\"\r\n onClick={() => console.log('Edit', params.row.id)}\r\n sx={{\r\n color: tokens.color.secondary[400],\r\n '&:hover': {\r\n color: tokens.color.secondary[600],\r\n backgroundColor: tokens.color.gray[50],\r\n },\r\n }}\r\n >\r\n <CreateIcon fontSize=\"small\" />\r\n </IconButton>\r\n </Stack>\r\n );\r\n};\r\n\r\n// File type colors mapping\r\nconst fileTypeColors: Record<string, string> = {\r\n PDF: tokens.color.error[600],\r\n JPG: tokens.color.primary[600],\r\n PNG: tokens.color.primary[600],\r\n MP4: '#155EEF', // blue-dark-600\r\n FIG: tokens.color.primary[600],\r\n DOCX: '#155EEF', // blue-dark-600\r\n AEP: '#6938EF', // purple-600\r\n MP3: '#DD2590', // pink-600\r\n ZIP: tokens.color.secondary[600],\r\n default: tokens.color.secondary[600],\r\n};\r\n\r\n// File Type Icon Component\r\nconst FileTypeIcon: React.FC<{ fileType: string }> = ({ fileType }) => {\r\n const color = fileTypeColors[fileType.toUpperCase()] || fileTypeColors.default;\r\n\r\n return (\r\n <Box\r\n sx={{\r\n position: 'relative',\r\n width: '40px',\r\n height: '40px',\r\n flexShrink: 0,\r\n }}\r\n >\r\n <DescriptionOutlinedIcon\r\n sx={{\r\n fontSize: '40px',\r\n color: tokens.color.secondary[300],\r\n }}\r\n />\r\n <Box\r\n sx={{\r\n position: 'absolute',\r\n bottom: '6px',\r\n left: '1px',\r\n right: '13px',\r\n top: '18px',\r\n backgroundColor: color,\r\n borderRadius: '2px',\r\n display: 'flex',\r\n alignItems: 'center',\r\n justifyContent: 'center',\r\n padding: '2px 3px',\r\n }}\r\n >\r\n <Typography\r\n sx={{\r\n fontSize: '10px',\r\n fontWeight: tokens.typography.fontWeight.bold,\r\n color: tokens.color.base.white,\r\n textAlign: 'center',\r\n lineHeight: 'normal',\r\n }}\r\n >\r\n {fileType.toUpperCase()}\r\n </Typography>\r\n </Box>\r\n </Box>\r\n );\r\n};\r\n\r\n// File name cell renderer\r\nconst renderFileNameCell = (params: GridRenderCellParams) => {\r\n const { fileName, fileSize, fileType } = params.row;\r\n\r\n return (\r\n <Stack direction=\"row\" spacing={1.5} alignItems=\"center\">\r\n <FileTypeIcon fileType={fileType} />\r\n <Box sx={{ minWidth: 0, flex: 1 }}>\r\n <Typography\r\n variant=\"body2\"\r\n sx={{\r\n fontWeight: tokens.typography.fontWeight.medium,\r\n color: tokens.color.secondary[900],\r\n lineHeight: tokens.typography.lineHeight['text-sm'],\r\n fontSize: tokens.typography.fontSize['text-sm'],\r\n }}\r\n >\r\n {fileName}\r\n </Typography>\r\n <Typography\r\n variant=\"body2\"\r\n sx={{\r\n color: tokens.color.secondary[600],\r\n fontSize: tokens.typography.fontSize['text-sm'],\r\n lineHeight: tokens.typography.lineHeight['text-sm'],\r\n }}\r\n >\r\n {fileSize}\r\n </Typography>\r\n </Box>\r\n </Stack>\r\n );\r\n};\r\n\r\n// Simple text cell renderer\r\nconst renderTextCell = (params: GridRenderCellParams) => {\r\n return (\r\n <Typography\r\n variant=\"body2\"\r\n sx={{\r\n fontSize: tokens.typography.fontSize['text-sm'],\r\n color: tokens.color.secondary[600],\r\n lineHeight: tokens.typography.lineHeight['text-sm'],\r\n }}\r\n >\r\n {params.value}\r\n </Typography>\r\n );\r\n};\r\n\r\n// File action cell renderer\r\nconst renderFileActionCell = (params: GridRenderCellParams) => {\r\n return (\r\n <IconButton\r\n size=\"small\"\r\n onClick={() => console.log('File action', params.row.id)}\r\n sx={{\r\n color: tokens.color.secondary[400],\r\n '&:hover': {\r\n color: tokens.color.secondary[600],\r\n backgroundColor: tokens.color.gray[50],\r\n },\r\n }}\r\n >\r\n <MoreVertIcon fontSize=\"small\" />\r\n </IconButton>\r\n );\r\n};\r\n\r\n// File columns configuration for file upload table\r\nexport const createFileColumns = (): GridColDef[] => [\r\n {\r\n field: 'fileName',\r\n headerName: 'File name',\r\n flex: 1,\r\n minWidth: 300,\r\n renderCell: renderFileNameCell,\r\n sortable: true,\r\n },\r\n {\r\n field: 'fileSize',\r\n headerName: 'File size',\r\n width: 150,\r\n renderCell: renderTextCell,\r\n sortable: true,\r\n },\r\n {\r\n field: 'dateUploaded',\r\n headerName: 'Date uploaded',\r\n width: 150,\r\n renderCell: renderTextCell,\r\n sortable: true,\r\n },\r\n {\r\n field: 'lastUpdated',\r\n headerName: 'Last updated',\r\n width: 150,\r\n renderCell: renderTextCell,\r\n sortable: true,\r\n },\r\n {\r\n field: 'uploadedBy',\r\n headerName: 'Uploaded by',\r\n width: 150,\r\n renderCell: renderTextCell,\r\n sortable: true,\r\n },\r\n {\r\n field: 'actions',\r\n headerName: '',\r\n width: 80,\r\n renderCell: renderFileActionCell,\r\n sortable: false,\r\n disableColumnMenu: true,\r\n },\r\n];\r\n\r\n// Default columns configuration\r\nexport const createDefaultColumns = (): GridColDef[] => [\r\n {\r\n field: 'name',\r\n headerName: 'Name',\r\n flex: 1,\r\n minWidth: 200,\r\n renderCell: renderNameCell,\r\n sortable: true,\r\n },\r\n {\r\n field: 'status',\r\n headerName: 'Status',\r\n width: 120,\r\n renderCell: renderStatusCell,\r\n sortable: true,\r\n },\r\n {\r\n field: 'role',\r\n headerName: 'Role',\r\n width: 200,\r\n renderCell: renderRoleCell,\r\n sortable: true,\r\n renderHeader: (params) => (\r\n <Box sx={{ display: 'flex', alignItems: 'center', gap: 0.5 }}>\r\n <Typography\r\n sx={{\r\n fontFamily: tokens.typography.fontFamily.body,\r\n fontSize: tokens.typography.fontSize['text-xs'],\r\n lineHeight: tokens.typography.lineHeight['text-xs'],\r\n fontWeight: tokens.typography.fontWeight.medium,\r\n color: tokens.color.secondary[600],\r\n }}\r\n >\r\n {params.colDef.headerName}\r\n </Typography>\r\n <InfoOutlinedIcon\r\n sx={{\r\n fontSize: '16px',\r\n color: tokens.color.secondary[400],\r\n }}\r\n />\r\n </Box>\r\n ),\r\n },\r\n {\r\n field: 'email',\r\n headerName: 'Email address',\r\n flex: 1,\r\n minWidth: 200,\r\n renderCell: renderEmailCell,\r\n sortable: true,\r\n },\r\n {\r\n field: 'teams',\r\n headerName: 'Teams',\r\n flex: 1,\r\n minWidth: 200,\r\n renderCell: renderTeamsCell,\r\n sortable: false,\r\n },\r\n {\r\n field: 'actions',\r\n headerName: '',\r\n width: 100,\r\n renderCell: renderActionsCell,\r\n sortable: false,\r\n disableColumnMenu: true,\r\n },\r\n];\r\n\r\nexport const DataGrid: React.FC<DataGridProps> = ({\r\n showHeader = false,\r\n headerTitle = 'Team members',\r\n headerBadgeContent = '100 users',\r\n showHeaderMenu = false,\r\n onHeaderMenuClick,\r\n showCustomPagination = false,\r\n paginationType = 'Card minimal left aligned',\r\n showHeaderActions = false,\r\n downloadAllLabel = 'Download all',\r\n uploadLabel = 'Upload',\r\n onDownloadAll,\r\n onUpload,\r\n ...props\r\n}) => {\r\n const fileInputRef = React.useRef<HTMLInputElement>(null);\r\n const initialPageSize = props.initialState?.pagination?.paginationModel?.pageSize || 10;\r\n const initialPage = props.initialState?.pagination?.paginationModel?.page || 0;\r\n\r\n const [paginationModel, setPaginationModel] = React.useState({\r\n page: initialPage,\r\n pageSize: initialPageSize,\r\n });\r\n\r\n const handleUploadClick = () => {\r\n fileInputRef.current?.click();\r\n };\r\n\r\n const handleFileChange = (event: React.ChangeEvent<HTMLInputElement>) => {\r\n const files = event.target.files;\r\n if (onUpload) {\r\n onUpload(files);\r\n }\r\n // Reset the input so the same file can be selected again\r\n if (fileInputRef.current) {\r\n fileInputRef.current.value = '';\r\n }\r\n };\r\n\r\n const totalRows = props.rows?.length || 0;\r\n const totalPages = Math.ceil(totalRows / paginationModel.pageSize);\r\n\r\n const handlePageChange = (newPage: number) => {\r\n console.log('Page change requested:', newPage);\r\n const newPaginationModel = {\r\n ...paginationModel,\r\n page: newPage - 1, // Convert 1-indexed to 0-indexed\r\n };\r\n console.log('New pagination model:', newPaginationModel);\r\n setPaginationModel(newPaginationModel);\r\n };\r\n\r\n // Get the current page rows\r\n const startIndex = paginationModel.page * paginationModel.pageSize;\r\n const endIndex = startIndex + paginationModel.pageSize;\r\n const paginatedRows = props.rows ? props.rows.slice(startIndex, endIndex) : [];\r\n\r\n console.log('DataGrid pagination state:', {\r\n currentPage: paginationModel.page,\r\n pageSize: paginationModel.pageSize,\r\n totalRows,\r\n totalPages,\r\n startIndex,\r\n endIndex,\r\n paginatedRowsCount: paginatedRows.length,\r\n });\r\n\r\n return (\r\n <Box sx={{ width: '100%', backgroundColor: tokens.color.base.white }}>\r\n {showHeader && (\r\n <TableHeader>\r\n <HeaderLeft>\r\n <Typography\r\n variant=\"h6\"\r\n sx={{\r\n fontSize: tokens.typography.fontSize['text-lg'],\r\n fontWeight: tokens.typography.fontWeight.semibold,\r\n color: tokens.color.secondary[900],\r\n }}\r\n >\r\n {headerTitle}\r\n </Typography>\r\n {headerBadgeContent && (\r\n <Badge\r\n variant=\"inline\"\r\n content={headerBadgeContent}\r\n color=\"success\"\r\n active\r\n />\r\n )}\r\n </HeaderLeft>\r\n {showHeaderActions && (\r\n <Stack direction=\"row\" spacing={1.5}>\r\n <Button\r\n variant=\"outlined\"\r\n onClick={onDownloadAll}\r\n sx={{\r\n fontSize: tokens.typography.fontSize['text-sm'],\r\n fontWeight: tokens.typography.fontWeight.semibold,\r\n }}\r\n >\r\n {downloadAllLabel}\r\n </Button>\r\n <Button\r\n variant=\"contained\"\r\n color=\"primary\"\r\n startIcon={<CloudUploadOutlinedIcon />}\r\n onClick={handleUploadClick}\r\n sx={{\r\n fontSize: tokens.typography.fontSize['text-sm'],\r\n fontWeight: tokens.typography.fontWeight.semibold,\r\n }}\r\n >\r\n {uploadLabel}\r\n </Button>\r\n <input\r\n ref={fileInputRef}\r\n type=\"file\"\r\n multiple\r\n style={{ display: 'none' }}\r\n onChange={handleFileChange}\r\n />\r\n </Stack>\r\n )}\r\n {showHeaderMenu && !showHeaderActions && (\r\n <IconButton\r\n size=\"small\"\r\n onClick={onHeaderMenuClick}\r\n sx={{\r\n color: tokens.color.secondary[400],\r\n '&:hover': {\r\n color: tokens.color.secondary[600],\r\n backgroundColor: tokens.color.gray[50],\r\n },\r\n }}\r\n >\r\n <MoreVertIcon />\r\n </IconButton>\r\n )}\r\n </TableHeader>\r\n )}\r\n <StyledDataGrid\r\n checkboxSelection\r\n disableRowSelectionOnClick\r\n {...props}\r\n rows={showCustomPagination ? paginatedRows : props.rows}\r\n paginationModel={showCustomPagination ? undefined : paginationModel}\r\n onPaginationModelChange={showCustomPagination ? undefined : (model, details) => {\r\n setPaginationModel(model);\r\n if (props.onPaginationModelChange) {\r\n props.onPaginationModelChange(model, details);\r\n }\r\n }}\r\n hideFooterPagination={showCustomPagination}\r\n hideFooter={showCustomPagination}\r\n paginationMode=\"client\"\r\n pageSizeOptions={[10, 25, 50, 100]}\r\n />\r\n {showCustomPagination && (\r\n <Pagination\r\n type={paginationType}\r\n page={paginationModel.page + 1} // Convert 0-indexed to 1-indexed\r\n totalPages={totalPages}\r\n onChange={handlePageChange}\r\n />\r\n )}\r\n </Box>\r\n );\r\n};\r\n","import React from 'react';\r\nimport { Box, styled, IconButton, useMediaQuery, useTheme } from '@mui/material';\r\nimport { ChevronLeftIcon, ChevronRightIcon } from '../../theme/icons';\r\nimport tokens from '../../tokens/tokens.json';\r\n\r\nexport type PaginationType =\r\n | 'Page default'\r\n | 'Page minimal center aligned'\r\n | 'Card default'\r\n | 'Card minimal right aligned'\r\n | 'Card minimal left aligned'\r\n | 'Card minimal center aligned'\r\n | 'Card button group right aligned'\r\n | 'Card button group left aligned'\r\n | 'Card button group center aligned';\r\n\r\nexport type PaginationShape = 'Square' | 'Circle';\r\nexport type PaginationBreakpoint = 'Desktop' | 'Mobile';\r\n\r\nexport interface PaginationProps {\r\n /**\r\n * Visual style of the pagination\r\n */\r\n type?: PaginationType;\r\n /**\r\n * Shape of page number buttons\r\n */\r\n shape?: PaginationShape;\r\n /**\r\n * Current page number (1-indexed)\r\n */\r\n page?: number;\r\n /**\r\n * Total number of pages\r\n */\r\n totalPages?: number;\r\n /**\r\n * Callback when page changes\r\n */\r\n onChange?: (page: number) => void;\r\n /**\r\n * Responsive breakpoint (manual override)\r\n */\r\n breakpoint?: PaginationBreakpoint;\r\n}\r\n\r\nconst Root = styled(Box, {\r\n shouldForwardProp: (prop) =>\r\n !['paginationType', 'paginationBreakpoint'].includes(prop as string),\r\n})<{ paginationType: PaginationType; paginationBreakpoint: PaginationBreakpoint }>(\r\n ({ paginationType, paginationBreakpoint }) => {\r\n const isMobile = paginationBreakpoint === 'Mobile';\r\n const isPage = paginationType.startsWith('Page');\r\n const isCard = paginationType.startsWith('Card');\r\n const isButtonGroup = paginationType.includes('button group');\r\n\r\n const baseStyles = {\r\n display: 'flex',\r\n borderTop: `1px solid ${tokens.color.secondary[200]}`,\r\n position: 'relative' as const,\r\n };\r\n\r\n // Page types\r\n if (isPage) {\r\n return {\r\n ...baseStyles,\r\n alignItems: 'center',\r\n width: '100%',\r\n ...(isMobile\r\n ? {\r\n justifyContent: 'space-between',\r\n paddingTop: tokens.spacing.xl,\r\n paddingBottom: 0,\r\n paddingLeft: 0,\r\n paddingRight: 0,\r\n }\r\n : {\r\n justifyContent: 'center',\r\n gap: tokens.spacing.lg,\r\n paddingTop: tokens.spacing['2xl'],\r\n paddingBottom: 0,\r\n paddingLeft: 0,\r\n paddingRight: 0,\r\n }),\r\n };\r\n }\r\n\r\n // Card types\r\n if (isCard) {\r\n const padding = isMobile\r\n ? `${tokens.spacing.lg} ${tokens.spacing.xl}`\r\n : `${tokens.spacing.lg} ${tokens.spacing['3xl']} ${tokens.spacing.xl}`;\r\n\r\n if (isButtonGroup) {\r\n return {\r\n ...baseStyles,\r\n flexDirection: 'column' as const,\r\n gap: 0,\r\n padding,\r\n width: '100%',\r\n alignItems:\r\n paginationType.includes('right') ? 'flex-end' :\r\n paginationType.includes('left') ? 'flex-start' :\r\n 'center',\r\n justifyContent: 'center',\r\n };\r\n }\r\n\r\n return {\r\n ...baseStyles,\r\n padding,\r\n width: '100%',\r\n alignItems: 'center',\r\n ...(isMobile\r\n ? { justifyContent: 'space-between' }\r\n : { justifyContent: 'space-between', gap: tokens.spacing.lg }),\r\n };\r\n }\r\n\r\n return baseStyles;\r\n }\r\n);\r\n\r\nconst ButtonWrap = styled(Box)<{ show: boolean; align?: 'left' | 'right' | 'center' }>(({ show, align = 'center' }) => ({\r\n display: show ? 'flex' : 'none',\r\n alignItems: 'center',\r\n justifyContent: align === 'left' ? 'flex-start' : align === 'right' ? 'flex-end' : 'center',\r\n flex: '1 0 0',\r\n minHeight: '1px',\r\n minWidth: '1px',\r\n}));\r\n\r\nconst PrevNextButton = styled('button')<{ variant: 'text' | 'outlined' }>(({ variant }) => {\r\n const baseStyles = {\r\n display: 'flex',\r\n alignItems: 'center',\r\n justifyContent: 'center',\r\n gap: tokens.spacing.xs,\r\n cursor: 'pointer',\r\n fontFamily: tokens.typography.fontFamily.body,\r\n fontSize: tokens.typography.fontSize['text-sm'],\r\n lineHeight: tokens.typography.lineHeight['text-sm'],\r\n fontWeight: tokens.typography.fontWeight.semibold,\r\n transition: 'all 0.2s ease',\r\n flexShrink: 0,\r\n overflow: 'hidden',\r\n border: 'none',\r\n background: 'none',\r\n color: tokens.color.gray[600],\r\n padding: 0,\r\n '&:hover': {\r\n color: tokens.color.gray[700],\r\n },\r\n '&:disabled': {\r\n opacity: 0.4,\r\n cursor: 'not-allowed',\r\n },\r\n };\r\n\r\n if (variant === 'outlined') {\r\n return {\r\n ...baseStyles,\r\n backgroundColor: tokens.color.base.white,\r\n border: `1px solid ${tokens.color.gray[300]}`,\r\n borderRadius: tokens.borderRadius.md,\r\n boxShadow: tokens.shadows.xs,\r\n padding: `${tokens.spacing.md} ${tokens.spacing.lg}`,\r\n color: tokens.color.gray[700],\r\n '&:hover': {\r\n backgroundColor: tokens.color.gray[50],\r\n color: tokens.color.gray[700],\r\n },\r\n };\r\n }\r\n\r\n return baseStyles;\r\n});\r\n\r\nconst PageNumbers = styled(Box)({\r\n display: 'flex',\r\n gap: tokens.spacing.xxs,\r\n alignItems: 'flex-start',\r\n});\r\n\r\nconst PageNumberButton = styled('button')<{\r\n active: boolean;\r\n shape: PaginationShape;\r\n}>(({ active, shape }) => ({\r\n display: 'flex',\r\n alignItems: 'center',\r\n justifyContent: 'center',\r\n width: '40px',\r\n height: '40px',\r\n padding: tokens.spacing.md,\r\n borderRadius: shape === 'Circle' ? tokens.borderRadius.full : tokens.borderRadius.md,\r\n fontFamily: tokens.typography.fontFamily.body,\r\n fontSize: tokens.typography.fontSize['text-sm'],\r\n lineHeight: tokens.typography.lineHeight['text-sm'],\r\n fontWeight: tokens.typography.fontWeight.medium,\r\n cursor: 'pointer',\r\n transition: 'all 0.2s ease',\r\n border: 'none',\r\n flexShrink: 0,\r\n overflow: 'hidden',\r\n backgroundColor: active ? tokens.color.gray[50] : 'transparent',\r\n color: active ? tokens.color.gray[700] : tokens.color.gray[500],\r\n '&:hover': {\r\n backgroundColor: tokens.color.gray[50],\r\n color: tokens.color.gray[700],\r\n },\r\n}));\r\n\r\nconst Ellipsis = styled('span')({\r\n display: 'flex',\r\n alignItems: 'center',\r\n justifyContent: 'center',\r\n width: '40px',\r\n height: '40px',\r\n padding: tokens.spacing.md,\r\n fontFamily: tokens.typography.fontFamily.body,\r\n fontSize: tokens.typography.fontSize['text-sm'],\r\n lineHeight: tokens.typography.lineHeight['text-sm'],\r\n fontWeight: tokens.typography.fontWeight.medium,\r\n color: tokens.color.gray[500],\r\n});\r\n\r\nconst PageInfo = styled(Box)({\r\n fontFamily: tokens.typography.fontFamily.body,\r\n fontSize: tokens.typography.fontSize['text-sm'],\r\n lineHeight: tokens.typography.lineHeight['text-sm'],\r\n fontWeight: tokens.typography.fontWeight.medium,\r\n color: tokens.color.gray[700],\r\n margin: 0,\r\n}) as typeof Box;\r\n\r\nconst NavArrowButton = styled(IconButton)({\r\n width: '36px',\r\n height: '36px',\r\n padding: tokens.spacing.md,\r\n borderRadius: tokens.borderRadius.md,\r\n border: `1px solid ${tokens.color.gray[300]}`,\r\n backgroundColor: tokens.color.base.white,\r\n boxShadow: tokens.shadows.xs,\r\n color: tokens.color.gray[400],\r\n '&:hover': {\r\n backgroundColor: tokens.color.gray[50],\r\n color: tokens.color.gray[600],\r\n },\r\n '&.Mui-disabled': {\r\n opacity: 0.4,\r\n backgroundColor: tokens.color.base.white,\r\n },\r\n '& .MuiSvgIcon-root': {\r\n fontSize: '20px',\r\n },\r\n});\r\n\r\nexport const Pagination: React.FC<PaginationProps> = ({\r\n type = 'Page default',\r\n shape = 'Square',\r\n page = 1,\r\n totalPages = 10,\r\n onChange,\r\n breakpoint: manualBreakpoint,\r\n}) => {\r\n const theme = useTheme();\r\n const autoIsMobile = useMediaQuery(theme.breakpoints.down('sm'));\r\n const isMobile = manualBreakpoint ? manualBreakpoint === 'Mobile' : autoIsMobile;\r\n const actualBreakpoint: PaginationBreakpoint = isMobile ? 'Mobile' : 'Desktop';\r\n\r\n const isPage = type.startsWith('Page');\r\n const isMinimal = type.includes('minimal');\r\n const isButtonGroup = type.includes('button group');\r\n\r\n const showPrevNextButtons = isPage && type === 'Page default' && !isMobile;\r\n const showPrevNextButtonsOutlined = isMinimal || isButtonGroup || (type === 'Card default' && !isMobile);\r\n\r\n const handlePageChange = (newPage: number) => {\r\n if (newPage >= 1 && newPage <= totalPages && newPage !== page) {\r\n console.log(`Pagination: Changing from page ${page} to page ${newPage}`);\r\n onChange?.(newPage);\r\n }\r\n };\r\n\r\n const renderPageNumbers = () => {\r\n const pages: (number | 'ellipsis')[] = [];\r\n const maxVisible = 7;\r\n\r\n if (totalPages <= maxVisible) {\r\n // Show all pages\r\n for (let i = 1; i <= totalPages; i++) {\r\n pages.push(i);\r\n }\r\n } else {\r\n // Always show first page\r\n pages.push(1);\r\n\r\n if (page <= 4) {\r\n // Near start: 1 2 3 4 5 ... 10\r\n for (let i = 2; i <= Math.min(5, totalPages - 1); i++) {\r\n pages.push(i);\r\n }\r\n if (totalPages > 6) {\r\n pages.push('ellipsis');\r\n }\r\n pages.push(totalPages);\r\n } else if (page >= totalPages - 3) {\r\n // Near end: 1 ... 6 7 8 9 10\r\n pages.push('ellipsis');\r\n for (let i = Math.max(2, totalPages - 4); i <= totalPages; i++) {\r\n pages.push(i);\r\n }\r\n } else {\r\n // Middle: 1 ... 4 5 6 ... 10\r\n pages.push('ellipsis');\r\n for (let i = page - 1; i <= page + 1; i++) {\r\n pages.push(i);\r\n }\r\n pages.push('ellipsis');\r\n pages.push(totalPages);\r\n }\r\n }\r\n\r\n return pages.map((pageNum, index) => {\r\n if (pageNum === 'ellipsis') {\r\n return <Ellipsis key={`ellipsis-${index}`}>...</Ellipsis>;\r\n }\r\n\r\n return (\r\n <PageNumberButton\r\n key={pageNum}\r\n active={pageNum === page}\r\n shape={shape}\r\n onClick={() => handlePageChange(pageNum)}\r\n >\r\n {pageNum}\r\n </PageNumberButton>\r\n );\r\n });\r\n };\r\n\r\n const renderContent = () => {\r\n if (isMobile) {\r\n // Mobile layout: Previous | Page X of Y | Next\r\n return (\r\n <>\r\n <PrevNextButton\r\n variant=\"text\"\r\n onClick={() => handlePageChange(page - 1)}\r\n disabled={page === 1}\r\n >\r\n <ChevronLeftIcon sx={{ fontSize: '20px' }} />\r\n Previous\r\n </PrevNextButton>\r\n <PageInfo>Page {page} of {totalPages}</PageInfo>\r\n <PrevNextButton\r\n variant=\"text\"\r\n onClick={() => handlePageChange(page + 1)}\r\n disabled={page === totalPages}\r\n >\r\n Next\r\n <ChevronRightIcon sx={{ fontSize: '20px' }} />\r\n </PrevNextButton>\r\n </>\r\n );\r\n }\r\n\r\n // Desktop layouts\r\n if (isButtonGroup) {\r\n // Button group: arrows + all page numbers in a row, then Page info below\r\n return (\r\n <>\r\n <Box sx={{ display: 'flex', gap: tokens.spacing.xs, alignItems: 'center' }}>\r\n <NavArrowButton\r\n onClick={() => handlePageChange(page - 1)}\r\n disabled={page === 1}\r\n size=\"small\"\r\n >\r\n <ChevronLeftIcon />\r\n </NavArrowButton>\r\n {renderPageNumbers()}\r\n <NavArrowButton\r\n onClick={() => handlePageChange(page + 1)}\r\n disabled={page === totalPages}\r\n size=\"small\"\r\n >\r\n <ChevronRightIcon />\r\n </NavArrowButton>\r\n </Box>\r\n <PageInfo>Page {page} of {totalPages}</PageInfo>\r\n </>\r\n );\r\n }\r\n\r\n // Page default: Previous (text) | Page numbers | Next (text)\r\n if (type === 'Page default') {\r\n return (\r\n <>\r\n <PrevNextButton\r\n variant=\"text\"\r\n onClick={() => handlePageChange(page - 1)}\r\n disabled={page === 1}\r\n >\r\n <ChevronLeftIcon sx={{ fontSize: '20px' }} />\r\n Previous\r\n </PrevNextButton>\r\n\r\n <PageNumbers>{renderPageNumbers()}</PageNumbers>\r\n\r\n <PrevNextButton\r\n variant=\"text\"\r\n onClick={() => handlePageChange(page + 1)}\r\n disabled={page === totalPages}\r\n >\r\n Next\r\n <ChevronRightIcon sx={{ fontSize: '20px' }} />\r\n </PrevNextButton>\r\n </>\r\n );\r\n }\r\n\r\n // Card minimal left aligned: Page info on LEFT, buttons on RIGHT\r\n if (type === 'Card minimal left aligned') {\r\n return (\r\n <>\r\n <PageInfo>Page {page} of {totalPages}</PageInfo>\r\n <Box sx={{ display: 'flex', gap: tokens.spacing.sm, marginLeft: 'auto' }}>\r\n <PrevNextButton\r\n variant=\"outlined\"\r\n onClick={() => handlePageChange(page - 1)}\r\n disabled={page === 1}\r\n >\r\n Previous\r\n </PrevNextButton>\r\n <PrevNextButton\r\n variant=\"outlined\"\r\n onClick={() => handlePageChange(page + 1)}\r\n disabled={page === totalPages}\r\n >\r\n Next\r\n </PrevNextButton>\r\n </Box>\r\n </>\r\n );\r\n }\r\n\r\n // Card minimal right aligned: Buttons on LEFT, page info on RIGHT\r\n if (type === 'Card minimal right aligned') {\r\n return (\r\n <>\r\n <Box sx={{ display: 'flex', gap: tokens.spacing.sm }}>\r\n <PrevNextButton\r\n variant=\"outlined\"\r\n onClick={() => handlePageChange(page - 1)}\r\n disabled={page === 1}\r\n >\r\n Previous\r\n </PrevNextButton>\r\n <PrevNextButton\r\n variant=\"outlined\"\r\n onClick={() => handlePageChange(page + 1)}\r\n disabled={page === totalPages}\r\n >\r\n Next\r\n </PrevNextButton>\r\n </Box>\r\n <PageInfo sx={{ marginLeft: 'auto' }}>Page {page} of {totalPages}</PageInfo>\r\n </>\r\n );\r\n }\r\n\r\n // Card minimal center aligned: Page info and buttons centered\r\n if (type === 'Card minimal center aligned') {\r\n return (\r\n <>\r\n <PageInfo>Page {page} of {totalPages}</PageInfo>\r\n <Box sx={{ display: 'flex', gap: tokens.spacing.sm, marginLeft: 'auto' }}>\r\n <PrevNextButton\r\n variant=\"outlined\"\r\n onClick={() => handlePageChange(page - 1)}\r\n disabled={page === 1}\r\n >\r\n Previous\r\n </PrevNextButton>\r\n <PrevNextButton\r\n variant=\"outlined\"\r\n onClick={() => handlePageChange(page + 1)}\r\n disabled={page === totalPages}\r\n >\r\n Next\r\n </PrevNextButton>\r\n </Box>\r\n </>\r\n );\r\n }\r\n\r\n // Card default: Previous on left, page numbers in center, Next on right\r\n if (type === 'Card default') {\r\n return (\r\n <>\r\n <ButtonWrap show={true} align=\"left\">\r\n <PrevNextButton\r\n variant=\"outlined\"\r\n onClick={() => handlePageChange(page - 1)}\r\n disabled={page === 1}\r\n >\r\n <ChevronLeftIcon sx={{ fontSize: '20px' }} />\r\n <Box component=\"span\" sx={{ px: '2px' }}>\r\n Previous\r\n </Box>\r\n </PrevNextButton>\r\n </ButtonWrap>\r\n\r\n <PageNumbers>{renderPageNumbers()}</PageNumbers>\r\n\r\n <ButtonWrap show={true} align=\"right\">\r\n <PrevNextButton\r\n variant=\"outlined\"\r\n onClick={() => handlePageChange(page + 1)}\r\n disabled={page === totalPages}\r\n >\r\n <Box component=\"span\" sx={{ px: '2px' }}>\r\n Next\r\n </Box>\r\n <ChevronRightIcon sx={{ fontSize: '20px' }} />\r\n </PrevNextButton>\r\n </ButtonWrap>\r\n\r\n <PageInfo>Page {page} of {totalPages}</PageInfo>\r\n </>\r\n );\r\n }\r\n\r\n // Fallback: just page numbers\r\n return <PageNumbers>{renderPageNumbers()}</PageNumbers>;\r\n };\r\n\r\n return (\r\n <Root paginationType={type} paginationBreakpoint={actualBreakpoint}>\r\n {renderContent()}\r\n </Root>\r\n );\r\n};\r\n\r\nPagination.displayName = 'Pagination';\r\n","import React from 'react';\r\nimport { styled } from '@mui/material/styles';\r\nimport { SearchIcon } from '../../theme/icons';\r\nimport { Dialog, DialogContent } from '../Dialog';\r\nimport { Input } from '../Input';\r\nimport { List, ListItem, ListItemButton, ListItemText, ListItemIcon, ListItemAvatar } from '../List';\r\nimport { Box } from '../Box';\r\nimport { Typography } from '../Typography';\r\nimport { Stack } from '../Stack';\r\nimport tokens from '../../tokens/tokens.json';\r\n\r\nconst StyledDialog = styled(Dialog)({\r\n '& .MuiDialog-paper': {\r\n borderRadius: `${tokens.borderRadius.xl}px`,\r\n maxWidth: 640,\r\n width: '100%',\r\n overflow: 'hidden',\r\n boxShadow: tokens.shadows['3xl'],\r\n },\r\n});\r\n\r\nconst StyledDialogContent = styled(DialogContent)({\r\n padding: 0,\r\n '&:first-of-type': {\r\n paddingTop: 0,\r\n },\r\n});\r\n\r\nconst InputWrapper = styled(Box)({\r\n display: 'flex',\r\n alignItems: 'center',\r\n padding: '12px 16px',\r\n borderBottom: `1px solid ${tokens.color.gray['200']}`,\r\n});\r\n\r\nconst SearchIconWrapper = styled(Box)({\r\n color: tokens.color.gray['500'],\r\n display: 'flex',\r\n alignItems: 'center',\r\n marginRight: 12,\r\n});\r\n\r\nconst ShortcutWrapper = styled(Box)({\r\n display: 'flex',\r\n alignItems: 'center',\r\n gap: 4,\r\n padding: '2px 6px',\r\n borderRadius: `${tokens.borderRadius.sm}px`,\r\n backgroundColor: tokens.color.gray['100'],\r\n border: `1px solid ${tokens.color.gray['300']}`,\r\n color: tokens.color.gray['500'],\r\n marginLeft: 'auto',\r\n});\r\n\r\nconst GroupHeader = styled(Typography)({\r\n padding: '12px 16px 8px',\r\n color: tokens.color.gray['500'],\r\n fontSize: tokens.typography.fontSize['text-xs'],\r\n fontWeight: tokens.typography.fontWeight.semibold,\r\n textTransform: 'uppercase',\r\n letterSpacing: '0.05em',\r\n});\r\n\r\nconst StyledListItemButton = styled(ListItemButton)({\r\n padding: '8px 12px',\r\n margin: '2px 8px',\r\n borderRadius: `${tokens.borderRadius.md}px`,\r\n border: `2px solid transparent`,\r\n backgroundColor: tokens.color.base.white,\r\n transition: 'all 0.2s ease-in-out',\r\n '&:hover': {\r\n backgroundColor: tokens.color.base.white,\r\n borderColor: tokens.color.primary['500'],\r\n },\r\n '&.Mui-selected': {\r\n backgroundColor: tokens.color.primary['50'],\r\n borderColor: tokens.color.primary['500'],\r\n '&:hover': {\r\n backgroundColor: tokens.color.primary['50'],\r\n borderColor: tokens.color.primary['600'],\r\n },\r\n },\r\n});\r\n\r\nconst FooterWrapper = styled(Box)({\r\n display: 'flex',\r\n alignItems: 'center',\r\n padding: '12px 16px',\r\n backgroundColor: tokens.color.gray['50'],\r\n borderTop: `1px solid ${tokens.color.gray['200']}`,\r\n gap: 16,\r\n});\r\n\r\nconst FooterItem = styled(Box)({\r\n display: 'flex',\r\n alignItems: 'center',\r\n gap: 6,\r\n color: tokens.color.gray['500'],\r\n fontSize: tokens.typography.fontSize['text-xs'],\r\n});\r\n\r\nconst Kbd = styled('kbd')({\r\n padding: '2px 4px',\r\n borderRadius: `${tokens.borderRadius.sm}px`,\r\n backgroundColor: tokens.color.base.white,\r\n border: `1px solid ${tokens.color.gray['300']}`,\r\n boxShadow: tokens.shadows.xs,\r\n fontSize: tokens.typography.fontSize['text-xs'],\r\n fontWeight: tokens.typography.fontWeight.medium,\r\n color: tokens.color.gray['700'],\r\n minWidth: 16,\r\n textAlign: 'center',\r\n display: 'inline-block',\r\n fontFamily: tokens.typography.fontFamily.body,\r\n lineHeight: 1,\r\n});\r\n\r\nexport interface CommandMenuProps {\r\n open: boolean;\r\n onClose: () => void;\r\n placeholder?: string;\r\n children?: React.ReactNode;\r\n /**\r\n * Search value (controlled)\r\n */\r\n searchValue?: string;\r\n /**\r\n * Search change handler\r\n */\r\n onSearchChange?: (value: string) => void;\r\n}\r\n\r\nexport const CommandMenu: React.FC<CommandMenuProps> = ({\r\n open,\r\n onClose,\r\n placeholder = 'Search...',\r\n children,\r\n searchValue,\r\n onSearchChange,\r\n}) => {\r\n const [internalSearch, setInternalSearch] = React.useState('');\r\n const search = searchValue !== undefined ? searchValue : internalSearch;\r\n const setSearch = onSearchChange || setInternalSearch;\r\n\r\n return (\r\n <StyledDialog open={open} onClose={onClose} fullWidth>\r\n <StyledDialogContent>\r\n <InputWrapper>\r\n <SearchIconWrapper>\r\n <SearchIcon fontSize=\"small\" />\r\n </SearchIconWrapper>\r\n <Input\r\n placeholder={placeholder}\r\n variant=\"standard\"\r\n fullWidth\r\n value={search}\r\n onChange={(e) => setSearch(e.target.value)}\r\n InputProps={{\r\n disableUnderline: true,\r\n }}\r\n autoFocus\r\n />\r\n <ShortcutWrapper>\r\n <Kbd>⌘</Kbd>\r\n <Kbd>K</Kbd>\r\n </ShortcutWrapper>\r\n </InputWrapper>\r\n <Box sx={{ maxHeight: 400, overflowY: 'auto', py: 1 }}>\r\n {children}\r\n </Box>\r\n <CommandFooter />\r\n </StyledDialogContent>\r\n </StyledDialog>\r\n );\r\n};\r\n\r\nexport const CommandGroup: React.FC<{ title: string; children: React.ReactNode }> = ({ title, children }) => (\r\n <Box>\r\n <GroupHeader variant=\"caption\">{title}</GroupHeader>\r\n <List disablePadding>{children}</List>\r\n </Box>\r\n);\r\n\r\nexport interface CommandItemProps {\r\n icon?: React.ReactNode;\r\n avatar?: React.ReactNode;\r\n title: string;\r\n subtitle?: string;\r\n shortcut?: string[];\r\n selected?: boolean;\r\n onClick?: () => void;\r\n}\r\n\r\nexport const CommandItem: React.FC<CommandItemProps> = ({\r\n icon,\r\n avatar,\r\n title,\r\n subtitle,\r\n shortcut,\r\n selected,\r\n onClick,\r\n}) => (\r\n <ListItem disablePadding>\r\n <StyledListItemButton selected={selected} onClick={onClick}>\r\n {avatar && <ListItemAvatar sx={{ minWidth: 40 }}>{avatar}</ListItemAvatar>}\r\n {icon && <ListItemIcon sx={{ minWidth: 32, color: tokens.color.gray['500'] }}>{icon}</ListItemIcon>}\r\n <ListItemText\r\n primary={\r\n <Typography variant=\"body2\" sx={{ fontWeight: tokens.typography.fontWeight.medium }}>\r\n {title}\r\n </Typography>\r\n }\r\n secondary={subtitle}\r\n secondaryTypographyProps={{ variant: 'caption', sx: { color: tokens.color.gray['500'] } }}\r\n />\r\n {shortcut && (\r\n <Stack direction=\"row\" spacing={0.5} sx={{ ml: 'auto' }}>\r\n {shortcut.map((s, i) => (\r\n <Kbd key={i}>{s}</Kbd>\r\n ))}\r\n </Stack>\r\n )}\r\n </StyledListItemButton>\r\n </ListItem>\r\n);\r\n\r\nexport const CommandFooter: React.FC = () => (\r\n <FooterWrapper>\r\n <FooterItem>\r\n <Stack direction=\"row\" spacing={0.5}>\r\n <Kbd>↑</Kbd>\r\n <Kbd>↓</Kbd>\r\n </Stack>\r\n <Typography variant=\"caption\">to navigate</Typography>\r\n </FooterItem>\r\n <FooterItem>\r\n <Kbd>↵</Kbd>\r\n <Typography variant=\"caption\">to select</Typography>\r\n </FooterItem>\r\n <FooterItem>\r\n <Kbd>esc</Kbd>\r\n <Typography variant=\"caption\">to close</Typography>\r\n </FooterItem>\r\n </FooterWrapper>\r\n);\r\n\r\nexport interface CommandEmptyProps {\r\n title?: string;\r\n description?: string;\r\n children?: React.ReactNode;\r\n}\r\n\r\nexport const CommandEmpty: React.FC<CommandEmptyProps> = ({\r\n title = 'No results found',\r\n description = 'Try searching for something else.',\r\n children,\r\n}) => (\r\n <Box sx={{ py: 8, px: 4, textAlign: 'center' }}>\r\n <Box sx={{ mb: 2, color: tokens.color.gray['300'] }}>\r\n <SearchIcon sx={{ fontSize: 48 }} />\r\n </Box>\r\n <Typography variant=\"subtitle2\" sx={{ fontWeight: tokens.typography.fontWeight.semibold, mb: 1 }}>\r\n {title}\r\n </Typography>\r\n <Typography variant=\"body2\" sx={{ color: tokens.color.gray['500'], mb: 3 }}>\r\n {description}\r\n </Typography>\r\n {children}\r\n </Box>\r\n);\r\n\r\n// Profile card styles\r\nconst ProfileCard = styled(Box)({\r\n padding: 24,\r\n textAlign: 'center',\r\n display: 'flex',\r\n flexDirection: 'column',\r\n alignItems: 'center',\r\n});\r\n\r\nconst ProfileHeader = styled(Box)({\r\n width: '100%',\r\n height: 120,\r\n background: 'linear-gradient(135deg, #E0C3FC 0%, #8EC5FC 100%)',\r\n borderRadius: `${tokens.borderRadius.lg}px`,\r\n marginBottom: -40,\r\n position: 'relative',\r\n});\r\n\r\nconst ProfileAvatarWrapper = styled(Box)({\r\n position: 'relative',\r\n zIndex: 1,\r\n marginBottom: 16,\r\n});\r\n\r\nexport interface CommandProfileProps {\r\n avatar: React.ReactNode;\r\n name: string;\r\n role?: string;\r\n description?: string;\r\n actions?: React.ReactNode;\r\n}\r\n\r\n/**\r\n * CommandProfile - Displays a user profile card with gradient header and avatar\r\n *\r\n * @example\r\n * ```tsx\r\n * <CommandProfile\r\n * avatar={<Avatar src=\"...\" size=\"lg\" />}\r\n * name=\"Olivia Rhye\"\r\n * role=\"Product Designer\"\r\n * description=\"I'm a Product Designer based in Melbourne, Australia.\"\r\n * actions={<Button>View profile</Button>}\r\n * />\r\n * ```\r\n */\r\nexport const CommandProfile: React.FC<CommandProfileProps> = ({\r\n avatar,\r\n name,\r\n role,\r\n description,\r\n actions,\r\n}) => (\r\n <ProfileCard>\r\n <ProfileHeader />\r\n <ProfileAvatarWrapper>{avatar}</ProfileAvatarWrapper>\r\n <Typography\r\n variant=\"h6\"\r\n sx={{\r\n fontWeight: tokens.typography.fontWeight.semibold,\r\n mb: 0.5,\r\n fontSize: tokens.typography.fontSize['text-lg']\r\n }}\r\n >\r\n {name}\r\n </Typography>\r\n {role && (\r\n <Typography\r\n variant=\"body2\"\r\n sx={{\r\n color: tokens.color.gray['500'],\r\n mb: 2,\r\n fontSize: tokens.typography.fontSize['text-sm']\r\n }}\r\n >\r\n {role}\r\n </Typography>\r\n )}\r\n {description && (\r\n <Typography\r\n variant=\"body2\"\r\n sx={{\r\n color: tokens.color.gray['600'],\r\n mb: 3,\r\n maxWidth: 320,\r\n fontSize: tokens.typography.fontSize['text-sm'],\r\n lineHeight: tokens.typography.lineHeight['text-sm']\r\n }}\r\n >\r\n {description}\r\n </Typography>\r\n )}\r\n {actions && <Box sx={{ mt: 'auto' }}>{actions}</Box>}\r\n </ProfileCard>\r\n);\r\n\r\n// Split view layout (sidebar + main content)\r\nconst SplitViewContainer = styled(Box)({\r\n display: 'flex',\r\n height: '100%',\r\n maxHeight: 400,\r\n});\r\n\r\nconst SplitViewSidebar = styled(Box)({\r\n width: 240,\r\n borderRight: `1px solid ${tokens.color.gray['200']}`,\r\n overflowY: 'auto',\r\n});\r\n\r\nconst SplitViewMain = styled(Box)({\r\n flex: 1,\r\n overflowY: 'auto',\r\n padding: 24,\r\n display: 'flex',\r\n flexDirection: 'column',\r\n alignItems: 'center',\r\n justifyContent: 'center',\r\n});\r\n\r\nexport interface CommandSplitViewProps {\r\n sidebar: React.ReactNode;\r\n main: React.ReactNode;\r\n}\r\n\r\n/**\r\n * CommandSplitView - Two-column layout with sidebar list and main content area\r\n */\r\nexport const CommandSplitView: React.FC<CommandSplitViewProps> = ({ sidebar, main }) => (\r\n <SplitViewContainer>\r\n <SplitViewSidebar>{sidebar}</SplitViewSidebar>\r\n <SplitViewMain>{main}</SplitViewMain>\r\n </SplitViewContainer>\r\n);\r\n\r\n// Integration detail styles\r\nconst IntegrationDetailCard = styled(Box)({\r\n padding: 24,\r\n textAlign: 'center',\r\n display: 'flex',\r\n flexDirection: 'column',\r\n alignItems: 'center',\r\n maxWidth: 400,\r\n});\r\n\r\nconst IntegrationIcon = styled(Box)({\r\n width: 64,\r\n height: 64,\r\n borderRadius: `${tokens.borderRadius.lg}px`,\r\n marginBottom: 16,\r\n display: 'flex',\r\n alignItems: 'center',\r\n justifyContent: 'center',\r\n overflow: 'hidden',\r\n});\r\n\r\nconst ToggleWrapper = styled(Box)({\r\n position: 'absolute',\r\n top: 16,\r\n right: 16,\r\n});\r\n\r\nexport interface CommandIntegrationDetailProps {\r\n icon: React.ReactNode;\r\n name: string;\r\n description: string;\r\n primaryAction?: React.ReactNode;\r\n secondaryAction?: React.ReactNode;\r\n toggle?: React.ReactNode;\r\n}\r\n\r\n/**\r\n * CommandIntegrationDetail - Displays integration details with icon, description, and actions\r\n */\r\nexport const CommandIntegrationDetail: React.FC<CommandIntegrationDetailProps> = ({\r\n icon,\r\n name,\r\n description,\r\n primaryAction,\r\n secondaryAction,\r\n toggle,\r\n}) => (\r\n <Box sx={{ position: 'relative' }}>\r\n {toggle && <ToggleWrapper>{toggle}</ToggleWrapper>}\r\n <IntegrationDetailCard>\r\n <IntegrationIcon>{icon}</IntegrationIcon>\r\n <Typography\r\n variant=\"h6\"\r\n sx={{\r\n fontWeight: tokens.typography.fontWeight.semibold,\r\n mb: 2,\r\n fontSize: tokens.typography.fontSize['text-lg']\r\n }}\r\n >\r\n {name}\r\n </Typography>\r\n <Typography\r\n variant=\"body2\"\r\n sx={{\r\n color: tokens.color.gray['600'],\r\n mb: 3,\r\n fontSize: tokens.typography.fontSize['text-sm'],\r\n lineHeight: tokens.typography.lineHeight['text-sm']\r\n }}\r\n >\r\n {description}\r\n </Typography>\r\n <Stack spacing={1.5} sx={{ width: '100%' }}>\r\n {primaryAction}\r\n {secondaryAction}\r\n </Stack>\r\n </IntegrationDetailCard>\r\n </Box>\r\n);\r\n\r\n// Enhanced profile with social icons\r\nconst SocialIconsWrapper = styled(Box)({\r\n display: 'flex',\r\n gap: 12,\r\n marginBottom: 20,\r\n justifyContent: 'center',\r\n});\r\n\r\nconst SocialIconButton = styled(Box)({\r\n width: 36,\r\n height: 36,\r\n borderRadius: `${tokens.borderRadius.md}px`,\r\n backgroundColor: tokens.color.gray['50'],\r\n display: 'flex',\r\n alignItems: 'center',\r\n justifyContent: 'center',\r\n cursor: 'pointer',\r\n transition: 'all 0.2s ease-in-out',\r\n color: tokens.color.gray['500'],\r\n '&:hover': {\r\n backgroundColor: tokens.color.gray['100'],\r\n color: tokens.color.gray['700'],\r\n },\r\n});\r\n\r\nexport interface CommandProfileEnhancedProps {\r\n avatar: React.ReactNode;\r\n name: string;\r\n verified?: boolean;\r\n description: string;\r\n socialIcons?: React.ReactNode[];\r\n actions?: React.ReactNode;\r\n gradientType?: 'purple-blue' | 'blue-pink';\r\n}\r\n\r\n/**\r\n * CommandProfileEnhanced - Profile card with verified badge, social icons, and custom gradient\r\n */\r\nexport const CommandProfileEnhanced: React.FC<CommandProfileEnhancedProps> = ({\r\n avatar,\r\n name,\r\n verified,\r\n description,\r\n socialIcons,\r\n actions,\r\n gradientType = 'purple-blue',\r\n}) => {\r\n const gradients = {\r\n 'purple-blue': 'linear-gradient(135deg, #E0C3FC 0%, #8EC5FC 100%)',\r\n 'blue-pink': 'linear-gradient(135deg, #A8CEFF 0%, #FFC4E8 100%)',\r\n };\r\n\r\n return (\r\n <ProfileCard>\r\n <Box\r\n sx={{\r\n width: '100%',\r\n height: 120,\r\n background: gradients[gradientType],\r\n borderRadius: `${tokens.borderRadius.lg}px`,\r\n marginBottom: -40,\r\n position: 'relative',\r\n }}\r\n />\r\n <ProfileAvatarWrapper>{avatar}</ProfileAvatarWrapper>\r\n <Stack direction=\"row\" spacing={0.5} alignItems=\"center\" sx={{ mb: 1 }}>\r\n <Typography\r\n variant=\"h6\"\r\n sx={{\r\n fontWeight: tokens.typography.fontWeight.semibold,\r\n fontSize: tokens.typography.fontSize['text-lg']\r\n }}\r\n >\r\n {name}\r\n </Typography>\r\n {verified && (\r\n <Box\r\n component=\"span\"\r\n sx={{\r\n display: 'inline-flex',\r\n color: tokens.color.primary['500'],\r\n fontSize: 18,\r\n }}\r\n >\r\n ✓\r\n </Box>\r\n )}\r\n </Stack>\r\n <Typography\r\n variant=\"body2\"\r\n sx={{\r\n color: tokens.color.gray['600'],\r\n mb: 3,\r\n maxWidth: 320,\r\n fontSize: tokens.typography.fontSize['text-sm'],\r\n lineHeight: tokens.typography.lineHeight['text-sm'],\r\n textAlign: 'center',\r\n }}\r\n >\r\n {description}\r\n </Typography>\r\n {socialIcons && socialIcons.length > 0 && (\r\n <SocialIconsWrapper>\r\n {socialIcons.map((icon, index) => (\r\n <SocialIconButton key={index}>{icon}</SocialIconButton>\r\n ))}\r\n </SocialIconsWrapper>\r\n )}\r\n {actions && <Box sx={{ mt: 'auto' }}>{actions}</Box>}\r\n </ProfileCard>\r\n );\r\n};\r\n","import React from 'react';\r\nimport { Drawer as MuiDrawer, DrawerProps as MuiDrawerProps, styled, useMediaQuery, useTheme } from '@mui/material';\r\nimport { Box } from '../Box';\r\nimport { Typography } from '../Typography';\r\nimport { IconButton } from '../IconButton';\r\nimport { Tabs } from '../Tabs';\r\nimport { Tab } from '../Tabs/Tab';\r\nimport { Badge } from '../Badge';\r\nimport { CloseIcon } from '../../theme/icons';\r\nimport tokens from '../../tokens/tokens.json';\r\n\r\nexport interface SlideMenuHeaderProps {\r\n /** Optional icon element to display */\r\n icon?: React.ReactNode;\r\n /** Whether to show the featured icon container */\r\n showIcon?: boolean;\r\n /** Heading text */\r\n heading?: string;\r\n /** Supporting text below the heading */\r\n supportingText?: string;\r\n /** Whether to show the close button */\r\n showCloseButton?: boolean;\r\n /** Callback when close button is clicked */\r\n onClose?: () => void;\r\n /** Whether to show tabs */\r\n showTabs?: boolean;\r\n /** Array of tab labels */\r\n tabs?: Array<{ label: string; badge?: string | number }>;\r\n /** Currently selected tab index */\r\n selectedTab?: number;\r\n /** Callback when tab changes */\r\n onTabChange?: (event: React.SyntheticEvent, value: number) => void;\r\n}\r\n\r\nexport interface SlideMenuFooterProps {\r\n /** Left-aligned action buttons/links */\r\n leftActions?: React.ReactNode;\r\n /** Right-aligned action buttons */\r\n rightActions?: React.ReactNode;\r\n /** Whether to show the footer */\r\n show?: boolean;\r\n}\r\n\r\nexport interface SlideMenuProps extends Omit<MuiDrawerProps, 'onClose'> {\r\n /** Header configuration */\r\n header?: SlideMenuHeaderProps;\r\n /** Footer configuration */\r\n footer?: SlideMenuFooterProps;\r\n /** Callback when drawer closes */\r\n onClose?: () => void;\r\n}\r\n\r\nconst FeaturedIconContainer = styled(Box)(({ theme }) => ({\r\n width: 40,\r\n height: 40,\r\n backgroundColor: tokens.color.base.white,\r\n border: `1px solid ${tokens.color.gray['300']}`,\r\n borderRadius: tokens.borderRadius.md,\r\n boxShadow: tokens.shadows.xs,\r\n display: 'flex',\r\n alignItems: 'center',\r\n justifyContent: 'center',\r\n flexShrink: 0,\r\n position: 'relative',\r\n overflow: 'hidden',\r\n '&::after': {\r\n content: '\"\"',\r\n position: 'absolute',\r\n inset: 0,\r\n pointerEvents: 'none',\r\n boxShadow: `${tokens.shadows['skeumorphic-inner-border']}, ${tokens.shadows['skeumorphic-inner']}`,\r\n borderRadius: tokens.borderRadius.md,\r\n },\r\n}));\r\n\r\nconst HeaderContainer = styled(Box, {\r\n shouldForwardProp: (prop) => prop !== 'showTabs',\r\n})<{ showTabs?: boolean }>(({ theme, showTabs }) => ({\r\n backgroundColor: tokens.color.base.white,\r\n borderBottom: `1px solid ${tokens.color.base.transparent}`,\r\n display: 'flex',\r\n flexDirection: 'column',\r\n gap: tokens.borderRadius.md * 2.5, // 20px (2xl spacing)\r\n padding: `${tokens.borderRadius.md * 3}px ${tokens.borderRadius.md * 3}px ${tokens.borderRadius.md * 2}px ${tokens.borderRadius.md * 3}px`, // 24px 24px 16px 24px\r\n position: 'relative',\r\n [theme.breakpoints.down('sm')]: {\r\n padding: `${tokens.borderRadius.md * 3}px ${tokens.borderRadius.md * 2}px ${tokens.borderRadius.md * 2}px ${tokens.borderRadius.md * 2}px`, // 24px 16px 16px 16px\r\n },\r\n}));\r\n\r\nconst HeadingContainer = styled(Box)(() => ({\r\n display: 'flex',\r\n gap: tokens.borderRadius.md * 2, // 16px (xl spacing)\r\n alignItems: 'flex-start',\r\n width: '100%',\r\n}));\r\n\r\nconst TextContainer = styled(Box)(() => ({\r\n display: 'flex',\r\n flexDirection: 'column',\r\n gap: 2, // xxs spacing\r\n flex: 1,\r\n minWidth: 0,\r\n}));\r\n\r\nconst CloseButtonContainer = styled(Box)(() => ({\r\n position: 'absolute',\r\n top: 12,\r\n right: 12,\r\n}));\r\n\r\nconst StyledCloseIconButton = styled(IconButton)(() => ({\r\n padding: tokens.borderRadius.md,\r\n borderRadius: tokens.borderRadius.md,\r\n width: 40,\r\n height: 40,\r\n '& .MuiSvgIcon-root': {\r\n fontSize: 20,\r\n color: tokens.color.gray['400'],\r\n },\r\n}));\r\n\r\nconst TabsContainer = styled(Box)(({ theme }) => ({\r\n backgroundColor: tokens.color.gray['50'],\r\n border: `1px solid ${tokens.color.gray['200']}`,\r\n borderRadius: tokens.borderRadius.md,\r\n padding: 2, // xxs spacing\r\n display: 'flex',\r\n gap: 2,\r\n '& .MuiTabs-root': {\r\n minHeight: 36,\r\n width: '100%',\r\n },\r\n '& .MuiTabs-flexContainer': {\r\n gap: 2,\r\n },\r\n '& .MuiTabs-indicator': {\r\n display: 'none',\r\n },\r\n '& .MuiTab-root': {\r\n minHeight: 36,\r\n padding: `${tokens.borderRadius.md}px ${tokens.borderRadius.md * 1.5}px`, // 8px 12px\r\n borderRadius: tokens.borderRadius.md,\r\n fontSize: tokens.typography.fontSize['text-sm'],\r\n fontWeight: tokens.typography.fontWeight.semibold,\r\n lineHeight: tokens.typography.lineHeight['text-sm'],\r\n fontFamily: tokens.typography.fontFamily.body,\r\n textTransform: 'none',\r\n color: tokens.color.gray['500'],\r\n flex: 1,\r\n minWidth: 0,\r\n '&.Mui-selected': {\r\n backgroundColor: tokens.color.base.white,\r\n border: `1px solid ${tokens.color.gray['300']}`,\r\n boxShadow: tokens.shadows.xs,\r\n color: tokens.color.gray['700'],\r\n },\r\n '&:hover:not(.Mui-selected)': {\r\n backgroundColor: 'transparent',\r\n },\r\n },\r\n}));\r\n\r\nconst StyledBadge = styled(Box)(() => ({\r\n backgroundColor: tokens.color.gray['50'],\r\n border: `1px solid ${tokens.color.gray['200']}`,\r\n borderRadius: tokens.borderRadius.full,\r\n padding: `${2}px ${tokens.borderRadius.md}px`, // 2px 8px (xxs, md)\r\n marginLeft: tokens.borderRadius.md,\r\n fontSize: tokens.typography.fontSize['text-xs'],\r\n fontWeight: tokens.typography.fontWeight.medium,\r\n lineHeight: tokens.typography.lineHeight['text-xs'],\r\n color: tokens.color.gray['700'],\r\n fontFamily: tokens.typography.fontFamily.body,\r\n}));\r\n\r\nconst FooterContainer = styled(Box)(() => ({\r\n backgroundColor: tokens.color.base.white,\r\n borderTop: `1px solid ${tokens.color.gray['200']}`,\r\n display: 'flex',\r\n flexDirection: 'column',\r\n alignItems: 'center',\r\n flexShrink: 0,\r\n width: '100%',\r\n}));\r\n\r\nconst FooterContent = styled(Box)(() => ({\r\n display: 'flex',\r\n alignItems: 'center',\r\n justifyContent: 'space-between',\r\n width: '100%',\r\n padding: `${tokens.borderRadius.md * 2}px ${tokens.borderRadius.md * 3}px`, // 16px 24px (xl, 3xl)\r\n gap: 0,\r\n}));\r\n\r\nconst FooterLeftActions = styled(Box)(() => ({\r\n display: 'flex',\r\n alignItems: 'center',\r\n gap: 0,\r\n flexShrink: 0,\r\n}));\r\n\r\nconst FooterRightActions = styled(Box)(() => ({\r\n display: 'flex',\r\n alignItems: 'center',\r\n gap: tokens.borderRadius.md * 1.5, // 12px (lg spacing)\r\n flexShrink: 0,\r\n}));\r\n\r\n/**\r\n * SlideMenu component - A drawer that slides in from the side with an optional header and footer\r\n *\r\n * Features:\r\n * - Optional header with icon, heading, and supporting text\r\n * - Optional tabs in the header\r\n * - Optional footer with left and right actions\r\n * - Close button\r\n * - Responsive (Desktop/Mobile breakpoints)\r\n * - Uses design tokens from tokens.json\r\n */\r\nexport const SlideMenu: React.FC<SlideMenuProps> = ({\r\n header,\r\n footer,\r\n children,\r\n onClose,\r\n anchor = 'right',\r\n ...props\r\n}) => {\r\n const theme = useTheme();\r\n const isMobile = useMediaQuery(theme.breakpoints.down('sm'));\r\n\r\n const handleClose = () => {\r\n if (onClose) {\r\n onClose();\r\n }\r\n };\r\n\r\n const isHorizontal = anchor === 'bottom' || anchor === 'top';\r\n\r\n return (\r\n <MuiDrawer anchor={anchor} onClose={handleClose} {...props}>\r\n <Box sx={{ \r\n width: isHorizontal ? '100%' : { xs: '100vw', sm: 400, md: 480 }, \r\n height: isHorizontal ? { xs: '80vh', sm: '60vh' } : '100%', \r\n display: 'flex', \r\n flexDirection: 'column' \r\n }}>\r\n {header && (\r\n <HeaderContainer showTabs={header.showTabs}>\r\n <HeadingContainer>\r\n {header.showIcon && (\r\n <FeaturedIconContainer>\r\n {header.icon || (\r\n <Box\r\n sx={{\r\n width: 20,\r\n height: 20,\r\n borderRadius: '50%',\r\n border: `1.5px solid ${tokens.color.gray['700']}`,\r\n }}\r\n />\r\n )}\r\n </FeaturedIconContainer>\r\n )}\r\n <TextContainer>\r\n {header.heading && (\r\n <Typography\r\n sx={{\r\n fontSize: {\r\n xs: tokens.typography.fontSize['text-md'],\r\n sm: tokens.typography.fontSize['text-lg'],\r\n },\r\n fontWeight: tokens.typography.fontWeight.semibold,\r\n lineHeight: {\r\n xs: tokens.typography.lineHeight['text-md'],\r\n sm: tokens.typography.lineHeight['text-lg'],\r\n },\r\n color: tokens.color.gray['900'],\r\n fontFamily: tokens.typography.fontFamily.body,\r\n }}\r\n >\r\n {header.heading}\r\n </Typography>\r\n )}\r\n {header.supportingText && (\r\n <Typography\r\n sx={{\r\n fontSize: tokens.typography.fontSize['text-sm'],\r\n fontWeight: tokens.typography.fontWeight.regular,\r\n lineHeight: tokens.typography.lineHeight['text-sm'],\r\n color: tokens.color.gray['600'],\r\n fontFamily: tokens.typography.fontFamily.body,\r\n }}\r\n >\r\n {header.supportingText}\r\n </Typography>\r\n )}\r\n </TextContainer>\r\n </HeadingContainer>\r\n\r\n {header.showTabs && header.tabs && header.tabs.length > 0 && (\r\n <TabsContainer>\r\n <Tabs\r\n value={header.selectedTab || 0}\r\n onChange={header.onTabChange}\r\n variant=\"fullWidth\"\r\n >\r\n {header.tabs.map((tab, index) => (\r\n <Tab\r\n key={index}\r\n label={\r\n <Box sx={{ display: 'flex', alignItems: 'center', gap: 1 }}>\r\n {tab.label}\r\n {tab.badge && (\r\n <StyledBadge>\r\n {tab.badge}\r\n </StyledBadge>\r\n )}\r\n </Box>\r\n }\r\n />\r\n ))}\r\n </Tabs>\r\n </TabsContainer>\r\n )}\r\n\r\n {header.showCloseButton !== false && (\r\n <CloseButtonContainer>\r\n <StyledCloseIconButton onClick={handleClose}>\r\n <CloseIcon />\r\n </StyledCloseIconButton>\r\n </CloseButtonContainer>\r\n )}\r\n </HeaderContainer>\r\n )}\r\n <Box sx={{ flex: 1, overflow: 'auto' }}>\r\n {children}\r\n </Box>\r\n {footer && footer.show !== false && (\r\n <FooterContainer>\r\n <FooterContent>\r\n <FooterLeftActions>\r\n {footer.leftActions}\r\n </FooterLeftActions>\r\n <FooterRightActions>\r\n {footer.rightActions}\r\n </FooterRightActions>\r\n </FooterContent>\r\n </FooterContainer>\r\n )}\r\n </Box>\r\n </MuiDrawer>\r\n );\r\n};\r\n","import React from 'react';\r\nimport { Box, IconButton as MuiIconButton, Menu as MuiMenu, MenuItem, Divider, CircularProgress, LinearProgress } from '@mui/material';\r\nimport tokens from '../../tokens/tokens.json';\r\nimport { Avatar } from '../Avatar';\r\nimport { Input } from '../Input';\r\nimport { Button } from '../Button';\r\nimport {\r\n NotificationsOutlinedIcon,\r\n MenuIcon,\r\n KeyboardArrowDownIcon,\r\n KeyboardArrowUpIcon,\r\n KeyboardArrowRightIcon,\r\n PersonOutlineIcon,\r\n SettingsOutlinedIcon,\r\n DescriptionOutlinedIcon,\r\n LogoutOutlinedIcon,\r\n AddIcon,\r\n CloseIcon,\r\n ContentCopyIcon\r\n} from '../../theme/icons';\r\n\r\nexport interface ApplicationNavigationSubmenuItem {\r\n /**\r\n * Submenu item label\r\n */\r\n label: string;\r\n /**\r\n * Icon element\r\n */\r\n icon?: React.ReactNode;\r\n /**\r\n * Badge count or text\r\n */\r\n badge?: number | string;\r\n /**\r\n * Click handler\r\n */\r\n onClick?: () => void;\r\n}\r\n\r\nexport interface ApplicationNavigationItemProps {\r\n /**\r\n * Whether the item is active\r\n */\r\n active?: boolean;\r\n /**\r\n * Icon element to display\r\n */\r\n icon?: React.ReactNode;\r\n /**\r\n * Icon background color (for team items)\r\n */\r\n iconBgColor?: string;\r\n /**\r\n * Label text\r\n */\r\n label?: string;\r\n /**\r\n * Badge count\r\n */\r\n badge?: number | string;\r\n /**\r\n * Keyboard shortcut (e.g., \"⌘1\")\r\n */\r\n keyboardShortcut?: string;\r\n /**\r\n * Show dropdown arrow\r\n */\r\n showDropdown?: boolean;\r\n /**\r\n * Show right arrow\r\n */\r\n showRightArrow?: boolean;\r\n /**\r\n * Whether the item is expanded\r\n */\r\n expanded?: boolean;\r\n /**\r\n * Submenu items\r\n */\r\n submenuItems?: ApplicationNavigationSubmenuItem[];\r\n /**\r\n * Click handler\r\n */\r\n onClick?: () => void;\r\n}\r\n\r\nexport interface ApplicationNavigationIconButtonProps {\r\n /**\r\n * Variant of icon button\r\n */\r\n variant?: 'notification' | 'menu';\r\n /**\r\n * Size of icon button\r\n */\r\n size?: 'md' | 'lg';\r\n /**\r\n * Click handler\r\n */\r\n onClick?: () => void;\r\n}\r\n\r\nexport interface ApplicationNavigationSearchProps {\r\n /**\r\n * Placeholder text\r\n */\r\n placeholder?: string;\r\n /**\r\n * Keyboard shortcut text\r\n */\r\n shortcut?: string;\r\n /**\r\n * Change handler\r\n */\r\n onChange?: (value: string) => void;\r\n}\r\n\r\nexport interface ApplicationNavigationUserProfileProps {\r\n /**\r\n * User name\r\n */\r\n name: string;\r\n /**\r\n * User email\r\n */\r\n email: string;\r\n /**\r\n * Avatar image URL\r\n */\r\n avatarSrc?: string;\r\n /**\r\n * Online status\r\n */\r\n online?: boolean;\r\n /**\r\n * Selected state (for radio button variant)\r\n */\r\n selected?: boolean;\r\n /**\r\n * Show expand icon\r\n */\r\n showExpand?: boolean;\r\n /**\r\n * Click handler\r\n */\r\n onClick?: () => void;\r\n}\r\n\r\nexport interface ApplicationNavigationMenuItemProps {\r\n /**\r\n * Menu item icon\r\n */\r\n icon?: React.ReactNode;\r\n /**\r\n * Menu item label\r\n */\r\n label: string;\r\n /**\r\n * Keyboard shortcut\r\n */\r\n shortcut?: string;\r\n /**\r\n * Click handler\r\n */\r\n onClick?: () => void;\r\n}\r\n\r\nexport interface ApplicationNavigationAccountMenuProps {\r\n /**\r\n * Current user\r\n */\r\n currentUser: ApplicationNavigationUserProfileProps;\r\n /**\r\n * Menu items\r\n */\r\n menuItems?: ApplicationNavigationMenuItemProps[];\r\n /**\r\n * Switch account users\r\n */\r\n switchAccountUsers?: ApplicationNavigationUserProfileProps[];\r\n /**\r\n * Show add account button\r\n */\r\n showAddAccount?: boolean;\r\n /**\r\n * Show sign out\r\n */\r\n showSignOut?: boolean;\r\n /**\r\n * Sign out click handler\r\n */\r\n onSignOut?: () => void;\r\n /**\r\n * Add account click handler\r\n */\r\n onAddAccount?: () => void;\r\n}\r\n\r\nexport interface ApplicationNavigationBannerListItem {\r\n /**\r\n * List item label\r\n */\r\n label: string;\r\n /**\r\n * Dot color\r\n */\r\n dotColor?: string;\r\n /**\r\n * Show arrow\r\n */\r\n showArrow?: boolean;\r\n /**\r\n * Click handler\r\n */\r\n onClick?: () => void;\r\n}\r\n\r\nexport interface ApplicationNavigationBannerProps {\r\n /**\r\n * Icon element to display\r\n */\r\n icon?: React.ReactNode;\r\n /**\r\n * Status badge (e.g., \"Online\", \"Live\")\r\n */\r\n statusBadge?: string;\r\n /**\r\n * Status badge color\r\n */\r\n statusBadgeColor?: string;\r\n /**\r\n * Avatars to display\r\n */\r\n avatars?: string[];\r\n /**\r\n * Avatar count text (e.g., \"+5\")\r\n */\r\n avatarCount?: string;\r\n /**\r\n * Show add button\r\n */\r\n showAddButton?: boolean;\r\n /**\r\n * Timestamp text (e.g., \"2 mins ago\")\r\n */\r\n timestamp?: string;\r\n /**\r\n * Title text\r\n */\r\n title: string;\r\n /**\r\n * Title right text (e.g., \"24 days left\")\r\n */\r\n titleRight?: string;\r\n /**\r\n * Description text\r\n */\r\n description?: string;\r\n /**\r\n * Message text (for user messages)\r\n */\r\n message?: string;\r\n /**\r\n * Progress type\r\n */\r\n progressType?: 'bar' | 'circular' | 'none';\r\n /**\r\n * Progress value (0-100)\r\n */\r\n progressValue?: number;\r\n /**\r\n * Badge text\r\n */\r\n badge?: string;\r\n /**\r\n * List items\r\n */\r\n listItems?: ApplicationNavigationBannerListItem[];\r\n /**\r\n * List footer link text\r\n */\r\n listFooterLink?: string;\r\n /**\r\n * List footer link handler\r\n */\r\n onListFooterClick?: () => void;\r\n /**\r\n * Image/QR code URL\r\n */\r\n imageUrl?: string;\r\n /**\r\n * Input field value (for referral links etc)\r\n */\r\n inputValue?: string;\r\n /**\r\n * Show copy button\r\n */\r\n showCopyButton?: boolean;\r\n /**\r\n * Primary action button text\r\n */\r\n primaryAction?: string;\r\n /**\r\n * Primary action icon\r\n */\r\n primaryActionIcon?: React.ReactNode;\r\n /**\r\n * Primary action click handler\r\n */\r\n onPrimaryAction?: () => void;\r\n /**\r\n * Secondary action button text\r\n */\r\n secondaryAction?: string;\r\n /**\r\n * Secondary action click handler\r\n */\r\n onSecondaryAction?: () => void;\r\n /**\r\n * Close handler\r\n */\r\n onClose?: () => void;\r\n}\r\n\r\nexport interface ApplicationNavigationProps {\r\n /**\r\n * Navigation items\r\n */\r\n items?: ApplicationNavigationItemProps[];\r\n /**\r\n * Icon button props\r\n */\r\n iconButton?: ApplicationNavigationIconButtonProps;\r\n /**\r\n * Search props\r\n */\r\n search?: ApplicationNavigationSearchProps;\r\n /**\r\n * User profile props\r\n */\r\n userProfile?: ApplicationNavigationUserProfileProps;\r\n /**\r\n * Account menu props\r\n */\r\n accountMenu?: ApplicationNavigationAccountMenuProps;\r\n /**\r\n * Banner props\r\n */\r\n banner?: ApplicationNavigationBannerProps;\r\n /**\r\n * Type of component to render\r\n */\r\n type?: 'item' | 'iconButton' | 'search' | 'userProfile' | 'accountMenu' | 'banner';\r\n}\r\n\r\n/**\r\n * ApplicationNavigation component for navigation items and icon buttons\r\n */\r\nexport const ApplicationNavigation: React.FC<ApplicationNavigationProps> = ({\r\n items,\r\n iconButton,\r\n search,\r\n userProfile,\r\n accountMenu,\r\n banner,\r\n type = 'item',\r\n}) => {\r\n const [menuAnchor, setMenuAnchor] = React.useState<null | HTMLElement>(null);\r\n if (type === 'iconButton' && iconButton) {\r\n const size = iconButton.size === 'lg' ? '48px' : '40px';\r\n const iconSize = iconButton.size === 'lg' ? '24px' : '20px';\r\n\r\n return (\r\n <MuiIconButton\r\n onClick={iconButton.onClick}\r\n sx={{\r\n width: size,\r\n height: size,\r\n border: `1.5px solid ${tokens.color.primary['700']}`,\r\n borderRadius: `${tokens.borderRadius.md}px`,\r\n bgcolor: tokens.color.base.white,\r\n '&:hover': {\r\n bgcolor: tokens.color.primary['25'],\r\n },\r\n }}\r\n >\r\n {iconButton.variant === 'notification' ? (\r\n <NotificationsOutlinedIcon sx={{ fontSize: iconSize, color: tokens.color.primary['700'] }} />\r\n ) : (\r\n <MenuIcon sx={{ fontSize: iconSize, color: tokens.color.primary['700'] }} />\r\n )}\r\n </MuiIconButton>\r\n );\r\n }\r\n\r\n if (type === 'search' && search) {\r\n return (\r\n <Box sx={{ position: 'relative', width: '100%' }}>\r\n <Input\r\n placeholder={search.placeholder || 'Placeholder'}\r\n onChange={(e) => search.onChange?.(e.target.value)}\r\n sx={{\r\n '& input': {\r\n pr: '40px',\r\n },\r\n }}\r\n fullWidth\r\n />\r\n <Box\r\n sx={{\r\n position: 'absolute',\r\n right: '12px',\r\n top: '50%',\r\n transform: 'translateY(-50%)',\r\n display: 'flex',\r\n alignItems: 'center',\r\n gap: '4px',\r\n pointerEvents: 'none',\r\n }}\r\n >\r\n <Box\r\n sx={{\r\n fontSize: tokens.typography.fontSize['text-xs'],\r\n fontWeight: tokens.typography.fontWeight.medium,\r\n color: tokens.color.gray['500'],\r\n px: '6px',\r\n py: '2px',\r\n border: `1px solid ${tokens.color.gray['300']}`,\r\n borderRadius: `${tokens.borderRadius.sm}px`,\r\n bgcolor: tokens.color.gray['50'],\r\n }}\r\n >\r\n {search.shortcut || '⌘C'}\r\n </Box>\r\n </Box>\r\n </Box>\r\n );\r\n }\r\n\r\n if (type === 'userProfile' && userProfile) {\r\n return (\r\n <Box\r\n onClick={userProfile.onClick}\r\n sx={{\r\n display: 'flex',\r\n alignItems: 'center',\r\n gap: '12px',\r\n py: '8px',\r\n px: '12px',\r\n cursor: 'pointer',\r\n borderRadius: `${tokens.borderRadius.md}px`,\r\n '&:hover': {\r\n bgcolor: tokens.color.gray['50'],\r\n },\r\n }}\r\n >\r\n <Box sx={{ position: 'relative' }}>\r\n <Avatar\r\n size=\"xs\"\r\n src={userProfile.avatarSrc}\r\n sx={{ width: 40, height: 40 }}\r\n />\r\n {userProfile.online && (\r\n <Box\r\n sx={{\r\n position: 'absolute',\r\n bottom: 0,\r\n right: 0,\r\n width: '12px',\r\n height: '12px',\r\n borderRadius: '50%',\r\n bgcolor: tokens.color.primary['700'],\r\n border: `2px solid ${tokens.color.base.white}`,\r\n }}\r\n />\r\n )}\r\n </Box>\r\n <Box sx={{ flex: 1 }}>\r\n <Box\r\n sx={{\r\n fontSize: tokens.typography.fontSize['text-sm'],\r\n fontWeight: tokens.typography.fontWeight.semibold,\r\n color: tokens.color.gray['900'],\r\n lineHeight: tokens.typography.lineHeight['text-sm'],\r\n }}\r\n >\r\n {userProfile.name}\r\n </Box>\r\n <Box\r\n sx={{\r\n fontSize: tokens.typography.fontSize['text-sm'],\r\n fontWeight: tokens.typography.fontWeight.regular,\r\n color: tokens.color.gray['600'],\r\n lineHeight: tokens.typography.lineHeight['text-sm'],\r\n }}\r\n >\r\n {userProfile.email}\r\n </Box>\r\n </Box>\r\n {userProfile.selected !== undefined && (\r\n <Box\r\n sx={{\r\n width: '20px',\r\n height: '20px',\r\n borderRadius: '50%',\r\n border: `1.5px solid ${userProfile.selected ? tokens.color.primary['700'] : tokens.color.gray['300']}`,\r\n bgcolor: userProfile.selected ? tokens.color.primary['700'] : 'transparent',\r\n display: 'flex',\r\n alignItems: 'center',\r\n justifyContent: 'center',\r\n }}\r\n >\r\n {userProfile.selected && (\r\n <Box\r\n sx={{\r\n width: '8px',\r\n height: '8px',\r\n borderRadius: '50%',\r\n bgcolor: tokens.color.base.white,\r\n }}\r\n />\r\n )}\r\n </Box>\r\n )}\r\n {userProfile.showExpand && (\r\n <KeyboardArrowDownIcon\r\n sx={{\r\n fontSize: '20px',\r\n color: tokens.color.gray['400'],\r\n }}\r\n />\r\n )}\r\n </Box>\r\n );\r\n }\r\n\r\n if (type === 'accountMenu' && accountMenu) {\r\n return (\r\n <>\r\n <Box\r\n onClick={(e) => setMenuAnchor(e.currentTarget)}\r\n sx={{\r\n display: 'flex',\r\n alignItems: 'center',\r\n gap: '12px',\r\n py: '8px',\r\n px: '12px',\r\n cursor: 'pointer',\r\n borderRadius: `${tokens.borderRadius.md}px`,\r\n '&:hover': {\r\n bgcolor: tokens.color.gray['50'],\r\n },\r\n }}\r\n >\r\n <Box sx={{ position: 'relative' }}>\r\n <Avatar\r\n size=\"xs\"\r\n src={accountMenu.currentUser.avatarSrc}\r\n sx={{ width: 40, height: 40 }}\r\n />\r\n {accountMenu.currentUser.online && (\r\n <Box\r\n sx={{\r\n position: 'absolute',\r\n bottom: 0,\r\n right: 0,\r\n width: '12px',\r\n height: '12px',\r\n borderRadius: '50%',\r\n bgcolor: tokens.color.primary['700'],\r\n border: `2px solid ${tokens.color.base.white}`,\r\n }}\r\n />\r\n )}\r\n </Box>\r\n <Box sx={{ flex: 1 }}>\r\n <Box\r\n sx={{\r\n fontSize: tokens.typography.fontSize['text-sm'],\r\n fontWeight: tokens.typography.fontWeight.semibold,\r\n color: tokens.color.gray['900'],\r\n lineHeight: tokens.typography.lineHeight['text-sm'],\r\n }}\r\n >\r\n {accountMenu.currentUser.name}\r\n </Box>\r\n <Box\r\n sx={{\r\n fontSize: tokens.typography.fontSize['text-sm'],\r\n fontWeight: tokens.typography.fontWeight.regular,\r\n color: tokens.color.gray['600'],\r\n lineHeight: tokens.typography.lineHeight['text-sm'],\r\n }}\r\n >\r\n {accountMenu.currentUser.email}\r\n </Box>\r\n </Box>\r\n <KeyboardArrowDownIcon\r\n sx={{\r\n fontSize: '20px',\r\n color: tokens.color.gray['400'],\r\n }}\r\n />\r\n </Box>\r\n\r\n <MuiMenu\r\n anchorEl={menuAnchor}\r\n open={Boolean(menuAnchor)}\r\n onClose={() => setMenuAnchor(null)}\r\n PaperProps={{\r\n sx: {\r\n width: '320px',\r\n mt: 1,\r\n boxShadow: tokens.shadows.lg,\r\n border: `1px solid ${tokens.color.gray['200']}`,\r\n borderRadius: `${tokens.borderRadius.lg}px`,\r\n },\r\n }}\r\n >\r\n <Box sx={{ py: '4px' }}>\r\n {accountMenu.menuItems?.map((item, index) => (\r\n <MenuItem\r\n key={index}\r\n onClick={() => {\r\n item.onClick?.();\r\n setMenuAnchor(null);\r\n }}\r\n sx={{\r\n px: '12px',\r\n py: '10px',\r\n gap: '12px',\r\n '&:hover': {\r\n bgcolor: tokens.color.gray['50'],\r\n },\r\n }}\r\n >\r\n {item.icon && (\r\n <Box sx={{ color: tokens.color.gray['500'], display: 'flex' }}>\r\n {item.icon}\r\n </Box>\r\n )}\r\n <Box sx={{ flex: 1, fontSize: tokens.typography.fontSize['text-sm'], fontWeight: tokens.typography.fontWeight.medium, color: tokens.color.gray['700'] }}>\r\n {item.label}\r\n </Box>\r\n {item.shortcut && (\r\n <Box sx={{ fontSize: tokens.typography.fontSize['text-xs'], color: tokens.color.gray['500'] }}>\r\n {item.shortcut}\r\n </Box>\r\n )}\r\n </MenuItem>\r\n ))}\r\n </Box>\r\n\r\n {accountMenu.switchAccountUsers && accountMenu.switchAccountUsers.length > 0 && (\r\n <>\r\n <Divider sx={{ my: '4px' }} />\r\n <Box sx={{ px: '12px', py: '8px' }}>\r\n <Box sx={{ fontSize: tokens.typography.fontSize['text-xs'], fontWeight: tokens.typography.fontWeight.semibold, color: tokens.color.gray['600'], mb: '8px', textTransform: 'uppercase' }}>\r\n Switch account\r\n </Box>\r\n {accountMenu.switchAccountUsers.map((user, index) => (\r\n <Box\r\n key={index}\r\n onClick={user.onClick}\r\n sx={{\r\n display: 'flex',\r\n alignItems: 'center',\r\n gap: '12px',\r\n py: '8px',\r\n px: '8px',\r\n cursor: 'pointer',\r\n borderRadius: `${tokens.borderRadius.md}px`,\r\n '&:hover': {\r\n bgcolor: tokens.color.gray['50'],\r\n },\r\n }}\r\n >\r\n <Box sx={{ position: 'relative' }}>\r\n <Avatar size=\"xs\" src={user.avatarSrc} sx={{ width: 32, height: 32 }} />\r\n {user.online && (\r\n <Box\r\n sx={{\r\n position: 'absolute',\r\n bottom: 0,\r\n right: 0,\r\n width: '10px',\r\n height: '10px',\r\n borderRadius: '50%',\r\n bgcolor: tokens.color.primary['700'],\r\n border: `2px solid ${tokens.color.base.white}`,\r\n }}\r\n />\r\n )}\r\n </Box>\r\n <Box sx={{ flex: 1 }}>\r\n <Box sx={{ fontSize: tokens.typography.fontSize['text-sm'], fontWeight: tokens.typography.fontWeight.medium, color: tokens.color.gray['900'] }}>\r\n {user.name}\r\n </Box>\r\n <Box sx={{ fontSize: tokens.typography.fontSize['text-sm'], color: tokens.color.gray['600'] }}>\r\n {user.email}\r\n </Box>\r\n </Box>\r\n <Box\r\n sx={{\r\n width: '20px',\r\n height: '20px',\r\n borderRadius: '50%',\r\n border: `1.5px solid ${user.selected ? tokens.color.primary['700'] : tokens.color.gray['300']}`,\r\n bgcolor: user.selected ? tokens.color.primary['700'] : 'transparent',\r\n display: 'flex',\r\n alignItems: 'center',\r\n justifyContent: 'center',\r\n }}\r\n >\r\n {user.selected && (\r\n <Box\r\n sx={{\r\n width: '8px',\r\n height: '8px',\r\n borderRadius: '50%',\r\n bgcolor: tokens.color.base.white,\r\n }}\r\n />\r\n )}\r\n </Box>\r\n </Box>\r\n ))}\r\n </Box>\r\n\r\n {accountMenu.showAddAccount && (\r\n <Box\r\n onClick={() => {\r\n accountMenu.onAddAccount?.();\r\n setMenuAnchor(null);\r\n }}\r\n sx={{\r\n display: 'flex',\r\n alignItems: 'center',\r\n gap: '8px',\r\n px: '20px',\r\n py: '10px',\r\n cursor: 'pointer',\r\n '&:hover': {\r\n bgcolor: tokens.color.gray['50'],\r\n },\r\n }}\r\n >\r\n <AddIcon sx={{ fontSize: '20px', color: tokens.color.gray['500'] }} />\r\n <Box sx={{ fontSize: tokens.typography.fontSize['text-sm'], fontWeight: tokens.typography.fontWeight.medium, color: tokens.color.gray['700'] }}>\r\n Add account\r\n </Box>\r\n </Box>\r\n )}\r\n </>\r\n )}\r\n\r\n {accountMenu.showSignOut && (\r\n <>\r\n <Divider sx={{ my: '4px' }} />\r\n <MenuItem\r\n onClick={() => {\r\n accountMenu.onSignOut?.();\r\n setMenuAnchor(null);\r\n }}\r\n sx={{\r\n px: '12px',\r\n py: '10px',\r\n gap: '12px',\r\n '&:hover': {\r\n bgcolor: tokens.color.gray['50'],\r\n },\r\n }}\r\n >\r\n <LogoutOutlinedIcon sx={{ fontSize: '20px', color: tokens.color.gray['500'] }} />\r\n <Box sx={{ flex: 1, fontSize: tokens.typography.fontSize['text-sm'], fontWeight: tokens.typography.fontWeight.medium, color: tokens.color.gray['700'] }}>\r\n Sign out\r\n </Box>\r\n <Box sx={{ fontSize: tokens.typography.fontSize['text-xs'], color: tokens.color.gray['500'] }}>\r\n ⌘Q\r\n </Box>\r\n </MenuItem>\r\n </>\r\n )}\r\n </MuiMenu>\r\n </>\r\n );\r\n }\r\n\r\n if (type === 'banner' && banner) {\r\n return (\r\n <Box\r\n sx={{\r\n position: 'relative',\r\n p: '16px',\r\n bgcolor: tokens.color.base.white,\r\n border: `1px solid ${tokens.color.gray['200']}`,\r\n borderRadius: `${tokens.borderRadius.lg}px`,\r\n boxShadow: tokens.shadows.xs,\r\n }}\r\n >\r\n {banner.onClose && (\r\n <MuiIconButton\r\n onClick={banner.onClose}\r\n sx={{\r\n position: 'absolute',\r\n top: '12px',\r\n right: '12px',\r\n width: '24px',\r\n height: '24px',\r\n padding: 0,\r\n color: tokens.color.gray['500'],\r\n '&:hover': {\r\n bgcolor: tokens.color.gray['50'],\r\n },\r\n }}\r\n >\r\n <CloseIcon sx={{ fontSize: '20px' }} />\r\n </MuiIconButton>\r\n )}\r\n\r\n <Box sx={{ display: 'flex', flexDirection: 'column', gap: '12px', pr: banner.onClose ? '32px' : 0 }}>\r\n {/* Status badge */}\r\n {banner.statusBadge && (\r\n <Box sx={{ display: 'flex', alignItems: 'center', gap: '6px' }}>\r\n <Box sx={{ width: '8px', height: '8px', borderRadius: '50%', bgcolor: banner.statusBadgeColor || tokens.color.primary['700'] }} />\r\n <Box sx={{ fontSize: tokens.typography.fontSize['text-xs'], fontWeight: tokens.typography.fontWeight.medium, color: tokens.color.gray['700'] }}>\r\n {banner.statusBadge}\r\n </Box>\r\n </Box>\r\n )}\r\n\r\n {/* Avatars row */}\r\n {banner.avatars && banner.avatars.length > 0 && (\r\n <Box sx={{ display: 'flex', alignItems: 'center', gap: '8px' }}>\r\n {banner.avatars.map((src, idx) => (\r\n <Avatar key={idx} size=\"xs\" src={src} sx={{ width: 32, height: 32, ml: idx > 0 ? '-8px' : 0, border: `2px solid ${tokens.color.base.white}` }} />\r\n ))}\r\n {banner.avatarCount && (\r\n <Box sx={{ fontSize: tokens.typography.fontSize['text-sm'], fontWeight: tokens.typography.fontWeight.medium, color: tokens.color.gray['600'] }}>\r\n {banner.avatarCount}\r\n </Box>\r\n )}\r\n {banner.showAddButton && (\r\n <MuiIconButton\r\n sx={{\r\n width: '32px',\r\n height: '32px',\r\n border: `1px solid ${tokens.color.gray['300']}`,\r\n bgcolor: tokens.color.base.white,\r\n '&:hover': { bgcolor: tokens.color.gray['50'] },\r\n }}\r\n >\r\n <AddIcon sx={{ fontSize: '18px', color: tokens.color.gray['600'] }} />\r\n </MuiIconButton>\r\n )}\r\n </Box>\r\n )}\r\n\r\n {/* Icon/Avatar and Title row */}\r\n <Box sx={{ display: 'flex', alignItems: 'flex-start', gap: '12px' }}>\r\n {banner.icon && (\r\n <Box sx={{ color: tokens.color.gray['500'], display: 'flex', alignItems: 'center', justifyContent: 'center', fontSize: '24px' }}>\r\n {banner.icon}\r\n </Box>\r\n )}\r\n {banner.progressType === 'circular' && banner.progressValue !== undefined && (\r\n <Box sx={{ position: 'relative', display: 'inline-flex' }}>\r\n <CircularProgress\r\n variant=\"determinate\"\r\n value={banner.progressValue}\r\n size={48}\r\n thickness={4}\r\n sx={{\r\n color: tokens.color.primary['700'],\r\n '& .MuiCircularProgress-circle': {\r\n strokeLinecap: 'round',\r\n },\r\n }}\r\n />\r\n <Box\r\n sx={{\r\n top: 0,\r\n left: 0,\r\n bottom: 0,\r\n right: 0,\r\n position: 'absolute',\r\n display: 'flex',\r\n alignItems: 'center',\r\n justifyContent: 'center',\r\n }}\r\n >\r\n <Box sx={{ fontSize: tokens.typography.fontSize['text-sm'], fontWeight: tokens.typography.fontWeight.semibold, color: tokens.color.gray['900'] }}>\r\n {banner.progressValue}%\r\n </Box>\r\n </Box>\r\n </Box>\r\n )}\r\n <Box sx={{ flex: 1 }}>\r\n <Box sx={{ display: 'flex', alignItems: 'center', justifyContent: 'space-between', gap: '8px', mb: '4px' }}>\r\n <Box sx={{ display: 'flex', alignItems: 'center', gap: '8px' }}>\r\n <Box sx={{ fontSize: tokens.typography.fontSize['text-sm'], fontWeight: tokens.typography.fontWeight.semibold, color: tokens.color.gray['900'] }}>\r\n {banner.title}\r\n </Box>\r\n {banner.timestamp && (\r\n <Box sx={{ fontSize: tokens.typography.fontSize['text-sm'], color: tokens.color.gray['500'] }}>\r\n {banner.timestamp}\r\n </Box>\r\n )}\r\n {banner.badge && (\r\n <Box\r\n sx={{\r\n px: '6px',\r\n py: '2px',\r\n bgcolor: tokens.color.primary['50'],\r\n color: tokens.color.primary['700'],\r\n borderRadius: `${tokens.borderRadius.full}px`,\r\n fontSize: tokens.typography.fontSize['text-xs'],\r\n fontWeight: tokens.typography.fontWeight.medium,\r\n }}\r\n >\r\n {banner.badge}\r\n </Box>\r\n )}\r\n </Box>\r\n {banner.titleRight && (\r\n <Box sx={{ fontSize: tokens.typography.fontSize['text-sm'], color: tokens.color.gray['500'] }}>\r\n {banner.titleRight}\r\n </Box>\r\n )}\r\n </Box>\r\n {banner.description && (\r\n <Box sx={{ fontSize: tokens.typography.fontSize['text-sm'], color: tokens.color.gray['600'], lineHeight: tokens.typography.lineHeight['text-sm'] }}>\r\n {banner.description}\r\n </Box>\r\n )}\r\n {banner.message && (\r\n <Box sx={{ fontSize: tokens.typography.fontSize['text-sm'], color: tokens.color.gray['700'], lineHeight: tokens.typography.lineHeight['text-sm'], mt: '4px' }}>\r\n {banner.message}\r\n </Box>\r\n )}\r\n </Box>\r\n </Box>\r\n\r\n {/* Progress bar */}\r\n {banner.progressType === 'bar' && banner.progressValue !== undefined && (\r\n <LinearProgress\r\n variant=\"determinate\"\r\n value={banner.progressValue}\r\n sx={{\r\n height: '8px',\r\n borderRadius: `${tokens.borderRadius.full}px`,\r\n bgcolor: tokens.color.gray['200'],\r\n '& .MuiLinearProgress-bar': {\r\n bgcolor: tokens.color.primary['700'],\r\n borderRadius: `${tokens.borderRadius.full}px`,\r\n },\r\n }}\r\n />\r\n )}\r\n\r\n {/* Input field with copy button */}\r\n {banner.inputValue && (\r\n <Box sx={{ position: 'relative' }}>\r\n <Input\r\n value={banner.inputValue}\r\n inputProps={{ readOnly: true }}\r\n fullWidth\r\n sx={{\r\n '& input': {\r\n pr: banner.showCopyButton ? '40px' : '12px',\r\n },\r\n }}\r\n />\r\n {banner.showCopyButton && (\r\n <MuiIconButton\r\n onClick={() => navigator.clipboard.writeText(banner.inputValue || '')}\r\n sx={{\r\n position: 'absolute',\r\n right: '8px',\r\n top: '50%',\r\n transform: 'translateY(-50%)',\r\n width: '32px',\r\n height: '32px',\r\n color: tokens.color.gray['500'],\r\n '&:hover': {\r\n bgcolor: tokens.color.gray['50'],\r\n },\r\n }}\r\n >\r\n <ContentCopyIcon sx={{ fontSize: '18px' }} />\r\n </MuiIconButton>\r\n )}\r\n </Box>\r\n )}\r\n\r\n {/* List items */}\r\n {banner.listItems && banner.listItems.length > 0 && (\r\n <Box sx={{ display: 'flex', flexDirection: 'column', gap: '8px' }}>\r\n {banner.listItems.map((item, idx) => (\r\n <Box\r\n key={idx}\r\n onClick={item.onClick}\r\n sx={{\r\n display: 'flex',\r\n alignItems: 'center',\r\n gap: '12px',\r\n py: '8px',\r\n cursor: item.onClick ? 'pointer' : 'default',\r\n '&:hover': item.onClick ? { bgcolor: tokens.color.gray['50'], borderRadius: `${tokens.borderRadius.md}px` } : {},\r\n }}\r\n >\r\n {item.dotColor && (\r\n <Box sx={{ width: '8px', height: '8px', borderRadius: '50%', bgcolor: item.dotColor, flexShrink: 0 }} />\r\n )}\r\n <Box sx={{ flex: 1, fontSize: tokens.typography.fontSize['text-sm'], fontWeight: tokens.typography.fontWeight.medium, color: tokens.color.gray['900'] }}>\r\n {item.label}\r\n </Box>\r\n {item.showArrow && (\r\n <KeyboardArrowDownIcon sx={{ fontSize: '20px', color: tokens.color.gray['400'], transform: 'rotate(-90deg)' }} />\r\n )}\r\n </Box>\r\n ))}\r\n </Box>\r\n )}\r\n\r\n {/* List footer link */}\r\n {banner.listFooterLink && (\r\n <Box\r\n onClick={banner.onListFooterClick}\r\n sx={{\r\n fontSize: tokens.typography.fontSize['text-sm'],\r\n fontWeight: tokens.typography.fontWeight.semibold,\r\n color: tokens.color.primary['700'],\r\n cursor: 'pointer',\r\n '&:hover': { color: tokens.color.primary['800'] },\r\n }}\r\n >\r\n {banner.listFooterLink}\r\n </Box>\r\n )}\r\n\r\n {/* Image/QR Code */}\r\n {banner.imageUrl && (\r\n <Box\r\n component=\"img\"\r\n src={banner.imageUrl}\r\n sx={{\r\n width: '100%',\r\n maxWidth: '200px',\r\n height: 'auto',\r\n mx: 'auto',\r\n display: 'block',\r\n }}\r\n />\r\n )}\r\n\r\n {/* Action buttons */}\r\n {(banner.primaryAction || banner.secondaryAction) && (\r\n <Box sx={{ display: 'flex', gap: '8px', flexWrap: 'wrap' }}>\r\n {banner.secondaryAction && (\r\n <Button\r\n variant=\"text\"\r\n onClick={banner.onSecondaryAction}\r\n sx={{\r\n color: tokens.color.gray['700'],\r\n textTransform: 'none',\r\n fontSize: tokens.typography.fontSize['text-sm'],\r\n fontWeight: tokens.typography.fontWeight.semibold,\r\n px: 0,\r\n }}\r\n >\r\n {banner.secondaryAction}\r\n </Button>\r\n )}\r\n {banner.primaryAction && (\r\n <Button\r\n variant={banner.inputValue ? 'contained' : banner.listItems ? 'outlined' : 'text'}\r\n startIcon={banner.primaryActionIcon}\r\n onClick={banner.onPrimaryAction}\r\n sx={{\r\n bgcolor: banner.inputValue ? tokens.color.primary['700'] : 'transparent',\r\n color: banner.inputValue ? tokens.color.base.white : tokens.color.primary['700'],\r\n textTransform: 'none',\r\n fontSize: tokens.typography.fontSize['text-sm'],\r\n fontWeight: tokens.typography.fontWeight.semibold,\r\n px: banner.inputValue ? '16px' : banner.primaryActionIcon || banner.listItems ? '12px' : 0,\r\n '&:hover': {\r\n bgcolor: banner.inputValue ? tokens.color.primary['800'] : tokens.color.primary['50'],\r\n },\r\n ...(banner.inputValue && { flex: 1 }),\r\n }}\r\n >\r\n {banner.primaryAction}\r\n </Button>\r\n )}\r\n </Box>\r\n )}\r\n </Box>\r\n </Box>\r\n );\r\n }\r\n\r\n if (type === 'item' && items) {\r\n return (\r\n <Box sx={{ display: 'flex', flexDirection: 'column', gap: '8px' }}>\r\n {items.map((item, index) => (\r\n <React.Fragment key={index}>\r\n <Box\r\n onClick={item.onClick}\r\n sx={{\r\n display: 'flex',\r\n alignItems: 'center',\r\n gap: '12px',\r\n px: '12px',\r\n py: '8px',\r\n borderRadius: `${tokens.borderRadius.md}px`,\r\n cursor: 'pointer',\r\n bgcolor: item.active ? tokens.color.gray['50'] : 'transparent',\r\n '&:hover': {\r\n bgcolor: tokens.color.gray['50'],\r\n },\r\n }}\r\n >\r\n {/* Active indicator */}\r\n {item.active && (\r\n <Box\r\n sx={{\r\n width: '8px',\r\n height: '8px',\r\n borderRadius: '50%',\r\n bgcolor: tokens.color.primary['700'],\r\n flexShrink: 0,\r\n }}\r\n />\r\n )}\r\n {!item.active && (\r\n <Box sx={{ width: '8px', height: '8px', flexShrink: 0 }} />\r\n )}\r\n\r\n {/* Icon */}\r\n {item.icon && (\r\n <Box\r\n sx={{\r\n width: item.iconBgColor ? '32px' : '20px',\r\n height: item.iconBgColor ? '32px' : '20px',\r\n display: 'flex',\r\n alignItems: 'center',\r\n justifyContent: 'center',\r\n color: item.iconBgColor ? tokens.color.base.white : (item.active ? tokens.color.gray['900'] : tokens.color.gray['500']),\r\n bgcolor: item.iconBgColor || 'transparent',\r\n borderRadius: item.iconBgColor ? '50%' : 0,\r\n '& svg': {\r\n fontSize: item.iconBgColor ? '18px' : '20px',\r\n },\r\n }}\r\n >\r\n {item.icon}\r\n </Box>\r\n )}\r\n\r\n {/* Label */}\r\n <Box\r\n sx={{\r\n fontSize: tokens.typography.fontSize['text-md'],\r\n fontWeight: item.active ? tokens.typography.fontWeight.semibold : tokens.typography.fontWeight.regular,\r\n color: item.active ? tokens.color.gray['900'] : tokens.color.gray['700'],\r\n flex: 1,\r\n }}\r\n >\r\n {item.label}\r\n </Box>\r\n\r\n {/* Badge */}\r\n {item.badge !== undefined && (\r\n <Box\r\n sx={{\r\n fontSize: tokens.typography.fontSize['text-sm'],\r\n fontWeight: tokens.typography.fontWeight.medium,\r\n color: tokens.color.gray['700'],\r\n px: '8px',\r\n py: '2px',\r\n borderRadius: `${tokens.borderRadius.full}px`,\r\n bgcolor: tokens.color.gray['100'],\r\n }}\r\n >\r\n {item.badge}\r\n </Box>\r\n )}\r\n\r\n {/* Keyboard shortcut */}\r\n {item.keyboardShortcut && (\r\n <Box\r\n sx={{\r\n fontSize: tokens.typography.fontSize['text-xs'],\r\n fontWeight: tokens.typography.fontWeight.medium,\r\n color: tokens.color.gray['500'],\r\n px: '6px',\r\n py: '2px',\r\n border: `1px solid ${tokens.color.gray['300']}`,\r\n borderRadius: `${tokens.borderRadius.sm}px`,\r\n bgcolor: tokens.color.gray['50'],\r\n }}\r\n >\r\n {item.keyboardShortcut}\r\n </Box>\r\n )}\r\n\r\n {/* Dropdown arrow */}\r\n {item.showDropdown && (\r\n <>\r\n {item.expanded ? (\r\n <KeyboardArrowUpIcon\r\n sx={{\r\n fontSize: '20px',\r\n color: tokens.color.gray['500'],\r\n }}\r\n />\r\n ) : (\r\n <KeyboardArrowDownIcon\r\n sx={{\r\n fontSize: '20px',\r\n color: tokens.color.gray['500'],\r\n }}\r\n />\r\n\r\n )}\r\n </>\r\n )}\r\n\r\n {/* Right arrow */}\r\n {item.showRightArrow && (\r\n <KeyboardArrowRightIcon\r\n sx={{\r\n fontSize: '20px',\r\n color: tokens.color.gray['400'],\r\n }}\r\n />\r\n )}\r\n </Box>\r\n {/* Submenu items */}\r\n {item.expanded && item.submenuItems && (\r\n <Box sx={{ pl: '52px', display: 'flex', flexDirection: 'column', gap: '4px', mt: '4px' }}>\r\n {item.submenuItems.map((submenuItem, subIndex) => (\r\n <Box\r\n key={subIndex}\r\n onClick={submenuItem.onClick}\r\n sx={{\r\n display: 'flex',\r\n alignItems: 'center',\r\n gap: '12px',\r\n py: '8px',\r\n px: '12px',\r\n cursor: 'pointer',\r\n borderRadius: `${tokens.borderRadius.md}px`,\r\n '&:hover': {\r\n bgcolor: tokens.color.gray['50'],\r\n },\r\n }}\r\n >\r\n {/* Submenu icon */}\r\n {submenuItem.icon && (\r\n <Box\r\n sx={{\r\n color: tokens.color.gray['500'],\r\n display: 'flex',\r\n alignItems: 'center',\r\n '& svg': {\r\n fontSize: '18px',\r\n },\r\n }}\r\n >\r\n {submenuItem.icon}\r\n </Box>\r\n )}\r\n\r\n {/* Submenu label */}\r\n <Box\r\n sx={{\r\n flex: 1,\r\n fontSize: tokens.typography.fontSize['text-md'],\r\n fontWeight: tokens.typography.fontWeight.regular,\r\n color: tokens.color.gray['700'],\r\n }}\r\n >\r\n {submenuItem.label}\r\n </Box>\r\n\r\n {/* Submenu badge */}\r\n {submenuItem.badge !== undefined && (\r\n <Box\r\n sx={{\r\n fontSize: tokens.typography.fontSize['text-sm'],\r\n fontWeight: tokens.typography.fontWeight.medium,\r\n color: tokens.color.gray['700'],\r\n }}\r\n >\r\n {submenuItem.badge}\r\n </Box>\r\n )}\r\n </Box>\r\n ))}\r\n </Box>\r\n )}\r\n </React.Fragment>\r\n ))}\r\n </Box>\r\n );\r\n }\r\n\r\n return null;\r\n};\r\n\r\nexport default ApplicationNavigation;\r\n","import React from 'react';\r\nimport { Box, IconButton as MuiIconButton, Drawer } from '@mui/material';\r\nimport tokens from '../../tokens/tokens.json';\r\nimport { ApplicationNavigation, ApplicationNavigationItemProps, ApplicationNavigationBannerProps, ApplicationNavigationUserProfileProps, ApplicationNavigationSubmenuItem } from './ApplicationNavigation';\r\nimport { CloseIcon, MenuIcon, OpenInNewIcon } from '../../theme/icons';\r\n\r\nexport interface ApplicationNavigationSidebarLogo {\r\n /**\r\n * Logo icon element\r\n */\r\n icon?: React.ReactNode;\r\n /**\r\n * Logo text\r\n */\r\n text?: string;\r\n /**\r\n * Click handler\r\n */\r\n onClick?: () => void;\r\n}\r\n\r\nexport interface ApplicationNavigationSidebarSection {\r\n /**\r\n * Section header label (e.g., \"GENERAL\", \"YOUR TEAMS\")\r\n */\r\n header?: string;\r\n /**\r\n * Navigation items in this section\r\n */\r\n items: ApplicationNavigationItemProps[];\r\n}\r\n\r\nexport interface ApplicationNavigationSidebarProps {\r\n /**\r\n * Logo configuration\r\n */\r\n logo?: ApplicationNavigationSidebarLogo;\r\n /**\r\n * Show search input\r\n */\r\n showSearch?: boolean;\r\n /**\r\n * Search placeholder\r\n */\r\n searchPlaceholder?: string;\r\n /**\r\n * Search shortcut\r\n */\r\n searchShortcut?: string;\r\n /**\r\n * Search change handler\r\n */\r\n onSearchChange?: (value: string) => void;\r\n /**\r\n * Main navigation items\r\n */\r\n navigationItems?: ApplicationNavigationItemProps[];\r\n /**\r\n * Navigation sections (alternative to navigationItems for grouped navigation)\r\n */\r\n navigationSections?: ApplicationNavigationSidebarSection[];\r\n /**\r\n * Bottom navigation items (Settings, Support, etc)\r\n */\r\n bottomNavigationItems?: ApplicationNavigationItemProps[];\r\n /**\r\n * Banner configuration\r\n */\r\n banner?: ApplicationNavigationBannerProps;\r\n /**\r\n * User profile configuration\r\n */\r\n userProfile?: ApplicationNavigationUserProfileProps;\r\n /**\r\n * Collapsed state (icon-only mode)\r\n */\r\n collapsed?: boolean;\r\n /**\r\n * Drawer mode (with overlay and close button)\r\n */\r\n drawer?: boolean;\r\n /**\r\n * Drawer open state\r\n */\r\n drawerOpen?: boolean;\r\n /**\r\n * Drawer close handler\r\n */\r\n onDrawerClose?: () => void;\r\n /**\r\n * Show header only (logo and hamburger menu)\r\n */\r\n headerOnly?: boolean;\r\n /**\r\n * Header hamburger click handler\r\n */\r\n onHeaderMenuClick?: () => void;\r\n /**\r\n * Submenu panel items (shown in side panel)\r\n */\r\n submenuPanelItems?: ApplicationNavigationSubmenuItem[];\r\n /**\r\n * Submenu panel title\r\n */\r\n submenuPanelTitle?: string;\r\n /**\r\n * Submenu panel icon\r\n */\r\n submenuPanelIcon?: React.ReactNode;\r\n}\r\n\r\n/**\r\n * ApplicationNavigationSidebar - Full sidebar layout component\r\n */\r\nexport const ApplicationNavigationSidebar: React.FC<ApplicationNavigationSidebarProps> = ({\r\n logo,\r\n showSearch = true,\r\n searchPlaceholder = 'Search',\r\n searchShortcut = '⌘K',\r\n onSearchChange,\r\n navigationItems = [],\r\n navigationSections = [],\r\n bottomNavigationItems = [],\r\n banner,\r\n userProfile,\r\n collapsed = false,\r\n drawer = false,\r\n drawerOpen = false,\r\n onDrawerClose,\r\n headerOnly = false,\r\n onHeaderMenuClick,\r\n submenuPanelItems,\r\n submenuPanelTitle,\r\n submenuPanelIcon,\r\n}) => {\r\n // Header only mode\r\n if (headerOnly) {\r\n return (\r\n <Box\r\n sx={{\r\n display: 'flex',\r\n alignItems: 'center',\r\n justifyContent: 'space-between',\r\n px: '16px',\r\n py: '12px',\r\n bgcolor: tokens.color.base.white,\r\n borderBottom: `1px solid ${tokens.color.gray['200']}`,\r\n }}\r\n >\r\n {/* Logo */}\r\n <Box\r\n onClick={logo?.onClick}\r\n sx={{\r\n display: 'flex',\r\n alignItems: 'center',\r\n gap: '8px',\r\n cursor: logo?.onClick ? 'pointer' : 'default',\r\n }}\r\n >\r\n {logo?.icon && (\r\n <Box sx={{ display: 'flex', alignItems: 'center', fontSize: '24px' }}>\r\n {logo.icon}\r\n </Box>\r\n )}\r\n {logo?.text && (\r\n <Box\r\n sx={{\r\n fontSize: tokens.typography.fontSize['text-lg'],\r\n fontWeight: tokens.typography.fontWeight.semibold,\r\n color: tokens.color.gray['900'],\r\n }}\r\n >\r\n {logo.text}\r\n </Box>\r\n )}\r\n </Box>\r\n\r\n {/* Hamburger menu */}\r\n <MuiIconButton\r\n onClick={onHeaderMenuClick}\r\n sx={{\r\n width: '40px',\r\n height: '40px',\r\n color: tokens.color.gray['700'],\r\n }}\r\n >\r\n <MenuIcon sx={{ fontSize: '24px' }} />\r\n </MuiIconButton>\r\n </Box>\r\n );\r\n }\r\n\r\n // Sidebar content\r\n const sidebarContent = (\r\n <Box\r\n sx={{\r\n width: collapsed ? '80px' : '280px',\r\n height: '100%',\r\n bgcolor: tokens.color.base.white,\r\n borderRight: `1px solid ${tokens.color.gray['200']}`,\r\n display: 'flex',\r\n flexDirection: 'column',\r\n transition: 'width 0.3s ease',\r\n position: 'relative',\r\n }}\r\n >\r\n {/* Close button for drawer mode */}\r\n {drawer && (\r\n <MuiIconButton\r\n onClick={onDrawerClose}\r\n sx={{\r\n position: 'absolute',\r\n top: '12px',\r\n right: '-48px',\r\n width: '40px',\r\n height: '40px',\r\n bgcolor: tokens.color.gray['700'],\r\n color: tokens.color.base.white,\r\n '&:hover': {\r\n bgcolor: tokens.color.gray['800'],\r\n },\r\n }}\r\n >\r\n <CloseIcon sx={{ fontSize: '24px' }} />\r\n </MuiIconButton>\r\n )}\r\n\r\n {/* Logo section */}\r\n {logo && (\r\n <Box\r\n onClick={logo.onClick}\r\n sx={{\r\n px: collapsed ? '16px' : '20px',\r\n py: '20px',\r\n cursor: logo.onClick ? 'pointer' : 'default',\r\n display: 'flex',\r\n alignItems: 'center',\r\n gap: '8px',\r\n }}\r\n >\r\n {logo.icon && (\r\n <Box sx={{ display: 'flex', alignItems: 'center', fontSize: '32px', flexShrink: 0 }}>\r\n {logo.icon}\r\n </Box>\r\n )}\r\n {!collapsed && logo.text && (\r\n <Box\r\n sx={{\r\n fontSize: tokens.typography.fontSize['text-lg'],\r\n fontWeight: tokens.typography.fontWeight.semibold,\r\n color: tokens.color.gray['900'],\r\n }}\r\n >\r\n {logo.text}\r\n </Box>\r\n )}\r\n </Box>\r\n )}\r\n\r\n {/* Search section */}\r\n {showSearch && !collapsed && (\r\n <Box sx={{ px: '16px', mb: '16px' }}>\r\n <ApplicationNavigation\r\n type=\"search\"\r\n search={{\r\n placeholder: searchPlaceholder,\r\n shortcut: searchShortcut,\r\n onChange: onSearchChange,\r\n }}\r\n />\r\n </Box>\r\n )}\r\n\r\n {/* Main navigation items */}\r\n <Box sx={{ flex: 1, overflowY: 'auto', px: '12px' }}>\r\n {/* Render navigation sections if provided */}\r\n {navigationSections.length > 0 ? (\r\n navigationSections.map((section, sectionIndex) => (\r\n <Box key={sectionIndex} sx={{ mb: '16px' }}>\r\n {/* Section header */}\r\n {section.header && !collapsed && (\r\n <Box\r\n sx={{\r\n fontSize: tokens.typography.fontSize['text-xs'],\r\n fontWeight: tokens.typography.fontWeight.semibold,\r\n color: tokens.color.gray['500'],\r\n textTransform: 'uppercase',\r\n letterSpacing: '0.5px',\r\n px: '12px',\r\n mb: '8px',\r\n }}\r\n >\r\n {section.header}\r\n </Box>\r\n )}\r\n\r\n {/* Section items */}\r\n {section.items.map((item, itemIndex) => (\r\n <Box key={itemIndex} sx={{ mb: '4px' }}>\r\n <ApplicationNavigation\r\n type=\"item\"\r\n items={[\r\n {\r\n ...item,\r\n label: collapsed ? undefined : item.label,\r\n },\r\n ]}\r\n />\r\n </Box>\r\n ))}\r\n </Box>\r\n ))\r\n ) : (\r\n /* Render navigation items if sections not provided */\r\n navigationItems.map((item, index) => (\r\n <Box key={index} sx={{ mb: '4px' }}>\r\n <ApplicationNavigation\r\n type=\"item\"\r\n items={[\r\n {\r\n ...item,\r\n label: collapsed ? undefined : item.label,\r\n },\r\n ]}\r\n />\r\n </Box>\r\n ))\r\n )}\r\n\r\n {/* Bottom navigation items with divider */}\r\n {bottomNavigationItems.length > 0 && (\r\n <Box sx={{ mt: 'auto', pt: '16px' }}>\r\n {bottomNavigationItems.map((item, index) => (\r\n <Box key={index} sx={{ mb: '4px' }}>\r\n <ApplicationNavigation\r\n type=\"item\"\r\n items={[\r\n {\r\n ...item,\r\n label: collapsed ? undefined : item.label,\r\n },\r\n ]}\r\n />\r\n </Box>\r\n ))}\r\n </Box>\r\n )}\r\n </Box>\r\n\r\n {/* Banner section */}\r\n {banner && !collapsed && (\r\n <Box sx={{ px: '16px', py: '12px' }}>\r\n <ApplicationNavigation type=\"banner\" banner={banner} />\r\n </Box>\r\n )}\r\n\r\n {/* User profile section */}\r\n {userProfile && (\r\n <Box sx={{ px: collapsed ? '12px' : '16px', py: '12px', borderTop: `1px solid ${tokens.color.gray['200']}` }}>\r\n {collapsed ? (\r\n <Box\r\n onClick={userProfile.onClick}\r\n sx={{\r\n display: 'flex',\r\n justifyContent: 'center',\r\n cursor: 'pointer',\r\n }}\r\n >\r\n <ApplicationNavigation\r\n type=\"userProfile\"\r\n userProfile={{\r\n ...userProfile,\r\n name: '',\r\n email: '',\r\n }}\r\n />\r\n </Box>\r\n ) : (\r\n <ApplicationNavigation type=\"userProfile\" userProfile={userProfile} />\r\n )}\r\n </Box>\r\n )}\r\n </Box>\r\n );\r\n\r\n // Submenu panel (shown next to sidebar)\r\n const submenuPanel = submenuPanelItems && submenuPanelItems.length > 0 && (\r\n <Box\r\n sx={{\r\n width: '280px',\r\n height: '100%',\r\n bgcolor: tokens.color.base.white,\r\n borderRight: `1px solid ${tokens.color.gray['200']}`,\r\n display: 'flex',\r\n flexDirection: 'column',\r\n px: '16px',\r\n py: '20px',\r\n }}\r\n >\r\n {/* Panel title */}\r\n {submenuPanelTitle && (\r\n <Box\r\n sx={{\r\n display: 'flex',\r\n alignItems: 'center',\r\n gap: '8px',\r\n mb: '16px',\r\n }}\r\n >\r\n {submenuPanelIcon && (\r\n <Box sx={{ color: tokens.color.gray['500'], display: 'flex', fontSize: '20px' }}>\r\n {submenuPanelIcon}\r\n </Box>\r\n )}\r\n <Box\r\n sx={{\r\n fontSize: tokens.typography.fontSize['text-md'],\r\n fontWeight: tokens.typography.fontWeight.semibold,\r\n color: tokens.color.gray['900'],\r\n }}\r\n >\r\n {submenuPanelTitle}\r\n </Box>\r\n </Box>\r\n )}\r\n\r\n {/* Panel items */}\r\n <Box sx={{ display: 'flex', flexDirection: 'column', gap: '4px' }}>\r\n {submenuPanelItems.map((item, index) => (\r\n <Box\r\n key={index}\r\n onClick={item.onClick}\r\n sx={{\r\n display: 'flex',\r\n alignItems: 'center',\r\n gap: '12px',\r\n px: '12px',\r\n py: '10px',\r\n borderRadius: `${tokens.borderRadius.md}px`,\r\n cursor: 'pointer',\r\n '&:hover': {\r\n bgcolor: tokens.color.gray['50'],\r\n },\r\n }}\r\n >\r\n {/* Panel item icon */}\r\n {item.icon && (\r\n <Box\r\n sx={{\r\n color: tokens.color.gray['500'],\r\n display: 'flex',\r\n alignItems: 'center',\r\n '& svg': {\r\n fontSize: '18px',\r\n },\r\n }}\r\n >\r\n {item.icon}\r\n </Box>\r\n )}\r\n\r\n {/* Panel item label */}\r\n <Box\r\n sx={{\r\n flex: 1,\r\n fontSize: tokens.typography.fontSize['text-md'],\r\n fontWeight: tokens.typography.fontWeight.regular,\r\n color: tokens.color.gray['700'],\r\n }}\r\n >\r\n {item.label}\r\n </Box>\r\n\r\n {/* Panel item badge */}\r\n {item.badge !== undefined && (\r\n <Box\r\n sx={{\r\n fontSize: tokens.typography.fontSize['text-sm'],\r\n fontWeight: tokens.typography.fontWeight.medium,\r\n color: tokens.color.gray['700'],\r\n }}\r\n >\r\n {item.badge}\r\n </Box>\r\n )}\r\n </Box>\r\n ))}\r\n </Box>\r\n </Box>\r\n );\r\n\r\n // Drawer mode\r\n if (drawer) {\r\n return (\r\n <Drawer\r\n anchor=\"left\"\r\n open={drawerOpen}\r\n onClose={onDrawerClose}\r\n PaperProps={{\r\n sx: {\r\n bgcolor: 'transparent',\r\n boxShadow: 'none',\r\n },\r\n }}\r\n >\r\n <Box sx={{ display: 'flex', height: '100%' }}>\r\n {sidebarContent}\r\n {submenuPanel}\r\n </Box>\r\n </Drawer>\r\n );\r\n }\r\n\r\n // Normal mode\r\n return (\r\n <Box sx={{ display: 'flex', height: '100%' }}>\r\n {sidebarContent}\r\n {submenuPanel}\r\n </Box>\r\n );\r\n};\r\n\r\nexport default ApplicationNavigationSidebar;\r\n","import React from 'react';\r\nimport { Box, IconButton as MuiIconButton } from '@mui/material';\r\nimport tokens from '../../tokens/tokens.json';\r\nimport { Avatar } from '../Avatar';\r\nimport { Button } from '../Button';\r\nimport { Input } from '../Input';\r\nimport { SearchIcon, SettingsOutlinedIcon, NotificationsOutlinedIcon, FlashOnIcon } from '../../theme/icons';\r\n\r\nexport interface ApplicationNavigationTopBarLink {\r\n /**\r\n * Link label\r\n */\r\n label: string;\r\n /**\r\n * Whether the link is active\r\n */\r\n active?: boolean;\r\n /**\r\n * Click handler\r\n */\r\n onClick?: () => void;\r\n}\r\n\r\nexport interface ApplicationNavigationTopBarTab {\r\n /**\r\n * Tab label\r\n */\r\n label: string;\r\n /**\r\n * Whether the tab is active\r\n */\r\n active?: boolean;\r\n /**\r\n * Click handler\r\n */\r\n onClick?: () => void;\r\n}\r\n\r\nexport interface ApplicationNavigationTopBarProps {\r\n /**\r\n * Logo icon element\r\n */\r\n logo?: React.ReactNode;\r\n /**\r\n * Logo text\r\n */\r\n logoText?: string;\r\n /**\r\n * Logo click handler\r\n */\r\n onLogoClick?: () => void;\r\n /**\r\n * Navigation links\r\n */\r\n links?: ApplicationNavigationTopBarLink[];\r\n /**\r\n * Show upgrade button\r\n */\r\n showUpgradeButton?: boolean;\r\n /**\r\n * Upgrade button text\r\n */\r\n upgradeButtonText?: string;\r\n /**\r\n * Upgrade button click handler\r\n */\r\n onUpgradeClick?: () => void;\r\n /**\r\n * Show search icon\r\n */\r\n showSearch?: boolean;\r\n /**\r\n * Search click handler\r\n */\r\n onSearchClick?: () => void;\r\n /**\r\n * Show settings icon\r\n */\r\n showSettings?: boolean;\r\n /**\r\n * Settings click handler\r\n */\r\n onSettingsClick?: () => void;\r\n /**\r\n * Show notifications icon\r\n */\r\n showNotifications?: boolean;\r\n /**\r\n * Notifications click handler\r\n */\r\n onNotificationsClick?: () => void;\r\n /**\r\n * User avatar source\r\n */\r\n userAvatarSrc?: string;\r\n /**\r\n * User avatar click handler\r\n */\r\n onUserAvatarClick?: () => void;\r\n /**\r\n * Secondary navigation tabs\r\n */\r\n tabs?: ApplicationNavigationTopBarTab[];\r\n /**\r\n * Show search input in tabs row\r\n */\r\n showTabsSearch?: boolean;\r\n /**\r\n * Tabs search placeholder\r\n */\r\n tabsSearchPlaceholder?: string;\r\n /**\r\n * Tabs search shortcut\r\n */\r\n tabsSearchShortcut?: string;\r\n /**\r\n * Tabs search change handler\r\n */\r\n onTabsSearchChange?: (value: string) => void;\r\n}\r\n\r\n/**\r\n * ApplicationNavigationTopBar - Horizontal top navigation bar\r\n */\r\nexport const ApplicationNavigationTopBar: React.FC<ApplicationNavigationTopBarProps> = ({\r\n logo,\r\n logoText,\r\n onLogoClick,\r\n links = [],\r\n showUpgradeButton = false,\r\n upgradeButtonText = 'Upgrade now',\r\n onUpgradeClick,\r\n showSearch = false,\r\n onSearchClick,\r\n showSettings = false,\r\n onSettingsClick,\r\n showNotifications = false,\r\n onNotificationsClick,\r\n userAvatarSrc,\r\n onUserAvatarClick,\r\n tabs = [],\r\n showTabsSearch = false,\r\n tabsSearchPlaceholder = 'Search',\r\n tabsSearchShortcut = '⌘K',\r\n onTabsSearchChange,\r\n}) => {\r\n return (\r\n <Box>\r\n {/* Main navigation bar */}\r\n <Box\r\n sx={{\r\n display: 'flex',\r\n alignItems: 'center',\r\n gap: '32px',\r\n px: '24px',\r\n py: '12px',\r\n bgcolor: tokens.color.base.white,\r\n borderBottom: `1px solid ${tokens.color.gray['200']}`,\r\n }}\r\n >\r\n {/* Logo */}\r\n <Box\r\n onClick={onLogoClick}\r\n sx={{\r\n display: 'flex',\r\n alignItems: 'center',\r\n gap: '8px',\r\n cursor: onLogoClick ? 'pointer' : 'default',\r\n }}\r\n >\r\n {logo && (\r\n <Box sx={{ display: 'flex', alignItems: 'center', fontSize: '24px' }}>\r\n {logo}\r\n </Box>\r\n )}\r\n {logoText && (\r\n <Box\r\n sx={{\r\n fontSize: tokens.typography.fontSize['text-lg'],\r\n fontWeight: tokens.typography.fontWeight.semibold,\r\n color: tokens.color.gray['900'],\r\n }}\r\n >\r\n {logoText}\r\n </Box>\r\n )}\r\n </Box>\r\n\r\n {/* Navigation links */}\r\n <Box sx={{ display: 'flex', alignItems: 'center', gap: '4px', flex: 1 }}>\r\n {links.map((link, index) => (\r\n <Box\r\n key={index}\r\n onClick={link.onClick}\r\n sx={{\r\n px: '12px',\r\n py: '8px',\r\n fontSize: tokens.typography.fontSize['text-md'],\r\n fontWeight: link.active ? tokens.typography.fontWeight.semibold : tokens.typography.fontWeight.medium,\r\n color: link.active ? tokens.color.gray['900'] : tokens.color.gray['600'],\r\n cursor: 'pointer',\r\n borderRadius: `${tokens.borderRadius.md}px`,\r\n '&:hover': {\r\n bgcolor: tokens.color.gray['50'],\r\n },\r\n }}\r\n >\r\n {link.label}\r\n </Box>\r\n ))}\r\n </Box>\r\n\r\n {/* Right side actions */}\r\n <Box sx={{ display: 'flex', alignItems: 'center', gap: '12px' }}>\r\n {/* Upgrade button */}\r\n {showUpgradeButton && (\r\n <Button\r\n variant=\"outlined\"\r\n startIcon={<FlashOnIcon sx={{ fontSize: '18px' }} />}\r\n onClick={onUpgradeClick}\r\n sx={{\r\n textTransform: 'none',\r\n fontSize: tokens.typography.fontSize['text-sm'],\r\n fontWeight: tokens.typography.fontWeight.semibold,\r\n borderColor: tokens.color.gray['300'],\r\n color: tokens.color.gray['700'],\r\n '&:hover': {\r\n borderColor: tokens.color.gray['400'],\r\n bgcolor: tokens.color.gray['50'],\r\n },\r\n }}\r\n >\r\n {upgradeButtonText}\r\n </Button>\r\n )}\r\n\r\n {/* Search icon */}\r\n {showSearch && (\r\n <MuiIconButton\r\n onClick={onSearchClick}\r\n sx={{\r\n width: '40px',\r\n height: '40px',\r\n color: tokens.color.gray['500'],\r\n '&:hover': {\r\n bgcolor: tokens.color.gray['50'],\r\n },\r\n }}\r\n >\r\n <SearchIcon sx={{ fontSize: '20px' }} />\r\n </MuiIconButton>\r\n )}\r\n\r\n {/* Settings icon */}\r\n {showSettings && (\r\n <MuiIconButton\r\n onClick={onSettingsClick}\r\n sx={{\r\n width: '40px',\r\n height: '40px',\r\n color: tokens.color.gray['500'],\r\n '&:hover': {\r\n bgcolor: tokens.color.gray['50'],\r\n },\r\n }}\r\n >\r\n <SettingsOutlinedIcon sx={{ fontSize: '20px' }} />\r\n </MuiIconButton>\r\n )}\r\n\r\n {/* Notifications icon */}\r\n {showNotifications && (\r\n <MuiIconButton\r\n onClick={onNotificationsClick}\r\n sx={{\r\n width: '40px',\r\n height: '40px',\r\n color: tokens.color.gray['500'],\r\n '&:hover': {\r\n bgcolor: tokens.color.gray['50'],\r\n },\r\n }}\r\n >\r\n <NotificationsOutlinedIcon sx={{ fontSize: '20px' }} />\r\n </MuiIconButton>\r\n )}\r\n\r\n {/* User avatar */}\r\n {userAvatarSrc && (\r\n <Box\r\n onClick={onUserAvatarClick}\r\n sx={{\r\n cursor: onUserAvatarClick ? 'pointer' : 'default',\r\n }}\r\n >\r\n <Avatar\r\n size=\"sm\"\r\n src={userAvatarSrc}\r\n sx={{ width: 40, height: 40 }}\r\n />\r\n </Box>\r\n )}\r\n </Box>\r\n </Box>\r\n\r\n {/* Secondary tabs navigation */}\r\n {tabs.length > 0 && (\r\n <Box\r\n sx={{\r\n display: 'flex',\r\n alignItems: 'center',\r\n gap: '16px',\r\n px: '24px',\r\n py: '12px',\r\n bgcolor: tokens.color.base.white,\r\n borderBottom: `1px solid ${tokens.color.gray['200']}`,\r\n }}\r\n >\r\n {/* Tabs */}\r\n <Box sx={{ display: 'flex', alignItems: 'center', gap: '4px', flex: 1 }}>\r\n {tabs.map((tab, index) => (\r\n <Box\r\n key={index}\r\n onClick={tab.onClick}\r\n sx={{\r\n px: '12px',\r\n py: '8px',\r\n fontSize: tokens.typography.fontSize['text-sm'],\r\n fontWeight: tab.active ? tokens.typography.fontWeight.semibold : tokens.typography.fontWeight.medium,\r\n color: tab.active ? tokens.color.gray['900'] : tokens.color.gray['600'],\r\n cursor: 'pointer',\r\n borderRadius: `${tokens.borderRadius.md}px`,\r\n borderBottom: tab.active ? `2px solid ${tokens.color.primary['700']}` : 'none',\r\n '&:hover': {\r\n bgcolor: tokens.color.gray['50'],\r\n },\r\n }}\r\n >\r\n {tab.label}\r\n </Box>\r\n ))}\r\n </Box>\r\n\r\n {/* Search input in tabs row */}\r\n {showTabsSearch && (\r\n <Box sx={{ width: '280px', position: 'relative' }}>\r\n <Input\r\n placeholder={tabsSearchPlaceholder}\r\n onChange={(e) => onTabsSearchChange?.(e.target.value)}\r\n sx={{\r\n '& input': {\r\n pr: '40px',\r\n },\r\n }}\r\n fullWidth\r\n />\r\n <Box\r\n sx={{\r\n position: 'absolute',\r\n right: '12px',\r\n top: '50%',\r\n transform: 'translateY(-50%)',\r\n display: 'flex',\r\n alignItems: 'center',\r\n gap: '4px',\r\n pointerEvents: 'none',\r\n }}\r\n >\r\n <Box\r\n sx={{\r\n fontSize: tokens.typography.fontSize['text-xs'],\r\n fontWeight: tokens.typography.fontWeight.medium,\r\n color: tokens.color.gray['500'],\r\n px: '6px',\r\n py: '2px',\r\n border: `1px solid ${tokens.color.gray['300']}`,\r\n borderRadius: `${tokens.borderRadius.sm}px`,\r\n bgcolor: tokens.color.gray['50'],\r\n }}\r\n >\r\n {tabsSearchShortcut}\r\n </Box>\r\n </Box>\r\n </Box>\r\n )}\r\n </Box>\r\n )}\r\n </Box>\r\n );\r\n};\r\n\r\nexport default ApplicationNavigationTopBar;\r\n","import React, { useRef, useState } from 'react';\r\nimport { Box, styled, LinearProgress, IconButton } from '@mui/material';\r\nimport { CloudUploadOutlinedIcon, CheckCircleOutlinedIcon, CancelOutlinedIcon, DeleteOutlineIcon, InsertDriveFileOutlinedIcon } from '../../theme/icons';\r\nimport tokens from '../../tokens/tokens.json';\r\n\r\nexport interface FileUploadProps {\r\n /**\r\n * Callback when files are selected or dropped\r\n */\r\n onFilesSelected?: (files: FileList) => void;\r\n /**\r\n * Accepted file types\r\n */\r\n accept?: string;\r\n /**\r\n * Allow multiple file selection\r\n */\r\n multiple?: boolean;\r\n /**\r\n * Disabled state\r\n */\r\n disabled?: boolean;\r\n /**\r\n * Maximum file size in bytes\r\n */\r\n maxSize?: number;\r\n /**\r\n * Custom helper text\r\n */\r\n helperText?: string;\r\n /**\r\n * Custom className\r\n */\r\n className?: string;\r\n}\r\n\r\nconst FileUploadRoot = styled(Box)<{ isDragActive: boolean; disabled?: boolean }>(\r\n ({ isDragActive, disabled }) => ({\r\n display: 'flex',\r\n flexDirection: 'column',\r\n alignItems: 'center',\r\n padding: '16px 24px',\r\n width: '100%',\r\n maxWidth: '512px',\r\n borderRadius: tokens.borderRadius.xl,\r\n border: isDragActive ? `2px solid ${tokens.color.primary[600]}` : `1px solid ${disabled ? tokens.color.gray[200] : tokens.color.gray[200]}`,\r\n backgroundColor: disabled ? tokens.color.gray[50] : tokens.color.base.white,\r\n cursor: disabled ? 'not-allowed' : 'pointer',\r\n transition: 'all 0.2s ease',\r\n position: 'relative',\r\n\r\n '&:hover': disabled\r\n ? {}\r\n : {\r\n borderColor: tokens.color.primary[300],\r\n },\r\n })\r\n);\r\n\r\nconst IconWrapper = styled(Box)({\r\n display: 'flex',\r\n alignItems: 'center',\r\n justifyContent: 'center',\r\n width: '40px',\r\n height: '40px',\r\n backgroundColor: tokens.color.base.white,\r\n border: `1px solid ${tokens.color.gray[300]}`,\r\n borderRadius: tokens.borderRadius.md,\r\n boxShadow: `${tokens.shadows.xs}, ${tokens.shadows['skeumorphic-inner']}, ${tokens.shadows['skeumorphic-inner-border']}`,\r\n marginBottom: '12px',\r\n\r\n '& svg': {\r\n width: '20px',\r\n height: '20px',\r\n color: tokens.color.gray[700],\r\n },\r\n});\r\n\r\nconst Content = styled(Box)({\r\n display: 'flex',\r\n flexDirection: 'column',\r\n alignItems: 'center',\r\n gap: '4px',\r\n width: '100%',\r\n});\r\n\r\nconst ActionText = styled(Box)({\r\n display: 'flex',\r\n alignItems: 'center',\r\n gap: '4px',\r\n justifyContent: 'center',\r\n});\r\n\r\nconst UploadLink = styled('span')<{ disabled?: boolean }>(({ disabled }) => ({\r\n fontFamily: tokens.typography.fontFamily.body,\r\n fontSize: tokens.typography.fontSize['text-sm'],\r\n fontWeight: tokens.typography.fontWeight.semibold,\r\n lineHeight: tokens.typography.lineHeight['text-sm'],\r\n color: disabled ? tokens.color.gray[400] : tokens.color.primary[700],\r\n cursor: disabled ? 'not-allowed' : 'pointer',\r\n}));\r\n\r\nconst RegularText = styled('span')({\r\n fontFamily: tokens.typography.fontFamily.body,\r\n fontSize: tokens.typography.fontSize['text-sm'],\r\n fontWeight: tokens.typography.fontWeight.regular,\r\n lineHeight: tokens.typography.lineHeight['text-sm'],\r\n color: tokens.color.gray[600],\r\n});\r\n\r\nconst HelperText = styled('p')({\r\n fontFamily: tokens.typography.fontFamily.body,\r\n fontSize: tokens.typography.fontSize['text-xs'],\r\n fontWeight: tokens.typography.fontWeight.regular,\r\n lineHeight: tokens.typography.lineHeight['text-xs'],\r\n color: tokens.color.gray[600],\r\n margin: 0,\r\n textAlign: 'center',\r\n whiteSpace: 'pre-wrap',\r\n});\r\n\r\nconst HiddenInput = styled('input')({\r\n display: 'none',\r\n});\r\n\r\nexport const FileUpload: React.FC<FileUploadProps> = ({\r\n onFilesSelected,\r\n accept,\r\n multiple = false,\r\n disabled = false,\r\n maxSize,\r\n helperText = 'SVG, PNG, JPG or GIF (max. 800x400px)',\r\n className,\r\n}) => {\r\n const [isDragActive, setIsDragActive] = useState(false);\r\n const inputRef = useRef<HTMLInputElement>(null);\r\n\r\n const handleDrag = (e: React.DragEvent) => {\r\n e.preventDefault();\r\n e.stopPropagation();\r\n\r\n if (disabled) return;\r\n\r\n if (e.type === 'dragenter' || e.type === 'dragover') {\r\n setIsDragActive(true);\r\n } else if (e.type === 'dragleave') {\r\n setIsDragActive(false);\r\n }\r\n };\r\n\r\n const handleDrop = (e: React.DragEvent) => {\r\n e.preventDefault();\r\n e.stopPropagation();\r\n setIsDragActive(false);\r\n\r\n if (disabled) return;\r\n\r\n const files = e.dataTransfer.files;\r\n if (files && files.length > 0) {\r\n handleFiles(files);\r\n }\r\n };\r\n\r\n const handleChange = (e: React.ChangeEvent<HTMLInputElement>) => {\r\n if (disabled) return;\r\n\r\n const files = e.target.files;\r\n if (files && files.length > 0) {\r\n handleFiles(files);\r\n }\r\n };\r\n\r\n const handleFiles = (files: FileList) => {\r\n // Validate file size if maxSize is specified\r\n if (maxSize) {\r\n const validFiles = Array.from(files).filter(file => file.size <= maxSize);\r\n if (validFiles.length !== files.length) {\r\n console.warn('Some files exceed the maximum size limit');\r\n }\r\n }\r\n\r\n if (onFilesSelected) {\r\n onFilesSelected(files);\r\n }\r\n };\r\n\r\n const handleClick = () => {\r\n if (!disabled && inputRef.current) {\r\n inputRef.current.click();\r\n }\r\n };\r\n\r\n return (\r\n <FileUploadRoot\r\n className={className}\r\n isDragActive={isDragActive}\r\n disabled={disabled}\r\n onClick={handleClick}\r\n onDragEnter={handleDrag}\r\n onDragLeave={handleDrag}\r\n onDragOver={handleDrag}\r\n onDrop={handleDrop}\r\n >\r\n <HiddenInput\r\n ref={inputRef}\r\n type=\"file\"\r\n accept={accept}\r\n multiple={multiple}\r\n onChange={handleChange}\r\n disabled={disabled}\r\n />\r\n\r\n <IconWrapper>\r\n <CloudUploadOutlinedIcon />\r\n </IconWrapper>\r\n\r\n <Content>\r\n <ActionText>\r\n <UploadLink disabled={disabled}>Click to upload</UploadLink>\r\n <RegularText>or drag and drop</RegularText>\r\n </ActionText>\r\n\r\n <HelperText>{helperText}</HelperText>\r\n </Content>\r\n </FileUploadRoot>\r\n );\r\n};\r\n\r\n// FileUploadItem Component\r\nexport type FileUploadItemStatus = 'uploading' | 'complete' | 'error';\r\nexport type FileUploadItemVariant = 'progress-bar' | 'progress-fill';\r\n\r\nexport interface FileUploadItemProps {\r\n /**\r\n * File name\r\n */\r\n fileName: string;\r\n /**\r\n * File size in bytes\r\n */\r\n fileSize: number;\r\n /**\r\n * Upload progress (0-100)\r\n */\r\n progress?: number;\r\n /**\r\n * Upload status\r\n */\r\n status: FileUploadItemStatus;\r\n /**\r\n * Display variant\r\n */\r\n variant?: FileUploadItemVariant;\r\n /**\r\n * Show file type icon\r\n */\r\n showIcon?: boolean;\r\n /**\r\n * File type for icon display (e.g., 'PDF', 'JPG')\r\n */\r\n fileType?: string;\r\n /**\r\n * Callback when delete button is clicked\r\n */\r\n onDelete?: () => void;\r\n /**\r\n * Callback when try again button is clicked\r\n */\r\n onRetry?: () => void;\r\n}\r\n\r\nconst FileUploadItemRoot = styled(Box)<{ status: string; variant: string }>(({ status, variant }) => ({\r\n display: 'flex',\r\n alignItems: 'flex-start',\r\n padding: '16px',\r\n width: '100%',\r\n maxWidth: '512px',\r\n backgroundColor: tokens.color.base.white,\r\n border: status === 'error' ? `2px solid ${tokens.color.error[600]}` : `1px solid ${tokens.color.gray[200]}`,\r\n borderRadius: variant === 'progress-fill' ? '12px' : tokens.borderRadius.xl,\r\n gap: '12px',\r\n position: 'relative',\r\n overflow: variant === 'progress-fill' ? 'hidden' : 'visible',\r\n}));\r\n\r\nconst FileIconWrapper = styled(Box)({\r\n position: 'relative',\r\n width: '40px',\r\n height: '40px',\r\n flexShrink: 0,\r\n});\r\n\r\nconst FileTypeIcon = styled(Box)<{ fileType: string }>(({ fileType }) => {\r\n const getBackgroundColor = () => {\r\n const type = fileType?.toLowerCase();\r\n if (type === 'pdf') return tokens.color.error[600];\r\n if (type === 'jpg' || type === 'jpeg' || type === 'png') return tokens.color.primary[600];\r\n if (type === 'doc' || type === 'docx') return tokens.color.primary[600];\r\n return tokens.color.gray[700];\r\n };\r\n\r\n return {\r\n position: 'absolute',\r\n bottom: '6px',\r\n left: '1px',\r\n right: '13px',\r\n height: '11px',\r\n backgroundColor: getBackgroundColor(),\r\n borderRadius: '2px',\r\n display: 'flex',\r\n alignItems: 'center',\r\n justifyContent: 'center',\r\n fontSize: '9px',\r\n fontWeight: 700,\r\n color: tokens.color.base.white,\r\n fontFamily: 'Inter, sans-serif',\r\n padding: '2px 3px',\r\n };\r\n});\r\n\r\nconst SolidFileTypeIcon = styled(Box)<{ fileType: string }>(({ fileType }) => {\r\n const getBackgroundColor = () => {\r\n const type = fileType?.toLowerCase();\r\n if (type === 'pdf') return tokens.color.error[600];\r\n if (type === 'mp4' || type === 'mov' || type === 'avi') return '#155eef'; // Blue for videos\r\n if (type === 'fig' || type === 'figma') return tokens.color.primary[600];\r\n if (type === 'jpg' || type === 'jpeg' || type === 'png' || type === 'gif') return tokens.color.primary[600];\r\n if (type === 'doc' || type === 'docx') return tokens.color.primary[600];\r\n return tokens.color.gray[700];\r\n };\r\n\r\n return {\r\n width: '40px',\r\n height: '40px',\r\n backgroundColor: getBackgroundColor(),\r\n borderRadius: '6px',\r\n display: 'flex',\r\n alignItems: 'center',\r\n justifyContent: 'center',\r\n fontSize: '9px',\r\n fontWeight: 700,\r\n color: tokens.color.base.white,\r\n fontFamily: 'Inter, sans-serif',\r\n flexShrink: 0,\r\n };\r\n});\r\n\r\nconst SimpleFileIcon = styled(Box)<{ status: string }>(({ status }) => ({\r\n color: status === 'error' ? tokens.color.error[600] : tokens.color.gray[400],\r\n display: 'flex',\r\n alignItems: 'center',\r\n justifyContent: 'center',\r\n '& svg': {\r\n width: '16.667px',\r\n height: '16.667px',\r\n },\r\n}));\r\n\r\nconst FileContent = styled(Box)({\r\n display: 'flex',\r\n flexDirection: 'column',\r\n flex: 1,\r\n gap: '4px',\r\n minWidth: 0,\r\n});\r\n\r\nconst FileName = styled('p')({\r\n fontFamily: tokens.typography.fontFamily.body,\r\n fontSize: tokens.typography.fontSize['text-sm'],\r\n fontWeight: tokens.typography.fontWeight.medium,\r\n lineHeight: tokens.typography.lineHeight['text-sm'],\r\n color: tokens.color.gray[700],\r\n margin: 0,\r\n overflow: 'hidden',\r\n textOverflow: 'ellipsis',\r\n whiteSpace: 'nowrap',\r\n});\r\n\r\nconst FileInfo = styled(Box)({\r\n display: 'flex',\r\n alignItems: 'center',\r\n gap: '8px',\r\n});\r\n\r\nconst InfoText = styled('span')({\r\n fontFamily: tokens.typography.fontFamily.body,\r\n fontSize: tokens.typography.fontSize['text-sm'],\r\n fontWeight: tokens.typography.fontWeight.regular,\r\n lineHeight: tokens.typography.lineHeight['text-sm'],\r\n color: tokens.color.gray[600],\r\n});\r\n\r\nconst StatusText = styled('span')<{ status: string }>(({ status }) => ({\r\n fontFamily: tokens.typography.fontFamily.body,\r\n fontSize: tokens.typography.fontSize['text-sm'],\r\n fontWeight: tokens.typography.fontWeight.medium,\r\n lineHeight: tokens.typography.lineHeight['text-sm'],\r\n color:\r\n status === 'complete'\r\n ? tokens.color.success[600]\r\n : status === 'error'\r\n ? tokens.color.error[600]\r\n : tokens.color.gray[500],\r\n display: 'flex',\r\n alignItems: 'center',\r\n gap: '4px',\r\n '& svg': {\r\n width: '16px',\r\n height: '16px',\r\n },\r\n}));\r\n\r\nconst Divider = styled(Box)({\r\n width: '1px',\r\n height: '12px',\r\n backgroundColor: tokens.color.gray[300],\r\n});\r\n\r\nconst RetryButton = styled('button')({\r\n fontFamily: tokens.typography.fontFamily.body,\r\n fontSize: tokens.typography.fontSize['text-sm'],\r\n fontWeight: tokens.typography.fontWeight.semibold,\r\n lineHeight: tokens.typography.lineHeight['text-sm'],\r\n color: tokens.color.error[600],\r\n backgroundColor: 'transparent',\r\n border: 'none',\r\n padding: 0,\r\n cursor: 'pointer',\r\n '&:hover': {\r\n opacity: 0.8,\r\n },\r\n});\r\n\r\nconst DeleteButton = styled(IconButton)({\r\n position: 'absolute',\r\n top: '7px',\r\n right: '7px',\r\n padding: '6px',\r\n color: tokens.color.gray[400],\r\n '&:hover': {\r\n backgroundColor: tokens.color.gray[50],\r\n },\r\n '& svg': {\r\n width: '16px',\r\n height: '16px',\r\n },\r\n});\r\n\r\nconst ProgressBarWrapper = styled(Box)({\r\n display: 'flex',\r\n alignItems: 'center',\r\n gap: '12px',\r\n width: '100%',\r\n});\r\n\r\nconst StyledLinearProgress = styled(LinearProgress)({\r\n flex: 1,\r\n height: '8px',\r\n borderRadius: tokens.borderRadius.full,\r\n backgroundColor: tokens.color.gray[200],\r\n '& .MuiLinearProgress-bar': {\r\n backgroundColor: tokens.color.primary[600],\r\n borderRadius: tokens.borderRadius.full,\r\n },\r\n});\r\n\r\nconst PercentageText = styled('span')({\r\n fontFamily: tokens.typography.fontFamily.body,\r\n fontSize: tokens.typography.fontSize['text-sm'],\r\n fontWeight: tokens.typography.fontWeight.medium,\r\n lineHeight: tokens.typography.lineHeight['text-sm'],\r\n color: tokens.color.gray[700],\r\n minWidth: '38px',\r\n});\r\n\r\nconst ProgressFill = styled(Box)<{ progress: number }>(({ progress }) => ({\r\n position: 'absolute',\r\n top: '-1px',\r\n left: '-1px',\r\n bottom: '-1px',\r\n right: `${100 - progress}%`,\r\n backgroundColor: tokens.color.gray[50],\r\n zIndex: 0,\r\n pointerEvents: 'none',\r\n}));\r\n\r\nconst formatFileSize = (bytes: number): string => {\r\n if (bytes === 0) return '0 KB';\r\n const k = 1024;\r\n const sizes = ['Bytes', 'KB', 'MB', 'GB'];\r\n const i = Math.floor(Math.log(bytes) / Math.log(k));\r\n return Math.round(bytes / Math.pow(k, i)) + ' ' + sizes[i];\r\n};\r\n\r\nexport const FileUploadItem: React.FC<FileUploadItemProps> = ({\r\n fileName,\r\n fileSize,\r\n progress = 0,\r\n status,\r\n variant = 'progress-bar',\r\n showIcon = true,\r\n fileType,\r\n onDelete,\r\n onRetry,\r\n}) => {\r\n const isProgressBar = variant === 'progress-bar';\r\n const isProgressFill = variant === 'progress-fill';\r\n const hasFileType = Boolean(fileType);\r\n\r\n return (\r\n <FileUploadItemRoot status={status} variant={variant}>\r\n {isProgressFill && status === 'uploading' && (\r\n <ProgressFill progress={progress} />\r\n )}\r\n\r\n {showIcon && hasFileType && isProgressBar && (\r\n <FileIconWrapper>\r\n <svg width=\"40\" height=\"40\" viewBox=\"0 0 40 40\" fill=\"none\">\r\n <path\r\n d=\"M23 2H9C7.89543 2 7 2.89543 7 4V36C7 37.1046 7.89543 38 9 38H31C32.1046 38 33 37.1046 33 36V12L23 2Z\"\r\n fill={tokens.color.gray[100]}\r\n stroke={tokens.color.gray[300]}\r\n />\r\n <path d=\"M23 2V12H33\" fill=\"none\" stroke={tokens.color.gray[300]} />\r\n </svg>\r\n <FileTypeIcon fileType={fileType!}>{fileType!.toUpperCase()}</FileTypeIcon>\r\n </FileIconWrapper>\r\n )}\r\n\r\n {showIcon && hasFileType && isProgressFill && (\r\n <SolidFileTypeIcon fileType={fileType!} sx={{ zIndex: 1 }}>\r\n {fileType!.toUpperCase()}\r\n </SolidFileTypeIcon>\r\n )}\r\n\r\n <FileContent sx={{ zIndex: 1 }}>\r\n <FileName>{fileName}</FileName>\r\n\r\n {isProgressBar && (\r\n <FileInfo>\r\n <InfoText>\r\n {status === 'uploading'\r\n ? `${formatFileSize(fileSize * (progress / 100))} of ${formatFileSize(fileSize)}`\r\n : `${formatFileSize(fileSize)}${status === 'complete' ? ' of ' + formatFileSize(fileSize) : ''}`}\r\n </InfoText>\r\n <Divider />\r\n <StatusText status={status}>\r\n {status === 'complete' && <CheckCircleOutlinedIcon />}\r\n {status === 'uploading' && <CloudUploadOutlinedIcon />}\r\n {status === 'error' && <CancelOutlinedIcon />}\r\n {status === 'complete' ? 'Complete' : status === 'error' ? 'Failed' : 'Uploading...'}\r\n </StatusText>\r\n </FileInfo>\r\n )}\r\n\r\n {isProgressFill && status !== 'error' && (\r\n <FileInfo>\r\n <InfoText>{formatFileSize(fileSize)}</InfoText>\r\n <Divider />\r\n <StatusText status={status}>\r\n {status === 'uploading' && <CloudUploadOutlinedIcon />}\r\n <InfoText>{progress}%</InfoText>\r\n {status === 'complete' && <CheckCircleOutlinedIcon />}\r\n </StatusText>\r\n </FileInfo>\r\n )}\r\n\r\n {isProgressFill && status === 'error' && (\r\n <InfoText>Upload failed, please try again.</InfoText>\r\n )}\r\n\r\n {isProgressBar && status === 'uploading' && (\r\n <ProgressBarWrapper>\r\n <StyledLinearProgress variant=\"determinate\" value={progress} />\r\n <PercentageText>{progress}%</PercentageText>\r\n </ProgressBarWrapper>\r\n )}\r\n\r\n {isProgressBar && status === 'complete' && (\r\n <ProgressBarWrapper>\r\n <StyledLinearProgress variant=\"determinate\" value={100} />\r\n <PercentageText>100%</PercentageText>\r\n </ProgressBarWrapper>\r\n )}\r\n\r\n {status === 'error' && onRetry && (\r\n <RetryButton onClick={onRetry}>Try again</RetryButton>\r\n )}\r\n </FileContent>\r\n\r\n {showIcon && !hasFileType && (\r\n <SimpleFileIcon status={status}>\r\n <InsertDriveFileOutlinedIcon />\r\n </SimpleFileIcon>\r\n )}\r\n\r\n {onDelete && (\r\n <DeleteButton onClick={onDelete} size=\"small\">\r\n <DeleteOutlineIcon />\r\n </DeleteButton>\r\n )}\r\n </FileUploadItemRoot>\r\n );\r\n};\r\n","import React from 'react';\r\nimport { Box, styled, InputBase, Tabs, Tab, useMediaQuery, useTheme } from '@mui/material';\r\nimport { SearchIcon, MoreVertIcon, KeyboardArrowDownIcon } from '../../theme/icons';\r\nimport tokens from '../../tokens/tokens.json';\r\n\r\nexport interface SectionHeaderTab {\r\n label: string;\r\n value: string;\r\n badge?: number;\r\n}\r\n\r\nexport type SectionHeaderType = 'Buttons' | 'Search' | 'Button group';\r\n\r\nexport interface SectionHeaderProps {\r\n title?: string;\r\n supportingText?: boolean;\r\n type?: SectionHeaderType;\r\n breakpoint?: 'Desktop' | 'Mobile';\r\n actions?: boolean;\r\n buttonGroupItems?: string[];\r\n searchPlaceholder?: string;\r\n searchShortcut?: string;\r\n dropdownIcon?: boolean;\r\n tabs?: boolean;\r\n tabsConfig?: SectionHeaderTab[];\r\n activeTab?: string;\r\n onTabChange?: (value: string) => void;\r\n divider?: boolean;\r\n onSearchChange?: (value: string) => void;\r\n onDropdownClick?: () => void;\r\n onButtonGroupClick?: (index: number) => void;\r\n}\r\n\r\nconst Root = styled(Box)({\r\n display: 'flex',\r\n flexDirection: 'column',\r\n gap: '20px',\r\n alignItems: 'flex-start',\r\n position: 'relative',\r\n isolation: 'isolate',\r\n});\r\n\r\nconst HeaderContent = styled(Box)<{ isMobile?: boolean }>(({ isMobile }) => ({\r\n display: 'flex',\r\n flexDirection: isMobile ? 'column' : 'row',\r\n gap: '16px',\r\n alignItems: 'flex-start',\r\n width: '100%',\r\n}));\r\n\r\nconst TextContent = styled(Box)<{ isMobile?: boolean }>(({ isMobile }) => ({\r\n display: 'flex',\r\n flexDirection: 'column',\r\n gap: '2px',\r\n alignItems: 'flex-start',\r\n flex: isMobile ? '0 0 auto' : '1 0 0',\r\n justifyContent: 'center',\r\n minHeight: isMobile ? 'auto' : '1px',\r\n minWidth: isMobile ? 'auto' : '1px',\r\n width: '100%',\r\n}));\r\n\r\nconst Title = styled('h2')<{ isMobile?: boolean }>(({ isMobile }) => ({\r\n fontFamily: tokens.typography.fontFamily.body,\r\n fontSize: tokens.typography.fontSize['text-lg'],\r\n fontWeight: tokens.typography.fontWeight.semibold,\r\n lineHeight: tokens.typography.lineHeight['text-lg'],\r\n color: tokens.color.gray[900],\r\n margin: 0,\r\n width: '100%',\r\n whiteSpace: isMobile ? 'normal' : 'pre-wrap',\r\n}));\r\n\r\nconst SupportingText = styled('p')<{ isMobile?: boolean }>(({ isMobile }) => ({\r\n fontFamily: tokens.typography.fontFamily.body,\r\n fontSize: tokens.typography.fontSize['text-sm'],\r\n fontWeight: tokens.typography.fontWeight.regular,\r\n lineHeight: tokens.typography.lineHeight['text-sm'],\r\n color: tokens.color.gray[600],\r\n margin: 0,\r\n width: '100%',\r\n overflow: isMobile ? 'visible' : 'hidden',\r\n textOverflow: isMobile ? 'clip' : 'ellipsis',\r\n whiteSpace: isMobile ? 'normal' : 'nowrap',\r\n}));\r\n\r\nconst ActionsWrapper = styled(Box)({\r\n display: 'flex',\r\n gap: '12px',\r\n alignItems: 'center',\r\n});\r\n\r\nconst TertiaryButton = styled('button')(() => ({\r\n display: 'flex',\r\n gap: '4px',\r\n alignItems: 'center',\r\n justifyContent: 'center',\r\n padding: '10px 14px',\r\n overflow: 'hidden',\r\n borderRadius: `${tokens.borderRadius.md}px`,\r\n border: 'none',\r\n backgroundColor: 'transparent',\r\n fontFamily: tokens.typography.fontFamily.body,\r\n fontSize: tokens.typography.fontSize['text-sm'],\r\n fontWeight: tokens.typography.fontWeight.semibold,\r\n lineHeight: tokens.typography.lineHeight['text-sm'],\r\n color: tokens.color.gray[600],\r\n cursor: 'pointer',\r\n transition: 'all 0.2s',\r\n '&:hover': {\r\n backgroundColor: tokens.color.gray[50],\r\n },\r\n}));\r\n\r\nconst SecondaryButton = styled('button')(() => ({\r\n display: 'flex',\r\n gap: '4px',\r\n alignItems: 'center',\r\n justifyContent: 'center',\r\n padding: '10px 14px',\r\n overflow: 'hidden',\r\n borderRadius: `${tokens.borderRadius.md}px`,\r\n backgroundColor: tokens.color.base.white,\r\n border: `1px solid ${tokens.color.gray[300]}`,\r\n boxShadow: tokens.shadows.xs,\r\n fontFamily: tokens.typography.fontFamily.body,\r\n fontSize: tokens.typography.fontSize['text-sm'],\r\n fontWeight: tokens.typography.fontWeight.semibold,\r\n lineHeight: tokens.typography.lineHeight['text-sm'],\r\n color: tokens.color.gray[700],\r\n cursor: 'pointer',\r\n position: 'relative',\r\n transition: 'all 0.2s',\r\n '&:hover': {\r\n backgroundColor: tokens.color.gray[50],\r\n },\r\n '&::after': {\r\n content: '\"\"',\r\n position: 'absolute',\r\n inset: 0,\r\n pointerEvents: 'none',\r\n boxShadow: `inset 0px 0px 0px 1px rgba(10,13,18,0), inset 0px -2px 0px 0px rgba(10,13,18,0)`,\r\n },\r\n}));\r\n\r\nconst PrimaryButton = styled('button')(() => ({\r\n display: 'flex',\r\n gap: '4px',\r\n alignItems: 'center',\r\n justifyContent: 'center',\r\n padding: '10px 14px',\r\n overflow: 'hidden',\r\n borderRadius: `${tokens.borderRadius.md}px`,\r\n backgroundColor: tokens.color.primary[600],\r\n border: '2px solid transparent',\r\n boxShadow: tokens.shadows.xs,\r\n fontFamily: tokens.typography.fontFamily.body,\r\n fontSize: tokens.typography.fontSize['text-sm'],\r\n fontWeight: tokens.typography.fontWeight.semibold,\r\n lineHeight: tokens.typography.lineHeight['text-sm'],\r\n color: tokens.color.base.white,\r\n cursor: 'pointer',\r\n position: 'relative',\r\n transition: 'all 0.2s',\r\n '&:hover': {\r\n backgroundColor: tokens.color.primary[700],\r\n },\r\n '&::after': {\r\n content: '\"\"',\r\n position: 'absolute',\r\n inset: 0,\r\n pointerEvents: 'none',\r\n boxShadow: `inset 0px 0px 0px 1px rgba(10,13,18,0), inset 0px -2px 0px 0px rgba(10,13,18,0)`,\r\n },\r\n}));\r\n\r\nconst SearchWrapper = styled(Box)<{ isMobile?: boolean }>(({ isMobile }) => ({\r\n display: 'flex',\r\n flexDirection: 'column',\r\n gap: '6px',\r\n flex: isMobile ? '0 0 auto' : '1 0 0',\r\n maxWidth: isMobile ? '100%' : '320px',\r\n minHeight: isMobile ? 'auto' : '1px',\r\n minWidth: isMobile ? 'auto' : '1px',\r\n width: isMobile ? '100%' : 'auto',\r\n}));\r\n\r\nconst SearchInput = styled(Box)({\r\n display: 'flex',\r\n gap: '8px',\r\n alignItems: 'center',\r\n padding: '8px 12px',\r\n backgroundColor: tokens.color.base.white,\r\n border: `1px solid ${tokens.color.gray[300]}`,\r\n borderRadius: `${tokens.borderRadius.md}px`,\r\n boxShadow: tokens.shadows.xs,\r\n overflow: 'hidden',\r\n width: '100%',\r\n});\r\n\r\nconst SearchIconWrapper = styled(Box)({\r\n display: 'flex',\r\n alignItems: 'center',\r\n color: tokens.color.gray[400],\r\n '& svg': {\r\n width: '20px',\r\n height: '20px',\r\n },\r\n});\r\n\r\nconst StyledInputBase = styled(InputBase)({\r\n flex: '1 0 0',\r\n minHeight: '1px',\r\n minWidth: '1px',\r\n fontFamily: tokens.typography.fontFamily.body,\r\n fontSize: '16px',\r\n fontWeight: tokens.typography.fontWeight.regular,\r\n lineHeight: tokens.typography.lineHeight['text-md'],\r\n color: tokens.color.gray[900],\r\n '& .MuiInputBase-input': {\r\n padding: 0,\r\n overflow: 'hidden',\r\n textOverflow: 'ellipsis',\r\n whiteSpace: 'nowrap',\r\n '&::placeholder': {\r\n color: tokens.color.gray[500],\r\n opacity: 1,\r\n },\r\n },\r\n});\r\n\r\nconst ShortcutBadge = styled(Box)({\r\n display: 'flex',\r\n alignItems: 'flex-start',\r\n padding: '1px 4px',\r\n border: `1px solid ${tokens.color.gray[200]}`,\r\n borderRadius: '4px',\r\n fontFamily: tokens.typography.fontFamily.body,\r\n fontSize: tokens.typography.fontSize['text-xs'],\r\n fontWeight: tokens.typography.fontWeight.medium,\r\n lineHeight: tokens.typography.lineHeight['text-xs'],\r\n color: tokens.color.gray[500],\r\n});\r\n\r\nconst ButtonGroup = styled(Box)({\r\n display: 'flex',\r\n border: `1px solid ${tokens.color.gray[300]}`,\r\n borderRadius: `${tokens.borderRadius.md}px`,\r\n boxShadow: tokens.shadows.xs,\r\n overflow: 'hidden',\r\n isolation: 'isolate',\r\n position: 'relative',\r\n '&::after': {\r\n content: '\"\"',\r\n position: 'absolute',\r\n inset: 0,\r\n pointerEvents: 'none',\r\n boxShadow: `inset 0px 0px 0px 1px rgba(10,13,18,0), inset 0px -2px 0px 0px rgba(10,13,18,0)`,\r\n },\r\n});\r\n\r\nconst ButtonGroupItem = styled('button')({\r\n display: 'flex',\r\n gap: '0px',\r\n alignItems: 'center',\r\n justifyContent: 'center',\r\n minHeight: '40px',\r\n padding: '8px 16px',\r\n backgroundColor: tokens.color.base.white,\r\n border: 'none',\r\n borderRight: `1px solid ${tokens.color.gray[300]}`,\r\n fontFamily: tokens.typography.fontFamily.body,\r\n fontSize: tokens.typography.fontSize['text-sm'],\r\n fontWeight: tokens.typography.fontWeight.semibold,\r\n lineHeight: tokens.typography.lineHeight['text-sm'],\r\n color: tokens.color.gray[700],\r\n cursor: 'pointer',\r\n transition: 'background-color 0.2s',\r\n '&:hover': {\r\n backgroundColor: tokens.color.gray[50],\r\n },\r\n '&:last-child': {\r\n borderRight: 'none',\r\n },\r\n});\r\n\r\nconst DropdownButton = styled('button')<{ isMobile?: boolean }>(({ isMobile }) => ({\r\n display: 'flex',\r\n flexDirection: 'column',\r\n alignItems: 'flex-start',\r\n padding: 0,\r\n border: 'none',\r\n backgroundColor: 'transparent',\r\n color: tokens.color.gray[400],\r\n cursor: 'pointer',\r\n position: isMobile ? 'absolute' : 'relative',\r\n ...(isMobile && {\r\n top: 0,\r\n right: 0,\r\n zIndex: 2,\r\n }),\r\n '&:hover': {\r\n backgroundColor: 'transparent',\r\n },\r\n '& svg': {\r\n width: '20px',\r\n height: '20px',\r\n },\r\n}));\r\n\r\nconst TabsContainer = styled(Box)<{ isMobile?: boolean }>(({ isMobile }) => ({\r\n display: 'flex',\r\n gap: isMobile ? '0px' : '8px',\r\n alignItems: 'center',\r\n backgroundColor: isMobile ? 'transparent' : tokens.color.gray[50],\r\n border: isMobile ? 'none' : `1px solid ${tokens.color.gray[200]}`,\r\n borderRadius: isMobile ? '0' : `${tokens.borderRadius.md}px`,\r\n padding: isMobile ? '0' : '4px',\r\n width: '100%',\r\n isolation: 'isolate',\r\n}));\r\n\r\nconst MobileTabSelect = styled('button')({\r\n display: 'flex',\r\n flexDirection: 'column',\r\n gap: '6px',\r\n flex: '1 0 0',\r\n minHeight: '1px',\r\n minWidth: '1px',\r\n padding: 0,\r\n border: 'none',\r\n backgroundColor: 'transparent',\r\n cursor: 'pointer',\r\n});\r\n\r\nconst MobileTabSelectInput = styled(Box)({\r\n display: 'flex',\r\n gap: '8px',\r\n alignItems: 'center',\r\n padding: '10px 14px',\r\n backgroundColor: tokens.color.base.white,\r\n border: `1px solid ${tokens.color.gray[300]}`,\r\n borderRadius: `${tokens.borderRadius.md}px`,\r\n boxShadow: tokens.shadows.xs,\r\n overflow: 'hidden',\r\n width: '100%',\r\n});\r\n\r\nconst MobileTabSelectContent = styled(Box)({\r\n display: 'flex',\r\n flex: '1 0 0',\r\n gap: '8px',\r\n alignItems: 'center',\r\n minHeight: '1px',\r\n minWidth: '1px',\r\n});\r\n\r\nconst MobileTabSelectText = styled('p')({\r\n fontFamily: tokens.typography.fontFamily.body,\r\n fontSize: tokens.typography.fontSize['text-md'],\r\n fontWeight: tokens.typography.fontWeight.medium,\r\n lineHeight: tokens.typography.lineHeight['text-md'],\r\n color: tokens.color.gray[900],\r\n margin: 0,\r\n});\r\n\r\nconst StyledTabs = styled(Tabs)({\r\n minHeight: '36px',\r\n width: '100%',\r\n '& .MuiTabs-indicator': {\r\n display: 'none',\r\n },\r\n '& .MuiTabs-flexContainer': {\r\n gap: '8px',\r\n },\r\n '& .MuiTabs-scroller': {\r\n overflow: 'visible !important',\r\n },\r\n});\r\n\r\nconst StyledTab = styled(Tab)({\r\n minHeight: '36px',\r\n height: '36px',\r\n padding: '8px 12px',\r\n borderRadius: '6px',\r\n fontFamily: tokens.typography.fontFamily.body,\r\n fontSize: tokens.typography.fontSize['text-sm'],\r\n fontWeight: tokens.typography.fontWeight.semibold,\r\n lineHeight: tokens.typography.lineHeight['text-sm'],\r\n color: tokens.color.gray[500],\r\n textTransform: 'none',\r\n minWidth: 'auto',\r\n transition: 'all 0.2s',\r\n overflow: 'hidden',\r\n display: 'flex',\r\n gap: '8px',\r\n alignItems: 'center',\r\n justifyContent: 'center',\r\n '&.Mui-selected': {\r\n backgroundColor: tokens.color.base.white,\r\n color: tokens.color.gray[700],\r\n boxShadow: '0px 1px 3px 0px rgba(10,13,18,0.1), 0px 1px 2px -1px rgba(10,13,18,0.1)',\r\n },\r\n '&:not(.Mui-selected):hover': {\r\n backgroundColor: 'transparent',\r\n },\r\n});\r\n\r\nconst TabBadgeStyled = styled(Box)({\r\n display: 'flex',\r\n alignItems: 'center',\r\n padding: '2px 8px',\r\n backgroundColor: tokens.color.gray[50],\r\n border: `1px solid ${tokens.color.gray[200]}`,\r\n borderRadius: '9999px',\r\n fontFamily: tokens.typography.fontFamily.body,\r\n fontSize: tokens.typography.fontSize['text-xs'],\r\n fontWeight: tokens.typography.fontWeight.medium,\r\n lineHeight: tokens.typography.lineHeight['text-xs'],\r\n color: tokens.color.gray[700],\r\n});\r\n\r\nconst Divider = styled(Box)({\r\n width: '100%',\r\n height: '1px',\r\n backgroundColor: tokens.color.gray[200],\r\n});\r\n\r\nexport const SectionHeader: React.FC<SectionHeaderProps> = ({\r\n title = 'Team members',\r\n supportingText: showSupportingText = true,\r\n type = 'Buttons',\r\n breakpoint: manualBreakpoint,\r\n actions: showActions = true,\r\n buttonGroupItems = ['Text', 'Text', 'Text'],\r\n searchPlaceholder = 'Search',\r\n searchShortcut = '⌘K',\r\n dropdownIcon = true,\r\n tabs: showTabs = false,\r\n tabsConfig = [\r\n { label: 'My details', value: 'my-details' },\r\n { label: 'Profile', value: 'profile' },\r\n { label: 'Password', value: 'password' },\r\n { label: 'Team', value: 'team' },\r\n { label: 'Plan', value: 'plan' },\r\n { label: 'Billing', value: 'billing' },\r\n { label: 'Email', value: 'email' },\r\n { label: 'Notifications', value: 'notifications', badge: 2 },\r\n { label: 'Integrations', value: 'integrations' },\r\n { label: 'API', value: 'api' },\r\n ],\r\n activeTab,\r\n onTabChange,\r\n divider: showDivider = true,\r\n onSearchChange,\r\n onDropdownClick,\r\n onButtonGroupClick,\r\n}) => {\r\n const theme = useTheme();\r\n const autoIsMobile = useMediaQuery(theme.breakpoints.down('sm'));\r\n const isMobile = manualBreakpoint ? manualBreakpoint === 'Mobile' : autoIsMobile;\r\n\r\n const [searchValue, setSearchValue] = React.useState('');\r\n const [currentTab, setCurrentTab] = React.useState(activeTab || tabsConfig[0]?.value || 'my-details');\r\n\r\n const handleSearchChange = (event: React.ChangeEvent<HTMLInputElement>) => {\r\n setSearchValue(event.target.value);\r\n onSearchChange?.(event.target.value);\r\n };\r\n\r\n const handleTabChange = (_event: React.SyntheticEvent, newValue: string) => {\r\n setCurrentTab(newValue);\r\n onTabChange?.(newValue);\r\n };\r\n\r\n React.useEffect(() => {\r\n if (activeTab) {\r\n setCurrentTab(activeTab);\r\n }\r\n }, [activeTab]);\r\n\r\n const supportingTextContent = \"Manage your team members and their account permissions here.\";\r\n\r\n return (\r\n <Root sx={{ width: isMobile ? '343px' : '1216px' }}>\r\n <HeaderContent isMobile={isMobile}>\r\n <TextContent isMobile={isMobile}>\r\n <Title isMobile={isMobile}>{title}</Title>\r\n {showSupportingText && (\r\n <SupportingText isMobile={isMobile}>\r\n {supportingTextContent}\r\n </SupportingText>\r\n )}\r\n </TextContent>\r\n\r\n {type === 'Buttons' && showActions && !isMobile && (\r\n <ActionsWrapper>\r\n <TertiaryButton onClick={() => console.log('Tertiary')}>\r\n Tertiary\r\n </TertiaryButton>\r\n <SecondaryButton onClick={() => console.log('Secondary 1')}>\r\n Secondary\r\n </SecondaryButton>\r\n <SecondaryButton onClick={() => console.log('Secondary 2')}>\r\n Secondary\r\n </SecondaryButton>\r\n <PrimaryButton onClick={() => console.log('Primary')}>\r\n Primary\r\n </PrimaryButton>\r\n </ActionsWrapper>\r\n )}\r\n\r\n {type === 'Buttons' && showActions && isMobile && (\r\n <ActionsWrapper>\r\n <SecondaryButton onClick={() => console.log('Secondary')}>\r\n Secondary\r\n </SecondaryButton>\r\n <PrimaryButton onClick={() => console.log('Primary')}>\r\n Primary\r\n </PrimaryButton>\r\n </ActionsWrapper>\r\n )}\r\n\r\n {type === 'Button group' && (\r\n <ButtonGroup>\r\n {buttonGroupItems.map((item, index) => (\r\n <ButtonGroupItem\r\n key={index}\r\n onClick={() => onButtonGroupClick?.(index)}\r\n >\r\n {item}\r\n </ButtonGroupItem>\r\n ))}\r\n </ButtonGroup>\r\n )}\r\n\r\n {type === 'Search' && (\r\n <SearchWrapper isMobile={isMobile}>\r\n <SearchInput>\r\n <SearchIconWrapper>\r\n <SearchIcon />\r\n </SearchIconWrapper>\r\n <StyledInputBase\r\n placeholder={searchPlaceholder}\r\n value={searchValue}\r\n onChange={handleSearchChange}\r\n />\r\n {searchShortcut && <ShortcutBadge>{searchShortcut}</ShortcutBadge>}\r\n </SearchInput>\r\n </SearchWrapper>\r\n )}\r\n\r\n {dropdownIcon && !isMobile && (\r\n <DropdownButton onClick={onDropdownClick}>\r\n <MoreVertIcon />\r\n </DropdownButton>\r\n )}\r\n </HeaderContent>\r\n\r\n {showTabs && (\r\n <TabsContainer isMobile={isMobile}>\r\n {!isMobile ? (\r\n <StyledTabs\r\n value={currentTab}\r\n onChange={handleTabChange}\r\n variant=\"scrollable\"\r\n scrollButtons={false}\r\n >\r\n {tabsConfig.map((tab) => (\r\n <StyledTab\r\n key={tab.value}\r\n value={tab.value}\r\n label={\r\n <Box sx={{ display: 'flex', alignItems: 'center', gap: '8px' }}>\r\n {tab.label}\r\n {tab.badge && (\r\n <TabBadgeStyled>\r\n {tab.badge}\r\n </TabBadgeStyled>\r\n )}\r\n </Box>\r\n }\r\n />\r\n ))}\r\n </StyledTabs>\r\n ) : (\r\n <MobileTabSelect>\r\n <MobileTabSelectInput>\r\n <MobileTabSelectContent>\r\n <MobileTabSelectText>\r\n {tabsConfig.find(t => t.value === currentTab)?.label || 'My details'}\r\n </MobileTabSelectText>\r\n </MobileTabSelectContent>\r\n <KeyboardArrowDownIcon sx={{ color: tokens.color.gray[400], width: '20px', height: '20px' }} />\r\n </MobileTabSelectInput>\r\n </MobileTabSelect>\r\n )}\r\n </TabsContainer>\r\n )}\r\n\r\n {dropdownIcon && isMobile && (\r\n <DropdownButton isMobile onClick={onDropdownClick}>\r\n <MoreVertIcon />\r\n </DropdownButton>\r\n )}\r\n\r\n {showDivider && <Divider />}\r\n </Root>\r\n );\r\n};\r\n","import React from 'react';\r\nimport { Box, BoxProps, styled } from '@mui/material';\r\nimport { keyframes } from '@mui/system';\r\nimport { loadingIndicatorTokens, LoadingIndicatorSize } from '../../theme/components/loadingIndicator';\r\n\r\nexport type LoadingIndicatorStyle = 'Line simple' | 'Line spinner' | 'Dot circle';\r\n\r\nexport interface LoadingIndicatorProps extends Omit<BoxProps, 'style'> {\r\n /**\r\n * Visual style of the loading indicator\r\n */\r\n style?: LoadingIndicatorStyle;\r\n /**\r\n * Size of the indicator\r\n */\r\n size?: LoadingIndicatorSize;\r\n /**\r\n * Text label displayed below the indicator\r\n */\r\n label?: string;\r\n /**\r\n * Whether to show supporting text below the indicator\r\n */\r\n supportingText?: boolean;\r\n}\r\n\r\nconst spin = keyframes`\r\n 100% { transform: rotate(360deg); }\r\n`;\r\n\r\nconst Root = styled(Box, {\r\n shouldForwardProp: (prop) => prop !== 'indicatorSize',\r\n})<{ indicatorSize: LoadingIndicatorSize }>(({ indicatorSize }) => ({\r\n display: 'flex',\r\n flexDirection: 'column',\r\n alignItems: 'center',\r\n justifyContent: 'center',\r\n gap: `${loadingIndicatorTokens.gap[indicatorSize]}px`,\r\n width: 'fit-content',\r\n textAlign: 'center',\r\n}));\r\n\r\nconst Label = styled('p', {\r\n shouldForwardProp: (prop) => prop !== 'indicatorSize',\r\n})<{ indicatorSize: LoadingIndicatorSize }>(({ indicatorSize }) => {\r\n const typography = indicatorSize === 'lg' || indicatorSize === 'xl'\r\n ? loadingIndicatorTokens.typography.large\r\n : loadingIndicatorTokens.typography.small;\r\n\r\n return {\r\n ...typography,\r\n color: loadingIndicatorTokens.colors.secondary,\r\n margin: 0,\r\n };\r\n});\r\n\r\nconst LineSimple = styled('span', {\r\n shouldForwardProp: (prop) => prop !== 'indicatorSize',\r\n})<{ indicatorSize: LoadingIndicatorSize }>(({ indicatorSize }) => {\r\n const diameter = loadingIndicatorTokens.diameter[indicatorSize];\r\n const thickness = loadingIndicatorTokens.thickness[indicatorSize];\r\n\r\n return {\r\n width: diameter,\r\n height: diameter,\r\n borderRadius: '50%',\r\n border: `${thickness}px solid ${loadingIndicatorTokens.colors.neutral}`,\r\n borderTopColor: loadingIndicatorTokens.colors.primary,\r\n boxSizing: 'border-box',\r\n animation: `${spin} 0.8s linear infinite`,\r\n };\r\n});\r\n\r\nconst LineSpinner = styled('span', {\r\n shouldForwardProp: (prop) => prop !== 'indicatorSize',\r\n})<{ indicatorSize: LoadingIndicatorSize }>(({ indicatorSize }) => {\r\n const diameter = loadingIndicatorTokens.diameter[indicatorSize];\r\n const thickness = loadingIndicatorTokens.thickness[indicatorSize];\r\n const primary = loadingIndicatorTokens.colors.primary;\r\n const fade = loadingIndicatorTokens.colors.tertiary;\r\n\r\n const maskValue = `radial-gradient(farthest-side, transparent calc(100% - ${thickness}px), #000 calc(100% - ${thickness}px))`;\r\n\r\n return {\r\n width: diameter,\r\n height: diameter,\r\n borderRadius: '50%',\r\n background: `conic-gradient(from 0deg, ${primary} 0deg, ${primary} 120deg, ${fade} 180deg, transparent 360deg)`,\r\n mask: maskValue,\r\n WebkitMask: maskValue,\r\n animation: `${spin} 0.9s linear infinite`,\r\n };\r\n});\r\n\r\nconst DotCircleSvg = styled('svg', {\r\n shouldForwardProp: (prop) => prop !== 'indicatorSize',\r\n})<{ indicatorSize: LoadingIndicatorSize }>(({ indicatorSize }) => ({\r\n width: loadingIndicatorTokens.diameter[indicatorSize],\r\n height: loadingIndicatorTokens.diameter[indicatorSize],\r\n animation: `${spin} 1.2s linear infinite`,\r\n transformOrigin: 'center',\r\n}));\r\n\r\nconst DotCircleCircle = styled('circle')({\r\n strokeLinecap: 'round',\r\n fill: 'none',\r\n});\r\n\r\nconst renderIndicator = (style: LoadingIndicatorStyle, size: LoadingIndicatorSize) => {\r\n if (style === 'Dot circle') {\r\n const thickness = Math.max(2, loadingIndicatorTokens.thickness[size] - 1);\r\n const radius = 50 - thickness;\r\n const dashArray = `${Math.max(1, thickness)} ${12}`;\r\n\r\n return (\r\n <DotCircleSvg indicatorSize={size} viewBox=\"0 0 100 100\" role=\"presentation\">\r\n <DotCircleCircle\r\n stroke={loadingIndicatorTokens.colors.primary}\r\n strokeWidth={thickness}\r\n strokeDasharray={dashArray}\r\n cx=\"50\"\r\n cy=\"50\"\r\n r={radius}\r\n strokeOpacity={0.9}\r\n />\r\n </DotCircleSvg>\r\n );\r\n }\r\n\r\n if (style === 'Line spinner') {\r\n return <LineSpinner indicatorSize={size} role=\"presentation\" />;\r\n }\r\n\r\n return <LineSimple indicatorSize={size} role=\"presentation\" />;\r\n};\r\n\r\nexport const LoadingIndicator: React.FC<LoadingIndicatorProps> = ({\r\n style = 'Line simple',\r\n size = 'md',\r\n label = 'Loading...',\r\n supportingText = true,\r\n role = 'status',\r\n ...rest\r\n}) => {\r\n return (\r\n <Root indicatorSize={size} role={role} aria-busy=\"true\" {...rest}>\r\n {renderIndicator(style, size)}\r\n {supportingText && <Label indicatorSize={size}>{label}</Label>}\r\n </Root>\r\n );\r\n};\r\n\r\nLoadingIndicator.displayName = 'LoadingIndicator';\r\n","/**\n * @mui/styled-engine v7.3.6\n *\n * @license MIT\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n'use client';\n\n/* eslint-disable no-underscore-dangle */\nimport emStyled from '@emotion/styled';\nimport { serializeStyles as emSerializeStyles } from '@emotion/serialize';\nexport default function styled(tag, options) {\n const stylesFactory = emStyled(tag, options);\n if (process.env.NODE_ENV !== 'production') {\n return (...styles) => {\n const component = typeof tag === 'string' ? `\"${tag}\"` : 'component';\n if (styles.length === 0) {\n console.error([`MUI: Seems like you called \\`styled(${component})()\\` without a \\`style\\` argument.`, 'You must provide a `styles` argument: `styled(\"div\")(styleYouForgotToPass)`.'].join('\\n'));\n } else if (styles.some(style => style === undefined)) {\n console.error(`MUI: the styled(${component})(...args) API requires all its args to be defined.`);\n }\n return stylesFactory(...styles);\n };\n }\n return stylesFactory;\n}\n\n// eslint-disable-next-line @typescript-eslint/naming-convention\nexport function internal_mutateStyles(tag, processor) {\n // Emotion attaches all the styles as `__emotion_styles`.\n // Ref: https://github.com/emotion-js/emotion/blob/16d971d0da229596d6bcc39d282ba9753c9ee7cf/packages/styled/src/base.js#L186\n if (Array.isArray(tag.__emotion_styles)) {\n tag.__emotion_styles = processor(tag.__emotion_styles);\n }\n}\n\n// Emotion only accepts an array, but we want to avoid allocations\nconst wrapper = [];\n// eslint-disable-next-line @typescript-eslint/naming-convention\nexport function internal_serializeStyles(styles) {\n wrapper[0] = styles;\n return emSerializeStyles(wrapper);\n}\nexport { ThemeContext, keyframes, css } from '@emotion/react';\nexport { default as StyledEngineProvider } from \"./StyledEngineProvider/index.js\";\nexport { default as GlobalStyles } from \"./GlobalStyles/index.js\";","import tokens from '../../tokens/tokens.json';\r\n\r\nexport type LoadingIndicatorSize = 'sm' | 'md' | 'lg' | 'xl';\r\n\r\nconst diameterMap: Record<LoadingIndicatorSize, number> = {\r\n sm: 32,\r\n md: 48,\r\n lg: 56,\r\n xl: 64,\r\n};\r\n\r\nconst thicknessMap: Record<LoadingIndicatorSize, number> = {\r\n sm: 3,\r\n md: 4,\r\n lg: 5,\r\n xl: 6,\r\n};\r\n\r\nconst gapMap: Record<LoadingIndicatorSize, number> = {\r\n sm: 16,\r\n md: 16,\r\n lg: 20,\r\n xl: 20,\r\n};\r\n\r\nexport const loadingIndicatorTokens = {\r\n diameter: diameterMap,\r\n thickness: thicknessMap,\r\n gap: gapMap,\r\n colors: {\r\n primary: tokens.color.primary[600],\r\n neutral: tokens.color.gray[200],\r\n secondary: tokens.color.gray[400],\r\n tertiary: tokens.color.gray[300],\r\n },\r\n typography: {\r\n small: {\r\n fontFamily: tokens.typography.fontFamily.body,\r\n fontSize: tokens.typography.fontSize['text-sm'],\r\n fontWeight: tokens.typography.fontWeight.medium,\r\n lineHeight: tokens.typography.lineHeight['text-sm'],\r\n },\r\n large: {\r\n fontFamily: tokens.typography.fontFamily.body,\r\n fontSize: tokens.typography.fontSize['text-lg'],\r\n fontWeight: tokens.typography.fontWeight.medium,\r\n lineHeight: tokens.typography.lineHeight['text-lg'],\r\n },\r\n },\r\n};\r\n","import React from 'react';\r\nimport { Box, styled } from '@mui/material';\r\nimport tokens from '../../tokens/tokens.json';\r\n\r\nexport type PieChartHole = 'False' | '25%' | '50%' | '75%';\r\n\r\nexport interface PieChartDataItem {\r\n value: number;\r\n label?: string;\r\n color?: string;\r\n}\r\n\r\nexport interface PieChartProps {\r\n /**\r\n * Data for the pie chart segments\r\n */\r\n data?: PieChartDataItem[];\r\n /**\r\n * Size of the center hole (False = solid pie chart)\r\n */\r\n hole?: PieChartHole;\r\n /**\r\n * Size of the chart in pixels\r\n */\r\n size?: number;\r\n /**\r\n * Custom class name\r\n */\r\n className?: string;\r\n}\r\n\r\nconst ChartContainer = styled(Box)({\r\n display: 'inline-flex',\r\n position: 'relative',\r\n});\r\n\r\n// Default green gradient colors from design tokens\r\nconst defaultColors = [\r\n tokens.color.primary[700], // #1A9849\r\n tokens.color.primary[600], // #1EAE52\r\n tokens.color.primary[500], // #3BDD77\r\n tokens.color.primary[400], // #5AE28C\r\n tokens.color.primary[300], // #78E8A1\r\n tokens.color.primary[200], // #97EDB8\r\n];\r\n\r\n/**\r\n * PieChart component for displaying data in a circular chart\r\n *\r\n * Features:\r\n * - Solid pie chart or donut chart with configurable hole sizes\r\n * - Customizable colors per segment\r\n * - SVG-based rendering\r\n * - Responsive sizing\r\n * - Uses design system color tokens\r\n */\r\nexport const PieChart: React.FC<PieChartProps> = ({\r\n data = [\r\n { value: 20 },\r\n { value: 15 },\r\n { value: 25 },\r\n { value: 18 },\r\n { value: 12 },\r\n { value: 10 },\r\n ],\r\n hole = 'False',\r\n size = 160,\r\n className,\r\n}) => {\r\n const getHoleRadius = () => {\r\n const radius = size / 2;\r\n switch (hole) {\r\n case '25%':\r\n return radius * 0.25;\r\n case '50%':\r\n return radius * 0.5;\r\n case '75%':\r\n return radius * 0.75;\r\n case 'False':\r\n default:\r\n return 0;\r\n }\r\n };\r\n\r\n const renderPieChart = () => {\r\n const total = data.reduce((sum, item) => sum + item.value, 0);\r\n const centerX = size / 2;\r\n const centerY = size / 2;\r\n const radius = size / 2;\r\n const holeRadius = getHoleRadius();\r\n\r\n let currentAngle = -90; // Start from top\r\n\r\n return data.map((item, index) => {\r\n const percentage = item.value / total;\r\n const angle = percentage * 360;\r\n const color = item.color || defaultColors[index % defaultColors.length];\r\n\r\n // Calculate path for the slice\r\n const startAngle = (currentAngle * Math.PI) / 180;\r\n const endAngle = ((currentAngle + angle) * Math.PI) / 180;\r\n\r\n // Outer arc points\r\n const x1 = centerX + radius * Math.cos(startAngle);\r\n const y1 = centerY + radius * Math.sin(startAngle);\r\n const x2 = centerX + radius * Math.cos(endAngle);\r\n const y2 = centerY + radius * Math.sin(endAngle);\r\n\r\n // Inner arc points (for donut)\r\n const x3 = centerX + holeRadius * Math.cos(endAngle);\r\n const y3 = centerY + holeRadius * Math.sin(endAngle);\r\n const x4 = centerX + holeRadius * Math.cos(startAngle);\r\n const y4 = centerY + holeRadius * Math.sin(startAngle);\r\n\r\n const largeArcFlag = angle > 180 ? 1 : 0;\r\n\r\n let path;\r\n if (holeRadius > 0) {\r\n // Donut chart path\r\n path = [\r\n `M ${x1} ${y1}`,\r\n `A ${radius} ${radius} 0 ${largeArcFlag} 1 ${x2} ${y2}`,\r\n `L ${x3} ${y3}`,\r\n `A ${holeRadius} ${holeRadius} 0 ${largeArcFlag} 0 ${x4} ${y4}`,\r\n 'Z',\r\n ].join(' ');\r\n } else {\r\n // Solid pie chart path\r\n path = [\r\n `M ${centerX} ${centerY}`,\r\n `L ${x1} ${y1}`,\r\n `A ${radius} ${radius} 0 ${largeArcFlag} 1 ${x2} ${y2}`,\r\n 'Z',\r\n ].join(' ');\r\n }\r\n\r\n currentAngle += angle;\r\n\r\n return (\r\n <path\r\n key={index}\r\n d={path}\r\n fill={color}\r\n stroke=\"none\"\r\n />\r\n );\r\n });\r\n };\r\n\r\n return (\r\n <ChartContainer className={className} sx={{ width: size, height: size }}>\r\n <svg\r\n width={size}\r\n height={size}\r\n viewBox={`0 0 ${size} ${size}`}\r\n style={{ display: 'block' }}\r\n >\r\n {renderPieChart()}\r\n </svg>\r\n </ChartContainer>\r\n );\r\n};\r\n\r\nPieChart.displayName = 'PieChart';\r\n","import React from 'react';\r\nimport { Box, styled } from '@mui/material';\r\nimport tokens from '../../tokens/tokens.json';\r\n\r\nexport type ActivityGaugeSize = 'xs' | 'sm' | 'md' | 'lg';\r\n\r\nexport interface ActivityGaugeRing {\r\n /**\r\n * Progress percentage (0-100)\r\n */\r\n progress: number;\r\n /**\r\n * Custom color for the ring\r\n */\r\n color?: string;\r\n}\r\n\r\nexport interface ActivityGaugeProps {\r\n /**\r\n * Size of the gauge\r\n */\r\n size?: ActivityGaugeSize;\r\n /**\r\n * Whether to show the label\r\n */\r\n label?: boolean;\r\n /**\r\n * Label text (e.g., \"Active users\")\r\n */\r\n labelText?: string;\r\n /**\r\n * Value to display in the center\r\n */\r\n value?: string | number;\r\n /**\r\n * Array of rings (outer to inner)\r\n */\r\n rings?: ActivityGaugeRing[];\r\n /**\r\n * Custom class name\r\n */\r\n className?: string;\r\n}\r\n\r\nconst GaugeContainer = styled(Box)({\r\n position: 'relative',\r\n display: 'inline-flex',\r\n alignItems: 'center',\r\n justifyContent: 'center',\r\n});\r\n\r\nconst CenterContent = styled(Box)({\r\n position: 'absolute',\r\n top: '50%',\r\n left: '50%',\r\n transform: 'translate(-50%, -50%)',\r\n display: 'flex',\r\n flexDirection: 'column',\r\n alignItems: 'center',\r\n textAlign: 'center',\r\n lineHeight: 0,\r\n});\r\n\r\nconst Label = styled('p')<{ gaugeSize: ActivityGaugeSize }>(({ gaugeSize }) => {\r\n const isLarge = gaugeSize === 'md' || gaugeSize === 'lg';\r\n return {\r\n fontFamily: tokens.typography.fontFamily.body,\r\n fontWeight: tokens.typography.fontWeight.medium,\r\n fontSize: isLarge ? tokens.typography.fontSize['text-sm'] : tokens.typography.fontSize['text-xs'],\r\n lineHeight: isLarge ? tokens.typography.lineHeight['text-sm'] : tokens.typography.lineHeight['text-xs'],\r\n color: tokens.color.gray[600],\r\n margin: 0,\r\n whiteSpace: 'pre-wrap',\r\n width: '100%',\r\n };\r\n});\r\n\r\nconst Value = styled('p')<{ gaugeSize: ActivityGaugeSize }>(({ gaugeSize }) => {\r\n const fontSizeMap = {\r\n xs: tokens.typography.fontSize['text-xl'],\r\n sm: '24px', // display-xs\r\n md: '30px', // display-sm\r\n lg: '36px', // display-md\r\n };\r\n\r\n const lineHeightMap = {\r\n xs: tokens.typography.lineHeight['text-xl'],\r\n sm: '32px',\r\n md: '38px',\r\n lg: '44px',\r\n };\r\n\r\n return {\r\n fontFamily: gaugeSize === 'xs' ? tokens.typography.fontFamily.body : tokens.typography.fontFamily.body,\r\n fontWeight: tokens.typography.fontWeight.semibold,\r\n fontSize: fontSizeMap[gaugeSize],\r\n lineHeight: lineHeightMap[gaugeSize],\r\n color: tokens.color.gray[900],\r\n margin: 0,\r\n whiteSpace: 'pre-wrap',\r\n width: '100%',\r\n letterSpacing: gaugeSize === 'lg' ? '-0.72px' : '0',\r\n };\r\n});\r\n\r\n// Default ring colors (green gradients)\r\nconst defaultRingColors = [\r\n tokens.color.primary[700], // Outer - darkest\r\n tokens.color.primary[600], // Middle\r\n tokens.color.primary[500], // Inner - brightest\r\n];\r\n\r\n/**\r\n * ActivityGauge component for displaying circular progress with multiple rings\r\n *\r\n * Features:\r\n * - Multiple concentric progress rings\r\n * - Four sizes: xs, sm, md, lg\r\n * - Center label and value display\r\n * - Customizable ring colors\r\n * - SVG-based rendering\r\n * - Uses design system color tokens\r\n */\r\nexport const ActivityGauge: React.FC<ActivityGaugeProps> = ({\r\n size = 'xs',\r\n label = true,\r\n labelText = 'Active users',\r\n value = '1,000',\r\n rings = [\r\n { progress: 75 },\r\n { progress: 60 },\r\n { progress: 85 },\r\n ],\r\n className,\r\n}) => {\r\n const getSizes = () => {\r\n const sizeMap = {\r\n xs: { container: 160, outer: 152, middle: 128, inner: 104 },\r\n sm: { container: 200, outer: 188, middle: 154, inner: 122 },\r\n md: { container: 240, outer: 224, middle: 184, inner: 144 },\r\n lg: { container: 280, outer: 262, middle: 214, inner: 166 },\r\n };\r\n return sizeMap[size];\r\n };\r\n\r\n const sizes = getSizes();\r\n const strokeWidth = 8;\r\n const centerX = sizes.container / 2;\r\n const centerY = sizes.container / 2;\r\n\r\n const renderRing = (diameter: number, progress: number, color: string, index: number) => {\r\n const radius = diameter / 2 - strokeWidth / 2;\r\n const circumference = 2 * Math.PI * radius;\r\n const dashoffset = circumference - (progress / 100) * circumference;\r\n\r\n // Start from top (-90 degrees)\r\n const rotateAngle = -90;\r\n\r\n return (\r\n <circle\r\n key={index}\r\n cx={centerX}\r\n cy={centerY}\r\n r={radius}\r\n fill=\"none\"\r\n stroke={color}\r\n strokeWidth={strokeWidth}\r\n strokeLinecap=\"round\"\r\n strokeDasharray={circumference}\r\n strokeDashoffset={dashoffset}\r\n transform={`rotate(${rotateAngle} ${centerX} ${centerY})`}\r\n style={{\r\n transition: 'stroke-dashoffset 0.3s ease',\r\n }}\r\n />\r\n );\r\n };\r\n\r\n const ringDiameters = [sizes.outer, sizes.middle, sizes.inner];\r\n\r\n return (\r\n <GaugeContainer\r\n className={className}\r\n sx={{ width: sizes.container, height: sizes.container }}\r\n >\r\n <svg\r\n width={sizes.container}\r\n height={sizes.container}\r\n viewBox={`0 0 ${sizes.container} ${sizes.container}`}\r\n style={{ display: 'block' }}\r\n >\r\n {/* Background circles (gray) */}\r\n {ringDiameters.map((diameter, index) => {\r\n const radius = diameter / 2 - strokeWidth / 2;\r\n return (\r\n <circle\r\n key={`bg-${index}`}\r\n cx={centerX}\r\n cy={centerY}\r\n r={radius}\r\n fill=\"none\"\r\n stroke={tokens.color.gray[200]}\r\n strokeWidth={strokeWidth}\r\n strokeLinecap=\"round\"\r\n />\r\n );\r\n })}\r\n\r\n {/* Progress rings */}\r\n {rings.map((ring, index) => {\r\n if (index >= ringDiameters.length) return null;\r\n const color = ring.color || defaultRingColors[index % defaultRingColors.length];\r\n return renderRing(ringDiameters[index], ring.progress, color, index);\r\n })}\r\n </svg>\r\n\r\n <CenterContent>\r\n {label && (size === 'md' || size === 'lg') && (\r\n <Label gaugeSize={size}>{labelText}</Label>\r\n )}\r\n <Value gaugeSize={size}>{value}</Value>\r\n {label && (size === 'sm' || size === 'xs') && (\r\n <Label gaugeSize={size}>{labelText}</Label>\r\n )}\r\n </CenterContent>\r\n </GaugeContainer>\r\n );\r\n};\r\n\r\nActivityGauge.displayName = 'ActivityGauge';\r\n","import React from 'react';\r\nimport { Box, IconButton, styled } from '@mui/material';\r\nimport MoreVertIcon from '@mui/icons-material/MoreVert';\r\nimport TrendingUpIcon from '@mui/icons-material/TrendingUp';\r\nimport ArrowUpwardIcon from '@mui/icons-material/ArrowUpward';\r\nimport NorthEastIcon from '@mui/icons-material/NorthEast';\r\nimport VisibilityOutlinedIcon from '@mui/icons-material/VisibilityOutlined';\r\nimport PeopleOutlineIcon from '@mui/icons-material/PeopleOutline';\r\nimport AttachMoneyOutlinedIcon from '@mui/icons-material/AttachMoneyOutlined';\r\nimport BoltIcon from '@mui/icons-material/Bolt';\r\nimport SettingsOutlinedIcon from '@mui/icons-material/SettingsOutlined';\r\nimport tokens from '../../tokens/tokens.json'; \r\n\r\nexport type MetricItemType = \r\n | 'Simple' \r\n | 'Icon 01' \r\n | 'Icon 02' \r\n | 'Icon 03' \r\n | 'Icon 04' \r\n | 'Chart 01' \r\n | 'Chart 02' \r\n | 'Chart 03' \r\n | 'Chart 04';\r\n\r\nexport type MetricItemBreakpoint = 'Desktop' | 'Mobile';\r\nexport type ChangeTrend = 'Positive' | 'Negative';\r\nexport type ChangeType = '01' | '02' | '03';\r\n\r\nexport interface MetricItemProps {\r\n label: string;\r\n value: string | number;\r\n type?: MetricItemType;\r\n breakpoint?: MetricItemBreakpoint;\r\n showActions?: boolean;\r\n showDropdown?: boolean;\r\n showFeaturedIcon?: boolean;\r\n showSettingsIcon?: boolean;\r\n changeValue?: string;\r\n changeTrend?: ChangeTrend;\r\n changeType?: ChangeType;\r\n changeText?: string;\r\n actionText?: string;\r\n onActionClick?: () => void;\r\n onDropdownClick?: () => void;\r\n onSettingsClick?: () => void;\r\n chartComponent?: React.ReactNode;\r\n}\r\n\r\nconst Root = styled(Box)<{\r\n metricType: MetricItemType;\r\n showActions: boolean;\r\n breakpoint?: MetricItemBreakpoint;\r\n}>(({ metricType, showActions, breakpoint }) => {\r\n const isSimple = metricType === 'Simple';\r\n const isChart04 = metricType === 'Chart 04';\r\n const isIcon02 = metricType === 'Icon 02';\r\n const isMobile = breakpoint === 'Mobile';\r\n\r\n // Determine padding based on type and breakpoint\r\n let padding;\r\n if (isChart04) {\r\n padding = 0;\r\n } else if (isSimple) {\r\n padding = tokens.spacing['2xl'];\r\n } else if (showActions) {\r\n padding = 0;\r\n } else if (isIcon02 && isMobile) {\r\n padding = `${tokens.spacing['2xl']} ${tokens.spacing.xl}`;\r\n } else {\r\n padding = tokens.spacing['2xl'];\r\n }\r\n\r\n return {\r\n position: 'relative' as const,\r\n display: 'flex',\r\n flexDirection: 'column' as const,\r\n gap: isSimple ? tokens.spacing.xl : tokens.spacing.md,\r\n padding,\r\n backgroundColor: isChart04 ? 'transparent' : tokens.color.base.white,\r\n border: isChart04 ? 'none' : `1px solid ${tokens.color.secondary[200]}`,\r\n borderRadius: tokens.borderRadius.lg,\r\n boxShadow: isChart04 ? 'none' : '0px 1px 2px 0px rgba(10, 13, 18, 0.05)',\r\n minHeight: 'fit-content',\r\n };\r\n})\r\n\r\nconst ContentWrapper = styled(Box)<{ \r\n showActions: boolean;\r\n breakpoint?: MetricItemBreakpoint;\r\n metricType: MetricItemType;\r\n}>(({ showActions, breakpoint, metricType }) => {\r\n const isIcon02 = metricType === 'Icon 02';\r\n const isChart02 = metricType === 'Chart 02';\r\n const isChart03 = metricType === 'Chart 03';\r\n const isMobile = breakpoint === 'Mobile';\r\n \r\n // Determine padding and gap based on type and breakpoint\r\n let padding = showActions ? tokens.spacing['2xl'] : 0;\r\n let gap = tokens.spacing.md;\r\n \r\n if (isIcon02 && showActions) {\r\n if (isMobile) {\r\n padding = `${tokens.spacing['2xl']} ${tokens.spacing.xl}`;\r\n gap = tokens.spacing.xl;\r\n } else {\r\n padding = tokens.spacing['2xl'];\r\n gap = tokens.spacing['2xl'];\r\n }\r\n } else if (isChart02 && showActions) {\r\n // Chart 02 with actions\r\n if (isMobile) {\r\n padding = `${tokens.spacing['2xl']} ${tokens.spacing.xl}`;\r\n gap = tokens.spacing.xl;\r\n } else {\r\n padding = tokens.spacing['2xl'];\r\n gap = tokens.spacing['2xl'];\r\n }\r\n } else if (isChart03 && showActions) {\r\n // Chart 03 with actions\r\n if (isMobile) {\r\n padding = `${tokens.spacing['2xl']} ${tokens.spacing.xl}`;\r\n gap = tokens.spacing.xl;\r\n } else {\r\n padding = tokens.spacing['2xl'];\r\n gap = tokens.spacing['2xl'];\r\n }\r\n }\r\n \r\n return {\r\n display: 'flex',\r\n flexDirection: 'column' as const,\r\n gap,\r\n padding,\r\n width: '100%',\r\n };\r\n});\r\n\r\nconst Label = styled(Box)<{ metricType: MetricItemType }>(({ metricType }) => {\r\n const isChart01 = metricType === 'Chart 01';\r\n const isChart02 = metricType === 'Chart 02';\r\n const isChart03 = metricType === 'Chart 03';\r\n const isChart04 = metricType === 'Chart 04';\r\n const isIcon02 = metricType === 'Icon 02';\r\n \r\n // Chart 03 uses text-sm/medium (gray 600)\r\n // Chart 04 uses text-sm/semibold (gray 900)\r\n // Chart 01 and Chart 02 use text-md/semibold (gray 900)\r\n \r\n if (isChart03) {\r\n return {\r\n fontFamily: tokens.typography.fontFamily.body,\r\n fontSize: tokens.typography.fontSize['text-sm'],\r\n lineHeight: tokens.typography.lineHeight['text-sm'],\r\n fontWeight: tokens.typography.fontWeight.medium,\r\n color: tokens.color.gray[600],\r\n width: '100%',\r\n };\r\n }\r\n \r\n if (isChart04) {\r\n return {\r\n fontFamily: tokens.typography.fontFamily.body,\r\n fontSize: tokens.typography.fontSize['text-sm'],\r\n lineHeight: tokens.typography.lineHeight['text-sm'],\r\n fontWeight: tokens.typography.fontWeight.semibold,\r\n color: tokens.color.gray[900],\r\n width: '100%',\r\n };\r\n }\r\n \r\n if (isChart01 || isChart02) {\r\n return {\r\n fontFamily: tokens.typography.fontFamily.body,\r\n fontSize: tokens.typography.fontSize['text-md'],\r\n lineHeight: tokens.typography.lineHeight['text-md'],\r\n fontWeight: tokens.typography.fontWeight.semibold,\r\n color: tokens.color.gray[900],\r\n width: '100%',\r\n };\r\n }\r\n \r\n return {\r\n fontFamily: tokens.typography.fontFamily.body,\r\n fontSize: tokens.typography.fontSize['text-sm'],\r\n lineHeight: tokens.typography.lineHeight['text-sm'],\r\n fontWeight: isIcon02 ? tokens.typography.fontWeight.semibold : tokens.typography.fontWeight.medium,\r\n color: isIcon02 ? tokens.color.gray[900] : tokens.color.gray[600],\r\n width: '100%',\r\n };\r\n});\r\n\r\nconst HeadingAndIcon = styled(Box)<{ metricType: MetricItemType }>(({ metricType }) => {\r\n const isIcon02 = metricType === 'Icon 02';\r\n \r\n return {\r\n display: 'flex',\r\n gap: tokens.spacing.lg,\r\n alignItems: 'center',\r\n width: '100%',\r\n '& > p': isIcon02 ? {\r\n fontFamily: tokens.typography.fontFamily.body,\r\n fontSize: tokens.typography.fontSize['text-md'],\r\n lineHeight: tokens.typography.lineHeight['text-md'],\r\n fontWeight: tokens.typography.fontWeight.semibold,\r\n color: tokens.color.gray[900],\r\n } : {},\r\n };\r\n});\r\n\r\nconst NumberAndBadgeWrapper = styled(Box)({\r\n display: 'flex',\r\n gap: tokens.spacing.xl,\r\n alignItems: 'flex-end',\r\n width: '100%',\r\n});\r\n\r\nconst NumberAndChartWrapper = styled(Box)({\r\n display: 'flex',\r\n gap: tokens.spacing.xl,\r\n alignItems: 'flex-end',\r\n width: '100%',\r\n});\r\n\r\nconst Value = styled(Box)<{ \r\n isLargeDisplay?: boolean;\r\n breakpoint?: MetricItemBreakpoint;\r\n metricType?: MetricItemType;\r\n}>(({ isLargeDisplay, breakpoint, metricType }) => {\r\n const isMobile = breakpoint === 'Mobile';\r\n const isChart02 = metricType === 'Chart 02';\r\n \r\n // Chart 02 Desktop Actions=False uses display-md (36px)\r\n // Chart 02 Mobile and all Actions=True variants use display-sm (30px)\r\n let fontSize = tokens.typography.fontSize['display-sm'];\r\n let lineHeight = tokens.typography.lineHeight['display-sm'];\r\n let letterSpacing = '0';\r\n \r\n if (isChart02 && !isMobile && isLargeDisplay) {\r\n fontSize = tokens.typography.fontSize['display-md'];\r\n lineHeight = tokens.typography.lineHeight['display-md'];\r\n letterSpacing = '-0.72px';\r\n }\r\n \r\n return {\r\n flex: '1 0 0',\r\n fontFamily: tokens.typography.fontFamily.display,\r\n fontSize,\r\n lineHeight,\r\n fontWeight: tokens.typography.fontWeight.semibold,\r\n color: tokens.color.gray[900],\r\n letterSpacing,\r\n };\r\n});\r\n\r\nconst ChangeBadge = styled(Box)<{ \r\n trend: ChangeTrend;\r\n changeType: ChangeType;\r\n}>(({ trend, changeType }) => {\r\n const isSuccess = trend === 'Positive';\r\n const isType03 = changeType === '03';\r\n \r\n return {\r\n display: 'flex',\r\n gap: changeType === '03' ? tokens.spacing.xs : tokens.spacing.xxs,\r\n alignItems: 'center',\r\n justifyContent: 'center',\r\n padding: changeType === '03' \r\n ? `${tokens.spacing.xxs} ${tokens.spacing.md} ${tokens.spacing.xxs} ${tokens.spacing.sm}`\r\n : 0,\r\n backgroundColor: changeType === '03' ? tokens.color.base.white : 'transparent',\r\n border: changeType === '03' ? `1px solid ${tokens.color.gray[300]}` : 'none',\r\n borderRadius: tokens.borderRadius.sm,\r\n boxShadow: changeType === '03' ? '0px 1px 2px 0px rgba(10, 13, 18, 0.05)' : 'none',\r\n '& .MuiSvgIcon-root': {\r\n fontSize: changeType === '03' ? '12px' : '16px',\r\n color: isSuccess ? tokens.color.success[600] : tokens.color.error[600],\r\n },\r\n };\r\n});\r\n\r\nconst ChangeText = styled(Box)<{ \r\n trend: ChangeTrend;\r\n changeType: ChangeType;\r\n}>(({ trend, changeType }) => {\r\n const isSuccess = trend === 'Positive';\r\n const isType03 = changeType === '03';\r\n \r\n return {\r\n fontFamily: tokens.typography.fontFamily.body,\r\n fontSize: tokens.typography.fontSize['text-sm'],\r\n lineHeight: tokens.typography.lineHeight['text-sm'],\r\n fontWeight: tokens.typography.fontWeight.medium,\r\n color: isType03 \r\n ? tokens.color.gray[700] \r\n : isSuccess \r\n ? tokens.color.success[600] \r\n : tokens.color.error[600],\r\n textAlign: 'center' as const,\r\n };\r\n});\r\n\r\nconst ChangeAndTextWrapper = styled(Box)({\r\n display: 'flex',\r\n gap: tokens.spacing.md,\r\n alignItems: 'center',\r\n width: '100%',\r\n});\r\n\r\nconst ChangeWrapper = styled(Box)({\r\n display: 'flex',\r\n gap: tokens.spacing.xxs,\r\n alignItems: 'center',\r\n justifyContent: 'center',\r\n});\r\n\r\nconst SecondaryText = styled(Box)({\r\n flex: '1 0 0',\r\n fontFamily: tokens.typography.fontFamily.body,\r\n fontSize: tokens.typography.fontSize['text-sm'],\r\n lineHeight: tokens.typography.lineHeight['text-sm'],\r\n fontWeight: tokens.typography.fontWeight.medium,\r\n color: tokens.color.gray[600],\r\n overflow: 'hidden',\r\n textOverflow: 'ellipsis',\r\n whiteSpace: 'nowrap',\r\n});\r\n\r\nconst DropdownButton = styled(IconButton)<{ breakpoint?: MetricItemBreakpoint }>(({ breakpoint }) => ({\r\n position: 'absolute' as const,\r\n top: breakpoint === 'Mobile' ? '15px' : '19px',\r\n right: breakpoint === 'Mobile' ? '15px' : '19px',\r\n padding: 0,\r\n width: '20px',\r\n height: '20px',\r\n color: tokens.color.gray[400],\r\n '&:hover': {\r\n backgroundColor: 'transparent',\r\n color: tokens.color.gray[400],\r\n },\r\n '& .MuiSvgIcon-root': {\r\n fontSize: '20px',\r\n },\r\n}));\r\n\r\nconst FeaturedIcon = styled(Box)<{ iconType: MetricItemType }>(({ iconType }) => {\r\n const getIconColors = () => {\r\n const isChartType = iconType.startsWith('Chart');\r\n \r\n // Skeuomorphic style for Chart types, Icon 03, and Icon 04\r\n if (isChartType || iconType === 'Icon 03' || iconType === 'Icon 04') {\r\n return {\r\n bg: tokens.color.base.white,\r\n fg: tokens.color.gray[700],\r\n border: tokens.color.gray[300],\r\n useBorder: true,\r\n };\r\n }\r\n \r\n switch (iconType) {\r\n case 'Icon 01':\r\n return {\r\n bg: tokens.color.success[100],\r\n fg: tokens.color.success[600],\r\n border: 'transparent',\r\n useBorder: false,\r\n };\r\n case 'Icon 02':\r\n return {\r\n bg: '#B5F2CC', // Brand secondary from Figma\r\n fg: '#1EAE52', // Brand primary green from Figma - corresponds to tokens.color.primary[600]\r\n border: 'transparent',\r\n useBorder: false,\r\n };\r\n default:\r\n return {\r\n bg: tokens.color.success[100],\r\n fg: tokens.color.success[600],\r\n border: 'transparent',\r\n useBorder: false,\r\n };\r\n }\r\n };\r\n\r\n const colors = getIconColors();\r\n const isChartType = iconType.startsWith('Chart');\r\n const isIcon04 = iconType === 'Icon 04';\r\n const size = isIcon04 ? '40px' : '48px';\r\n const iconSize = isIcon04 ? '20px' : '24px';\r\n \r\n // Determine border radius\r\n let borderRadius;\r\n if (isChartType) {\r\n borderRadius = tokens.borderRadius.lg; // 10px\r\n } else if (isIcon04) {\r\n borderRadius = tokens.borderRadius.md; // 8px\r\n } else if (iconType === 'Icon 01' || iconType === 'Icon 02') {\r\n borderRadius = tokens.borderRadius.full; // circular\r\n } else {\r\n borderRadius = tokens.borderRadius.lg; // 10px for Icon 03\r\n }\r\n\r\n return {\r\n width: size,\r\n height: size,\r\n borderRadius,\r\n backgroundColor: colors.bg,\r\n border: colors.useBorder ? `1px solid ${colors.border}` : 'none',\r\n boxShadow: colors.useBorder\r\n ? '0px 1px 2px 0px rgba(10, 13, 18, 0.05), inset 0px 0px 0px 1px rgba(10, 13, 18, 0.03), inset 0px -2px 0px 0px rgba(10, 13, 18, 0.05)'\r\n : 'none',\r\n display: 'flex',\r\n alignItems: 'center',\r\n justifyContent: 'center',\r\n flexShrink: 0,\r\n '& .MuiSvgIcon-root': {\r\n fontSize: iconSize,\r\n color: colors.fg,\r\n },\r\n };\r\n});\r\n\r\nconst NumberAndBadgeContainer = styled(Box)<{ isInline?: boolean }>(({ isInline }) => ({\r\n display: 'flex',\r\n flexDirection: isInline ? 'row' as const : 'column' as const,\r\n gap: isInline ? tokens.spacing.md : tokens.spacing.lg,\r\n flex: '1 0 0',\r\n minWidth: 0,\r\n alignItems: isInline ? 'flex-start' : 'stretch',\r\n}));\r\n\r\nconst ActionSection = styled(Box)<{ metricType?: MetricItemType }>(({ metricType }) => {\r\n const isChart04 = metricType === 'Chart 04';\r\n return {\r\n display: 'flex',\r\n flexDirection: 'column' as const,\r\n width: '100%',\r\n borderTop: isChart04 ? 'none' : `1px solid ${tokens.color.secondary[200]}`,\r\n };\r\n});\r\n\r\nconst ActionContent = styled(Box)<{ \r\n breakpoint?: MetricItemBreakpoint; \r\n showSettingsIcon?: boolean;\r\n metricType?: MetricItemType;\r\n}>(({ breakpoint, showSettingsIcon, metricType }) => {\r\n const isMobile = breakpoint === 'Mobile';\r\n const isChart04 = metricType === 'Chart 04';\r\n \r\n // Chart 04 has different padding - no border, just padding\r\n if (isChart04) {\r\n return {\r\n display: 'flex',\r\n alignItems: 'center',\r\n justifyContent: showSettingsIcon ? 'space-between' : 'flex-end',\r\n padding: isMobile\r\n ? `${tokens.spacing.lg} ${tokens.spacing.xl} ${tokens.spacing.lg} ${tokens.spacing.lg}`\r\n : `${tokens.spacing.lg} ${tokens.spacing['2xl']} ${tokens.spacing.lg} ${tokens.spacing.xl}`,\r\n width: '100%',\r\n };\r\n }\r\n \r\n return {\r\n display: 'flex',\r\n alignItems: 'center',\r\n justifyContent: showSettingsIcon ? 'space-between' : 'flex-end',\r\n padding: isMobile\r\n ? showSettingsIcon\r\n ? `${tokens.spacing.lg} ${tokens.spacing.xl} ${tokens.spacing.lg} ${tokens.spacing.lg}`\r\n : tokens.spacing.xl\r\n : showSettingsIcon\r\n ? `${tokens.spacing.xl} ${tokens.spacing['2xl']} ${tokens.spacing.xl} ${tokens.spacing.xl}`\r\n : `${tokens.spacing.xl} ${tokens.spacing['2xl']}`,\r\n width: '100%',\r\n };\r\n});\r\n\r\nconst ActionButton = styled(Box)<{ asButton?: boolean }>(({ asButton }) => {\r\n if (asButton) {\r\n return {\r\n display: 'flex',\r\n gap: tokens.spacing.xs,\r\n alignItems: 'center',\r\n justifyContent: 'center',\r\n cursor: 'pointer',\r\n padding: `${tokens.spacing.md} ${tokens.spacing.lg}`,\r\n backgroundColor: tokens.color.base.white,\r\n border: `1px solid ${tokens.color.gray[300]}`,\r\n borderRadius: tokens.borderRadius.md,\r\n boxShadow: '0px 1px 2px 0px rgba(10, 13, 18, 0.05), inset 0px 0px 0px 1px rgba(10, 13, 18, 0.03), inset 0px -2px 0px 0px rgba(10, 13, 18, 0.05)',\r\n fontFamily: tokens.typography.fontFamily.body,\r\n fontSize: tokens.typography.fontSize['text-sm'],\r\n lineHeight: tokens.typography.lineHeight['text-sm'],\r\n fontWeight: tokens.typography.fontWeight.semibold,\r\n color: tokens.color.gray[700],\r\n transition: 'all 0.2s ease',\r\n '&:hover': {\r\n backgroundColor: tokens.color.gray[50],\r\n borderColor: tokens.color.gray[400],\r\n },\r\n };\r\n }\r\n\r\n return {\r\n display: 'flex',\r\n gap: tokens.spacing.xs,\r\n alignItems: 'center',\r\n justifyContent: 'center',\r\n cursor: 'pointer',\r\n fontFamily: tokens.typography.fontFamily.body,\r\n fontSize: tokens.typography.fontSize['text-sm'],\r\n lineHeight: tokens.typography.lineHeight['text-sm'],\r\n fontWeight: tokens.typography.fontWeight.semibold,\r\n color: tokens.color.primary[700],\r\n transition: 'color 0.2s ease',\r\n '&:hover': {\r\n color: tokens.color.primary[800],\r\n },\r\n };\r\n});\r\n\r\nconst SettingsIconButton = styled(IconButton)({\r\n padding: tokens.spacing.md,\r\n borderRadius: tokens.borderRadius.md,\r\n color: tokens.color.gray[400],\r\n '&:hover': {\r\n backgroundColor: tokens.color.gray[50],\r\n color: tokens.color.gray[500],\r\n },\r\n '& .MuiSvgIcon-root': {\r\n fontSize: '20px',\r\n },\r\n});\r\n\r\nconst ChartContainer = styled(Box)<{ \r\n breakpoint?: MetricItemBreakpoint;\r\n metricType?: MetricItemType;\r\n}>(({ breakpoint, metricType }) => {\r\n const isMobile = breakpoint === 'Mobile';\r\n const isChart02 = metricType === 'Chart 02';\r\n \r\n // Chart 02 has 128x56px for both Desktop and Mobile\r\n if (isChart02) {\r\n return {\r\n width: '128px',\r\n height: '56px',\r\n flexShrink: 0,\r\n };\r\n }\r\n \r\n // Chart 01: Desktop 112x56px, Mobile 96x48px\r\n return {\r\n width: isMobile ? '96px' : '112px',\r\n height: isMobile ? '48px' : '56px',\r\n flexShrink: 0,\r\n };\r\n});\r\n\r\nconst ChartContainerFullWidth = styled(Box)({\r\n width: '100%',\r\n height: '72px',\r\n});\r\n\r\nconst Chart04Wrapper = styled(Box)({\r\n display: 'flex',\r\n flexDirection: 'column' as const,\r\n gap: tokens.spacing.xxs,\r\n width: '100%',\r\n});\r\n\r\nconst Chart04HeadingWrapper = styled(Box)<{ breakpoint?: MetricItemBreakpoint }>(({ breakpoint }) => {\r\n const isMobile = breakpoint === 'Mobile';\r\n return {\r\n display: 'flex',\r\n alignItems: 'center',\r\n padding: isMobile \r\n ? `${tokens.spacing.lg} ${tokens.spacing.xl} ${tokens.spacing.md}`\r\n : `${tokens.spacing.lg} ${tokens.spacing['2xl']} ${tokens.spacing.md}`,\r\n width: '100%',\r\n };\r\n});\r\n\r\nconst Chart04Content = styled(Box)<{ breakpoint?: MetricItemBreakpoint }>(({ breakpoint }) => {\r\n const isMobile = breakpoint === 'Mobile';\r\n return {\r\n display: 'flex',\r\n flexDirection: 'column' as const,\r\n gap: isMobile ? tokens.spacing.xl : tokens.spacing['2xl'],\r\n padding: isMobile \r\n ? `${tokens.spacing['2xl']} ${tokens.spacing.xl}`\r\n : tokens.spacing['2xl'],\r\n backgroundColor: tokens.color.base.white,\r\n border: `1px solid ${tokens.color.secondary[200]}`,\r\n borderRadius: tokens.borderRadius.xl,\r\n boxShadow: '0px 1px 2px 0px rgba(10, 13, 18, 0.05)',\r\n width: '100%',\r\n position: 'relative' as const,\r\n };\r\n});\r\n\r\nconst Chart04ChartContainer = styled(Box)({\r\n width: '100%',\r\n height: '56px',\r\n});\r\n\r\nexport const MetricItem: React.FC<MetricItemProps> = ({\r\n label,\r\n value,\r\n type = 'Simple',\r\n breakpoint: manualBreakpoint,\r\n showActions = false,\r\n showDropdown = true,\r\n showFeaturedIcon = true,\r\n showSettingsIcon = false,\r\n changeValue,\r\n changeTrend = 'Positive',\r\n changeType = '03',\r\n changeText,\r\n actionText = 'View report',\r\n onActionClick,\r\n onDropdownClick,\r\n onSettingsClick,\r\n chartComponent,\r\n}) => {\r\n const isIconType = type.startsWith('Icon');\r\n const isChartType = type.startsWith('Chart');\r\n const isSimple = type === 'Simple';\r\n\r\n const renderChangeIcon = () => {\r\n if (changeType === '03') {\r\n return <NorthEastIcon />;\r\n }\r\n return <ArrowUpwardIcon />;\r\n };\r\n\r\n const renderFeaturedIcon = () => {\r\n if (type === 'Icon 01') {\r\n return <TrendingUpIcon />;\r\n }\r\n if (type === 'Icon 02') {\r\n return <BoltIcon />;\r\n }\r\n if (type === 'Icon 03') {\r\n return <TrendingUpIcon />;\r\n }\r\n if (type === 'Icon 04') {\r\n return <TrendingUpIcon />;\r\n }\r\n if (type === 'Chart 01') {\r\n return <VisibilityOutlinedIcon />;\r\n }\r\n if (type === 'Chart 02') {\r\n return <VisibilityOutlinedIcon />;\r\n }\r\n if (type === 'Chart 03') {\r\n return <TrendingUpIcon />;\r\n }\r\n if (type === 'Chart 04') {\r\n return <PeopleOutlineIcon />;\r\n }\r\n return <TrendingUpIcon />;\r\n };\r\n\r\n const renderContent = () => {\r\n const isChart02 = type === 'Chart 02';\r\n const isChart03 = type === 'Chart 03';\r\n const isChart04 = type === 'Chart 04';\r\n const isIcon02 = type === 'Icon 02';\r\n const isIcon03 = type === 'Icon 03';\r\n const isIcon04 = type === 'Icon 04';\r\n const isLargeDisplay = isChart02;\r\n const isInlineLayout = isChart02;\r\n\r\n if (isChartType) {\r\n // Chart 04 - Special card design\r\n if (isChart04) {\r\n return (\r\n <Chart04Wrapper>\r\n <Chart04HeadingWrapper breakpoint={manualBreakpoint}>\r\n <Label metricType={type} sx={{ flex: '1 0 0' }}>{label}</Label>\r\n </Chart04HeadingWrapper>\r\n <Chart04Content breakpoint={manualBreakpoint}>\r\n <NumberAndBadgeWrapper sx={{ flexWrap: 'wrap', gap: tokens.spacing.lg }}>\r\n <Value metricType={type} breakpoint={manualBreakpoint}>{value}</Value>\r\n {changeValue && (\r\n <ChangeAndTextWrapper>\r\n <ChangeWrapper>\r\n <ChangeBadge trend={changeTrend} changeType={changeType}>\r\n {renderChangeIcon()}\r\n </ChangeBadge>\r\n <ChangeText trend={changeTrend} changeType={changeType}>\r\n {changeValue}\r\n </ChangeText>\r\n </ChangeWrapper>\r\n {changeText && <SecondaryText>{changeText}</SecondaryText>}\r\n </ChangeAndTextWrapper>\r\n )}\r\n </NumberAndBadgeWrapper>\r\n {chartComponent && (\r\n <Chart04ChartContainer>\r\n {chartComponent}\r\n </Chart04ChartContainer>\r\n )}\r\n {/* Dropdown positioned inside the content card for Chart 04 */}\r\n {showDropdown && (\r\n <DropdownButton \r\n onClick={onDropdownClick} \r\n breakpoint={manualBreakpoint}\r\n sx={{ position: 'absolute', top: manualBreakpoint === 'Mobile' ? '15px' : '19px', right: manualBreakpoint === 'Mobile' ? '15px' : '19px' }}\r\n >\r\n <MoreVertIcon />\r\n </DropdownButton>\r\n )}\r\n </Chart04Content>\r\n </Chart04Wrapper>\r\n );\r\n }\r\n\r\n // Chart 03 - Full width chart at bottom\r\n if (isChart03) {\r\n return (\r\n <>\r\n <Label metricType={type}>{label}</Label>\r\n <NumberAndBadgeWrapper sx={{ flexWrap: 'wrap', justifyContent: 'space-between' }}>\r\n <Value metricType={type} breakpoint={manualBreakpoint}>{value}</Value>\r\n {changeValue && (\r\n <ChangeAndTextWrapper>\r\n <ChangeWrapper>\r\n <ChangeBadge trend={changeTrend} changeType={changeType}>\r\n {renderChangeIcon()}\r\n </ChangeBadge>\r\n <ChangeText trend={changeTrend} changeType={changeType}>\r\n {changeValue}\r\n </ChangeText>\r\n </ChangeWrapper>\r\n {changeText && <SecondaryText>{changeText}</SecondaryText>}\r\n </ChangeAndTextWrapper>\r\n )}\r\n </NumberAndBadgeWrapper>\r\n {chartComponent && (\r\n <ChartContainerFullWidth>\r\n {chartComponent}\r\n </ChartContainerFullWidth>\r\n )}\r\n </>\r\n );\r\n }\r\n\r\n // Chart 01 and Chart 02 - Chart on the side\r\n return (\r\n <>\r\n <HeadingAndIcon metricType={type}>\r\n {showFeaturedIcon && (\r\n <FeaturedIcon iconType={type}>\r\n {renderFeaturedIcon()}\r\n </FeaturedIcon>\r\n )}\r\n <Label metricType={type} sx={{ flex: '1 0 0' }}>{label}</Label>\r\n </HeadingAndIcon>\r\n <NumberAndChartWrapper>\r\n <NumberAndBadgeContainer isInline={isInlineLayout}>\r\n <Value \r\n isLargeDisplay={isLargeDisplay && !showActions} \r\n metricType={type} \r\n breakpoint={manualBreakpoint}\r\n >\r\n {value}\r\n </Value>\r\n {changeValue && isInlineLayout ? (\r\n <ChangeWrapper>\r\n <ChangeBadge trend={changeTrend} changeType={changeType}>\r\n {renderChangeIcon()}\r\n </ChangeBadge>\r\n <ChangeText trend={changeTrend} changeType={changeType}>\r\n {changeValue}\r\n </ChangeText>\r\n </ChangeWrapper>\r\n ) : changeValue && (\r\n <ChangeAndTextWrapper>\r\n <ChangeWrapper>\r\n <ChangeBadge trend={changeTrend} changeType={changeType}>\r\n {renderChangeIcon()}\r\n </ChangeBadge>\r\n <ChangeText trend={changeTrend} changeType={changeType}>\r\n {changeValue}\r\n </ChangeText>\r\n </ChangeWrapper>\r\n {changeText && <SecondaryText>{changeText}</SecondaryText>}\r\n </ChangeAndTextWrapper>\r\n )}\r\n </NumberAndBadgeContainer>\r\n {chartComponent && (\r\n <ChartContainer breakpoint={manualBreakpoint} metricType={type}>\r\n {chartComponent}\r\n </ChartContainer>\r\n )}\r\n </NumberAndChartWrapper>\r\n </>\r\n );\r\n }\r\n\r\n // Icon 02 - Special layout with icon + label on top\r\n if (isIcon02) {\r\n return (\r\n <>\r\n <HeadingAndIcon metricType={type}>\r\n {showFeaturedIcon && (\r\n <FeaturedIcon iconType={type}>\r\n {renderFeaturedIcon()}\r\n </FeaturedIcon>\r\n )}\r\n <Label metricType={type} sx={{ flex: '1 0 0' }}>{label}</Label>\r\n </HeadingAndIcon>\r\n <Box sx={{ display: 'flex', flexDirection: 'column', gap: tokens.spacing.lg, width: '100%' }}>\r\n <Value>{value}</Value>\r\n {changeValue && (\r\n <ChangeAndTextWrapper>\r\n <ChangeWrapper>\r\n <ChangeBadge trend={changeTrend} changeType={changeType}>\r\n {renderChangeIcon()}\r\n </ChangeBadge>\r\n <ChangeText trend={changeTrend} changeType={changeType}>\r\n {changeValue}\r\n </ChangeText>\r\n </ChangeWrapper>\r\n {changeText && <SecondaryText>{changeText}</SecondaryText>}\r\n </ChangeAndTextWrapper>\r\n )}\r\n </Box>\r\n </>\r\n );\r\n }\r\n\r\n // Icon 03 and Icon 04 - Wrap layout with value and badge side by side\r\n if (isIcon03 || isIcon04) {\r\n return (\r\n <>\r\n {showFeaturedIcon && (\r\n <FeaturedIcon iconType={type}>\r\n {renderFeaturedIcon()}\r\n </FeaturedIcon>\r\n )}\r\n <Box sx={{ display: 'flex', flexDirection: 'column', gap: tokens.spacing.md, width: '100%', flex: '1 0 0' }}>\r\n <Label metricType={type}>{label}</Label>\r\n <NumberAndBadgeWrapper sx={{ flexWrap: 'wrap', justifyContent: 'space-between' }}>\r\n <Value>{value}</Value>\r\n {changeValue && (\r\n <ChangeAndTextWrapper sx={{ flexShrink: 0 }}>\r\n <ChangeWrapper>\r\n <ChangeBadge trend={changeTrend} changeType={changeType}>\r\n {renderChangeIcon()}\r\n </ChangeBadge>\r\n <ChangeText trend={changeTrend} changeType={changeType}>\r\n {changeValue}\r\n </ChangeText>\r\n </ChangeWrapper>\r\n {changeText && <SecondaryText>{changeText}</SecondaryText>}\r\n </ChangeAndTextWrapper>\r\n )}\r\n </NumberAndBadgeWrapper>\r\n </Box>\r\n </>\r\n );\r\n }\r\n\r\n if (isIconType) {\r\n return (\r\n <>\r\n {showFeaturedIcon && (\r\n <FeaturedIcon iconType={type}>\r\n {renderFeaturedIcon()}\r\n </FeaturedIcon>\r\n )}\r\n <Box sx={{ display: 'flex', flexDirection: 'column', gap: tokens.spacing.md, width: '100%' }}>\r\n <Label metricType={type}>{label}</Label>\r\n <NumberAndBadgeWrapper>\r\n <Value>{value}</Value>\r\n {changeValue && (\r\n <ChangeBadge trend={changeTrend} changeType={changeType}>\r\n {renderChangeIcon()}\r\n <ChangeText trend={changeTrend} changeType={changeType}>\r\n {changeValue}\r\n </ChangeText>\r\n </ChangeBadge>\r\n )}\r\n </NumberAndBadgeWrapper>\r\n </Box>\r\n </>\r\n );\r\n }\r\n\r\n return (\r\n <>\r\n <Label metricType={type}>{label}</Label>\r\n <NumberAndBadgeWrapper>\r\n <Value>{value}</Value>\r\n {changeValue && (\r\n <ChangeBadge trend={changeTrend} changeType={changeType}>\r\n {renderChangeIcon()}\r\n <ChangeText trend={changeTrend} changeType={changeType}>\r\n {changeValue}\r\n </ChangeText>\r\n </ChangeBadge>\r\n )}\r\n </NumberAndBadgeWrapper>\r\n </>\r\n );\r\n };\r\n\r\n return (\r\n <Root metricType={type} showActions={showActions} breakpoint={manualBreakpoint}>\r\n <ContentWrapper showActions={showActions} breakpoint={manualBreakpoint} metricType={type}>\r\n {renderContent()}\r\n </ContentWrapper>\r\n\r\n {showActions && (\r\n <ActionSection metricType={type}>\r\n <ActionContent breakpoint={manualBreakpoint} showSettingsIcon={showSettingsIcon} metricType={type}>\r\n {showSettingsIcon && (\r\n <SettingsIconButton onClick={onSettingsClick}>\r\n <SettingsOutlinedIcon />\r\n </SettingsIconButton>\r\n )}\r\n <ActionButton asButton={showSettingsIcon} onClick={onActionClick}>\r\n {actionText}\r\n </ActionButton>\r\n </ActionContent>\r\n </ActionSection>\r\n )}\r\n\r\n {showDropdown && type !== 'Chart 04' && (\r\n <DropdownButton onClick={onDropdownClick} breakpoint={manualBreakpoint}>\r\n <MoreVertIcon />\r\n </DropdownButton>\r\n )}\r\n </Root>\r\n );\r\n};\r\n\r\nMetricItem.displayName = 'MetricItem';\r\n","import React, { useState } from 'react';\r\nimport { styled } from '@mui/material/styles';\r\nimport { Box } from '../Box';\r\nimport { Typography } from '../Typography';\r\nimport { Avatar } from '../Avatar';\r\nimport { IconButton } from '../IconButton';\r\nimport {\r\n DoneAllIcon,\r\n EditIcon,\r\n ContentCopyIcon,\r\n RefreshIcon,\r\n StarOutlineIcon,\r\n CloudDownloadIcon,\r\n PlayArrowIcon,\r\n PauseIcon,\r\n VolumeUpIcon,\r\n FullscreenIcon,\r\n} from '../../theme/icons';\r\nimport tokens from '../../tokens/tokens.json';\r\n\r\nexport interface MessageReaction {\r\n emoji: string;\r\n count?: number;\r\n}\r\n\r\nexport interface MessageReply {\r\n userName: string;\r\n content: string;\r\n}\r\n\r\nexport interface MessageFile {\r\n name: string;\r\n size: string;\r\n type: string;\r\n color?: string;\r\n}\r\n\r\nexport interface MessageAudio {\r\n duration: string;\r\n waveformColor?: string;\r\n}\r\n\r\nexport interface MessageImage {\r\n url: string;\r\n name: string;\r\n size: string;\r\n aspectRatio?: string;\r\n}\r\n\r\nexport interface MessageVideo {\r\n url: string;\r\n thumbnail?: string;\r\n duration?: string;\r\n}\r\n\r\nexport interface MessageLinkPreview {\r\n url: string;\r\n imageUrl: string;\r\n}\r\n\r\nexport interface MessageProps {\r\n /** Whether message is from current user (true) or other user (false) */\r\n sent: boolean;\r\n /** Sender name */\r\n userName: string;\r\n /** Time display */\r\n timestamp: string;\r\n /** Message text */\r\n content: string;\r\n /** Avatar URL (only when sent=false) */\r\n avatar?: string;\r\n /** Online status indicator */\r\n online?: boolean;\r\n /** Emoji reactions */\r\n reactions?: MessageReaction[];\r\n /** Show read checkmark (only when sent=true) */\r\n statusIcon?: boolean;\r\n /** Replied message */\r\n replyTo?: MessageReply;\r\n /** File attachment */\r\n file?: MessageFile;\r\n /** Audio message */\r\n audio?: MessageAudio;\r\n /** Image attachment */\r\n image?: MessageImage;\r\n /** Video message */\r\n video?: MessageVideo;\r\n /** Link preview */\r\n linkPreview?: MessageLinkPreview;\r\n /** Show action buttons on hover */\r\n showActions?: boolean;\r\n /** Download click handler (for file/audio/image) */\r\n onDownload?: () => void;\r\n /** Reaction click handler */\r\n onReaction?: (emoji: string) => void;\r\n /** Edit click handler */\r\n onEdit?: () => void;\r\n /** Copy click handler */\r\n onCopy?: () => void;\r\n /** Regenerate click handler */\r\n onRegenerate?: () => void;\r\n /** Star click handler */\r\n onStar?: () => void;\r\n}\r\n\r\nconst MessageContainer = styled(Box)<{ ownerState: { sent: boolean } }>(({ ownerState }) => ({\r\n display: 'flex',\r\n flexDirection: ownerState.sent ? 'row-reverse' : 'row',\r\n gap: tokens.spacing.lg,\r\n alignItems: 'flex-start',\r\n width: '100%',\r\n position: 'relative',\r\n}));\r\n\r\nconst MessageWrapper = styled(Box)(() => ({\r\n display: 'flex',\r\n flexDirection: 'column',\r\n gap: tokens.spacing.md,\r\n flex: 1,\r\n maxWidth: '70%',\r\n}));\r\n\r\nconst MessageHeader = styled(Box)<{ ownerState: { sent: boolean } }>(({ ownerState }) => ({\r\n display: 'flex',\r\n alignItems: 'center',\r\n gap: tokens.spacing.md,\r\n justifyContent: ownerState.sent ? 'flex-end' : 'flex-start',\r\n}));\r\n\r\nconst MessageBubble = styled(Box)<{ ownerState: { sent: boolean; hasReply: boolean; hasFile: boolean } }>(\r\n ({ ownerState }) => ({\r\n backgroundColor: ownerState.sent ? tokens.color.base.white : tokens.color.gray['50'],\r\n border: `1px solid ${tokens.color.gray['200']}`,\r\n borderRadius: tokens.borderRadius.lg,\r\n borderTopLeftRadius: !ownerState.sent ? 0 : tokens.borderRadius.lg,\r\n borderTopRightRadius: ownerState.sent ? 0 : tokens.borderRadius.lg,\r\n padding: tokens.spacing.xl,\r\n position: 'relative',\r\n boxShadow: tokens.shadows.xs,\r\n })\r\n);\r\n\r\nconst ReplyContainer = styled(Box)(() => ({\r\n borderLeft: `3px solid ${tokens.color.primary['500']}`,\r\n paddingLeft: tokens.spacing.lg,\r\n marginBottom: tokens.spacing.lg,\r\n}));\r\n\r\nconst ReplyUserName = styled(Typography)(() => ({\r\n fontSize: tokens.typography.fontSize['text-sm'],\r\n fontWeight: tokens.typography.fontWeight.semibold,\r\n lineHeight: tokens.typography.lineHeight['text-sm'],\r\n color: tokens.color.gray['900'],\r\n fontFamily: tokens.typography.fontFamily.body,\r\n marginBottom: tokens.spacing.xs,\r\n}));\r\n\r\nconst ReplyContent = styled(Typography)(() => ({\r\n fontSize: tokens.typography.fontSize['text-sm'],\r\n fontWeight: tokens.typography.fontWeight.regular,\r\n lineHeight: tokens.typography.lineHeight['text-sm'],\r\n color: tokens.color.gray['600'],\r\n fontFamily: tokens.typography.fontFamily.body,\r\n}));\r\n\r\nconst MessageContent = styled(Typography)(() => ({\r\n fontSize: tokens.typography.fontSize['text-md'],\r\n fontWeight: tokens.typography.fontWeight.regular,\r\n lineHeight: tokens.typography.lineHeight['text-md'],\r\n color: tokens.color.gray['900'],\r\n fontFamily: tokens.typography.fontFamily.body,\r\n wordWrap: 'break-word',\r\n}));\r\n\r\nconst FileAttachment = styled(Box)<{ ownerState: { color?: string } }>(({ ownerState }) => ({\r\n display: 'flex',\r\n alignItems: 'center',\r\n gap: tokens.spacing.lg,\r\n padding: tokens.spacing.xl,\r\n backgroundColor: tokens.color.gray['50'],\r\n border: `1px solid ${tokens.color.gray['200']}`,\r\n borderRadius: tokens.borderRadius.md,\r\n marginTop: tokens.spacing.lg,\r\n}));\r\n\r\nconst FileIcon = styled(Box)<{ ownerState: { color?: string } }>(({ ownerState }) => ({\r\n width: 40,\r\n height: 40,\r\n borderRadius: tokens.borderRadius.md,\r\n backgroundColor: ownerState.color || tokens.color.success['500'],\r\n display: 'flex',\r\n alignItems: 'center',\r\n justifyContent: 'center',\r\n color: tokens.color.base.white,\r\n fontSize: tokens.typography.fontSize['text-sm'],\r\n fontWeight: tokens.typography.fontWeight.semibold,\r\n fontFamily: tokens.typography.fontFamily.body,\r\n flexShrink: 0,\r\n}));\r\n\r\nconst FileInfo = styled(Box)(() => ({\r\n display: 'flex',\r\n flexDirection: 'column',\r\n gap: tokens.spacing.xs,\r\n flex: 1,\r\n minWidth: 0,\r\n}));\r\n\r\nconst FileName = styled(Typography)(() => ({\r\n fontSize: tokens.typography.fontSize['text-sm'],\r\n fontWeight: tokens.typography.fontWeight.semibold,\r\n lineHeight: tokens.typography.lineHeight['text-sm'],\r\n color: tokens.color.gray['900'],\r\n fontFamily: tokens.typography.fontFamily.body,\r\n overflow: 'hidden',\r\n textOverflow: 'ellipsis',\r\n whiteSpace: 'nowrap',\r\n}));\r\n\r\nconst FileSize = styled(Typography)(() => ({\r\n fontSize: tokens.typography.fontSize['text-xs'],\r\n fontWeight: tokens.typography.fontWeight.regular,\r\n lineHeight: tokens.typography.lineHeight['text-xs'],\r\n color: tokens.color.gray['600'],\r\n fontFamily: tokens.typography.fontFamily.body,\r\n}));\r\n\r\nconst AudioContainer = styled(Box)(() => ({\r\n display: 'flex',\r\n alignItems: 'center',\r\n gap: tokens.spacing.lg,\r\n padding: tokens.spacing.lg,\r\n backgroundColor: tokens.color.base.white,\r\n border: `1px solid ${tokens.color.gray['200']}`,\r\n borderRadius: tokens.borderRadius.md,\r\n}));\r\n\r\nconst PlayButton = styled(IconButton)(() => ({\r\n width: 32,\r\n height: 32,\r\n padding: 0,\r\n backgroundColor: tokens.color.primary['600'],\r\n color: tokens.color.base.white,\r\n flexShrink: 0,\r\n '&:hover': {\r\n backgroundColor: tokens.color.primary['700'],\r\n },\r\n '& .MuiSvgIcon-root': {\r\n fontSize: 20,\r\n },\r\n}));\r\n\r\nconst WaveformContainer = styled(Box)<{ ownerState: { color?: string } }>(({ ownerState }) => ({\r\n flex: 1,\r\n height: 32,\r\n display: 'flex',\r\n alignItems: 'center',\r\n gap: '2px',\r\n}));\r\n\r\nconst WaveformBar = styled(Box)<{ ownerState: { height: number; color?: string } }>(({ ownerState }) => ({\r\n width: 3,\r\n height: `${ownerState.height}px`,\r\n backgroundColor: ownerState.color || tokens.color.primary['600'],\r\n borderRadius: 2,\r\n transition: 'height 0.2s ease',\r\n}));\r\n\r\nconst AudioDuration = styled(Typography)(() => ({\r\n fontSize: tokens.typography.fontSize['text-xs'],\r\n fontWeight: tokens.typography.fontWeight.regular,\r\n lineHeight: tokens.typography.lineHeight['text-xs'],\r\n color: tokens.color.gray['600'],\r\n fontFamily: tokens.typography.fontFamily.body,\r\n flexShrink: 0,\r\n}));\r\n\r\nconst ImageContainer = styled(Box)(() => ({\r\n display: 'flex',\r\n flexDirection: 'column',\r\n gap: tokens.spacing.sm,\r\n}));\r\n\r\nconst ImageWrapper = styled(Box)<{ ownerState: { aspectRatio?: string } }>(({ ownerState }) => ({\r\n width: '100%',\r\n aspectRatio: ownerState.aspectRatio || '4/3',\r\n border: '0.5px solid rgba(0, 0, 0, 0.1)',\r\n borderRadius: tokens.borderRadius.sm,\r\n overflow: 'hidden',\r\n '& img': {\r\n width: '100%',\r\n height: '100%',\r\n objectFit: 'cover',\r\n },\r\n}));\r\n\r\nconst ImageInfo = styled(Box)(() => ({\r\n display: 'flex',\r\n alignItems: 'center',\r\n gap: tokens.spacing.xs,\r\n}));\r\n\r\nconst ImageName = styled(Typography)(() => ({\r\n fontSize: tokens.typography.fontSize['text-sm'],\r\n fontWeight: tokens.typography.fontWeight.medium,\r\n lineHeight: tokens.typography.lineHeight['text-sm'],\r\n color: tokens.color.gray['700'],\r\n fontFamily: tokens.typography.fontFamily.body,\r\n flex: 1,\r\n overflow: 'hidden',\r\n textOverflow: 'ellipsis',\r\n whiteSpace: 'nowrap',\r\n}));\r\n\r\nconst ImageSize = styled(Typography)(() => ({\r\n fontSize: tokens.typography.fontSize['text-sm'],\r\n fontWeight: tokens.typography.fontWeight.regular,\r\n lineHeight: tokens.typography.lineHeight['text-sm'],\r\n color: tokens.color.gray['600'],\r\n fontFamily: tokens.typography.fontFamily.body,\r\n}));\r\n\r\nconst VideoContainer = styled(Box)(() => ({\r\n position: 'relative',\r\n width: '100%',\r\n aspectRatio: '560/315',\r\n border: '0.5px solid rgba(0, 0, 0, 0.1)',\r\n borderRadius: tokens.borderRadius.md,\r\n overflow: 'hidden',\r\n cursor: 'pointer',\r\n '& img': {\r\n width: '100%',\r\n height: '100%',\r\n objectFit: 'cover',\r\n },\r\n}));\r\n\r\nconst VideoOverlay = styled(Box)(() => ({\r\n position: 'absolute',\r\n top: '50%',\r\n left: '50%',\r\n transform: 'translate(-50%, -50%)',\r\n width: 64,\r\n height: 64,\r\n borderRadius: '50%',\r\n backgroundColor: 'rgba(255, 255, 255, 0.9)',\r\n backdropFilter: 'blur(8px)',\r\n display: 'flex',\r\n alignItems: 'center',\r\n justifyContent: 'center',\r\n color: tokens.color.gray['900'],\r\n transition: 'all 0.2s ease-in-out',\r\n '&:hover': {\r\n backgroundColor: tokens.color.base.white,\r\n transform: 'translate(-50%, -50%) scale(1.1)',\r\n },\r\n}));\r\n\r\nconst VideoActionBar = styled(Box)(() => ({\r\n position: 'absolute',\r\n bottom: 0,\r\n left: 0,\r\n right: 0,\r\n background: 'linear-gradient(to bottom, transparent, rgba(0, 0, 0, 0.3))',\r\n padding: `${tokens.spacing.xs} ${tokens.spacing.xl}`,\r\n display: 'flex',\r\n alignItems: 'center',\r\n gap: tokens.spacing.md,\r\n}));\r\n\r\nconst VideoActionButton = styled(IconButton)(() => ({\r\n width: 32,\r\n height: 32,\r\n padding: tokens.spacing.md,\r\n color: tokens.color.base.white,\r\n '&:hover': {\r\n backgroundColor: 'rgba(255, 255, 255, 0.2)',\r\n },\r\n '& .MuiSvgIcon-root': {\r\n fontSize: 16,\r\n },\r\n}));\r\n\r\nconst LinkPreviewContainer = styled(Box)<{ ownerState: { sent: boolean } }>(({ ownerState }) => ({\r\n backgroundColor: ownerState.sent ? tokens.color.base.white : tokens.color.gray['50'],\r\n border: `1px solid ${tokens.color.gray['200']}`,\r\n borderRadius: tokens.borderRadius.lg,\r\n borderTopLeftRadius: !ownerState.sent ? 0 : tokens.borderRadius.lg,\r\n borderTopRightRadius: ownerState.sent ? 0 : tokens.borderRadius.lg,\r\n padding: tokens.spacing.lg,\r\n display: 'flex',\r\n flexDirection: 'column',\r\n gap: tokens.spacing.sm,\r\n boxShadow: tokens.shadows.xs,\r\n}));\r\n\r\nconst LinkPreviewImage = styled(Box)(() => ({\r\n width: '100%',\r\n aspectRatio: '1200/630',\r\n border: '0.5px solid rgba(0, 0, 0, 0.1)',\r\n borderRadius: tokens.borderRadius.sm,\r\n overflow: 'hidden',\r\n '& img': {\r\n width: '100%',\r\n height: '100%',\r\n objectFit: 'cover',\r\n },\r\n}));\r\n\r\nconst LinkPreviewUrl = styled(Typography)(() => ({\r\n fontSize: tokens.typography.fontSize['text-md'],\r\n fontWeight: tokens.typography.fontWeight.regular,\r\n lineHeight: tokens.typography.lineHeight['text-md'],\r\n color: tokens.color.primary['700'],\r\n fontFamily: tokens.typography.fontFamily.body,\r\n textDecoration: 'underline',\r\n wordBreak: 'break-all',\r\n}));\r\n\r\nconst ReactionsContainer = styled(Box)(() => ({\r\n display: 'flex',\r\n gap: tokens.spacing.md,\r\n marginTop: tokens.spacing.md,\r\n}));\r\n\r\nconst ReactionBubble = styled(Box)(() => ({\r\n display: 'flex',\r\n alignItems: 'center',\r\n gap: tokens.spacing.xs,\r\n height: 24,\r\n padding: `0 ${tokens.spacing.md}`,\r\n backgroundColor: tokens.color.gray['50'],\r\n border: `1px solid ${tokens.color.gray['200']}`,\r\n borderRadius: tokens.borderRadius.full,\r\n cursor: 'pointer',\r\n transition: 'all 0.2s ease-in-out',\r\n '&:hover': {\r\n backgroundColor: tokens.color.gray['100'],\r\n borderColor: tokens.color.gray['300'],\r\n },\r\n}));\r\n\r\nconst ReactionEmoji = styled('span')(() => ({\r\n fontSize: tokens.typography.fontSize['text-sm'],\r\n lineHeight: 1,\r\n}));\r\n\r\nconst ReactionCount = styled(Typography)(() => ({\r\n fontSize: tokens.typography.fontSize['text-xs'],\r\n fontWeight: tokens.typography.fontWeight.medium,\r\n lineHeight: tokens.typography.lineHeight['text-xs'],\r\n color: tokens.color.gray['700'],\r\n fontFamily: tokens.typography.fontFamily.body,\r\n}));\r\n\r\nconst ActionPanel = styled(Box)<{ ownerState: { visible: boolean } }>(({ ownerState }) => ({\r\n position: 'absolute',\r\n top: -40,\r\n left: '50%',\r\n transform: 'translateX(-50%)',\r\n display: ownerState.visible ? 'flex' : 'none',\r\n alignItems: 'center',\r\n gap: tokens.spacing.xs,\r\n padding: tokens.spacing.xs,\r\n backgroundColor: tokens.color.gray['900'],\r\n border: `1px solid ${tokens.color.primary['500']}`,\r\n borderRadius: tokens.borderRadius.md,\r\n boxShadow: tokens.shadows.xl,\r\n zIndex: 10,\r\n}));\r\n\r\nconst ActionIconButton = styled(IconButton)(() => ({\r\n padding: tokens.spacing.md,\r\n borderRadius: tokens.borderRadius.sm,\r\n width: 32,\r\n height: 32,\r\n color: tokens.color.base.white,\r\n '&:hover': {\r\n backgroundColor: 'rgba(255, 255, 255, 0.1)',\r\n },\r\n '& .MuiSvgIcon-root': {\r\n fontSize: 16,\r\n },\r\n}));\r\n\r\nconst UserName = styled(Typography)(() => ({\r\n fontSize: tokens.typography.fontSize['text-sm'],\r\n fontWeight: tokens.typography.fontWeight.semibold,\r\n lineHeight: tokens.typography.lineHeight['text-sm'],\r\n color: tokens.color.gray['900'],\r\n fontFamily: tokens.typography.fontFamily.body,\r\n}));\r\n\r\nconst Timestamp = styled(Typography)(() => ({\r\n fontSize: tokens.typography.fontSize['text-xs'],\r\n fontWeight: tokens.typography.fontWeight.regular,\r\n lineHeight: tokens.typography.lineHeight['text-xs'],\r\n color: tokens.color.gray['600'],\r\n fontFamily: tokens.typography.fontFamily.body,\r\n}));\r\n\r\nconst OnlineIndicator = styled(Box)(() => ({\r\n width: 8,\r\n height: 8,\r\n borderRadius: '50%',\r\n backgroundColor: tokens.color.success['500'],\r\n border: `2px solid ${tokens.color.base.white}`,\r\n position: 'absolute',\r\n bottom: 2,\r\n right: 2,\r\n}));\r\n\r\nconst AvatarWrapper = styled(Box)(() => ({\r\n position: 'relative',\r\n flexShrink: 0,\r\n}));\r\n\r\nconst StatusIconWrapper = styled(Box)(() => ({\r\n display: 'flex',\r\n alignItems: 'center',\r\n color: tokens.color.primary['500'],\r\n}));\r\n\r\n/**\r\n * Message component - Chat message with avatar, reactions, and actions\r\n *\r\n * Features:\r\n * - Different styles for sent/received messages\r\n * - Avatar with online indicator for received messages\r\n * - Reply message preview with green border\r\n * - File attachments with colored icons\r\n * - Audio messages with waveform visualization\r\n * - Image attachments with file info\r\n * - Video messages with play overlay and action bar\r\n * - Link preview messages with open graph image\r\n * - Emoji reactions\r\n * - Action panel on hover (edit, copy, regenerate, star, download)\r\n * - Read status icon for sent messages\r\n */\r\nexport const Message: React.FC<MessageProps> = ({\r\n sent,\r\n userName,\r\n timestamp,\r\n content,\r\n avatar,\r\n online,\r\n reactions,\r\n statusIcon,\r\n replyTo,\r\n file,\r\n audio,\r\n image,\r\n video,\r\n linkPreview,\r\n showActions = false,\r\n onReaction,\r\n onEdit,\r\n onCopy,\r\n onRegenerate,\r\n onStar,\r\n onDownload,\r\n}) => {\r\n const [isHovered, setIsHovered] = useState(false);\r\n\r\n const getFileExtension = (type: string) => {\r\n const extensions: Record<string, string> = {\r\n 'jpg': 'JPG',\r\n 'jpeg': 'JPG',\r\n 'png': 'PNG',\r\n 'pdf': 'PDF',\r\n 'doc': 'DOC',\r\n 'docx': 'DOCX',\r\n };\r\n return extensions[type.toLowerCase()] || type.toUpperCase();\r\n };\r\n\r\n const getFileColor = (type: string, customColor?: string) => {\r\n if (customColor) return customColor;\r\n const colors: Record<string, string> = {\r\n 'jpg': tokens.color.success['500'],\r\n 'jpeg': tokens.color.success['500'],\r\n 'png': tokens.color.success['500'],\r\n 'pdf': tokens.color.error['500'],\r\n 'doc': tokens.color.primary['500'],\r\n 'docx': tokens.color.primary['500'],\r\n };\r\n return colors[type.toLowerCase()] || tokens.color.gray['500'];\r\n };\r\n\r\n const generateWaveformHeights = () => {\r\n // Generate random heights for waveform bars\r\n const heights = [8, 16, 12, 20, 16, 24, 20, 16, 12, 20, 24, 16, 20, 12, 16, 20, 24, 20, 16, 12];\r\n return heights;\r\n };\r\n\r\n const renderAudioMessage = () => {\r\n if (!audio) return null;\r\n\r\n return (\r\n <AudioContainer>\r\n <PlayButton size=\"small\">\r\n <PlayArrowIcon />\r\n </PlayButton>\r\n <WaveformContainer ownerState={{ color: audio.waveformColor }}>\r\n {generateWaveformHeights().map((height, index) => (\r\n <WaveformBar\r\n key={index}\r\n ownerState={{\r\n height,\r\n color: audio.waveformColor || tokens.color.primary['600'],\r\n }}\r\n />\r\n ))}\r\n </WaveformContainer>\r\n <AudioDuration>{audio.duration}</AudioDuration>\r\n </AudioContainer>\r\n );\r\n };\r\n\r\n const renderImageMessage = () => {\r\n if (!image) return null;\r\n\r\n return (\r\n <ImageContainer>\r\n <ImageWrapper ownerState={{ aspectRatio: image.aspectRatio }}>\r\n <img src={image.url} alt={image.name} />\r\n </ImageWrapper>\r\n <ImageInfo>\r\n <ImageName>{image.name}</ImageName>\r\n <ImageSize>{image.size}</ImageSize>\r\n </ImageInfo>\r\n </ImageContainer>\r\n );\r\n };\r\n\r\n const renderVideoMessage = () => {\r\n if (!video) return null;\r\n\r\n return (\r\n <VideoContainer>\r\n <img src={video.thumbnail || 'https://picsum.photos/560/315'} alt=\"Video thumbnail\" />\r\n <VideoOverlay>\r\n <PlayArrowIcon sx={{ fontSize: 32 }} />\r\n </VideoOverlay>\r\n <VideoActionBar>\r\n <VideoActionButton size=\"small\">\r\n <PlayArrowIcon />\r\n </VideoActionButton>\r\n <VideoActionButton size=\"small\">\r\n <VolumeUpIcon />\r\n </VideoActionButton>\r\n <VideoActionButton size=\"small\">\r\n <FullscreenIcon />\r\n </VideoActionButton>\r\n </VideoActionBar>\r\n </VideoContainer>\r\n );\r\n };\r\n\r\n const renderLinkPreviewMessage = () => {\r\n if (!linkPreview) return null;\r\n\r\n return (\r\n <LinkPreviewContainer ownerState={{ sent }}>\r\n <LinkPreviewImage>\r\n <img src={linkPreview.imageUrl} alt=\"Link preview\" />\r\n </LinkPreviewImage>\r\n <LinkPreviewUrl>{linkPreview.url}</LinkPreviewUrl>\r\n </LinkPreviewContainer>\r\n );\r\n };\r\n\r\n // Determine if we should use CloudDownload instead of Edit\r\n const hasDownloadableContent = !!(file || audio || image);\r\n const showEditAction = onEdit && !hasDownloadableContent;\r\n const showDownloadAction = onDownload && hasDownloadableContent;\r\n\r\n return (\r\n <MessageContainer ownerState={{ sent }}>\r\n {!sent && (\r\n <AvatarWrapper>\r\n <Avatar src={avatar} size=\"xxs\" />\r\n {online && <OnlineIndicator />}\r\n </AvatarWrapper>\r\n )}\r\n <MessageWrapper>\r\n <MessageHeader ownerState={{ sent }}>\r\n <UserName>{userName}</UserName>\r\n <Timestamp>{timestamp}</Timestamp>\r\n {sent && statusIcon && (\r\n <StatusIconWrapper>\r\n <DoneAllIcon sx={{ fontSize: 16 }} />\r\n </StatusIconWrapper>\r\n )}\r\n </MessageHeader>\r\n <Box\r\n sx={{ position: 'relative' }}\r\n onMouseEnter={() => setIsHovered(true)}\r\n onMouseLeave={() => setIsHovered(false)}\r\n >\r\n {/* Image and video messages don't have a bubble wrapper */}\r\n {image ? (\r\n renderImageMessage()\r\n ) : video ? (\r\n renderVideoMessage()\r\n ) : linkPreview ? (\r\n renderLinkPreviewMessage()\r\n ) : (\r\n <MessageBubble\r\n ownerState={{\r\n sent,\r\n hasReply: !!replyTo,\r\n hasFile: !!file,\r\n }}\r\n >\r\n {replyTo && (\r\n <ReplyContainer>\r\n <ReplyUserName>{replyTo.userName}</ReplyUserName>\r\n <ReplyContent>{replyTo.content}</ReplyContent>\r\n </ReplyContainer>\r\n )}\r\n {content && <MessageContent>{content}</MessageContent>}\r\n {file && (\r\n <FileAttachment ownerState={{ color: getFileColor(file.type, file.color) }}>\r\n <FileIcon ownerState={{ color: getFileColor(file.type, file.color) }}>\r\n {getFileExtension(file.type)}\r\n </FileIcon>\r\n <FileInfo>\r\n <FileName>{file.name}</FileName>\r\n <FileSize>{file.size}</FileSize>\r\n </FileInfo>\r\n </FileAttachment>\r\n )}\r\n {audio && renderAudioMessage()}\r\n </MessageBubble>\r\n )}\r\n {showActions && (\r\n <ActionPanel ownerState={{ visible: isHovered }}>\r\n {onStar && (\r\n <ActionIconButton onClick={onStar} size=\"small\">\r\n <StarOutlineIcon />\r\n </ActionIconButton>\r\n )}\r\n {showDownloadAction && (\r\n <ActionIconButton onClick={onDownload} size=\"small\">\r\n <CloudDownloadIcon />\r\n </ActionIconButton>\r\n )}\r\n {showEditAction && (\r\n <ActionIconButton onClick={onEdit} size=\"small\">\r\n <EditIcon />\r\n </ActionIconButton>\r\n )}\r\n {onRegenerate && (\r\n <ActionIconButton onClick={onRegenerate} size=\"small\">\r\n <RefreshIcon />\r\n </ActionIconButton>\r\n )}\r\n {onCopy && (\r\n <ActionIconButton onClick={onCopy} size=\"small\">\r\n <ContentCopyIcon />\r\n </ActionIconButton>\r\n )}\r\n </ActionPanel>\r\n )}\r\n </Box>\r\n {reactions && reactions.length > 0 && (\r\n <ReactionsContainer>\r\n {reactions.map((reaction, index) => (\r\n <ReactionBubble\r\n key={index}\r\n onClick={() => onReaction && onReaction(reaction.emoji)}\r\n >\r\n <ReactionEmoji>{reaction.emoji}</ReactionEmoji>\r\n {reaction.count && <ReactionCount>{reaction.count}</ReactionCount>}\r\n </ReactionBubble>\r\n ))}\r\n </ReactionsContainer>\r\n )}\r\n </MessageWrapper>\r\n </MessageContainer>\r\n );\r\n};\r\n","// Theme\r\nexport { theme, tokens } from './theme/theme';\r\n\r\n// Components\r\nexport * from './components';\r\n\r\n// MUI re-exports (convenience)\r\nexport { ThemeProvider } from '@mui/material/styles';\r\nexport { CssBaseline } from '@mui/material';\r\n"],"mappings":"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","names":["borderRadiusTokens","borderRadiusTokens","colorTokens","borderRadiusTokens","borderRadiusTokens","colorTokens","borderRadiusTokens","jsx","jsx","jsxs","mapColorToMui","FormControlLabel","jsx","jsx","FormControlLabel","jsx","jsxs","UncheckedIcon","CheckedIcon","FormControlLabel","jsx","mapColorToMui","MuiTextField","jsx","mapColorToMui","mapColorToMui","jsx","mapColorToMui","styled","Box","default","jsx","jsxs","COLORS","styled","Box","default","styled","Box","jsx","jsxs","COLORS","styled","Box","Box","styled","jsx","jsxs","mapColorToMui","CircularProgress","sizeConfig","styled","Box","Box","jsx","jsx","jsx","jsx","Typography","mapColorToMui","jsx","jsx","mapColorToMui","Box","styled","Fragment","jsx","jsxs","styled","Box","Divider","theme","jsx","jsx","mapColorToMui","Box","Stack","jsx","mapColorToMui","jsx","jsxs","Box","Stack","default","jsx","jsx","jsx","jsx","React","Box","styled","useMediaQuery","useTheme","MenuItem","jsx","jsxs","Root","styled","Box","fontSize","lineHeight","theme","useTheme","useMediaQuery","React","default","MenuItem","React","Box","styled","useMediaQuery","useTheme","MenuItem","Select","jsx","jsxs","Root","styled","Box","TabButton","fontSize","lineHeight","MobileSelect","Select","defaultTabs","theme","useTheme","useMediaQuery","React","default","MenuItem","jsx","jsx","jsx","jsx","jsx","Box","styled","Divider","MuiAvatar","jsx","jsxs","styled","Box","AvatarWrapper","StyledAvatar","MuiAvatar","Badge","Divider","default","jsx","MenuItem","jsx","Select","jsx","FormControlLabel","jsx","IconButton","mapColorToMui","jsx","mapColorToMui","Box","IconButton","styled","jsx","jsxs","styled","Box","TextContainer","ActionsContainer","IconButton","default","jsx","Box","styled","jsx","jsxs","styled","Box","ContentContainer","TextContainer","DescriptionText","ActionsContainer","default","React","Box","styled","IconButton","Fragment","jsx","jsxs","styled","Box","Title","CloseButton","IconButton","Divider","ButtonGroup","React","default","Box","styled","MuiCheckbox","FormControlLabel","Divider","Fragment","jsx","jsxs","ActionsContainer","styled","Box","TertiaryButton","Divider","ModalActions","FormControlLabel","MuiCheckbox","default","Box","styled","IconButton","jsx","jsxs","styled","Box","ContentArea","FeaturedIconContainer","TextContainer","Title","Description","CloseButton","IconButton","Divider","ModalHeader","renderIcon","default","jsx","jsx","jsx","React","Fragment","jsx","jsxs","React","Box","React","styled","Box","styled","IconButton","useMediaQuery","useTheme","Fragment","jsx","jsxs","Root","styled","Box","IconButton","theme","useTheme","useMediaQuery","default","jsx","jsxs","styled","Box","Typography","default","IconButton","React","React","styled","jsx","jsxs","styled","Box","Typography","React","default","MuiDrawer","styled","useMediaQuery","useTheme","jsx","jsxs","FeaturedIconContainer","styled","Box","theme","HeaderContainer","TextContainer","IconButton","useTheme","useMediaQuery","MuiDrawer","Typography","default","React","Box","MuiIconButton","MuiMenu","MenuItem","Divider","CircularProgress","LinearProgress","Fragment","jsx","jsxs","React","MuiIconButton","default","Box","MuiMenu","MenuItem","Divider","CircularProgress","LinearProgress","Box","MuiIconButton","Drawer","jsx","jsxs","Box","MuiIconButton","default","Drawer","Box","MuiIconButton","jsx","jsxs","Box","default","MuiIconButton","Box","styled","LinearProgress","IconButton","jsx","jsxs","styled","Box","default","FileTypeIcon","Divider","IconButton","LinearProgress","PercentageText","React","Box","styled","Tabs","Tab","useMediaQuery","useTheme","jsx","jsxs","Root","styled","Box","HeaderContent","TextContent","Title","TertiaryButton","SecondaryButton","PrimaryButton","SearchIconWrapper","ButtonGroup","DropdownButton","TabsContainer","Tabs","Tab","Divider","theme","useTheme","useMediaQuery","React","default","Box","styled","jsx","jsxs","Root","styled","Box","typography","Box","styled","jsx","styled","Box","Box","styled","jsx","jsxs","styled","Box","CenterContent","Label","Box","IconButton","styled","SettingsOutlinedIcon","Fragment","jsx","jsxs","Root","styled","Box","Label","Value","fontSize","lineHeight","letterSpacing","DropdownButton","IconButton","FeaturedIcon","isChartType","ActionButton","ChartContainer","SettingsOutlinedIcon","useState","styled","jsx","jsxs","styled","Box","Typography","FileInfo","FileName","IconButton","AvatarWrapper","useState","default"]}
|