@mx-cartographer/experiences 6.26.0 → 6.26.1-alpha.mega1

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.
Files changed (84) hide show
  1. package/dist/AccountStore-DkL93tXL.mjs +317 -0
  2. package/dist/AccountStore-DkL93tXL.mjs.map +1 -0
  3. package/dist/BudgetUtil-CVqAdv-j.mjs +187 -0
  4. package/dist/BudgetUtil-CVqAdv-j.mjs.map +1 -0
  5. package/dist/CashflowStore-gPEEBiXo.mjs +53 -0
  6. package/dist/CashflowStore-gPEEBiXo.mjs.map +1 -0
  7. package/dist/CategoryStore-m7oieLzP.mjs +260 -0
  8. package/dist/CategoryStore-m7oieLzP.mjs.map +1 -0
  9. package/dist/ConnectMiniWidget-CQWafYtQ.mjs +22966 -0
  10. package/dist/ConnectMiniWidget-CQWafYtQ.mjs.map +1 -0
  11. package/dist/DebtsStore-cUhIgJx6.mjs +145 -0
  12. package/dist/DebtsStore-cUhIgJx6.mjs.map +1 -0
  13. package/dist/Donut-CGNFni9y.mjs +58 -0
  14. package/dist/Donut-CGNFni9y.mjs.map +1 -0
  15. package/dist/FinstrongStore-BDG7l0nI.mjs +183 -0
  16. package/dist/FinstrongStore-BDG7l0nI.mjs.map +1 -0
  17. package/dist/GoalStore-o2waGeyf.mjs +293 -0
  18. package/dist/GoalStore-o2waGeyf.mjs.map +1 -0
  19. package/dist/Loader-CwdK8lfx.mjs +147 -0
  20. package/dist/Loader-CwdK8lfx.mjs.map +1 -0
  21. package/dist/MerchantStore-Cck9IGIH.mjs +125 -0
  22. package/dist/MerchantStore-Cck9IGIH.mjs.map +1 -0
  23. package/dist/NetWorthStore-D5eUfGQt.mjs +66 -0
  24. package/dist/NetWorthStore-D5eUfGQt.mjs.map +1 -0
  25. package/dist/NotificationStore-DCxw8W7u.mjs +141 -0
  26. package/dist/NotificationStore-DCxw8W7u.mjs.map +1 -0
  27. package/dist/RecurringTransactionsStore-Bijrgllq.mjs +337 -0
  28. package/dist/RecurringTransactionsStore-Bijrgllq.mjs.map +1 -0
  29. package/dist/SettingsStore-BhOYgUOa.mjs +352 -0
  30. package/dist/SettingsStore-BhOYgUOa.mjs.map +1 -0
  31. package/dist/TransactionApi-Dnbyi1JL.mjs +175 -0
  32. package/dist/TransactionApi-Dnbyi1JL.mjs.map +1 -0
  33. package/dist/TransactionStore-CiEtt5XJ.mjs +417 -0
  34. package/dist/TransactionStore-CiEtt5XJ.mjs.map +1 -0
  35. package/dist/TrendsStore-Idq3QfoA.mjs +131 -0
  36. package/dist/TrendsStore-Idq3QfoA.mjs.map +1 -0
  37. package/dist/accounts/index.es.js +18 -0
  38. package/dist/accounts/index.es.js.map +1 -0
  39. package/dist/analytics/index.es.js +170 -0
  40. package/dist/analytics/index.es.js.map +1 -0
  41. package/dist/budgets/index.es.js +1116 -0
  42. package/dist/budgets/index.es.js.map +1 -0
  43. package/dist/cashflow/index.es.js +118 -0
  44. package/dist/cashflow/index.es.js.map +1 -0
  45. package/dist/categories/index.es.js +10 -0
  46. package/dist/categories/index.es.js.map +1 -0
  47. package/dist/common/context/hooks.d.ts +13 -13
  48. package/dist/common/index.es.js +1549 -0
  49. package/dist/common/index.es.js.map +1 -0
  50. package/dist/dashboard/index.es.js +257 -0
  51. package/dist/dashboard/index.es.js.map +1 -0
  52. package/dist/debts/index.es.js +9 -0
  53. package/dist/debts/index.es.js.map +1 -0
  54. package/dist/finstrong/index.es.js +11 -0
  55. package/dist/finstrong/index.es.js.map +1 -0
  56. package/dist/goals/index.es.js +9 -0
  57. package/dist/goals/index.es.js.map +1 -0
  58. package/dist/help/components/content/section/index.d.ts +15 -15
  59. package/dist/help/index.es.js +6 -0
  60. package/dist/help/index.es.js.map +1 -0
  61. package/dist/investments/index.es.js +1694 -0
  62. package/dist/investments/index.es.js.map +1 -0
  63. package/dist/merchants/index.es.js +7 -0
  64. package/dist/merchants/index.es.js.map +1 -0
  65. package/dist/microinsights/index.es.js +21 -0
  66. package/dist/microinsights/index.es.js.map +1 -0
  67. package/dist/networth/index.es.js +11 -0
  68. package/dist/networth/index.es.js.map +1 -0
  69. package/dist/notifications/index.es.js +116 -0
  70. package/dist/notifications/index.es.js.map +1 -0
  71. package/dist/recurringtransactions/index.es.js +14 -0
  72. package/dist/recurringtransactions/index.es.js.map +1 -0
  73. package/dist/settings/index.es.js +112 -0
  74. package/dist/settings/index.es.js.map +1 -0
  75. package/dist/spending/index.es.js +632 -0
  76. package/dist/spending/index.es.js.map +1 -0
  77. package/dist/transactions/index.es.js +19 -0
  78. package/dist/transactions/index.es.js.map +1 -0
  79. package/dist/trends/index.es.js +10 -0
  80. package/dist/trends/index.es.js.map +1 -0
  81. package/package.json +91 -3
  82. package/dist/index.d.ts +0 -22
  83. package/dist/index.es.js +0 -29907
  84. package/dist/index.es.js.map +0 -1
@@ -0,0 +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, whiteSpace: 'normal' }} variant=\"Body\">\n {copy.overview.investment_accounts_footer}\n </Text>\n <Text\n sx={{\n color: 'text.secondary',\n whiteSpace: 'normal',\n fontWeight: 400,\n }}\n variant=\"ParagraphSmall\"\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, formatCurrency, formatPercentage, Holding } from '../../../../common'\nimport { InvestmentAllocationCopy } from '../../../../common/types/localization/InvestmentsCopy'\nimport type { DonutData } from '../InvestmentsAllocationChart'\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=\"Body\">\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=\"Body\">\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 sx={{ borderColor: 'border.light' }} />\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/useTheme'\n\nimport { H1, Text } from '@mxenabled/mxui'\nimport { Icon } from '@mxenabled/mx-icons'\n\nimport { Donut, useGlobalCopyStore } from '../../../common'\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.border.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 <H1 color=\"text.primary\">\n {currencyDisplay(selectedInvestments?.value ?? data.totalMarketValue)}\n </H1>\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=\"Small\"\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 { formatCurrency, useScreenSize } from '../../common'\n\nimport { AnalysisType } from '../constants'\nimport { formatKey } from '../util/InvestmentUtil'\n\nimport { EmptyStateFooterComponent } from './EmptyStateFooterComponent'\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: 'border.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 primaryTypographyProps={{ 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: 'border.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=\"Body\">\n {title}\n </Text>\n <P variant=\"ParagraphSmall\">{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 '../constants'\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: 'Body' | 'XSmall' = isMobile ? 'XSmall' : 'Body'\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 ? 'Body' : '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=\"Small\">\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=\"Body\">\n {copy.overview.current_balance}\n </Text>\n\n <Text sx={{ color: 'text.primary', fontWeight: 600 }} variant=\"Body\">\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=\"XSmall\">\n {copy.overview.holding}\n </Text>\n <Text sx={{ color: 'text.primary', fontWeight: 700 }} variant=\"XSmall\">\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: 'border.main',\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: 'border.main',\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=\"Body\">\n {holding.holding}\n </Text>\n <Text variant=\"XSmall\">{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={'Body'}>\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=\"XSmall\"\n >\n {holding.costBasis\n ? `${((holding.totalGainLoss / holding.costBasis) * 100).toFixed(2)}%`\n : '0.00%'}\n </Text>\n <Text sx={{ color: 'grey.700' }} variant=\"XSmall\">\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=\"XSmall\"\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: 'border.main',\n flexDirection: 'row',\n height: 48,\n justifyContent: 'space-between',\n pr: 24,\n }}\n >\n <Text sx={{ color: 'text.primary' }} variant=\"Body\">\n {copy.overview.quantity}\n </Text>\n <Text sx={{ color: 'text.primary' }} variant=\"Small\">\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=\"Body\">\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=\"Small\">\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=\"Small\">\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/useTheme'\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=\"Small\">\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=\"Small\"\n >\n {costBasis ? `${gainLossPercentage.toFixed(2)}%` : '0.00%'}\n </Text>\n <Text sx={{ color: 'text.secondary' }} variant=\"XSmall\">\n |\n </Text>\n <Text\n sx={{\n color: gainLossDisplayColor(params.value),\n fontWeight: params.value > 0 ? 700 : 400,\n }}\n variant=\"Small\"\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={'Small'}>\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/useTheme'\nimport { Icon } from '@mxenabled/mx-icons'\nimport { H1, InstitutionLogo, 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 <H1>\n {totalPortfolioValue.toLocaleString('en-US', {\n currency: 'USD',\n maximumFractionDigits: 2,\n minimumFractionDigits: 2,\n style: 'currency',\n })}\n </H1>\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=\"Small\"\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: 'border.main',\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: 'border.main',\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=\"XSmall\">\n {account.memberName}\n </Text>\n <Text sx={{ color: 'text.primary', fontWeight: 600 }} variant=\"Body\">\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: 'border.main',\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=\"Small\">\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=\"Body\"\n >\n {accountGainLossPercentage.toFixed(2)}%\n </Text>\n <Text sx={{ color: 'text.secondary' }} variant=\"XSmall\">\n |\n </Text>\n <Text\n sx={{\n color: gainLossDisplayColor(accountGainLoss),\n fontWeight: 600,\n }}\n variant=\"Body\"\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=\"XSmall\">\n {copy.overview.total_value}\n </Text>\n <Text sx={{ color: 'text.primary', fontWeight: 600 }} variant=\"Body\">\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: 'border.main',\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=\"XSmall\">\n {account.memberName}\n </Text>\n <Text sx={{ color: 'text.primary', fontWeight: 600 }} variant=\"Body\">\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=\"XSmall\">\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=\"Body\"\n >\n {accountGainLossPercentage.toFixed(2)}%\n </Text>\n <Text sx={{ color: 'text.secondary' }} variant=\"XSmall\">\n |\n </Text>\n <Text\n sx={{\n color: gainLossDisplayColor(accountGainLoss),\n fontWeight: 600,\n }}\n variant=\"Body\"\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=\"XSmall\">\n {copy.overview.total_value}\n </Text>\n <Text sx={{ color: 'text.primary', fontWeight: 600 }} variant=\"Body\">\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: 'border.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=\"Body\">\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 WidgetContainer,\n WidgetProps,\n} from '../common'\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, sx }: WidgetProps) => {\n const { onEvent } = useEvent()\n const { isMobile } = useScreenSize()\n const { visibleInvestmentAccounts: accounts } = useAccountStore()\n const {\n visibleHoldings: holdings,\n setShowConnectionsWidget,\n showConnectionsWidget,\n } = useHoldingStore()\n const { investments: copy, accounts: accountsCopy } = useGlobalCopyStore()\n\n const { isCopyLoaded, isInitialized, setSelectedAccounts } = useGlobalUiStore()\n\n const [selectedTab, setSelectedTab] = React.useState(0)\n\n const { loadHoldings } = useHoldingStore()\n\n React.useEffect(() => {\n setSelectedAccounts(accounts)\n }, [accounts])\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 (!isCopyLoaded || !isInitialized) 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 accountOptions={accounts}\n onAccountsFilterClick={handleAccountFilterClick}\n onBackClick={onBackClick}\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","H1","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","P","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","isInitialized","setSelectedAccounts","selectedTab","setSelectedTab","loadHoldings","handleAccountFilterClick","events","investmentTabs","WidgetContainer","Tabs","Tab","EmptyState"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAYO,MAAMA,KAA4B,CAAC,EAAE,IAAAC,IAAK,CAAA,QAAyC;AACxF,QAAM,EAAE,aAAaC,EAAK,IAAIC,EAAmB,GAC3C,EAAE,SAAAC,MAAYC,MACd,EAAE,0BAAAC,MAA6BC;AAErC,2BACGC,GAAM,EAAA,IAAI,EAAE,YAAY,UAAU,KAAK,IAAI,QAAQ,KAAK,GAAG,IAAI,OAAO,QAAQ,GAAGP,EAChF,GAAA,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,QACb;AAAA,QAEA,UAAA;AAAA,UAAA,gBAAAE,EAACC,GAAK,EAAA,IAAI,EAAE,YAAY,KAAK,YAAY,SAAS,GAAG,SAAQ,QAC1D,UAAKT,EAAA,SAAS,4BACjB;AAAA,UACA,gBAAAQ;AAAA,YAACC;AAAA,YAAA;AAAA,cACC,IAAI;AAAA,gBACF,OAAO;AAAA,gBACP,YAAY;AAAA,gBACZ,YAAY;AAAA,cACd;AAAA,cACA,SAAQ;AAAA,cAEP,YAAK,SAAS;AAAA,YAAA;AAAA,UACjB;AAAA,QAAA;AAAA,MAAA;AAAA,IACF;AAAA,IACA,gBAAAD;AAAA,MAACE;AAAA,MAAA;AAAA,QACC,SAAS,MAAM;AACb,UAAAN,EAAyB,EAAI,GAC7BF,EAAQS,EAAiB,sBAAsB;AAAA,QACjD;AAAA,QACA,IAAI,EAAE,YAAY,IAAI;AAAA,QACtB,SAAQ;AAAA,QAEP,YAAK,SAAS;AAAA,MAAA;AAAA,IACjB;AAAA,EACF,EAAA,CAAA;AAEJ,GClCMC,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,EACR;AAAA,EACA;AAAA,IACE,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,MAAM;AAAA,EACR;AACF,GAEMC,KAAU,CAACC,GAAWC,GAAeC,MAAiB;AACpD,QAAAC,IAAqCF,GACrCG,IAAuCF;AACtC,SAAAF,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,YAAY,CAAC,CAAC;AAAA,EAAA;AAEvE,MAAAC;AAyBG,SAxB4BF,EAAe,IAAI,CAACG,MAAgB;AAErE,UAAMC,IAAqBP,EAAS,OAAO,CAACQ,GAAKC,MAAkB;AACjE,YAAMC,IAAOD,EAAK;AAEd,aAAAC,EAAK,YAAY,MAAMJ,KAEXD,IAAAK,GAEXC,EAAgBF,CAAI,IAAIA,EAAKR,CAA+C,IAAK,MAClFO,KAIGA;AAAA,OACN,CAAC;AAEG,WAAA;AAAA,MACL,aAAAH;AAAA,MACA,MAAMA;AAAA,MACN,OAAOE;AAAA,MACP,YAAYA,IAAqBL;AAAA,IAAA;AAAA,EACnC,CACD;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,MAAMH,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,EAAoB,IAAIV,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,EAAE;AAAA,EAAA,GAErC,EAAE,aAAAC,GAAa,eAAAC,EAAc,IAAIR,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,EAAE;AAAA,EAAA,GAE/BwB,IAAmBF,IAAcJ;AAEvB,EAAA9B,GAAA,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;AAG5C,MAAAU,KAAAV;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,GACcb,KAAAgB;AAAA,EACjB,CACD;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;AAGK,SAAA;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,GCjMpEK,KAA4B,CAAC;AAAA,EACxC,MAAAC;AAAA,EACA,YAAAC;AAAA,EACA,YAAAC;AAAA,EACA,cAAAC;AAAA,EACA,iBAAAC;AACF,MAAqC;AAC7B,QAAAC,IAAe,CAACC,GAAyBC,MAAqB;AAClE,IAAIA,MAAa,QACfH,EAAgBG,CAAQ;AAAA,EAC1B,GAEI,EAAE,UAAAC,MAAaC,KACf;AAAA,IACJ,aAAa,EAAE,YAAYzE,EAAK;AAAA,MAC9BC,EAAmB,GAEjByE,IAAoB;AAAA,IACxB,EAAE,OAAO1E,EAAK,mBAAmB,OAAO,EAAE;AAAA,IAC1C,EAAE,OAAOA,EAAK,oBAAoB,OAAO,EAAE;AAAA,EAAA,GAEvC2E,IAAe,CAACX,GAAM,gBAAgB,QACtC,EAAE,eAAAY,MAAkBH;AAE1B,SACG,gBAAAlE,EAAAD,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,EAAM,MACpC,gBAAAlD,EAAAuE,IAAA,EAAa,OAAM,WAAsB,OAAArB,GACxC,UAAC,gBAAAlD,EAAAC,GAAA,EAAK,MAAM,IAAM,eAAe,cAAc,SAAQ,QACpD,UAAAqE,EAAA,CACH,EAHiC,GAAAA,CAInC,CACD;AAAA,MAAA;AAAA,IACH;AAAA,IAEC,gBAAAtE,EAAAwE,IAAA,EAAK,IAAI,EAAE,IAAI,GAAG,GAChB,UAAKhB,EAAA,gBAAgB,IAAI,CAACiB,MACxB,gBAAA1E,EAAA2E,EAAM,UAAN,EACC,UAAA;AAAA,MAAA,gBAAA1E;AAAA,QAAC2E;AAAA,QAAA;AAAA,UACC,gBAAgB;AAAA,UAChB,gBAAgB;AAAA,UAChB,IAAI;AAAA,YACF,WAAW;AAAA,UACb;AAAA,UAEA,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,EAAE;AAAA,cAEnC,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,EAAE;AAAA,oBACzC,OAAO;AAAA,kBAAA;AAAA,gBACT;AAAA,gBACA,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,GAAK,EAAA,MAAMyD,MAAee,EAAK,MAAM,SAAQ,QAC3C,UAAiBd,MAAA,IACdN,EAAgBoB,EAAK,KAAK,IAC1BtB,GAAkBsB,EAAK,UAAU,GACvC;AAAA,oBAAA;AAAA,kBAAA;AAAA,gBACF;AAAA,cAAA;AAAA,YAAA;AAAA,UACF;AAAA,QAAA;AAAA,MACF;AAAA,wBAECK,GAAQ,EAAA;AAAA,MAERL,EAAK,YAAYA,EAAK,SAAS,SAAS,KACtC,gBAAAzE,EAAA+E,IAAA,EAAS,IAAYrB,MAAee,EAAK,MAAO,eAAe,IAC9D,4BAACD,IACE,EAAA,UAAA;AAAA,QAAMC,GAAA,UAAU,IAAI,CAACO,MACpB,gBAAAhF;AAAA,UAAC2E;AAAA,UAAA;AAAA,YAEC,IAAI;AAAA,cACF,IAAI;AAAA,cACJ,IAAI;AAAA,cACJ,IAAI;AAAA,YACN;AAAA,YAEA,4BAAC7E,GAAM,EAAA,WAAU,OAAM,gBAAe,iBAAgB,OAAM,QAC1D,UAAA;AAAA,cAAA,gBAAAC,EAACE,GAAM,EAAA,UAAA;AAAA,gBAAQ+E,EAAA;AAAA,gBAAY;AAAA,cAAA,GAAC;AAAA,cAC5B,gBAAAhF,EAACC,GACE,EAAA,UAAA0D,MAAiB,IACdN,EAAgB2B,EAAQ,KAAK,IAC7B7B,GAAkB6B,EAAQ,UAAU,EAC1C,CAAA;AAAA,YAAA,GACF;AAAA,UAAA;AAAA,UAdKA,EAAQ;AAAA,QAAA,CAgBhB;AAAA,0BACAF,GAAQ,EAAA;AAAA,MAAA,EAAA,CACX,EACF,CAAA;AAAA,IA9DiB,EAAA,GAAAL,EAAK,IAgE1B,CACD,GACH;AAAA,IACCN,IAEG,gBAAApE,EAAAkF,IAAA,EAAA,UAAA;AAAA,MAAC,gBAAAjF,EAAAC,GAAA,EAAK,IAAI,EAAE,OAAO,kBAAkB,GAAG,GAAG,WAAW,SAAa,GAAA,UAAAT,EAAK,WAAW,CAAA;AAAA,wBAClFsF,GAAQ,EAAA,IAAI,EAAE,aAAa,kBAAkB;AAAA,MAC9C,gBAAA9E;AAAA,QAACV;AAAA,QAAA;AAAA,UACC,IAAI;AAAA,YACF,oBAAoB,EAAE,OAAO8E,IAAgB,SAAS,IAAI;AAAA,UAC5D;AAAA,QAAA;AAAA,MACF;AAAA,IACF,EAAA,CAAA,IAEAT,MAAiB,KACf,gBAAA3D,EAACC,KAAK,MAAM,IAAM,IAAI,EAAE,WAAW,SAAS,IAAI,MAC7C,aAAGT,EAAK,gBAAgB,IAAI6D,EAAgBG,EAAK,WAAW,CAAC,GAChE,CAAA;AAAA,EAGN,EAAA,CAAA;AAEJ,GCnHa0B,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,MACRC,IAAaF,EAAM,QAAQ,SAAS,QAEpCG,IAAsBlB,EAAM;AAAA,IAChC,MACEhB,IACIF,EAAK,gBAAgB,KAAK,CAAC,EAAE,MAAAzB,EAAK,MAAiCA,MAAS2B,CAAU,IACtF;AAAA,IACN,CAACA,CAAU;AAAA,EAAA,GAEP;AAAA,IACJ,aAAa,EAAE,YAAYlE,EAAK;AAAA,MAC9BC,EAAmB,GACjBuD,IAAY0B,EAAM,QAAQ,MAC1BlB,EAAK,UAAU,SAAS,IAAUA,EAAK,YAGpC,CAAC,EAAE,IAAI,KAAK,OAAOiC,EAAM,QAAQ,OAAO,OAAO,OAAO,IAAK,CAAA,GACjE,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;AAGxE,SAAA,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,GAAM,EAAA,YAAW,UAAS,QAAO,QAAO,gBAAe,UAAS,OAAM,QACrE,UAAA,gBAAAE,EAACF,KAAM,YAAW,UAAS,gBAAe,UAAS,WAAWyF,GAAM,UAAUA,GAC5E,UAAC,gBAAAxF,EAAAD,GAAA,EAAM,YAAW,UAAS,IAAI,EAAE,KAAK,EAAE,IAAI,GAAG,IAAI,KAAK,IAAI,EAAE,IAAI,GAAG,IAAI,IACvE,GAAA,UAAA;AAAA,QAAA,gBAAAE,EAACC,KAAK,OAAM,kBAAiB,QAAQ,IAClC,UAAA2F,GAAqB,eAAeJ,EACvC,CAAA;AAAA,QACA,gBAAAxF,EAACkG,MAAG,OAAM,gBACP,YAAgBN,GAAqB,SAASpC,EAAK,gBAAgB,EACtE,CAAA;AAAA,QAEA,gBAAAzD,EAACD,GAAM,EAAA,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,EAAqB;AAAA,YAAA;AAAA,UACpC;AAAA,UAEF,gBAAAhG;AAAA,YAACC;AAAA,YAAA;AAAA,cACC,IAAI;AAAA,gBACF,OAAO+F;AAAA,gBACP,YAAY;AAAA,cACd;AAAA,cACA,SAAQ;AAAA,cAEP,UAAmBD,EAAA;AAAA,YAAA;AAAA,UACtB;AAAA,QAAA,GACF;AAAA,MAAA,EACF,CAAA,EACF,CAAA,GACF;AAAA,IAAA;AAAA,EAAA;AAGN,GC5GMK,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,EACjB,GAEI,EAAE,sBAAAE,MAAyBC,KAC3B,EAAE,iBAAiBC,EAAY,IAAI7G,EAAgB,GACnD,EAAE,2BAA2B6B,EAAS,IAAIiF,GAAgB,GAC1D;AAAA,IACJ,aAAa,EAAE,YAAYnH,EAAK;AAAA,MAC9BC,EAAmB,GACjBmH,IAA2BnF;AAAA,IAC/BC,EAAS,OAAO,CAAC,EAAE,MAAAK,EAAW,MAAAyE,EAAqB,SAASzE,CAAI,CAAC;AAAA,IACjEvC;AAAA,IACAkH;AAAA,EAAA,GAEI,EAAE,UAAA1C,MAAaC,KACf4C,IAAuBC,GAAc,mBAAmB;AAG5D,SAAA,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,IAAI;AAAA,MAC/B,IAAI;AAAA,QACF,gBAAgB;AAAA,QAChB,IAAI;AAAA,QACJ,OAAO;AAAA,MACT;AAAA,MAEA,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,QACnB;AAAA,QACA,gBAAAQ;AAAA,UAACuD;AAAA,UAAA;AAAA,YACC,MAAMqD;AAAA,YACN,YAAAnD;AAAA,YACA,YAAAC;AAAA,YACA,cAAAC;AAAA,YACA,iBAAAC;AAAA,UAAA;AAAA,QACF;AAAA,MAAA;AAAA,IAAA;AAAA,EAAA;AAGN,GAEemD,KAAAC,EAASZ,EAAU,GCrD5Ba,KAAkD,CAAC;AAAA,EACvD,iBAAAC;AAAA,EACA,cAAAC;AAAA,EACA,MAAA3H;AAAA,EACA,iBAAA4H;AACF,MAAM;AACE,QAAA,EAAE,eAAAhD,MAAkBH,KAEpBoD,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,EAC3B,EAAA,GACH,CAACJ,CAAe,CAAC,GAEdM,IAAgB;AAAA,IACpB,EAAE,OAAOhI,EAAK,UAAU,OAAOiI,EAAa,OAAO;AAAA,IACnD,EAAE,OAAOjI,EAAK,OAAO,OAAOiI,EAAa,MAAM;AAAA,EAAA;AAG/C,SAAA,gBAAA1H,EAACD,GAAM,EAAA,IAAI,EAAE,KAAK,IAAI,OAAO,EAAE,IAAI,IAAI,EAAA,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,UACjB;AAAA,QACF;AAAA,QACA,OAAOmE,EAAU,SAASF,IAAe;AAAA,QAExC,YAAc,IAAI,CAAC,EAAE,OAAA7C,GAAO,OAAApB,QAC3B,gBAAAlD,EAACuE,IAAyB,EAAA,IAAI,EAAE,OAAO,UAAU,OAAArB,GAC9C,UAAAoB,EAAA,GADgBpB,CAEnB,CACD;AAAA,MAAA;AAAA,IACH;AAAA,IAECmE,EAAU,SACT,gBAAArH;AAAA,MAACwE;AAAA,MAAA;AAAA,QACC,IAAI;AAAA,UACF,sCAAsC,EAAE,IAAI,GAAG;AAAA,UAC/C,0BAA0B,EAAE,aAAa,eAAe;AAAA,UACxD,uBAAuB,EAAE,WAAW,IAAI,IAAI,GAAG;AAAA,QACjD;AAAA,QAEC,UAAU6C,EAAA,IAAI,CAAC,EAAE,OAAAnE,GAAO,cAAAwE,EAAa,MACnC,gBAAA1H,EAAA2E,IAAA,EAAS,SAAS,IAAyB,iBAAkB,gBAAA3E,EAAAC,GAAA,EAAM,aAAM,GACxE,UAAA,gBAAAD;AAAA,UAAC2H;AAAA,UAAA;AAAA,YACC,SAASD;AAAA,YACT,wBAAwB,EAAE,WAAW,SAAS;AAAA,UAAA;AAAA,QAAA,EAChD,GAJ4BA,CAK9B,CACD;AAAA,MAAA;AAAA,IAAA,IAID,gBAAA3H,EAAAkF,IAAA,EAAA,UAAA;AAAA,MAAC,gBAAAjF,EAAAC,GAAA,EAAK,IAAI,EAAE,OAAO,kBAAkB,GAAG,GAAG,WAAW,SAAa,GAAA,UAAAT,EAAK,WAAW,CAAA;AAAA,wBAClFsF,GAAQ,EAAA,IAAI,EAAE,aAAa,kBAAkB;AAAA,MAC9C,gBAAA9E;AAAA,QAACV;AAAA,QAAA;AAAA,UACC,IAAI;AAAA,YACF,oBAAoB,EAAE,OAAO8E,IAAgB,SAAS,IAAI;AAAA,UAC5D;AAAA,QAAA;AAAA,MACF;AAAA,IAAA,GACF;AAAA,EAEJ,EAAA,CAAA;AAEJ,GCvFMwD,KAAgD,CAAC,EAAE,MAAAC,GAAM,OAAAC,EAC7D,MAAA,gBAAA/H,EAACD,GAAM,EAAA,IAAI,EAAE,KAAK,GAAG,GAAG,MACtB,UAAA;AAAA,EAAA,gBAAAE,EAACC,GAAK,EAAA,MAAM,IAAM,SAAQ,QACvB,UACH6H,GAAA;AAAA,EACC,gBAAA9H,EAAA+H,IAAA,EAAE,SAAQ,kBAAkB,UAAKF,GAAA;AAAA,EACpC,CAAA,GAGIG,KAA0C,CAAC;AAAA,EAC/C,WAAAC,IAAY;AAAA,EACZ,mBAAAC;AAAA,EACA,oBAAAC;AACF,MACE,gBAAAnI;AAAA,EAACoI;AAAA,EAAA;AAAA,IACC,iBAAiB;AAAA,IACjB,WAAAH;AAAA,IACA,OAAQ,gBAAAjI,EAAA4H,IAAA,EAAe,MAAMM,GAAmB,OAAOC,GAAoB;AAAA,IAE3E,UAAA,gBAAAnI,EAACqI,MAAW,cAAYF,GAAoB,IAAI,EAAE,WAAW,GAAG,UAAU,GAAG,GAAG,EAC9E,GAAA,UAAA,gBAAAnI,EAACmG,KAAK,MAAK,QAAO,IAAI,EAAE,OAAO,YAAY,EAAA,CAAG,EAChD,CAAA;AAAA,EAAA;AACF,GC1BImC,KAAqB,MAAM;AACzB,QAAA;AAAA,IACJ,aAAa,EAAE,UAAU9I,EAAK;AAAA,MAC5BC,EAAmB,GACjB,EAAE,mBAAA8I,GAAmB,iBAAArB,GAAiB,cAAAC,GAAc,iBAAAC,EAAA,IAAoBvH,KAExE2I,IAAsB1B,GAAc,yCAAyC,GAC7E,EAAE,UAAA9C,MAAaC,KAGfwE,IADQ/C,KACO,QAAQ,SAAS,QAEhC,EAAE,eAAAgD,GAAe,SAAAC,GAAS,MAAAC,GAAM,aAAAC,MAAgBnE,EAAM,QAAQ,MAAM;AAClE,UAAAoE,IAAW3B,MAAiBM,EAAa,QAEzCkB,IACF,OAAO,OADKG,IACEtJ,EAAK,sBACLA,EAAK,kBADmB,GAEpCoJ,IACF,OAAO,OADEE,IACKtJ,EAAK,mBACLA,EAAK,eADgB;AAMhC,WAAA,EAAE,eAFawE,IAAW,KAAK,KAEd,SAAA2E,GAAS,MAAAC,GAAM,aAHA5E,IAAW,WAAW;EAI5D,GAAA,CAACxE,GAAMwE,GAAUmD,CAAY,CAAC;AAG/B,SAAA,gBAAApH;AAAA,IAACD;AAAA,IAAA;AAAA,MACC,IAAI;AAAA,QACF,eAAe,EAAE,IAAI,MAAM;AAAA,QAC3B,KAAKkE,IAAW,KAAK;AAAA,QACrB,gBAAgB;AAAA,QAChB,IAAI;AAAA,QACJ,IAAI;AAAA,MACN;AAAA,MAEA,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,GAAG;AAAA,YACf;AAAA,YAEA,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,kBACf;AAAA,kBAEA,UAAA;AAAA,oBAAA,gBAAAhE,EAAC+H,IAAE,EAAA,MAAM,IAAM,OAAM,kBAAiB,SAASc,GAC5C,UAAA1B,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,wBAClB;AAAA,wBAEC,UAAA2E,EAAQ,IAAI,CAACrE,MACZ,gBAAAtE;AAAA,0BAACC;AAAA,0BAAA;AAAA,4BAEC,IAAI;AAAA,8BACF,OAAO;AAAA,8BACP,IAAI;AAAA,8BACJ,IAAI+D,IAAW,IAAI;AAAA,4BACrB;AAAA,4BACA,SAAS6E;AAAA,4BAER,UAAAvE;AAAA,0BAAA;AAAA,0BARIA;AAAA,wBAAA,CAUR;AAAA,sBAAA;AAAA,oBACH;AAAA,kBAAA;AAAA,gBAAA;AAAA,cACF;AAAA,gCACCxE,GAAM,EAAA,IAAI,EAAE,KAAK,EAChB,GAAA,UAAA;AAAA,gBAAA,gBAAAC;AAAA,kBAACD;AAAA,kBAAA;AAAA,oBACC,IAAI;AAAA,sBACF,WAAW0I,IAAsB,UAAU;AAAA,sBAC3C,eAAe;AAAA,sBACf,KAAK;AAAA,sBACL,IAAI;AAAA,oBACN;AAAA,oBAEA,UAAA;AAAA,sBAAA,gBAAAxI,EAACC,GAAK,EAAA,MAAM,IAAO,UAAAT,EAAK,iBAAgB;AAAA,sBACxC,gBAAAQ;AAAA,wBAACgI;AAAA,wBAAA;AAAA,0BACC,mBAAmBxI,EAAK;AAAA,0BACxB,oBAAoBA,EAAK;AAAA,wBAAA;AAAA,sBAC3B;AAAA,oBAAA;AAAA,kBAAA;AAAA,gBACF;AAAA,gBACC+I,EAAkB,IAAI,CAACQ,GAAKC,GAAUxF,wBACpC1D,GAAqB,EAAA,IAAI,EAAE,eAAe,OAAO,KAAK,KACpD,YAAI,IAAI,CAACoD,GAAO+F,MAAa;AAC5B,wBAAMC,IAAaF,MAAa,GAC1BG,IAAYH,MAAaxF,EAAK,SAAS,GACvC4F,IAAaH,MAAa,GAC1BI,IAAYJ,MAAaF,EAAI,SAAS,GAEtCO,IAAS,OAAOpG,EAAM,QAAQ,KAAK,EAAE,CAAC,KAAK;AAEjD,sBAAIqG,IAAU,YACVtG,IAAQ;AAEZ,yBAAIwF,KACFc,IAAUD,IAAS,aAAa,YAChCrG,IAAQqG,IAAS,aAAa,mBAE9BC,IAAUD,IAAS,aAAa,YAChCrG,IAAQqG,IAAS,iBAAiB,aAUlC,gBAAAtJ;AAAA,oBAACF;AAAA,oBAAA;AAAA,sBAEC,IAAI;AAAA,wBACF,GAVe;AAAA,0BACnB,wBAAwBqJ,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,sBACT;AAAA,sBAEA,UAAA,gBAAA1I;AAAA,wBAACC;AAAA,wBAAA;AAAA,0BACC,IAAI;AAAA,4BACF,OAAAgD;AAAA,4BACA,YAAYe,IAAW,MAAM;AAAA,0BAC/B;AAAA,0BACA,SAASA,IAAW,SAAS;AAAA,0BAE5B,UAAAd;AAAA,wBAAA;AAAA,sBACH;AAAA,oBAAA;AAAA,oBAlBK+F;AAAA,kBAAA;AAAA,gBAmBP,CAEH,EAjDS,GAAAD,CAkDZ,CACD;AAAA,gBACA,gBAAAhJ,EAAAF,GAAA,EAAM,IAAI,EAAE,WAAW,UAAU,eAAe,OAAO,IAAI,GACzD,GAAA,UAAA8I,EAAK,IAAI,CAACtE,MACR,gBAAAtE,EAAAF,GAAA,EAAkB,IAAI,EAAE,YAAY,UAAU,OAAO4I,KACpD,UAAC,gBAAA1I,EAAAC,GAAA,EAAK,OAAM,kBAAiB,SAAS4I,GACnC,UAAAvE,EACH,CAAA,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,SAAS;AAAA,oBAC1E,SAAS6E;AAAA,oBAER,UAAiB1B,MAAAM,EAAa,SAASjI,EAAK,YAAYA,EAAK;AAAA,kBAAA;AAAA,gBAChE;AAAA,cAAA,GACF;AAAA,YAAA;AAAA,UAAA;AAAA,QACF;AAAA,QACA,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,YACd;AAAA,YACA,iBAAA4H;AAAA,UAAA;AAAA,QACF;AAAA,MAAA;AAAA,IAAA;AAAA,EAAA;AAGN,GAEeoC,KAAAxC,EAASsB,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,aAAa1K,EAAK,IAAIC,EAAmB,GAC3C,CAAC0K,GAAgBC,CAAiB,IAAI1F,EAAM,SAAkC,CAAA,CAAE,GAEhF2F,IACJ,CAACC,MAAsB,CAACC,GAA8BC,MAAwB;AAC5E,IAAAJ,EAAkB,CAACK,OAAgB;AAAA,MACjC,GAAGA;AAAA,MACH,CAACH,CAAS,GAAGE;AAAA,IACb,EAAA;AAAA,EAAA;AAIJ,SAAA,gBAAAzK;AAAA,IAAC2K;AAAA,IAAA;AAAA,MACC,gBAAgBlL,EAAK,SAAS;AAAA,MAC9B,QAAAyK;AAAA,MACA,SAAAC;AAAA,MACA,OAAO1K,EAAK,SAAS;AAAA,MAErB,UAAA;AAAA,QAAA,gBAAAO,EAACD,KAAM,IAAI,EAAE,KAAK,GAAG,GAAG,GACtB,GAAA,UAAA;AAAA,UAAA,gBAAAE;AAAA,YAAC2K;AAAA,YAAA;AAAA,cACC,KAAKjB,EAAoB,SAAS,mBAAmB;AAAA,cACrD,iBAAiBA,EAAoB,SAAS,oBAAoB;AAAA,cAClE,MAAM;AAAA,YAAA;AAAA,UACR;AAAA,UACA,gBAAA1J,EAACC,GAAK,EAAA,IAAI,EAAE,OAAO,eAAe,GAAG,SAAQ,SAC1C,UAAoByJ,EAAA,SAAS,WAChC,CAAA;AAAA,UACC,gBAAA1J,EAAAC,GAAA,EAAK,IAAI,EAAE,OAAO,eAAe,GAAG,SAAQ,MAC1C,UAAoByJ,EAAA,SAAS,aAAaA,EAAoB,SAAS,MAC1E;AAAA,UAEA,gBAAA3J,EAACD,GAAM,EAAA,IAAI,EAAE,YAAY,UAAU,eAAe,OAAO,gBAAgB,gBAAA,GACvE,UAAA;AAAA,YAAA,gBAAAE,EAACC,GAAK,EAAA,IAAI,EAAE,OAAO,gBAAgB,YAAY,IAAI,GAAG,SAAQ,QAC3D,UAAKT,EAAA,SAAS,iBACjB;AAAA,YAEC,gBAAAQ,EAAAC,GAAA,EAAK,IAAI,EAAE,OAAO,gBAAgB,YAAY,IAAI,GAAG,SAAQ,QAC3D,UAAAyJ,EAAoB,SAAS,SAAS,eAAe,SAAS;AAAA,cAC7D,UAAU;AAAA,cACV,uBAAuB;AAAA,cACvB,uBAAuB;AAAA,cACvB,OAAO;AAAA,YACR,CAAA,GACH;AAAA,UAAA,GACF;AAAA,QAAA,GACF;AAAA,QAEA,gBAAA3J;AAAA,UAACD;AAAAA,UAAA;AAAA,YACC,IAAI;AAAA,cACF,SAAS;AAAA,cACT,eAAe;AAAA,cACf,gBAAgB;AAAA,cAChB,IAAI;AAAA,cACJ,IAAI;AAAA,YACN;AAAA,YAEA,UAAA;AAAA,cAAA,gBAAAE,EAACC,GAAK,EAAA,IAAI,EAAE,OAAO,gBAAgB,YAAY,IAAI,GAAG,SAAQ,UAC3D,UAAKT,EAAA,SAAS,SACjB;AAAA,cACC,gBAAAQ,EAAAC,GAAA,EAAK,IAAI,EAAE,OAAO,gBAAgB,YAAY,IAAA,GAAO,SAAQ,UAC3D,UAAAT,EAAK,SAAS,cACjB;AAAA,YAAA;AAAA,UAAA;AAAA,QACF;AAAA,QACCkK,EAAoB,UAAU,IAAI,CAACzI,GAAS0B,MAAU;AAC/C,gBAAAiI,IAAqBhB,MAAqB3I,EAAQ;AAEtD,iBAAA,gBAAAlB;AAAA,YAAC8K;AAAA,YAAA;AAAA,cACC,gBAAgB;AAAA,cAChB,UAAUV,EAAelJ,EAAQ,EAAE,MAAM;AAAA,cAEzC,UAAUA,IAAUoJ,EAAsBpJ,GAAS,EAAE,IAAI,MAAM;AAAA,cAAC;AAAA,cAChE,IAAI;AAAA,gBACF,WAAW0B,MAAU,IAAI,EAAE,SAAS,MAAM,CAAC;AAAA,gBAC3C,6BAA6B,EAAE,GAAG,EAAE;AAAA,cACtC;AAAA,cAEA,UAAA;AAAA,gBAAA,gBAAA3C;AAAA,kBAAC8K;AAAA,kBAAA;AAAA,oBACC,iBAAc;AAAA,oBACd,IAAG;AAAA,oBACH,IAAI;AAAA,sBACF,EAAE,QAAQ,GAAG;AAAA,sBACbX,EAAelJ,EAAQ,EAAE,KACvB0B,IAAQ,KAAK;AAAA,wBACX,WAAW;AAAA,wBACX,aAAa;AAAA,sBACf;AAAA,oBACJ;AAAA,oBAEA,UAAA,gBAAA5C,EAACD,KAAM,IAAI,EAAE,eAAe,OAAO,OAAO,OACxC,GAAA,UAAA;AAAA,sBAAA,gBAAAE,EAAC,OAAI,EAAA,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,4BACT;AAAA,4BACAqK,EAAelJ,EAAQ,EAAE,KAAK;AAAA,8BAC5B,cAAc;AAAA,8BACd,aAAa;AAAA,4BACf;AAAA,0BACF;AAAA,0BAEA,UAAA;AAAA,4BAAA,gBAAAjB;AAAA,8BAACF;AAAAA,8BAAA;AAAA,gCACC,IAAI;AAAA,kCACF,YAAY;AAAA,kCACZ,eAAe;AAAA,kCACf,KAAK;AAAA,gCACP;AAAA,gCAEA,UAAA,gBAAAC,EAACD,KAAM,IAAI,EAAE,UAAU,UAAU,OAAO,GACtC,GAAA,UAAA;AAAA,kCAAC,gBAAAE,EAAAC,GAAA,EAAK,IAAI,EAAE,YAAY,OAAO,SAAQ,QACpC,UAAAgB,EAAQ,QACX,CAAA;AAAA,kCACC,gBAAAjB,EAAAC,GAAA,EAAK,SAAQ,UAAU,YAAQ,aAAY;AAAA,gCAAA,GAC9C;AAAA,8BAAA;AAAA,4BACF;AAAA,4BAEA,gBAAAF;AAAA,8BAACD;AAAAA,8BAAA;AAAA,gCACC,IAAI;AAAA,kCACF,YAAY;AAAA,kCACZ,MAAM;AAAA,kCACN,eAAe;AAAA,kCACf,KAAK;AAAA,kCACL,gBAAgB;AAAA,gCAClB;AAAA,gCAEA,UAAA;AAAA,kCAAA,gBAAAC,EAACD,GACC,EAAA,UAAA;AAAA,oCAAA,gBAAAE,EAACC,GAAK,EAAA,IAAI,EAAE,YAAY,KAAK,WAAW,QAAQ,GAAG,SAAS,QACzD,UAAQgB,EAAA,aAAa,eAAe,SAAS;AAAA,sCAC5C,UAAU;AAAA,sCACV,uBAAuB;AAAA,sCACvB,uBAAuB;AAAA,sCACvB,OAAO;AAAA,oCACR,CAAA,GACH;AAAA,oCACA,gBAAAlB,EAACD,GAAM,EAAA,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,0CACvD;AAAA,wCAAA;AAAA,sCACF;AAAA,sCAEF,gBAAAjB;AAAA,wCAACC;AAAA,wCAAA;AAAA,0CACC,IAAI;AAAA,4CACF,OAAOgB,EAAQ,iBAAiB,IAAI,aAAa;AAAA,4CACjD,YAAYA,EAAQ,iBAAiB,IAAI,MAAM;AAAA,0CACjD;AAAA,0CACA,SAAQ;AAAA,0CAEP,UAAAA,EAAQ,YACL,IAAKA,EAAQ,gBAAgBA,EAAQ,YAAa,KAAK,QAAQ,CAAC,CAAC,MACjE;AAAA,wCAAA;AAAA,sCACN;AAAA,sCACA,gBAAAjB,EAACC,KAAK,IAAI,EAAE,OAAO,WAAW,GAAG,SAAQ,UAAS,UAElD,IAAA,CAAA;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,0CACjD;AAAA,0CACA,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,sCACH;AAAA,oCAAA,GACF;AAAA,kCAAA,GACF;AAAA,kCAEA,gBAAAjB;AAAA,oCAACmG;AAAA,oCAAA;AAAA,sCACC,MAAMgE,EAAelJ,EAAQ,EAAE,IAAI,gBAAgB;AAAA,sCACnD,MAAM;AAAA,oCAAA;AAAA,kCACR;AAAA,gCAAA;AAAA,8BAAA;AAAA,4BACF;AAAA,0BAAA;AAAA,wBAAA;AAAA,sBACF;AAAA,oBAAA,GACF;AAAA,kBAAA;AAAA,gBACF;AAAA,kCACC8J,IACC,EAAA,UAAA,gBAAAhL;AAAA,kBAACD;AAAAA,kBAAA;AAAA,oBACC,IAAI;AAAA,sBACF,YAAY;AAAA,sBACZ,SAAS;AAAA,sBACT,eAAe;AAAA,sBACf,IAAI;AAAA,oBACN;AAAA,oBAEA,UAAA;AAAA,sBAAA,gBAAAE,EAACF,GAAM,EAAA,IAAI,EAAE,OAAO,MAAM;AAAA,wCACzBA,GAAM,EAAA,IAAI,EAAE,MAAM,EACjB,GAAA,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,4BACN;AAAA,4BAEA,UAAA;AAAA,8BAAC,gBAAAE,EAAAC,GAAA,EAAK,IAAI,EAAE,OAAO,eAAA,GAAkB,SAAQ,QAC1C,UAAKT,EAAA,SAAS,SACjB,CAAA;AAAA,8BACA,gBAAAQ,EAACC,GAAK,EAAA,IAAI,EAAE,OAAO,kBAAkB,SAAQ,SAC1C,UAAAgB,EAAQ,IACX,CAAA;AAAA,4BAAA;AAAA,0BAAA;AAAA,wBACF;AAAA,wBACA,gBAAAlB;AAAA,0BAACD;AAAAA,0BAAA;AAAA,4BACC,IAAI;AAAA,8BACF,YAAY;AAAA,8BACZ,eAAe;AAAA,8BACf,QAAQ;AAAA,8BACR,gBAAgB;AAAA,8BAChB,IAAI;AAAA,4BACN;AAAA,4BAEA,UAAA;AAAA,8BAAC,gBAAAE,EAAAC,GAAA,EAAK,IAAI,EAAE,OAAO,eAAA,GAAkB,SAAQ,QAC1C,UAAKT,EAAA,SAAS,kBACjB,CAAA;AAAA,8BAEA,gBAAAO;AAAA,gCAACD;AAAAA,gCAAA;AAAA,kCACC,WAAU;AAAA,kCACV,IAAI;AAAA,oCACF,YAAY;AAAA,oCACZ,KAAK;AAAA,kCACP;AAAA,kCAEC,UAAA;AAAA,oCACC8K,IAAA,gBAAA5K;AAAA,sCAACgL;AAAA,sCAAA;AAAA,wCACC,WAAW;AAAA,wCACX,QAAQ,MAAMnB,EAAoB5I,EAAQ,EAAE;AAAA,wCAC5C,UAAU8I;AAAA,wCACV,WAAW,CAACkB,MACVjB,EAAuBiB,GAAGhK,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,0CACT;AAAA,0CACA,sCAAsC;AAAA,4CACpC,QAAQ;AAAA,0CACV;AAAA,wCACF;AAAA,wCACA,OAAO0I;AAAA,sCAAA;AAAA,oCAAA,IAGT,gBAAA3J,EAACC,GAAK,EAAA,IAAI,EAAE,UAAU,IAAI,OAAO,GAAA,GAAM,SAAQ,SAC5C,UAAQgB,EAAA,WAAW,eAAe,SAAS;AAAA,sCAC1C,UAAU;AAAA,sCACV,uBAAuB;AAAA,sCACvB,uBAAuB;AAAA,sCACvB,OAAO;AAAA,oCACR,CAAA,GACH;AAAA,oCAGF,gBAAAjB;AAAA,sCAACqI;AAAA,sCAAA;AAAA,wCACC,SAAS,MAAMyB,EAAqB7I,EAAQ,IAAIA,EAAQ,SAAS;AAAA,wCACjE,IAAI,EAAE,UAAU,IAAI,WAAW,GAAG;AAAA,wCAElC,UAAA,gBAAAjB,EAACmG,GAAK,EAAA,MAAM,UAAU,MAAM,IAAI,IAAI,EAAE,OAAO,WAAc,EAAA,CAAA;AAAA,sCAAA;AAAA,oCAC7D;AAAA,kCAAA;AAAA,gCAAA;AAAA,8BACF;AAAA,4BAAA;AAAA,0BAAA;AAAA,wBACF;AAAA,sBAAA,GACF;AAAA,oBAAA;AAAA,kBAAA;AAAA,gBAAA,GAEJ;AAAA,cAAA;AAAA,YAAA;AAAA,YAvNKlF,EAAQ;AAAA,UAAA;AAAA,QAwNf,CAEH;AAAA,MAAA;AAAA,IAAA;AAAA,EAAA;AAGP,GAEeiK,KAAAlE,EAASyC,EAAuB,GCrVlC0B,IAAa,CAACC,MACzB,gBAAArL,EAACD,IAAM,EAAA,IAAI,EAAE,YAAY,UAAU,eAAe,OAAO,KAAK,KAC5D,UAAA;AAAA,EAAA,gBAAAE,EAACC,GAAK,EAAA,IAAI,EAAE,OAAO,gBAAgB,YAAY,KAAK,UAAU,GAAA,GAAM,SAAQ,SACzE,UAAAmL,EAAO,OAAO,YACjB;AAAA,EACC,gBAAApL,EAAAmG,GAAA,EAAK,MAAM,cAAc,MAAM,IAAI;AAAA,GACtC,GC0BIkF,KAA8C,CAAC;AAAA,EACnD,MAAA7H;AAAA,EACA,kBAAAoG;AAAA,EACA,wBAAAD;AAAA,EACA,sBAAAG;AAAA,EACA,uBAAAC;AAAA,EACA,wBAAAC;AAAA,EACA,qBAAAH;AACF,MAAM;AACJ,QAAM,EAAE,aAAarK,EAAK,IAAIC,EAAmB,GAG3CkG,IAFQD,KAEW,QAAQ,SAAS,QACpCG,IAAmB,gBACnBC,IAAmBH,IAAa,aAAa,YAE7CK,IAAuB,CAAC9C,GAAeoI,IAAe,iBACtDA,MAAS,gBACJpI,KAAS,IAAI2C,IAAmBC,IAElC5C,KAAS,IAAI4C,IAAmBD,GAGnC8C,IAAwB;AAAA,IAC5B;AAAA,MACE,OAAO;AAAA,MACP,YAAYnJ,EAAK,SAAS;AAAA,MAC1B,UAAU;AAAA,MACV,OAAO;AAAA,MACP,OAAO;AAAA,MACP,aAAa;AAAA,IACf;AAAA,IACA;AAAA,MACE,OAAO;AAAA,MACP,YAAYA,EAAK,SAAS;AAAA,MAC1B,MAAM;AAAA,MACN,cAAc2L;AAAA,MACd,YAAY,CAACC,MACX,gBAAApL,EAACF,KAAM,IAAI,EAAE,YAAY,UAAU,KAAK,IAAI,eAAe,MAAM,GAC/D,4BAACA,GAEC,EAAA,UAAA;AAAA,QAAC,gBAAAE,EAAAC,GAAA,EAAK,IAAI,EAAE,YAAY,IAAQ,GAAA,UAAAmL,EAAO,IAAI,QAAQ,CAAA;AAAA,QAClD,gBAAApL,EAAAC,GAAA,EAAK,IAAI,EAAE,OAAO,kBAAkB,YAAY,IAAA,GAAO,SAAQ,QAC7D,UAAAmL,EAAO,IAAI,aACd;AAAA,MAAA,EAAA,CACF,EACF,CAAA;AAAA,IAEJ;AAAA,IACA;AAAA,MACE,OAAO;AAAA,MACP,YAAY5L,EAAK,SAAS;AAAA,MAC1B,OAAO;AAAA,MACP,cAAc2L;AAAA,MACd,YAAY,CAACC,MAAW;AAChB,cAAAR,IAAqBhB,MAAqBwB,EAAO,IAAI;AAEzD,eAAA,gBAAArL,EAACD,GAAM,EAAA,IAAI,EAAE,YAAY,UAAU,eAAe,OAAO,KAAK,EAAA,GAC3D,UAAA;AAAA,UACC8K,IAAA,gBAAA5K;AAAA,YAACgL;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,gBACT;AAAA,gBACA,sCAAsC;AAAA,kBACpC,QAAQ;AAAA,gBACV;AAAA,cACF;AAAA,cACA,OAAOzB;AAAA,YAAA;AAAA,UAAA,IAGT,gBAAA3J,EAACC,GAAK,EAAA,IAAI,EAAE,UAAU,IAAI,OAAO,GAAA,GAAM,SAAQ,SAC5C,UAAOmL,EAAA,OAAO,eAAe,SAAS;AAAA,YACrC,UAAU;AAAA,YACV,uBAAuB;AAAA,YACvB,uBAAuB;AAAA,YACvB,OAAO;AAAA,UACR,CAAA,GACH;AAAA,UAEF,gBAAApL;AAAA,YAACqI;AAAA,YAAA;AAAA,cACC,SAAS,MAAMyB,EAAqBsB,EAAO,IAAI,IAAIA,EAAO,IAAI,SAAS;AAAA,cACvE,IAAI,EAAE,UAAU,IAAI,WAAW,GAAG;AAAA,cAElC,UAAA,gBAAApL,EAACmG,GAAK,EAAA,MAAM,UAAU,MAAM,IAAI,IAAI,EAAE,OAAO,WAAc,EAAA,CAAA;AAAA,YAAA;AAAA,UAC7D;AAAA,QACF,EAAA,CAAA;AAAA,MAEJ;AAAA,MACA,OAAO;AAAA,MACP,aAAa;AAAA,IACf;AAAA,IACA;AAAA,MACE,OAAO;AAAA,MACP,YAAY3G,EAAK,SAAS;AAAA,MAC1B,OAAO;AAAA,MACP,cAAc2L;AAAA,MACd,YAAY,CAACC,MAAW;AAChB,cAAAG,IAAYH,EAAO,IAAI,WACvBI,IAAqBD,IAAaH,EAAO,IAAI,gBAAgBG,IAAa,MAAM;AAEpF,eAAA,gBAAAxL,EAACD,GAAM,EAAA,IAAI,EAAE,YAAY,UAAU,eAAe,OAAO,KAAK,EAAA,GAC3D,UAAA;AAAA,UAAAsL,EAAO,UAAU,KAChB,gBAAApL;AAAA,YAACmG;AAAA,YAAA;AAAA,cACC,MAAMiF,EAAO,QAAQ,IAAI,gBAAgB;AAAA,cACzC,MAAM;AAAA,cACN,IAAI;AAAA,gBACF,OAAOpF,EAAqBoF,EAAO,KAAK;AAAA,gBACxC,IAAI;AAAA,gBACJ,eAAe;AAAA,cACjB;AAAA,YAAA;AAAA,UACF;AAAA,UAEF,gBAAApL;AAAA,YAACC;AAAA,YAAA;AAAA,cACC,IAAI;AAAA,gBACF,OAAO+F,EAAqBoF,EAAO,KAAK;AAAA,gBACxC,YAAYA,EAAO,QAAQ,IAAI,MAAM;AAAA,cACvC;AAAA,cACA,SAAQ;AAAA,cAEP,cAAY,GAAGI,EAAmB,QAAQ,CAAC,CAAC,MAAM;AAAA,YAAA;AAAA,UACrD;AAAA,UACA,gBAAAxL,EAACC,KAAK,IAAI,EAAE,OAAO,iBAAiB,GAAG,SAAQ,UAAS,UAExD,IAAA,CAAA;AAAA,UACA,gBAAAD;AAAA,YAACC;AAAA,YAAA;AAAA,cACC,IAAI;AAAA,gBACF,OAAO+F,EAAqBoF,EAAO,KAAK;AAAA,gBACxC,YAAYA,EAAO,QAAQ,IAAI,MAAM;AAAA,cACvC;AAAA,cACA,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,UACH;AAAA,QACF,EAAA,CAAA;AAAA,MAEJ;AAAA,MACA,OAAO;AAAA,MACP,aAAa;AAAA,MACb,UAAU;AAAA,IACZ;AAAA,IACA;AAAA,MACE,OAAO;AAAA,MACP,YAAY5L,EAAK,SAAS;AAAA,MAC1B,OAAO;AAAA,MACP,cAAc2L;AAAA,MACd,YAAY,CAACC,MACX,gBAAApL,EAACC,KAAK,IAAI,EAAE,YAAY,IAAA,GAAO,SAAS,SACrC,UAAOmL,EAAA,OAAO,eAAe,SAAS;AAAA,QACrC,UAAU;AAAA,QACV,uBAAuB;AAAA,QACvB,uBAAuB;AAAA,QACvB,OAAO;AAAA,MACR,CAAA,GACH;AAAA,MAEF,OAAO;AAAA,MACP,aAAa;AAAA,IACf;AAAA,EAAA;AAIA,SAAA,gBAAApL;AAAA,IAACyL;AAAA,IAAA;AAAA,MACC,IAAI;AAAA,QACF,WAAW;AAAA,QACX,OAAO;AAAA,MACT;AAAA,MAEA,UAAA,gBAAAzL;AAAA,QAAC0L;AAAA,QAAA;AAAA,UACC,SAAA/C;AAAA,UACA,qBAAqB;AAAA,UACrB,mBAAmB;AAAA,UACnB,4BAA4B;AAAA,UAC5B,YAAY;AAAA,UACZ,MAAMnF;AAAA,UACN,WAAW,EAAE,gBAAgB,EAAE,IAAI,EAAE,SAAS,OAAO,IAAI;AAAA,QAAA;AAAA,MAC3D;AAAA,IAAA;AAAA,EAAA;AAGN,GCtMMmI,KAAW,MAAM;AACf,QAAA,EAAE,UAAA3H,MAAaC,KACf,CAACkG,GAAgBC,CAAiB,IAAIwB,EAAkC,CAAE,CAAA,GAC1E,CAACC,GAAYC,CAAa,IAAIF,EAAS,EAAK,GAC5C,EAAE,sBAAApF,MAAyBC,KAC3B,EAAE,iBAAiB5F,GAAU,gBAAAkL,MAAmBlM,EAAgB,GAChE,CAACmM,GAAuBpM,CAAwB,IAAI8E,EAAM,SAAS,EAAK,GAExE,CAACgF,GAAqBuC,CAAsB,IAAIL,EAGnD;AAAA,IACD,UAAU,CAAC;AAAA,IACX,UAAU,CAAC;AAAA,EAAA,CACZ,GACK,EAAE,UAAUM,GAAc,aAAa1M,EAAA,IAASC,KAChD,EAAE,cAAA0M,MAAiB1F,KACnB,CAACmD,GAAkBwC,CAAmB,IAAIR,EAAwB,IAAI,GACtE,CAACjC,GAAwB0C,CAAyB,IAAIT,EAAiB,EAAE,GAIzEjG,IAFQD,KAEW,QAAQ,SAAS,QAEpCG,IAAmBF,IAAa,YAAY,WAE5CG,IAAmBH,IAAa,aAAa,YAE7CK,IAAuB,CAAC9C,GAAeoI,IAAe,iBACtDA,MAAS,gBACJpI,KAAS,IAAI2C,IAAmBC,IAElC5C,KAAS,IAAI4C,IAAmBD,GAGnCiE,IAAuB,CAACQ,GAAmBgC,MAA6B;AAC5E,IAAAF,EAAoB9B,CAAS,GACH+B,EAAAC,EAAiB,QAAQ,CAAC,CAAC;AAAA,EAAA,GAGjDvC,IAAwB,CAACwC,MAA+C;AAEtE,UAAArJ,IAAQqJ,EAAM,OAAO;AACvB,IAAA,cAAc,KAAKrJ,CAAK,KAC1BmJ,EAA0BnJ,CAAK;AAAA,EACjC,GAGI8G,KAAyB,CAACuC,GAA8ChG,MAAe;AACvF,IAAAgG,EAAM,QAAQ,UAChB1C,EAAoBtD,CAAE,IACbgG,EAAM,QAAQ,YACvBH,EAAoB,IAAI;AAAA,EAC1B,GAGIvC,IAAsB,CAACtD,MAAe;AACpC,UAAAtF,IAAUJ,EAAS,KAAK,CAAC,EAAE,MAAAkB,QAAWA,MAASwE,CAAE;AACvD,QAAI,CAACtF,EAAS;AAER,UAAAuL,IAAmB,OAAO7C,CAAsB;AAGtD,QAFAoC,EAAe,EAAE,GAAG9K,GAAS,YAAYuL,EAAkB,CAAA,GAEvDxI,GAAU;AACNhC,YAAAA,IAAkB0H,EAAoB,SAAS;AAAA,QAAI,CAAC+C,MACxDA,EAAE,OAAOlG,IAAK,EAAE,GAAGkG,GAAG,WAAWD,EAAA,IAAqBC;AAAA,MAAA;AAGxD,MAAAR,EAAuB,CAACS,OAAU;AAAA,QAChC,GAAGA;AAAA,QACH,UAAU1K;AAAAA,MACV,EAAA;AAAA,IACJ;AAEA,IAAAoK,EAAoB,IAAI;AAAA,EAAA,GAGpB/B,KACJ,CAACsC,MAAsB,CAACpC,GAA8BC,MAAwB;AAC5E,IAAAJ,EAAkB,CAACK,OAAgB;AAAA,MACjC,GAAGA;AAAA,MACH,CAACkC,CAAS,GAAGnC;AAAA,IACb,EAAA;AAAA,EAAA,GAGA,EAAE,iBAAiB9D,GAAY,IAAI7G,EAAgB,GACnD,EAAE,2BAAA+M,OAA8BjG,MAEhCjF,IAAWkL,GAA0B;AAAA,IAAO,CAAC,EAAE,MAAA7K,EACnD,MAAAyE,EAAqB,SAASzE,CAAI;AAAA,EAAA,GAG9B8K,KAAsBnL,EAAS,OAAO,CAACW,GAAKC,MAAYD,KAAOC,EAAQ,WAAW,IAAI,CAAC,GAEvFR,KAAeJ,EAAS,IAAI,CAAC,EAAE,MAAAK,EAAA,MAAWA,CAAI,GAM9C+K,IAJkBpG,GAAY;AAAA,IAAO,CAAC,EAAE,cAAAzE,EAC5C,MAAAH,GAAa,SAASG,CAAY;AAAA,EAAA,EAGH,OAAO,CAACI,GAAKpB,MAAY;AACxD,UAAM8L,IAAK9L,EAAQ,eAAeA,EAAQ,gBAAgBA,EAAQ,cAAc,KAAK;AACrF,WAAOoB,IAAM0K;AAAA,KACZ,CAAC,GAEEC,KAAc,MAAM;AACxB,IAAAlB,EAAc,EAAK;AAAA,EAAA;AAGrB,SAAKK,IAKF,gBAAApM,EAAAD,GAAA,EAAM,IAAI,EAAE,YAAY,UAAU,KAAK,IAAI,IAAI,IAAI,OAAO,OAAA,GAExD,UAAA;AAAA,IAAC,CAAA,CAAC4B,EAAS,UACV,gBAAA3B,EAACD,KAAM,IAAI,EAAE,YAAY,SACvB,GAAA,UAAA;AAAA,MAAC,gBAAAE,EAAAC,GAAA,EAAK,IAAI,EAAE,OAAO,iBAAqB,GAAA,UAAAT,EAAK,SAAS,gBAAgB,CAAA;AAAA,MACrE,gBAAAQ,EAAAkG,IAAA,EACE,UAAoB2G,GAAA,eAAe,SAAS;AAAA,QAC3C,UAAU;AAAA,QACV,uBAAuB;AAAA,QACvB,uBAAuB;AAAA,QACvB,OAAO;AAAA,MACR,CAAA,GACH;AAAA,MACA,gBAAA9M,EAACD,GAAM,EAAA,IAAI,EAAE,YAAY,UAAU,eAAe,OAAO,KAAK,EAAA,GAC5D,UAAA;AAAA,QAAA,gBAAAE;AAAA,UAACmG;AAAA,UAAA;AAAA,YACC,MAAM2G,KAAY,IAAI,gBAAgB;AAAA,YACtC,MAAM;AAAA,YACN,IAAI,EAAE,OAAO9G,EAAqB8G,GAAU,aAAa,EAAE;AAAA,UAAA;AAAA,QAC7D;AAAA,QACA,gBAAA9M;AAAA,UAACC;AAAA,UAAA;AAAA,YACC,IAAI,EAAE,OAAO+F,EAAqB8G,GAAU,aAAa,GAAG,YAAY,IAAI;AAAA,YAC5E,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,QACH;AAAA,MAAA,GACF;AAAA,IAAA,GACF;AAAA,IAGDpL,EAAS,IAAI,CAACY,MAAY;AACzB,YAAM2K,IAAmCvG,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,MACpC,EAAA,GAEEiM,IAAkBD,EAAgB,SAAS,GAE3CE,IAAoB7K,EAAQ,SAC5B8K,IAAkBH,EAAgB;AAAA,QACtC,CAAC5K,GAAKpB,OAAYA,GAAQ,gBAAgBoB;AAAA,QAC1C;AAAA,MAAA,GAGIgL,KAA4BF,IAC7BC,IAAkBD,IAAqB,MACxC;AAGJ,UAAInJ;AAEA,eAAA,gBAAAhE;AAAA,UAACyL;AAAA,UAAA;AAAA,YAEC,SACEwB,EAAgB,SACZ,MAAM;AACJ,cAAAnB,EAAc,EAAI,GACKG,EAAA;AAAA,gBACrB,UAAUgB;AAAA,gBACV,UAAU3K;AAAA,cAAA,CACX;AAAA,YAEH,IAAA;AAAA,YAEN,IAAI;AAAA,cACF,OAAO;AAAA,cACP,UAAU;AAAA,YACZ;AAAA,YAEA,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,gBACN;AAAA,gBAEA,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,sBACN;AAAA,sBAEA,UAAA;AAAA,wBAAA,gBAAAE;AAAA,0BAAC2K;AAAA,0BAAA;AAAA,4BACC,KAAKrI,EAAQ,mBAAmB;AAAA,4BAChC,iBAAiBA,EAAQ,oBAAoB;AAAA,4BAC7C,MAAM;AAAA,0BAAA;AAAA,wBACR;AAAA,wBACA,gBAAAvC,EAACD,GAAM,EAAA,IAAI,EAAE,UAAU,UAAU,IAAI,IAAI,IAAI,GAAA,GAC3C,UAAA;AAAA,0BAAC,gBAAAE,EAAAC,GAAA,EAAK,IAAI,EAAE,OAAO,oBAAoB,SAAQ,UAC5C,UAAAqC,EAAQ,WACX,CAAA;AAAA,0BACC,gBAAAtC,EAAAC,GAAA,EAAK,IAAI,EAAE,OAAO,gBAAgB,YAAY,IAAI,GAAG,SAAQ,QAC3D,UAAQqC,EAAA,aAAaA,EAAQ,MAChC;AAAA,wBAAA,GACF;AAAA,sBAAA;AAAA,oBAAA;AAAA,kBACF;AAAA,kBAEA,gBAAAvC;AAAA,oBAACD;AAAAA,oBAAA;AAAA,sBACC,IAAI;AAAA,wBACF,YAAY;AAAA,wBACZ,eAAe;AAAA,wBACf,gBAAgB;AAAA,wBAChB,IAAI;AAAA,wBACJ,IAAI;AAAA,sBACN;AAAA,sBAEA,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,4BACN;AAAA,4BAEA,UAAA;AAAA,8BAAA,gBAAAE,EAACC,GAAK,EAAA,IAAI,EAAE,OAAO,kBAAkB,UAAU,GAAG,GAAG,SAAQ,SAC1D,UAAKT,EAAA,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,kCAClB;AAAA,kCAEC,UAAA;AAAA,oCAAAsN,MAAoB,KACnB,gBAAApN;AAAA,sCAACmG;AAAA,sCAAA;AAAA,wCACC,MAAMiH,IAAkB,IAAI,gBAAgB;AAAA,wCAC5C,MAAM;AAAA,wCACN,IAAI,EAAE,OAAOpH,EAAqBoH,CAAe,EAAE;AAAA,sCAAA;AAAA,oCACrD;AAAA,oCAEF,gBAAArN;AAAA,sCAACE;AAAA,sCAAA;AAAA,wCACC,IAAI;AAAA,0CACF,OAAO+F,EAAqBoH,CAAe;AAAA,0CAC3C,YAAY;AAAA,wCACd;AAAA,wCACA,SAAQ;AAAA,wCAEP,UAAA;AAAA,0CAAAC,GAA0B,QAAQ,CAAC;AAAA,0CAAE;AAAA,wCAAA;AAAA,sCAAA;AAAA,oCACxC;AAAA,oCACA,gBAAArN,EAACC,KAAK,IAAI,EAAE,OAAO,iBAAiB,GAAG,SAAQ,UAAS,UAExD,IAAA,CAAA;AAAA,oCACA,gBAAAD;AAAA,sCAACC;AAAA,sCAAA;AAAA,wCACC,IAAI;AAAA,0CACF,OAAO+F,EAAqBoH,CAAe;AAAA,0CAC3C,YAAY;AAAA,wCACd;AAAA,wCACA,SAAQ;AAAA,wCAEP,UAAK,KAAA,IAAIA,CAAe,EAAE,eAAe,SAAS;AAAA,0CACjD,UAAU;AAAA,0CACV,uBAAuB;AAAA,0CACvB,uBAAuB;AAAA,0CACvB,OAAO;AAAA,wCAAA,CACR;AAAA,sCAAA;AAAA,oCACH;AAAA,kCAAA;AAAA,gCAAA;AAAA,8BACF;AAAA,4BAAA;AAAA,0BAAA;AAAA,wBACF;AAAA,wBAEA,gBAAArN;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,4BACN;AAAA,4BAEA,UAAA;AAAA,8BAAC,gBAAAE,EAAAC,GAAA,EAAK,IAAI,EAAE,OAAO,iBAAA,GAAoB,SAAQ,UAC5C,UAAKT,EAAA,SAAS,YACjB,CAAA;AAAA,8BACC,gBAAAQ,EAAAC,GAAA,EAAK,IAAI,EAAE,OAAO,gBAAgB,YAAY,IAAA,GAAO,SAAQ,QAC3D,UAAAkN,GAAmB,eAAe,SAAS;AAAA,gCAC1C,UAAU;AAAA,gCACV,uBAAuB;AAAA,gCACvB,uBAAuB;AAAA,gCACvB,OAAO;AAAA,8BACR,CAAA,GACH;AAAA,4BAAA;AAAA,0BAAA;AAAA,wBACF;AAAA,sBAAA;AAAA,oBAAA;AAAA,kBACF;AAAA,gBAAA;AAAA,cAAA;AAAA,YACF;AAAA,UAAA;AAAA,UAnJK7K,EAAQ;AAAA,QAAA;AAwJb,YAAAgL,KAAgB3H,IAAa,aAAa,YAC1C4H,KAAYN,EAAgB,SAAS,iBAAiBK;AAG1D,aAAA,gBAAAvN;AAAA,QAAC8K;AAAA,QAAA;AAAA,UACC,UAAUV,EAAe7H,EAAQ,IAAI,MAAM;AAAA,UAE3C,UAAU4K,IAAkB7C,GAAsB/H,EAAQ,IAAI,IAAI,MAAM;AAAA,UAAC;AAAA,UACzE,IAAI;AAAA,YACF,QAAQ;AAAA,YACR,aAAa;AAAA,YACb,cAAc;AAAA,YACd,OAAO;AAAA,UACT;AAAA,UAEA,UAAA;AAAA,YAAA,gBAAAvC;AAAA,cAAC+K;AAAA,cAAA;AAAA,gBACC,iBAAc;AAAA,gBACd,IAAG;AAAA,gBACH,IAAI;AAAA,kBACFX,EAAe7H,EAAQ,IAAI,KAAK;AAAA,oBAC9B,cAAc;AAAA,oBACd,aAAa;AAAA,oBACb,WAAW;AAAA,kBACb;AAAA,gBACF;AAAA,gBAEA,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,sBACT;AAAA,sBAEA,UAAA;AAAA,wBAAC,gBAAAE,EAAAmG,GAAA,EAAK,MAAM,eAAe,MAAM,IAAI,IAAI,EAAE,OAAOoH,GAAa,EAAA,CAAA;AAAA,wBAC/D,gBAAAvN;AAAA,0BAAC2K;AAAA,0BAAA;AAAA,4BACC,KAAKrI,EAAQ,mBAAmB;AAAA,4BAChC,iBAAiBA,EAAQ,oBAAoB;AAAA,4BAC7C,MAAM;AAAA,0BAAA;AAAA,wBACR;AAAA,0CAECxC,GAAM,EAAA,IAAI,EAAE,YAAY,aACvB,GAAA,UAAA;AAAA,0BAAC,gBAAAE,EAAAC,GAAA,EAAK,IAAI,EAAE,OAAO,oBAAoB,SAAQ,UAC5C,UAAAqC,EAAQ,WACX,CAAA;AAAA,0BACC,gBAAAtC,EAAAC,GAAA,EAAK,IAAI,EAAE,OAAO,gBAAgB,YAAY,IAAI,GAAG,SAAQ,QAC3D,UAAQqC,EAAA,aAAaA,EAAQ,MAChC;AAAA,wBAAA,GACF;AAAA,sBAAA;AAAA,oBAAA;AAAA,kBACF;AAAA,oCAECxC,GAAM,EAAA,IAAI,EAAE,eAAe,MAC1B,GAAA,UAAA;AAAA,oBAAA,gBAAAC,EAACD,GAAM,EAAA,IAAI,EAAE,YAAY,YAAY,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,GAC/D,GAAA,UAAA;AAAA,sBAAC,gBAAAE,EAAAC,GAAA,EAAK,IAAI,EAAE,OAAO,iBAAA,GAAoB,SAAQ,UAC5C,UAAKT,EAAA,SAAS,gBACjB,CAAA;AAAA,sBAEA,gBAAAO;AAAA,wBAACD;AAAAA,wBAAA;AAAA,0BACC,IAAI;AAAA,4BACF,YAAY;AAAA,4BACZ,eAAe;AAAA,4BACf,KAAK;AAAA,4BACL,gBAAgB;AAAA,0BAClB;AAAA,0BAEC,UAAA;AAAA,4BAAAsN,MAAoB,KACnB,gBAAApN;AAAA,8BAACmG;AAAA,8BAAA;AAAA,gCACC,MAAMiH,KAAmB,IAAI,gBAAgB;AAAA,gCAC7C,MAAM;AAAA,gCACN,IAAI,EAAE,OAAOpH,EAAqBoH,CAAe,EAAE;AAAA,8BAAA;AAAA,4BACrD;AAAA,4BAEF,gBAAArN;AAAA,8BAACE;AAAA,8BAAA;AAAA,gCACC,IAAI;AAAA,kCACF,OAAO+F,EAAqBoH,CAAe;AAAA,kCAC3C,YAAY;AAAA,gCACd;AAAA,gCACA,SAAQ;AAAA,gCAEP,UAAA;AAAA,kCAAAC,GAA0B,QAAQ,CAAC;AAAA,kCAAE;AAAA,gCAAA;AAAA,8BAAA;AAAA,4BACxC;AAAA,4BACA,gBAAArN,EAACC,KAAK,IAAI,EAAE,OAAO,iBAAiB,GAAG,SAAQ,UAAS,UAExD,IAAA,CAAA;AAAA,4BACA,gBAAAD;AAAA,8BAACC;AAAA,8BAAA;AAAA,gCACC,IAAI;AAAA,kCACF,OAAO+F,EAAqBoH,CAAe;AAAA,kCAC3C,YAAY;AAAA,gCACd;AAAA,gCACA,SAAQ;AAAA,gCAEP,UAAK,KAAA,IAAIA,CAAe,EAAE,eAAe,SAAS;AAAA,kCACjD,UAAU;AAAA,kCACV,uBAAuB;AAAA,kCACvB,uBAAuB;AAAA,kCACvB,OAAO;AAAA,gCAAA,CACR;AAAA,8BAAA;AAAA,4BACH;AAAA,0BAAA;AAAA,wBAAA;AAAA,sBACF;AAAA,oBAAA,GACF;AAAA,oBAEA,gBAAApN,EAACF,KAAM,IAAI,EAAE,YAAY,YAAY,KAAK,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,GACxE,GAAA,UAAA,gBAAAC,EAACD,KAAM,IAAI,EAAE,YAAY,WAAA,GACvB,UAAA;AAAA,sBAAC,gBAAAE,EAAAC,GAAA,EAAK,IAAI,EAAE,OAAO,iBAAA,GAAoB,SAAQ,UAC5C,UAAKT,EAAA,SAAS,YACjB,CAAA;AAAA,sBACC,gBAAAQ,EAAAC,GAAA,EAAK,IAAI,EAAE,OAAO,gBAAgB,YAAY,IAAA,GAAO,SAAQ,QAC3D,UAAAkN,GAAmB,eAAe,SAAS;AAAA,wBAC1C,UAAU;AAAA,wBACV,uBAAuB;AAAA,wBACvB,uBAAuB;AAAA,wBACvB,OAAO;AAAA,sBACR,CAAA,GACH;AAAA,oBAAA,EAAA,CACF,EACF,CAAA;AAAA,kBAAA,GACF;AAAA,gBAAA;AAAA,cAAA;AAAA,YACF;AAAA,8BACCpC,IAAiB,EAAA,IAAI,EAAE,SAAS,sBAAsB,GAAG,GAAA,GACxD,UAAA,gBAAA/K,EAACyL,MAAM,IAAI,EAAE,QAAQ,GAAG,aAAa,kBACnC,UAAA,gBAAAzL;AAAA,cAACqL;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,eAEJ,EACF,CAAA;AAAA,UAAA;AAAA,QAAA;AAAA,QA7HK1H,EAAQ;AAAA,MAAA;AAAA,IA8Hf,CAEH;AAAA,sBAGAhD,IAA0B,EAAA;AAAA,IAG3B,gBAAAU;AAAA,MAACyJ;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,IACX;AAAA,IAEA,gBAAAhN;AAAA,MAACwN;AAAA,MAAA;AAAA,QACC,SAAS,MAAM5N,EAAyB,EAAK;AAAA,QAC7C,uBAAAoM;AAAA,QACA,OAAOE,EAAa;AAAA,MAAA;AAAA,IACtB;AAAA,EACF,EAAA,CAAA,sBA1XQuB,IAAO,CAAA,CAAA;AA4XnB,GAEeC,KAAA1G,EAAS2E,EAAQ,GCzgBnBgC,KAAW,CAAC,EAAE,OAAA7F,QACxB,gBAAA9H,EAAAC,GAAA,EAAK,MAAM,IAAM,SAAQ,QACvB,UACH6H,EAAA,CAAA,GCkBW8F,KAAoB5G,EAAS,CAAC,EAAE,aAAA6G,GAAa,IAAAtO,QAAsB;AACxE,QAAA,EAAE,SAAAG,MAAYC,MACd,EAAE,UAAAqE,MAAaC,KACf,EAAE,2BAA2BvC,EAAS,IAAIiF,GAAgB,GAC1D;AAAA,IACJ,iBAAiB9F;AAAA,IACjB,0BAAAjB;AAAA,IACA,uBAAAoM;AAAA,MACEnM,EAAgB,GACd,EAAE,aAAaL,GAAM,UAAU0M,EAAA,IAAiBzM,KAEhD,EAAE,cAAA0M,GAAc,eAAA2B,GAAe,qBAAAC,MAAwBtH,EAAiB,GAExE,CAACuH,GAAaC,CAAc,IAAIvJ,EAAM,SAAS,CAAC,GAEhD,EAAE,cAAAwJ,MAAiBrO;AAEzB,EAAA6E,EAAM,UAAU,MAAM;AACpB,IAAAqJ,EAAoBrM,CAAQ;AAAA,EAAA,GAC3B,CAACA,CAAQ,CAAC,GAEbgD,EAAM,UAAU,MAAM;AACpB,IAAIoJ,KACFI,EAAA,EAAe;EACjB,GACC,CAACJ,CAAa,CAAC;AAElB,QAAMK,IAA2B,MAAM;AACrC,IAAAzO,EAAQS,EAAiB,sCAAsC;AAAA,EAAA;AAGjE,MAAI,CAACgM,KAAgB,CAAC2B,EAAe,0BAAQL,IAAO,CAAA,CAAA;AAEpD,QAAMW,IAAS;AAAA,IACbjO,EAAiB;AAAA,IACjBA,EAAiB;AAAA,IACjBA,EAAiB;AAAA,EAAA,GAEbgE,IAAezC,EAAS,WAAW,KAAKb,EAAS,WAAW,GAC5DwN,IAAiB;AAAA,IACrB7O,EAAK;AAAA,IACLA,EAAK;AAAA,IACLA,EAAK;AAAA,EAAA;AAGL,SAAA,gBAAAO;AAAA,IAACuO;AAAA,IAAA;AAAA,MACC,gBAAgB5M;AAAA,MAChB,uBAAuByM;AAAA,MACvB,aAAAN;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,YAACuO;AAAA,YAAA;AAAA,cACC,UAAU,CAACzK,GAAGC,MAAa;AACzB,gBAAAkK,EAAelK,CAAQ,GACfrE,EAAA0O,EAAOrK,CAAQ,CAAC;AAAA,cAC1B;AAAA,cACA,IAAI,EAAE,SAAS,mBAAmB;AAAA,cAClC,WAAU;AAAA,cACV,OAAQI,IAA6B,KAAd6J;AAAA,cACvB,SAAQ;AAAA,cAEP,UAAeK,EAAA,IAAI,CAACvG,wBAClB0G,IAAI,EAAA,UAAUrK,GAA0B,OAAQ,gBAAAnE,EAAA2N,IAAA,EAAS,OAAA7F,EAAc,CAAA,EAAA,GAAtCA,CAA0C,CAC7E;AAAA,YAAA;AAAA,UACH;AAAA,UACC3D,IACC,gBAAAnE;AAAA,YAACyO;AAAA,YAAA;AAAA,cACC,QAAQjP,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,IAAI;AAAA,gBACjB,mBAAmB;AAAA,kBACjB,OAAO;AAAA,gBACT;AAAA,gBACA,qBAAqB;AAAA,kBACnB,IAAI;AAAA,kBACJ,IAAI;AAAA,gBACN;AAAA,gBACA,IAAI;AAAA,cACN;AAAA,YAAA;AAAA,UAAA,IAIC,gBAAAO,EAAAkF,IAAA,EAAA,UAAA;AAAA,YAAgB+I,MAAA,uBAAMrC,IAAS,CAAA,CAAA;AAAA,YAC/BqC,MAAgB,KAAK,gBAAAhO,EAACoG,IAAW,CAAA,CAAA;AAAA,YACjC4H,MAAgB,KAAK,gBAAAhO,EAACsI,IAAS,CAAA,CAAA;AAAA,UAAA,GAClC;AAAA,QAAA,GAEJ;AAAA,QACA,gBAAAtI;AAAA,UAACwN;AAAA,UAAA;AAAA,YACC,SAAS,MAAM5N,EAAyB,EAAK;AAAA,YAC7C,uBAAAoM;AAAA,YACA,OAAOE,EAAa;AAAA,UAAA;AAAA,QACtB;AAAA,MAAA;AAAA,IAAA;AAAA,EAAA;AAGN,CAAC;"}
@@ -0,0 +1,7 @@
1
+ import { s as e } from "../ConnectMiniWidget-CQWafYtQ.mjs";
2
+ import { M as a } from "../MerchantStore-Cck9IGIH.mjs";
3
+ export {
4
+ e as MerchantLookup,
5
+ a as MerchantStore
6
+ };
7
+ //# sourceMappingURL=index.es.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.es.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;"}
@@ -0,0 +1,21 @@
1
+ import { t as i, B as d, x as n, z as p, y as C, I as c, v as I, w as M, E as g, N as h, V as l, Z as m, J as S } from "../ConnectMiniWidget-CQWafYtQ.mjs";
2
+ import "react/jsx-runtime";
3
+ import "react";
4
+ import "@mxenabled/mxui";
5
+ import "@mui/material/styles/useTheme";
6
+ export {
7
+ i as AppStore,
8
+ d as BeatCard,
9
+ n as CarouselHeader,
10
+ p as ChartFilledIcon,
11
+ C as InsightsMicroWidget,
12
+ c as InsightsMicroWidgetDataProvider,
13
+ I as MicroBeatCarousel,
14
+ M as MicroInsightCard,
15
+ g as MonthlySpendComparisonIcon,
16
+ h as NoRelevantInsightsCard,
17
+ l as ViewMoreMicroCard,
18
+ m as ZeroStateCard,
19
+ S as ZeroStateIcon
20
+ };
21
+ //# sourceMappingURL=index.es.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.es.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;"}
@@ -0,0 +1,11 @@
1
+ import { K as o, L as e, P as a, O as W, Q as h } from "../ConnectMiniWidget-CQWafYtQ.mjs";
2
+ import { N } from "../NetWorthStore-D5eUfGQt.mjs";
3
+ export {
4
+ o as NetWorthChart,
5
+ e as NetWorthList,
6
+ a as NetWorthMicroWidget,
7
+ N as NetWorthStore,
8
+ W as NetWorthSummary,
9
+ h as NetWorthWidget
10
+ };
11
+ //# sourceMappingURL=index.es.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.es.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;"}
@@ -0,0 +1,116 @@
1
+ import "bowser";
2
+ import "date-fns/getUnixTime";
3
+ import { aq as t, af as i, ar as o } from "../ConnectMiniWidget-CQWafYtQ.mjs";
4
+ import { at as Ht, as as Jt, au as Kt } from "../ConnectMiniWidget-CQWafYtQ.mjs";
5
+ import "date-fns/intlFormat";
6
+ import "date-fns/addMonths";
7
+ import "date-fns/addQuarters";
8
+ import "date-fns/addWeeks";
9
+ import "date-fns/addYears";
10
+ import "date-fns/getDay";
11
+ import "date-fns/isBefore";
12
+ import "date-fns/nextDay";
13
+ import "date-fns/setDate";
14
+ import "date-fns/startOfToday";
15
+ import "date-fns/fromUnixTime";
16
+ import "react";
17
+ import "numeral";
18
+ import "@mui/material";
19
+ import "react/jsx-runtime";
20
+ import "@mui/material/Button";
21
+ import "@mxenabled/mxui";
22
+ import "@mui/material/Tooltip";
23
+ import "@mui/material/Box";
24
+ import "@mui/material/IconButton";
25
+ import "../Loader-CwdK8lfx.mjs";
26
+ import "@mui/material/styles/useTheme";
27
+ import "@mui/material/useMediaQuery";
28
+ import "@mxenabled/cssinjs";
29
+ import "date-fns/addDays";
30
+ import "date-fns/eachDayOfInterval";
31
+ import "date-fns/eachWeekOfInterval";
32
+ import "date-fns/endOfMonth";
33
+ import "date-fns/format";
34
+ import "date-fns/isSameMonth";
35
+ import "date-fns/startOfMonth";
36
+ import "date-fns/subMonths";
37
+ import "@mui/material/Paper";
38
+ import "@mxenabled/mx-icons";
39
+ import "date-fns/isSameDay";
40
+ import "date-fns/isWithinInterval";
41
+ import "d3";
42
+ import "@mui/material/styles";
43
+ import "@mui/x-charts";
44
+ import "@mui/x-charts/ChartsTooltip";
45
+ import "@mui/material/Stack";
46
+ import "date-fns/differenceInCalendarDays";
47
+ import "date-fns/endOfToday";
48
+ import "date-fns/endOfYear";
49
+ import "date-fns/startOfYear";
50
+ import "date-fns/subDays";
51
+ import "date-fns/subYears";
52
+ import "@mui/material/ButtonGroup";
53
+ import "@mui/material/Tab";
54
+ import "@mui/material/Tabs";
55
+ import "@mui/material/ToggleButton";
56
+ import "@mui/material/ToggleButtonGroup";
57
+ import "@mui/material/Dialog";
58
+ import "@mui/material/DialogContent";
59
+ import "@mui/material/Card";
60
+ import "@mui/material/CardContent";
61
+ import "@mui/material/CardHeader";
62
+ import "uuid";
63
+ import "@mui/material/CircularProgress";
64
+ import "@mui/material/FormControlLabel";
65
+ import "@mui/material/Radio";
66
+ import "@mui/material/Avatar";
67
+ import "@mui/material/ListItem";
68
+ import "@mui/material/ListItemAvatar";
69
+ import "@mui/material/ListItemButton";
70
+ import "@mui/material/ListItemText";
71
+ import "@mui/material/ListItemIcon";
72
+ import "@mui/material/MenuItem";
73
+ import "@mui/material/TextField";
74
+ import "@mui/material/Switch";
75
+ import "mobx";
76
+ import "posthog-js";
77
+ import "date-fns/differenceInDays";
78
+ import "@mui/x-data-grid-pro";
79
+ import "date-fns";
80
+ import "@mui/material/Divider";
81
+ import "@mui/material/List";
82
+ import "date-fns/formatISO";
83
+ import "date-fns/isAfter";
84
+ import "date-fns/parseISO";
85
+ import "date-fns/subQuarters";
86
+ import "date-fns/lastDayOfMonth";
87
+ import "date-fns/setDayOfYear";
88
+ import "date-fns/addSeconds";
89
+ import "date-fns/differenceInCalendarMonths";
90
+ import "date-fns/getMonth";
91
+ import { N as Qt } from "../NotificationStore-DCxw8W7u.mjs";
92
+ const kt = (r) => {
93
+ switch (r) {
94
+ case o.BudgetExceeded:
95
+ case o.BudgetOffTarget:
96
+ return i.BUDGETS;
97
+ case t.DebtPaymentReminder:
98
+ case t.AccountBalanceLow:
99
+ case t.AccountDepositLarge:
100
+ return i.ACCOUNTS;
101
+ case t.TransactionExpenseLarge:
102
+ case t.TransactionFeeCharge:
103
+ case t.InternationalTransaction:
104
+ return i.TRANSACTIONS;
105
+ default:
106
+ return null;
107
+ }
108
+ };
109
+ export {
110
+ Ht as NotificationDrawer,
111
+ Jt as NotificationList,
112
+ Qt as NotificationStore,
113
+ Kt as filterRecentNotifications,
114
+ kt as getNotificationDetailRoute
115
+ };
116
+ //# sourceMappingURL=index.es.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.es.js","sources":["../../src/notifications/constants/NotificationConstants.ts"],"sourcesContent":["import { AccountNotificationTypes, ApiEndpoints, BudgetNotificationTypes } from '../../common'\n\nexport const getNotificationDetailRoute = (notificationType: number) => {\n switch (notificationType) {\n case BudgetNotificationTypes.BudgetExceeded:\n case BudgetNotificationTypes.BudgetOffTarget:\n return ApiEndpoints.BUDGETS\n case AccountNotificationTypes.DebtPaymentReminder:\n case AccountNotificationTypes.AccountBalanceLow:\n case AccountNotificationTypes.AccountDepositLarge:\n return ApiEndpoints.ACCOUNTS\n case AccountNotificationTypes.TransactionExpenseLarge:\n case AccountNotificationTypes.TransactionFeeCharge:\n case AccountNotificationTypes.InternationalTransaction:\n return ApiEndpoints.TRANSACTIONS\n default:\n return null\n }\n}\n"],"names":["getNotificationDetailRoute","notificationType","BudgetNotificationTypes","ApiEndpoints","AccountNotificationTypes"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAEa,MAAAA,KAA6B,CAACC,MAA6B;AACtE,UAAQA,GAAkB;AAAA,IACxB,KAAKC,EAAwB;AAAA,IAC7B,KAAKA,EAAwB;AAC3B,aAAOC,EAAa;AAAA,IACtB,KAAKC,EAAyB;AAAA,IAC9B,KAAKA,EAAyB;AAAA,IAC9B,KAAKA,EAAyB;AAC5B,aAAOD,EAAa;AAAA,IACtB,KAAKC,EAAyB;AAAA,IAC9B,KAAKA,EAAyB;AAAA,IAC9B,KAAKA,EAAyB;AAC5B,aAAOD,EAAa;AAAA,IACtB;AACS,aAAA;AAAA,EACX;AACF;"}
@@ -0,0 +1,14 @@
1
+ import { _ as r, X as s, W as e, U as i, T as t, S as c, R as o, Y as g } from "../ConnectMiniWidget-CQWafYtQ.mjs";
2
+ import { R as T } from "../RecurringTransactionsStore-Bijrgllq.mjs";
3
+ export {
4
+ r as AddRecurringTransactionDetails,
5
+ s as ManageExpenses,
6
+ e as ManageIncome,
7
+ i as RecurringSettings,
8
+ t as RecurringTransactionsMicroWidget,
9
+ c as RecurringTransactionsMiniWidget,
10
+ T as RecurringTransactionsStore,
11
+ o as RecurringTransactionsWidget,
12
+ g as SelectTransaction
13
+ };
14
+ //# sourceMappingURL=index.es.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.es.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;"}
@@ -0,0 +1,112 @@
1
+ import { S as Ot, a as Qt } from "../SettingsStore-BhOYgUOa.mjs";
2
+ import { av as r, aw as m, ax as p } from "../ConnectMiniWidget-CQWafYtQ.mjs";
3
+ import { aF as Vt, aG as Xt, aC as Yt, aH as Zt, aE as _t, aD as $t, aB as ti, az as ii, ay as oi, aA as ri } from "../ConnectMiniWidget-CQWafYtQ.mjs";
4
+ import { jsx as t } from "react/jsx-runtime";
5
+ import a from "@mui/material/Stack";
6
+ import "bowser";
7
+ import "date-fns/getUnixTime";
8
+ import "date-fns/intlFormat";
9
+ import "date-fns/addMonths";
10
+ import "date-fns/addQuarters";
11
+ import "date-fns/addWeeks";
12
+ import "date-fns/addYears";
13
+ import "date-fns/getDay";
14
+ import "date-fns/isBefore";
15
+ import "date-fns/nextDay";
16
+ import "date-fns/setDate";
17
+ import "date-fns/startOfToday";
18
+ import "date-fns/fromUnixTime";
19
+ import "react";
20
+ import "numeral";
21
+ import "@mui/material";
22
+ import "@mui/material/Button";
23
+ import "@mxenabled/mxui";
24
+ import "@mui/material/Tooltip";
25
+ import "@mui/material/Box";
26
+ import "@mui/material/IconButton";
27
+ import "../Loader-CwdK8lfx.mjs";
28
+ import "@mxenabled/cssinjs";
29
+ import "date-fns/addDays";
30
+ import "date-fns/eachDayOfInterval";
31
+ import "date-fns/eachWeekOfInterval";
32
+ import "date-fns/endOfMonth";
33
+ import "date-fns/format";
34
+ import "date-fns/isSameMonth";
35
+ import "date-fns/startOfMonth";
36
+ import "date-fns/subMonths";
37
+ import "@mui/material/Paper";
38
+ import "@mxenabled/mx-icons";
39
+ import "date-fns/isSameDay";
40
+ import "date-fns/isWithinInterval";
41
+ import "@mui/material/styles/useTheme";
42
+ import "d3";
43
+ import "@mui/material/styles";
44
+ import "@mui/x-charts";
45
+ import "@mui/material/useMediaQuery";
46
+ import "@mui/x-charts/ChartsTooltip";
47
+ import "date-fns/differenceInCalendarDays";
48
+ import "date-fns/endOfToday";
49
+ import "date-fns/endOfYear";
50
+ import "date-fns/startOfYear";
51
+ import "date-fns/subDays";
52
+ import "date-fns/subYears";
53
+ import "@mui/material/ButtonGroup";
54
+ import "@mui/material/Tab";
55
+ import "@mui/material/Tabs";
56
+ import "@mui/material/ToggleButton";
57
+ import "@mui/material/ToggleButtonGroup";
58
+ import "@mui/material/Dialog";
59
+ import "@mui/material/DialogContent";
60
+ import "@mui/material/Card";
61
+ import "@mui/material/CardContent";
62
+ import "@mui/material/CardHeader";
63
+ import "uuid";
64
+ import "@mui/material/CircularProgress";
65
+ import "@mui/material/FormControlLabel";
66
+ import "@mui/material/Radio";
67
+ import "@mui/material/Avatar";
68
+ import "@mui/material/ListItem";
69
+ import "@mui/material/ListItemAvatar";
70
+ import "@mui/material/ListItemButton";
71
+ import "@mui/material/ListItemText";
72
+ import "@mui/material/ListItemIcon";
73
+ import "@mui/material/MenuItem";
74
+ import "@mui/material/TextField";
75
+ import "@mui/material/Switch";
76
+ import "mobx";
77
+ import "posthog-js";
78
+ import "date-fns/differenceInDays";
79
+ import "@mui/x-data-grid-pro";
80
+ import "date-fns";
81
+ import "@mui/material/Divider";
82
+ import "@mui/material/List";
83
+ import "date-fns/formatISO";
84
+ import "date-fns/isAfter";
85
+ import "date-fns/parseISO";
86
+ import "date-fns/subQuarters";
87
+ import "date-fns/lastDayOfMonth";
88
+ import "date-fns/setDayOfYear";
89
+ import "date-fns/addSeconds";
90
+ import "date-fns/differenceInCalendarMonths";
91
+ import "date-fns/getMonth";
92
+ const Jt = (i) => {
93
+ const { isMobile: o } = r();
94
+ return /* @__PURE__ */ t(m, { ...i, children: /* @__PURE__ */ t(a, { sx: { mx: o ? 0 : 48, my: 24 }, children: /* @__PURE__ */ t(p, {}) }) });
95
+ };
96
+ export {
97
+ Vt as AccountNotificationProfiles,
98
+ Xt as BudgetNotificationProfiles,
99
+ Yt as DeviceTab,
100
+ Zt as InsightsNotificationProfiles,
101
+ _t as NotificationSettings,
102
+ $t as NotificationSettingsWidget,
103
+ ti as ProfileTab,
104
+ Ot as SettingsApi,
105
+ Qt as SettingsStore,
106
+ ii as SettingsTabs,
107
+ oi as SettingsWidget,
108
+ ri as SettingsWidgetContents,
109
+ p as TransactionRulesTab,
110
+ Jt as TransactionRulesWidget
111
+ };
112
+ //# sourceMappingURL=index.es.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.es.js","sources":["../../src/settings/TransactionRulesWidget.tsx"],"sourcesContent":["import Stack from '@mui/material/Stack'\n\nimport { useScreenSize, WidgetContainer, WidgetProps } from '../common'\n\nimport TransactionRulesTab from './components/transactionrules/TransactionRulesTab'\n\nexport const TransactionRulesWidget = (props: WidgetProps) => {\n const { isMobile } = useScreenSize()\n\n return (\n <WidgetContainer {...props}>\n <Stack sx={{ mx: isMobile ? 0 : 48, my: 24 }}>\n <TransactionRulesTab />\n </Stack>\n </WidgetContainer>\n )\n}\n"],"names":["TransactionRulesWidget","props","isMobile","useScreenSize","WidgetContainer","jsx","Stack","TransactionRulesTab"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAMa,MAAAA,KAAyB,CAACC,MAAuB;AACtD,QAAA,EAAE,UAAAC,MAAaC;AAErB,2BACGC,GAAiB,EAAA,GAAGH,GACnB,UAAC,gBAAAI,EAAAC,GAAA,EAAM,IAAI,EAAE,IAAIJ,IAAW,IAAI,IAAI,IAAI,GAAA,GACtC,UAAC,gBAAAG,EAAAE,GAAA,CAAoB,CAAA,GACvB,EACF,CAAA;AAEJ;"}