@mx-cartographer/experiences 9.1.6 → 9.2.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"file":"index.es.js","sources":["../../src/investments/components/EmptyStateFooterComponent.tsx","../../src/investments/components/allocation/util/createInvestementsAllocationData.tsx","../../src/investments/components/allocation/InvestementAllocationList.tsx","../../src/investments/components/allocation/InvestmentsAllocationChart.tsx","../../src/investments/components/Allocation.tsx","../../src/investments/components/AnalysisDetails.tsx","../../src/investments/components/InfoToolTip.tsx","../../src/investments/components/Analysis.tsx","../../src/investments/components/HoldingDrawer.tsx","../../src/investments/components/HeaderCell.tsx","../../src/investments/components/HoldingTable.tsx","../../src/investments/components/Overview.tsx","../../src/investments/components/TabTitle.tsx","../../src/investments/InvestmentsWidget.tsx"],"sourcesContent":["import Button from '@mui/material/Button'\nimport Stack from '@mui/material/Stack'\nimport { type SxProps } from '@mui/material/styles'\n\nimport { Text } from '@mxenabled/mxui'\n\nimport { ANALYTICS_EVENTS, useEvent, useGlobalCopyStore, useHoldingStore } from '../../common'\n\ninterface EmptyStateFooterComponentProps {\n sx?: SxProps\n}\n\nexport const EmptyStateFooterComponent = ({ sx = {} }: EmptyStateFooterComponentProps) => {\n const { investments: copy } = useGlobalCopyStore()\n const { onEvent } = useEvent()\n const { setShowConnectionsWidget } = useHoldingStore()\n\n return (\n <Stack sx={{ alignItems: 'center', gap: 24, height: 164, p: 24, width: '100%', ...sx }}>\n <Stack\n className=\"inner-container\"\n sx={{\n alignItems: 'center',\n gap: 8,\n width: '100%',\n textAlign: 'center',\n }}\n >\n <Text sx={{ fontWeight: 600 }} variant=\"body1\">\n {copy.overview.investment_accounts_footer}\n </Text>\n <Text\n sx={{\n color: 'text.secondary',\n fontWeight: 400,\n }}\n variant=\"subtitle2\"\n >\n {copy.overview.connect_more_accounts_description}\n </Text>\n </Stack>\n <Button\n onClick={() => {\n setShowConnectionsWidget(true)\n onEvent(ANALYTICS_EVENTS.ACCOUNTS_CLICK_CONNECT)\n }}\n sx={{ fontWeight: 600 }}\n variant=\"outlined\"\n >\n {copy.overview.connect_accounts}\n </Button>\n </Stack>\n )\n}\n","import { Account, Holding } from '../../../../core'\nimport { InvestmentAllocationCopy } from '../../../../core/types/localization/InvestmentsCopy'\nimport type { DonutData } from '../InvestmentsAllocationChart'\nimport { formatCurrency, formatPercentage } from '../../../../core/utils/NumberFormatting'\n\nexport interface InvestmentsAllocationData {\n name: string\n displayName: string\n guid: string\n holdings: InvestmentAllocationTotals[]\n percentage: number\n value: number\n color: string\n}\nexport interface InvestmentAllocationTotals {\n displayName: string\n name: string\n value: number\n percentage: number\n}\n\nconst allocationColors = {\n allocations_cash: '#AEDCCC',\n allocations_convertible: '#80CAD0',\n allocations_foreign_bond: '#51B9D4',\n allocations_foreign_stock: '#3DA0C9',\n allocations_other: '#3583B8',\n allocations_preferred: '#2D66A7',\n allocations_unknown: '#161D6A',\n allocations_us_bond: '#254995',\n allocations_us_stock: '#1E2D84',\n}\nconst allocationsList = [\n {\n name: 'allocations_cash',\n },\n {\n name: 'allocations_convertible',\n },\n {\n name: 'allocations_foreign_bond',\n },\n {\n name: 'allocations_foreign_stock',\n },\n {\n name: 'allocations_other',\n },\n {\n name: 'allocations_preferred',\n },\n {\n name: 'allocations_us_bond',\n },\n {\n name: 'allocations_us_stock',\n },\n {\n name: 'allocations_unknown',\n },\n]\n\nconst inRange = (n: number, start: number, end?: number) => {\n const rangeStart = end === undefined ? 0 : start\n const rangeEnd = end === undefined ? start : end\n return n >= Math.min(rangeStart, rangeEnd) && n < Math.max(rangeStart, rangeEnd)\n}\n\nconst createHoldingsData = (\n holdings: Holding[],\n allocationName: string,\n allocationValue: number,\n) => {\n const uniqueHoldings = [\n ...new Set(holdings.map((holding: Holding) => holding.name.toLowerCase())),\n ]\n let displayName: string\n const investmentAllocationTotals = uniqueHoldings.map((holdingName) => {\n // sum all the holdings with the same \"name\"\n const holdingsTotalValue = holdings.reduce((acc, hold: Holding) => {\n const name = hold.name\n\n if (name.toLowerCase() === holdingName) {\n // Since we lose the capitalization with the unique names, we take it from the last match.\n displayName = name\n return (\n (getHoldingValue(hold) * hold[allocationName as keyof typeof allocationColors]) / 100 +\n acc\n )\n }\n\n return acc\n }, 0)\n\n return {\n displayName,\n name: displayName,\n value: holdingsTotalValue,\n percentage: holdingsTotalValue / allocationValue,\n }\n })\n return investmentAllocationTotals\n}\n\nconst getHoldingValue = (holding: Holding) =>\n holding.calculated_market_value ? holding.calculated_market_value : holding.market_value\n\nexport const createInvestmentsAllocationData = (\n accounts: Account[],\n copy: InvestmentAllocationCopy,\n holdings: Holding[],\n) => {\n const allocationListDisplayNames = Object.values(copy.allocations_list)\n const investementAllocationData: InvestmentsAllocationData[] = []\n\n let totalAmount = 0\n\n const accountGuids = accounts.map(({ guid }) => guid)\n const updatedHoldings: Holding[] = holdings\n .filter(({ account_guid }) => accountGuids.includes(account_guid))\n .map((eachHolding) => {\n return {\n ...eachHolding,\n name: eachHolding.symbol || eachHolding.description,\n gainLoss:\n eachHolding.cost_basis || eachHolding.cost_basis === 0\n ? getHoldingValue(eachHolding) - eachHolding.cost_basis\n : 0,\n }\n })\n\n const { cashBalance, totalAccountBalance } = accounts.reduce(\n (sum, account) => {\n return {\n cashBalance: sum.cashBalance + (account.cash_balance || 0),\n totalAccountBalance: sum.totalAccountBalance + (account.balance || 0),\n }\n },\n { cashBalance: 0, totalAccountBalance: 0 },\n )\n const { marketValue, totalGainLoss } = updatedHoldings.reduce(\n (acc, holding) => {\n return {\n marketValue: acc.marketValue + getHoldingValue(holding),\n totalGainLoss: acc.totalGainLoss + holding.gainLoss,\n }\n },\n { marketValue: 0, totalGainLoss: 0 },\n )\n const totalMarketValue = marketValue + cashBalance\n\n allocationsList.forEach((allocation, index) => {\n const filteredHoldings = updatedHoldings.filter(\n (eachHolding) => !!eachHolding[allocation.name as keyof typeof allocationColors],\n )\n let holdingsTotal = filteredHoldings.reduce(\n (sum, holding) =>\n sum +\n (getHoldingValue(holding) * holding[allocation.name as keyof typeof allocationColors]) /\n 100,\n 0,\n )\n const investmentAllocationTotals = createHoldingsData(\n filteredHoldings,\n allocation.name,\n holdingsTotal,\n )\n if (allocation.name === 'allocations_cash' && cashBalance > 0) {\n // Updating holdingsTotal to include cash balance\n // This affects the holdingsTotal and percentage for this allocation\n holdingsTotal += cashBalance\n\n // Creating a holding item for cash balance\n const cashBalanceHolding = {\n displayName: copy.cash_balance_display_name,\n name: 'allocations_name',\n value: cashBalance,\n percentage: cashBalance / totalMarketValue,\n }\n\n investmentAllocationTotals.push(cashBalanceHolding)\n }\n\n // Shows allocation if holdingsTotal is greater than zero\n if (holdingsTotal > 0) {\n investementAllocationData.push({\n name: allocation.name,\n displayName: allocationListDisplayNames[index],\n guid: `${allocation.name}-${index}`,\n holdings: investmentAllocationTotals,\n percentage: holdingsTotal / totalMarketValue,\n value: holdingsTotal,\n color: allocationColors[allocation.name as keyof typeof allocationColors],\n })\n totalAmount += holdingsTotal\n }\n })\n const donutData: DonutData[] = investementAllocationData.map(\n ({ displayName, guid, color, value }) => ({\n id: guid,\n color: color,\n label: displayName,\n value: (value / totalAmount) * 100,\n }),\n )\n\n return {\n investmentsData: investementAllocationData,\n donutData,\n totalAmount,\n totalGainLoss,\n totalMarketValue,\n totalGainLossPercentage: totalGainLoss / totalAccountBalance,\n }\n}\n\nexport const percentageDisplay = (value: number) =>\n value < 0.001 ? '< 0.1%' : formatPercentage(value)\n\nexport const currencyDisplay = (value: number) => {\n if (value === 0) return formatCurrency(value, '0,0.00')\n return inRange(value, -0.01, 0.01) ? '< $0.01' : formatCurrency(value, '0,0.00')\n}\n","import React from 'react'\n\nimport Box from '@mui/material/Box'\nimport Collapse from '@mui/material/Collapse'\nimport Divider from '@mui/material/Divider'\nimport List from '@mui/material/List'\nimport ListItem from '@mui/material/ListItem'\nimport ListItemButton from '@mui/material/ListItemButton'\nimport Stack from '@mui/material/Stack'\nimport ToggleButton from '@mui/material/ToggleButton'\nimport ToggleButtonGroup from '@mui/material/ToggleButtonGroup'\n\nimport { Text } from '@mxenabled/mxui'\n\nimport { useGlobalCopyStore, useScreenSize } from '../../../common'\nimport { EmptyStateFooterComponent } from '../EmptyStateFooterComponent'\nimport { InvestmentsData } from './InvestmentsAllocationChart'\nimport { currencyDisplay, percentageDisplay } from './util/createInvestementsAllocationData'\n\ninterface InvestmentAllocationListProps {\n data: InvestmentsData\n onSelected: (id: string) => void\n selectedId?: string\n selectedTabs: number\n setSelectedTabs: (value: number) => void\n}\n\nexport const InvestementAllocationList = ({\n data,\n onSelected,\n selectedId,\n selectedTabs,\n setSelectedTabs,\n}: InvestmentAllocationListProps) => {\n const handleChange = (_: React.SyntheticEvent, newValue: number) => {\n if (newValue !== null) {\n setSelectedTabs(newValue)\n }\n }\n const { isMobile } = useScreenSize()\n const {\n investments: { allocation: copy },\n } = useGlobalCopyStore()\n\n const toggleButtonsList = [\n { label: copy.tabs_label_dollar, value: 0 },\n { label: copy.tabs_label_percent, value: 1 },\n ]\n const isEmptyState = !data?.investmentsData.length\n const { isSmallMobile } = useScreenSize()\n\n return (\n <Stack sx={{ mt: 15, gap: 12, width: isMobile ? 250 : 412 }}>\n <ToggleButtonGroup\n exclusive={true}\n fullWidth={true}\n onChange={handleChange}\n value={isEmptyState ? -1 : selectedTabs}\n >\n {toggleButtonsList.map(({ label, value }) => (\n <ToggleButton color=\"primary\" key={label} value={value}>\n <Text bold={true} textTransform={'capitalize'} variant=\"body1\">\n {label}\n </Text>\n </ToggleButton>\n ))}\n </ToggleButtonGroup>\n\n <List sx={{ px: 12 }}>\n {data.investmentsData.map((item) => (\n <React.Fragment key={item.guid}>\n <ListItem\n disableGutters={true}\n disablePadding={true}\n sx={{\n minHeight: 44,\n }}\n >\n <ListItemButton\n aria-expanded={Boolean(selectedId === item.guid)}\n onClick={() => onSelected(item.guid)}\n sx={{ minHeight: 44, px: 12, py: 0 }}\n >\n <Box\n borderRadius={4}\n flexShrink={0}\n height={8}\n sx={{ backgroundColor: item.color, mr: 8 }}\n width={8}\n />\n <Stack\n alignItems=\"center\"\n direction=\"row\"\n justifyContent=\"space-between\"\n width=\"100%\"\n >\n <Text bold={selectedId === item.guid}>{item.displayName}</Text>\n <Text bold={selectedId === item.guid} variant=\"body1\">\n {selectedTabs === 0\n ? currencyDisplay(item.value)\n : percentageDisplay(item.percentage)}\n </Text>\n </Stack>\n </ListItemButton>\n </ListItem>\n\n <Divider />\n\n {item.holdings && item.holdings.length > 0 && (\n <Collapse in={Boolean(selectedId === item.guid)} unmountOnExit={true}>\n <List>\n {item?.holdings?.map((subItem) => (\n <ListItem\n key={subItem.displayName}\n sx={{\n pl: 24,\n pr: 8,\n py: 0,\n }}\n >\n <Stack direction=\"row\" justifyContent=\"space-between\" width=\"100%\">\n <Text>{subItem.displayName} </Text>\n <Text>\n {selectedTabs === 0\n ? currencyDisplay(subItem.value)\n : percentageDisplay(subItem.percentage)}\n </Text>\n </Stack>\n </ListItem>\n ))}\n <Divider />\n </List>\n </Collapse>\n )}\n </React.Fragment>\n ))}\n </List>\n {isEmptyState ? (\n <>\n <Text sx={{ color: 'secondary.main', p: 8, textAlign: 'center' }}>{copy.empty_data}</Text>\n <Divider />\n <EmptyStateFooterComponent\n sx={{\n '.inner-container': { width: isSmallMobile ? '100%' : 364 },\n }}\n />\n </>\n ) : (\n selectedTabs === 0 && (\n <Text bold={true} sx={{ textAlign: 'right', pr: 24 }}>\n {`${copy.total_label_text} ${currencyDisplay(data.totalAmount)}`}\n </Text>\n )\n )}\n </Stack>\n )\n}\n","import React from 'react'\n\nimport Stack from '@mui/material/Stack'\nimport { useTheme } from '@mui/material/styles'\n\nimport { P, Text } from '@mxenabled/mxui'\nimport { Icon } from '@mxenabled/mx-icons'\n\nimport { useGlobalCopyStore } from '../../../common'\nimport Donut from '../../../common/components/charts/Donut'\n\nimport {\n currencyDisplay,\n InvestmentsAllocationData,\n percentageDisplay,\n} from './util/createInvestementsAllocationData'\n\nexport interface DonutData {\n id: string\n label?: string\n color: string\n value: number\n}\nexport interface InvestmentsData {\n investmentsData: InvestmentsAllocationData[]\n donutData: DonutData[]\n totalAmount: number\n totalGainLoss: number\n totalMarketValue: number\n totalGainLossPercentage: number\n}\ninterface InvestementAllocationProps {\n data: InvestmentsData\n hoveredId?: string\n isPercentage?: boolean\n onSelected: (id: string) => void\n onMouseEnter: (id: string) => void\n onMouseLeave: (id: string) => void\n selectedId?: string\n size?: number\n totalLabel: string\n}\n\nexport const InvestementsAllocationChart: React.FC<InvestementAllocationProps> = ({\n data,\n hoveredId,\n isPercentage,\n onMouseEnter,\n onMouseLeave,\n onSelected,\n selectedId,\n size = 150,\n totalLabel,\n}) => {\n const theme = useTheme()\n const isDarkMode = theme.palette.mode === 'dark'\n\n const selectedInvestments = React.useMemo(\n () =>\n selectedId\n ? data.investmentsData.find(({ guid }: InvestmentsAllocationData) => guid === selectedId)\n : undefined,\n [selectedId],\n )\n const {\n investments: { allocation: copy },\n } = useGlobalCopyStore()\n const donutData = React.useMemo(() => {\n if (data.donutData.length > 0) return data.donutData\n\n // Empty Donut zero state\n return [{ id: '0', color: theme.palette.neutral.light, value: 100 }]\n }, [data, theme])\n\n const gainDisplayColor = isDarkMode ? '#0AC295' : '#09A57F'\n const lossDisplayColor = isDarkMode ? 'grey.300' : 'grey.700'\n\n const getGainLossDisplay = () => {\n if (selectedInvestments) return copy.pie_chart_centered_click_for_details\n if (isPercentage) return percentageDisplay(data.totalGainLossPercentage)\n return currencyDisplay(data.totalGainLoss)\n }\n\n const gainLossDisplayColor = data.totalGainLoss >= 0 ? gainDisplayColor : lossDisplayColor\n\n return (\n <Donut\n data={donutData}\n hoveredId={hoveredId}\n onClick={onSelected}\n onMouseEnter={onMouseEnter}\n onMouseLeave={onMouseLeave}\n selectedId={selectedId}\n size={size}\n >\n <Stack alignItems=\"center\" height=\"100%\" justifyContent=\"center\" width=\"100%\">\n <Stack alignItems=\"center\" justifyContent=\"center\" minHeight={size} minWidth={size}>\n <Stack alignItems=\"center\" sx={{ gap: { xs: 4, xl: 8 }, mb: { xs: 4, xl: 8 } }}>\n <Text color=\"text.secondary\" noWrap={true}>\n {selectedInvestments?.displayName ?? totalLabel}\n </Text>\n <P color=\"text.primary\" variant=\"h1\">\n {currencyDisplay(selectedInvestments?.value ?? data.totalMarketValue)}\n </P>\n\n <Stack sx={{ alignItems: 'center', flexDirection: 'row', gap: 4 }}>\n {!selectedInvestments && (\n <Icon\n name={data.totalGainLoss >= 0 ? 'trending_up' : 'trending_down'}\n size={20}\n sx={{ color: gainLossDisplayColor }}\n />\n )}\n <Text\n sx={{\n color: gainLossDisplayColor,\n fontWeight: 700,\n }}\n variant=\"body2\"\n >\n {getGainLossDisplay()}\n </Text>\n </Stack>\n </Stack>\n </Stack>\n </Stack>\n </Donut>\n )\n}\n","import React from 'react'\n\nimport Stack from '@mui/material/Stack'\nimport useMediaQuery from '@mui/material/useMediaQuery'\n\nimport { observer } from 'mobx-react-lite'\n\nimport { InvestementAllocationList } from './allocation/InvestementAllocationList'\nimport { InvestementsAllocationChart } from './allocation/InvestmentsAllocationChart'\nimport { createInvestmentsAllocationData } from './allocation/util/createInvestementsAllocationData'\nimport {\n useAccountStore,\n useGlobalCopyStore,\n useGlobalUiStore,\n useHoldingStore,\n useScreenSize,\n} from '../../common'\n\nconst Allocation = () => {\n const [selectedTabs, setSelectedTabs] = React.useState(0)\n const [selectedId, setSelectedId] = React.useState('')\n const [hoveredId, setHoveredId] = React.useState('')\n const onSelected = (id: string) => {\n if (selectedId !== id) {\n setSelectedId(id)\n } else {\n setSelectedId('')\n setHoveredId('')\n }\n }\n const { selectedAccountGuids } = useGlobalUiStore()\n const { visibleHoldings: allHoldings } = useHoldingStore()\n const { visibleInvestmentAccounts: accounts } = useAccountStore()\n const {\n investments: { allocation: copy },\n } = useGlobalCopyStore()\n const investmentAllocationData = createInvestmentsAllocationData(\n accounts.filter(({ guid }) => selectedAccountGuids.includes(guid)),\n copy,\n allHoldings,\n )\n const { isMobile } = useScreenSize()\n const isScreenDeviceTablet = useMediaQuery('(max-width:768px)')\n\n return (\n <Stack\n alignItems={isScreenDeviceTablet ? 'center' : 'flex-start'}\n direction={isScreenDeviceTablet ? 'column' : 'row'}\n gap={{ xs: 16, md: 64, xl: 100 }}\n sx={{\n justifyContent: 'center',\n mt: 50,\n width: '100%',\n }}\n >\n <InvestementsAllocationChart\n data={investmentAllocationData}\n hoveredId={hoveredId}\n isPercentage={selectedTabs === 1}\n onMouseEnter={(id) => {\n if (selectedId === id) {\n setHoveredId('')\n } else if (!selectedId) {\n setHoveredId(id)\n }\n }}\n onMouseLeave={() => {\n setHoveredId('')\n }}\n onSelected={onSelected}\n selectedId={selectedId}\n size={isMobile ? 280 : 400}\n totalLabel={copy.pie_chart_centered_text}\n />\n <InvestementAllocationList\n data={investmentAllocationData}\n onSelected={onSelected}\n selectedId={selectedId}\n selectedTabs={selectedTabs}\n setSelectedTabs={setSelectedTabs}\n />\n </Stack>\n )\n}\n\nexport default observer(Allocation)\n","import React from 'react'\n\nimport Divider from '@mui/material/Divider'\nimport List from '@mui/material/List'\nimport ListItem from '@mui/material/ListItem'\nimport ListItemText from '@mui/material/ListItemText'\nimport Stack from '@mui/material/Stack'\nimport ToggleButton from '@mui/material/ToggleButton'\nimport ToggleButtonGroup from '@mui/material/ToggleButtonGroup'\n\nimport { Text } from '@mxenabled/mxui'\n\nimport { useScreenSize } from '../../common'\nimport { AnalysisType } from '../../core/constants/Investments'\nimport { formatKey } from '../../core/utils/InvestmentUtil'\n\nimport { EmptyStateFooterComponent } from './EmptyStateFooterComponent'\nimport { formatCurrency } from '../../core/utils/NumberFormatting'\n\ninterface Copy {\n bonds: string\n equities: string\n empty_data: string\n}\n\ninterface AnalysisDetailsProps {\n analysisDetails: Record<string, number>\n analysisType: AnalysisType\n copy: Copy\n setAnalysisType: (type: AnalysisType) => void\n}\n\nconst AnalysisDetails: React.FC<AnalysisDetailsProps> = ({\n analysisDetails,\n analysisType,\n copy,\n setAnalysisType,\n}) => {\n const { isSmallMobile } = useScreenSize()\n\n const listItems = React.useMemo(() => {\n return Object.keys(analysisDetails)\n .filter((key) => analysisDetails[key] >= 1)\n .map((key) => ({\n key,\n value: formatCurrency(analysisDetails[key], '0,0'),\n formattedKey: formatKey(key),\n }))\n }, [analysisDetails])\n\n const toggleButtons = [\n { label: copy.equities, value: AnalysisType.Stocks },\n { label: copy.bonds, value: AnalysisType.Bonds },\n ]\n return (\n <Stack sx={{ gap: 12, width: { md: 412 } }}>\n <ToggleButtonGroup\n color=\"primary\"\n exclusive={true}\n onChange={(_, value) => value && setAnalysisType(value)}\n sx={{\n width: '100%',\n '& .MuiToggleButton-root': {\n color: 'secondary.main',\n fontWeight: 600,\n textTransform: 'capitalize',\n },\n }}\n value={listItems.length ? analysisType : -1}\n >\n {toggleButtons.map(({ label, value }) => (\n <ToggleButton key={value} sx={{ width: '100%' }} value={value}>\n {label}\n </ToggleButton>\n ))}\n </ToggleButtonGroup>\n\n {listItems.length ? (\n <List\n sx={{\n '& .MuiListItemSecondaryAction-root': { pr: 12 },\n '& .MuiListItem-divider': { borderColor: 'neutral.light' },\n '& .MuiListItem-root': { minHeight: 44, px: 12 },\n }}\n >\n {listItems.map(({ value, formattedKey }) => (\n <ListItem divider={true} key={formattedKey} secondaryAction={<Text>{value}</Text>}>\n <ListItemText\n primary={formattedKey}\n slotProps={{ primary: { fontStyle: 'normal' } }}\n />\n </ListItem>\n ))}\n </List>\n ) : (\n <>\n <Text sx={{ color: 'secondary.main', p: 8, textAlign: 'center' }}>{copy.empty_data}</Text>\n <Divider sx={{ borderColor: 'neutral.light' }} />\n <EmptyStateFooterComponent\n sx={{\n '.inner-container': { width: isSmallMobile ? '100%' : 364 },\n }}\n />\n </>\n )}\n </Stack>\n )\n}\n\nexport default AnalysisDetails\n","import React from 'react'\n\nimport IconButton from '@mui/material/IconButton'\nimport Stack from '@mui/material/Stack'\nimport Tooltip from '@mui/material/Tooltip'\n\nimport { P, Text } from '@mxenabled/mxui'\nimport { Icon } from '@mxenabled/mx-icons'\n\ninterface InfoTooltipProps {\n placement?: 'top' | 'bottom' | 'left' | 'right'\n tooltip_info_body: string\n tooltip_info_title: string\n}\n\ninterface TooltipContentProps {\n body: string\n title: string\n}\n\nconst TooltipContent: React.FC<TooltipContentProps> = ({ body, title }) => (\n <Stack sx={{ gap: 4, p: 12 }}>\n <Text bold={true} variant=\"body1\">\n {title}\n </Text>\n <P variant=\"subtitle2\">{body}</P>\n </Stack>\n)\n\nconst InfoTooltip: React.FC<InfoTooltipProps> = ({\n placement = 'bottom',\n tooltip_info_body,\n tooltip_info_title,\n}) => (\n <Tooltip\n enterTouchDelay={500}\n placement={placement}\n title={<TooltipContent body={tooltip_info_body} title={tooltip_info_title} />}\n >\n <IconButton aria-label={tooltip_info_title} sx={{ minHeight: 0, minWidth: 0, p: 0 }}>\n <Icon name=\"info\" sx={{ color: 'info.main' }} />\n </IconButton>\n </Tooltip>\n)\n\nexport default InfoTooltip\n","import React from 'react'\nimport { observer } from 'mobx-react-lite'\n\nimport Stack from '@mui/material/Stack'\nimport { useTheme } from '@mui/material/styles'\nimport useMediaQuery from '@mui/material/useMediaQuery'\n\nimport { P, Text } from '@mxenabled/mxui'\n\nimport { useGlobalCopyStore, useHoldingStore, useScreenSize } from '../../common'\n\nimport { AnalysisType } from '../../core/constants/Investments'\n\nimport AnalysisDetails from './AnalysisDetails'\nimport InfoTooltip from './InfoToolTip'\n\nconst Analysis: React.FC = () => {\n const {\n investments: { analysis: copy },\n } = useGlobalCopyStore()\n const { analysisChartData, analysisDetails, analysisType, setAnalysisType } = useHoldingStore()\n\n const isSmallMobileDevice = useMediaQuery('(min-width:320px) and (max-width:375px)')\n const { isMobile } = useScreenSize()\n\n const theme = useTheme()\n const isDark = theme.palette.mode === 'dark'\n\n const { cellDimension, columns, rows, textVariant } = React.useMemo(() => {\n const isStocks = analysisType === AnalysisType.Stocks\n\n const columns = isStocks\n ? Object.values(copy.stock_column_labels)\n : Object.values(copy.bond_column_labels)\n const rows = isStocks\n ? Object.values(copy.stock_row_labels)\n : Object.values(copy.bond_row_labels)\n\n const textVariant: 'body1' | 'caption' = isMobile ? 'caption' : 'body1'\n const cellDimension = isMobile ? 72 : 100\n\n return { cellDimension, columns, rows, textVariant }\n }, [copy, isMobile, analysisType])\n\n return (\n <Stack\n sx={{\n flexDirection: { md: 'row' },\n gap: isMobile ? 48 : 64,\n justifyContent: 'center',\n pt: 48,\n px: 16,\n }}\n >\n <Stack\n sx={{\n alignItems: 'center',\n flexDirection: 'row',\n justifyContent: 'center',\n pr: { lg: 72 },\n }}\n >\n <Stack\n sx={{\n alignItems: 'center',\n bottom: isMobile ? 10 : 24,\n gap: isMobile ? 0 : 24,\n position: 'relative',\n transform: 'rotate(-180deg)',\n writingMode: 'vertical-rl',\n }}\n >\n <P bold={true} color=\"secondary.main\" variant={textVariant}>\n {analysisType === AnalysisType.Stocks\n ? copy.market_capitalization\n : copy.credit_quality}\n </P>\n <Stack\n sx={{\n flexDirection: 'row',\n height: isMobile ? 224 : 308,\n justifyContent: 'space-around',\n }}\n >\n {columns.map((label) => (\n <Text\n key={label}\n sx={{\n color: 'secondary.main',\n pl: 12,\n pr: isMobile ? 4 : 0,\n }}\n variant={textVariant}\n >\n {label}\n </Text>\n ))}\n </Stack>\n </Stack>\n <Stack sx={{ gap: 4 }}>\n <Stack\n sx={{\n alignSelf: isSmallMobileDevice ? 'start' : 'center',\n flexDirection: 'row',\n gap: 8,\n pb: 12,\n }}\n >\n <Text bold={true}>{copy.invest_analysis}</Text>\n <InfoTooltip\n tooltip_info_body={copy.tooltip_info_body}\n tooltip_info_title={copy.tooltip_info_title}\n />\n </Stack>\n {analysisChartData.map((row, rowIndex, data) => (\n <Stack key={rowIndex} sx={{ flexDirection: 'row', gap: 4 }}>\n {row.map((value, colIndex) => {\n const isFirstRow = rowIndex === 0\n const isLastRow = rowIndex === data.length - 1\n const isFirstCol = colIndex === 0\n const isLastCol = colIndex === row.length - 1\n\n const isHigh = Number(value.replace('%', '')) >= 25\n\n let bgcolor = 'grey.200'\n let color = 'grey.900'\n\n if (isDark) {\n bgcolor = isHigh ? 'grey.200' : 'grey.700'\n color = isHigh ? 'grey.900' : 'common.white'\n } else {\n bgcolor = isHigh ? 'grey.700' : 'grey.200'\n color = isHigh ? 'common.white' : 'grey.900'\n }\n\n const borderRadius = {\n borderBottomLeftRadius: isLastRow && isFirstCol ? 4 : 0,\n borderBottomRightRadius: isLastRow && isLastCol ? 4 : 0,\n borderTopLeftRadius: isFirstRow && isFirstCol ? 4 : 0,\n borderTopRightRadius: isFirstRow && isLastCol ? 4 : 0,\n }\n return (\n <Stack\n key={colIndex}\n sx={{\n ...borderRadius,\n alignItems: 'center',\n bgcolor,\n height: cellDimension,\n justifyContent: 'center',\n width: cellDimension,\n }}\n >\n <Text\n sx={{\n color,\n fontWeight: isMobile ? 600 : 700,\n }}\n variant={isMobile ? 'body1' : 'h3'}\n >\n {value}\n </Text>\n </Stack>\n )\n })}\n </Stack>\n ))}\n <Stack sx={{ alignSelf: 'center', flexDirection: 'row', pt: 12 }}>\n {rows.map((label) => (\n <Stack key={label} sx={{ alignItems: 'center', width: cellDimension }}>\n <Text color=\"secondary.main\" variant={textVariant}>\n {label}\n </Text>\n </Stack>\n ))}\n </Stack>\n <Text\n bold={true}\n sx={{ color: 'secondary.main', pt: isMobile ? 4 : 24, textAlign: 'center' }}\n variant={textVariant}\n >\n {analysisType === AnalysisType.Stocks ? copy.valuation : copy.duration}\n </Text>\n </Stack>\n </Stack>\n <AnalysisDetails\n analysisDetails={analysisDetails}\n analysisType={analysisType}\n copy={{\n empty_data: copy.empty_data,\n equities: copy.equities,\n bonds: copy.bonds,\n }}\n setAnalysisType={setAnalysisType}\n />\n </Stack>\n )\n}\n\nexport default observer(Analysis)\n","import React from 'react'\n\nimport { observer } from 'mobx-react-lite'\n\nimport Accordion from '@mui/material/Accordion'\nimport AccordionDetails from '@mui/material/AccordionDetails'\nimport AccordionSummary from '@mui/material/AccordionSummary'\nimport IconButton from '@mui/material/IconButton'\nimport TextField from '@mui/material/TextField'\nimport Stack from '@mui/system/Stack'\n\nimport { Icon } from '@mxenabled/mx-icons'\n\nimport { InstitutionLogo, Text } from '@mxenabled/mxui'\n\nimport { Drawer } from '../../common'\nimport { useGlobalCopyStore } from '../../common'\n\ninterface HoldingDetail {\n id: string\n description: string\n qty: number\n holding: string\n costBasis: number\n totalGainLoss: number\n marketValue: number\n}\n\ninterface InvestmentDetailsDrawerProps {\n accountHoldingsData: {\n accounts: any\n holdings: HoldingDetail[]\n }\n currentEditedCostBasis: string\n editingHoldingId: string | null\n handleCostBasisBlur: (id: string) => void\n handleCostBasisChange: (event: React.ChangeEvent<HTMLInputElement>) => void\n handleCostBasisClick: (holdingId: string, currentCostBasis: number) => void\n handleCostBasisKeyDown: (event: React.KeyboardEvent<HTMLInputElement>, id: string) => void\n isOpen: boolean\n onClose: () => void\n}\n\nconst InvestmentDetailsDrawer: React.FC<InvestmentDetailsDrawerProps> = ({\n accountHoldingsData,\n currentEditedCostBasis,\n editingHoldingId,\n handleCostBasisBlur,\n handleCostBasisClick,\n handleCostBasisChange,\n handleCostBasisKeyDown,\n isOpen,\n onClose,\n}) => {\n const { investments: copy } = useGlobalCopyStore()\n const [expandedStates, setExpandedStates] = React.useState<Record<string, boolean>>({})\n\n const handleAccordionChange =\n (holdingId: string) => (_event: React.SyntheticEvent, isExpanded: boolean) => {\n setExpandedStates((prevStates) => ({\n ...prevStates,\n [holdingId]: isExpanded,\n }))\n }\n\n return (\n <Drawer\n ariaLabelClose={copy.overview.close_investment_drawer}\n isOpen={isOpen}\n onClose={onClose}\n title={copy.overview.investment_details}\n >\n <Stack sx={{ gap: 8, p: 24 }}>\n <InstitutionLogo\n alt={accountHoldingsData.accounts.institutionName || ''}\n institutionGuid={accountHoldingsData.accounts.institution_guid || ''}\n size={64}\n />\n <Text sx={{ color: 'text.primary' }} variant=\"body2\">\n {accountHoldingsData.accounts.memberName}\n </Text>\n <Text sx={{ color: 'text.primary' }} variant=\"h2\">\n {accountHoldingsData.accounts.user_name || accountHoldingsData.accounts.name}\n </Text>\n\n <Stack sx={{ alignItems: 'center', flexDirection: 'row', justifyContent: 'space-between' }}>\n <Text sx={{ color: 'text.primary', fontWeight: 600 }} variant=\"body1\">\n {copy.overview.current_balance}\n </Text>\n\n <Text sx={{ color: 'text.primary', fontWeight: 600 }} variant=\"body1\">\n {accountHoldingsData.accounts.balance?.toLocaleString('en-US', {\n currency: 'USD',\n maximumFractionDigits: 2,\n minimumFractionDigits: 2,\n style: 'currency',\n })}\n </Text>\n </Stack>\n </Stack>\n\n <Stack\n sx={{\n bgcolor: 'background.default',\n flexDirection: 'row',\n justifyContent: 'space-between',\n px: 24,\n py: 10,\n }}\n >\n <Text sx={{ color: 'text.primary', fontWeight: 700 }} variant=\"caption\">\n {copy.overview.holding}\n </Text>\n <Text sx={{ color: 'text.primary', fontWeight: 700 }} variant=\"caption\">\n {copy.overview.market_value}\n </Text>\n </Stack>\n {accountHoldingsData.holdings?.map((holding, index) => {\n const isCurrentlyEditing = editingHoldingId === holding.id\n return (\n <Accordion\n disableGutters={true}\n expanded={expandedStates[holding.id] === true}\n key={holding.id}\n onChange={holding ? handleAccordionChange(holding?.id) : () => {}}\n sx={{\n ':before': index === 0 ? { opacity: 0 } : {},\n '.MuiAccordionDetails-root': { p: 0 },\n }}\n >\n <AccordionSummary\n aria-controls=\"panel1a-content\"\n id=\"panel1a-header\"\n sx={[\n { height: 64 },\n expandedStates[holding.id] &&\n index > 0 && {\n borderTop: 1,\n borderColor: 'divider',\n },\n ]}\n >\n <Stack sx={{ flexDirection: 'row', width: '100%' }}>\n <div style={{ width: 24 }} />\n <Stack\n sx={[\n {\n alignItems: 'center',\n flexDirection: 'row',\n justifyContent: 'space-between',\n pr: 24,\n py: 14,\n width: '100%',\n },\n expandedStates[holding.id] && {\n borderBottom: 1,\n borderColor: 'divider',\n },\n ]}\n >\n <Stack\n sx={{\n alignItems: 'center',\n flexDirection: 'row',\n gap: 12,\n }}\n >\n <Stack sx={{ overflow: 'hidden', width: 98 }}>\n <Text sx={{ fontWeight: 600 }} variant=\"body1\">\n {holding.holding}\n </Text>\n <Text variant=\"caption\">{holding.description}</Text>\n </Stack>\n </Stack>\n\n <Stack\n sx={{\n alignItems: 'center',\n flex: 1,\n flexDirection: 'row',\n gap: 12,\n justifyContent: 'flex-end',\n }}\n >\n <Stack>\n <Text sx={{ fontWeight: 600, textAlign: 'right' }} variant={'body1'}>\n {holding.marketValue?.toLocaleString('en-US', {\n currency: 'USD',\n maximumFractionDigits: 2,\n minimumFractionDigits: 2,\n style: 'currency',\n })}\n </Text>\n <Stack sx={{ alignItems: 'center', gap: 2, flexDirection: 'row' }}>\n {holding.totalGainLoss !== 0 && (\n <Icon\n name={holding.totalGainLoss >= 0 ? 'trending_up' : 'trending_down'}\n size={12}\n sx={{\n verticalAlign: 'middle',\n mr: 1,\n color: holding.totalGainLoss >= 0 ? 'success.main' : 'grey.700',\n }}\n />\n )}\n <Text\n sx={{\n color: holding.totalGainLoss <= 0 ? 'grey.700' : 'success.main',\n fontWeight: holding.totalGainLoss <= 0 ? 400 : 700,\n }}\n variant=\"caption\"\n >\n {holding.costBasis\n ? `${((holding.totalGainLoss / holding.costBasis) * 100).toFixed(2)}%`\n : '0.00%'}\n </Text>\n <Text sx={{ color: 'grey.700' }} variant=\"caption\">\n |\n </Text>\n <Text\n sx={{\n color: holding.totalGainLoss <= 0 ? 'grey.700' : 'success.main',\n fontWeight: holding.totalGainLoss <= 0 ? 400 : 700,\n }}\n variant=\"caption\"\n >\n {Math.abs(holding.totalGainLoss).toLocaleString('en-US', {\n currency: 'USD',\n maximumFractionDigits: 2,\n minimumFractionDigits: 2,\n style: 'currency',\n })}\n </Text>\n </Stack>\n </Stack>\n\n <Icon\n name={expandedStates[holding.id] ? 'expand_less' : 'expand_more'}\n size={20}\n />\n </Stack>\n </Stack>\n </Stack>\n </AccordionSummary>\n <AccordionDetails>\n <Stack\n sx={{\n alignItems: 'center',\n bgcolor: 'background.default',\n flexDirection: 'row',\n pl: 24,\n }}\n >\n <Stack sx={{ width: 32 }} />\n <Stack sx={{ flex: 1 }}>\n <Stack\n sx={{\n alignItems: 'center',\n borderBottom: 1,\n borderColor: 'divider',\n flexDirection: 'row',\n height: 48,\n justifyContent: 'space-between',\n pr: 24,\n }}\n >\n <Text sx={{ color: 'text.primary' }} variant=\"body1\">\n {copy.overview.quantity}\n </Text>\n <Text sx={{ color: 'text.primary' }} variant=\"body2\">\n {holding.qty}\n </Text>\n </Stack>\n <Stack\n sx={{\n alignItems: 'center',\n flexDirection: 'row',\n height: 48,\n justifyContent: 'space-between',\n pr: 24,\n }}\n >\n <Text sx={{ color: 'text.primary' }} variant=\"body1\">\n {copy.overview.cost_basis_header}\n </Text>\n\n <Stack\n direction=\"row\"\n sx={{\n alignItems: 'center',\n gap: 4,\n }}\n >\n {isCurrentlyEditing ? (\n <TextField\n autoFocus={true}\n onBlur={() => handleCostBasisBlur(holding.id)}\n onChange={handleCostBasisChange}\n onKeyDown={(e: React.KeyboardEvent<HTMLInputElement>) =>\n handleCostBasisKeyDown(e, holding.id)\n }\n size=\"small\"\n sx={{\n fontSize: 14,\n width: 58,\n '& .MuiInputBase-input': {\n padding: '4px 0',\n textAlign: 'center',\n fontWeight: 600,\n color: 'text.primary',\n },\n '& .MuiOutlinedInput-notchedOutline': {\n border: 'none',\n },\n }}\n value={currentEditedCostBasis}\n />\n ) : (\n <Text sx={{ fontSize: 14, width: 58 }} variant=\"body2\">\n {holding.costBasis?.toLocaleString('en-US', {\n currency: 'USD',\n maximumFractionDigits: 2,\n minimumFractionDigits: 2,\n style: 'currency',\n })}\n </Text>\n )}\n\n <IconButton\n onClick={() => handleCostBasisClick(holding.id, holding.costBasis)}\n sx={{ minWidth: 16, minHeight: 16 }}\n >\n <Icon name={'stylus'} size={16} sx={{ color: 'grey.700' }} />\n </IconButton>\n </Stack>\n </Stack>\n </Stack>\n </Stack>\n </AccordionDetails>\n </Accordion>\n )\n })}\n </Drawer>\n )\n}\n\nexport default observer(InvestmentDetailsDrawer)\n","import { Text } from '@mxenabled/mxui'\nimport { GridColumnHeaderParams } from '@mui/x-data-grid'\nimport { Icon } from '@mxenabled/mx-icons'\nimport { Stack } from '@mui/material'\n\nexport const HeaderCell = (params: GridColumnHeaderParams) => (\n <Stack sx={{ alignItems: 'center', flexDirection: 'row', gap: 4 }}>\n <Text sx={{ color: 'text.primary', fontWeight: 600, fontSize: 14 }} variant=\"body2\">\n {params.colDef.headerName}\n </Text>\n <Icon name={'expand_all'} size={12} />\n </Stack>\n)\n","import React from 'react'\n\nimport Stack from '@mui/material/Stack'\nimport Paper from '@mui/material/Paper'\nimport IconButton from '@mui/material/IconButton'\nimport TextField from '@mui/material/TextField'\nimport { useTheme } from '@mui/material/styles'\nimport { DataGridPro, GridColDef } from '@mui/x-data-grid-pro'\n\nimport { Icon } from '@mxenabled/mx-icons'\n\nimport { Text } from '@mxenabled/mxui'\n\nimport { useGlobalCopyStore } from '../../common'\n\nimport { HeaderCell } from './HeaderCell'\n\ninterface HoldingDetail {\n id: string\n description: string\n qty: number\n holding: string\n costBasis: number\n totalGainLoss: number\n marketValue: number\n}\n\ninterface HoldingsTableProps {\n data: HoldingDetail[]\n editingHoldingId: string | null\n currentEditedCostBasis: string\n handleCostBasisClick: (holdingId: string, currentCostBasis: number) => void\n handleCostBasisChange: (event: React.ChangeEvent<HTMLInputElement>) => void\n handleCostBasisKeyDown: (event: React.KeyboardEvent<HTMLInputElement>, id: string) => void\n handleCostBasisBlur: (id: string) => void\n}\n\nconst HoldingsTable: React.FC<HoldingsTableProps> = ({\n data,\n editingHoldingId,\n currentEditedCostBasis,\n handleCostBasisClick,\n handleCostBasisChange,\n handleCostBasisKeyDown,\n handleCostBasisBlur,\n}) => {\n const { investments: copy } = useGlobalCopyStore()\n const theme = useTheme()\n\n const isDarkMode = theme.palette.mode === 'dark'\n const gainDisplayColor = 'success.main'\n const lossDisplayColor = isDarkMode ? 'grey.300' : 'grey.700'\n\n const gainLossDisplayColor = (value: number, type: string = 'lesserThan') => {\n if (type === 'greaterThan') {\n return value >= 0 ? gainDisplayColor : lossDisplayColor\n }\n return value <= 0 ? lossDisplayColor : gainDisplayColor\n }\n\n const columns: GridColDef[] = [\n {\n field: 'qty',\n headerName: copy.overview.qty_header,\n sortable: false,\n width: 48,\n align: 'center',\n headerAlign: 'center',\n },\n {\n field: 'holding',\n headerName: copy.overview.holding_header,\n flex: 1,\n renderHeader: HeaderCell,\n renderCell: (params) => (\n <Stack sx={{ alignItems: 'center', gap: 16, flexDirection: 'row' }}>\n <Stack>\n {/* TODO :InstitutionLogo in future */}\n <Text sx={{ fontWeight: 700 }}>{params.row.holding}</Text>\n <Text sx={{ color: 'text.secondary', fontWeight: 400 }} variant=\"tiny\">\n {params.row.description}\n </Text>\n </Stack>\n </Stack>\n ),\n },\n {\n field: 'costBasis',\n headerName: copy.overview.cost_basis_header,\n width: 132,\n renderHeader: HeaderCell,\n renderCell: (params) => {\n const isCurrentlyEditing = editingHoldingId === params.row.id\n return (\n <Stack sx={{ alignItems: 'center', flexDirection: 'row', gap: 4 }}>\n {isCurrentlyEditing ? (\n <TextField\n autoFocus={true}\n onBlur={() => handleCostBasisBlur(params.row.id)}\n onChange={handleCostBasisChange}\n onKeyDown={(e: React.KeyboardEvent<HTMLInputElement>) =>\n handleCostBasisKeyDown(e, params.row.id)\n }\n size=\"small\"\n sx={{\n fontSize: 14,\n width: 57,\n '& .MuiInputBase-input': {\n padding: '4px 0',\n textAlign: 'center',\n fontWeight: 600,\n color: 'text.primary',\n },\n '& .MuiOutlinedInput-notchedOutline': {\n border: 'none',\n },\n }}\n value={currentEditedCostBasis}\n />\n ) : (\n <Text sx={{ fontSize: 14, width: 57 }} variant=\"body2\">\n {params.value?.toLocaleString('en-US', {\n currency: 'USD',\n maximumFractionDigits: 2,\n minimumFractionDigits: 2,\n style: 'currency',\n })}\n </Text>\n )}\n <IconButton\n onClick={() => handleCostBasisClick(params.row.id, params.row.costBasis)}\n sx={{ minWidth: 12, minHeight: 12 }}\n >\n <Icon name={'stylus'} size={12} sx={{ color: 'grey.700' }} />\n </IconButton>\n </Stack>\n )\n },\n align: 'center',\n headerAlign: 'center',\n },\n {\n field: 'totalGainLoss',\n headerName: copy.overview.total_gain_loss_header,\n width: 196,\n renderHeader: HeaderCell,\n renderCell: (params) => {\n const costBasis = params.row.costBasis\n const gainLossPercentage = costBasis ? (params.row.totalGainLoss / costBasis) * 100 : 0\n return (\n <Stack sx={{ alignItems: 'center', flexDirection: 'row', gap: 2 }}>\n {params.value !== 0 && (\n <Icon\n name={params.value > 0 ? 'trending_up' : 'trending_down'}\n size={16}\n sx={{\n color: gainLossDisplayColor(params.value),\n mr: 1,\n verticalAlign: 'middle',\n }}\n />\n )}\n <Text\n sx={{\n color: gainLossDisplayColor(params.value),\n fontWeight: params.value > 0 ? 700 : 400,\n }}\n variant=\"body2\"\n >\n {costBasis ? `${gainLossPercentage.toFixed(2)}%` : '0.00%'}\n </Text>\n <Text sx={{ color: 'text.secondary' }} variant=\"caption\">\n |\n </Text>\n <Text\n sx={{\n color: gainLossDisplayColor(params.value),\n fontWeight: params.value > 0 ? 700 : 400,\n }}\n variant=\"body2\"\n >\n {Math.abs(params.value).toLocaleString('en-US', {\n currency: 'USD',\n maximumFractionDigits: 2,\n minimumFractionDigits: 2,\n style: 'currency',\n })}\n </Text>\n </Stack>\n )\n },\n align: 'right',\n headerAlign: 'right',\n sortable: false,\n },\n {\n field: 'marketValue',\n headerName: copy.overview.market_value_header,\n width: 132,\n renderHeader: HeaderCell,\n renderCell: (params) => (\n <Text sx={{ fontWeight: 700 }} variant={'body2'}>\n {params.value?.toLocaleString('en-US', {\n currency: 'USD',\n maximumFractionDigits: 2,\n minimumFractionDigits: 2,\n style: 'currency',\n })}\n </Text>\n ),\n align: 'right',\n headerAlign: 'right',\n },\n ]\n\n return (\n <Paper\n sx={{\n boxShadow: 'none',\n width: '100%',\n }}\n >\n <DataGridPro\n columns={columns}\n disableColumnFilter={true}\n disableColumnMenu={true}\n disableRowSelectionOnClick={true}\n hideFooter={true}\n rows={data}\n slotProps={{ baseIconButton: { sx: { display: 'none' } } }}\n />\n </Paper>\n )\n}\n\nexport default HoldingsTable\n","import React, { useState } from 'react'\n\nimport { observer } from 'mobx-react-lite'\nimport Accordion from '@mui/material/Accordion'\nimport AccordionDetails from '@mui/material/AccordionDetails'\nimport AccordionSummary from '@mui/material/AccordionSummary'\nimport Paper from '@mui/material/Paper'\nimport Stack from '@mui/system/Stack'\nimport { useTheme } from '@mui/material/styles'\nimport { Icon } from '@mxenabled/mx-icons'\nimport { InstitutionLogo, P, Text } from '@mxenabled/mxui'\n\nimport ConnectionsDrawer from '../../accounts/components/ConnectionsDrawer'\nimport {\n Loader,\n useAccountStore,\n useGlobalCopyStore,\n useGlobalUiStore,\n useHoldingStore,\n useScreenSize,\n} from '../../common'\nimport { EmptyStateFooterComponent } from './EmptyStateFooterComponent'\nimport InvestmentDetailsDrawer from './HoldingDrawer'\nimport HoldingsTable from './HoldingTable'\n\ninterface HoldingDetail {\n id: string\n description: string\n qty: number\n holding: string\n costBasis: number\n totalGainLoss: number\n marketValue: number\n}\n\nconst Overview = () => {\n const { isMobile } = useScreenSize()\n const [expandedStates, setExpandedStates] = useState<Record<string, boolean>>({})\n const [openDrawer, setOpenDrawer] = useState(false)\n const { selectedAccountGuids } = useGlobalUiStore()\n const { visibleHoldings: holdings, updateHoldings } = useHoldingStore()\n const [showConnectionsWidget, setShowConnectionsWidget] = React.useState(false)\n\n const [accountHoldingsData, setAccountHoldingsData] = useState<{\n accounts: any\n holdings: HoldingDetail[]\n }>({\n accounts: [],\n holdings: [],\n })\n const { accounts: accountsCopy, investments: copy } = useGlobalCopyStore()\n const { isCopyLoaded } = useGlobalUiStore()\n const [editingHoldingId, setEditingHoldingId] = useState<string | null>(null)\n const [currentEditedCostBasis, setCurrentEditedCostBasis] = useState<string>('')\n\n const theme = useTheme()\n\n const isDarkMode = theme.palette.mode === 'dark'\n\n const gainDisplayColor = isDarkMode ? '#0AC295' : '#09A57F'\n\n const lossDisplayColor = isDarkMode ? 'grey.300' : 'grey.700'\n\n const gainLossDisplayColor = (value: number, type: string = 'lesserThan') => {\n if (type === 'greaterThan') {\n return value >= 0 ? gainDisplayColor : lossDisplayColor\n }\n return value <= 0 ? lossDisplayColor : gainDisplayColor\n }\n\n const handleCostBasisClick = (holdingId: string, currentCostBasis: number) => {\n setEditingHoldingId(holdingId)\n setCurrentEditedCostBasis(currentCostBasis.toFixed(2))\n }\n\n const handleCostBasisChange = (event: React.ChangeEvent<HTMLInputElement>) => {\n // Allow only numbers and a single decimal point\n const value = event.target.value\n if (/^\\d*\\.?\\d*$/.test(value)) {\n setCurrentEditedCostBasis(value)\n }\n }\n\n const handleCostBasisKeyDown = (event: React.KeyboardEvent<HTMLInputElement>, id: string) => {\n if (event.key === 'Enter') {\n handleCostBasisBlur(id)\n } else if (event.key === 'Escape') {\n setEditingHoldingId(null)\n }\n }\n\n const handleCostBasisBlur = (id: string) => {\n const holding = holdings.find(({ guid }) => guid === id)\n if (!holding) return\n\n const updatedCostBasis = Number(currentEditedCostBasis)\n updateHoldings({ ...holding, cost_basis: updatedCostBasis })\n\n if (isMobile) {\n const updatedHoldings = accountHoldingsData.holdings.map((h) =>\n h.id === id ? { ...h, costBasis: updatedCostBasis } : h,\n )\n\n setAccountHoldingsData((prev) => ({\n ...prev,\n holdings: updatedHoldings,\n }))\n }\n\n setEditingHoldingId(null)\n }\n\n const handleAccordionChange =\n (accountId: string) => (_event: React.SyntheticEvent, isExpanded: boolean) => {\n setExpandedStates((prevStates) => ({\n ...prevStates,\n [accountId]: isExpanded,\n }))\n }\n\n const { visibleHoldings: allHoldings } = useHoldingStore()\n const { visibleInvestmentAccounts } = useAccountStore()\n\n const accounts = visibleInvestmentAccounts.filter(({ guid }) =>\n selectedAccountGuids.includes(guid),\n )\n\n const totalPortfolioValue = accounts.reduce((sum, account) => sum + (account.balance || 0), 0)\n\n const accountGuids = accounts.map(({ guid }) => guid)\n\n const updatedHoldings = allHoldings.filter(({ account_guid }) =>\n accountGuids.includes(account_guid),\n )\n\n const gainLoss = updatedHoldings.reduce((sum, holding) => {\n const hl = holding.market_value ? holding.market_value - (holding.cost_basis || 0) : 0\n return sum + hl\n }, 0)\n\n const closeDrawer = () => {\n setOpenDrawer(false)\n }\n\n if (!isCopyLoaded) {\n return <Loader />\n }\n\n return (\n <Stack sx={{ alignItems: 'center', gap: 48, pt: 48, width: '100%' }}>\n {/* header content */}\n {!!accounts.length && (\n <Stack sx={{ alignItems: 'center' }}>\n <Text sx={{ color: 'text.secondary' }}>{copy.overview.total_portfolio}</Text>\n <P variant=\"h1\">\n {totalPortfolioValue.toLocaleString('en-US', {\n currency: 'USD',\n maximumFractionDigits: 2,\n minimumFractionDigits: 2,\n style: 'currency',\n })}\n </P>\n <Stack sx={{ alignItems: 'center', flexDirection: 'row', gap: 8 }}>\n <Icon\n name={gainLoss >= 0 ? 'trending_up' : 'trending_down'}\n size={20}\n sx={{ color: gainLossDisplayColor(gainLoss, 'greaterThan') }}\n />\n <Text\n sx={{ color: gainLossDisplayColor(gainLoss, 'greaterThan'), fontWeight: 700 }}\n variant=\"body2\"\n >\n {gainLoss.toLocaleString('en-US', {\n currency: 'USD',\n maximumFractionDigits: 2,\n minimumFractionDigits: 2,\n style: 'currency',\n })}\n </Text>\n </Stack>\n </Stack>\n )}\n\n {accounts.map((account) => {\n const accountHoldings: HoldingDetail[] = allHoldings\n .filter((holding) => holding.account_guid === account.guid)\n .map((holding) => ({\n id: holding.guid,\n qty: holding.shares || 0,\n holding: holding.symbol || holding.description || 'Unknown',\n costBasis: holding.cost_basis || 0,\n totalGainLoss: holding.market_value\n ? holding.market_value - (holding.cost_basis || 0)\n : 0,\n marketValue: holding.market_value || 0,\n description: holding.description || '',\n }))\n\n const hasHoldingsData = accountHoldings.length > 0\n\n const accountTotalValue = account.balance\n const accountGainLoss = accountHoldings.reduce(\n (sum, holding) => holding.totalGainLoss + sum,\n 0,\n )\n\n const accountGainLossPercentage = accountTotalValue\n ? (accountGainLoss / accountTotalValue) * 100\n : 0\n\n // Mobile View: Use a simplified presentation\n if (isMobile) {\n return (\n <Paper\n key={account.guid}\n onClick={\n accountHoldings.length\n ? () => {\n setOpenDrawer(true)\n setAccountHoldingsData({\n holdings: accountHoldings,\n accounts: account,\n })\n }\n : undefined\n }\n sx={{\n width: '100%',\n overflow: 'hidden',\n }}\n >\n <Stack\n sx={{\n border: 1,\n borderColor: 'divider',\n borderRadius: '8px',\n ml: 16,\n mr: 16,\n overflow: 'hidden',\n pt: 14,\n }}\n >\n <Stack\n sx={{\n alignItems: 'center',\n borderBottom: 1,\n borderColor: 'divider',\n flexDirection: 'row',\n pb: 14,\n pl: 14,\n pr: 14,\n }}\n >\n <InstitutionLogo\n alt={account.institutionName || ''}\n institutionGuid={account.institution_guid || ''}\n size={32}\n />\n <Stack sx={{ overflow: 'hidden', pl: 13, pr: 13 }}>\n <Text sx={{ color: 'text.secondary' }} variant=\"caption\">\n {account.memberName}\n </Text>\n <Text sx={{ color: 'text.primary', fontWeight: 600 }} variant=\"body1\">\n {account.user_name || account.name}\n </Text>\n </Stack>\n </Stack>\n\n <Stack\n sx={{\n alignItems: 'center',\n flexDirection: 'row',\n justifyContent: 'space-between',\n pb: 8,\n pt: 8,\n }}\n >\n <Stack\n sx={{\n alignItems: 'center',\n borderRight: 1,\n borderColor: 'divider',\n flex: 1,\n justifyContent: 'center',\n pb: 14,\n pl: 7,\n pr: 7,\n pt: 14,\n }}\n >\n <Text sx={{ color: 'text.secondary', fontSize: 11 }} variant=\"body2\">\n {copy.overview.total_gain_Loss}\n </Text>\n <Stack\n sx={{\n alignItems: 'center',\n flexDirection: 'row',\n gap: 2,\n justifyContent: 'flex-end',\n }}\n >\n {accountGainLoss !== 0 && (\n <Icon\n name={accountGainLoss > 0 ? 'trending_up' : 'trending_down'}\n size={20}\n sx={{ color: gainLossDisplayColor(accountGainLoss) }}\n />\n )}\n <Text\n sx={{\n color: gainLossDisplayColor(accountGainLoss),\n fontWeight: 600,\n }}\n variant=\"body1\"\n >\n {accountGainLossPercentage.toFixed(2)}%\n </Text>\n <Text sx={{ color: 'text.secondary' }} variant=\"caption\">\n |\n </Text>\n <Text\n sx={{\n color: gainLossDisplayColor(accountGainLoss),\n fontWeight: 600,\n }}\n variant=\"body1\"\n >\n {Math.abs(accountGainLoss).toLocaleString('en-US', {\n currency: 'USD',\n maximumFractionDigits: 2,\n minimumFractionDigits: 2,\n style: 'currency',\n })}\n </Text>\n </Stack>\n </Stack>\n\n <Stack\n sx={{\n alignItems: 'center',\n flex: 1,\n justifyContent: 'center',\n pb: 14,\n pl: 7,\n pr: 7,\n pt: 14,\n }}\n >\n <Text sx={{ color: 'text.secondary' }} variant=\"caption\">\n {copy.overview.total_value}\n </Text>\n <Text sx={{ color: 'text.primary', fontWeight: 600 }} variant=\"body1\">\n {accountTotalValue?.toLocaleString('en-US', {\n currency: 'USD',\n maximumFractionDigits: 2,\n minimumFractionDigits: 2,\n style: 'currency',\n })}\n </Text>\n </Stack>\n </Stack>\n </Stack>\n </Paper>\n )\n }\n\n const disabledColor = isDarkMode ? 'grey.700' : 'grey.400'\n const logoColor = accountHoldings.length ? 'text.primary' : disabledColor\n\n return (\n <Accordion\n expanded={expandedStates[account.guid] === true}\n key={account.guid}\n onChange={hasHoldingsData ? handleAccordionChange(account.guid) : () => {}}\n sx={{\n border: 1,\n borderColor: 'divider',\n borderRadius: '4px',\n width: '100%',\n }}\n >\n <AccordionSummary\n aria-controls=\"panel1a-content\"\n id=\"panel1a-header\"\n sx={[\n expandedStates[account.guid] && {\n borderBottom: 1,\n borderColor: 'divider',\n maxHeight: 88,\n },\n ]}\n >\n <Stack\n sx={{\n alignItems: 'center',\n flexDirection: 'row',\n gap: 13,\n p: 14,\n width: '100%',\n }}\n >\n <Icon name={'expand_more'} size={20} sx={{ color: logoColor }} />\n <InstitutionLogo\n alt={account.institutionName || ''}\n institutionGuid={account.institution_guid || ''}\n size={32}\n />\n\n <Stack sx={{ alignItems: 'flex-start' }}>\n <Text sx={{ color: 'text.secondary' }} variant=\"caption\">\n {account.memberName}\n </Text>\n <Text sx={{ color: 'text.primary', fontWeight: 600 }} variant=\"body1\">\n {account.user_name || account.name}\n </Text>\n </Stack>\n </Stack>\n\n <Stack sx={{ flexDirection: 'row' }}>\n <Stack sx={{ alignItems: 'flex-end', pb: 14, pl: 24, pr: 24, pt: 14 }}>\n <Text sx={{ color: 'text.secondary' }} variant=\"caption\">\n {copy.overview.total_gain_Loss}\n </Text>\n\n <Stack\n sx={{\n alignItems: 'center',\n flexDirection: 'row',\n gap: 2,\n justifyContent: 'flex-end',\n }}\n >\n {accountGainLoss !== 0 && (\n <Icon\n name={accountGainLoss >= 0 ? 'trending_up' : 'trending_down'}\n size={20}\n sx={{ color: gainLossDisplayColor(accountGainLoss) }}\n />\n )}\n <Text\n sx={{\n color: gainLossDisplayColor(accountGainLoss),\n fontWeight: 600,\n }}\n variant=\"body1\"\n >\n {accountGainLossPercentage.toFixed(2)}%\n </Text>\n <Text sx={{ color: 'text.secondary' }} variant=\"caption\">\n |\n </Text>\n <Text\n sx={{\n color: gainLossDisplayColor(accountGainLoss),\n fontWeight: 600,\n }}\n variant=\"body1\"\n >\n {Math.abs(accountGainLoss).toLocaleString('en-US', {\n currency: 'USD',\n maximumFractionDigits: 2,\n minimumFractionDigits: 2,\n style: 'currency',\n })}\n </Text>\n </Stack>\n </Stack>\n\n <Stack sx={{ alignItems: 'flex-end', gap: 12, pb: 14, pl: 16, pr: 16, pt: 14 }}>\n <Stack sx={{ alignItems: 'flex-end' }}>\n <Text sx={{ color: 'text.secondary' }} variant=\"caption\">\n {copy.overview.total_value}\n </Text>\n <Text sx={{ color: 'text.primary', fontWeight: 600 }} variant=\"body1\">\n {accountTotalValue?.toLocaleString('en-US', {\n currency: 'USD',\n maximumFractionDigits: 2,\n minimumFractionDigits: 2,\n style: 'currency',\n })}\n </Text>\n </Stack>\n </Stack>\n </Stack>\n </AccordionSummary>\n <AccordionDetails sx={{ bgcolor: 'background.default', p: 12 }}>\n <Paper sx={{ border: 1, borderColor: 'neutral.light' }}>\n <HoldingsTable\n currentEditedCostBasis={currentEditedCostBasis}\n data={accountHoldings}\n editingHoldingId={editingHoldingId}\n handleCostBasisBlur={handleCostBasisBlur}\n handleCostBasisChange={handleCostBasisChange}\n handleCostBasisClick={handleCostBasisClick}\n handleCostBasisKeyDown={handleCostBasisKeyDown}\n />\n </Paper>\n </AccordionDetails>\n </Accordion>\n )\n })}\n\n {/* footer content */}\n <EmptyStateFooterComponent />\n\n {/* Drawer Component */}\n <InvestmentDetailsDrawer\n accountHoldingsData={accountHoldingsData}\n currentEditedCostBasis={currentEditedCostBasis}\n editingHoldingId={editingHoldingId}\n handleCostBasisBlur={handleCostBasisBlur}\n handleCostBasisChange={handleCostBasisChange}\n handleCostBasisClick={handleCostBasisClick}\n handleCostBasisKeyDown={handleCostBasisKeyDown}\n isOpen={openDrawer}\n onClose={closeDrawer}\n />\n\n <ConnectionsDrawer\n onClose={() => setShowConnectionsWidget(false)}\n showConnectionsWidget={showConnectionsWidget}\n title={accountsCopy.manage_connections}\n />\n </Stack>\n )\n}\n\nexport default observer(Overview)\n","import { Text } from '@mxenabled/mxui'\n\ninterface TabTitleProps {\n title: string\n}\n\nexport const TabTitle = ({ title }: TabTitleProps) => (\n <Text bold={true} variant=\"body1\">\n {title}\n </Text>\n)\n","import React from 'react'\nimport { observer } from 'mobx-react-lite'\n\nimport Stack from '@mui/material/Stack'\nimport Tab from '@mui/material/Tab'\nimport Tabs from '@mui/material/Tabs'\n\nimport {\n ANALYTICS_EVENTS,\n EmptyState,\n Loader,\n useAccountStore,\n useEvent,\n useGlobalCopyStore,\n useGlobalUiStore,\n useHoldingStore,\n useScreenSize,\n useWidgetLoadTimer,\n WidgetContainer,\n} from '../common'\nimport { AccountType, WidgetProps } from '../core'\n\nimport ConnectionsDrawer from '../accounts/components/ConnectionsDrawer'\nimport Allocation from './components/Allocation'\nimport Analysis from './components/Analysis'\nimport Overview from './components/Overview'\nimport { TabTitle } from './components/TabTitle'\n\nexport const InvestmentsWidget = observer(({ onBackClick, onMenuClick, sx }: WidgetProps) => {\n const { onEvent } = useEvent()\n const { isMobile } = useScreenSize()\n const {\n isAccountDataLoaded,\n loadAccountData,\n visibleInvestmentAccounts: accounts,\n } = useAccountStore()\n const {\n visibleHoldings: holdings,\n setShowConnectionsWidget,\n showConnectionsWidget,\n } = useHoldingStore()\n const { investments: copy, accounts: accountsCopy } = useGlobalCopyStore()\n\n const { isInitialized } = useGlobalUiStore()\n\n const [selectedTab, setSelectedTab] = React.useState(0)\n\n const { loadHoldings, holdingsLoaded } = useHoldingStore()\n\n useWidgetLoadTimer({\n widgetName: 'InvestmentsWidget',\n isLoaded: holdingsLoaded,\n })\n\n React.useEffect(() => {\n if (!isAccountDataLoaded) {\n loadAccountData().finally()\n }\n }, [])\n\n React.useEffect(() => {\n if (isInitialized) {\n loadHoldings().finally()\n }\n }, [isInitialized])\n\n const handleAccountFilterClick = () => {\n onEvent(ANALYTICS_EVENTS.INVESTMENT_WIDGET_ACCOUNT_FILTER_CLICK)\n }\n\n if (!isInitialized || !holdingsLoaded) return <Loader />\n\n const events = [\n ANALYTICS_EVENTS.INVESTMENT_WIDGET_DETAILS_CLICK,\n ANALYTICS_EVENTS.INVESTMENT_WIDGET_ALLOCATION_CLICK,\n ANALYTICS_EVENTS.INVESTMENT_WIDGET_ANALYSIS_CLICK,\n ]\n const isEmptyState = accounts.length === 0 && holdings.length === 0\n const investmentTabs = [\n copy.tab_overview_title,\n copy.tab_allocation_title,\n copy.tab_analysis_title,\n ]\n return (\n <WidgetContainer\n allowedAccountTypes={[AccountType.INVESTMENT]}\n onAccountsFilterClick={handleAccountFilterClick}\n onBackClick={onBackClick}\n onMenuClick={onMenuClick}\n sx={sx}\n title={copy.title}\n >\n <Stack mx={isMobile ? 0 : 48} my={24}>\n <Tabs\n onChange={(_, newValue) => {\n setSelectedTab(newValue)\n onEvent(events[newValue])\n }}\n sx={{ bgcolor: 'background.paper' }}\n textColor=\"primary\"\n value={!isEmptyState ? selectedTab : -1}\n variant=\"fullWidth\"\n >\n {investmentTabs.map((title) => (\n <Tab disabled={isEmptyState} key={title} label={<TabTitle title={title} />} />\n ))}\n </Tabs>\n {isEmptyState ? (\n <EmptyState\n header={copy.empty_state_header}\n icon=\"bid_landscape\"\n onClick={() => {\n setShowConnectionsWidget(true)\n onEvent(ANALYTICS_EVENTS.ACCOUNTS_CLICK_CONNECT)\n }}\n primaryButton={copy.overview.connect_accounts}\n subText={copy.empty_state_description}\n sx={{\n width: { sm: 432 },\n '.buttons-footer': {\n width: 167,\n },\n '.MuiTypography-h2': {\n mt: 20,\n mb: 4,\n },\n px: 16,\n }}\n />\n ) : (\n <>\n {selectedTab === 0 && <Overview />}\n {selectedTab === 1 && <Allocation />}\n {selectedTab === 2 && <Analysis />}\n </>\n )}\n </Stack>\n <ConnectionsDrawer\n onClose={() => setShowConnectionsWidget(false)}\n showConnectionsWidget={showConnectionsWidget}\n title={accountsCopy.manage_connections}\n />\n </WidgetContainer>\n )\n})\n"],"names":["EmptyStateFooterComponent","sx","copy","useGlobalCopyStore","onEvent","useEvent","setShowConnectionsWidget","useHoldingStore","Stack","jsxs","jsx","Text","Button","ANALYTICS_EVENTS","allocationColors","allocationsList","inRange","n","start","end","rangeStart","rangeEnd","createHoldingsData","holdings","allocationName","allocationValue","uniqueHoldings","holding","displayName","holdingName","holdingsTotalValue","acc","hold","name","getHoldingValue","createInvestmentsAllocationData","accounts","allocationListDisplayNames","investementAllocationData","totalAmount","accountGuids","guid","updatedHoldings","account_guid","eachHolding","cashBalance","totalAccountBalance","sum","account","marketValue","totalGainLoss","totalMarketValue","allocation","index","filteredHoldings","holdingsTotal","investmentAllocationTotals","cashBalanceHolding","donutData","color","value","percentageDisplay","formatPercentage","currencyDisplay","formatCurrency","InvestementAllocationList","data","onSelected","selectedId","selectedTabs","setSelectedTabs","handleChange","_","newValue","isMobile","useScreenSize","toggleButtonsList","isEmptyState","isSmallMobile","ToggleButtonGroup","label","ToggleButton","List","item","React","ListItem","ListItemButton","Box","Divider","Collapse","subItem","Fragment","InvestementsAllocationChart","hoveredId","isPercentage","onMouseEnter","onMouseLeave","size","totalLabel","theme","useTheme","isDarkMode","selectedInvestments","gainDisplayColor","lossDisplayColor","getGainLossDisplay","gainLossDisplayColor","Donut","P","Icon","Allocation","setSelectedId","setHoveredId","id","selectedAccountGuids","useGlobalUiStore","allHoldings","useAccountStore","investmentAllocationData","isScreenDeviceTablet","useMediaQuery","Allocation$1","observer","AnalysisDetails","analysisDetails","analysisType","setAnalysisType","listItems","key","formatKey","toggleButtons","AnalysisType","formattedKey","ListItemText","TooltipContent","body","title","InfoTooltip","placement","tooltip_info_body","tooltip_info_title","Tooltip","IconButton","Analysis","analysisChartData","isSmallMobileDevice","isDark","cellDimension","columns","rows","textVariant","isStocks","row","rowIndex","colIndex","isFirstRow","isLastRow","isFirstCol","isLastCol","isHigh","bgcolor","Analysis$1","InvestmentDetailsDrawer","accountHoldingsData","currentEditedCostBasis","editingHoldingId","handleCostBasisBlur","handleCostBasisClick","handleCostBasisChange","handleCostBasisKeyDown","isOpen","onClose","expandedStates","setExpandedStates","handleAccordionChange","holdingId","_event","isExpanded","prevStates","Drawer","InstitutionLogo","isCurrentlyEditing","Accordion","AccordionSummary","AccordionDetails","TextField","e","InvestmentDetailsDrawer$1","HeaderCell","params","HoldingsTable","type","costBasis","gainLossPercentage","Paper","DataGridPro","Overview","useState","openDrawer","setOpenDrawer","updateHoldings","showConnectionsWidget","setAccountHoldingsData","accountsCopy","isCopyLoaded","setEditingHoldingId","setCurrentEditedCostBasis","currentCostBasis","event","updatedCostBasis","h","prev","accountId","visibleInvestmentAccounts","totalPortfolioValue","gainLoss","hl","closeDrawer","accountHoldings","hasHoldingsData","accountTotalValue","accountGainLoss","accountGainLossPercentage","disabledColor","logoColor","ConnectionsDrawer","Loader","Overview$1","TabTitle","InvestmentsWidget","onBackClick","onMenuClick","isAccountDataLoaded","loadAccountData","isInitialized","selectedTab","setSelectedTab","loadHoldings","holdingsLoaded","useWidgetLoadTimer","handleAccountFilterClick","events","investmentTabs","WidgetContainer","AccountType","Tabs","Tab","EmptyState"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAYO,MAAMA,KAA4B,CAAC,EAAE,IAAAC,IAAK,CAAA,QAAyC;AACxF,QAAM,EAAE,aAAaC,EAAA,IAASC,EAAA,GACxB,EAAE,SAAAC,EAAA,IAAYC,GAAA,GACd,EAAE,0BAAAC,EAAA,IAA6BC,EAAA;AAErC,2BACGC,GAAA,EAAM,IAAI,EAAE,YAAY,UAAU,KAAK,IAAI,QAAQ,KAAK,GAAG,IAAI,OAAO,QAAQ,GAAGP,KAChF,UAAA;AAAA,IAAA,gBAAAQ;AAAA,MAACD;AAAA,MAAA;AAAA,QACC,WAAU;AAAA,QACV,IAAI;AAAA,UACF,YAAY;AAAA,UACZ,KAAK;AAAA,UACL,OAAO;AAAA,UACP,WAAW;AAAA,QAAA;AAAA,QAGb,UAAA;AAAA,UAAA,gBAAAE,EAACC,GAAA,EAAK,IAAI,EAAE,YAAY,IAAA,GAAO,SAAQ,SACpC,UAAAT,EAAK,SAAS,2BAAA,CACjB;AAAA,UACA,gBAAAQ;AAAA,YAACC;AAAA,YAAA;AAAA,cACC,IAAI;AAAA,gBACF,OAAO;AAAA,gBACP,YAAY;AAAA,cAAA;AAAA,cAEd,SAAQ;AAAA,cAEP,YAAK,SAAS;AAAA,YAAA;AAAA,UAAA;AAAA,QACjB;AAAA,MAAA;AAAA,IAAA;AAAA,IAEF,gBAAAD;AAAA,MAACE;AAAA,MAAA;AAAA,QACC,SAAS,MAAM;AACb,UAAAN,EAAyB,EAAI,GAC7BF,EAAQS,EAAiB,sBAAsB;AAAA,QACjD;AAAA,QACA,IAAI,EAAE,YAAY,IAAA;AAAA,QAClB,SAAQ;AAAA,QAEP,YAAK,SAAS;AAAA,MAAA;AAAA,IAAA;AAAA,EACjB,GACF;AAEJ,GChCMC,KAAmB;AAAA,EACvB,kBAAkB;AAAA,EAClB,yBAAyB;AAAA,EACzB,0BAA0B;AAAA,EAC1B,2BAA2B;AAAA,EAC3B,mBAAmB;AAAA,EACnB,uBAAuB;AAAA,EACvB,qBAAqB;AAAA,EACrB,qBAAqB;AAAA,EACrB,sBAAsB;AACxB,GACMC,KAAkB;AAAA,EACtB;AAAA,IACE,MAAM;AAAA,EAAA;AAAA,EAER;AAAA,IACE,MAAM;AAAA,EAAA;AAAA,EAER;AAAA,IACE,MAAM;AAAA,EAAA;AAAA,EAER;AAAA,IACE,MAAM;AAAA,EAAA;AAAA,EAER;AAAA,IACE,MAAM;AAAA,EAAA;AAAA,EAER;AAAA,IACE,MAAM;AAAA,EAAA;AAAA,EAER;AAAA,IACE,MAAM;AAAA,EAAA;AAAA,EAER;AAAA,IACE,MAAM;AAAA,EAAA;AAAA,EAER;AAAA,IACE,MAAM;AAAA,EAAA;AAEV,GAEMC,KAAU,CAACC,GAAWC,GAAeC,MAAiB;AAC1D,QAAMC,IAAqCF,GACrCG,IAAuCF;AAC7C,SAAOF,KAAK,KAAK,IAAIG,GAAYC,CAAQ,KAAKJ,IAAI,KAAK,IAAIG,GAAYC,CAAQ;AACjF,GAEMC,KAAqB,CACzBC,GACAC,GACAC,MACG;AACH,QAAMC,IAAiB;AAAA,IACrB,GAAG,IAAI,IAAIH,EAAS,IAAI,CAACI,MAAqBA,EAAQ,KAAK,aAAa,CAAC;AAAA,EAAA;AAE3E,MAAIC;AAyBJ,SAxBmCF,EAAe,IAAI,CAACG,MAAgB;AAErE,UAAMC,IAAqBP,EAAS,OAAO,CAACQ,GAAKC,MAAkB;AACjE,YAAMC,IAAOD,EAAK;AAElB,aAAIC,EAAK,YAAA,MAAkBJ,KAEzBD,IAAcK,GAEXC,EAAgBF,CAAI,IAAIA,EAAKR,CAA+C,IAAK,MAClFO,KAIGA;AAAA,IACT,GAAG,CAAC;AAEJ,WAAO;AAAA,MACL,aAAAH;AAAA,MACA,MAAMA;AAAA,MACN,OAAOE;AAAA,MACP,YAAYA,IAAqBL;AAAA,IAAA;AAAA,EAErC,CAAC;AAEH,GAEMS,IAAkB,CAACP,MACvBA,EAAQ,0BAA0BA,EAAQ,0BAA0BA,EAAQ,cAEjEQ,KAAkC,CAC7CC,GACAlC,GACAqB,MACG;AACH,QAAMc,IAA6B,OAAO,OAAOnC,EAAK,gBAAgB,GAChEoC,IAAyD,CAAA;AAE/D,MAAIC,IAAc;AAElB,QAAMC,IAAeJ,EAAS,IAAI,CAAC,EAAE,MAAAK,EAAA,MAAWA,CAAI,GAC9CC,IAA6BnB,EAChC,OAAO,CAAC,EAAE,cAAAoB,EAAA,MAAmBH,EAAa,SAASG,CAAY,CAAC,EAChE,IAAI,CAACC,OACG;AAAA,IACL,GAAGA;AAAA,IACH,MAAMA,EAAY,UAAUA,EAAY;AAAA,IACxC,UACEA,EAAY,cAAcA,EAAY,eAAe,IACjDV,EAAgBU,CAAW,IAAIA,EAAY,aAC3C;AAAA,EAAA,EAET,GAEG,EAAE,aAAAC,GAAa,qBAAAC,EAAA,IAAwBV,EAAS;AAAA,IACpD,CAACW,GAAKC,OACG;AAAA,MACL,aAAaD,EAAI,eAAeC,EAAQ,gBAAgB;AAAA,MACxD,qBAAqBD,EAAI,uBAAuBC,EAAQ,WAAW;AAAA,IAAA;AAAA,IAGvE,EAAE,aAAa,GAAG,qBAAqB,EAAA;AAAA,EAAE,GAErC,EAAE,aAAAC,GAAa,eAAAC,EAAA,IAAkBR,EAAgB;AAAA,IACrD,CAACX,GAAKJ,OACG;AAAA,MACL,aAAaI,EAAI,cAAcG,EAAgBP,CAAO;AAAA,MACtD,eAAeI,EAAI,gBAAgBJ,EAAQ;AAAA,IAAA;AAAA,IAG/C,EAAE,aAAa,GAAG,eAAe,EAAA;AAAA,EAAE,GAE/BwB,IAAmBF,IAAcJ;AAEvC,EAAA9B,GAAgB,QAAQ,CAACqC,GAAYC,MAAU;AAC7C,UAAMC,IAAmBZ,EAAgB;AAAA,MACvC,CAACE,MAAgB,CAAC,CAACA,EAAYQ,EAAW,IAAqC;AAAA,IAAA;AAEjF,QAAIG,IAAgBD,EAAiB;AAAA,MACnC,CAACP,GAAKpB,MACJoB,IACCb,EAAgBP,CAAO,IAAIA,EAAQyB,EAAW,IAAqC,IAClF;AAAA,MACJ;AAAA,IAAA;AAEF,UAAMI,IAA6BlC;AAAA,MACjCgC;AAAA,MACAF,EAAW;AAAA,MACXG;AAAA,IAAA;AAEF,QAAIH,EAAW,SAAS,sBAAsBP,IAAc,GAAG;AAG7D,MAAAU,KAAiBV;AAGjB,YAAMY,IAAqB;AAAA,QACzB,aAAavD,EAAK;AAAA,QAClB,MAAM;AAAA,QACN,OAAO2C;AAAA,QACP,YAAYA,IAAcM;AAAA,MAAA;AAG5B,MAAAK,EAA2B,KAAKC,CAAkB;AAAA,IACpD;AAGA,IAAIF,IAAgB,MAClBjB,EAA0B,KAAK;AAAA,MAC7B,MAAMc,EAAW;AAAA,MACjB,aAAaf,EAA2BgB,CAAK;AAAA,MAC7C,MAAM,GAAGD,EAAW,IAAI,IAAIC,CAAK;AAAA,MACjC,UAAUG;AAAA,MACV,YAAYD,IAAgBJ;AAAA,MAC5B,OAAOI;AAAA,MACP,OAAOzC,GAAiBsC,EAAW,IAAqC;AAAA,IAAA,CACzE,GACDb,KAAegB;AAAA,EAEnB,CAAC;AACD,QAAMG,IAAyBpB,EAA0B;AAAA,IACvD,CAAC,EAAE,aAAAV,GAAa,MAAAa,GAAM,OAAAkB,GAAO,OAAAC,SAAa;AAAA,MACxC,IAAInB;AAAA,MACJ,OAAAkB;AAAA,MACA,OAAO/B;AAAA,MACP,OAAQgC,IAAQrB,IAAe;AAAA,IAAA;AAAA,EACjC;AAGF,SAAO;AAAA,IACL,iBAAiBD;AAAA,IACjB,WAAAoB;AAAA,IACA,aAAAnB;AAAA,IACA,eAAAW;AAAA,IACA,kBAAAC;AAAA,IACA,yBAAyBD,IAAgBJ;AAAA,EAAA;AAE7C,GAEae,KAAoB,CAACD,MAChCA,IAAQ,OAAQ,WAAWE,GAAiBF,CAAK,GAEtCG,IAAkB,CAACH,MAC1BA,MAAU,IAAUI,GAAeJ,GAAO,QAAQ,IAC/C5C,GAAQ4C,GAAO,OAAO,IAAI,IAAI,YAAYI,GAAeJ,GAAO,QAAQ,GClMpEK,KAA4B,CAAC;AAAA,EACxC,MAAAC;AAAA,EACA,YAAAC;AAAA,EACA,YAAAC;AAAA,EACA,cAAAC;AAAA,EACA,iBAAAC;AACF,MAAqC;AACnC,QAAMC,IAAe,CAACC,GAAyBC,MAAqB;AAClE,IAAIA,MAAa,QACfH,EAAgBG,CAAQ;AAAA,EAE5B,GACM,EAAE,UAAAC,EAAA,IAAaC,EAAA,GACf;AAAA,IACJ,aAAa,EAAE,YAAYzE,EAAA;AAAA,EAAK,IAC9BC,EAAA,GAEEyE,IAAoB;AAAA,IACxB,EAAE,OAAO1E,EAAK,mBAAmB,OAAO,EAAA;AAAA,IACxC,EAAE,OAAOA,EAAK,oBAAoB,OAAO,EAAA;AAAA,EAAE,GAEvC2E,IAAe,CAACX,GAAM,gBAAgB,QACtC,EAAE,eAAAY,EAAA,IAAkBH,EAAA;AAE1B,SACE,gBAAAlE,EAACD,GAAA,EAAM,IAAI,EAAE,IAAI,IAAI,KAAK,IAAI,OAAOkE,IAAW,MAAM,IAAA,GACpD,UAAA;AAAA,IAAA,gBAAAhE;AAAA,MAACqE;AAAA,MAAA;AAAA,QACC,WAAW;AAAA,QACX,WAAW;AAAA,QACX,UAAUR;AAAA,QACV,OAAOM,IAAe,KAAKR;AAAA,QAE1B,UAAAO,EAAkB,IAAI,CAAC,EAAE,OAAAI,GAAO,OAAApB,QAC/B,gBAAAlD,EAACuE,IAAA,EAAa,OAAM,WAAsB,OAAArB,GACxC,UAAA,gBAAAlD,EAACC,GAAA,EAAK,MAAM,IAAM,eAAe,cAAc,SAAQ,SACpD,UAAAqE,GACH,EAAA,GAHiCA,CAInC,CACD;AAAA,MAAA;AAAA,IAAA;AAAA,IAGH,gBAAAtE,EAACwE,IAAA,EAAK,IAAI,EAAE,IAAI,GAAA,GACb,UAAAhB,EAAK,gBAAgB,IAAI,CAACiB,MACzB,gBAAA1E,EAAC2E,EAAM,UAAN,EACC,UAAA;AAAA,MAAA,gBAAA1E;AAAA,QAAC2E;AAAA,QAAA;AAAA,UACC,gBAAgB;AAAA,UAChB,gBAAgB;AAAA,UAChB,IAAI;AAAA,YACF,WAAW;AAAA,UAAA;AAAA,UAGb,UAAA,gBAAA5E;AAAA,YAAC6E;AAAA,YAAA;AAAA,cACC,iBAAuBlB,MAAee,EAAK;AAAA,cAC3C,SAAS,MAAMhB,EAAWgB,EAAK,IAAI;AAAA,cACnC,IAAI,EAAE,WAAW,IAAI,IAAI,IAAI,IAAI,EAAA;AAAA,cAEjC,UAAA;AAAA,gBAAA,gBAAAzE;AAAA,kBAAC6E;AAAA,kBAAA;AAAA,oBACC,cAAc;AAAA,oBACd,YAAY;AAAA,oBACZ,QAAQ;AAAA,oBACR,IAAI,EAAE,iBAAiBJ,EAAK,OAAO,IAAI,EAAA;AAAA,oBACvC,OAAO;AAAA,kBAAA;AAAA,gBAAA;AAAA,gBAET,gBAAA1E;AAAA,kBAACD;AAAA,kBAAA;AAAA,oBACC,YAAW;AAAA,oBACX,WAAU;AAAA,oBACV,gBAAe;AAAA,oBACf,OAAM;AAAA,oBAEN,UAAA;AAAA,sBAAA,gBAAAE,EAACC,KAAK,MAAMyD,MAAee,EAAK,MAAO,YAAK,aAAY;AAAA,wCACvDxE,GAAA,EAAK,MAAMyD,MAAee,EAAK,MAAM,SAAQ,SAC3C,UAAAd,MAAiB,IACdN,EAAgBoB,EAAK,KAAK,IAC1BtB,GAAkBsB,EAAK,UAAU,EAAA,CACvC;AAAA,oBAAA;AAAA,kBAAA;AAAA,gBAAA;AAAA,cACF;AAAA,YAAA;AAAA,UAAA;AAAA,QACF;AAAA,MAAA;AAAA,wBAGDK,GAAA,EAAQ;AAAA,MAERL,EAAK,YAAYA,EAAK,SAAS,SAAS,KACvC,gBAAAzE,EAAC+E,IAAA,EAAS,IAAYrB,MAAee,EAAK,MAAO,eAAe,IAC9D,4BAACD,IAAA,EACE,UAAA;AAAA,QAAAC,GAAM,UAAU,IAAI,CAACO,MACpB,gBAAAhF;AAAA,UAAC2E;AAAA,UAAA;AAAA,YAEC,IAAI;AAAA,cACF,IAAI;AAAA,cACJ,IAAI;AAAA,cACJ,IAAI;AAAA,YAAA;AAAA,YAGN,4BAAC7E,GAAA,EAAM,WAAU,OAAM,gBAAe,iBAAgB,OAAM,QAC1D,UAAA;AAAA,cAAA,gBAAAC,EAACE,GAAA,EAAM,UAAA;AAAA,gBAAA+E,EAAQ;AAAA,gBAAY;AAAA,cAAA,GAAC;AAAA,cAC5B,gBAAAhF,EAACC,GAAA,EACE,UAAA0D,MAAiB,IACdN,EAAgB2B,EAAQ,KAAK,IAC7B7B,GAAkB6B,EAAQ,UAAU,EAAA,CAC1C;AAAA,YAAA,EAAA,CACF;AAAA,UAAA;AAAA,UAdKA,EAAQ;AAAA,QAAA,CAgBhB;AAAA,0BACAF,GAAA,CAAA,CAAQ;AAAA,MAAA,EAAA,CACX,EAAA,CACF;AAAA,IAAA,EAAA,GA9DiBL,EAAK,IAgE1B,CACD,GACH;AAAA,IACCN,IACC,gBAAApE,EAAAkF,IAAA,EACE,UAAA;AAAA,MAAA,gBAAAjF,EAACC,GAAA,EAAK,IAAI,EAAE,OAAO,kBAAkB,GAAG,GAAG,WAAW,SAAA,GAAa,UAAAT,EAAK,WAAA,CAAW;AAAA,wBAClFsF,GAAA,EAAQ;AAAA,MACT,gBAAA9E;AAAA,QAACV;AAAA,QAAA;AAAA,UACC,IAAI;AAAA,YACF,oBAAoB,EAAE,OAAO8E,IAAgB,SAAS,IAAA;AAAA,UAAI;AAAA,QAC5D;AAAA,MAAA;AAAA,IACF,EAAA,CACF,IAEAT,MAAiB,KACf,gBAAA3D,EAACC,KAAK,MAAM,IAAM,IAAI,EAAE,WAAW,SAAS,IAAI,MAC7C,aAAGT,EAAK,gBAAgB,IAAI6D,EAAgBG,EAAK,WAAW,CAAC,GAAA,CAChE;AAAA,EAAA,GAGN;AAEJ,GCjHa0B,KAAoE,CAAC;AAAA,EAChF,MAAA1B;AAAA,EACA,WAAA2B;AAAA,EACA,cAAAC;AAAA,EACA,cAAAC;AAAA,EACA,cAAAC;AAAA,EACA,YAAA7B;AAAA,EACA,YAAAC;AAAA,EACA,MAAA6B,IAAO;AAAA,EACP,YAAAC;AACF,MAAM;AACJ,QAAMC,IAAQC,EAAA,GACRC,IAAaF,EAAM,QAAQ,SAAS,QAEpCG,IAAsBlB,EAAM;AAAA,IAChC,MACEhB,IACIF,EAAK,gBAAgB,KAAK,CAAC,EAAE,MAAAzB,QAAsCA,MAAS2B,CAAU,IACtF;AAAA,IACN,CAACA,CAAU;AAAA,EAAA,GAEP;AAAA,IACJ,aAAa,EAAE,YAAYlE,EAAA;AAAA,EAAK,IAC9BC,EAAA,GACEuD,IAAY0B,EAAM,QAAQ,MAC1BlB,EAAK,UAAU,SAAS,IAAUA,EAAK,YAGpC,CAAC,EAAE,IAAI,KAAK,OAAOiC,EAAM,QAAQ,QAAQ,OAAO,OAAO,IAAA,CAAK,GAClE,CAACjC,GAAMiC,CAAK,CAAC,GAEVI,IAAmBF,IAAa,YAAY,WAC5CG,IAAmBH,IAAa,aAAa,YAE7CI,IAAqB,MACrBH,IAA4BpG,EAAK,uCACjC4F,IAAqBjC,GAAkBK,EAAK,uBAAuB,IAChEH,EAAgBG,EAAK,aAAa,GAGrCwC,IAAuBxC,EAAK,iBAAiB,IAAIqC,IAAmBC;AAE1E,SACE,gBAAA9F;AAAA,IAACiG;AAAA,IAAA;AAAA,MACC,MAAMjD;AAAA,MACN,WAAAmC;AAAA,MACA,SAAS1B;AAAA,MACT,cAAA4B;AAAA,MACA,cAAAC;AAAA,MACA,YAAA5B;AAAA,MACA,MAAA6B;AAAA,MAEA,4BAACzF,GAAA,EAAM,YAAW,UAAS,QAAO,QAAO,gBAAe,UAAS,OAAM,QACrE,UAAA,gBAAAE,EAACF,KAAM,YAAW,UAAS,gBAAe,UAAS,WAAWyF,GAAM,UAAUA,GAC5E,UAAA,gBAAAxF,EAACD,GAAA,EAAM,YAAW,UAAS,IAAI,EAAE,KAAK,EAAE,IAAI,GAAG,IAAI,KAAK,IAAI,EAAE,IAAI,GAAG,IAAI,OACvE,UAAA;AAAA,QAAA,gBAAAE,EAACC,KAAK,OAAM,kBAAiB,QAAQ,IAClC,UAAA2F,GAAqB,eAAeJ,EAAA,CACvC;AAAA,QACA,gBAAAxF,EAACkG,GAAA,EAAE,OAAM,gBAAe,SAAQ,MAC7B,UAAA7C,EAAgBuC,GAAqB,SAASpC,EAAK,gBAAgB,EAAA,CACtE;AAAA,QAEA,gBAAAzD,EAACD,GAAA,EAAM,IAAI,EAAE,YAAY,UAAU,eAAe,OAAO,KAAK,EAAA,GAC3D,UAAA;AAAA,UAAA,CAAC8F,KACA,gBAAA5F;AAAA,YAACmG;AAAA,YAAA;AAAA,cACC,MAAM3C,EAAK,iBAAiB,IAAI,gBAAgB;AAAA,cAChD,MAAM;AAAA,cACN,IAAI,EAAE,OAAOwC,EAAA;AAAA,YAAqB;AAAA,UAAA;AAAA,UAGtC,gBAAAhG;AAAA,YAACC;AAAA,YAAA;AAAA,cACC,IAAI;AAAA,gBACF,OAAO+F;AAAA,gBACP,YAAY;AAAA,cAAA;AAAA,cAEd,SAAQ;AAAA,cAEP,UAAAD,EAAA;AAAA,YAAmB;AAAA,UAAA;AAAA,QACtB,EAAA,CACF;AAAA,MAAA,EAAA,CACF,GACF,EAAA,CACF;AAAA,IAAA;AAAA,EAAA;AAGN,GC9GMK,KAAa,MAAM;AACvB,QAAM,CAACzC,GAAcC,CAAe,IAAIc,EAAM,SAAS,CAAC,GAClD,CAAChB,GAAY2C,CAAa,IAAI3B,EAAM,SAAS,EAAE,GAC/C,CAACS,GAAWmB,CAAY,IAAI5B,EAAM,SAAS,EAAE,GAC7CjB,IAAa,CAAC8C,MAAe;AACjC,IAAI7C,MAAe6C,IACjBF,EAAcE,CAAE,KAEhBF,EAAc,EAAE,GAChBC,EAAa,EAAE;AAAA,EAEnB,GACM,EAAE,sBAAAE,EAAA,IAAyBC,EAAA,GAC3B,EAAE,iBAAiBC,EAAA,IAAgB7G,EAAA,GACnC,EAAE,2BAA2B6B,EAAA,IAAaiF,GAAA,GAC1C;AAAA,IACJ,aAAa,EAAE,YAAYnH,EAAA;AAAA,EAAK,IAC9BC,EAAA,GACEmH,IAA2BnF;AAAA,IAC/BC,EAAS,OAAO,CAAC,EAAE,MAAAK,QAAWyE,EAAqB,SAASzE,CAAI,CAAC;AAAA,IACjEvC;AAAA,IACAkH;AAAA,EAAA,GAEI,EAAE,UAAA1C,EAAA,IAAaC,EAAA,GACf4C,IAAuBC,GAAc,mBAAmB;AAE9D,SACE,gBAAA/G;AAAA,IAACD;AAAA,IAAA;AAAA,MACC,YAAY+G,IAAuB,WAAW;AAAA,MAC9C,WAAWA,IAAuB,WAAW;AAAA,MAC7C,KAAK,EAAE,IAAI,IAAI,IAAI,IAAI,IAAI,IAAA;AAAA,MAC3B,IAAI;AAAA,QACF,gBAAgB;AAAA,QAChB,IAAI;AAAA,QACJ,OAAO;AAAA,MAAA;AAAA,MAGT,UAAA;AAAA,QAAA,gBAAA7G;AAAA,UAACkF;AAAA,UAAA;AAAA,YACC,MAAM0B;AAAA,YACN,WAAAzB;AAAA,YACA,cAAcxB,MAAiB;AAAA,YAC/B,cAAc,CAAC4C,MAAO;AACpB,cAAI7C,MAAe6C,IACjBD,EAAa,EAAE,IACL5C,KACV4C,EAAaC,CAAE;AAAA,YAEnB;AAAA,YACA,cAAc,MAAM;AAClB,cAAAD,EAAa,EAAE;AAAA,YACjB;AAAA,YACA,YAAA7C;AAAA,YACA,YAAAC;AAAA,YACA,MAAMM,IAAW,MAAM;AAAA,YACvB,YAAYxE,EAAK;AAAA,UAAA;AAAA,QAAA;AAAA,QAEnB,gBAAAQ;AAAA,UAACuD;AAAA,UAAA;AAAA,YACC,MAAMqD;AAAA,YACN,YAAAnD;AAAA,YACA,YAAAC;AAAA,YACA,cAAAC;AAAA,YACA,iBAAAC;AAAA,UAAA;AAAA,QAAA;AAAA,MACF;AAAA,IAAA;AAAA,EAAA;AAGN,GAEAmD,KAAeC,EAASZ,EAAU,GCrD5Ba,KAAkD,CAAC;AAAA,EACvD,iBAAAC;AAAA,EACA,cAAAC;AAAA,EACA,MAAA3H;AAAA,EACA,iBAAA4H;AACF,MAAM;AACJ,QAAM,EAAE,eAAAhD,EAAA,IAAkBH,EAAA,GAEpBoD,IAAY3C,EAAM,QAAQ,MACvB,OAAO,KAAKwC,CAAe,EAC/B,OAAO,CAACI,MAAQJ,EAAgBI,CAAG,KAAK,CAAC,EACzC,IAAI,CAACA,OAAS;AAAA,IACb,KAAAA;AAAA,IACA,OAAOhE,GAAe4D,EAAgBI,CAAG,GAAG,KAAK;AAAA,IACjD,cAAcC,GAAUD,CAAG;AAAA,EAAA,EAC3B,GACH,CAACJ,CAAe,CAAC,GAEdM,IAAgB;AAAA,IACpB,EAAE,OAAOhI,EAAK,UAAU,OAAOiI,EAAa,OAAA;AAAA,IAC5C,EAAE,OAAOjI,EAAK,OAAO,OAAOiI,EAAa,MAAA;AAAA,EAAM;AAEjD,SACE,gBAAA1H,EAACD,GAAA,EAAM,IAAI,EAAE,KAAK,IAAI,OAAO,EAAE,IAAI,IAAA,EAAI,GACrC,UAAA;AAAA,IAAA,gBAAAE;AAAA,MAACqE;AAAA,MAAA;AAAA,QACC,OAAM;AAAA,QACN,WAAW;AAAA,QACX,UAAU,CAACP,GAAGZ,MAAUA,KAASkE,EAAgBlE,CAAK;AAAA,QACtD,IAAI;AAAA,UACF,OAAO;AAAA,UACP,2BAA2B;AAAA,YACzB,OAAO;AAAA,YACP,YAAY;AAAA,YACZ,eAAe;AAAA,UAAA;AAAA,QACjB;AAAA,QAEF,OAAOmE,EAAU,SAASF,IAAe;AAAA,QAExC,YAAc,IAAI,CAAC,EAAE,OAAA7C,GAAO,OAAApB,QAC3B,gBAAAlD,EAACuE,IAAA,EAAyB,IAAI,EAAE,OAAO,OAAA,GAAU,OAAArB,GAC9C,UAAAoB,EAAA,GADgBpB,CAEnB,CACD;AAAA,MAAA;AAAA,IAAA;AAAA,IAGFmE,EAAU,SACT,gBAAArH;AAAA,MAACwE;AAAA,MAAA;AAAA,QACC,IAAI;AAAA,UACF,sCAAsC,EAAE,IAAI,GAAA;AAAA,UAC5C,0BAA0B,EAAE,aAAa,gBAAA;AAAA,UACzC,uBAAuB,EAAE,WAAW,IAAI,IAAI,GAAA;AAAA,QAAG;AAAA,QAGhD,UAAA6C,EAAU,IAAI,CAAC,EAAE,OAAAnE,GAAO,cAAAwE,EAAA,MACvB,gBAAA1H,EAAC2E,IAAA,EAAS,SAAS,IAAyB,iBAAiB,gBAAA3E,EAACC,GAAA,EAAM,aAAM,GACxE,UAAA,gBAAAD;AAAA,UAAC2H;AAAA,UAAA;AAAA,YACC,SAASD;AAAA,YACT,WAAW,EAAE,SAAS,EAAE,WAAW,WAAS;AAAA,UAAE;AAAA,QAAA,EAChD,GAJ4BA,CAK9B,CACD;AAAA,MAAA;AAAA,IAAA,IAGH,gBAAA3H,EAAAkF,IAAA,EACE,UAAA;AAAA,MAAA,gBAAAjF,EAACC,GAAA,EAAK,IAAI,EAAE,OAAO,kBAAkB,GAAG,GAAG,WAAW,SAAA,GAAa,UAAAT,EAAK,WAAA,CAAW;AAAA,wBAClFsF,GAAA,EAAQ,IAAI,EAAE,aAAa,mBAAmB;AAAA,MAC/C,gBAAA9E;AAAA,QAACV;AAAA,QAAA;AAAA,UACC,IAAI;AAAA,YACF,oBAAoB,EAAE,OAAO8E,IAAgB,SAAS,IAAA;AAAA,UAAI;AAAA,QAC5D;AAAA,MAAA;AAAA,IACF,EAAA,CACF;AAAA,EAAA,GAEJ;AAEJ,GCvFMwD,KAAgD,CAAC,EAAE,MAAAC,GAAM,OAAAC,QAC7D,gBAAA/H,EAACD,GAAA,EAAM,IAAI,EAAE,KAAK,GAAG,GAAG,MACtB,UAAA;AAAA,EAAA,gBAAAE,EAACC,GAAA,EAAK,MAAM,IAAM,SAAQ,SACvB,UAAA6H,GACH;AAAA,EACA,gBAAA9H,EAACkG,GAAA,EAAE,SAAQ,aAAa,UAAA2B,EAAA,CAAK;AAAA,GAC/B,GAGIE,KAA0C,CAAC;AAAA,EAC/C,WAAAC,IAAY;AAAA,EACZ,mBAAAC;AAAA,EACA,oBAAAC;AACF,MACE,gBAAAlI;AAAA,EAACmI;AAAA,EAAA;AAAA,IACC,iBAAiB;AAAA,IACjB,WAAAH;AAAA,IACA,OAAO,gBAAAhI,EAAC4H,IAAA,EAAe,MAAMK,GAAmB,OAAOC,GAAoB;AAAA,IAE3E,UAAA,gBAAAlI,EAACoI,MAAW,cAAYF,GAAoB,IAAI,EAAE,WAAW,GAAG,UAAU,GAAG,GAAG,KAC9E,UAAA,gBAAAlI,EAACmG,KAAK,MAAK,QAAO,IAAI,EAAE,OAAO,YAAA,EAAY,CAAG,EAAA,CAChD;AAAA,EAAA;AACF,GC1BIkC,KAAqB,MAAM;AAC/B,QAAM;AAAA,IACJ,aAAa,EAAE,UAAU7I,EAAA;AAAA,EAAK,IAC5BC,EAAA,GACE,EAAE,mBAAA6I,GAAmB,iBAAApB,GAAiB,cAAAC,GAAc,iBAAAC,EAAA,IAAoBvH,EAAA,GAExE0I,IAAsBzB,GAAc,yCAAyC,GAC7E,EAAE,UAAA9C,EAAA,IAAaC,EAAA,GAGfuE,IADQ9C,EAAA,EACO,QAAQ,SAAS,QAEhC,EAAE,eAAA+C,GAAe,SAAAC,GAAS,MAAAC,GAAM,aAAAC,MAAgBlE,EAAM,QAAQ,MAAM;AACxE,UAAMmE,IAAW1B,MAAiBM,EAAa,QAEzCiB,IACF,OAAO,OADKG,IACErJ,EAAK,sBACLA,EAAK,kBADmB,GAEpCmJ,IACF,OAAO,OADEE,IACKrJ,EAAK,mBACLA,EAAK,eADgB;AAMvC,WAAO,EAAE,eAFawE,IAAW,KAAK,KAEd,SAAA0E,GAAS,MAAAC,GAAM,aAHE3E,IAAW,YAAY,QAGzB4E;AAAAA,EACzC,GAAG,CAACpJ,GAAMwE,GAAUmD,CAAY,CAAC;AAEjC,SACE,gBAAApH;AAAA,IAACD;AAAA,IAAA;AAAA,MACC,IAAI;AAAA,QACF,eAAe,EAAE,IAAI,MAAA;AAAA,QACrB,KAAKkE,IAAW,KAAK;AAAA,QACrB,gBAAgB;AAAA,QAChB,IAAI;AAAA,QACJ,IAAI;AAAA,MAAA;AAAA,MAGN,UAAA;AAAA,QAAA,gBAAAjE;AAAA,UAACD;AAAA,UAAA;AAAA,YACC,IAAI;AAAA,cACF,YAAY;AAAA,cACZ,eAAe;AAAA,cACf,gBAAgB;AAAA,cAChB,IAAI,EAAE,IAAI,GAAA;AAAA,YAAG;AAAA,YAGf,UAAA;AAAA,cAAA,gBAAAC;AAAA,gBAACD;AAAA,gBAAA;AAAA,kBACC,IAAI;AAAA,oBACF,YAAY;AAAA,oBACZ,QAAQkE,IAAW,KAAK;AAAA,oBACxB,KAAKA,IAAW,IAAI;AAAA,oBACpB,UAAU;AAAA,oBACV,WAAW;AAAA,oBACX,aAAa;AAAA,kBAAA;AAAA,kBAGf,UAAA;AAAA,oBAAA,gBAAAhE,EAACkG,GAAA,EAAE,MAAM,IAAM,OAAM,kBAAiB,SAAS0C,GAC5C,UAAAzB,MAAiBM,EAAa,SAC3BjI,EAAK,wBACLA,EAAK,gBACX;AAAA,oBACA,gBAAAQ;AAAA,sBAACF;AAAA,sBAAA;AAAA,wBACC,IAAI;AAAA,0BACF,eAAe;AAAA,0BACf,QAAQkE,IAAW,MAAM;AAAA,0BACzB,gBAAgB;AAAA,wBAAA;AAAA,wBAGjB,UAAA0E,EAAQ,IAAI,CAACpE,MACZ,gBAAAtE;AAAA,0BAACC;AAAA,0BAAA;AAAA,4BAEC,IAAI;AAAA,8BACF,OAAO;AAAA,8BACP,IAAI;AAAA,8BACJ,IAAI+D,IAAW,IAAI;AAAA,4BAAA;AAAA,4BAErB,SAAS4E;AAAA,4BAER,UAAAtE;AAAA,0BAAA;AAAA,0BARIA;AAAA,wBAAA,CAUR;AAAA,sBAAA;AAAA,oBAAA;AAAA,kBACH;AAAA,gBAAA;AAAA,cAAA;AAAA,gCAEDxE,GAAA,EAAM,IAAI,EAAE,KAAK,KAChB,UAAA;AAAA,gBAAA,gBAAAC;AAAA,kBAACD;AAAA,kBAAA;AAAA,oBACC,IAAI;AAAA,sBACF,WAAWyI,IAAsB,UAAU;AAAA,sBAC3C,eAAe;AAAA,sBACf,KAAK;AAAA,sBACL,IAAI;AAAA,oBAAA;AAAA,oBAGN,UAAA;AAAA,sBAAA,gBAAAvI,EAACC,GAAA,EAAK,MAAM,IAAO,UAAAT,EAAK,iBAAgB;AAAA,sBACxC,gBAAAQ;AAAA,wBAAC+H;AAAA,wBAAA;AAAA,0BACC,mBAAmBvI,EAAK;AAAA,0BACxB,oBAAoBA,EAAK;AAAA,wBAAA;AAAA,sBAAA;AAAA,oBAC3B;AAAA,kBAAA;AAAA,gBAAA;AAAA,gBAED8I,EAAkB,IAAI,CAACQ,GAAKC,GAAUvF,wBACpC1D,GAAA,EAAqB,IAAI,EAAE,eAAe,OAAO,KAAK,KACpD,YAAI,IAAI,CAACoD,GAAO8F,MAAa;AAC5B,wBAAMC,IAAaF,MAAa,GAC1BG,IAAYH,MAAavF,EAAK,SAAS,GACvC2F,IAAaH,MAAa,GAC1BI,IAAYJ,MAAaF,EAAI,SAAS,GAEtCO,IAAS,OAAOnG,EAAM,QAAQ,KAAK,EAAE,CAAC,KAAK;AAEjD,sBAAIoG,IAAU,YACVrG,IAAQ;AAEZ,yBAAIuF,KACFc,IAAUD,IAAS,aAAa,YAChCpG,IAAQoG,IAAS,aAAa,mBAE9BC,IAAUD,IAAS,aAAa,YAChCpG,IAAQoG,IAAS,iBAAiB,aAUlC,gBAAArJ;AAAA,oBAACF;AAAA,oBAAA;AAAA,sBAEC,IAAI;AAAA,wBACF,GAVe;AAAA,0BACnB,wBAAwBoJ,KAAaC,IAAa,IAAI;AAAA,0BACtD,yBAAyBD,KAAaE,IAAY,IAAI;AAAA,0BACtD,qBAAqBH,KAAcE,IAAa,IAAI;AAAA,0BACpD,sBAAsBF,KAAcG,IAAY,IAAI;AAAA,wBAAA;AAAA,wBAOhD,YAAY;AAAA,wBACZ,SAAAE;AAAA,wBACA,QAAQb;AAAA,wBACR,gBAAgB;AAAA,wBAChB,OAAOA;AAAA,sBAAA;AAAA,sBAGT,UAAA,gBAAAzI;AAAA,wBAACC;AAAA,wBAAA;AAAA,0BACC,IAAI;AAAA,4BACF,OAAAgD;AAAA,4BACA,YAAYe,IAAW,MAAM;AAAA,0BAAA;AAAA,0BAE/B,SAASA,IAAW,UAAU;AAAA,0BAE7B,UAAAd;AAAA,wBAAA;AAAA,sBAAA;AAAA,oBACH;AAAA,oBAlBK8F;AAAA,kBAAA;AAAA,gBAqBX,CAAC,EAAA,GAjDSD,CAkDZ,CACD;AAAA,gBACD,gBAAA/I,EAACF,GAAA,EAAM,IAAI,EAAE,WAAW,UAAU,eAAe,OAAO,IAAI,MACzD,UAAA6I,EAAK,IAAI,CAACrE,MACT,gBAAAtE,EAACF,GAAA,EAAkB,IAAI,EAAE,YAAY,UAAU,OAAO2I,EAAA,GACpD,UAAA,gBAAAzI,EAACC,GAAA,EAAK,OAAM,kBAAiB,SAAS2I,GACnC,UAAAtE,EAAA,CACH,KAHUA,CAIZ,CACD,GACH;AAAA,gBACA,gBAAAtE;AAAA,kBAACC;AAAA,kBAAA;AAAA,oBACC,MAAM;AAAA,oBACN,IAAI,EAAE,OAAO,kBAAkB,IAAI+D,IAAW,IAAI,IAAI,WAAW,SAAA;AAAA,oBACjE,SAAS4E;AAAA,oBAER,UAAAzB,MAAiBM,EAAa,SAASjI,EAAK,YAAYA,EAAK;AAAA,kBAAA;AAAA,gBAAA;AAAA,cAChE,EAAA,CACF;AAAA,YAAA;AAAA,UAAA;AAAA,QAAA;AAAA,QAEF,gBAAAQ;AAAA,UAACiH;AAAA,UAAA;AAAA,YACC,iBAAAC;AAAA,YACA,cAAAC;AAAA,YACA,MAAM;AAAA,cACJ,YAAY3H,EAAK;AAAA,cACjB,UAAUA,EAAK;AAAA,cACf,OAAOA,EAAK;AAAA,YAAA;AAAA,YAEd,iBAAA4H;AAAA,UAAA;AAAA,QAAA;AAAA,MACF;AAAA,IAAA;AAAA,EAAA;AAGN,GAEAmC,KAAevC,EAASqB,EAAQ,GC5J1BmB,KAAkE,CAAC;AAAA,EACvE,qBAAAC;AAAA,EACA,wBAAAC;AAAA,EACA,kBAAAC;AAAA,EACA,qBAAAC;AAAA,EACA,sBAAAC;AAAA,EACA,uBAAAC;AAAA,EACA,wBAAAC;AAAA,EACA,QAAAC;AAAA,EACA,SAAAC;AACF,MAAM;AACJ,QAAM,EAAE,aAAazK,EAAA,IAASC,EAAA,GACxB,CAACyK,GAAgBC,CAAiB,IAAIzF,EAAM,SAAkC,CAAA,CAAE,GAEhF0F,IACJ,CAACC,MAAsB,CAACC,GAA8BC,MAAwB;AAC5E,IAAAJ,EAAkB,CAACK,OAAgB;AAAA,MACjC,GAAGA;AAAA,MACH,CAACH,CAAS,GAAGE;AAAA,IAAA,EACb;AAAA,EACJ;AAEF,SACE,gBAAAxK;AAAA,IAAC0K;AAAA,IAAA;AAAA,MACC,gBAAgBjL,EAAK,SAAS;AAAA,MAC9B,QAAAwK;AAAA,MACA,SAAAC;AAAA,MACA,OAAOzK,EAAK,SAAS;AAAA,MAErB,UAAA;AAAA,QAAA,gBAAAO,EAACD,KAAM,IAAI,EAAE,KAAK,GAAG,GAAG,MACtB,UAAA;AAAA,UAAA,gBAAAE;AAAA,YAAC0K;AAAA,YAAA;AAAA,cACC,KAAKjB,EAAoB,SAAS,mBAAmB;AAAA,cACrD,iBAAiBA,EAAoB,SAAS,oBAAoB;AAAA,cAClE,MAAM;AAAA,YAAA;AAAA,UAAA;AAAA,UAER,gBAAAzJ,EAACC,GAAA,EAAK,IAAI,EAAE,OAAO,eAAA,GAAkB,SAAQ,SAC1C,UAAAwJ,EAAoB,SAAS,WAAA,CAChC;AAAA,UACA,gBAAAzJ,EAACC,GAAA,EAAK,IAAI,EAAE,OAAO,eAAA,GAAkB,SAAQ,MAC1C,UAAAwJ,EAAoB,SAAS,aAAaA,EAAoB,SAAS,MAC1E;AAAA,UAEA,gBAAA1J,EAACD,GAAA,EAAM,IAAI,EAAE,YAAY,UAAU,eAAe,OAAO,gBAAgB,gBAAA,GACvE,UAAA;AAAA,YAAA,gBAAAE,EAACC,GAAA,EAAK,IAAI,EAAE,OAAO,gBAAgB,YAAY,IAAA,GAAO,SAAQ,SAC3D,UAAAT,EAAK,SAAS,iBACjB;AAAA,YAEA,gBAAAQ,EAACC,GAAA,EAAK,IAAI,EAAE,OAAO,gBAAgB,YAAY,IAAA,GAAO,SAAQ,SAC3D,UAAAwJ,EAAoB,SAAS,SAAS,eAAe,SAAS;AAAA,cAC7D,UAAU;AAAA,cACV,uBAAuB;AAAA,cACvB,uBAAuB;AAAA,cACvB,OAAO;AAAA,YAAA,CACR,EAAA,CACH;AAAA,UAAA,EAAA,CACF;AAAA,QAAA,GACF;AAAA,QAEA,gBAAA1J;AAAA,UAACD;AAAAA,UAAA;AAAA,YACC,IAAI;AAAA,cACF,SAAS;AAAA,cACT,eAAe;AAAA,cACf,gBAAgB;AAAA,cAChB,IAAI;AAAA,cACJ,IAAI;AAAA,YAAA;AAAA,YAGN,UAAA;AAAA,cAAA,gBAAAE,EAACC,GAAA,EAAK,IAAI,EAAE,OAAO,gBAAgB,YAAY,IAAA,GAAO,SAAQ,WAC3D,UAAAT,EAAK,SAAS,SACjB;AAAA,cACA,gBAAAQ,EAACC,GAAA,EAAK,IAAI,EAAE,OAAO,gBAAgB,YAAY,IAAA,GAAO,SAAQ,WAC3D,UAAAT,EAAK,SAAS,aAAA,CACjB;AAAA,YAAA;AAAA,UAAA;AAAA,QAAA;AAAA,QAEDiK,EAAoB,UAAU,IAAI,CAACxI,GAAS0B,MAAU;AACrD,gBAAMgI,IAAqBhB,MAAqB1I,EAAQ;AACxD,iBACE,gBAAAlB;AAAA,YAAC6K;AAAA,YAAA;AAAA,cACC,gBAAgB;AAAA,cAChB,UAAUV,EAAejJ,EAAQ,EAAE,MAAM;AAAA,cAEzC,UAAUA,IAAUmJ,EAAsBnJ,GAAS,EAAE,IAAI,MAAM;AAAA,cAAC;AAAA,cAChE,IAAI;AAAA,gBACF,WAAW0B,MAAU,IAAI,EAAE,SAAS,EAAA,IAAM,CAAA;AAAA,gBAC1C,6BAA6B,EAAE,GAAG,EAAA;AAAA,cAAE;AAAA,cAGtC,UAAA;AAAA,gBAAA,gBAAA3C;AAAA,kBAAC6K;AAAA,kBAAA;AAAA,oBACC,iBAAc;AAAA,oBACd,IAAG;AAAA,oBACH,IAAI;AAAA,sBACF,EAAE,QAAQ,GAAA;AAAA,sBACVX,EAAejJ,EAAQ,EAAE,KACvB0B,IAAQ,KAAK;AAAA,wBACX,WAAW;AAAA,wBACX,aAAa;AAAA,sBAAA;AAAA,oBACf;AAAA,oBAGJ,UAAA,gBAAA5C,EAACD,KAAM,IAAI,EAAE,eAAe,OAAO,OAAO,UACxC,UAAA;AAAA,sBAAA,gBAAAE,EAAC,OAAA,EAAI,OAAO,EAAE,OAAO,MAAM;AAAA,sBAC3B,gBAAAD;AAAA,wBAACD;AAAAA,wBAAA;AAAA,0BACC,IAAI;AAAA,4BACF;AAAA,8BACE,YAAY;AAAA,8BACZ,eAAe;AAAA,8BACf,gBAAgB;AAAA,8BAChB,IAAI;AAAA,8BACJ,IAAI;AAAA,8BACJ,OAAO;AAAA,4BAAA;AAAA,4BAEToK,EAAejJ,EAAQ,EAAE,KAAK;AAAA,8BAC5B,cAAc;AAAA,8BACd,aAAa;AAAA,4BAAA;AAAA,0BACf;AAAA,0BAGF,UAAA;AAAA,4BAAA,gBAAAjB;AAAA,8BAACF;AAAAA,8BAAA;AAAA,gCACC,IAAI;AAAA,kCACF,YAAY;AAAA,kCACZ,eAAe;AAAA,kCACf,KAAK;AAAA,gCAAA;AAAA,gCAGP,UAAA,gBAAAC,EAACD,KAAM,IAAI,EAAE,UAAU,UAAU,OAAO,MACtC,UAAA;AAAA,kCAAA,gBAAAE,EAACC,GAAA,EAAK,IAAI,EAAE,YAAY,OAAO,SAAQ,SACpC,UAAAgB,EAAQ,QAAA,CACX;AAAA,kCACA,gBAAAjB,EAACC,GAAA,EAAK,SAAQ,WAAW,YAAQ,YAAA,CAAY;AAAA,gCAAA,EAAA,CAC/C;AAAA,8BAAA;AAAA,4BAAA;AAAA,4BAGF,gBAAAF;AAAA,8BAACD;AAAAA,8BAAA;AAAA,gCACC,IAAI;AAAA,kCACF,YAAY;AAAA,kCACZ,MAAM;AAAA,kCACN,eAAe;AAAA,kCACf,KAAK;AAAA,kCACL,gBAAgB;AAAA,gCAAA;AAAA,gCAGlB,UAAA;AAAA,kCAAA,gBAAAC,EAACD,GAAA,EACC,UAAA;AAAA,oCAAA,gBAAAE,EAACC,GAAA,EAAK,IAAI,EAAE,YAAY,KAAK,WAAW,QAAA,GAAW,SAAS,SACzD,UAAAgB,EAAQ,aAAa,eAAe,SAAS;AAAA,sCAC5C,UAAU;AAAA,sCACV,uBAAuB;AAAA,sCACvB,uBAAuB;AAAA,sCACvB,OAAO;AAAA,oCAAA,CACR,GACH;AAAA,oCACA,gBAAAlB,EAACD,GAAA,EAAM,IAAI,EAAE,YAAY,UAAU,KAAK,GAAG,eAAe,MAAA,GACvD,UAAA;AAAA,sCAAAmB,EAAQ,kBAAkB,KACzB,gBAAAjB;AAAA,wCAACmG;AAAA,wCAAA;AAAA,0CACC,MAAMlF,EAAQ,iBAAiB,IAAI,gBAAgB;AAAA,0CACnD,MAAM;AAAA,0CACN,IAAI;AAAA,4CACF,eAAe;AAAA,4CACf,IAAI;AAAA,4CACJ,OAAOA,EAAQ,iBAAiB,IAAI,iBAAiB;AAAA,0CAAA;AAAA,wCACvD;AAAA,sCAAA;AAAA,sCAGJ,gBAAAjB;AAAA,wCAACC;AAAA,wCAAA;AAAA,0CACC,IAAI;AAAA,4CACF,OAAOgB,EAAQ,iBAAiB,IAAI,aAAa;AAAA,4CACjD,YAAYA,EAAQ,iBAAiB,IAAI,MAAM;AAAA,0CAAA;AAAA,0CAEjD,SAAQ;AAAA,0CAEP,UAAAA,EAAQ,YACL,IAAKA,EAAQ,gBAAgBA,EAAQ,YAAa,KAAK,QAAQ,CAAC,CAAC,MACjE;AAAA,wCAAA;AAAA,sCAAA;AAAA,sCAEN,gBAAAjB,EAACC,KAAK,IAAI,EAAE,OAAO,WAAA,GAAc,SAAQ,WAAU,UAAA,IAAA,CAEnD;AAAA,sCACA,gBAAAD;AAAA,wCAACC;AAAA,wCAAA;AAAA,0CACC,IAAI;AAAA,4CACF,OAAOgB,EAAQ,iBAAiB,IAAI,aAAa;AAAA,4CACjD,YAAYA,EAAQ,iBAAiB,IAAI,MAAM;AAAA,0CAAA;AAAA,0CAEjD,SAAQ;AAAA,0CAEP,eAAK,IAAIA,EAAQ,aAAa,EAAE,eAAe,SAAS;AAAA,4CACvD,UAAU;AAAA,4CACV,uBAAuB;AAAA,4CACvB,uBAAuB;AAAA,4CACvB,OAAO;AAAA,0CAAA,CACR;AAAA,wCAAA;AAAA,sCAAA;AAAA,oCACH,EAAA,CACF;AAAA,kCAAA,GACF;AAAA,kCAEA,gBAAAjB;AAAA,oCAACmG;AAAA,oCAAA;AAAA,sCACC,MAAM+D,EAAejJ,EAAQ,EAAE,IAAI,gBAAgB;AAAA,sCACnD,MAAM;AAAA,oCAAA;AAAA,kCAAA;AAAA,gCACR;AAAA,8BAAA;AAAA,4BAAA;AAAA,0BACF;AAAA,wBAAA;AAAA,sBAAA;AAAA,oBACF,EAAA,CACF;AAAA,kBAAA;AAAA,gBAAA;AAAA,kCAED6J,IAAA,EACC,UAAA,gBAAA/K;AAAA,kBAACD;AAAAA,kBAAA;AAAA,oBACC,IAAI;AAAA,sBACF,YAAY;AAAA,sBACZ,SAAS;AAAA,sBACT,eAAe;AAAA,sBACf,IAAI;AAAA,oBAAA;AAAA,oBAGN,UAAA;AAAA,sBAAA,gBAAAE,EAACF,GAAA,EAAM,IAAI,EAAE,OAAO,MAAM;AAAA,wCACzBA,GAAA,EAAM,IAAI,EAAE,MAAM,KACjB,UAAA;AAAA,wBAAA,gBAAAC;AAAA,0BAACD;AAAAA,0BAAA;AAAA,4BACC,IAAI;AAAA,8BACF,YAAY;AAAA,8BACZ,cAAc;AAAA,8BACd,aAAa;AAAA,8BACb,eAAe;AAAA,8BACf,QAAQ;AAAA,8BACR,gBAAgB;AAAA,8BAChB,IAAI;AAAA,4BAAA;AAAA,4BAGN,UAAA;AAAA,8BAAA,gBAAAE,EAACC,GAAA,EAAK,IAAI,EAAE,OAAO,eAAA,GAAkB,SAAQ,SAC1C,UAAAT,EAAK,SAAS,SAAA,CACjB;AAAA,8BACA,gBAAAQ,EAACC,GAAA,EAAK,IAAI,EAAE,OAAO,kBAAkB,SAAQ,SAC1C,UAAAgB,EAAQ,IAAA,CACX;AAAA,4BAAA;AAAA,0BAAA;AAAA,wBAAA;AAAA,wBAEF,gBAAAlB;AAAA,0BAACD;AAAAA,0BAAA;AAAA,4BACC,IAAI;AAAA,8BACF,YAAY;AAAA,8BACZ,eAAe;AAAA,8BACf,QAAQ;AAAA,8BACR,gBAAgB;AAAA,8BAChB,IAAI;AAAA,4BAAA;AAAA,4BAGN,UAAA;AAAA,8BAAA,gBAAAE,EAACC,GAAA,EAAK,IAAI,EAAE,OAAO,eAAA,GAAkB,SAAQ,SAC1C,UAAAT,EAAK,SAAS,kBAAA,CACjB;AAAA,8BAEA,gBAAAO;AAAA,gCAACD;AAAAA,gCAAA;AAAA,kCACC,WAAU;AAAA,kCACV,IAAI;AAAA,oCACF,YAAY;AAAA,oCACZ,KAAK;AAAA,kCAAA;AAAA,kCAGN,UAAA;AAAA,oCAAA6K,IACC,gBAAA3K;AAAA,sCAAC+K;AAAA,sCAAA;AAAA,wCACC,WAAW;AAAA,wCACX,QAAQ,MAAMnB,EAAoB3I,EAAQ,EAAE;AAAA,wCAC5C,UAAU6I;AAAA,wCACV,WAAW,CAACkB,MACVjB,EAAuBiB,GAAG/J,EAAQ,EAAE;AAAA,wCAEtC,MAAK;AAAA,wCACL,IAAI;AAAA,0CACF,UAAU;AAAA,0CACV,OAAO;AAAA,0CACP,yBAAyB;AAAA,4CACvB,SAAS;AAAA,4CACT,WAAW;AAAA,4CACX,YAAY;AAAA,4CACZ,OAAO;AAAA,0CAAA;AAAA,0CAET,sCAAsC;AAAA,4CACpC,QAAQ;AAAA,0CAAA;AAAA,wCACV;AAAA,wCAEF,OAAOyI;AAAA,sCAAA;AAAA,oCAAA,IAGT,gBAAA1J,EAACC,GAAA,EAAK,IAAI,EAAE,UAAU,IAAI,OAAO,GAAA,GAAM,SAAQ,SAC5C,UAAAgB,EAAQ,WAAW,eAAe,SAAS;AAAA,sCAC1C,UAAU;AAAA,sCACV,uBAAuB;AAAA,sCACvB,uBAAuB;AAAA,sCACvB,OAAO;AAAA,oCAAA,CACR,GACH;AAAA,oCAGF,gBAAAjB;AAAA,sCAACoI;AAAA,sCAAA;AAAA,wCACC,SAAS,MAAMyB,EAAqB5I,EAAQ,IAAIA,EAAQ,SAAS;AAAA,wCACjE,IAAI,EAAE,UAAU,IAAI,WAAW,GAAA;AAAA,wCAE/B,UAAA,gBAAAjB,EAACmG,GAAA,EAAK,MAAM,UAAU,MAAM,IAAI,IAAI,EAAE,OAAO,WAAA,EAAW,CAAG;AAAA,sCAAA;AAAA,oCAAA;AAAA,kCAC7D;AAAA,gCAAA;AAAA,8BAAA;AAAA,4BACF;AAAA,0BAAA;AAAA,wBAAA;AAAA,sBACF,EAAA,CACF;AAAA,oBAAA;AAAA,kBAAA;AAAA,gBAAA,EACF,CACF;AAAA,cAAA;AAAA,YAAA;AAAA,YAvNKlF,EAAQ;AAAA,UAAA;AAAA,QA0NnB,CAAC;AAAA,MAAA;AAAA,IAAA;AAAA,EAAA;AAGP,GAEAgK,KAAejE,EAASwC,EAAuB,GCrVlC0B,IAAa,CAACC,MACzB,gBAAApL,EAACD,IAAA,EAAM,IAAI,EAAE,YAAY,UAAU,eAAe,OAAO,KAAK,KAC5D,UAAA;AAAA,EAAA,gBAAAE,EAACC,GAAA,EAAK,IAAI,EAAE,OAAO,gBAAgB,YAAY,KAAK,UAAU,GAAA,GAAM,SAAQ,SACzE,UAAAkL,EAAO,OAAO,YACjB;AAAA,EACA,gBAAAnL,EAACmG,GAAA,EAAK,MAAM,cAAc,MAAM,GAAA,CAAI;AAAA,GACtC,GC0BIiF,KAA8C,CAAC;AAAA,EACnD,MAAA5H;AAAA,EACA,kBAAAmG;AAAA,EACA,wBAAAD;AAAA,EACA,sBAAAG;AAAA,EACA,uBAAAC;AAAA,EACA,wBAAAC;AAAA,EACA,qBAAAH;AACF,MAAM;AACJ,QAAM,EAAE,aAAapK,EAAA,IAASC,EAAA,GAGxBkG,IAFQD,EAAA,EAEW,QAAQ,SAAS,QACpCG,IAAmB,gBACnBC,IAAmBH,IAAa,aAAa,YAE7CK,IAAuB,CAAC9C,GAAemI,IAAe,iBACtDA,MAAS,gBACJnI,KAAS,IAAI2C,IAAmBC,IAElC5C,KAAS,IAAI4C,IAAmBD,GAGnC6C,IAAwB;AAAA,IAC5B;AAAA,MACE,OAAO;AAAA,MACP,YAAYlJ,EAAK,SAAS;AAAA,MAC1B,UAAU;AAAA,MACV,OAAO;AAAA,MACP,OAAO;AAAA,MACP,aAAa;AAAA,IAAA;AAAA,IAEf;AAAA,MACE,OAAO;AAAA,MACP,YAAYA,EAAK,SAAS;AAAA,MAC1B,MAAM;AAAA,MACN,cAAc0L;AAAA,MACd,YAAY,CAACC,MACX,gBAAAnL,EAACF,KAAM,IAAI,EAAE,YAAY,UAAU,KAAK,IAAI,eAAe,MAAA,GACzD,4BAACA,GAAA,EAEC,UAAA;AAAA,QAAA,gBAAAE,EAACC,GAAA,EAAK,IAAI,EAAE,YAAY,OAAQ,UAAAkL,EAAO,IAAI,QAAA,CAAQ;AAAA,QACnD,gBAAAnL,EAACC,GAAA,EAAK,IAAI,EAAE,OAAO,kBAAkB,YAAY,IAAA,GAAO,SAAQ,QAC7D,UAAAkL,EAAO,IAAI,YAAA,CACd;AAAA,MAAA,EAAA,CACF,EAAA,CACF;AAAA,IAAA;AAAA,IAGJ;AAAA,MACE,OAAO;AAAA,MACP,YAAY3L,EAAK,SAAS;AAAA,MAC1B,OAAO;AAAA,MACP,cAAc0L;AAAA,MACd,YAAY,CAACC,MAAW;AACtB,cAAMR,IAAqBhB,MAAqBwB,EAAO,IAAI;AAC3D,eACE,gBAAApL,EAACD,GAAA,EAAM,IAAI,EAAE,YAAY,UAAU,eAAe,OAAO,KAAK,EAAA,GAC3D,UAAA;AAAA,UAAA6K,IACC,gBAAA3K;AAAA,YAAC+K;AAAA,YAAA;AAAA,cACC,WAAW;AAAA,cACX,QAAQ,MAAMnB,EAAoBuB,EAAO,IAAI,EAAE;AAAA,cAC/C,UAAUrB;AAAA,cACV,WAAW,CAACkB,MACVjB,EAAuBiB,GAAGG,EAAO,IAAI,EAAE;AAAA,cAEzC,MAAK;AAAA,cACL,IAAI;AAAA,gBACF,UAAU;AAAA,gBACV,OAAO;AAAA,gBACP,yBAAyB;AAAA,kBACvB,SAAS;AAAA,kBACT,WAAW;AAAA,kBACX,YAAY;AAAA,kBACZ,OAAO;AAAA,gBAAA;AAAA,gBAET,sCAAsC;AAAA,kBACpC,QAAQ;AAAA,gBAAA;AAAA,cACV;AAAA,cAEF,OAAOzB;AAAA,YAAA;AAAA,UAAA,IAGT,gBAAA1J,EAACC,GAAA,EAAK,IAAI,EAAE,UAAU,IAAI,OAAO,GAAA,GAAM,SAAQ,SAC5C,UAAAkL,EAAO,OAAO,eAAe,SAAS;AAAA,YACrC,UAAU;AAAA,YACV,uBAAuB;AAAA,YACvB,uBAAuB;AAAA,YACvB,OAAO;AAAA,UAAA,CACR,GACH;AAAA,UAEF,gBAAAnL;AAAA,YAACoI;AAAA,YAAA;AAAA,cACC,SAAS,MAAMyB,EAAqBsB,EAAO,IAAI,IAAIA,EAAO,IAAI,SAAS;AAAA,cACvE,IAAI,EAAE,UAAU,IAAI,WAAW,GAAA;AAAA,cAE/B,UAAA,gBAAAnL,EAACmG,GAAA,EAAK,MAAM,UAAU,MAAM,IAAI,IAAI,EAAE,OAAO,WAAA,EAAW,CAAG;AAAA,YAAA;AAAA,UAAA;AAAA,QAC7D,GACF;AAAA,MAEJ;AAAA,MACA,OAAO;AAAA,MACP,aAAa;AAAA,IAAA;AAAA,IAEf;AAAA,MACE,OAAO;AAAA,MACP,YAAY3G,EAAK,SAAS;AAAA,MAC1B,OAAO;AAAA,MACP,cAAc0L;AAAA,MACd,YAAY,CAACC,MAAW;AACtB,cAAMG,IAAYH,EAAO,IAAI,WACvBI,IAAqBD,IAAaH,EAAO,IAAI,gBAAgBG,IAAa,MAAM;AACtF,eACE,gBAAAvL,EAACD,GAAA,EAAM,IAAI,EAAE,YAAY,UAAU,eAAe,OAAO,KAAK,EAAA,GAC3D,UAAA;AAAA,UAAAqL,EAAO,UAAU,KAChB,gBAAAnL;AAAA,YAACmG;AAAA,YAAA;AAAA,cACC,MAAMgF,EAAO,QAAQ,IAAI,gBAAgB;AAAA,cACzC,MAAM;AAAA,cACN,IAAI;AAAA,gBACF,OAAOnF,EAAqBmF,EAAO,KAAK;AAAA,gBACxC,IAAI;AAAA,gBACJ,eAAe;AAAA,cAAA;AAAA,YACjB;AAAA,UAAA;AAAA,UAGJ,gBAAAnL;AAAA,YAACC;AAAA,YAAA;AAAA,cACC,IAAI;AAAA,gBACF,OAAO+F,EAAqBmF,EAAO,KAAK;AAAA,gBACxC,YAAYA,EAAO,QAAQ,IAAI,MAAM;AAAA,cAAA;AAAA,cAEvC,SAAQ;AAAA,cAEP,cAAY,GAAGI,EAAmB,QAAQ,CAAC,CAAC,MAAM;AAAA,YAAA;AAAA,UAAA;AAAA,UAErD,gBAAAvL,EAACC,KAAK,IAAI,EAAE,OAAO,iBAAA,GAAoB,SAAQ,WAAU,UAAA,IAAA,CAEzD;AAAA,UACA,gBAAAD;AAAA,YAACC;AAAA,YAAA;AAAA,cACC,IAAI;AAAA,gBACF,OAAO+F,EAAqBmF,EAAO,KAAK;AAAA,gBACxC,YAAYA,EAAO,QAAQ,IAAI,MAAM;AAAA,cAAA;AAAA,cAEvC,SAAQ;AAAA,cAEP,eAAK,IAAIA,EAAO,KAAK,EAAE,eAAe,SAAS;AAAA,gBAC9C,UAAU;AAAA,gBACV,uBAAuB;AAAA,gBACvB,uBAAuB;AAAA,gBACvB,OAAO;AAAA,cAAA,CACR;AAAA,YAAA;AAAA,UAAA;AAAA,QACH,GACF;AAAA,MAEJ;AAAA,MACA,OAAO;AAAA,MACP,aAAa;AAAA,MACb,UAAU;AAAA,IAAA;AAAA,IAEZ;AAAA,MACE,OAAO;AAAA,MACP,YAAY3L,EAAK,SAAS;AAAA,MAC1B,OAAO;AAAA,MACP,cAAc0L;AAAA,MACd,YAAY,CAACC,MACX,gBAAAnL,EAACC,KAAK,IAAI,EAAE,YAAY,IAAA,GAAO,SAAS,SACrC,UAAAkL,EAAO,OAAO,eAAe,SAAS;AAAA,QACrC,UAAU;AAAA,QACV,uBAAuB;AAAA,QACvB,uBAAuB;AAAA,QACvB,OAAO;AAAA,MAAA,CACR,GACH;AAAA,MAEF,OAAO;AAAA,MACP,aAAa;AAAA,IAAA;AAAA,EACf;AAGF,SACE,gBAAAnL;AAAA,IAACwL;AAAA,IAAA;AAAA,MACC,IAAI;AAAA,QACF,WAAW;AAAA,QACX,OAAO;AAAA,MAAA;AAAA,MAGT,UAAA,gBAAAxL;AAAA,QAACyL;AAAA,QAAA;AAAA,UACC,SAAA/C;AAAA,UACA,qBAAqB;AAAA,UACrB,mBAAmB;AAAA,UACnB,4BAA4B;AAAA,UAC5B,YAAY;AAAA,UACZ,MAAMlF;AAAA,UACN,WAAW,EAAE,gBAAgB,EAAE,IAAI,EAAE,SAAS,SAAO,EAAE;AAAA,QAAE;AAAA,MAAA;AAAA,IAC3D;AAAA,EAAA;AAGN,GCtMMkI,KAAW,MAAM;AACrB,QAAM,EAAE,UAAA1H,EAAA,IAAaC,EAAA,GACf,CAACiG,GAAgBC,CAAiB,IAAIwB,EAAkC,CAAA,CAAE,GAC1E,CAACC,GAAYC,CAAa,IAAIF,EAAS,EAAK,GAC5C,EAAE,sBAAAnF,EAAA,IAAyBC,EAAA,GAC3B,EAAE,iBAAiB5F,GAAU,gBAAAiL,EAAA,IAAmBjM,EAAA,GAChD,CAACkM,GAAuBnM,CAAwB,IAAI8E,EAAM,SAAS,EAAK,GAExE,CAAC+E,GAAqBuC,CAAsB,IAAIL,EAGnD;AAAA,IACD,UAAU,CAAA;AAAA,IACV,UAAU,CAAA;AAAA,EAAC,CACZ,GACK,EAAE,UAAUM,GAAc,aAAazM,EAAA,IAASC,EAAA,GAChD,EAAE,cAAAyM,EAAA,IAAiBzF,EAAA,GACnB,CAACkD,GAAkBwC,CAAmB,IAAIR,EAAwB,IAAI,GACtE,CAACjC,GAAwB0C,CAAyB,IAAIT,EAAiB,EAAE,GAIzEhG,IAFQD,EAAA,EAEW,QAAQ,SAAS,QAEpCG,IAAmBF,IAAa,YAAY,WAE5CG,IAAmBH,IAAa,aAAa,YAE7CK,IAAuB,CAAC9C,GAAemI,IAAe,iBACtDA,MAAS,gBACJnI,KAAS,IAAI2C,IAAmBC,IAElC5C,KAAS,IAAI4C,IAAmBD,GAGnCgE,IAAuB,CAACQ,GAAmBgC,MAA6B;AAC5E,IAAAF,EAAoB9B,CAAS,GAC7B+B,EAA0BC,EAAiB,QAAQ,CAAC,CAAC;AAAA,EACvD,GAEMvC,KAAwB,CAACwC,MAA+C;AAE5E,UAAMpJ,IAAQoJ,EAAM,OAAO;AAC3B,IAAI,cAAc,KAAKpJ,CAAK,KAC1BkJ,EAA0BlJ,CAAK;AAAA,EAEnC,GAEM6G,KAAyB,CAACuC,GAA8C/F,MAAe;AAC3F,IAAI+F,EAAM,QAAQ,UAChB1C,GAAoBrD,CAAE,IACb+F,EAAM,QAAQ,YACvBH,EAAoB,IAAI;AAAA,EAE5B,GAEMvC,KAAsB,CAACrD,MAAe;AAC1C,UAAMtF,IAAUJ,EAAS,KAAK,CAAC,EAAE,MAAAkB,EAAA,MAAWA,MAASwE,CAAE;AACvD,QAAI,CAACtF,EAAS;AAEd,UAAMsL,IAAmB,OAAO7C,CAAsB;AAGtD,QAFAoC,EAAe,EAAE,GAAG7K,GAAS,YAAYsL,GAAkB,GAEvDvI,GAAU;AACZ,YAAMhC,IAAkByH,EAAoB,SAAS;AAAA,QAAI,CAAC+C,MACxDA,EAAE,OAAOjG,IAAK,EAAE,GAAGiG,GAAG,WAAWD,MAAqBC;AAAA,MAAA;AAGxD,MAAAR,EAAuB,CAACS,OAAU;AAAA,QAChC,GAAGA;AAAA,QACH,UAAUzK;AAAAA,MAAA,EACV;AAAA,IACJ;AAEA,IAAAmK,EAAoB,IAAI;AAAA,EAC1B,GAEM/B,KACJ,CAACsC,MAAsB,CAACpC,GAA8BC,MAAwB;AAC5E,IAAAJ,EAAkB,CAACK,OAAgB;AAAA,MACjC,GAAGA;AAAA,MACH,CAACkC,CAAS,GAAGnC;AAAA,IAAA,EACb;AAAA,EACJ,GAEI,EAAE,iBAAiB7D,GAAA,IAAgB7G,EAAA,GACnC,EAAE,2BAAA8M,GAAA,IAA8BhG,GAAA,GAEhCjF,IAAWiL,GAA0B;AAAA,IAAO,CAAC,EAAE,MAAA5K,EAAA,MACnDyE,EAAqB,SAASzE,CAAI;AAAA,EAAA,GAG9B6K,KAAsBlL,EAAS,OAAO,CAACW,GAAKC,MAAYD,KAAOC,EAAQ,WAAW,IAAI,CAAC,GAEvFR,KAAeJ,EAAS,IAAI,CAAC,EAAE,MAAAK,EAAA,MAAWA,CAAI,GAM9C8K,IAJkBnG,GAAY;AAAA,IAAO,CAAC,EAAE,cAAAzE,EAAA,MAC5CH,GAAa,SAASG,CAAY;AAAA,EAAA,EAGH,OAAO,CAACI,GAAKpB,MAAY;AACxD,UAAM6L,IAAK7L,EAAQ,eAAeA,EAAQ,gBAAgBA,EAAQ,cAAc,KAAK;AACrF,WAAOoB,IAAMyK;AAAA,EACf,GAAG,CAAC,GAEEC,KAAc,MAAM;AACxB,IAAAlB,EAAc,EAAK;AAAA,EACrB;AAEA,SAAKK,IAKH,gBAAAnM,EAACD,GAAA,EAAM,IAAI,EAAE,YAAY,UAAU,KAAK,IAAI,IAAI,IAAI,OAAO,OAAA,GAExD,UAAA;AAAA,IAAA,CAAC,CAAC4B,EAAS,UACV,gBAAA3B,EAACD,KAAM,IAAI,EAAE,YAAY,SAAA,GACvB,UAAA;AAAA,MAAA,gBAAAE,EAACC,GAAA,EAAK,IAAI,EAAE,OAAO,oBAAqB,UAAAT,EAAK,SAAS,gBAAA,CAAgB;AAAA,wBACrE0G,GAAA,EAAE,SAAQ,MACR,UAAA0G,GAAoB,eAAe,SAAS;AAAA,QAC3C,UAAU;AAAA,QACV,uBAAuB;AAAA,QACvB,uBAAuB;AAAA,QACvB,OAAO;AAAA,MAAA,CACR,GACH;AAAA,MACA,gBAAA7M,EAACD,GAAA,EAAM,IAAI,EAAE,YAAY,UAAU,eAAe,OAAO,KAAK,EAAA,GAC5D,UAAA;AAAA,QAAA,gBAAAE;AAAA,UAACmG;AAAA,UAAA;AAAA,YACC,MAAM0G,KAAY,IAAI,gBAAgB;AAAA,YACtC,MAAM;AAAA,YACN,IAAI,EAAE,OAAO7G,EAAqB6G,GAAU,aAAa,EAAA;AAAA,UAAE;AAAA,QAAA;AAAA,QAE7D,gBAAA7M;AAAA,UAACC;AAAA,UAAA;AAAA,YACC,IAAI,EAAE,OAAO+F,EAAqB6G,GAAU,aAAa,GAAG,YAAY,IAAA;AAAA,YACxE,SAAQ;AAAA,YAEP,UAAAA,EAAS,eAAe,SAAS;AAAA,cAChC,UAAU;AAAA,cACV,uBAAuB;AAAA,cACvB,uBAAuB;AAAA,cACvB,OAAO;AAAA,YAAA,CACR;AAAA,UAAA;AAAA,QAAA;AAAA,MACH,EAAA,CACF;AAAA,IAAA,GACF;AAAA,IAGDnL,EAAS,IAAI,CAACY,MAAY;AACzB,YAAM0K,IAAmCtG,GACtC,OAAO,CAACzF,MAAYA,EAAQ,iBAAiBqB,EAAQ,IAAI,EACzD,IAAI,CAACrB,OAAa;AAAA,QACjB,IAAIA,EAAQ;AAAA,QACZ,KAAKA,EAAQ,UAAU;AAAA,QACvB,SAASA,EAAQ,UAAUA,EAAQ,eAAe;AAAA,QAClD,WAAWA,EAAQ,cAAc;AAAA,QACjC,eAAeA,EAAQ,eACnBA,EAAQ,gBAAgBA,EAAQ,cAAc,KAC9C;AAAA,QACJ,aAAaA,EAAQ,gBAAgB;AAAA,QACrC,aAAaA,EAAQ,eAAe;AAAA,MAAA,EACpC,GAEEgM,IAAkBD,EAAgB,SAAS,GAE3CE,IAAoB5K,EAAQ,SAC5B6K,IAAkBH,EAAgB;AAAA,QACtC,CAAC3K,GAAKpB,OAAYA,GAAQ,gBAAgBoB;AAAA,QAC1C;AAAA,MAAA,GAGI+K,KAA4BF,IAC7BC,IAAkBD,IAAqB,MACxC;AAGJ,UAAIlJ;AACF,eACE,gBAAAhE;AAAA,UAACwL;AAAA,UAAA;AAAA,YAEC,SACEwB,EAAgB,SACZ,MAAM;AACJ,cAAAnB,EAAc,EAAI,GAClBG,EAAuB;AAAA,gBACrB,UAAUgB;AAAA,gBACV,UAAU1K;AAAA,cAAA,CACX;AAAA,YACH,IACA;AAAA,YAEN,IAAI;AAAA,cACF,OAAO;AAAA,cACP,UAAU;AAAA,YAAA;AAAA,YAGZ,UAAA,gBAAAvC;AAAA,cAACD;AAAAA,cAAA;AAAA,gBACC,IAAI;AAAA,kBACF,QAAQ;AAAA,kBACR,aAAa;AAAA,kBACb,cAAc;AAAA,kBACd,IAAI;AAAA,kBACJ,IAAI;AAAA,kBACJ,UAAU;AAAA,kBACV,IAAI;AAAA,gBAAA;AAAA,gBAGN,UAAA;AAAA,kBAAA,gBAAAC;AAAA,oBAACD;AAAAA,oBAAA;AAAA,sBACC,IAAI;AAAA,wBACF,YAAY;AAAA,wBACZ,cAAc;AAAA,wBACd,aAAa;AAAA,wBACb,eAAe;AAAA,wBACf,IAAI;AAAA,wBACJ,IAAI;AAAA,wBACJ,IAAI;AAAA,sBAAA;AAAA,sBAGN,UAAA;AAAA,wBAAA,gBAAAE;AAAA,0BAAC0K;AAAA,0BAAA;AAAA,4BACC,KAAKpI,EAAQ,mBAAmB;AAAA,4BAChC,iBAAiBA,EAAQ,oBAAoB;AAAA,4BAC7C,MAAM;AAAA,0BAAA;AAAA,wBAAA;AAAA,wBAER,gBAAAvC,EAACD,GAAA,EAAM,IAAI,EAAE,UAAU,UAAU,IAAI,IAAI,IAAI,GAAA,GAC3C,UAAA;AAAA,0BAAA,gBAAAE,EAACC,GAAA,EAAK,IAAI,EAAE,OAAO,oBAAoB,SAAQ,WAC5C,UAAAqC,EAAQ,WAAA,CACX;AAAA,0BACA,gBAAAtC,EAACC,GAAA,EAAK,IAAI,EAAE,OAAO,gBAAgB,YAAY,IAAA,GAAO,SAAQ,SAC3D,UAAAqC,EAAQ,aAAaA,EAAQ,KAAA,CAChC;AAAA,wBAAA,EAAA,CACF;AAAA,sBAAA;AAAA,oBAAA;AAAA,kBAAA;AAAA,kBAGF,gBAAAvC;AAAA,oBAACD;AAAAA,oBAAA;AAAA,sBACC,IAAI;AAAA,wBACF,YAAY;AAAA,wBACZ,eAAe;AAAA,wBACf,gBAAgB;AAAA,wBAChB,IAAI;AAAA,wBACJ,IAAI;AAAA,sBAAA;AAAA,sBAGN,UAAA;AAAA,wBAAA,gBAAAC;AAAA,0BAACD;AAAAA,0BAAA;AAAA,4BACC,IAAI;AAAA,8BACF,YAAY;AAAA,8BACZ,aAAa;AAAA,8BACb,aAAa;AAAA,8BACb,MAAM;AAAA,8BACN,gBAAgB;AAAA,8BAChB,IAAI;AAAA,8BACJ,IAAI;AAAA,8BACJ,IAAI;AAAA,8BACJ,IAAI;AAAA,4BAAA;AAAA,4BAGN,UAAA;AAAA,8BAAA,gBAAAE,EAACC,GAAA,EAAK,IAAI,EAAE,OAAO,kBAAkB,UAAU,GAAA,GAAM,SAAQ,SAC1D,UAAAT,EAAK,SAAS,iBACjB;AAAA,8BACA,gBAAAO;AAAA,gCAACD;AAAAA,gCAAA;AAAA,kCACC,IAAI;AAAA,oCACF,YAAY;AAAA,oCACZ,eAAe;AAAA,oCACf,KAAK;AAAA,oCACL,gBAAgB;AAAA,kCAAA;AAAA,kCAGjB,UAAA;AAAA,oCAAAqN,MAAoB,KACnB,gBAAAnN;AAAA,sCAACmG;AAAA,sCAAA;AAAA,wCACC,MAAMgH,IAAkB,IAAI,gBAAgB;AAAA,wCAC5C,MAAM;AAAA,wCACN,IAAI,EAAE,OAAOnH,EAAqBmH,CAAe,EAAA;AAAA,sCAAE;AAAA,oCAAA;AAAA,oCAGvD,gBAAApN;AAAA,sCAACE;AAAA,sCAAA;AAAA,wCACC,IAAI;AAAA,0CACF,OAAO+F,EAAqBmH,CAAe;AAAA,0CAC3C,YAAY;AAAA,wCAAA;AAAA,wCAEd,SAAQ;AAAA,wCAEP,UAAA;AAAA,0CAAAC,GAA0B,QAAQ,CAAC;AAAA,0CAAE;AAAA,wCAAA;AAAA,sCAAA;AAAA,oCAAA;AAAA,oCAExC,gBAAApN,EAACC,KAAK,IAAI,EAAE,OAAO,iBAAA,GAAoB,SAAQ,WAAU,UAAA,IAAA,CAEzD;AAAA,oCACA,gBAAAD;AAAA,sCAACC;AAAA,sCAAA;AAAA,wCACC,IAAI;AAAA,0CACF,OAAO+F,EAAqBmH,CAAe;AAAA,0CAC3C,YAAY;AAAA,wCAAA;AAAA,wCAEd,SAAQ;AAAA,wCAEP,UAAA,KAAK,IAAIA,CAAe,EAAE,eAAe,SAAS;AAAA,0CACjD,UAAU;AAAA,0CACV,uBAAuB;AAAA,0CACvB,uBAAuB;AAAA,0CACvB,OAAO;AAAA,wCAAA,CACR;AAAA,sCAAA;AAAA,oCAAA;AAAA,kCACH;AAAA,gCAAA;AAAA,8BAAA;AAAA,4BACF;AAAA,0BAAA;AAAA,wBAAA;AAAA,wBAGF,gBAAApN;AAAA,0BAACD;AAAAA,0BAAA;AAAA,4BACC,IAAI;AAAA,8BACF,YAAY;AAAA,8BACZ,MAAM;AAAA,8BACN,gBAAgB;AAAA,8BAChB,IAAI;AAAA,8BACJ,IAAI;AAAA,8BACJ,IAAI;AAAA,8BACJ,IAAI;AAAA,4BAAA;AAAA,4BAGN,UAAA;AAAA,8BAAA,gBAAAE,EAACC,GAAA,EAAK,IAAI,EAAE,OAAO,iBAAA,GAAoB,SAAQ,WAC5C,UAAAT,EAAK,SAAS,YAAA,CACjB;AAAA,8BACA,gBAAAQ,EAACC,GAAA,EAAK,IAAI,EAAE,OAAO,gBAAgB,YAAY,IAAA,GAAO,SAAQ,SAC3D,UAAAiN,GAAmB,eAAe,SAAS;AAAA,gCAC1C,UAAU;AAAA,gCACV,uBAAuB;AAAA,gCACvB,uBAAuB;AAAA,gCACvB,OAAO;AAAA,8BAAA,CACR,EAAA,CACH;AAAA,4BAAA;AAAA,0BAAA;AAAA,wBAAA;AAAA,sBACF;AAAA,oBAAA;AAAA,kBAAA;AAAA,gBACF;AAAA,cAAA;AAAA,YAAA;AAAA,UACF;AAAA,UAnJK5K,EAAQ;AAAA,QAAA;AAwJnB,YAAM+K,KAAgB1H,IAAa,aAAa,YAC1C2H,KAAYN,EAAgB,SAAS,iBAAiBK;AAE5D,aACE,gBAAAtN;AAAA,QAAC6K;AAAA,QAAA;AAAA,UACC,UAAUV,EAAe5H,EAAQ,IAAI,MAAM;AAAA,UAE3C,UAAU2K,IAAkB7C,GAAsB9H,EAAQ,IAAI,IAAI,MAAM;AAAA,UAAC;AAAA,UACzE,IAAI;AAAA,YACF,QAAQ;AAAA,YACR,aAAa;AAAA,YACb,cAAc;AAAA,YACd,OAAO;AAAA,UAAA;AAAA,UAGT,UAAA;AAAA,YAAA,gBAAAvC;AAAA,cAAC8K;AAAA,cAAA;AAAA,gBACC,iBAAc;AAAA,gBACd,IAAG;AAAA,gBACH,IAAI;AAAA,kBACFX,EAAe5H,EAAQ,IAAI,KAAK;AAAA,oBAC9B,cAAc;AAAA,oBACd,aAAa;AAAA,oBACb,WAAW;AAAA,kBAAA;AAAA,gBACb;AAAA,gBAGF,UAAA;AAAA,kBAAA,gBAAAvC;AAAA,oBAACD;AAAAA,oBAAA;AAAA,sBACC,IAAI;AAAA,wBACF,YAAY;AAAA,wBACZ,eAAe;AAAA,wBACf,KAAK;AAAA,wBACL,GAAG;AAAA,wBACH,OAAO;AAAA,sBAAA;AAAA,sBAGT,UAAA;AAAA,wBAAA,gBAAAE,EAACmG,GAAA,EAAK,MAAM,eAAe,MAAM,IAAI,IAAI,EAAE,OAAOmH,GAAA,EAAU,CAAG;AAAA,wBAC/D,gBAAAtN;AAAA,0BAAC0K;AAAA,0BAAA;AAAA,4BACC,KAAKpI,EAAQ,mBAAmB;AAAA,4BAChC,iBAAiBA,EAAQ,oBAAoB;AAAA,4BAC7C,MAAM;AAAA,0BAAA;AAAA,wBAAA;AAAA,0CAGPxC,GAAA,EAAM,IAAI,EAAE,YAAY,gBACvB,UAAA;AAAA,0BAAA,gBAAAE,EAACC,GAAA,EAAK,IAAI,EAAE,OAAO,oBAAoB,SAAQ,WAC5C,UAAAqC,EAAQ,WAAA,CACX;AAAA,0BACA,gBAAAtC,EAACC,GAAA,EAAK,IAAI,EAAE,OAAO,gBAAgB,YAAY,IAAA,GAAO,SAAQ,SAC3D,UAAAqC,EAAQ,aAAaA,EAAQ,KAAA,CAChC;AAAA,wBAAA,EAAA,CACF;AAAA,sBAAA;AAAA,oBAAA;AAAA,kBAAA;AAAA,oCAGDxC,GAAA,EAAM,IAAI,EAAE,eAAe,SAC1B,UAAA;AAAA,oBAAA,gBAAAC,EAACD,GAAA,EAAM,IAAI,EAAE,YAAY,YAAY,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,MAC/D,UAAA;AAAA,sBAAA,gBAAAE,EAACC,GAAA,EAAK,IAAI,EAAE,OAAO,iBAAA,GAAoB,SAAQ,WAC5C,UAAAT,EAAK,SAAS,gBAAA,CACjB;AAAA,sBAEA,gBAAAO;AAAA,wBAACD;AAAAA,wBAAA;AAAA,0BACC,IAAI;AAAA,4BACF,YAAY;AAAA,4BACZ,eAAe;AAAA,4BACf,KAAK;AAAA,4BACL,gBAAgB;AAAA,0BAAA;AAAA,0BAGjB,UAAA;AAAA,4BAAAqN,MAAoB,KACnB,gBAAAnN;AAAA,8BAACmG;AAAA,8BAAA;AAAA,gCACC,MAAMgH,KAAmB,IAAI,gBAAgB;AAAA,gCAC7C,MAAM;AAAA,gCACN,IAAI,EAAE,OAAOnH,EAAqBmH,CAAe,EAAA;AAAA,8BAAE;AAAA,4BAAA;AAAA,4BAGvD,gBAAApN;AAAA,8BAACE;AAAA,8BAAA;AAAA,gCACC,IAAI;AAAA,kCACF,OAAO+F,EAAqBmH,CAAe;AAAA,kCAC3C,YAAY;AAAA,gCAAA;AAAA,gCAEd,SAAQ;AAAA,gCAEP,UAAA;AAAA,kCAAAC,GAA0B,QAAQ,CAAC;AAAA,kCAAE;AAAA,gCAAA;AAAA,8BAAA;AAAA,4BAAA;AAAA,4BAExC,gBAAApN,EAACC,KAAK,IAAI,EAAE,OAAO,iBAAA,GAAoB,SAAQ,WAAU,UAAA,IAAA,CAEzD;AAAA,4BACA,gBAAAD;AAAA,8BAACC;AAAA,8BAAA;AAAA,gCACC,IAAI;AAAA,kCACF,OAAO+F,EAAqBmH,CAAe;AAAA,kCAC3C,YAAY;AAAA,gCAAA;AAAA,gCAEd,SAAQ;AAAA,gCAEP,UAAA,KAAK,IAAIA,CAAe,EAAE,eAAe,SAAS;AAAA,kCACjD,UAAU;AAAA,kCACV,uBAAuB;AAAA,kCACvB,uBAAuB;AAAA,kCACvB,OAAO;AAAA,gCAAA,CACR;AAAA,8BAAA;AAAA,4BAAA;AAAA,0BACH;AAAA,wBAAA;AAAA,sBAAA;AAAA,oBACF,GACF;AAAA,oBAEA,gBAAAnN,EAACF,KAAM,IAAI,EAAE,YAAY,YAAY,KAAK,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,GAAA,GACxE,UAAA,gBAAAC,EAACD,KAAM,IAAI,EAAE,YAAY,WAAA,GACvB,UAAA;AAAA,sBAAA,gBAAAE,EAACC,GAAA,EAAK,IAAI,EAAE,OAAO,iBAAA,GAAoB,SAAQ,WAC5C,UAAAT,EAAK,SAAS,YAAA,CACjB;AAAA,sBACA,gBAAAQ,EAACC,GAAA,EAAK,IAAI,EAAE,OAAO,gBAAgB,YAAY,IAAA,GAAO,SAAQ,SAC3D,UAAAiN,GAAmB,eAAe,SAAS;AAAA,wBAC1C,UAAU;AAAA,wBACV,uBAAuB;AAAA,wBACvB,uBAAuB;AAAA,wBACvB,OAAO;AAAA,sBAAA,CACR,EAAA,CACH;AAAA,oBAAA,EAAA,CACF,EAAA,CACF;AAAA,kBAAA,EAAA,CACF;AAAA,gBAAA;AAAA,cAAA;AAAA,YAAA;AAAA,8BAEDpC,IAAA,EAAiB,IAAI,EAAE,SAAS,sBAAsB,GAAG,GAAA,GACxD,UAAA,gBAAA9K,EAACwL,MAAM,IAAI,EAAE,QAAQ,GAAG,aAAa,mBACnC,UAAA,gBAAAxL;AAAA,cAACoL;AAAA,cAAA;AAAA,gBACC,wBAAA1B;AAAA,gBACA,MAAMsD;AAAA,gBACN,kBAAArD;AAAA,gBACA,qBAAAC;AAAA,gBACA,uBAAAE;AAAA,gBACA,sBAAAD;AAAA,gBACA,wBAAAE;AAAA,cAAA;AAAA,YAAA,GAEJ,EAAA,CACF;AAAA,UAAA;AAAA,QAAA;AAAA,QA7HKzH,EAAQ;AAAA,MAAA;AAAA,IAgInB,CAAC;AAAA,sBAGAhD,IAAA,EAA0B;AAAA,IAG3B,gBAAAU;AAAA,MAACwJ;AAAAA,MAAA;AAAA,QACC,qBAAAC;AAAA,QACA,wBAAAC;AAAA,QACA,kBAAAC;AAAA,QACA,qBAAAC;AAAA,QACA,uBAAAE;AAAA,QACA,sBAAAD;AAAA,QACA,wBAAAE;AAAA,QACA,QAAQ6B;AAAA,QACR,SAASmB;AAAA,MAAA;AAAA,IAAA;AAAA,IAGX,gBAAA/M;AAAA,MAACuN;AAAA,MAAA;AAAA,QACC,SAAS,MAAM3N,EAAyB,EAAK;AAAA,QAC7C,uBAAAmM;AAAA,QACA,OAAOE,EAAa;AAAA,MAAA;AAAA,IAAA;AAAA,EACtB,GACF,sBA1XQuB,IAAA,EAAO;AA4XnB,GAEAC,KAAezG,EAAS0E,EAAQ,GCzgBnBgC,KAAW,CAAC,EAAE,OAAA5F,QACzB,gBAAA9H,EAACC,GAAA,EAAK,MAAM,IAAM,SAAQ,SACvB,UAAA6H,EAAA,CACH,GCmBW6F,KAAoB3G,EAAS,CAAC,EAAE,aAAA4G,GAAa,aAAAC,GAAa,IAAAtO,QAAsB;AAC3F,QAAM,EAAE,SAAAG,EAAA,IAAYC,GAAA,GACd,EAAE,UAAAqE,EAAA,IAAaC,EAAA,GACf;AAAA,IACJ,qBAAA6J;AAAA,IACA,iBAAAC;AAAA,IACA,2BAA2BrM;AAAA,EAAA,IACzBiF,GAAA,GACE;AAAA,IACJ,iBAAiB9F;AAAA,IACjB,0BAAAjB;AAAA,IACA,uBAAAmM;AAAA,EAAA,IACElM,EAAA,GACE,EAAE,aAAaL,GAAM,UAAUyM,EAAA,IAAiBxM,EAAA,GAEhD,EAAE,eAAAuO,EAAA,IAAkBvH,EAAA,GAEpB,CAACwH,GAAaC,CAAc,IAAIxJ,EAAM,SAAS,CAAC,GAEhD,EAAE,cAAAyJ,GAAc,gBAAAC,EAAA,IAAmBvO,EAAA;AAEzC,EAAAwO,GAAmB;AAAA,IACjB,YAAY;AAAA,IACZ,UAAUD;AAAA,EAAA,CACX,GAED1J,EAAM,UAAU,MAAM;AACpB,IAAKoJ,KACHC,EAAA,EAAkB,QAAA;AAAA,EAEtB,GAAG,CAAA,CAAE,GAELrJ,EAAM,UAAU,MAAM;AACpB,IAAIsJ,KACFG,EAAA,EAAe,QAAA;AAAA,EAEnB,GAAG,CAACH,CAAa,CAAC;AAElB,QAAMM,IAA2B,MAAM;AACrC,IAAA5O,EAAQS,EAAiB,sCAAsC;AAAA,EACjE;AAEA,MAAI,CAAC6N,KAAiB,CAACI,EAAgB,0BAAQZ,IAAA,EAAO;AAEtD,QAAMe,IAAS;AAAA,IACbpO,EAAiB;AAAA,IACjBA,EAAiB;AAAA,IACjBA,EAAiB;AAAA,EAAA,GAEbgE,IAAezC,EAAS,WAAW,KAAKb,EAAS,WAAW,GAC5D2N,IAAiB;AAAA,IACrBhP,EAAK;AAAA,IACLA,EAAK;AAAA,IACLA,EAAK;AAAA,EAAA;AAEP,SACE,gBAAAO;AAAA,IAAC0O;AAAA,IAAA;AAAA,MACC,qBAAqB,CAACC,GAAY,UAAU;AAAA,MAC5C,uBAAuBJ;AAAA,MACvB,aAAAV;AAAA,MACA,aAAAC;AAAA,MACA,IAAAtO;AAAA,MACA,OAAOC,EAAK;AAAA,MAEZ,UAAA;AAAA,QAAA,gBAAAO,EAACD,KAAM,IAAIkE,IAAW,IAAI,IAAI,IAAI,IAChC,UAAA;AAAA,UAAA,gBAAAhE;AAAA,YAAC2O;AAAA,YAAA;AAAA,cACC,UAAU,CAAC7K,GAAGC,MAAa;AACzB,gBAAAmK,EAAenK,CAAQ,GACvBrE,EAAQ6O,EAAOxK,CAAQ,CAAC;AAAA,cAC1B;AAAA,cACA,IAAI,EAAE,SAAS,mBAAA;AAAA,cACf,WAAU;AAAA,cACV,OAAQI,IAA6B,KAAd8J;AAAA,cACvB,SAAQ;AAAA,cAEP,UAAAO,EAAe,IAAI,CAAC1G,wBAClB8G,IAAA,EAAI,UAAUzK,GAA0B,OAAO,gBAAAnE,EAAC0N,IAAA,EAAS,OAAA5F,EAAA,CAAc,EAAA,GAAtCA,CAA0C,CAC7E;AAAA,YAAA;AAAA,UAAA;AAAA,UAEF3D,IACC,gBAAAnE;AAAA,YAAC6O;AAAA,YAAA;AAAA,cACC,QAAQrP,EAAK;AAAA,cACb,MAAK;AAAA,cACL,SAAS,MAAM;AACb,gBAAAI,EAAyB,EAAI,GAC7BF,EAAQS,EAAiB,sBAAsB;AAAA,cACjD;AAAA,cACA,eAAeX,EAAK,SAAS;AAAA,cAC7B,SAASA,EAAK;AAAA,cACd,IAAI;AAAA,gBACF,OAAO,EAAE,IAAI,IAAA;AAAA,gBACb,mBAAmB;AAAA,kBACjB,OAAO;AAAA,gBAAA;AAAA,gBAET,qBAAqB;AAAA,kBACnB,IAAI;AAAA,kBACJ,IAAI;AAAA,gBAAA;AAAA,gBAEN,IAAI;AAAA,cAAA;AAAA,YACN;AAAA,UAAA,IAGF,gBAAAO,EAAAkF,IAAA,EACG,UAAA;AAAA,YAAAgJ,MAAgB,uBAAMvC,IAAA,CAAA,CAAS;AAAA,YAC/BuC,MAAgB,KAAK,gBAAAjO,EAACoG,IAAA,CAAA,CAAW;AAAA,YACjC6H,MAAgB,KAAK,gBAAAjO,EAACqI,IAAA,CAAA,CAAS;AAAA,UAAA,EAAA,CAClC;AAAA,QAAA,GAEJ;AAAA,QACA,gBAAArI;AAAA,UAACuN;AAAA,UAAA;AAAA,YACC,SAAS,MAAM3N,EAAyB,EAAK;AAAA,YAC7C,uBAAAmM;AAAA,YACA,OAAOE,EAAa;AAAA,UAAA;AAAA,QAAA;AAAA,MACtB;AAAA,IAAA;AAAA,EAAA;AAGN,CAAC;"}
1
+ {"version":3,"file":"index.es.js","sources":["../../src/investments/components/EmptyStateFooterComponent.tsx","../../src/investments/components/allocation/util/createInvestementsAllocationData.tsx","../../src/investments/components/allocation/InvestementAllocationList.tsx","../../src/investments/components/allocation/InvestmentsAllocationChart.tsx","../../src/investments/components/Allocation.tsx","../../src/investments/components/AnalysisDetails.tsx","../../src/investments/components/InfoToolTip.tsx","../../src/investments/components/Analysis.tsx","../../src/investments/components/HoldingDrawer.tsx","../../src/investments/components/HeaderCell.tsx","../../src/investments/components/HoldingTable.tsx","../../src/investments/components/Overview.tsx","../../src/investments/components/TabTitle.tsx","../../src/investments/InvestmentsWidget.tsx"],"sourcesContent":["import Button from '@mui/material/Button'\nimport Stack from '@mui/material/Stack'\nimport { type SxProps } from '@mui/material/styles'\n\nimport { Text } from '@mxenabled/mxui'\n\nimport { ANALYTICS_EVENTS, useEvent, useGlobalCopyStore, useHoldingStore } from '../../common'\n\ninterface EmptyStateFooterComponentProps {\n sx?: SxProps\n}\n\nexport const EmptyStateFooterComponent = ({ sx = {} }: EmptyStateFooterComponentProps) => {\n const { investments: copy } = useGlobalCopyStore()\n const { onEvent } = useEvent()\n const { setShowConnectionsWidget } = useHoldingStore()\n\n return (\n <Stack sx={{ alignItems: 'center', gap: 24, height: 164, p: 24, width: '100%', ...sx }}>\n <Stack\n className=\"inner-container\"\n sx={{\n alignItems: 'center',\n gap: 8,\n width: '100%',\n textAlign: 'center',\n }}\n >\n <Text sx={{ fontWeight: 600 }} variant=\"body1\">\n {copy.overview.investment_accounts_footer}\n </Text>\n <Text\n sx={{\n color: 'text.secondary',\n fontWeight: 400,\n }}\n variant=\"subtitle2\"\n >\n {copy.overview.connect_more_accounts_description}\n </Text>\n </Stack>\n <Button\n onClick={() => {\n setShowConnectionsWidget(true)\n onEvent(ANALYTICS_EVENTS.ACCOUNTS_CLICK_CONNECT)\n }}\n sx={{ fontWeight: 600 }}\n variant=\"outlined\"\n >\n {copy.overview.connect_accounts}\n </Button>\n </Stack>\n )\n}\n","import { Account, Holding } from '../../../../core'\nimport { InvestmentAllocationCopy } from '../../../../core/types/localization/InvestmentsCopy'\nimport type { DonutData } from '../InvestmentsAllocationChart'\nimport { formatCurrency, formatPercentage } from '../../../../core/utils/NumberFormatting'\n\nexport interface InvestmentsAllocationData {\n name: string\n displayName: string\n guid: string\n holdings: InvestmentAllocationTotals[]\n percentage: number\n value: number\n color: string\n}\nexport interface InvestmentAllocationTotals {\n displayName: string\n name: string\n value: number\n percentage: number\n}\n\nconst allocationColors = {\n allocations_cash: '#AEDCCC',\n allocations_convertible: '#80CAD0',\n allocations_foreign_bond: '#51B9D4',\n allocations_foreign_stock: '#3DA0C9',\n allocations_other: '#3583B8',\n allocations_preferred: '#2D66A7',\n allocations_unknown: '#161D6A',\n allocations_us_bond: '#254995',\n allocations_us_stock: '#1E2D84',\n}\nconst allocationsList = [\n {\n name: 'allocations_cash',\n },\n {\n name: 'allocations_convertible',\n },\n {\n name: 'allocations_foreign_bond',\n },\n {\n name: 'allocations_foreign_stock',\n },\n {\n name: 'allocations_other',\n },\n {\n name: 'allocations_preferred',\n },\n {\n name: 'allocations_us_bond',\n },\n {\n name: 'allocations_us_stock',\n },\n {\n name: 'allocations_unknown',\n },\n]\n\nconst inRange = (n: number, start: number, end?: number) => {\n const rangeStart = end === undefined ? 0 : start\n const rangeEnd = end === undefined ? start : end\n return n >= Math.min(rangeStart, rangeEnd) && n < Math.max(rangeStart, rangeEnd)\n}\n\nconst createHoldingsData = (\n holdings: Holding[],\n allocationName: string,\n allocationValue: number,\n) => {\n const uniqueHoldings = [\n ...new Set(holdings.map((holding: Holding) => holding.name.toLowerCase())),\n ]\n let displayName: string\n const investmentAllocationTotals = uniqueHoldings.map((holdingName) => {\n // sum all the holdings with the same \"name\"\n const holdingsTotalValue = holdings.reduce((acc, hold: Holding) => {\n const name = hold.name\n\n if (name.toLowerCase() === holdingName) {\n // Since we lose the capitalization with the unique names, we take it from the last match.\n displayName = name\n return (\n (getHoldingValue(hold) * hold[allocationName as keyof typeof allocationColors]) / 100 +\n acc\n )\n }\n\n return acc\n }, 0)\n\n return {\n displayName,\n name: displayName,\n value: holdingsTotalValue,\n percentage: holdingsTotalValue / allocationValue,\n }\n })\n return investmentAllocationTotals\n}\n\nconst getHoldingValue = (holding: Holding) =>\n holding.calculated_market_value ? holding.calculated_market_value : holding.market_value\n\nexport const createInvestmentsAllocationData = (\n accounts: Account[],\n copy: InvestmentAllocationCopy,\n holdings: Holding[],\n) => {\n const allocationListDisplayNames = Object.values(copy.allocations_list)\n const investementAllocationData: InvestmentsAllocationData[] = []\n\n let totalAmount = 0\n\n const accountGuids = accounts.map(({ guid }) => guid)\n const updatedHoldings: Holding[] = holdings\n .filter(({ account_guid }) => accountGuids.includes(account_guid))\n .map((eachHolding) => {\n return {\n ...eachHolding,\n name: eachHolding.symbol || eachHolding.description,\n gainLoss:\n eachHolding.cost_basis || eachHolding.cost_basis === 0\n ? getHoldingValue(eachHolding) - eachHolding.cost_basis\n : 0,\n }\n })\n\n const { cashBalance, totalAccountBalance } = accounts.reduce(\n (sum, account) => {\n return {\n cashBalance: sum.cashBalance + (account.cash_balance || 0),\n totalAccountBalance: sum.totalAccountBalance + (account.balance || 0),\n }\n },\n { cashBalance: 0, totalAccountBalance: 0 },\n )\n const { marketValue, totalGainLoss } = updatedHoldings.reduce(\n (acc, holding) => {\n return {\n marketValue: acc.marketValue + getHoldingValue(holding),\n totalGainLoss: acc.totalGainLoss + holding.gainLoss,\n }\n },\n { marketValue: 0, totalGainLoss: 0 },\n )\n const totalMarketValue = marketValue + cashBalance\n\n allocationsList.forEach((allocation, index) => {\n const filteredHoldings = updatedHoldings.filter(\n (eachHolding) => !!eachHolding[allocation.name as keyof typeof allocationColors],\n )\n let holdingsTotal = filteredHoldings.reduce(\n (sum, holding) =>\n sum +\n (getHoldingValue(holding) * holding[allocation.name as keyof typeof allocationColors]) /\n 100,\n 0,\n )\n const investmentAllocationTotals = createHoldingsData(\n filteredHoldings,\n allocation.name,\n holdingsTotal,\n )\n if (allocation.name === 'allocations_cash' && cashBalance > 0) {\n // Updating holdingsTotal to include cash balance\n // This affects the holdingsTotal and percentage for this allocation\n holdingsTotal += cashBalance\n\n // Creating a holding item for cash balance\n const cashBalanceHolding = {\n displayName: copy.cash_balance_display_name,\n name: 'allocations_name',\n value: cashBalance,\n percentage: cashBalance / totalMarketValue,\n }\n\n investmentAllocationTotals.push(cashBalanceHolding)\n }\n\n // Shows allocation if holdingsTotal is greater than zero\n if (holdingsTotal > 0) {\n investementAllocationData.push({\n name: allocation.name,\n displayName: allocationListDisplayNames[index],\n guid: `${allocation.name}-${index}`,\n holdings: investmentAllocationTotals,\n percentage: holdingsTotal / totalMarketValue,\n value: holdingsTotal,\n color: allocationColors[allocation.name as keyof typeof allocationColors],\n })\n totalAmount += holdingsTotal\n }\n })\n const donutData: DonutData[] = investementAllocationData.map(\n ({ displayName, guid, color, value }) => ({\n id: guid,\n color: color,\n label: displayName,\n value: (value / totalAmount) * 100,\n }),\n )\n\n return {\n investmentsData: investementAllocationData,\n donutData,\n totalAmount,\n totalGainLoss,\n totalMarketValue,\n totalGainLossPercentage: totalGainLoss / totalAccountBalance,\n }\n}\n\nexport const percentageDisplay = (value: number) =>\n value < 0.001 ? '< 0.1%' : formatPercentage(value)\n\nexport const currencyDisplay = (value: number) => {\n if (value === 0) return formatCurrency(value, '0,0.00')\n return inRange(value, -0.01, 0.01) ? '< $0.01' : formatCurrency(value, '0,0.00')\n}\n","import React from 'react'\n\nimport Box from '@mui/material/Box'\nimport Collapse from '@mui/material/Collapse'\nimport Divider from '@mui/material/Divider'\nimport List from '@mui/material/List'\nimport ListItem from '@mui/material/ListItem'\nimport ListItemButton from '@mui/material/ListItemButton'\nimport Stack from '@mui/material/Stack'\nimport ToggleButton from '@mui/material/ToggleButton'\nimport ToggleButtonGroup from '@mui/material/ToggleButtonGroup'\n\nimport { Text } from '@mxenabled/mxui'\n\nimport { useGlobalCopyStore, useScreenSize } from '../../../common'\nimport { EmptyStateFooterComponent } from '../EmptyStateFooterComponent'\nimport { InvestmentsData } from './InvestmentsAllocationChart'\nimport { currencyDisplay, percentageDisplay } from './util/createInvestementsAllocationData'\n\ninterface InvestmentAllocationListProps {\n data: InvestmentsData\n onSelected: (id: string) => void\n selectedId?: string\n selectedTabs: number\n setSelectedTabs: (value: number) => void\n}\n\nexport const InvestementAllocationList = ({\n data,\n onSelected,\n selectedId,\n selectedTabs,\n setSelectedTabs,\n}: InvestmentAllocationListProps) => {\n const handleChange = (_: React.SyntheticEvent, newValue: number) => {\n if (newValue !== null) {\n setSelectedTabs(newValue)\n }\n }\n const { isMobile } = useScreenSize()\n const {\n investments: { allocation: copy },\n } = useGlobalCopyStore()\n\n const toggleButtonsList = [\n { label: copy.tabs_label_dollar, value: 0 },\n { label: copy.tabs_label_percent, value: 1 },\n ]\n const isEmptyState = !data?.investmentsData.length\n const { isSmallMobile } = useScreenSize()\n\n return (\n <Stack sx={{ mt: 15, gap: 12, width: isMobile ? 250 : 412 }}>\n <ToggleButtonGroup\n exclusive={true}\n fullWidth={true}\n onChange={handleChange}\n value={isEmptyState ? -1 : selectedTabs}\n >\n {toggleButtonsList.map(({ label, value }) => (\n <ToggleButton color=\"primary\" key={label} value={value}>\n <Text bold={true} textTransform={'capitalize'} variant=\"body1\">\n {label}\n </Text>\n </ToggleButton>\n ))}\n </ToggleButtonGroup>\n\n <List sx={{ px: 12 }}>\n {data.investmentsData.map((item) => (\n <React.Fragment key={item.guid}>\n <ListItem\n disableGutters={true}\n disablePadding={true}\n sx={{\n minHeight: 44,\n }}\n >\n <ListItemButton\n aria-expanded={Boolean(selectedId === item.guid)}\n onClick={() => onSelected(item.guid)}\n sx={{ minHeight: 44, px: 12, py: 0 }}\n >\n <Box\n borderRadius={4}\n flexShrink={0}\n height={8}\n sx={{ backgroundColor: item.color, mr: 8 }}\n width={8}\n />\n <Stack\n alignItems=\"center\"\n direction=\"row\"\n justifyContent=\"space-between\"\n width=\"100%\"\n >\n <Text bold={selectedId === item.guid}>{item.displayName}</Text>\n <Text bold={selectedId === item.guid} variant=\"body1\">\n {selectedTabs === 0\n ? currencyDisplay(item.value)\n : percentageDisplay(item.percentage)}\n </Text>\n </Stack>\n </ListItemButton>\n </ListItem>\n\n <Divider />\n\n {item.holdings && item.holdings.length > 0 && (\n <Collapse in={Boolean(selectedId === item.guid)} unmountOnExit={true}>\n <List>\n {item?.holdings?.map((subItem) => (\n <ListItem\n key={subItem.displayName}\n sx={{\n pl: 24,\n pr: 8,\n py: 0,\n }}\n >\n <Stack direction=\"row\" justifyContent=\"space-between\" width=\"100%\">\n <Text>{subItem.displayName} </Text>\n <Text>\n {selectedTabs === 0\n ? currencyDisplay(subItem.value)\n : percentageDisplay(subItem.percentage)}\n </Text>\n </Stack>\n </ListItem>\n ))}\n <Divider />\n </List>\n </Collapse>\n )}\n </React.Fragment>\n ))}\n </List>\n {isEmptyState ? (\n <>\n <Text sx={{ color: 'secondary.main', p: 8, textAlign: 'center' }}>{copy.empty_data}</Text>\n <Divider />\n <EmptyStateFooterComponent\n sx={{\n '.inner-container': { width: isSmallMobile ? '100%' : 364 },\n }}\n />\n </>\n ) : (\n selectedTabs === 0 && (\n <Text bold={true} sx={{ textAlign: 'right', pr: 24 }}>\n {`${copy.total_label_text} ${currencyDisplay(data.totalAmount)}`}\n </Text>\n )\n )}\n </Stack>\n )\n}\n","import React from 'react'\n\nimport Stack from '@mui/material/Stack'\nimport { useTheme } from '@mui/material/styles'\n\nimport { P, Text } from '@mxenabled/mxui'\nimport { Icon } from '@mxenabled/mx-icons'\n\nimport { useGlobalCopyStore } from '../../../common'\nimport Donut from '../../../common/components/charts/Donut'\n\nimport {\n currencyDisplay,\n InvestmentsAllocationData,\n percentageDisplay,\n} from './util/createInvestementsAllocationData'\n\nexport interface DonutData {\n id: string\n label?: string\n color: string\n value: number\n}\nexport interface InvestmentsData {\n investmentsData: InvestmentsAllocationData[]\n donutData: DonutData[]\n totalAmount: number\n totalGainLoss: number\n totalMarketValue: number\n totalGainLossPercentage: number\n}\ninterface InvestementAllocationProps {\n data: InvestmentsData\n hoveredId?: string\n isPercentage?: boolean\n onSelected: (id: string) => void\n onMouseEnter: (id: string) => void\n onMouseLeave: (id: string) => void\n selectedId?: string\n size?: number\n totalLabel: string\n}\n\nexport const InvestementsAllocationChart: React.FC<InvestementAllocationProps> = ({\n data,\n hoveredId,\n isPercentage,\n onMouseEnter,\n onMouseLeave,\n onSelected,\n selectedId,\n size = 150,\n totalLabel,\n}) => {\n const theme = useTheme()\n const isDarkMode = theme.palette.mode === 'dark'\n\n const selectedInvestments = React.useMemo(\n () =>\n selectedId\n ? data.investmentsData.find(({ guid }: InvestmentsAllocationData) => guid === selectedId)\n : undefined,\n [selectedId],\n )\n const {\n investments: { allocation: copy },\n } = useGlobalCopyStore()\n const donutData = React.useMemo(() => {\n if (data.donutData.length > 0) return data.donutData\n\n // Empty Donut zero state\n return [{ id: '0', color: theme.palette.neutral.light, value: 100 }]\n }, [data, theme])\n\n const gainDisplayColor = isDarkMode ? '#0AC295' : '#09A57F'\n const lossDisplayColor = isDarkMode ? 'grey.300' : 'grey.700'\n\n const getGainLossDisplay = () => {\n if (selectedInvestments) return copy.pie_chart_centered_click_for_details\n if (isPercentage) return percentageDisplay(data.totalGainLossPercentage)\n return currencyDisplay(data.totalGainLoss)\n }\n\n const gainLossDisplayColor = data.totalGainLoss >= 0 ? gainDisplayColor : lossDisplayColor\n\n return (\n <Donut\n data={donutData}\n hoveredId={hoveredId}\n onClick={onSelected}\n onMouseEnter={onMouseEnter}\n onMouseLeave={onMouseLeave}\n selectedId={selectedId}\n size={size}\n >\n <Stack alignItems=\"center\" height=\"100%\" justifyContent=\"center\" width=\"100%\">\n <Stack alignItems=\"center\" justifyContent=\"center\" minHeight={size} minWidth={size}>\n <Stack alignItems=\"center\" sx={{ gap: { xs: 4, xl: 8 }, mb: { xs: 4, xl: 8 } }}>\n <Text color=\"text.secondary\" noWrap={true}>\n {selectedInvestments?.displayName ?? totalLabel}\n </Text>\n <P color=\"text.primary\" variant=\"h1\">\n {currencyDisplay(selectedInvestments?.value ?? data.totalMarketValue)}\n </P>\n\n <Stack sx={{ alignItems: 'center', flexDirection: 'row', gap: 4 }}>\n {!selectedInvestments && (\n <Icon\n name={data.totalGainLoss >= 0 ? 'trending_up' : 'trending_down'}\n size={20}\n sx={{ color: gainLossDisplayColor }}\n />\n )}\n <Text\n sx={{\n color: gainLossDisplayColor,\n fontWeight: 700,\n }}\n variant=\"body2\"\n >\n {getGainLossDisplay()}\n </Text>\n </Stack>\n </Stack>\n </Stack>\n </Stack>\n </Donut>\n )\n}\n","import React from 'react'\n\nimport Stack from '@mui/material/Stack'\nimport useMediaQuery from '@mui/material/useMediaQuery'\n\nimport { observer } from 'mobx-react-lite'\n\nimport { InvestementAllocationList } from './allocation/InvestementAllocationList'\nimport { InvestementsAllocationChart } from './allocation/InvestmentsAllocationChart'\nimport { createInvestmentsAllocationData } from './allocation/util/createInvestementsAllocationData'\nimport {\n useAccountStore,\n useGlobalCopyStore,\n useGlobalUiStore,\n useHoldingStore,\n useScreenSize,\n} from '../../common'\n\nconst Allocation = () => {\n const [selectedTabs, setSelectedTabs] = React.useState(0)\n const [selectedId, setSelectedId] = React.useState('')\n const [hoveredId, setHoveredId] = React.useState('')\n const onSelected = (id: string) => {\n if (selectedId !== id) {\n setSelectedId(id)\n } else {\n setSelectedId('')\n setHoveredId('')\n }\n }\n const { selectedAccountGuids } = useGlobalUiStore()\n const { visibleHoldings: allHoldings } = useHoldingStore()\n const { visibleInvestmentAccounts: accounts } = useAccountStore()\n const {\n investments: { allocation: copy },\n } = useGlobalCopyStore()\n const investmentAllocationData = createInvestmentsAllocationData(\n accounts.filter(({ guid }) => selectedAccountGuids.includes(guid)),\n copy,\n allHoldings,\n )\n const { isMobile } = useScreenSize()\n const isScreenDeviceTablet = useMediaQuery('(max-width:768px)')\n\n return (\n <Stack\n alignItems={isScreenDeviceTablet ? 'center' : 'flex-start'}\n direction={isScreenDeviceTablet ? 'column' : 'row'}\n gap={{ xs: 16, md: 64, xl: 100 }}\n sx={{\n justifyContent: 'center',\n mt: 50,\n width: '100%',\n }}\n >\n <InvestementsAllocationChart\n data={investmentAllocationData}\n hoveredId={hoveredId}\n isPercentage={selectedTabs === 1}\n onMouseEnter={(id) => {\n if (selectedId === id) {\n setHoveredId('')\n } else if (!selectedId) {\n setHoveredId(id)\n }\n }}\n onMouseLeave={() => {\n setHoveredId('')\n }}\n onSelected={onSelected}\n selectedId={selectedId}\n size={isMobile ? 280 : 400}\n totalLabel={copy.pie_chart_centered_text}\n />\n <InvestementAllocationList\n data={investmentAllocationData}\n onSelected={onSelected}\n selectedId={selectedId}\n selectedTabs={selectedTabs}\n setSelectedTabs={setSelectedTabs}\n />\n </Stack>\n )\n}\n\nexport default observer(Allocation)\n","import React from 'react'\n\nimport Divider from '@mui/material/Divider'\nimport List from '@mui/material/List'\nimport ListItem from '@mui/material/ListItem'\nimport ListItemText from '@mui/material/ListItemText'\nimport Stack from '@mui/material/Stack'\nimport ToggleButton from '@mui/material/ToggleButton'\nimport ToggleButtonGroup from '@mui/material/ToggleButtonGroup'\n\nimport { Text } from '@mxenabled/mxui'\n\nimport { useScreenSize } from '../../common'\nimport { AnalysisType } from '../../core/constants/Investments'\nimport { formatKey } from '../../core/utils/InvestmentUtil'\n\nimport { EmptyStateFooterComponent } from './EmptyStateFooterComponent'\nimport { formatCurrency } from '../../core/utils/NumberFormatting'\n\ninterface Copy {\n bonds: string\n equities: string\n empty_data: string\n}\n\ninterface AnalysisDetailsProps {\n analysisDetails: Record<string, number>\n analysisType: AnalysisType\n copy: Copy\n setAnalysisType: (type: AnalysisType) => void\n}\n\nconst AnalysisDetails: React.FC<AnalysisDetailsProps> = ({\n analysisDetails,\n analysisType,\n copy,\n setAnalysisType,\n}) => {\n const { isSmallMobile } = useScreenSize()\n\n const listItems = React.useMemo(() => {\n return Object.keys(analysisDetails)\n .filter((key) => analysisDetails[key] >= 1)\n .map((key) => ({\n key,\n value: formatCurrency(analysisDetails[key], '0,0'),\n formattedKey: formatKey(key),\n }))\n }, [analysisDetails])\n\n const toggleButtons = [\n { label: copy.equities, value: AnalysisType.Stocks },\n { label: copy.bonds, value: AnalysisType.Bonds },\n ]\n return (\n <Stack sx={{ gap: 12, width: { md: 412 } }}>\n <ToggleButtonGroup\n color=\"primary\"\n exclusive={true}\n onChange={(_, value) => value && setAnalysisType(value)}\n sx={{\n width: '100%',\n '& .MuiToggleButton-root': {\n color: 'secondary.main',\n fontWeight: 600,\n textTransform: 'capitalize',\n },\n }}\n value={listItems.length ? analysisType : -1}\n >\n {toggleButtons.map(({ label, value }) => (\n <ToggleButton key={value} sx={{ width: '100%' }} value={value}>\n {label}\n </ToggleButton>\n ))}\n </ToggleButtonGroup>\n\n {listItems.length ? (\n <List\n sx={{\n '& .MuiListItemSecondaryAction-root': { pr: 12 },\n '& .MuiListItem-divider': { borderColor: 'neutral.light' },\n '& .MuiListItem-root': { minHeight: 44, px: 12 },\n }}\n >\n {listItems.map(({ value, formattedKey }) => (\n <ListItem divider={true} key={formattedKey} secondaryAction={<Text>{value}</Text>}>\n <ListItemText\n primary={formattedKey}\n slotProps={{ primary: { fontStyle: 'normal' } }}\n />\n </ListItem>\n ))}\n </List>\n ) : (\n <>\n <Text sx={{ color: 'secondary.main', p: 8, textAlign: 'center' }}>{copy.empty_data}</Text>\n <Divider sx={{ borderColor: 'neutral.light' }} />\n <EmptyStateFooterComponent\n sx={{\n '.inner-container': { width: isSmallMobile ? '100%' : 364 },\n }}\n />\n </>\n )}\n </Stack>\n )\n}\n\nexport default AnalysisDetails\n","import React from 'react'\n\nimport IconButton from '@mui/material/IconButton'\nimport Stack from '@mui/material/Stack'\nimport Tooltip from '@mui/material/Tooltip'\n\nimport { P, Text } from '@mxenabled/mxui'\nimport { Icon } from '@mxenabled/mx-icons'\n\ninterface InfoTooltipProps {\n placement?: 'top' | 'bottom' | 'left' | 'right'\n tooltip_info_body: string\n tooltip_info_title: string\n}\n\ninterface TooltipContentProps {\n body: string\n title: string\n}\n\nconst TooltipContent: React.FC<TooltipContentProps> = ({ body, title }) => (\n <Stack sx={{ gap: 4, p: 12 }}>\n <Text bold={true} variant=\"body1\">\n {title}\n </Text>\n <P variant=\"subtitle2\">{body}</P>\n </Stack>\n)\n\nconst InfoTooltip: React.FC<InfoTooltipProps> = ({\n placement = 'bottom',\n tooltip_info_body,\n tooltip_info_title,\n}) => (\n <Tooltip\n enterTouchDelay={500}\n placement={placement}\n title={<TooltipContent body={tooltip_info_body} title={tooltip_info_title} />}\n >\n <IconButton aria-label={tooltip_info_title} sx={{ minHeight: 0, minWidth: 0, p: 0 }}>\n <Icon name=\"info\" sx={{ color: 'info.main' }} />\n </IconButton>\n </Tooltip>\n)\n\nexport default InfoTooltip\n","import React from 'react'\nimport { observer } from 'mobx-react-lite'\n\nimport Stack from '@mui/material/Stack'\nimport { useTheme } from '@mui/material/styles'\nimport useMediaQuery from '@mui/material/useMediaQuery'\n\nimport { P, Text } from '@mxenabled/mxui'\n\nimport { useGlobalCopyStore, useHoldingStore, useScreenSize } from '../../common'\n\nimport { AnalysisType } from '../../core/constants/Investments'\n\nimport AnalysisDetails from './AnalysisDetails'\nimport InfoTooltip from './InfoToolTip'\n\nconst Analysis: React.FC = () => {\n const {\n investments: { analysis: copy },\n } = useGlobalCopyStore()\n const { analysisChartData, analysisDetails, analysisType, setAnalysisType } = useHoldingStore()\n\n const isSmallMobileDevice = useMediaQuery('(min-width:320px) and (max-width:375px)')\n const { isMobile } = useScreenSize()\n\n const theme = useTheme()\n const isDark = theme.palette.mode === 'dark'\n\n const { cellDimension, columns, rows, textVariant } = React.useMemo(() => {\n const isStocks = analysisType === AnalysisType.Stocks\n\n const columns = isStocks\n ? Object.values(copy.stock_column_labels)\n : Object.values(copy.bond_column_labels)\n const rows = isStocks\n ? Object.values(copy.stock_row_labels)\n : Object.values(copy.bond_row_labels)\n\n const textVariant: 'body1' | 'caption' = isMobile ? 'caption' : 'body1'\n const cellDimension = isMobile ? 72 : 100\n\n return { cellDimension, columns, rows, textVariant }\n }, [copy, isMobile, analysisType])\n\n return (\n <Stack\n sx={{\n flexDirection: { md: 'row' },\n gap: isMobile ? 48 : 64,\n justifyContent: 'center',\n pt: 48,\n px: 16,\n }}\n >\n <Stack\n sx={{\n alignItems: 'center',\n flexDirection: 'row',\n justifyContent: 'center',\n pr: { lg: 72 },\n }}\n >\n <Stack\n sx={{\n alignItems: 'center',\n bottom: isMobile ? 10 : 24,\n gap: isMobile ? 0 : 24,\n position: 'relative',\n transform: 'rotate(-180deg)',\n writingMode: 'vertical-rl',\n }}\n >\n <P bold={true} color=\"secondary.main\" variant={textVariant}>\n {analysisType === AnalysisType.Stocks\n ? copy.market_capitalization\n : copy.credit_quality}\n </P>\n <Stack\n sx={{\n flexDirection: 'row',\n height: isMobile ? 224 : 308,\n justifyContent: 'space-around',\n }}\n >\n {columns.map((label) => (\n <Text\n key={label}\n sx={{\n color: 'secondary.main',\n pl: 12,\n pr: isMobile ? 4 : 0,\n }}\n variant={textVariant}\n >\n {label}\n </Text>\n ))}\n </Stack>\n </Stack>\n <Stack sx={{ gap: 4 }}>\n <Stack\n sx={{\n alignSelf: isSmallMobileDevice ? 'start' : 'center',\n flexDirection: 'row',\n gap: 8,\n pb: 12,\n }}\n >\n <Text bold={true}>{copy.invest_analysis}</Text>\n <InfoTooltip\n tooltip_info_body={copy.tooltip_info_body}\n tooltip_info_title={copy.tooltip_info_title}\n />\n </Stack>\n {analysisChartData.map((row, rowIndex, data) => (\n <Stack key={rowIndex} sx={{ flexDirection: 'row', gap: 4 }}>\n {row.map((value, colIndex) => {\n const isFirstRow = rowIndex === 0\n const isLastRow = rowIndex === data.length - 1\n const isFirstCol = colIndex === 0\n const isLastCol = colIndex === row.length - 1\n\n const isHigh = Number(value.replace('%', '')) >= 25\n\n let bgcolor = 'grey.200'\n let color = 'grey.900'\n\n if (isDark) {\n bgcolor = isHigh ? 'grey.200' : 'grey.700'\n color = isHigh ? 'grey.900' : 'common.white'\n } else {\n bgcolor = isHigh ? 'grey.700' : 'grey.200'\n color = isHigh ? 'common.white' : 'grey.900'\n }\n\n const borderRadius = {\n borderBottomLeftRadius: isLastRow && isFirstCol ? 4 : 0,\n borderBottomRightRadius: isLastRow && isLastCol ? 4 : 0,\n borderTopLeftRadius: isFirstRow && isFirstCol ? 4 : 0,\n borderTopRightRadius: isFirstRow && isLastCol ? 4 : 0,\n }\n return (\n <Stack\n key={colIndex}\n sx={{\n ...borderRadius,\n alignItems: 'center',\n bgcolor,\n height: cellDimension,\n justifyContent: 'center',\n width: cellDimension,\n }}\n >\n <Text\n sx={{\n color,\n fontWeight: isMobile ? 600 : 700,\n }}\n variant={isMobile ? 'body1' : 'h3'}\n >\n {value}\n </Text>\n </Stack>\n )\n })}\n </Stack>\n ))}\n <Stack sx={{ alignSelf: 'center', flexDirection: 'row', pt: 12 }}>\n {rows.map((label) => (\n <Stack key={label} sx={{ alignItems: 'center', width: cellDimension }}>\n <Text color=\"secondary.main\" variant={textVariant}>\n {label}\n </Text>\n </Stack>\n ))}\n </Stack>\n <Text\n bold={true}\n sx={{ color: 'secondary.main', pt: isMobile ? 4 : 24, textAlign: 'center' }}\n variant={textVariant}\n >\n {analysisType === AnalysisType.Stocks ? copy.valuation : copy.duration}\n </Text>\n </Stack>\n </Stack>\n <AnalysisDetails\n analysisDetails={analysisDetails}\n analysisType={analysisType}\n copy={{\n empty_data: copy.empty_data,\n equities: copy.equities,\n bonds: copy.bonds,\n }}\n setAnalysisType={setAnalysisType}\n />\n </Stack>\n )\n}\n\nexport default observer(Analysis)\n","import React from 'react'\n\nimport { observer } from 'mobx-react-lite'\n\nimport Accordion from '@mui/material/Accordion'\nimport AccordionDetails from '@mui/material/AccordionDetails'\nimport AccordionSummary from '@mui/material/AccordionSummary'\nimport IconButton from '@mui/material/IconButton'\nimport TextField from '@mui/material/TextField'\nimport Stack from '@mui/system/Stack'\n\nimport { Icon } from '@mxenabled/mx-icons'\n\nimport { InstitutionLogo, Text } from '@mxenabled/mxui'\n\nimport { Drawer } from '../../common'\nimport { useGlobalCopyStore } from '../../common'\n\ninterface HoldingDetail {\n id: string\n description: string\n qty: number\n holding: string\n costBasis: number\n totalGainLoss: number\n marketValue: number\n}\n\ninterface InvestmentDetailsDrawerProps {\n accountHoldingsData: {\n accounts: any\n holdings: HoldingDetail[]\n }\n currentEditedCostBasis: string\n editingHoldingId: string | null\n handleCostBasisBlur: (id: string) => void\n handleCostBasisChange: (event: React.ChangeEvent<HTMLInputElement>) => void\n handleCostBasisClick: (holdingId: string, currentCostBasis: number) => void\n handleCostBasisKeyDown: (event: React.KeyboardEvent<HTMLInputElement>, id: string) => void\n isOpen: boolean\n onClose: () => void\n}\n\nconst InvestmentDetailsDrawer: React.FC<InvestmentDetailsDrawerProps> = ({\n accountHoldingsData,\n currentEditedCostBasis,\n editingHoldingId,\n handleCostBasisBlur,\n handleCostBasisClick,\n handleCostBasisChange,\n handleCostBasisKeyDown,\n isOpen,\n onClose,\n}) => {\n const { investments: copy } = useGlobalCopyStore()\n const [expandedStates, setExpandedStates] = React.useState<Record<string, boolean>>({})\n\n const handleAccordionChange =\n (holdingId: string) => (_event: React.SyntheticEvent, isExpanded: boolean) => {\n setExpandedStates((prevStates) => ({\n ...prevStates,\n [holdingId]: isExpanded,\n }))\n }\n\n return (\n <Drawer\n ariaLabelClose={copy.overview.close_investment_drawer}\n isOpen={isOpen}\n onClose={onClose}\n title={copy.overview.investment_details}\n >\n <Stack sx={{ gap: 8, p: 24 }}>\n <InstitutionLogo\n alt={accountHoldingsData.accounts.institutionName || ''}\n institutionGuid={accountHoldingsData.accounts.institution_guid || ''}\n size={64}\n />\n <Text sx={{ color: 'text.primary' }} variant=\"body2\">\n {accountHoldingsData.accounts.memberName}\n </Text>\n <Text sx={{ color: 'text.primary' }} variant=\"h2\">\n {accountHoldingsData.accounts.user_name || accountHoldingsData.accounts.name}\n </Text>\n\n <Stack sx={{ alignItems: 'center', flexDirection: 'row', justifyContent: 'space-between' }}>\n <Text sx={{ color: 'text.primary', fontWeight: 600 }} variant=\"body1\">\n {copy.overview.current_balance}\n </Text>\n\n <Text sx={{ color: 'text.primary', fontWeight: 600 }} variant=\"body1\">\n {accountHoldingsData.accounts.balance?.toLocaleString('en-US', {\n currency: 'USD',\n maximumFractionDigits: 2,\n minimumFractionDigits: 2,\n style: 'currency',\n })}\n </Text>\n </Stack>\n </Stack>\n\n <Stack\n sx={{\n bgcolor: 'background.default',\n flexDirection: 'row',\n justifyContent: 'space-between',\n px: 24,\n py: 10,\n }}\n >\n <Text sx={{ color: 'text.primary', fontWeight: 700 }} variant=\"caption\">\n {copy.overview.holding}\n </Text>\n <Text sx={{ color: 'text.primary', fontWeight: 700 }} variant=\"caption\">\n {copy.overview.market_value}\n </Text>\n </Stack>\n {accountHoldingsData.holdings?.map((holding, index) => {\n const isCurrentlyEditing = editingHoldingId === holding.id\n return (\n <Accordion\n disableGutters={true}\n expanded={expandedStates[holding.id] === true}\n key={holding.id}\n onChange={holding ? handleAccordionChange(holding?.id) : () => {}}\n sx={{\n ':before': index === 0 ? { opacity: 0 } : {},\n '.MuiAccordionDetails-root': { p: 0 },\n }}\n >\n <AccordionSummary\n aria-controls=\"panel1a-content\"\n id=\"panel1a-header\"\n sx={[\n { height: 64 },\n expandedStates[holding.id] &&\n index > 0 && {\n borderTop: 1,\n borderColor: 'divider',\n },\n ]}\n >\n <Stack sx={{ flexDirection: 'row', width: '100%' }}>\n <div style={{ width: 24 }} />\n <Stack\n sx={[\n {\n alignItems: 'center',\n flexDirection: 'row',\n justifyContent: 'space-between',\n pr: 24,\n py: 14,\n width: '100%',\n },\n expandedStates[holding.id] && {\n borderBottom: 1,\n borderColor: 'divider',\n },\n ]}\n >\n <Stack\n sx={{\n alignItems: 'center',\n flex: 1,\n flexDirection: 'row',\n gap: 12,\n minWidth: 0,\n }}\n >\n <Stack sx={{ minWidth: 0, overflow: 'hidden' }}>\n <Text\n sx={{\n fontWeight: 600,\n display: '-webkit-box',\n WebkitBoxOrient: 'vertical',\n WebkitLineClamp: 1,\n overflow: 'hidden',\n overflowWrap: 'anywhere',\n }}\n variant=\"body1\"\n >\n {holding.holding}\n </Text>\n <Text\n sx={{\n display: '-webkit-box',\n WebkitBoxOrient: 'vertical',\n WebkitLineClamp: 2,\n overflow: 'hidden',\n overflowWrap: 'anywhere',\n }}\n variant=\"caption\"\n >\n {holding.description}\n </Text>\n </Stack>\n </Stack>\n\n <Stack\n sx={{\n alignItems: 'center',\n flexShrink: 0,\n flexDirection: 'row',\n gap: 12,\n justifyContent: 'flex-end',\n }}\n >\n <Stack>\n <Text sx={{ fontWeight: 600, textAlign: 'right' }} variant={'body1'}>\n {holding.marketValue?.toLocaleString('en-US', {\n currency: 'USD',\n maximumFractionDigits: 2,\n minimumFractionDigits: 2,\n style: 'currency',\n })}\n </Text>\n <Stack sx={{ alignItems: 'center', gap: 2, flexDirection: 'row' }}>\n {holding.totalGainLoss !== 0 && (\n <Icon\n name={holding.totalGainLoss >= 0 ? 'trending_up' : 'trending_down'}\n size={12}\n sx={{\n verticalAlign: 'middle',\n mr: 1,\n color: holding.totalGainLoss >= 0 ? 'success.main' : 'grey.700',\n }}\n />\n )}\n <Text\n sx={{\n color: holding.totalGainLoss <= 0 ? 'grey.700' : 'success.main',\n fontWeight: holding.totalGainLoss <= 0 ? 400 : 700,\n }}\n variant=\"caption\"\n >\n {holding.costBasis\n ? `${((holding.totalGainLoss / holding.costBasis) * 100).toFixed(2)}%`\n : '0.00%'}\n </Text>\n <Text sx={{ color: 'grey.700' }} variant=\"caption\">\n |\n </Text>\n <Text\n sx={{\n color: holding.totalGainLoss <= 0 ? 'grey.700' : 'success.main',\n fontWeight: holding.totalGainLoss <= 0 ? 400 : 700,\n }}\n variant=\"caption\"\n >\n {Math.abs(holding.totalGainLoss).toLocaleString('en-US', {\n currency: 'USD',\n maximumFractionDigits: 2,\n minimumFractionDigits: 2,\n style: 'currency',\n })}\n </Text>\n </Stack>\n </Stack>\n\n <Icon\n name={expandedStates[holding.id] ? 'expand_less' : 'expand_more'}\n size={20}\n />\n </Stack>\n </Stack>\n </Stack>\n </AccordionSummary>\n <AccordionDetails>\n <Stack\n sx={{\n alignItems: 'center',\n bgcolor: 'background.default',\n flexDirection: 'row',\n pl: 24,\n }}\n >\n <Stack sx={{ width: 32 }} />\n <Stack sx={{ flex: 1 }}>\n <Stack\n sx={{\n alignItems: 'center',\n borderBottom: 1,\n borderColor: 'divider',\n flexDirection: 'row',\n height: 48,\n justifyContent: 'space-between',\n pr: 24,\n }}\n >\n <Text sx={{ color: 'text.primary' }} variant=\"body1\">\n {copy.overview.quantity}\n </Text>\n <Text sx={{ color: 'text.primary' }} variant=\"body2\">\n {holding.qty}\n </Text>\n </Stack>\n <Stack\n sx={{\n alignItems: 'center',\n flexDirection: 'row',\n height: 48,\n justifyContent: 'space-between',\n pr: 24,\n }}\n >\n <Text sx={{ color: 'text.primary' }} variant=\"body1\">\n {copy.overview.cost_basis_header}\n </Text>\n\n <Stack\n direction=\"row\"\n sx={{\n alignItems: 'center',\n gap: 4,\n }}\n >\n {isCurrentlyEditing ? (\n <TextField\n autoFocus={true}\n onBlur={() => handleCostBasisBlur(holding.id)}\n onChange={handleCostBasisChange}\n onKeyDown={(e: React.KeyboardEvent<HTMLInputElement>) =>\n handleCostBasisKeyDown(e, holding.id)\n }\n size=\"small\"\n sx={{\n fontSize: 14,\n width: 58,\n '& .MuiInputBase-input': {\n padding: '4px 0',\n textAlign: 'center',\n fontWeight: 600,\n color: 'text.primary',\n },\n '& .MuiOutlinedInput-notchedOutline': {\n border: 'none',\n },\n }}\n value={currentEditedCostBasis}\n />\n ) : (\n <Text sx={{ fontSize: 14, width: 58 }} variant=\"body2\">\n {holding.costBasis?.toLocaleString('en-US', {\n currency: 'USD',\n maximumFractionDigits: 2,\n minimumFractionDigits: 2,\n style: 'currency',\n })}\n </Text>\n )}\n\n <IconButton\n onClick={() => handleCostBasisClick(holding.id, holding.costBasis)}\n sx={{ minWidth: 16, minHeight: 16 }}\n >\n <Icon name={'stylus'} size={16} sx={{ color: 'grey.700' }} />\n </IconButton>\n </Stack>\n </Stack>\n </Stack>\n </Stack>\n </AccordionDetails>\n </Accordion>\n )\n })}\n </Drawer>\n )\n}\n\nexport default observer(InvestmentDetailsDrawer)\n","import { Text } from '@mxenabled/mxui'\nimport { GridColumnHeaderParams } from '@mui/x-data-grid'\nimport { Icon } from '@mxenabled/mx-icons'\nimport { Stack } from '@mui/material'\n\nexport const HeaderCell = (params: GridColumnHeaderParams) => (\n <Stack sx={{ alignItems: 'center', flexDirection: 'row', gap: 4 }}>\n <Text sx={{ color: 'text.primary', fontWeight: 600, fontSize: 14 }} variant=\"body2\">\n {params.colDef.headerName}\n </Text>\n <Icon name={'expand_all'} size={12} />\n </Stack>\n)\n","import React from 'react'\n\nimport Stack from '@mui/material/Stack'\nimport Paper from '@mui/material/Paper'\nimport IconButton from '@mui/material/IconButton'\nimport TextField from '@mui/material/TextField'\nimport { useTheme } from '@mui/material/styles'\nimport { DataGridPro, GridColDef } from '@mui/x-data-grid-pro'\n\nimport { Icon } from '@mxenabled/mx-icons'\n\nimport { Text } from '@mxenabled/mxui'\n\nimport { useGlobalCopyStore } from '../../common'\n\nimport { HeaderCell } from './HeaderCell'\n\ninterface HoldingDetail {\n id: string\n description: string\n qty: number\n holding: string\n costBasis: number\n totalGainLoss: number\n marketValue: number\n}\n\ninterface HoldingsTableProps {\n data: HoldingDetail[]\n editingHoldingId: string | null\n currentEditedCostBasis: string\n handleCostBasisClick: (holdingId: string, currentCostBasis: number) => void\n handleCostBasisChange: (event: React.ChangeEvent<HTMLInputElement>) => void\n handleCostBasisKeyDown: (event: React.KeyboardEvent<HTMLInputElement>, id: string) => void\n handleCostBasisBlur: (id: string) => void\n}\n\nconst HoldingsTable: React.FC<HoldingsTableProps> = ({\n data,\n editingHoldingId,\n currentEditedCostBasis,\n handleCostBasisClick,\n handleCostBasisChange,\n handleCostBasisKeyDown,\n handleCostBasisBlur,\n}) => {\n const { investments: copy } = useGlobalCopyStore()\n const theme = useTheme()\n\n const isDarkMode = theme.palette.mode === 'dark'\n const gainDisplayColor = 'success.main'\n const lossDisplayColor = isDarkMode ? 'grey.300' : 'grey.700'\n\n const gainLossDisplayColor = (value: number, type: string = 'lesserThan') => {\n if (type === 'greaterThan') {\n return value >= 0 ? gainDisplayColor : lossDisplayColor\n }\n return value <= 0 ? lossDisplayColor : gainDisplayColor\n }\n\n const columns: GridColDef[] = [\n {\n field: 'qty',\n headerName: copy.overview.qty_header,\n sortable: false,\n width: 48,\n align: 'center',\n headerAlign: 'center',\n },\n {\n field: 'holding',\n headerName: copy.overview.holding_header,\n flex: 1,\n renderHeader: HeaderCell,\n renderCell: (params) => (\n <Stack sx={{ alignItems: 'center', gap: 16, flexDirection: 'row' }}>\n <Stack>\n {/* TODO :InstitutionLogo in future */}\n <Text sx={{ fontWeight: 700 }}>{params.row.holding}</Text>\n <Text sx={{ color: 'text.secondary', fontWeight: 400 }} variant=\"tiny\">\n {params.row.description}\n </Text>\n </Stack>\n </Stack>\n ),\n },\n {\n field: 'costBasis',\n headerName: copy.overview.cost_basis_header,\n width: 132,\n renderHeader: HeaderCell,\n renderCell: (params) => {\n const isCurrentlyEditing = editingHoldingId === params.row.id\n return (\n <Stack sx={{ alignItems: 'center', flexDirection: 'row', gap: 4 }}>\n {isCurrentlyEditing ? (\n <TextField\n autoFocus={true}\n onBlur={() => handleCostBasisBlur(params.row.id)}\n onChange={handleCostBasisChange}\n onKeyDown={(e: React.KeyboardEvent<HTMLInputElement>) =>\n handleCostBasisKeyDown(e, params.row.id)\n }\n size=\"small\"\n sx={{\n fontSize: 14,\n width: 57,\n '& .MuiInputBase-input': {\n padding: '4px 0',\n textAlign: 'center',\n fontWeight: 600,\n color: 'text.primary',\n },\n '& .MuiOutlinedInput-notchedOutline': {\n border: 'none',\n },\n }}\n value={currentEditedCostBasis}\n />\n ) : (\n <Text sx={{ fontSize: 14, width: 57 }} variant=\"body2\">\n {params.value?.toLocaleString('en-US', {\n currency: 'USD',\n maximumFractionDigits: 2,\n minimumFractionDigits: 2,\n style: 'currency',\n })}\n </Text>\n )}\n <IconButton\n onClick={() => handleCostBasisClick(params.row.id, params.row.costBasis)}\n sx={{ minWidth: 12, minHeight: 12 }}\n >\n <Icon name={'stylus'} size={12} sx={{ color: 'grey.700' }} />\n </IconButton>\n </Stack>\n )\n },\n align: 'center',\n headerAlign: 'center',\n },\n {\n field: 'totalGainLoss',\n headerName: copy.overview.total_gain_loss_header,\n width: 196,\n renderHeader: HeaderCell,\n renderCell: (params) => {\n const costBasis = params.row.costBasis\n const gainLossPercentage = costBasis ? (params.row.totalGainLoss / costBasis) * 100 : 0\n return (\n <Stack sx={{ alignItems: 'center', flexDirection: 'row', gap: 2 }}>\n {params.value !== 0 && (\n <Icon\n name={params.value > 0 ? 'trending_up' : 'trending_down'}\n size={16}\n sx={{\n color: gainLossDisplayColor(params.value),\n mr: 1,\n verticalAlign: 'middle',\n }}\n />\n )}\n <Text\n sx={{\n color: gainLossDisplayColor(params.value),\n fontWeight: params.value > 0 ? 700 : 400,\n }}\n variant=\"body2\"\n >\n {costBasis ? `${gainLossPercentage.toFixed(2)}%` : '0.00%'}\n </Text>\n <Text sx={{ color: 'text.secondary' }} variant=\"caption\">\n |\n </Text>\n <Text\n sx={{\n color: gainLossDisplayColor(params.value),\n fontWeight: params.value > 0 ? 700 : 400,\n }}\n variant=\"body2\"\n >\n {Math.abs(params.value).toLocaleString('en-US', {\n currency: 'USD',\n maximumFractionDigits: 2,\n minimumFractionDigits: 2,\n style: 'currency',\n })}\n </Text>\n </Stack>\n )\n },\n align: 'right',\n headerAlign: 'right',\n sortable: false,\n },\n {\n field: 'marketValue',\n headerName: copy.overview.market_value_header,\n width: 132,\n renderHeader: HeaderCell,\n renderCell: (params) => (\n <Text sx={{ fontWeight: 700 }} variant={'body2'}>\n {params.value?.toLocaleString('en-US', {\n currency: 'USD',\n maximumFractionDigits: 2,\n minimumFractionDigits: 2,\n style: 'currency',\n })}\n </Text>\n ),\n align: 'right',\n headerAlign: 'right',\n },\n ]\n\n return (\n <Paper\n sx={{\n boxShadow: 'none',\n width: '100%',\n }}\n >\n <DataGridPro\n columns={columns}\n disableColumnFilter={true}\n disableColumnMenu={true}\n disableRowSelectionOnClick={true}\n hideFooter={true}\n rows={data}\n slotProps={{ baseIconButton: { sx: { display: 'none' } } }}\n />\n </Paper>\n )\n}\n\nexport default HoldingsTable\n","import React, { useState } from 'react'\n\nimport { observer } from 'mobx-react-lite'\nimport Accordion from '@mui/material/Accordion'\nimport AccordionDetails from '@mui/material/AccordionDetails'\nimport AccordionSummary from '@mui/material/AccordionSummary'\nimport Paper from '@mui/material/Paper'\nimport Stack from '@mui/system/Stack'\nimport { useTheme } from '@mui/material/styles'\nimport { Icon } from '@mxenabled/mx-icons'\nimport { InstitutionLogo, P, Text } from '@mxenabled/mxui'\n\nimport ConnectionsDrawer from '../../accounts/components/ConnectionsDrawer'\nimport {\n Loader,\n useAccountStore,\n useGlobalCopyStore,\n useGlobalUiStore,\n useHoldingStore,\n useScreenSize,\n} from '../../common'\nimport { EmptyStateFooterComponent } from './EmptyStateFooterComponent'\nimport InvestmentDetailsDrawer from './HoldingDrawer'\nimport HoldingsTable from './HoldingTable'\n\ninterface HoldingDetail {\n id: string\n description: string\n qty: number\n holding: string\n costBasis: number\n totalGainLoss: number\n marketValue: number\n}\n\nconst Overview = () => {\n const { isMobile } = useScreenSize()\n const [expandedStates, setExpandedStates] = useState<Record<string, boolean>>({})\n const [openDrawer, setOpenDrawer] = useState(false)\n const { selectedAccountGuids } = useGlobalUiStore()\n const { visibleHoldings: holdings, updateHoldings } = useHoldingStore()\n const [showConnectionsWidget, setShowConnectionsWidget] = React.useState(false)\n\n const [accountHoldingsData, setAccountHoldingsData] = useState<{\n accounts: any\n holdings: HoldingDetail[]\n }>({\n accounts: [],\n holdings: [],\n })\n const { accounts: accountsCopy, investments: copy } = useGlobalCopyStore()\n const { isCopyLoaded } = useGlobalUiStore()\n const [editingHoldingId, setEditingHoldingId] = useState<string | null>(null)\n const [currentEditedCostBasis, setCurrentEditedCostBasis] = useState<string>('')\n\n const theme = useTheme()\n\n const isDarkMode = theme.palette.mode === 'dark'\n\n const gainDisplayColor = isDarkMode ? '#0AC295' : '#09A57F'\n\n const lossDisplayColor = isDarkMode ? 'grey.300' : 'grey.700'\n\n const gainLossDisplayColor = (value: number, type: string = 'lesserThan') => {\n if (type === 'greaterThan') {\n return value >= 0 ? gainDisplayColor : lossDisplayColor\n }\n return value <= 0 ? lossDisplayColor : gainDisplayColor\n }\n\n const handleCostBasisClick = (holdingId: string, currentCostBasis: number) => {\n setEditingHoldingId(holdingId)\n setCurrentEditedCostBasis(currentCostBasis.toFixed(2))\n }\n\n const handleCostBasisChange = (event: React.ChangeEvent<HTMLInputElement>) => {\n // Allow only numbers and a single decimal point\n const value = event.target.value\n if (/^\\d*\\.?\\d*$/.test(value)) {\n setCurrentEditedCostBasis(value)\n }\n }\n\n const handleCostBasisKeyDown = (event: React.KeyboardEvent<HTMLInputElement>, id: string) => {\n if (event.key === 'Enter') {\n handleCostBasisBlur(id)\n } else if (event.key === 'Escape') {\n setEditingHoldingId(null)\n }\n }\n\n const handleCostBasisBlur = (id: string) => {\n const holding = holdings.find(({ guid }) => guid === id)\n if (!holding) return\n\n const updatedCostBasis = Number(currentEditedCostBasis)\n updateHoldings({ ...holding, cost_basis: updatedCostBasis })\n\n if (isMobile) {\n const updatedHoldings = accountHoldingsData.holdings.map((h) =>\n h.id === id ? { ...h, costBasis: updatedCostBasis } : h,\n )\n\n setAccountHoldingsData((prev) => ({\n ...prev,\n holdings: updatedHoldings,\n }))\n }\n\n setEditingHoldingId(null)\n }\n\n const handleAccordionChange =\n (accountId: string) => (_event: React.SyntheticEvent, isExpanded: boolean) => {\n setExpandedStates((prevStates) => ({\n ...prevStates,\n [accountId]: isExpanded,\n }))\n }\n\n const { visibleHoldings: allHoldings } = useHoldingStore()\n const { visibleInvestmentAccounts } = useAccountStore()\n\n const accounts = visibleInvestmentAccounts.filter(({ guid }) =>\n selectedAccountGuids.includes(guid),\n )\n\n const totalPortfolioValue = accounts.reduce((sum, account) => sum + (account.balance || 0), 0)\n\n const accountGuids = accounts.map(({ guid }) => guid)\n\n const updatedHoldings = allHoldings.filter(({ account_guid }) =>\n accountGuids.includes(account_guid),\n )\n\n const gainLoss = updatedHoldings.reduce((sum, holding) => {\n const hl = holding.market_value ? holding.market_value - (holding.cost_basis || 0) : 0\n return sum + hl\n }, 0)\n\n const closeDrawer = () => {\n setOpenDrawer(false)\n }\n\n if (!isCopyLoaded) {\n return <Loader />\n }\n\n return (\n <Stack sx={{ alignItems: 'center', gap: 48, pt: 48, width: '100%' }}>\n {/* header content */}\n {!!accounts.length && (\n <Stack sx={{ alignItems: 'center' }}>\n <Text sx={{ color: 'text.secondary' }}>{copy.overview.total_portfolio}</Text>\n <P variant=\"h1\">\n {totalPortfolioValue.toLocaleString('en-US', {\n currency: 'USD',\n maximumFractionDigits: 2,\n minimumFractionDigits: 2,\n style: 'currency',\n })}\n </P>\n <Stack sx={{ alignItems: 'center', flexDirection: 'row', gap: 8 }}>\n <Icon\n name={gainLoss >= 0 ? 'trending_up' : 'trending_down'}\n size={20}\n sx={{ color: gainLossDisplayColor(gainLoss, 'greaterThan') }}\n />\n <Text\n sx={{ color: gainLossDisplayColor(gainLoss, 'greaterThan'), fontWeight: 700 }}\n variant=\"body2\"\n >\n {gainLoss.toLocaleString('en-US', {\n currency: 'USD',\n maximumFractionDigits: 2,\n minimumFractionDigits: 2,\n style: 'currency',\n })}\n </Text>\n </Stack>\n </Stack>\n )}\n\n {accounts.map((account) => {\n const accountHoldings: HoldingDetail[] = allHoldings\n .filter((holding) => holding.account_guid === account.guid)\n .map((holding) => ({\n id: holding.guid,\n qty: holding.shares || 0,\n holding: holding.symbol || holding.description || 'Unknown',\n costBasis: holding.cost_basis || 0,\n totalGainLoss: holding.market_value\n ? holding.market_value - (holding.cost_basis || 0)\n : 0,\n marketValue: holding.market_value || 0,\n description: holding.description || '',\n }))\n\n const hasHoldingsData = accountHoldings.length > 0\n\n const accountTotalValue = account.balance\n const accountGainLoss = accountHoldings.reduce(\n (sum, holding) => holding.totalGainLoss + sum,\n 0,\n )\n\n const accountGainLossPercentage = accountTotalValue\n ? (accountGainLoss / accountTotalValue) * 100\n : 0\n\n // Mobile View: Use a simplified presentation\n if (isMobile) {\n return (\n <Paper\n key={account.guid}\n onClick={\n accountHoldings.length\n ? () => {\n setOpenDrawer(true)\n setAccountHoldingsData({\n holdings: accountHoldings,\n accounts: account,\n })\n }\n : undefined\n }\n sx={{\n width: '100%',\n overflow: 'hidden',\n }}\n >\n <Stack\n sx={{\n border: 1,\n borderColor: 'divider',\n borderRadius: '8px',\n ml: 16,\n mr: 16,\n overflow: 'hidden',\n pt: 14,\n }}\n >\n <Stack\n sx={{\n alignItems: 'center',\n borderBottom: 1,\n borderColor: 'divider',\n flexDirection: 'row',\n pb: 14,\n pl: 14,\n pr: 14,\n }}\n >\n <InstitutionLogo\n alt={account.institutionName || ''}\n institutionGuid={account.institution_guid || ''}\n size={32}\n />\n <Stack sx={{ overflow: 'hidden', pl: 13, pr: 13 }}>\n <Text sx={{ color: 'text.secondary' }} variant=\"caption\">\n {account.memberName}\n </Text>\n <Text sx={{ color: 'text.primary', fontWeight: 600 }} variant=\"body1\">\n {account.user_name || account.name}\n </Text>\n </Stack>\n </Stack>\n\n <Stack\n sx={{\n alignItems: 'center',\n flexDirection: 'row',\n justifyContent: 'space-between',\n pb: 8,\n pt: 8,\n }}\n >\n <Stack\n sx={{\n alignItems: 'center',\n borderRight: 1,\n borderColor: 'divider',\n flex: 1,\n justifyContent: 'center',\n pb: 14,\n pl: 7,\n pr: 7,\n pt: 14,\n }}\n >\n <Text sx={{ color: 'text.secondary', fontSize: 11 }} variant=\"body2\">\n {copy.overview.total_gain_Loss}\n </Text>\n <Stack\n sx={{\n alignItems: 'center',\n flexDirection: 'row',\n gap: 2,\n justifyContent: 'flex-end',\n }}\n >\n {accountGainLoss !== 0 && (\n <Icon\n name={accountGainLoss > 0 ? 'trending_up' : 'trending_down'}\n size={20}\n sx={{ color: gainLossDisplayColor(accountGainLoss) }}\n />\n )}\n <Text\n sx={{\n color: gainLossDisplayColor(accountGainLoss),\n fontWeight: 600,\n }}\n variant=\"body1\"\n >\n {accountGainLossPercentage.toFixed(2)}%\n </Text>\n <Text sx={{ color: 'text.secondary' }} variant=\"caption\">\n |\n </Text>\n <Text\n sx={{\n color: gainLossDisplayColor(accountGainLoss),\n fontWeight: 600,\n }}\n variant=\"body1\"\n >\n {Math.abs(accountGainLoss).toLocaleString('en-US', {\n currency: 'USD',\n maximumFractionDigits: 2,\n minimumFractionDigits: 2,\n style: 'currency',\n })}\n </Text>\n </Stack>\n </Stack>\n\n <Stack\n sx={{\n alignItems: 'center',\n flex: 1,\n justifyContent: 'center',\n pb: 14,\n pl: 7,\n pr: 7,\n pt: 14,\n }}\n >\n <Text sx={{ color: 'text.secondary' }} variant=\"caption\">\n {copy.overview.total_value}\n </Text>\n <Text sx={{ color: 'text.primary', fontWeight: 600 }} variant=\"body1\">\n {accountTotalValue?.toLocaleString('en-US', {\n currency: 'USD',\n maximumFractionDigits: 2,\n minimumFractionDigits: 2,\n style: 'currency',\n })}\n </Text>\n </Stack>\n </Stack>\n </Stack>\n </Paper>\n )\n }\n\n const disabledColor = isDarkMode ? 'grey.700' : 'grey.400'\n const logoColor = accountHoldings.length ? 'text.primary' : disabledColor\n\n return (\n <Accordion\n expanded={expandedStates[account.guid] === true}\n key={account.guid}\n onChange={hasHoldingsData ? handleAccordionChange(account.guid) : () => {}}\n sx={{\n border: 1,\n borderColor: 'divider',\n borderRadius: '4px',\n width: '100%',\n }}\n >\n <AccordionSummary\n aria-controls=\"panel1a-content\"\n id=\"panel1a-header\"\n sx={[\n expandedStates[account.guid] && {\n borderBottom: 1,\n borderColor: 'divider',\n maxHeight: 88,\n },\n ]}\n >\n <Stack\n sx={{\n alignItems: 'center',\n flexDirection: 'row',\n gap: 13,\n p: 14,\n width: '100%',\n }}\n >\n <Icon name={'expand_more'} size={20} sx={{ color: logoColor }} />\n <InstitutionLogo\n alt={account.institutionName || ''}\n institutionGuid={account.institution_guid || ''}\n size={32}\n />\n\n <Stack sx={{ alignItems: 'flex-start' }}>\n <Text sx={{ color: 'text.secondary' }} variant=\"caption\">\n {account.memberName}\n </Text>\n <Text sx={{ color: 'text.primary', fontWeight: 600 }} variant=\"body1\">\n {account.user_name || account.name}\n </Text>\n </Stack>\n </Stack>\n\n <Stack sx={{ flexDirection: 'row' }}>\n <Stack sx={{ alignItems: 'flex-end', pb: 14, pl: 24, pr: 24, pt: 14 }}>\n <Text sx={{ color: 'text.secondary' }} variant=\"caption\">\n {copy.overview.total_gain_Loss}\n </Text>\n\n <Stack\n sx={{\n alignItems: 'center',\n flexDirection: 'row',\n gap: 2,\n justifyContent: 'flex-end',\n }}\n >\n {accountGainLoss !== 0 && (\n <Icon\n name={accountGainLoss >= 0 ? 'trending_up' : 'trending_down'}\n size={20}\n sx={{ color: gainLossDisplayColor(accountGainLoss) }}\n />\n )}\n <Text\n sx={{\n color: gainLossDisplayColor(accountGainLoss),\n fontWeight: 600,\n }}\n variant=\"body1\"\n >\n {accountGainLossPercentage.toFixed(2)}%\n </Text>\n <Text sx={{ color: 'text.secondary' }} variant=\"caption\">\n |\n </Text>\n <Text\n sx={{\n color: gainLossDisplayColor(accountGainLoss),\n fontWeight: 600,\n }}\n variant=\"body1\"\n >\n {Math.abs(accountGainLoss).toLocaleString('en-US', {\n currency: 'USD',\n maximumFractionDigits: 2,\n minimumFractionDigits: 2,\n style: 'currency',\n })}\n </Text>\n </Stack>\n </Stack>\n\n <Stack sx={{ alignItems: 'flex-end', gap: 12, pb: 14, pl: 16, pr: 16, pt: 14 }}>\n <Stack sx={{ alignItems: 'flex-end' }}>\n <Text sx={{ color: 'text.secondary' }} variant=\"caption\">\n {copy.overview.total_value}\n </Text>\n <Text sx={{ color: 'text.primary', fontWeight: 600 }} variant=\"body1\">\n {accountTotalValue?.toLocaleString('en-US', {\n currency: 'USD',\n maximumFractionDigits: 2,\n minimumFractionDigits: 2,\n style: 'currency',\n })}\n </Text>\n </Stack>\n </Stack>\n </Stack>\n </AccordionSummary>\n <AccordionDetails sx={{ bgcolor: 'background.default', p: 12 }}>\n <Paper sx={{ border: 1, borderColor: 'neutral.light' }}>\n <HoldingsTable\n currentEditedCostBasis={currentEditedCostBasis}\n data={accountHoldings}\n editingHoldingId={editingHoldingId}\n handleCostBasisBlur={handleCostBasisBlur}\n handleCostBasisChange={handleCostBasisChange}\n handleCostBasisClick={handleCostBasisClick}\n handleCostBasisKeyDown={handleCostBasisKeyDown}\n />\n </Paper>\n </AccordionDetails>\n </Accordion>\n )\n })}\n\n {/* footer content */}\n <EmptyStateFooterComponent />\n\n {/* Drawer Component */}\n <InvestmentDetailsDrawer\n accountHoldingsData={accountHoldingsData}\n currentEditedCostBasis={currentEditedCostBasis}\n editingHoldingId={editingHoldingId}\n handleCostBasisBlur={handleCostBasisBlur}\n handleCostBasisChange={handleCostBasisChange}\n handleCostBasisClick={handleCostBasisClick}\n handleCostBasisKeyDown={handleCostBasisKeyDown}\n isOpen={openDrawer}\n onClose={closeDrawer}\n />\n\n <ConnectionsDrawer\n onClose={() => setShowConnectionsWidget(false)}\n showConnectionsWidget={showConnectionsWidget}\n title={accountsCopy.manage_connections}\n />\n </Stack>\n )\n}\n\nexport default observer(Overview)\n","import { Text } from '@mxenabled/mxui'\n\ninterface TabTitleProps {\n title: string\n}\n\nexport const TabTitle = ({ title }: TabTitleProps) => (\n <Text bold={true} variant=\"body1\">\n {title}\n </Text>\n)\n","import React from 'react'\nimport { observer } from 'mobx-react-lite'\n\nimport Stack from '@mui/material/Stack'\nimport Tab from '@mui/material/Tab'\nimport Tabs from '@mui/material/Tabs'\n\nimport {\n ANALYTICS_EVENTS,\n EmptyState,\n Loader,\n useAccountStore,\n useEvent,\n useGlobalCopyStore,\n useGlobalUiStore,\n useHoldingStore,\n useScreenSize,\n useWidgetLoadTimer,\n WidgetContainer,\n} from '../common'\nimport { AccountType, WidgetProps } from '../core'\n\nimport ConnectionsDrawer from '../accounts/components/ConnectionsDrawer'\nimport Allocation from './components/Allocation'\nimport Analysis from './components/Analysis'\nimport Overview from './components/Overview'\nimport { TabTitle } from './components/TabTitle'\n\nexport const InvestmentsWidget = observer(({ onBackClick, onMenuClick, sx }: WidgetProps) => {\n const { onEvent } = useEvent()\n const { isMobile } = useScreenSize()\n const {\n isAccountDataLoaded,\n loadAccountData,\n visibleInvestmentAccounts: accounts,\n } = useAccountStore()\n const {\n visibleHoldings: holdings,\n setShowConnectionsWidget,\n showConnectionsWidget,\n } = useHoldingStore()\n const { investments: copy, accounts: accountsCopy } = useGlobalCopyStore()\n\n const { isInitialized } = useGlobalUiStore()\n\n const [selectedTab, setSelectedTab] = React.useState(0)\n\n const { loadHoldings, holdingsLoaded } = useHoldingStore()\n\n useWidgetLoadTimer({\n widgetName: 'InvestmentsWidget',\n isLoaded: holdingsLoaded,\n })\n\n React.useEffect(() => {\n if (!isAccountDataLoaded) {\n loadAccountData().finally()\n }\n }, [])\n\n React.useEffect(() => {\n if (isInitialized) {\n loadHoldings().finally()\n }\n }, [isInitialized])\n\n const handleAccountFilterClick = () => {\n onEvent(ANALYTICS_EVENTS.INVESTMENT_WIDGET_ACCOUNT_FILTER_CLICK)\n }\n\n if (!isInitialized || !holdingsLoaded) return <Loader />\n\n const events = [\n ANALYTICS_EVENTS.INVESTMENT_WIDGET_DETAILS_CLICK,\n ANALYTICS_EVENTS.INVESTMENT_WIDGET_ALLOCATION_CLICK,\n ANALYTICS_EVENTS.INVESTMENT_WIDGET_ANALYSIS_CLICK,\n ]\n const isEmptyState = accounts.length === 0 && holdings.length === 0\n const investmentTabs = [\n copy.tab_overview_title,\n copy.tab_allocation_title,\n copy.tab_analysis_title,\n ]\n return (\n <WidgetContainer\n allowedAccountTypes={[AccountType.INVESTMENT]}\n onAccountsFilterClick={handleAccountFilterClick}\n onBackClick={onBackClick}\n onMenuClick={onMenuClick}\n sx={sx}\n title={copy.title}\n >\n <Stack mx={isMobile ? 0 : 48} my={24}>\n <Tabs\n onChange={(_, newValue) => {\n setSelectedTab(newValue)\n onEvent(events[newValue])\n }}\n sx={{ bgcolor: 'background.paper' }}\n textColor=\"primary\"\n value={!isEmptyState ? selectedTab : -1}\n variant=\"fullWidth\"\n >\n {investmentTabs.map((title) => (\n <Tab disabled={isEmptyState} key={title} label={<TabTitle title={title} />} />\n ))}\n </Tabs>\n {isEmptyState ? (\n <EmptyState\n header={copy.empty_state_header}\n icon=\"bid_landscape\"\n onClick={() => {\n setShowConnectionsWidget(true)\n onEvent(ANALYTICS_EVENTS.ACCOUNTS_CLICK_CONNECT)\n }}\n primaryButton={copy.overview.connect_accounts}\n subText={copy.empty_state_description}\n sx={{\n width: { sm: 432 },\n '.buttons-footer': {\n width: 167,\n },\n '.MuiTypography-h2': {\n mt: 20,\n mb: 4,\n },\n px: 16,\n }}\n />\n ) : (\n <>\n {selectedTab === 0 && <Overview />}\n {selectedTab === 1 && <Allocation />}\n {selectedTab === 2 && <Analysis />}\n </>\n )}\n </Stack>\n <ConnectionsDrawer\n onClose={() => setShowConnectionsWidget(false)}\n showConnectionsWidget={showConnectionsWidget}\n title={accountsCopy.manage_connections}\n />\n </WidgetContainer>\n )\n})\n"],"names":["EmptyStateFooterComponent","sx","copy","useGlobalCopyStore","onEvent","useEvent","setShowConnectionsWidget","useHoldingStore","Stack","jsxs","jsx","Text","Button","ANALYTICS_EVENTS","allocationColors","allocationsList","inRange","n","start","end","rangeStart","rangeEnd","createHoldingsData","holdings","allocationName","allocationValue","uniqueHoldings","holding","displayName","holdingName","holdingsTotalValue","acc","hold","name","getHoldingValue","createInvestmentsAllocationData","accounts","allocationListDisplayNames","investementAllocationData","totalAmount","accountGuids","guid","updatedHoldings","account_guid","eachHolding","cashBalance","totalAccountBalance","sum","account","marketValue","totalGainLoss","totalMarketValue","allocation","index","filteredHoldings","holdingsTotal","investmentAllocationTotals","cashBalanceHolding","donutData","color","value","percentageDisplay","formatPercentage","currencyDisplay","formatCurrency","InvestementAllocationList","data","onSelected","selectedId","selectedTabs","setSelectedTabs","handleChange","_","newValue","isMobile","useScreenSize","toggleButtonsList","isEmptyState","isSmallMobile","ToggleButtonGroup","label","ToggleButton","List","item","React","ListItem","ListItemButton","Box","Divider","Collapse","subItem","Fragment","InvestementsAllocationChart","hoveredId","isPercentage","onMouseEnter","onMouseLeave","size","totalLabel","theme","useTheme","isDarkMode","selectedInvestments","gainDisplayColor","lossDisplayColor","getGainLossDisplay","gainLossDisplayColor","Donut","P","Icon","Allocation","setSelectedId","setHoveredId","id","selectedAccountGuids","useGlobalUiStore","allHoldings","useAccountStore","investmentAllocationData","isScreenDeviceTablet","useMediaQuery","Allocation$1","observer","AnalysisDetails","analysisDetails","analysisType","setAnalysisType","listItems","key","formatKey","toggleButtons","AnalysisType","formattedKey","ListItemText","TooltipContent","body","title","InfoTooltip","placement","tooltip_info_body","tooltip_info_title","Tooltip","IconButton","Analysis","analysisChartData","isSmallMobileDevice","isDark","cellDimension","columns","rows","textVariant","isStocks","row","rowIndex","colIndex","isFirstRow","isLastRow","isFirstCol","isLastCol","isHigh","bgcolor","Analysis$1","InvestmentDetailsDrawer","accountHoldingsData","currentEditedCostBasis","editingHoldingId","handleCostBasisBlur","handleCostBasisClick","handleCostBasisChange","handleCostBasisKeyDown","isOpen","onClose","expandedStates","setExpandedStates","handleAccordionChange","holdingId","_event","isExpanded","prevStates","Drawer","InstitutionLogo","isCurrentlyEditing","Accordion","AccordionSummary","AccordionDetails","TextField","e","InvestmentDetailsDrawer$1","HeaderCell","params","HoldingsTable","type","costBasis","gainLossPercentage","Paper","DataGridPro","Overview","useState","openDrawer","setOpenDrawer","updateHoldings","showConnectionsWidget","setAccountHoldingsData","accountsCopy","isCopyLoaded","setEditingHoldingId","setCurrentEditedCostBasis","currentCostBasis","event","updatedCostBasis","h","prev","accountId","visibleInvestmentAccounts","totalPortfolioValue","gainLoss","hl","closeDrawer","accountHoldings","hasHoldingsData","accountTotalValue","accountGainLoss","accountGainLossPercentage","disabledColor","logoColor","ConnectionsDrawer","Loader","Overview$1","TabTitle","InvestmentsWidget","onBackClick","onMenuClick","isAccountDataLoaded","loadAccountData","isInitialized","selectedTab","setSelectedTab","loadHoldings","holdingsLoaded","useWidgetLoadTimer","handleAccountFilterClick","events","investmentTabs","WidgetContainer","AccountType","Tabs","Tab","EmptyState"],"mappings":"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"}