@mx-cartographer/experiences 9.2.4 → 9.2.6

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 (28) hide show
  1. package/CHANGELOG.md +8 -0
  2. package/dist/{AccountDetailsDrawer-utXjRHSW.mjs → AccountDetailsDrawer-CwDPr4i5.mjs} +2 -2
  3. package/dist/{AccountDetailsDrawer-utXjRHSW.mjs.map → AccountDetailsDrawer-CwDPr4i5.mjs.map} +1 -1
  4. package/dist/{DebtUtils-i4pI2Uoe.mjs → DebtUtils-jG2NU0Pb.mjs} +2 -2
  5. package/dist/DebtUtils-jG2NU0Pb.mjs.map +1 -0
  6. package/dist/{ManageIncome-Czs7daKV.mjs → ManageIncome-Br11zvAT.mjs} +3 -3
  7. package/dist/{ManageIncome-Czs7daKV.mjs.map → ManageIncome-Br11zvAT.mjs.map} +1 -1
  8. package/dist/{RecurringSettings-CcS5b1xA.mjs → RecurringSettings-BkRz-uzd.mjs} +2 -2
  9. package/dist/{RecurringSettings-CcS5b1xA.mjs.map → RecurringSettings-BkRz-uzd.mjs.map} +1 -1
  10. package/dist/{TransactionDetails-Kmj8GUlD.mjs → TransactionDetails-CLc7oeHT.mjs} +103 -103
  11. package/dist/TransactionDetails-CLc7oeHT.mjs.map +1 -0
  12. package/dist/{UserStore-Cp-2Jtnw.mjs → UserStore-BceB3WHz.mjs} +2 -2
  13. package/dist/{UserStore-Cp-2Jtnw.mjs.map → UserStore-BceB3WHz.mjs.map} +1 -1
  14. package/dist/accounts/index.es.js +2 -2
  15. package/dist/budgets/index.es.js +2 -2
  16. package/dist/cashflow/index.es.js +3 -3
  17. package/dist/common/index.es.js +1 -1
  18. package/dist/core/index.es.js +1 -1
  19. package/dist/debts/index.es.js +3 -3
  20. package/dist/debts/index.es.js.map +1 -1
  21. package/dist/finstrong/index.es.js +2 -2
  22. package/dist/recurringtransactions/index.es.js +4 -4
  23. package/dist/spending/index.es.js +1 -1
  24. package/dist/transactions/index.es.js +2 -2
  25. package/dist/trends/index.es.js +1 -1
  26. package/package.json +1 -1
  27. package/dist/DebtUtils-i4pI2Uoe.mjs.map +0 -1
  28. package/dist/TransactionDetails-Kmj8GUlD.mjs.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"index.es.js","sources":["../../src/debts/utils/SnowballCard.ts","../../src/debts/hooks/useDebtsUiStore.ts","../../src/debts/components/SnowballCard.tsx","../../src/debts/components/SnowballDrawer.tsx","../../src/debts/utils/DebtsChart.ts","../../src/debts/components/DebtsChart.tsx","../../src/debts/components/debtsdrawer/DebtDetailsChart.tsx","../../src/debts/components/debtsdrawer/DebtScheduleTab.tsx","../../src/debts/components/actions/InterestRateAction.tsx","../../src/debts/components/actions/MonthlyPaymentAction.tsx","../../src/debts/components/actions/OriginalBalanceAction.tsx","../../src/debts/components/debtsdrawer/DebtDetailsTab.tsx","../../src/debts/components/debtsdrawer/DebtStatusCard.tsx","../../src/debts/components/debtsdrawer/DebtDetailsContent.tsx","../../src/debts/components/DebtDrawer.tsx","../../src/debts/components/actions/ExtraPaymentAction.tsx","../../src/debts/components/debtspaydown/PaydownContent.tsx","../../src/debts/components/PaydownDrawer.tsx","../../src/debts/utils/DebtsTable.ts","../../src/debts/components/debtstable/PriorityCell.tsx","../../src/debts/components/debtstable/AccountCell.tsx","../../src/debts/components/DebtsTable.tsx","../../src/debts/components/debtspriority/DebtsPriorityButton.tsx","../../src/debts/components/debtspriority/DebtsPrioriyPopover.tsx","../../src/debts/components/actions/DebtsPriorityAction.tsx","../../src/debts/components/debtspaydown/PaydownButton.tsx","../../src/debts/DebtsWidget.tsx"],"sourcesContent":["import { formatDuration, intervalToDuration } from 'date-fns'\n\nimport { DATE_FORMATS_INTL, formatDate } from '../../core/constants'\nimport { DebtPriority } from '../../core/constants/Debts'\nimport { DebtChartData, sortDebtsByPrioriy } from '../../core/utils/DebtUtils'\nimport { formatCurrency } from '../../core/utils/NumberFormatting'\n\ntype PayoffProjection = {\n payoffSavings: string\n payoffDate: string\n payoffDuration: string\n}\n\nexport function getPayoffProjection(\n debts: DebtChartData[],\n debtPriority: DebtPriority,\n extraPaydown: number = 0,\n): PayoffProjection {\n const sortedDebts = debts\n // Copy debts to avoid overwriting balance during payoff calculation\n .map((d) => ({ ...d }))\n // Filter out invalid debts\n .filter(\n (d) => d.interest_rate !== undefined && d.monthly_payment !== undefined && !d.is_paid_off,\n )\n sortDebtsByPrioriy(sortedDebts, debtPriority)\n\n let totalSavings = 0\n let monthlyExtra = 0\n const startDate = new Date()\n const endDate = new Date()\n\n while (sortedDebts.some((debt) => debt.balance >= 0.01 && !debt.is_impossible)) {\n let madePayment = false // Track if any payment was made this month\n\n for (const [index, debt] of sortedDebts.entries()) {\n if (debt.balance <= 0.01 || debt.is_impossible) continue\n\n const interestRate = (debt.interest_rate ?? 0) / 100\n const monthlyRate = interestRate / 12\n const monthlyInterest = debt.balance * monthlyRate\n let monthlyPayment = debt.monthly_payment ?? 0\n\n // Apply extra payment to the highest priority debt\n if (index === 0 && extraPaydown) monthlyPayment += extraPaydown\n\n // Apply interest before payment\n debt.balance += monthlyInterest\n // Apply monthly payment with any extra payment\n const appliedPayment = Math.min(debt.balance, monthlyPayment + monthlyExtra)\n\n // If payment doesn't reduce balance, mark as impossible to pay off\n if (appliedPayment <= monthlyInterest) {\n debt.is_impossible = true\n continue\n }\n\n debt.balance -= appliedPayment\n // Avoid floating-point precision issues\n debt.balance = debt.balance < 0.01 ? 0 : debt.balance\n totalSavings += monthlyInterest\n\n // If debt was fully paid off, roll over (\"snowball\") its payment as extra payment\n if (debt.balance <= 0) monthlyExtra += monthlyPayment\n if (appliedPayment > 0) madePayment = true\n }\n\n // Only increment the month if at least one payment was made\n if (madePayment) endDate.setMonth(endDate.getMonth() + 1)\n }\n\n // Check if any debts are impossible to pay off\n const hasImpossibleDebts = sortedDebts.some((debt) => debt.is_impossible && debt.balance > 0)\n const duration = intervalToDuration({ start: startDate, end: endDate })\n\n return {\n payoffSavings: hasImpossibleDebts ? 'N/A' : formatCurrency(totalSavings, '0,0.00'),\n payoffDate: hasImpossibleDebts ? 'Never' : formatDate(endDate, DATE_FORMATS_INTL.MONTH_YEAR),\n payoffDuration: hasImpossibleDebts\n ? 'Stagnant'\n : formatDuration(duration, { format: ['years', 'months'] }) || '0 months',\n }\n}\n","import React from 'react'\nimport { GlobalDataContext, useDebtStore } from '../../common'\n\nexport const useDebtsUiStore = () => {\n const context = React.useContext(GlobalDataContext)\n\n if (!context) {\n throw new Error('useDebtsUiStore() must be used within the GlobalDataContext')\n }\n\n return useDebtStore().uiStore\n}\n","import React, { MouseEventHandler } from 'react'\nimport { observer } from 'mobx-react-lite'\nimport { Card, Stack, useTheme } from '@mui/material'\nimport { Text } from '@mxenabled/mxui'\n\nimport { useScreenSize, useGlobalCopyStore, useGoalStore } from '../../common'\nimport { getPayoffProjection } from '../utils/SnowballCard'\nimport { DebtChartData } from '../../core/utils/DebtUtils'\nimport { useDebtsUiStore } from '../hooks/useDebtsUiStore'\n\ninterface SnowballCardProps {\n debts: DebtChartData[]\n onClickCta: MouseEventHandler\n sx?: any\n}\n\nconst SnowballCard = ({ debts, onClickCta, sx }: SnowballCardProps) => {\n const theme = useTheme()\n const { isMobile } = useScreenSize()\n const { debts: copy } = useGlobalCopyStore()\n const { selectedDebtPriority } = useDebtsUiStore()\n const { monthlyCashFlowProfile } = useGoalStore()\n\n const { payoffDate, payoffSavings, payoffDuration } = React.useMemo(() => {\n const extraPaydown = monthlyCashFlowProfile?.extra_payment ?? 0\n return getPayoffProjection(debts, selectedDebtPriority, extraPaydown)\n }, [debts, selectedDebtPriority, monthlyCashFlowProfile])\n\n return (\n <Card\n sx={{\n boxShadow: theme.shadows[2],\n width: isMobile ? '100%' : '186px',\n minWidth: '186px',\n ...sx,\n }}\n >\n <Stack sx={{ gap: '12px', p: '16px' }}>\n <Stack\n gap={isMobile ? '4px' : '0'}\n sx={{\n borderBottom: '1px solid',\n borderBottomColor: theme.palette.grey[300],\n pb: '8px',\n }}\n >\n <Text variant=\"caption\">{copy.snowball_card_date_description}</Text>\n <Text bold={true} color={theme.palette.primary.main} variant=\"body2\">\n {payoffDate}\n </Text>\n </Stack>\n <Stack gap={isMobile ? '4px' : '0'}>\n <Text bold={true} variant=\"body2\">\n {payoffSavings}\n </Text>\n <Text variant=\"caption\">{copy.snowball_card_amount_description}</Text>\n </Stack>\n <Stack gap={isMobile ? '4px' : '0'}>\n <Text bold={true} variant=\"body2\">\n {payoffDuration}\n </Text>\n <Text variant=\"caption\">{copy.snowball_card_duration_description}</Text>\n </Stack>\n <Text\n bold={true}\n color={theme.palette.primary.main}\n onClick={onClickCta}\n sx={{ cursor: 'pointer' }}\n variant=\"body2\"\n >\n {copy.snowball_card_cta}\n </Text>\n </Stack>\n </Card>\n )\n}\n\nexport default observer(SnowballCard)\n","import React from 'react'\nimport { observer } from 'mobx-react-lite'\nimport { Box, Card, Stack, useTheme } from '@mui/material'\nimport { P, Text } from '@mxenabled/mxui'\n\nimport { Drawer, useGlobalCopyStore } from '../../common'\nimport { buildDynamicCopy } from '../../core/utils/Localization'\ninterface SnowballDrawerProps {\n isOpen: boolean\n onClose: () => void\n}\n\nconst SnowballDrawer = ({ isOpen, onClose }: SnowballDrawerProps) => {\n const theme = useTheme()\n const { debts: copy } = useGlobalCopyStore()\n const [readMore, setReadMore] = React.useState(false)\n\n return (\n <Drawer\n ariaLabelClose={''}\n isOpen={isOpen}\n onClose={onClose}\n title={copy.snowball_drawer_title}\n >\n <Stack bgcolor={theme.palette.background.default} height=\"100%\">\n {/* Drawer Header */}\n <Stack alignItems={'center'} px={24} py={24}>\n <Stack alignItems={'center'} pb={24}>\n <Text mb={12} truncate={true} variant=\"h3\">\n {copy.snowball_drawer_subtitle}\n </Text>\n <Text color={theme.palette.secondary.main} variant=\"body2\">\n {copy.snowball_drawer_amount_description}\n </Text>\n <P variant=\"h1\">{copy.snowball_drawer_savings}</P>\n <Text color={theme.palette.secondary.main} variant=\"body2\">\n {copy.snowball_drawer_duration_description}\n </Text>\n </Stack>\n {/* Drawer Info Card */}\n <Card sx={{ display: 'grid', py: 16, px: 24 }}>\n <Text mb={4} truncate={true} variant=\"h3\">\n {copy.snowball_drawer_question}\n </Text>\n <Text\n color={theme.palette.secondary.main}\n mb={8}\n truncate={!readMore}\n variant=\"subtitle2\"\n >\n {copy.snowball_drawer_answer}\n </Text>\n <Text\n bold={true}\n color={theme.palette.primary.main}\n onClick={() => setReadMore(!readMore)}\n sx={{ cursor: 'pointer' }}\n variant=\"body2\"\n >\n {!readMore ? copy.snowball_drawer_more : copy.snowball_drawer_less}\n </Text>\n </Card>\n </Stack>\n {/* Drawer Payoff Table */}\n <Stack>\n {/* Drawer Disclaimer */}\n <Text\n color={theme.palette.secondary.main}\n px={24}\n sx={{ textAlign: 'center' }}\n variant=\"body2\"\n >\n {copy.snowball_drawer_disclaimer}\n </Text>\n\n <Stack flexDirection=\"row\" justifyContent=\"space-between\" sx={{ pt: 12, px: 24, pb: 8 }}>\n <Text bold={true} variant=\"caption\">\n {buildDynamicCopy(copy.snowball_drawer_month_header, 1) as string}\n </Text>\n <Text bold={true} variant=\"caption\">\n {copy.snowball_drawer_payment_header}\n </Text>\n </Stack>\n <Stack bgcolor={theme.palette.background.paper} mb={24}>\n <Stack alignItems=\"center\" flexDirection=\"row\" pl={24}>\n <Box\n sx={{\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n width: 20,\n height: 20,\n borderRadius: '50%',\n backgroundColor: theme.palette.success.main,\n marginRight: 12,\n }}\n >\n <Text color=\"white\" fontWeight={700} variant=\"body2\">\n ✓\n </Text>\n </Box>\n <Stack\n sx={{\n borderBottom: `1px solid ${theme.palette.neutral.light}`,\n flexDirection: 'row',\n flexGrow: 1,\n py: 14,\n pr: 24,\n }}\n >\n <Stack flexGrow={1}>\n <Text variant=\"body1\">\n {buildDynamicCopy(copy.snowball_drawer_debt_label, 'A') as string}\n </Text>\n <Text color={theme.palette.secondary.main} variant=\"caption\">\n {\n buildDynamicCopy(\n copy.snowball_drawer_rollover_explainer_pt1,\n '$100',\n ) as string\n }\n <strong>\n {buildDynamicCopy(copy.snowball_drawer_debt_label, 'B') as string}\n </strong>\n {copy.snowball_drawer_rollover_explainer_pt2}\n </Text>\n </Stack>\n <Stack>\n <Text variant=\"body1\">$100.00</Text>\n <Text\n bold={true}\n color={theme.palette.success.main}\n textAlign=\"end\"\n variant=\"tiny\"\n >\n {copy.snowball_drawer_paid_label}\n </Text>\n </Stack>\n </Stack>\n </Stack>\n <Stack alignItems=\"center\" flexDirection=\"row\" pl={24}>\n <Box\n sx={{\n width: 20,\n height: 20,\n marginRight: 12,\n borderRadius: '50%',\n border: `3px solid ${theme.palette.neutral.main}`,\n }}\n />\n <Stack\n sx={{\n borderBottom: `1px solid ${theme.palette.neutral.light}`,\n flexDirection: 'row',\n flexGrow: 1,\n py: 14,\n pr: 24,\n }}\n >\n <Text flexGrow={1} variant=\"body1\">\n {buildDynamicCopy(copy.snowball_drawer_debt_label, 'B') as string}\n </Text>\n <Text variant=\"body1\">$400.00</Text>\n </Stack>\n </Stack>\n <Stack alignItems=\"center\" flexDirection=\"row\" pl={24} py={14}>\n <Box\n sx={{\n width: 20,\n height: 20,\n marginRight: 12,\n borderRadius: '50%',\n border: `3px solid ${theme.palette.neutral.main}`,\n }}\n />\n <Stack flexDirection=\"row\" flexGrow={1} pr={24}>\n <Text flexGrow={1} variant=\"body1\">\n {buildDynamicCopy(copy.snowball_drawer_debt_label, 'C') as string}\n </Text>\n <Text variant=\"body1\">$1,000.00</Text>\n </Stack>\n </Stack>\n <Stack\n sx={{\n py: 8,\n px: 24,\n flexDirection: 'row',\n justifyContent: 'space-between',\n borderTop: `1px solid ${theme.palette.neutral.light}`,\n borderBottom: `1px solid ${theme.palette.neutral.light}`,\n }}\n >\n <Text bold={true} variant=\"body1\">\n {copy.snowball_drawer_total_label}\n </Text>\n <Text bold={true} variant=\"body1\">\n $1,500.00\n </Text>\n </Stack>\n </Stack>\n\n <Stack flexDirection=\"row\" justifyContent=\"space-between\" sx={{ pt: 12, px: 24, pb: 8 }}>\n <Text bold={true} variant=\"caption\">\n {buildDynamicCopy(copy.snowball_drawer_month_header, 2) as string}\n </Text>\n <Text bold={true} variant=\"caption\">\n {copy.snowball_drawer_payment_header}\n </Text>\n </Stack>\n <Stack bgcolor={theme.palette.background.paper} mb={24}>\n <Stack alignItems=\"center\" flexDirection=\"row\" pl={24}>\n <Box\n sx={{\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n width: 20,\n height: 20,\n borderRadius: '50%',\n backgroundColor: theme.palette.success.main,\n marginRight: 12,\n }}\n >\n <Text color=\"white\" fontWeight={700} variant=\"body2\">\n ✓\n </Text>\n </Box>\n <Stack\n sx={{\n borderBottom: `1px solid ${theme.palette.neutral.light}`,\n flexDirection: 'row',\n flexGrow: 1,\n py: 14,\n pr: 24,\n }}\n >\n <Stack flexGrow={1}>\n <Text variant=\"body1\">\n {buildDynamicCopy(copy.snowball_drawer_debt_label, 'B') as string}\n </Text>\n <Text color={theme.palette.secondary.main} variant=\"caption\">\n {\n buildDynamicCopy(\n copy.snowball_drawer_rollover_explainer_pt1,\n '$500',\n ) as string\n }\n <strong>\n {buildDynamicCopy(copy.snowball_drawer_debt_label, 'C') as string}\n </strong>\n {copy.snowball_drawer_rollover_explainer_pt2}\n </Text>\n </Stack>\n <Stack>\n <Text variant=\"body1\">$500.00</Text>\n <Text\n bold={true}\n color={theme.palette.success.main}\n textAlign=\"end\"\n variant=\"tiny\"\n >\n {copy.snowball_drawer_paid_label}\n </Text>\n </Stack>\n </Stack>\n </Stack>\n <Stack alignItems=\"center\" flexDirection=\"row\" pl={24}>\n <Box\n sx={{\n width: 20,\n height: 20,\n marginRight: 12,\n borderRadius: '50%',\n border: `3px solid ${theme.palette.neutral.main}`,\n }}\n />\n <Stack\n sx={{\n flexDirection: 'row',\n flexGrow: 1,\n py: 14,\n pr: 24,\n }}\n >\n <Text flexGrow={1} variant=\"body1\">\n {buildDynamicCopy(copy.snowball_drawer_debt_label, 'C') as string}\n </Text>\n <Text variant=\"body1\">$1,000.00</Text>\n </Stack>\n </Stack>\n <Stack\n sx={{\n py: 8,\n px: 24,\n flexDirection: 'row',\n justifyContent: 'space-between',\n borderTop: `1px solid ${theme.palette.neutral.light}`,\n borderBottom: `1px solid ${theme.palette.neutral.light}`,\n }}\n >\n <Text bold={true} variant=\"body1\">\n {copy.snowball_drawer_total_label}\n </Text>\n <Text bold={true} variant=\"body1\">\n $1,500.00\n </Text>\n </Stack>\n </Stack>\n\n <Stack flexDirection=\"row\" justifyContent=\"space-between\" sx={{ pt: 12, px: 24, pb: 8 }}>\n <Text bold={true} variant=\"caption\">\n {buildDynamicCopy(copy.snowball_drawer_month_header, 3) as string}\n </Text>\n <Text bold={true} variant=\"caption\">\n {copy.snowball_drawer_payment_header}\n </Text>\n </Stack>\n <Stack bgcolor={theme.palette.background.paper} mb={24}>\n <Stack alignItems=\"center\" flexDirection=\"row\" pl={24}>\n <Box\n sx={{\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n width: 20,\n height: 20,\n borderRadius: '50%',\n backgroundColor: theme.palette.success.main,\n marginRight: 12,\n }}\n >\n <Text color=\"white\" fontWeight={700} variant=\"body2\">\n ✓\n </Text>\n </Box>\n <Stack\n sx={{\n alignItems: 'center',\n flexDirection: 'row',\n flexGrow: 1,\n py: 14,\n pr: 24,\n }}\n >\n <Stack flexGrow={1}>\n <Text variant=\"body1\">\n {buildDynamicCopy(copy.snowball_drawer_debt_label, 'C') as string}\n </Text>\n </Stack>\n <Stack>\n <Text variant=\"body1\">$1,500.00</Text>\n <Text\n bold={true}\n color={theme.palette.success.main}\n textAlign=\"end\"\n variant=\"tiny\"\n >\n {copy.snowball_drawer_paid_label}\n </Text>\n </Stack>\n </Stack>\n </Stack>\n <Stack\n sx={{\n py: 8,\n px: 24,\n flexDirection: 'row',\n justifyContent: 'space-between',\n borderTop: `1px solid ${theme.palette.neutral.light}`,\n borderBottom: `1px solid ${theme.palette.neutral.light}`,\n }}\n >\n <Text bold={true} variant=\"body1\">\n {copy.snowball_drawer_total_label}\n </Text>\n <Text bold={true} variant=\"body1\">\n $1,500.00\n </Text>\n </Stack>\n </Stack>\n </Stack>\n </Stack>\n </Drawer>\n )\n}\n\nexport default observer(SnowballDrawer)\n","export const BASE_LINE_COLOR = '#FF7B08'\n\nexport function adjustBrightness(color: string, factor: number): string {\n const [r, g, b] = color\n .replace(/^#/, '')\n .match(/.{1,2}/g)!\n .map((hex) => parseInt(hex, 16))\n\n const newColor = [\n Math.max(0, Math.min(255, Math.round(r * factor))),\n Math.max(0, Math.min(255, Math.round(g * factor))),\n Math.max(0, Math.min(255, Math.round(b * factor))),\n ]\n\n return `rgb(${newColor[0]}, ${newColor[1]}, ${newColor[2]})`\n}\n","import React from 'react'\n\nimport Box from '@mui/material/Box'\nimport { useTheme } from '@mui/material/styles'\n\nimport type { LineSeriesType, HighlightItemData, LineItemIdentifier } from '@mui/x-charts'\nimport { LineChart } from '@mui/x-charts/LineChart'\n\nimport { useEvent, ANALYTICS_EVENTS } from '../../common'\nimport { DATE_FORMATS_INTL, formatDate } from '../../core/constants'\nimport { DebtChartData } from '../../core/utils/DebtUtils'\nimport { adjustBrightness, BASE_LINE_COLOR } from '../utils/DebtsChart'\nimport { formatCurrency } from '../../core/utils/NumberFormatting'\n\ninterface DebtsChartProps {\n sx?: any\n height?: number\n width?: number\n debts: DebtChartData[]\n hoveredDebtGuid?: string\n onClickArea?: () => void\n onHoverArea?: (debtGuid: string) => void\n}\n\ninterface DebtsChartSeries extends LineSeriesType {\n guid?: string | null\n}\n\nexport const DebtsChart: React.FC<DebtsChartProps> = ({\n sx,\n height = 500,\n width,\n debts,\n hoveredDebtGuid,\n onClickArea,\n onHoverArea,\n}) => {\n const theme = useTheme()\n const { onEvent } = useEvent()\n\n const possibleDebts = debts.filter((d) => !d.is_impossible)\n\n // Generate sorted array of unique dates\n const uniqueXValues = [\n ...new Set(\n possibleDebts.flatMap((debt) => debt.dataset.map((point) => new Date(point.x).getTime())),\n ),\n ]\n .sort((a, b) => a - b)\n .map((timestamp) => new Date(timestamp))\n\n // Normalize datasets with missing dates\n const normalizedDatasets = possibleDebts.map((debt) => {\n const datasetMap = new Map(debt.dataset.map((point) => [new Date(point.x).getTime(), point.y]))\n\n let lastY = datasetMap.get(uniqueXValues[0].getTime()) ?? 0\n const normalizedDataset = uniqueXValues.map((x) => {\n const y = datasetMap.get(x.getTime()) ?? lastY // Use last known value for missing points\n lastY = y\n return { x, y }\n })\n\n return { ...debt, dataset: normalizedDataset }\n })\n\n const initialTotalDebt = normalizedDatasets.reduce(\n (sum, debt) => sum + (debt.dataset[0]?.y ?? 0),\n 0,\n )\n\n const payoffLine = uniqueXValues.map((x, index) => {\n const linearRate = index / (uniqueXValues.length - 1)\n const y = initialTotalDebt * (1 - linearRate)\n return { x, y }\n })\n\n const yMax = Math.ceil(initialTotalDebt / 100) * 100\n const xData = uniqueXValues\n\n const series: DebtsChartSeries[] = normalizedDatasets.map((debt, index) => {\n const brightnessFactor = 1 - (index / normalizedDatasets.length) * 0.5\n const seriesColor = adjustBrightness(BASE_LINE_COLOR, brightnessFactor)\n\n return {\n id: `debt-${index}`,\n guid: debt.guid,\n label: debt.name,\n data: debt.dataset.map((point) => point.y),\n color: seriesColor,\n curve: 'linear',\n type: 'line',\n area: true,\n stack: 'total',\n showMark: false,\n }\n })\n\n series.push({\n id: 'payoff-line',\n label: 'Payoff Line',\n data: payoffLine.map((point) => point.y),\n color: theme.palette.grey[700],\n curve: 'linear',\n type: 'line',\n stack: undefined,\n showMark: false,\n disableHighlight: true,\n })\n\n const getIndexByGuid = (guid: string) => {\n return series.findIndex((s) => s?.guid === guid)\n }\n\n const onHighlightChange = (line: HighlightItemData | null) => {\n const highlightedGuid = series.find((s) => s.id === line?.seriesId)?.guid\n onHoverArea?.(highlightedGuid ?? '')\n }\n\n const onAreaClick = (\n _event: React.MouseEvent<SVGElement, MouseEvent>,\n lineItemIdentifier: LineItemIdentifier,\n ) => {\n onClickArea?.()\n const areaSeries = series.find((s) => s.id === lineItemIdentifier.seriesId)\n onEvent(ANALYTICS_EVENTS.DEBTS_CLICK_CHART_AREA, { account_guid: areaSeries?.guid })\n }\n\n return (\n <Box\n sx={{\n width: '100%',\n height: '100%',\n touchAction: 'pan-y',\n '& svg': {\n touchAction: 'pan-y',\n userSelect: 'none',\n },\n '& .recharts-wrapper': {\n touchAction: 'pan-y',\n },\n }}\n >\n <LineChart\n axisHighlight={{ x: 'none' }}\n disableLineItemHighlight={true}\n height={height}\n hideLegend={true}\n margin={{ bottom: 24, left: 32, right: 72, top: 48 }}\n onAreaClick={onAreaClick}\n onHighlightChange={onHighlightChange}\n series={series}\n skipAnimation={true}\n slotProps={{ tooltip: { trigger: 'none' } }}\n sx={{\n p: 4,\n '& .MuiBarLabel-root': {\n fontSize: 10,\n fontWeight: 600,\n },\n '& .MuiAreaElement-root': {\n opacity: 0.4,\n transition: 'opacity 0.3s ease',\n },\n '& .MuiAreaElement-root:hover': {\n opacity: 1,\n },\n '& .MuiLineElement-series-payoff-line': {\n strokeDasharray: '10 5',\n strokeWidth: 1,\n },\n [`& .MuiLineElement-series-debt-${getIndexByGuid(hoveredDebtGuid ?? '0')}`]: {\n opacity: 1,\n },\n [`& .MuiAreaElement-series-debt-${getIndexByGuid(hoveredDebtGuid ?? '0')}`]: {\n opacity: 1,\n },\n '& .MuiChartsAxis-tickLabel > tspan': {\n fontFamily: theme.typography.body2.fontFamily,\n },\n ...sx,\n }}\n width={width}\n xAxis={[\n {\n data: xData,\n disableTicks: true,\n min: uniqueXValues[0],\n scaleType: 'time',\n tickLabelMinGap: 24,\n valueFormatter: (value: Date) => formatDate(value, DATE_FORMATS_INTL.MONTH_SHORT_YEAR),\n },\n ]}\n yAxis={[\n {\n min: 0,\n max: yMax,\n disableTicks: true,\n valueFormatter: (value: number) => formatCurrency(value, '0a'),\n },\n ]}\n />\n </Box>\n )\n}\n","import { observer } from 'mobx-react-lite'\n\nimport { useTheme } from '@mui/material'\nimport Card from '@mui/material/Card'\nimport CardContent from '@mui/material/CardContent'\nimport CardHeader from '@mui/material/CardHeader'\nimport { H3, Text } from '@mxenabled/mxui'\n\nimport { useGlobalCopyStore } from '../../../common'\nimport { useDebtsUiStore } from '../../hooks/useDebtsUiStore'\nimport { DebtsChart } from '../DebtsChart'\n\nconst DebtDetailsChart = () => {\n const theme = useTheme()\n const { debts: copy } = useGlobalCopyStore()\n const { selectedDebtChartData } = useDebtsUiStore()\n\n return (\n <>\n <Card\n sx={{\n '& .MuiCardContent-root:last-child': {\n pb: 0,\n },\n }}\n >\n <CardHeader sx={{ pb: 0 }} title={<H3 sx={{ pb: 4 }}>{copy.details_chart_title}</H3>} />\n <CardContent sx={{ p: 0 }}>\n <DebtsChart debts={[selectedDebtChartData]} height={250} />\n </CardContent>\n </Card>\n <Text\n color={theme.palette.text.secondary}\n sx={{ textAlign: 'center', px: 8, py: 12 }}\n variant=\"body2\"\n >\n {copy.details_chart_description}\n </Text>\n </>\n )\n}\n\nexport default observer(DebtDetailsChart)\n","import React from 'react'\nimport { observer } from 'mobx-react-lite'\n\nimport { useTheme } from '@mui/material'\nimport List from '@mui/material/List'\nimport Stack from '@mui/material/Stack'\nimport { Text } from '@mxenabled/mxui'\n\nimport { ANALYTICS_EVENTS, useEvent, useGlobalCopyStore } from '../../../common'\nimport { DATE_FORMATS_INTL, formatDate } from '../../../core/constants'\nimport { useDebtsUiStore } from '../../hooks/useDebtsUiStore'\nimport { formatCurrency } from '../../../core/utils/NumberFormatting'\n\nconst DebtScheduleTab = () => {\n const theme = useTheme()\n const { onEvent } = useEvent()\n const { debts: copy } = useGlobalCopyStore()\n const { selectedDebtChartData: debt, showCompleted, showError } = useDebtsUiStore()\n\n React.useEffect(() => onEvent(ANALYTICS_EVENTS.DEBT_SCHEDULE_VIEW), [])\n\n return (\n <List>\n {/* Error/Complete Message */}\n {showError || showCompleted ? (\n <Text\n color={theme.palette.secondary.main}\n component=\"div\"\n sx={{ p: 32, textAlign: 'center' }}\n variant=\"body2\"\n >\n {showError ? copy.schedule_error_message : copy.schedule_complete_message}\n </Text>\n ) : (\n <>\n {/* Payment Schedule Header */}\n <Stack flexDirection=\"row\" justifyContent=\"space-between\" sx={{ pt: 12, px: 24, pb: 8 }}>\n <Text bold={true} variant=\"caption\">\n {copy.schedule_month_heading}\n </Text>\n <Text bold={true} variant=\"caption\">\n {copy.schedule_amount_heading}\n </Text>\n </Stack>\n {/* Payment Schedule Rows */}\n {debt.dataset.slice(1).map(({ x: month, y: balance, payment }) => (\n <Stack bgcolor={theme.palette.background.paper} key={String(month)}>\n <Stack alignItems=\"center\" flexDirection=\"row\" pl={24}>\n <Stack\n sx={{\n borderBottom: `1px solid ${theme.palette.divider}`,\n flexDirection: 'row',\n flexGrow: 1,\n py: 14,\n pr: 24,\n }}\n >\n <Stack flexGrow={1}>\n <Text bold={true} variant=\"body1\">\n {formatDate(month, DATE_FORMATS_INTL.MONTH_YEAR)}\n </Text>\n <Text color={theme.palette.secondary.main} variant=\"caption\">\n {copy.schedule_month_label}\n </Text>\n </Stack>\n <Stack>\n <Text bold={true} variant=\"body1\">\n {formatCurrency(balance, '0,0.00')}\n </Text>\n <Text\n bold={true}\n color={theme.palette.success.main}\n textAlign=\"end\"\n variant=\"tiny\"\n >\n {`+${formatCurrency(payment, '0,0')}`}\n </Text>\n </Stack>\n </Stack>\n </Stack>\n </Stack>\n ))}\n {/* Debt Payoff Row */}\n <Stack bgcolor=\"background.paper\">\n <Stack\n sx={{\n alignItems: 'center',\n flexDirection: 'row',\n flexGrow: 1,\n py: 14,\n px: 24,\n }}\n >\n <Text flexGrow={1} variant=\"body1\">\n {copy.schedule_payoff_label}\n </Text>\n <Text variant=\"body1\">-</Text>\n </Stack>\n </Stack>\n </>\n )}\n </List>\n )\n}\n\nexport default observer(DebtScheduleTab)\n","import React from 'react'\nimport { observer } from 'mobx-react-lite'\n\nimport TextField from '@mui/material/TextField'\n\nimport {\n ListItemAction,\n useAccountStore,\n useGlobalCopyStore,\n useEvent,\n ANALYTICS_EVENTS,\n} from '../../../common'\nimport { DebtChartData } from '../../../core/utils/DebtUtils'\nimport { formatPercentage } from '../../../core/utils/NumberFormatting'\n\ninterface InterestRateActionProps {\n debt: DebtChartData\n}\n\nexport const InterestRateAction = observer(({ debt }: InterestRateActionProps) => {\n const { debts: copy } = useGlobalCopyStore()\n const { updateAccount } = useAccountStore()\n const { onEvent } = useEvent()\n\n const [rate, setRate] = React.useState<number>(debt.interest_rate ?? 0)\n const isInvalid = rate < 0\n\n const handleSave = async () => {\n await updateAccount({ ...debt.account, interest_rate: rate })\n debt.interest_rate = rate\n onEvent(ANALYTICS_EVENTS.DEBTS_SAVE_RATE_ACTION, { account_guid: debt.guid })\n }\n\n const handleCancel = () => {\n setTimeout(() => {\n setRate(debt.interest_rate ?? 0)\n }, 250)\n }\n\n return (\n <ListItemAction\n isSaveDisabled={isInvalid}\n label={`${copy.details_interest_rate} (%)`}\n onCancel={handleCancel}\n onSave={handleSave}\n primaryText={copy.details_interest_rate}\n secondaryText={formatPercentage(Number(debt.interest_rate) / 100) as string}\n zeroStateText={!debt.interest_rate ? copy.add_interest_rate : undefined}\n >\n <TextField\n error={isInvalid}\n fullWidth={true}\n onChange={(e) =>\n setRate(!isNaN(parseFloat(e.target.value)) ? parseFloat(e.target.value) : 0)\n }\n type=\"number\"\n value={rate}\n />\n </ListItemAction>\n )\n})\n","import React from 'react'\nimport { observer } from 'mobx-react-lite'\n\nimport {\n CurrencyInput,\n ListItemAction,\n useAccountStore,\n useGlobalCopyStore,\n useEvent,\n ANALYTICS_EVENTS,\n} from '../../../common'\nimport { DebtChartData } from '../../../core/utils/DebtUtils'\nimport { formatCurrency } from '../../../core/utils/NumberFormatting'\n\ninterface MonthlyPaymentActionProps {\n debt: DebtChartData\n}\n\nexport const MonthlyPaymentAction = observer(({ debt }: MonthlyPaymentActionProps) => {\n const { debts: copy } = useGlobalCopyStore()\n const { updateAccount } = useAccountStore()\n const { onEvent } = useEvent()\n\n const [payment, setPayment] = React.useState<number>(debt.monthly_payment ?? 0)\n const isInvalid = payment < 0 || payment > 99999999.99\n\n const handleSave = async () => {\n await updateAccount({ ...debt.account, minimum_payment: payment })\n debt.monthly_payment = payment\n onEvent(ANALYTICS_EVENTS.DEBTS_SAVE_PAYMENT_ACTION, { account_guid: debt.guid })\n }\n\n const handleCancel = () => {\n setTimeout(() => {\n setPayment(debt.monthly_payment ?? 0)\n }, 250)\n }\n\n return (\n <ListItemAction\n isSaveDisabled={isInvalid}\n label={copy.details_monthly_payment}\n onCancel={handleCancel}\n onSave={handleSave}\n primaryText={copy.details_monthly_payment}\n secondaryText={formatCurrency(debt.monthly_payment, '0,0')}\n zeroStateText={!debt.monthly_payment ? copy.add_monthly_payment : undefined}\n >\n <CurrencyInput\n amount={payment}\n autoFocus={true}\n error={isInvalid}\n fullWidth={true}\n minAmount={0}\n setAmount={(v) => setPayment(!isNaN(Number(v)) ? Number(v) : payment)}\n sx={{ '.MuiTypography-body1': { p: 0 } }}\n />\n </ListItemAction>\n )\n})\n","import React from 'react'\nimport { observer } from 'mobx-react-lite'\n\nimport {\n CurrencyInput,\n ListItemAction,\n useAccountStore,\n useGlobalCopyStore,\n useEvent,\n ANALYTICS_EVENTS,\n} from '../../../common'\nimport { DebtChartData } from '../../../core/utils/DebtUtils'\nimport { formatCurrency } from '../../../core/utils/NumberFormatting'\n\ninterface OriginalBalanceActionProps {\n debt: DebtChartData\n}\n\nexport const OriginalBalanceAction = observer(({ debt }: OriginalBalanceActionProps) => {\n const { debts: copy } = useGlobalCopyStore()\n const { updateAccount } = useAccountStore()\n const { onEvent } = useEvent()\n\n const [balance, setBalance] = React.useState<number>(debt.original_balance ?? 0)\n const isInvalid = balance < 0 || balance > 99999999.99\n\n const handleSave = async () => {\n await updateAccount({ ...debt.account, original_balance: balance })\n debt.original_balance = balance\n onEvent(ANALYTICS_EVENTS.DEBTS_SAVE_BALANCE_ACTION, { account_guid: debt.guid })\n }\n\n const handleCancel = () => {\n setTimeout(() => {\n setBalance(debt.original_balance ?? 0)\n }, 250)\n }\n\n return (\n <ListItemAction\n isSaveDisabled={isInvalid}\n label={copy.details_original_balance}\n onCancel={handleCancel}\n onSave={handleSave}\n primaryText={copy.details_original_balance}\n secondaryText={formatCurrency(debt.original_balance, '0,0')}\n zeroStateText={!debt.original_balance ? copy.add_original_balance : undefined}\n >\n <CurrencyInput\n amount={balance}\n autoFocus={true}\n error={isInvalid}\n fullWidth={true}\n minAmount={0}\n setAmount={(v) => setBalance(!isNaN(Number(v)) ? Number(v) : balance)}\n sx={{ '.MuiTypography-body1': { p: 0 } }}\n />\n </ListItemAction>\n )\n})\n","import React from 'react'\nimport { observer } from 'mobx-react-lite'\n\nimport Divider from '@mui/material/Divider'\nimport Stack from '@mui/material/Stack'\n\nimport { useDebtsUiStore } from '../../hooks/useDebtsUiStore'\nimport { ANALYTICS_EVENTS, useEvent } from '../../../common'\n\nimport { InterestRateAction as GoalInterestRateAction } from '../../../goals/components/actions/InterestRateAction'\nimport { MonthlyPaymentAction as GoalMonthlyPaymentAction } from '../../../goals/components/actions/MonthlyPaymentAction'\nimport { OriginalBalanceAction as GoalOriginalBalanceAction } from '../../../goals/components/actions/OriginalBalanceAction'\nimport { InterestRateAction as DebtInterestRateAction } from '../actions/InterestRateAction'\nimport { MonthlyPaymentAction as DebtMonthlyPaymentAction } from '../actions/MonthlyPaymentAction'\nimport { OriginalBalanceAction as AccountOriginalBalanceAction } from '../actions/OriginalBalanceAction'\n\nconst DebtDetailsTab = () => {\n const { onEvent } = useEvent()\n const { selectedDebtChartData: debt } = useDebtsUiStore()\n\n React.useEffect(() => onEvent(ANALYTICS_EVENTS.DEBT_DETAILS_VIEW), [])\n\n return (\n <Stack bgcolor=\"background.paper\">\n {debt?.goal && (\n <>\n <GoalMonthlyPaymentAction goal={debt.goal} />\n <Divider />\n\n <GoalInterestRateAction goal={debt.goal} />\n <Divider />\n\n <GoalOriginalBalanceAction goal={debt.goal} />\n <Divider />\n </>\n )}\n\n {!debt?.goal && debt?.account && (\n <>\n <DebtMonthlyPaymentAction debt={debt} />\n <Divider />\n\n <DebtInterestRateAction debt={debt} />\n <Divider />\n\n <AccountOriginalBalanceAction debt={debt} />\n <Divider />\n </>\n )}\n </Stack>\n )\n}\n\nexport default observer(DebtDetailsTab)\n","import React from 'react'\nimport { observer } from 'mobx-react-lite'\n\nimport Alert from '@mui/material/Alert'\nimport AlertTitle from '@mui/material/AlertTitle'\nimport Paper from '@mui/material/Paper'\nimport Stack from '@mui/material/Stack'\n\nimport { Text } from '@mxenabled/mxui'\nimport { Error as ErrorIcon, CheckCircle as CompleteIcon } from '@mxenabled/mx-icons'\n\nimport { useGlobalCopyStore } from '../../../common'\nimport { useDebtsUiStore } from '../../hooks/useDebtsUiStore'\n\ninterface DebtStatusCardProps {\n setTabValue: (val: number) => void\n sx?: any\n}\n\nconst DebtStatusCard: React.FC<DebtStatusCardProps> = ({ setTabValue, sx }) => {\n const { debts: copy } = useGlobalCopyStore()\n const { showError, showCompleted } = useDebtsUiStore()\n\n React.useEffect(() => {\n if (showError) {\n setTabValue(1)\n }\n }, [showError])\n\n if (!showError && !showCompleted) return <></>\n\n return (\n <Stack gap={16}>\n <Paper sx={{ my: 16, mx: 24, ...sx }}>\n <Alert\n icon={\n showError ? <ErrorIcon filled={true} /> : <CompleteIcon color=\"success\" filled={true} />\n }\n severity=\"error\"\n sx={{\n alignItems: 'start',\n borderLeft: 5,\n borderRadius: 1,\n borderColor: showError ? 'error.main' : 'success.main',\n color: 'text.primary',\n '&.MuiPaper-root': {\n backgroundColor: 'background.paper',\n },\n }}\n >\n <AlertTitle sx={{ fontWeight: 600, marginTop: 2 }} variant=\"body1\">\n {showError ? copy.status_error_title : copy.status_complete_title}\n </AlertTitle>\n <Text component=\"p\" variant=\"subtitle2\">\n {showError ? copy.status_error_description : copy.status_complete_description}\n </Text>\n </Alert>\n </Paper>\n {showError && (\n <Paper sx={{ mb: 16, mt: 100, mx: 24, ...sx }}>\n <Alert\n icon={<></>}\n severity=\"error\"\n sx={{\n borderRadius: 2,\n color: 'text.primary',\n '&.MuiPaper-root': {\n backgroundColor: 'background.paper',\n },\n }}\n >\n <AlertTitle sx={{ fontWeight: 600, marginTop: 2 }} variant=\"body1\">\n {copy.status_info_title}\n </AlertTitle>\n <Text component=\"p\" variant=\"subtitle2\">\n {copy.status_info_description}\n </Text>\n </Alert>\n </Paper>\n )}\n </Stack>\n )\n}\n\nexport default observer(DebtStatusCard)\n","import React from 'react'\nimport { observer } from 'mobx-react-lite'\n\nimport Tab from '@mui/material/Tab'\nimport Tabs from '@mui/material/Tabs'\n\nimport { useGlobalCopyStore, TabContentContainer } from '../../../common'\nimport { useDebtsUiStore } from '../../hooks/useDebtsUiStore'\n\nimport DebtScheduleTab from './DebtScheduleTab'\nimport DebtDetailsTab from './DebtDetailsTab'\nimport DebtStatusCard from './DebtStatusCard'\n\nconst DebtDetailsContent = () => {\n const { debts: copy } = useGlobalCopyStore()\n const { showError, showCompleted } = useDebtsUiStore()\n const [tabValue, setTabValue] = React.useState(0)\n\n return (\n <>\n {(showError || showCompleted) && (\n <DebtStatusCard setTabValue={setTabValue} sx={{ mt: -24 }} />\n )}\n <Tabs\n aria-label={copy.details_tabs_aria_label}\n centered={true}\n onChange={(_, val) => setTabValue(val)}\n textColor=\"primary\"\n value={tabValue}\n variant=\"fullWidth\"\n >\n <Tab\n aria-controls=\"debt-schedule-tabpanel-0\"\n id=\"debt-schedule-tab-0\"\n label={copy.schedule_tab_label}\n />\n <Tab\n aria-controls=\"debt-details-tabpanel-1\"\n id=\"debt-details-tab-1\"\n label={copy.details_tab_label}\n />\n </Tabs>\n\n <TabContentContainer index={0} name=\"debt-schedule\" value={tabValue}>\n <DebtScheduleTab />\n </TabContentContainer>\n\n <TabContentContainer index={1} name=\"debt-details\" value={tabValue}>\n <DebtDetailsTab />\n </TabContentContainer>\n </>\n )\n}\n\nexport default observer(DebtDetailsContent)\n","import Stack from '@mui/material/Stack'\n\nimport { Drawer, useGlobalCopyStore } from '../../common'\nimport { useDebtsUiStore } from '../hooks/useDebtsUiStore'\n\nimport AccountDetailsHeader from '../../accounts/components/detailsdrawer/Accounts/AccountDetailsHeader'\nimport DebtDetailsChart from './debtsdrawer/DebtDetailsChart'\nimport DebtDetailsContent from './debtsdrawer/DebtDetailsContent'\n\ninterface DebtDrawerProps {\n isOpen: boolean\n onClose: () => void\n}\n\nconst DebtDrawer = ({ isOpen, onClose }: DebtDrawerProps) => {\n const { debts: copy } = useGlobalCopyStore()\n const { showError, showCompleted } = useDebtsUiStore()\n const headerChart = showError || showCompleted ? <></> : <DebtDetailsChart />\n\n return (\n <Drawer\n ariaLabelClose={copy.details_close_aria}\n isOpen={isOpen}\n onClose={onClose}\n title={copy.details_title}\n >\n <Stack bgcolor=\"background.default\">\n <AccountDetailsHeader customDetailsChart={headerChart} />\n <DebtDetailsContent />\n </Stack>\n </Drawer>\n )\n}\n\nexport default DebtDrawer\n","import React from 'react'\nimport { observer } from 'mobx-react-lite'\n\nimport {\n CurrencyInput,\n ListItemAction,\n useGlobalCopyStore,\n useEvent,\n ANALYTICS_EVENTS,\n useGoalStore,\n} from '../../../common'\nimport { formatCurrency } from '../../../core/utils/NumberFormatting'\n\nexport const ExtraPaymentAction = observer(() => {\n const { debts: copy } = useGlobalCopyStore()\n const { monthlyCashFlowProfile, updateMonthlyCashFlowProfile } = useGoalStore()\n const { onEvent } = useEvent()\n\n const [payment, setPayment] = React.useState<number>(monthlyCashFlowProfile?.extra_payment ?? 0)\n const isInvalid = payment < 0 || payment > 99999999.99\n\n const handleSave = async () => {\n if (monthlyCashFlowProfile) {\n await updateMonthlyCashFlowProfile({ ...monthlyCashFlowProfile, extra_payment: payment })\n monthlyCashFlowProfile.extra_payment = payment\n onEvent(ANALYTICS_EVENTS.DEBTS_SAVE_PAYDOWN_ACTION, {\n user_guid: monthlyCashFlowProfile?.user_guid,\n })\n }\n }\n\n const handleCancel = () => {\n setTimeout(() => {\n setPayment(monthlyCashFlowProfile?.extra_payment ?? 0)\n }, 250)\n }\n\n return (\n <ListItemAction\n isSaveDisabled={isInvalid}\n label={copy.paydown_drawer_extra_payment}\n onCancel={handleCancel}\n onSave={handleSave}\n primaryText={copy.paydown_drawer_extra_payment}\n secondaryText={formatCurrency(monthlyCashFlowProfile?.extra_payment, '0,0')}\n zeroStateText={!monthlyCashFlowProfile?.extra_payment ? copy.add_extra_payment : undefined}\n >\n <CurrencyInput\n amount={payment}\n autoFocus={true}\n error={isInvalid}\n fullWidth={true}\n minAmount={0}\n setAmount={(v) => setPayment(!isNaN(Number(v)) ? Number(v) : payment)}\n sx={{ '.MuiTypography-body1': { p: 0 } }}\n />\n </ListItemAction>\n )\n})\n","import { observer } from 'mobx-react-lite'\n\nimport Stack from '@mui/material/Stack'\nimport { P, Text } from '@mxenabled/mxui'\n\nimport { useDebtStore, useGlobalCopyStore, useGoalStore } from '../../../common'\nimport { ExtraPaymentAction } from '../actions/ExtraPaymentAction'\nimport { formatCurrency } from '../../../core/utils/NumberFormatting'\n\nconst PaydownContent = () => {\n const { debts: copy } = useGlobalCopyStore()\n const { totalMonthlyPayments } = useDebtStore()\n const { monthlyCashFlowProfile } = useGoalStore()\n\n const totalContributions = totalMonthlyPayments + Number(monthlyCashFlowProfile?.extra_payment)\n\n return (\n <Stack sx={{ backgroundColor: 'background.default', height: '100%' }}>\n <Stack p={24}>\n <Stack alignItems=\"center\" gap={4} mb={24}>\n <Text variant=\"body1\">{copy.paydown_drawer_mimimum_label}</Text>\n <P bold={true} variant=\"h1\">\n {formatCurrency(totalMonthlyPayments, '0,0')}\n </P>\n <Text textAlign=\"center\" truncate={false} variant=\"body2\" width={208}>\n {copy.paydown_drawer_minimum_info}\n </Text>\n </Stack>\n <Stack>\n <Text variant=\"h3\">{copy.paydown_drawer_subtitle}</Text>\n <Text truncate={false} variant=\"subtitle2\">\n {copy.paydown_drawer_description}\n </Text>\n </Stack>\n </Stack>\n <Stack sx={{ backgroundColor: 'background.paper' }}>\n <ExtraPaymentAction />\n </Stack>\n <Stack flexDirection=\"row-reverse\" px={24} py={12}>\n <Stack gap={4}>\n <Text variant=\"body2\">{copy.paydown_drawer_total_payment}</Text>\n <Text bold={true} textAlign=\"right\" variant=\"body1\">\n {formatCurrency(totalContributions, '0,0')}\n </Text>\n </Stack>\n </Stack>\n </Stack>\n )\n}\n\nexport default observer(PaydownContent)\n","import { Drawer, useGlobalCopyStore } from '../../common'\nimport PaydownContent from './debtspaydown/PaydownContent'\n\ninterface PaydownDrawerProps {\n isOpen: boolean\n onClose: () => void\n}\n\nconst PaydownDrawer = ({ isOpen, onClose }: PaydownDrawerProps) => {\n const { debts: copy } = useGlobalCopyStore()\n\n return (\n <Drawer\n ariaLabelClose={copy.paydown_drawer_close_aria}\n isOpen={isOpen}\n onClose={onClose}\n title={copy.paydown_drawer_title}\n >\n <PaydownContent />\n </Drawer>\n )\n}\n\nexport default PaydownDrawer\n","import { DebtChartData } from '../../core/utils/DebtUtils'\n\ntype PriorityDisplay = number | '!' | '✓'\n\nexport function priorityComparator(a: PriorityDisplay, b: PriorityDisplay) {\n const getWeight = (value: PriorityDisplay) => {\n if (typeof value === 'number') return value // Numbers sorted naturally\n if (value === '!') return Infinity - 1 // '!' comes after numbers\n if (value === '✓') return Infinity // '✓' comes last\n throw new Error('Unsupported value')\n }\n return getWeight(a) - getWeight(b) // Compare based on weights\n}\n\nexport function getPriorityValue(debt: DebtChartData) {\n if (debt.is_paid_off) return '✓'\n if (debt.priority === undefined || debt.is_impossible) return '!'\n return debt.priority\n}\n","import { GridCellParams } from '@mui/x-data-grid-pro'\nimport Box from '@mui/material/Box'\nimport { Text } from '@mxenabled/mxui'\n\nconst getColors = (priority: any) => {\n const colors = {\n text: '#121417',\n background: '#FFB252',\n }\n\n if (priority === '!') {\n colors.text = '#FFFFFF'\n colors.background = '#DF320C'\n }\n\n if (priority === '✓') {\n colors.text = '#FFFFFF'\n colors.background = '#09A57F'\n }\n\n return colors\n}\n\nexport const PriorityCell = (params: GridCellParams) => {\n const priority = String(params.formattedValue)\n const colors = getColors(priority)\n\n return (\n <Box\n sx={{\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n width: 20, // Adjust the size as needed\n height: 20,\n borderRadius: '50%',\n backgroundColor: colors.background,\n marginLeft: '10px',\n }}\n >\n <Text color={colors.text} fontWeight={700} variant=\"body2\">\n {priority}\n </Text>\n </Box>\n )\n}\n","import { GridCellParams } from '@mui/x-data-grid-pro'\nimport { InstitutionLogo, Text } from '@mxenabled/mxui'\nimport Stack from '@mui/material/Stack'\n\nimport { AccountTypeName, type Account } from '../../../core'\n\nexport const AccountCell = (params: GridCellParams) => {\n const account = params.row.account as Account\n const accountType = AccountTypeName[account.account_type]\n\n return (\n <Stack alignItems=\"center\" flexDirection=\"row\">\n <InstitutionLogo\n alt={`${account.institutionName}`}\n institutionGuid={account.institution_guid || ''}\n />\n <Stack ml={12}>\n <Text variant=\"body2\">{account.name}</Text>\n <Text variant=\"caption\">{accountType}</Text>\n </Stack>\n </Stack>\n )\n}\n\nexport default AccountCell\n","import React from 'react'\nimport { Stack, useTheme } from '@mui/material'\nimport { DataGridPro, GridColDef, GridSortModel } from '@mui/x-data-grid-pro'\nimport Box from '@mui/material/Box'\nimport { Icon, Text } from '@mxenabled/mxui'\n\nimport { ANALYTICS_EVENTS, useEvent, useGlobalCopyStore, useScreenSize } from '../../common'\nimport { DATE_FORMATS_INTL, formatDate } from '../../core/constants'\n\nimport { DebtChartData } from '../../core/utils/DebtUtils'\nimport { getPriorityValue, priorityComparator } from '../utils/DebtsTable'\nimport { HeaderCell } from '../../trends/components/trendstable/HeaderCell'\nimport { PriorityCell } from './debtstable/PriorityCell'\nimport { AccountCell } from './debtstable/AccountCell'\nimport { formatCurrency } from '../../core/utils/NumberFormatting'\n\ninterface DebtsTableProps {\n sx?: any\n debts: DebtChartData[]\n hoveredDebtGuid: string\n onHoverRow: (debtGuid: string) => void\n onClickRow: () => void\n}\n\nexport const DebtsTable: React.FC<DebtsTableProps> = ({\n sx = {},\n debts,\n hoveredDebtGuid,\n onHoverRow,\n onClickRow,\n}) => {\n const theme = useTheme()\n const { onEvent } = useEvent()\n const { isMobile } = useScreenSize()\n const { debts: copy, common: commonCopy } = useGlobalCopyStore()\n\n const [sortModel, setSortModel] = React.useState<GridSortModel>([\n { field: 'priority', sort: 'asc' },\n ])\n\n const desktopColumns: GridColDef[] = [\n {\n field: 'priority',\n headerName: copy.table_column_priority,\n renderHeader: HeaderCell,\n renderCell: PriorityCell,\n sortComparator: priorityComparator,\n sortable: true,\n hideSortIcons: true,\n type: 'custom',\n align: 'left',\n headerAlign: 'left',\n minWidth: isMobile ? 67 : 72,\n flex: isMobile ? 0.2 : 0.4,\n },\n {\n field: 'account',\n headerName: copy.table_column_account,\n renderHeader: HeaderCell,\n renderCell: AccountCell,\n sortable: false,\n type: 'custom',\n align: 'left',\n headerAlign: 'left',\n minWidth: isMobile ? 180 : 225,\n flex: 1,\n },\n {\n field: 'balance',\n headerName: copy.table_column_balance,\n renderHeader: HeaderCell,\n renderCell: (params) => (\n <Text color={theme.palette.text.primary} variant=\"body2\">\n {formatCurrency(params.value, '0,0')}\n </Text>\n ),\n sortable: true,\n hideSortIcons: isMobile,\n type: 'number',\n align: 'left',\n headerAlign: 'left',\n minWidth: isMobile ? 70 : 122,\n flex: isMobile ? 0.4 : 0.6,\n },\n {\n field: 'interest_rate',\n headerName: copy.table_column_interest_rate,\n renderHeader: HeaderCell,\n renderCell: (params) => (\n <Text color={theme.palette.text.primary} variant=\"body2\">\n {!isNaN(params.value) ? `${Number(params.value).toFixed(2)}%` : '---'}\n </Text>\n ),\n sortable: true,\n hideSortIcons: isMobile,\n type: 'number',\n align: 'left',\n headerAlign: 'left',\n minWidth: 122,\n flex: 0.6,\n },\n {\n field: 'projected_payoff_date',\n headerName: copy.table_column_payoff_date,\n renderHeader: HeaderCell,\n renderCell: (params) => (\n <Text color={theme.palette.text.primary} variant=\"body2\">\n {params.value ? formatDate(params.value, DATE_FORMATS_INTL.MONTH_SHORT_YEAR) : '---'}\n </Text>\n ),\n sortable: true,\n hideSortIcons: isMobile,\n type: 'number',\n align: 'left',\n headerAlign: 'left',\n minWidth: 122,\n flex: 0.6,\n },\n {\n field: 'monthly_payment',\n headerName: copy.table_column_amount_due,\n renderHeader: HeaderCell,\n renderCell: (params) => (\n <Text color={theme.palette.text.primary} variant=\"body2\">\n {typeof params.value === 'number' ? formatCurrency(params.value, '0,0') : '---'}\n </Text>\n ),\n sortable: true,\n hideSortIcons: isMobile,\n type: 'number',\n align: 'left',\n headerAlign: 'left',\n minWidth: 122,\n flex: 0.6,\n },\n ]\n\n const mobileColumns: GridColDef[] = [\n ...desktopColumns.slice(0, 3),\n {\n field: 'chevron',\n headerClassName: 'chevron-header',\n headerName: '',\n renderCell: () => (\n <Stack aria-label={commonCopy.see_details} role=\"button\">\n <Icon name=\"chevron_right\" />\n </Stack>\n ),\n sortable: false,\n hideSortIcons: true,\n type: 'custom',\n align: 'right',\n headerAlign: 'right',\n width: 20,\n },\n ]\n\n const rows = React.useMemo(() => {\n return debts.map((debt, idx) => ({\n ...debt,\n id: idx,\n priority: getPriorityValue(debt),\n }))\n }, [debts])\n\n const handleRowHover = (\n event: React.MouseEvent<HTMLDivElement> | React.TouchEvent<HTMLDivElement>,\n ) => {\n const target = event.target as HTMLElement\n const rowEl = target.closest('[data-id]')\n const debtIdx = rowEl?.getAttribute('data-id')\n const hoveredDebt = debts[Number(debtIdx)]\n onHoverRow?.(hoveredDebt?.guid ?? '')\n }\n\n const onMouseEnterRow = (event: React.MouseEvent<HTMLDivElement, MouseEvent>) => {\n // Only use hover on non-mobile devices\n if (!isMobile) {\n handleRowHover(event)\n }\n }\n\n const onRowInteraction = (\n event: React.MouseEvent<HTMLDivElement> | React.TouchEvent<HTMLDivElement>,\n ) => {\n // For mobile devices, use touch/click to highlight row\n if (isMobile) {\n handleRowHover(event)\n }\n }\n\n const getRowIdByGuid = (guid: string) => {\n return rows.find((r) => r.guid === guid)?.id\n }\n\n return (\n <Box\n sx={{\n height: 'auto',\n width: '100%',\n mt: '15px',\n overflowX: 'auto',\n overflowY: 'visible',\n boxShadow: 'none',\n ...sx,\n }}\n >\n <DataGridPro\n columns={isMobile ? mobileColumns : desktopColumns}\n disableColumnFilter={true}\n disableColumnMenu={true}\n hideFooter={true}\n initialState={{ sorting: { sortModel } }}\n onRowClick={(params) => {\n onClickRow()\n onEvent(ANALYTICS_EVENTS.DEBTS_CLICK_TABLE_ROW, { account_guid: params.row.guid })\n }}\n onSortModelChange={(newModel) => {\n setSortModel(newModel)\n onEvent(ANALYTICS_EVENTS.DEBTS_CLICK_TABLE_SORT)\n }}\n rows={rows}\n slotProps={{\n baseIconButton: { color: 'secondary', sx: { ml: 8 } },\n row: {\n onMouseEnter: onMouseEnterRow,\n onMouseLeave: () => !isMobile && onHoverRow?.(''),\n onTouchStart: onRowInteraction,\n onClick: isMobile ? onRowInteraction : undefined,\n },\n }}\n sortModel={sortModel}\n sortingOrder={['asc', 'desc']}\n sx={{\n '& .chevron-header': { display: 'none' },\n [`& .MuiDataGrid-row[data-id=\"${getRowIdByGuid(hoveredDebtGuid)}\"]`]: {\n backgroundColor: theme.palette.mode === 'light' ? '#f8f9fb' : '#1f2329',\n filter: 'brightness(98%)',\n },\n }}\n />\n </Box>\n )\n}\n","import React from 'react'\n\nimport Button from '@mui/material/Button'\nimport IconButton from '@mui/material/IconButton'\nimport { Icon } from '@mxenabled/mxui'\n\ninterface DebtsPrioriyButtonProps {\n buttonText: string\n disabled?: boolean\n isDesktop?: boolean\n isOpen: boolean\n onClick: (event: React.MouseEvent<HTMLButtonElement>) => void\n}\n\nexport const DebtsPriorityButton = ({\n buttonText,\n disabled,\n isDesktop = false,\n isOpen,\n onClick,\n}: DebtsPrioriyButtonProps) => {\n const icon = isOpen ? 'unfold_less' : 'unfold_more'\n\n return isDesktop ? (\n <Button\n aria-controls=\"prioritize-debts\"\n aria-describedby=\"prioritize-debts\"\n aria-haspopup={true}\n aria-label=\"prioritize-debts\"\n disabled={disabled}\n onClick={onClick}\n startIcon={<Icon name={icon} />}\n sx={{ justifyContent: 'start' }}\n >\n {buttonText}\n </Button>\n ) : (\n <IconButton\n aria-controls=\"prioritize-debts\"\n aria-describedby=\"prioritize-debts\"\n aria-haspopup={true}\n aria-label=\"prioritize-debts\"\n disabled={disabled}\n onClick={onClick}\n >\n <Icon name={icon} />\n </IconButton>\n )\n}\n","import { observer } from 'mobx-react-lite'\n\nimport List from '@mui/material/List'\nimport ListItem from '@mui/material/ListItem'\nimport Popover from '@mui/material/Popover'\n\nimport { Text } from '@mxenabled/mxui'\nimport { CheckCircle as SelectedIcon } from '@mxenabled/mx-icons'\n\nimport { useGlobalCopyStore, useEvent, ANALYTICS_EVENTS } from '../../../common'\nimport { useDebtsUiStore } from '../../hooks/useDebtsUiStore'\nimport { DebtPriority } from '../../../core/constants/Debts'\n\ninterface DebtsPriorityPopoverProps {\n buttonEl: HTMLButtonElement | null\n onClose: () => void\n}\n\nexport const DebtsPriorityPopover = observer(({ buttonEl, onClose }: DebtsPriorityPopoverProps) => {\n const { onEvent } = useEvent()\n const { debts: copy } = useGlobalCopyStore()\n const { selectedDebtPriority, setSelectedDebtPriority } = useDebtsUiStore()\n\n const isOpen = Boolean(buttonEl)\n\n const options = [\n {\n priority: DebtPriority.FASTEST_PAYOFF_FIRST,\n text: copy.priority_sort_fastest_payoff,\n },\n {\n priority: DebtPriority.HIGHEST_INTEREST,\n text: copy.priority_sort_highest_interest,\n },\n {\n priority: DebtPriority.LOWEST_BALANCE,\n text: copy.priority_sort_lowest_balance,\n },\n {\n priority: DebtPriority.HIGHEST_BALANCE,\n text: copy.priority_sort_highest_balance,\n },\n ]\n\n const handleClick = (priority: DebtPriority) => {\n setSelectedDebtPriority(priority)\n onEvent(ANALYTICS_EVENTS.DEBTS_CLICK_PRIORITY, { debts_priority: priority })\n }\n\n return (\n <Popover\n anchorEl={buttonEl}\n anchorOrigin={{\n vertical: 'bottom',\n horizontal: 'left',\n }}\n id=\"prioritize-debts\"\n onClose={onClose}\n open={isOpen}\n transformOrigin={{\n vertical: 'top',\n horizontal: 'left',\n }}\n >\n <List>\n {options.map(({ priority, text }) => (\n <ListItem\n key={priority}\n onClick={() => handleClick(priority)}\n sx={{\n bgcolor: selectedDebtPriority === priority ? 'primary.main' : undefined,\n color: selectedDebtPriority === priority ? '#fff' : undefined,\n justifyContent: 'space-between',\n minHeight: 44,\n minWidth: 268,\n px: 24,\n py: 12,\n '&:hover': {\n bgcolor: 'background.highlight',\n cursor: 'pointer',\n color: 'text.primary',\n },\n }}\n >\n <Text color=\"inherit\" variant=\"body2\">\n {text}\n </Text>\n {selectedDebtPriority === priority && (\n <SelectedIcon color=\"inherit\" filled={true} fontSize=\"small\" />\n )}\n </ListItem>\n ))}\n </List>\n </Popover>\n )\n})\n","import React from 'react'\nimport { observer } from 'mobx-react-lite'\n\nimport { Stack } from '@mui/material'\n\nimport { DebtsPriorityButton } from '../debtspriority/DebtsPriorityButton'\nimport { DebtsPriorityPopover } from '../debtspriority/DebtsPrioriyPopover'\n\nimport { useGlobalCopyStore, useEvent, ANALYTICS_EVENTS } from '../../../common'\nimport { useDebtsUiStore } from '../../hooks/useDebtsUiStore'\nimport { DebtPriority } from '../../../core/constants/Debts'\n\ninterface DebtsPriorityActionProps {\n disabled?: boolean\n isDesktop?: boolean\n}\n\nexport const DebtsPriorityAction = observer(({ disabled, isDesktop }: DebtsPriorityActionProps) => {\n const { onEvent } = useEvent()\n const { debts: copy } = useGlobalCopyStore()\n const { selectedDebtPriority } = useDebtsUiStore()\n\n const [buttonEl, setButtonEl] = React.useState<HTMLButtonElement | null>(null)\n\n const handleOpen = (event: React.MouseEvent<HTMLButtonElement>) => {\n setButtonEl(event.currentTarget)\n onEvent(ANALYTICS_EVENTS.DEBTS_CLICK_PRIORITIZE)\n }\n\n const handleClose = () => {\n setButtonEl(null)\n }\n\n const isOpen = Boolean(buttonEl)\n\n const buttonText = React.useMemo(() => {\n const priorityMap = {\n [DebtPriority.FASTEST_PAYOFF_FIRST]: copy.priority_sort_fastest_payoff,\n [DebtPriority.HIGHEST_INTEREST]: copy.priority_sort_highest_interest,\n [DebtPriority.HIGHEST_BALANCE]: copy.priority_sort_highest_balance,\n [DebtPriority.LOWEST_BALANCE]: copy.priority_sort_lowest_balance,\n }\n return priorityMap[selectedDebtPriority] ?? copy.priority_sort_lowest_balance\n }, [selectedDebtPriority])\n\n return (\n <Stack>\n <DebtsPriorityButton\n buttonText={buttonText}\n disabled={disabled}\n isDesktop={isDesktop}\n isOpen={isOpen}\n onClick={handleOpen}\n />\n <DebtsPriorityPopover buttonEl={buttonEl} onClose={handleClose} />\n </Stack>\n )\n})\n","import { observer } from 'mobx-react-lite'\n\nimport { useDebtStore, useGlobalCopyStore, useGoalStore } from '../../../common'\nimport Button from '@mui/material/Button'\nimport Stack from '@mui/material/Stack'\nimport { formatCurrency } from '../../../core/utils/NumberFormatting'\nimport { buildDynamicCopy } from '../../../core/utils/Localization'\n\ninterface PaydownButtonProps {\n disabled?: boolean\n onClick: (event: React.MouseEvent<HTMLButtonElement>) => void\n}\n\nexport const PaydownButton = observer(({ disabled, onClick }: PaydownButtonProps) => {\n const { debts: copy } = useGlobalCopyStore()\n const { totalMonthlyPayments } = useDebtStore()\n const { monthlyCashFlowProfile } = useGoalStore()\n\n const totalContributions = totalMonthlyPayments + Number(monthlyCashFlowProfile?.extra_payment)\n const buttonText = copy.paydown_button_long\n return (\n <Stack alignItems=\"center\" sx={{ flex: 1, flexShrink: 0 }}>\n <Button\n aria-controls=\"extra-paydown\"\n aria-describedby=\"extra-paydown\"\n aria-haspopup={true}\n aria-label=\"extra-paydown\"\n disabled={disabled}\n onClick={onClick}\n sx={{ justifyContent: 'start' }}\n >\n {buildDynamicCopy(buttonText, formatCurrency(totalContributions, '0,0')) as string}\n </Button>\n </Stack>\n )\n})\n","import React from 'react'\nimport { observer } from 'mobx-react-lite'\nimport Stack from '@mui/material/Stack'\n\nimport {\n ANALYTICS_EVENTS,\n ConnectDrawer,\n EmptyState,\n Loader,\n useAccountStore,\n useAppConfig,\n useDebtStore,\n useEvent,\n useGlobalCopyStore,\n useGlobalUiStore,\n useGoalStore,\n useScreenSize,\n useWidgetLoadTimer,\n WidgetContainer,\n} from '../common'\nimport { AccountType, WidgetProps } from '../core'\n\nimport SnowballCard from './components/SnowballCard'\nimport SnowballDrawer from './components/SnowballDrawer'\nimport DebtDrawer from './components/DebtDrawer'\nimport PaydownDrawer from './components/PaydownDrawer'\nimport { DebtsChart } from './components/DebtsChart'\nimport { DebtsTable } from './components/DebtsTable'\nimport { DebtsPriorityAction } from './components/actions/DebtsPriorityAction'\nimport { buildEmptyStateProps, transformDebtsChartData } from '../core/utils/DebtUtils'\nimport { useAccountUiStore } from '../accounts'\nimport { useDebtsUiStore } from './hooks/useDebtsUiStore'\nimport { PaydownButton } from './components/debtspaydown/PaydownButton'\n\nconst DebtsWidget: React.FC<WidgetProps> = ({ onBackClick, onMenuClick, sx }) => {\n const { isDesktop, isMobile } = useScreenSize()\n const { connect: connectCopy, debts: copy } = useGlobalCopyStore()\n const { onEvent } = useEvent()\n const {\n config: { show_connections_widget_in_master },\n } = useAppConfig()\n const { isInitialized } = useGlobalUiStore()\n const { setSelectedAccount } = useAccountUiStore()\n const { selectedDebtPriority, setSelectedDebtChartData } = useDebtsUiStore()\n\n const {\n isAccountDataLoaded,\n loadAccountData,\n detailedAccounts,\n visibleDebtAccounts: accounts,\n } = useAccountStore()\n const { isAllGoalDataLoaded, loadGoalData, monthlyCashFlowProfile } = useGoalStore()\n const { debts } = useDebtStore()\n\n const [isDebtDrawerOpen, setIsDebtDrawerOpen] = React.useState(false)\n const [isPaydownDrawerOpen, setIsPaydownDrawerOpen] = React.useState(false)\n const [isSnowballDrawerOpen, setIsSnowballDrawerOpen] = React.useState(false)\n const [hoveredDebtGuid, setHoveredDebtGuid] = React.useState('')\n const [showConnectWidget, setShowConnectWidget] = React.useState(false)\n\n useWidgetLoadTimer({\n widgetName: 'DebtsWidget',\n isLoaded: isAccountDataLoaded && isAllGoalDataLoaded,\n })\n\n const debtsChartData = React.useMemo(() => {\n const extraPaydown = monthlyCashFlowProfile?.extra_payment ?? 0\n return transformDebtsChartData(debts, selectedDebtPriority, extraPaydown)\n }, [debts, selectedDebtPriority, monthlyCashFlowProfile])\n\n React.useEffect(() => {\n if (!isAccountDataLoaded) {\n loadAccountData().finally()\n }\n onEvent(ANALYTICS_EVENTS.DEBTS_VIEW)\n }, [])\n\n React.useEffect(() => {\n if (isInitialized) {\n loadGoalData().finally()\n }\n }, [isInitialized])\n\n const onHoverDebt = (guid: string) => setHoveredDebtGuid(guid)\n\n const onClickDebt = () => {\n const account = accounts.find((a) => a.guid === hoveredDebtGuid)\n const chartData = debtsChartData.find((d) => d.guid === hoveredDebtGuid)\n if (account) setSelectedAccount(account)\n if (chartData) setSelectedDebtChartData(chartData)\n setIsDebtDrawerOpen(true)\n }\n\n const onClickAccountFilter = () => onEvent(ANALYTICS_EVENTS.DEBTS_CLICK_FILTER)\n\n const onClickSnowballCta = () => {\n setIsSnowballDrawerOpen(true)\n onEvent(ANALYTICS_EVENTS.DEBTS_CLICK_SNOWBALL_CTA)\n }\n\n const onClickPaydown = () => {\n setIsPaydownDrawerOpen(true)\n onEvent(ANALYTICS_EVENTS.DEBTS_CLICK_PAYDOWN)\n }\n\n if (!isInitialized || !isAccountDataLoaded || !isAllGoalDataLoaded) {\n return <Loader />\n }\n\n const hasNoAccounts = detailedAccounts.length === 0\n const hasNoDebtAccounts = accounts.length === 0\n const hasNoDebts = debts.length === 0\n const showEmptyState = hasNoAccounts || hasNoDebtAccounts || hasNoDebts\n\n const emptyStateProps = buildEmptyStateProps(copy, show_connections_widget_in_master, () =>\n setShowConnectWidget(true),\n )\n\n return (\n <WidgetContainer\n actions={[<DebtsPriorityAction disabled={showEmptyState} key=\"prioritize-debts\" />]}\n allowedAccountTypes={[\n AccountType.CREDIT_CARD,\n AccountType.LOAN,\n AccountType.MORTGAGE,\n AccountType.LINE_OF_CREDIT,\n AccountType.CHECKING_LINE_OF_CREDIT,\n ]}\n hasDivider={true}\n onAccountsFilterClick={onClickAccountFilter}\n onBackClick={onBackClick}\n onMenuClick={onMenuClick}\n slotComponent={\n <PaydownButton disabled={showEmptyState} key=\"extra-paydown\" onClick={onClickPaydown} />\n }\n sx={sx}\n title={copy.title}\n >\n <Stack sx={{ pt: 48, px: isDesktop ? '48px' : '24px' }}>\n {showEmptyState && (\n <EmptyState\n header={emptyStateProps.header}\n icon=\"note_stack\"\n onClick={emptyStateProps.onClickHandler}\n primaryButton={emptyStateProps.primaryButton}\n subText={emptyStateProps.description}\n sx={{ maxWidth: 400 }}\n />\n )}\n {!showEmptyState && (\n <>\n <Stack\n sx={{\n alignItems: isMobile ? 'flex-start' : 'flex-end',\n flexDirection: isMobile ? 'column' : 'row',\n mx: isMobile ? '-12px' : 0,\n }}\n >\n <DebtsChart\n debts={debtsChartData}\n height={isMobile ? 250 : undefined}\n hoveredDebtGuid={hoveredDebtGuid}\n onClickArea={onClickDebt}\n onHoverArea={onHoverDebt}\n sx={{ mr: isMobile ? '4px' : '-48px' }}\n />\n <SnowballCard\n debts={debtsChartData}\n onClickCta={onClickSnowballCta}\n sx={{ mb: isMobile ? '0px' : '64px' }}\n />\n </Stack>\n <Stack sx={{ mx: isMobile ? '-24px' : 0 }}>\n <DebtsTable\n debts={debtsChartData}\n hoveredDebtGuid={hoveredDebtGuid}\n onClickRow={onClickDebt}\n onHoverRow={onHoverDebt}\n />\n </Stack>\n </>\n )}\n </Stack>\n <SnowballDrawer\n isOpen={isSnowballDrawerOpen}\n onClose={() => setIsSnowballDrawerOpen(false)}\n />\n <DebtDrawer isOpen={isDebtDrawerOpen} onClose={() => setIsDebtDrawerOpen(false)} />\n <PaydownDrawer isOpen={isPaydownDrawerOpen} onClose={() => setIsPaydownDrawerOpen(false)} />\n <ConnectDrawer\n onClose={() => setShowConnectWidget(false)}\n showConnectWidget={showConnectWidget}\n title={connectCopy.mini_title}\n />\n </WidgetContainer>\n )\n}\n\nexport default observer(DebtsWidget)\n"],"names":["getPayoffProjection","debts","debtPriority","extraPaydown","sortedDebts","d","sortDebtsByPrioriy","totalSavings","monthlyExtra","startDate","endDate","debt","madePayment","index","monthlyRate","monthlyInterest","monthlyPayment","appliedPayment","hasImpossibleDebts","duration","intervalToDuration","formatCurrency","formatDate","DATE_FORMATS_INTL","formatDuration","useDebtsUiStore","React","GlobalDataContext","useDebtStore","SnowballCard","onClickCta","sx","theme","useTheme","isMobile","useScreenSize","copy","useGlobalCopyStore","selectedDebtPriority","monthlyCashFlowProfile","useGoalStore","payoffDate","payoffSavings","payoffDuration","jsx","Card","jsxs","Stack","Text","SnowballCard$1","observer","SnowballDrawer","isOpen","onClose","readMore","setReadMore","Drawer","P","buildDynamicCopy","Box","SnowballDrawer$1","BASE_LINE_COLOR","adjustBrightness","color","factor","r","g","b","hex","newColor","DebtsChart","height","width","hoveredDebtGuid","onClickArea","onHoverArea","onEvent","useEvent","possibleDebts","uniqueXValues","point","a","timestamp","normalizedDatasets","datasetMap","lastY","normalizedDataset","x","y","initialTotalDebt","sum","payoffLine","linearRate","yMax","xData","series","brightnessFactor","seriesColor","getIndexByGuid","guid","s","LineChart","_event","lineItemIdentifier","areaSeries","ANALYTICS_EVENTS","line","highlightedGuid","value","DebtDetailsChart","selectedDebtChartData","Fragment","CardHeader","H3","CardContent","DebtDetailsChart$1","DebtScheduleTab","showCompleted","showError","List","month","balance","payment","DebtScheduleTab$1","InterestRateAction","updateAccount","useAccountStore","rate","setRate","isInvalid","handleSave","handleCancel","ListItemAction","formatPercentage","TextField","e","MonthlyPaymentAction","setPayment","CurrencyInput","v","OriginalBalanceAction","setBalance","DebtDetailsTab","GoalMonthlyPaymentAction","Divider","GoalInterestRateAction","GoalOriginalBalanceAction","DebtMonthlyPaymentAction","DebtInterestRateAction","AccountOriginalBalanceAction","DebtDetailsTab$1","DebtStatusCard","setTabValue","Paper","Alert","ErrorIcon","CompleteIcon","AlertTitle","DebtStatusCard$1","DebtDetailsContent","tabValue","Tabs","_","val","Tab","TabContentContainer","DebtDetailsContent$1","DebtDrawer","headerChart","AccountDetailsHeader","ExtraPaymentAction","updateMonthlyCashFlowProfile","PaydownContent","totalMonthlyPayments","totalContributions","PaydownContent$1","PaydownDrawer","priorityComparator","getWeight","getPriorityValue","getColors","priority","colors","PriorityCell","params","AccountCell","account","accountType","AccountTypeName","InstitutionLogo","DebtsTable","onHoverRow","onClickRow","commonCopy","sortModel","setSortModel","desktopColumns","HeaderCell","mobileColumns","Icon","rows","idx","handleRowHover","event","debtIdx","hoveredDebt","onMouseEnterRow","onRowInteraction","getRowIdByGuid","DataGridPro","newModel","DebtsPriorityButton","buttonText","disabled","isDesktop","onClick","icon","Button","IconButton","DebtsPriorityPopover","buttonEl","setSelectedDebtPriority","options","DebtPriority","handleClick","Popover","text","ListItem","SelectedIcon","DebtsPriorityAction","setButtonEl","handleOpen","handleClose","PaydownButton","DebtsWidget","onBackClick","onMenuClick","connectCopy","show_connections_widget_in_master","useAppConfig","isInitialized","useGlobalUiStore","setSelectedAccount","useAccountUiStore","setSelectedDebtChartData","isAccountDataLoaded","loadAccountData","detailedAccounts","accounts","isAllGoalDataLoaded","loadGoalData","isDebtDrawerOpen","setIsDebtDrawerOpen","isPaydownDrawerOpen","setIsPaydownDrawerOpen","isSnowballDrawerOpen","setIsSnowballDrawerOpen","setHoveredDebtGuid","showConnectWidget","setShowConnectWidget","useWidgetLoadTimer","debtsChartData","transformDebtsChartData","onHoverDebt","onClickDebt","chartData","onClickAccountFilter","onClickSnowballCta","onClickPaydown","Loader","hasNoAccounts","hasNoDebtAccounts","hasNoDebts","showEmptyState","emptyStateProps","buildEmptyStateProps","WidgetContainer","AccountType","EmptyState","ConnectDrawer","DebtsWidget_default"],"mappings":"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"}
1
+ {"version":3,"file":"index.es.js","sources":["../../src/debts/utils/SnowballCard.ts","../../src/debts/hooks/useDebtsUiStore.ts","../../src/debts/components/SnowballCard.tsx","../../src/debts/components/SnowballDrawer.tsx","../../src/debts/utils/DebtsChart.ts","../../src/debts/components/DebtsChart.tsx","../../src/debts/components/debtsdrawer/DebtDetailsChart.tsx","../../src/debts/components/debtsdrawer/DebtScheduleTab.tsx","../../src/debts/components/actions/InterestRateAction.tsx","../../src/debts/components/actions/MonthlyPaymentAction.tsx","../../src/debts/components/actions/OriginalBalanceAction.tsx","../../src/debts/components/debtsdrawer/DebtDetailsTab.tsx","../../src/debts/components/debtsdrawer/DebtStatusCard.tsx","../../src/debts/components/debtsdrawer/DebtDetailsContent.tsx","../../src/debts/components/DebtDrawer.tsx","../../src/debts/components/actions/ExtraPaymentAction.tsx","../../src/debts/components/debtspaydown/PaydownContent.tsx","../../src/debts/components/PaydownDrawer.tsx","../../src/debts/utils/DebtsTable.ts","../../src/debts/components/debtstable/PriorityCell.tsx","../../src/debts/components/debtstable/AccountCell.tsx","../../src/debts/components/DebtsTable.tsx","../../src/debts/components/debtspriority/DebtsPriorityButton.tsx","../../src/debts/components/debtspriority/DebtsPrioriyPopover.tsx","../../src/debts/components/actions/DebtsPriorityAction.tsx","../../src/debts/components/debtspaydown/PaydownButton.tsx","../../src/debts/DebtsWidget.tsx"],"sourcesContent":["import { formatDuration, intervalToDuration } from 'date-fns'\n\nimport { DATE_FORMATS_INTL, formatDate } from '../../core/constants'\nimport { DebtPriority } from '../../core/constants/Debts'\nimport { DebtChartData, sortDebtsByPrioriy } from '../../core/utils/DebtUtils'\nimport { formatCurrency } from '../../core/utils/NumberFormatting'\n\ntype PayoffProjection = {\n payoffSavings: string\n payoffDate: string\n payoffDuration: string\n}\n\nexport function getPayoffProjection(\n debts: DebtChartData[],\n debtPriority: DebtPriority,\n extraPaydown: number = 0,\n): PayoffProjection {\n const sortedDebts = debts\n // Copy debts to avoid overwriting balance during payoff calculation\n .map((d) => ({ ...d }))\n // Filter out invalid debts\n .filter(\n (d) => d.interest_rate !== undefined && d.monthly_payment !== undefined && !d.is_paid_off,\n )\n sortDebtsByPrioriy(sortedDebts, debtPriority)\n\n let totalSavings = 0\n let monthlyExtra = 0\n const startDate = new Date()\n const endDate = new Date()\n\n while (sortedDebts.some((debt) => debt.balance >= 0.01 && !debt.is_impossible)) {\n let madePayment = false // Track if any payment was made this month\n\n for (const [index, debt] of sortedDebts.entries()) {\n if (debt.balance <= 0.01 || debt.is_impossible) continue\n\n const interestRate = (debt.interest_rate ?? 0) / 100\n const monthlyRate = interestRate / 12\n const monthlyInterest = debt.balance * monthlyRate\n let monthlyPayment = debt.monthly_payment ?? 0\n\n // Apply extra payment to the highest priority debt\n if (index === 0 && extraPaydown) monthlyPayment += extraPaydown\n\n // Apply interest before payment\n debt.balance += monthlyInterest\n // Apply monthly payment with any extra payment\n const appliedPayment = Math.min(debt.balance, monthlyPayment + monthlyExtra)\n\n // If payment doesn't reduce balance, mark as impossible to pay off\n if (appliedPayment <= monthlyInterest) {\n debt.is_impossible = true\n continue\n }\n\n debt.balance -= appliedPayment\n // Avoid floating-point precision issues\n debt.balance = debt.balance < 0.01 ? 0 : debt.balance\n totalSavings += monthlyInterest\n\n // If debt was fully paid off, roll over (\"snowball\") its payment as extra payment\n if (debt.balance <= 0) monthlyExtra += monthlyPayment\n if (appliedPayment > 0) madePayment = true\n }\n\n // Only increment the month if at least one payment was made\n if (madePayment) endDate.setMonth(endDate.getMonth() + 1)\n }\n\n // Check if any debts are impossible to pay off\n const hasImpossibleDebts = sortedDebts.some((debt) => debt.is_impossible && debt.balance > 0)\n const duration = intervalToDuration({ start: startDate, end: endDate })\n\n return {\n payoffSavings: hasImpossibleDebts ? 'N/A' : formatCurrency(totalSavings, '0,0.00'),\n payoffDate: hasImpossibleDebts ? 'Never' : formatDate(endDate, DATE_FORMATS_INTL.MONTH_YEAR),\n payoffDuration: hasImpossibleDebts\n ? 'Stagnant'\n : formatDuration(duration, { format: ['years', 'months'] }) || '0 months',\n }\n}\n","import React from 'react'\nimport { GlobalDataContext, useDebtStore } from '../../common'\n\nexport const useDebtsUiStore = () => {\n const context = React.useContext(GlobalDataContext)\n\n if (!context) {\n throw new Error('useDebtsUiStore() must be used within the GlobalDataContext')\n }\n\n return useDebtStore().uiStore\n}\n","import React, { MouseEventHandler } from 'react'\nimport { observer } from 'mobx-react-lite'\nimport { Card, Stack, useTheme } from '@mui/material'\nimport { Text } from '@mxenabled/mxui'\n\nimport { useScreenSize, useGlobalCopyStore, useGoalStore } from '../../common'\nimport { getPayoffProjection } from '../utils/SnowballCard'\nimport { DebtChartData } from '../../core/utils/DebtUtils'\nimport { useDebtsUiStore } from '../hooks/useDebtsUiStore'\n\ninterface SnowballCardProps {\n debts: DebtChartData[]\n onClickCta: MouseEventHandler\n sx?: any\n}\n\nconst SnowballCard = ({ debts, onClickCta, sx }: SnowballCardProps) => {\n const theme = useTheme()\n const { isMobile } = useScreenSize()\n const { debts: copy } = useGlobalCopyStore()\n const { selectedDebtPriority } = useDebtsUiStore()\n const { monthlyCashFlowProfile } = useGoalStore()\n\n const { payoffDate, payoffSavings, payoffDuration } = React.useMemo(() => {\n const extraPaydown = monthlyCashFlowProfile?.extra_payment ?? 0\n return getPayoffProjection(debts, selectedDebtPriority, extraPaydown)\n }, [debts, selectedDebtPriority, monthlyCashFlowProfile])\n\n return (\n <Card\n sx={{\n boxShadow: theme.shadows[2],\n width: isMobile ? '100%' : '186px',\n minWidth: '186px',\n ...sx,\n }}\n >\n <Stack sx={{ gap: '12px', p: '16px' }}>\n <Stack\n gap={isMobile ? '4px' : '0'}\n sx={{\n borderBottom: '1px solid',\n borderBottomColor: theme.palette.grey[300],\n pb: '8px',\n }}\n >\n <Text variant=\"caption\">{copy.snowball_card_date_description}</Text>\n <Text bold={true} color={theme.palette.primary.main} variant=\"body2\">\n {payoffDate}\n </Text>\n </Stack>\n <Stack gap={isMobile ? '4px' : '0'}>\n <Text bold={true} variant=\"body2\">\n {payoffSavings}\n </Text>\n <Text variant=\"caption\">{copy.snowball_card_amount_description}</Text>\n </Stack>\n <Stack gap={isMobile ? '4px' : '0'}>\n <Text bold={true} variant=\"body2\">\n {payoffDuration}\n </Text>\n <Text variant=\"caption\">{copy.snowball_card_duration_description}</Text>\n </Stack>\n <Text\n bold={true}\n color={theme.palette.primary.main}\n onClick={onClickCta}\n sx={{ cursor: 'pointer' }}\n variant=\"body2\"\n >\n {copy.snowball_card_cta}\n </Text>\n </Stack>\n </Card>\n )\n}\n\nexport default observer(SnowballCard)\n","import React from 'react'\nimport { observer } from 'mobx-react-lite'\nimport { Box, Card, Stack, useTheme } from '@mui/material'\nimport { P, Text } from '@mxenabled/mxui'\n\nimport { Drawer, useGlobalCopyStore } from '../../common'\nimport { buildDynamicCopy } from '../../core/utils/Localization'\ninterface SnowballDrawerProps {\n isOpen: boolean\n onClose: () => void\n}\n\nconst SnowballDrawer = ({ isOpen, onClose }: SnowballDrawerProps) => {\n const theme = useTheme()\n const { debts: copy } = useGlobalCopyStore()\n const [readMore, setReadMore] = React.useState(false)\n\n return (\n <Drawer\n ariaLabelClose={''}\n isOpen={isOpen}\n onClose={onClose}\n title={copy.snowball_drawer_title}\n >\n <Stack bgcolor={theme.palette.background.default} height=\"100%\">\n {/* Drawer Header */}\n <Stack alignItems={'center'} px={24} py={24}>\n <Stack alignItems={'center'} pb={24}>\n <Text mb={12} truncate={true} variant=\"h3\">\n {copy.snowball_drawer_subtitle}\n </Text>\n <Text color={theme.palette.secondary.main} variant=\"body2\">\n {copy.snowball_drawer_amount_description}\n </Text>\n <P variant=\"h1\">{copy.snowball_drawer_savings}</P>\n <Text color={theme.palette.secondary.main} variant=\"body2\">\n {copy.snowball_drawer_duration_description}\n </Text>\n </Stack>\n {/* Drawer Info Card */}\n <Card sx={{ display: 'grid', py: 16, px: 24 }}>\n <Text mb={4} truncate={true} variant=\"h3\">\n {copy.snowball_drawer_question}\n </Text>\n <Text\n color={theme.palette.secondary.main}\n mb={8}\n truncate={!readMore}\n variant=\"subtitle2\"\n >\n {copy.snowball_drawer_answer}\n </Text>\n <Text\n bold={true}\n color={theme.palette.primary.main}\n onClick={() => setReadMore(!readMore)}\n sx={{ cursor: 'pointer' }}\n variant=\"body2\"\n >\n {!readMore ? copy.snowball_drawer_more : copy.snowball_drawer_less}\n </Text>\n </Card>\n </Stack>\n {/* Drawer Payoff Table */}\n <Stack>\n {/* Drawer Disclaimer */}\n <Text\n color={theme.palette.secondary.main}\n px={24}\n sx={{ textAlign: 'center' }}\n variant=\"body2\"\n >\n {copy.snowball_drawer_disclaimer}\n </Text>\n\n <Stack flexDirection=\"row\" justifyContent=\"space-between\" sx={{ pt: 12, px: 24, pb: 8 }}>\n <Text bold={true} variant=\"caption\">\n {buildDynamicCopy(copy.snowball_drawer_month_header, 1) as string}\n </Text>\n <Text bold={true} variant=\"caption\">\n {copy.snowball_drawer_payment_header}\n </Text>\n </Stack>\n <Stack bgcolor={theme.palette.background.paper} mb={24}>\n <Stack alignItems=\"center\" flexDirection=\"row\" pl={24}>\n <Box\n sx={{\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n width: 20,\n height: 20,\n borderRadius: '50%',\n backgroundColor: theme.palette.success.main,\n marginRight: 12,\n }}\n >\n <Text color=\"white\" fontWeight={700} variant=\"body2\">\n ✓\n </Text>\n </Box>\n <Stack\n sx={{\n borderBottom: `1px solid ${theme.palette.neutral.light}`,\n flexDirection: 'row',\n flexGrow: 1,\n py: 14,\n pr: 24,\n }}\n >\n <Stack flexGrow={1}>\n <Text variant=\"body1\">\n {buildDynamicCopy(copy.snowball_drawer_debt_label, 'A') as string}\n </Text>\n <Text color={theme.palette.secondary.main} variant=\"caption\">\n {\n buildDynamicCopy(\n copy.snowball_drawer_rollover_explainer_pt1,\n '$100',\n ) as string\n }\n <strong>\n {buildDynamicCopy(copy.snowball_drawer_debt_label, 'B') as string}\n </strong>\n {copy.snowball_drawer_rollover_explainer_pt2}\n </Text>\n </Stack>\n <Stack>\n <Text variant=\"body1\">$100.00</Text>\n <Text\n bold={true}\n color={theme.palette.success.main}\n textAlign=\"end\"\n variant=\"tiny\"\n >\n {copy.snowball_drawer_paid_label}\n </Text>\n </Stack>\n </Stack>\n </Stack>\n <Stack alignItems=\"center\" flexDirection=\"row\" pl={24}>\n <Box\n sx={{\n width: 20,\n height: 20,\n marginRight: 12,\n borderRadius: '50%',\n border: `3px solid ${theme.palette.neutral.main}`,\n }}\n />\n <Stack\n sx={{\n borderBottom: `1px solid ${theme.palette.neutral.light}`,\n flexDirection: 'row',\n flexGrow: 1,\n py: 14,\n pr: 24,\n }}\n >\n <Text flexGrow={1} variant=\"body1\">\n {buildDynamicCopy(copy.snowball_drawer_debt_label, 'B') as string}\n </Text>\n <Text variant=\"body1\">$400.00</Text>\n </Stack>\n </Stack>\n <Stack alignItems=\"center\" flexDirection=\"row\" pl={24} py={14}>\n <Box\n sx={{\n width: 20,\n height: 20,\n marginRight: 12,\n borderRadius: '50%',\n border: `3px solid ${theme.palette.neutral.main}`,\n }}\n />\n <Stack flexDirection=\"row\" flexGrow={1} pr={24}>\n <Text flexGrow={1} variant=\"body1\">\n {buildDynamicCopy(copy.snowball_drawer_debt_label, 'C') as string}\n </Text>\n <Text variant=\"body1\">$1,000.00</Text>\n </Stack>\n </Stack>\n <Stack\n sx={{\n py: 8,\n px: 24,\n flexDirection: 'row',\n justifyContent: 'space-between',\n borderTop: `1px solid ${theme.palette.neutral.light}`,\n borderBottom: `1px solid ${theme.palette.neutral.light}`,\n }}\n >\n <Text bold={true} variant=\"body1\">\n {copy.snowball_drawer_total_label}\n </Text>\n <Text bold={true} variant=\"body1\">\n $1,500.00\n </Text>\n </Stack>\n </Stack>\n\n <Stack flexDirection=\"row\" justifyContent=\"space-between\" sx={{ pt: 12, px: 24, pb: 8 }}>\n <Text bold={true} variant=\"caption\">\n {buildDynamicCopy(copy.snowball_drawer_month_header, 2) as string}\n </Text>\n <Text bold={true} variant=\"caption\">\n {copy.snowball_drawer_payment_header}\n </Text>\n </Stack>\n <Stack bgcolor={theme.palette.background.paper} mb={24}>\n <Stack alignItems=\"center\" flexDirection=\"row\" pl={24}>\n <Box\n sx={{\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n width: 20,\n height: 20,\n borderRadius: '50%',\n backgroundColor: theme.palette.success.main,\n marginRight: 12,\n }}\n >\n <Text color=\"white\" fontWeight={700} variant=\"body2\">\n ✓\n </Text>\n </Box>\n <Stack\n sx={{\n borderBottom: `1px solid ${theme.palette.neutral.light}`,\n flexDirection: 'row',\n flexGrow: 1,\n py: 14,\n pr: 24,\n }}\n >\n <Stack flexGrow={1}>\n <Text variant=\"body1\">\n {buildDynamicCopy(copy.snowball_drawer_debt_label, 'B') as string}\n </Text>\n <Text color={theme.palette.secondary.main} variant=\"caption\">\n {\n buildDynamicCopy(\n copy.snowball_drawer_rollover_explainer_pt1,\n '$500',\n ) as string\n }\n <strong>\n {buildDynamicCopy(copy.snowball_drawer_debt_label, 'C') as string}\n </strong>\n {copy.snowball_drawer_rollover_explainer_pt2}\n </Text>\n </Stack>\n <Stack>\n <Text variant=\"body1\">$500.00</Text>\n <Text\n bold={true}\n color={theme.palette.success.main}\n textAlign=\"end\"\n variant=\"tiny\"\n >\n {copy.snowball_drawer_paid_label}\n </Text>\n </Stack>\n </Stack>\n </Stack>\n <Stack alignItems=\"center\" flexDirection=\"row\" pl={24}>\n <Box\n sx={{\n width: 20,\n height: 20,\n marginRight: 12,\n borderRadius: '50%',\n border: `3px solid ${theme.palette.neutral.main}`,\n }}\n />\n <Stack\n sx={{\n flexDirection: 'row',\n flexGrow: 1,\n py: 14,\n pr: 24,\n }}\n >\n <Text flexGrow={1} variant=\"body1\">\n {buildDynamicCopy(copy.snowball_drawer_debt_label, 'C') as string}\n </Text>\n <Text variant=\"body1\">$1,000.00</Text>\n </Stack>\n </Stack>\n <Stack\n sx={{\n py: 8,\n px: 24,\n flexDirection: 'row',\n justifyContent: 'space-between',\n borderTop: `1px solid ${theme.palette.neutral.light}`,\n borderBottom: `1px solid ${theme.palette.neutral.light}`,\n }}\n >\n <Text bold={true} variant=\"body1\">\n {copy.snowball_drawer_total_label}\n </Text>\n <Text bold={true} variant=\"body1\">\n $1,500.00\n </Text>\n </Stack>\n </Stack>\n\n <Stack flexDirection=\"row\" justifyContent=\"space-between\" sx={{ pt: 12, px: 24, pb: 8 }}>\n <Text bold={true} variant=\"caption\">\n {buildDynamicCopy(copy.snowball_drawer_month_header, 3) as string}\n </Text>\n <Text bold={true} variant=\"caption\">\n {copy.snowball_drawer_payment_header}\n </Text>\n </Stack>\n <Stack bgcolor={theme.palette.background.paper} mb={24}>\n <Stack alignItems=\"center\" flexDirection=\"row\" pl={24}>\n <Box\n sx={{\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n width: 20,\n height: 20,\n borderRadius: '50%',\n backgroundColor: theme.palette.success.main,\n marginRight: 12,\n }}\n >\n <Text color=\"white\" fontWeight={700} variant=\"body2\">\n ✓\n </Text>\n </Box>\n <Stack\n sx={{\n alignItems: 'center',\n flexDirection: 'row',\n flexGrow: 1,\n py: 14,\n pr: 24,\n }}\n >\n <Stack flexGrow={1}>\n <Text variant=\"body1\">\n {buildDynamicCopy(copy.snowball_drawer_debt_label, 'C') as string}\n </Text>\n </Stack>\n <Stack>\n <Text variant=\"body1\">$1,500.00</Text>\n <Text\n bold={true}\n color={theme.palette.success.main}\n textAlign=\"end\"\n variant=\"tiny\"\n >\n {copy.snowball_drawer_paid_label}\n </Text>\n </Stack>\n </Stack>\n </Stack>\n <Stack\n sx={{\n py: 8,\n px: 24,\n flexDirection: 'row',\n justifyContent: 'space-between',\n borderTop: `1px solid ${theme.palette.neutral.light}`,\n borderBottom: `1px solid ${theme.palette.neutral.light}`,\n }}\n >\n <Text bold={true} variant=\"body1\">\n {copy.snowball_drawer_total_label}\n </Text>\n <Text bold={true} variant=\"body1\">\n $1,500.00\n </Text>\n </Stack>\n </Stack>\n </Stack>\n </Stack>\n </Drawer>\n )\n}\n\nexport default observer(SnowballDrawer)\n","export const BASE_LINE_COLOR = '#FF7B08'\n\nexport function adjustBrightness(color: string, factor: number): string {\n const [r, g, b] = color\n .replace(/^#/, '')\n .match(/.{1,2}/g)!\n .map((hex) => parseInt(hex, 16))\n\n const newColor = [\n Math.max(0, Math.min(255, Math.round(r * factor))),\n Math.max(0, Math.min(255, Math.round(g * factor))),\n Math.max(0, Math.min(255, Math.round(b * factor))),\n ]\n\n return `rgb(${newColor[0]}, ${newColor[1]}, ${newColor[2]})`\n}\n","import React from 'react'\n\nimport Box from '@mui/material/Box'\nimport { useTheme } from '@mui/material/styles'\n\nimport type { LineSeriesType, HighlightItemData, LineItemIdentifier } from '@mui/x-charts'\nimport { LineChart } from '@mui/x-charts/LineChart'\n\nimport { useEvent, ANALYTICS_EVENTS } from '../../common'\nimport { DATE_FORMATS_INTL, formatDate } from '../../core/constants'\nimport { DebtChartData } from '../../core/utils/DebtUtils'\nimport { adjustBrightness, BASE_LINE_COLOR } from '../utils/DebtsChart'\nimport { formatCurrency } from '../../core/utils/NumberFormatting'\n\ninterface DebtsChartProps {\n sx?: any\n height?: number\n width?: number\n debts: DebtChartData[]\n hoveredDebtGuid?: string\n onClickArea?: () => void\n onHoverArea?: (debtGuid: string) => void\n}\n\ninterface DebtsChartSeries extends LineSeriesType {\n guid?: string | null\n}\n\nexport const DebtsChart: React.FC<DebtsChartProps> = ({\n sx,\n height = 500,\n width,\n debts,\n hoveredDebtGuid,\n onClickArea,\n onHoverArea,\n}) => {\n const theme = useTheme()\n const { onEvent } = useEvent()\n\n const possibleDebts = debts.filter((d) => !d.is_impossible)\n\n // Generate sorted array of unique dates\n const uniqueXValues = [\n ...new Set(\n possibleDebts.flatMap((debt) => debt.dataset.map((point) => new Date(point.x).getTime())),\n ),\n ]\n .sort((a, b) => a - b)\n .map((timestamp) => new Date(timestamp))\n\n // Normalize datasets with missing dates\n const normalizedDatasets = possibleDebts.map((debt) => {\n const datasetMap = new Map(debt.dataset.map((point) => [new Date(point.x).getTime(), point.y]))\n\n let lastY = datasetMap.get(uniqueXValues[0].getTime()) ?? 0\n const normalizedDataset = uniqueXValues.map((x) => {\n const y = datasetMap.get(x.getTime()) ?? lastY // Use last known value for missing points\n lastY = y\n return { x, y }\n })\n\n return { ...debt, dataset: normalizedDataset }\n })\n\n const initialTotalDebt = normalizedDatasets.reduce(\n (sum, debt) => sum + (debt.dataset[0]?.y ?? 0),\n 0,\n )\n\n const payoffLine = uniqueXValues.map((x, index) => {\n const linearRate = index / (uniqueXValues.length - 1)\n const y = initialTotalDebt * (1 - linearRate)\n return { x, y }\n })\n\n const yMax = Math.ceil(initialTotalDebt / 100) * 100\n const xData = uniqueXValues\n\n const series: DebtsChartSeries[] = normalizedDatasets.map((debt, index) => {\n const brightnessFactor = 1 - (index / normalizedDatasets.length) * 0.5\n const seriesColor = adjustBrightness(BASE_LINE_COLOR, brightnessFactor)\n\n return {\n id: `debt-${index}`,\n guid: debt.guid,\n label: debt.name,\n data: debt.dataset.map((point) => point.y),\n color: seriesColor,\n curve: 'linear',\n type: 'line',\n area: true,\n stack: 'total',\n showMark: false,\n }\n })\n\n series.push({\n id: 'payoff-line',\n label: 'Payoff Line',\n data: payoffLine.map((point) => point.y),\n color: theme.palette.grey[700],\n curve: 'linear',\n type: 'line',\n stack: undefined,\n showMark: false,\n disableHighlight: true,\n })\n\n const getIndexByGuid = (guid: string) => {\n return series.findIndex((s) => s?.guid === guid)\n }\n\n const onHighlightChange = (line: HighlightItemData | null) => {\n const highlightedGuid = series.find((s) => s.id === line?.seriesId)?.guid\n onHoverArea?.(highlightedGuid ?? '')\n }\n\n const onAreaClick = (\n _event: React.MouseEvent<SVGElement, MouseEvent>,\n lineItemIdentifier: LineItemIdentifier,\n ) => {\n onClickArea?.()\n const areaSeries = series.find((s) => s.id === lineItemIdentifier.seriesId)\n onEvent(ANALYTICS_EVENTS.DEBTS_CLICK_CHART_AREA, { account_guid: areaSeries?.guid })\n }\n\n return (\n <Box\n sx={{\n width: '100%',\n height: '100%',\n touchAction: 'pan-y',\n '& svg': {\n touchAction: 'pan-y',\n userSelect: 'none',\n },\n '& .recharts-wrapper': {\n touchAction: 'pan-y',\n },\n }}\n >\n <LineChart\n axisHighlight={{ x: 'none' }}\n disableLineItemHighlight={true}\n height={height}\n hideLegend={true}\n margin={{ bottom: 24, left: 32, right: 72, top: 48 }}\n onAreaClick={onAreaClick}\n onHighlightChange={onHighlightChange}\n series={series}\n skipAnimation={true}\n slotProps={{ tooltip: { trigger: 'none' } }}\n sx={{\n p: 4,\n '& .MuiBarLabel-root': {\n fontSize: 10,\n fontWeight: 600,\n },\n '& .MuiAreaElement-root': {\n opacity: 0.4,\n transition: 'opacity 0.3s ease',\n },\n '& .MuiAreaElement-root:hover': {\n opacity: 1,\n },\n '& .MuiLineElement-series-payoff-line': {\n strokeDasharray: '10 5',\n strokeWidth: 1,\n },\n [`& .MuiLineElement-series-debt-${getIndexByGuid(hoveredDebtGuid ?? '0')}`]: {\n opacity: 1,\n },\n [`& .MuiAreaElement-series-debt-${getIndexByGuid(hoveredDebtGuid ?? '0')}`]: {\n opacity: 1,\n },\n '& .MuiChartsAxis-tickLabel > tspan': {\n fontFamily: theme.typography.body2.fontFamily,\n },\n ...sx,\n }}\n width={width}\n xAxis={[\n {\n data: xData,\n disableTicks: true,\n min: uniqueXValues[0],\n scaleType: 'time',\n tickLabelMinGap: 24,\n valueFormatter: (value: Date) => formatDate(value, DATE_FORMATS_INTL.MONTH_SHORT_YEAR),\n },\n ]}\n yAxis={[\n {\n min: 0,\n max: yMax,\n disableTicks: true,\n valueFormatter: (value: number) => formatCurrency(value, '0a'),\n },\n ]}\n />\n </Box>\n )\n}\n","import { observer } from 'mobx-react-lite'\n\nimport { useTheme } from '@mui/material'\nimport Card from '@mui/material/Card'\nimport CardContent from '@mui/material/CardContent'\nimport CardHeader from '@mui/material/CardHeader'\nimport { H3, Text } from '@mxenabled/mxui'\n\nimport { useGlobalCopyStore } from '../../../common'\nimport { useDebtsUiStore } from '../../hooks/useDebtsUiStore'\nimport { DebtsChart } from '../DebtsChart'\n\nconst DebtDetailsChart = () => {\n const theme = useTheme()\n const { debts: copy } = useGlobalCopyStore()\n const { selectedDebtChartData } = useDebtsUiStore()\n\n return (\n <>\n <Card\n sx={{\n '& .MuiCardContent-root:last-child': {\n pb: 0,\n },\n }}\n >\n <CardHeader sx={{ pb: 0 }} title={<H3 sx={{ pb: 4 }}>{copy.details_chart_title}</H3>} />\n <CardContent sx={{ p: 0 }}>\n <DebtsChart debts={[selectedDebtChartData]} height={250} />\n </CardContent>\n </Card>\n <Text\n color={theme.palette.text.secondary}\n sx={{ textAlign: 'center', px: 8, py: 12 }}\n variant=\"body2\"\n >\n {copy.details_chart_description}\n </Text>\n </>\n )\n}\n\nexport default observer(DebtDetailsChart)\n","import React from 'react'\nimport { observer } from 'mobx-react-lite'\n\nimport { useTheme } from '@mui/material'\nimport List from '@mui/material/List'\nimport Stack from '@mui/material/Stack'\nimport { Text } from '@mxenabled/mxui'\n\nimport { ANALYTICS_EVENTS, useEvent, useGlobalCopyStore } from '../../../common'\nimport { DATE_FORMATS_INTL, formatDate } from '../../../core/constants'\nimport { useDebtsUiStore } from '../../hooks/useDebtsUiStore'\nimport { formatCurrency } from '../../../core/utils/NumberFormatting'\n\nconst DebtScheduleTab = () => {\n const theme = useTheme()\n const { onEvent } = useEvent()\n const { debts: copy } = useGlobalCopyStore()\n const { selectedDebtChartData: debt, showCompleted, showError } = useDebtsUiStore()\n\n React.useEffect(() => onEvent(ANALYTICS_EVENTS.DEBT_SCHEDULE_VIEW), [])\n\n return (\n <List>\n {/* Error/Complete Message */}\n {showError || showCompleted ? (\n <Text\n color={theme.palette.secondary.main}\n component=\"div\"\n sx={{ p: 32, textAlign: 'center' }}\n variant=\"body2\"\n >\n {showError ? copy.schedule_error_message : copy.schedule_complete_message}\n </Text>\n ) : (\n <>\n {/* Payment Schedule Header */}\n <Stack flexDirection=\"row\" justifyContent=\"space-between\" sx={{ pt: 12, px: 24, pb: 8 }}>\n <Text bold={true} variant=\"caption\">\n {copy.schedule_month_heading}\n </Text>\n <Text bold={true} variant=\"caption\">\n {copy.schedule_amount_heading}\n </Text>\n </Stack>\n {/* Payment Schedule Rows */}\n {debt.dataset.slice(1).map(({ x: month, y: balance, payment }) => (\n <Stack bgcolor={theme.palette.background.paper} key={String(month)}>\n <Stack alignItems=\"center\" flexDirection=\"row\" pl={24}>\n <Stack\n sx={{\n borderBottom: `1px solid ${theme.palette.divider}`,\n flexDirection: 'row',\n flexGrow: 1,\n py: 14,\n pr: 24,\n }}\n >\n <Stack flexGrow={1}>\n <Text bold={true} variant=\"body1\">\n {formatDate(month, DATE_FORMATS_INTL.MONTH_YEAR)}\n </Text>\n <Text color={theme.palette.secondary.main} variant=\"caption\">\n {copy.schedule_month_label}\n </Text>\n </Stack>\n <Stack>\n <Text bold={true} variant=\"body1\">\n {formatCurrency(balance, '0,0.00')}\n </Text>\n <Text\n bold={true}\n color={theme.palette.success.main}\n textAlign=\"end\"\n variant=\"tiny\"\n >\n {`+${formatCurrency(payment, '0,0')}`}\n </Text>\n </Stack>\n </Stack>\n </Stack>\n </Stack>\n ))}\n {/* Debt Payoff Row */}\n <Stack bgcolor=\"background.paper\">\n <Stack\n sx={{\n alignItems: 'center',\n flexDirection: 'row',\n flexGrow: 1,\n py: 14,\n px: 24,\n }}\n >\n <Text flexGrow={1} variant=\"body1\">\n {copy.schedule_payoff_label}\n </Text>\n <Text variant=\"body1\">-</Text>\n </Stack>\n </Stack>\n </>\n )}\n </List>\n )\n}\n\nexport default observer(DebtScheduleTab)\n","import React from 'react'\nimport { observer } from 'mobx-react-lite'\n\nimport TextField from '@mui/material/TextField'\n\nimport {\n ListItemAction,\n useAccountStore,\n useGlobalCopyStore,\n useEvent,\n ANALYTICS_EVENTS,\n} from '../../../common'\nimport { DebtChartData } from '../../../core/utils/DebtUtils'\nimport { formatPercentage } from '../../../core/utils/NumberFormatting'\n\ninterface InterestRateActionProps {\n debt: DebtChartData\n}\n\nexport const InterestRateAction = observer(({ debt }: InterestRateActionProps) => {\n const { debts: copy } = useGlobalCopyStore()\n const { updateAccount } = useAccountStore()\n const { onEvent } = useEvent()\n\n const [rate, setRate] = React.useState<number>(debt.interest_rate ?? 0)\n const isInvalid = rate < 0\n\n const handleSave = async () => {\n await updateAccount({ ...debt.account, interest_rate: rate })\n debt.interest_rate = rate\n onEvent(ANALYTICS_EVENTS.DEBTS_SAVE_RATE_ACTION, { account_guid: debt.guid })\n }\n\n const handleCancel = () => {\n setTimeout(() => {\n setRate(debt.interest_rate ?? 0)\n }, 250)\n }\n\n return (\n <ListItemAction\n isSaveDisabled={isInvalid}\n label={`${copy.details_interest_rate} (%)`}\n onCancel={handleCancel}\n onSave={handleSave}\n primaryText={copy.details_interest_rate}\n secondaryText={formatPercentage(Number(debt.interest_rate) / 100) as string}\n zeroStateText={!debt.interest_rate ? copy.add_interest_rate : undefined}\n >\n <TextField\n error={isInvalid}\n fullWidth={true}\n onChange={(e) =>\n setRate(!isNaN(parseFloat(e.target.value)) ? parseFloat(e.target.value) : 0)\n }\n type=\"number\"\n value={rate}\n />\n </ListItemAction>\n )\n})\n","import React from 'react'\nimport { observer } from 'mobx-react-lite'\n\nimport {\n CurrencyInput,\n ListItemAction,\n useAccountStore,\n useGlobalCopyStore,\n useEvent,\n ANALYTICS_EVENTS,\n} from '../../../common'\nimport { DebtChartData } from '../../../core/utils/DebtUtils'\nimport { formatCurrency } from '../../../core/utils/NumberFormatting'\n\ninterface MonthlyPaymentActionProps {\n debt: DebtChartData\n}\n\nexport const MonthlyPaymentAction = observer(({ debt }: MonthlyPaymentActionProps) => {\n const { debts: copy } = useGlobalCopyStore()\n const { updateAccount } = useAccountStore()\n const { onEvent } = useEvent()\n\n const [payment, setPayment] = React.useState<number>(debt.monthly_payment ?? 0)\n const isInvalid = payment < 0 || payment > 99999999.99\n\n const handleSave = async () => {\n await updateAccount({ ...debt.account, minimum_payment: payment })\n debt.monthly_payment = payment\n onEvent(ANALYTICS_EVENTS.DEBTS_SAVE_PAYMENT_ACTION, { account_guid: debt.guid })\n }\n\n const handleCancel = () => {\n setTimeout(() => {\n setPayment(debt.monthly_payment ?? 0)\n }, 250)\n }\n\n return (\n <ListItemAction\n isSaveDisabled={isInvalid}\n label={copy.details_monthly_payment}\n onCancel={handleCancel}\n onSave={handleSave}\n primaryText={copy.details_monthly_payment}\n secondaryText={formatCurrency(debt.monthly_payment, '0,0')}\n zeroStateText={!debt.monthly_payment ? copy.add_monthly_payment : undefined}\n >\n <CurrencyInput\n amount={payment}\n autoFocus={true}\n error={isInvalid}\n fullWidth={true}\n minAmount={0}\n setAmount={(v) => setPayment(!isNaN(Number(v)) ? Number(v) : payment)}\n sx={{ '.MuiTypography-body1': { p: 0 } }}\n />\n </ListItemAction>\n )\n})\n","import React from 'react'\nimport { observer } from 'mobx-react-lite'\n\nimport {\n CurrencyInput,\n ListItemAction,\n useAccountStore,\n useGlobalCopyStore,\n useEvent,\n ANALYTICS_EVENTS,\n} from '../../../common'\nimport { DebtChartData } from '../../../core/utils/DebtUtils'\nimport { formatCurrency } from '../../../core/utils/NumberFormatting'\n\ninterface OriginalBalanceActionProps {\n debt: DebtChartData\n}\n\nexport const OriginalBalanceAction = observer(({ debt }: OriginalBalanceActionProps) => {\n const { debts: copy } = useGlobalCopyStore()\n const { updateAccount } = useAccountStore()\n const { onEvent } = useEvent()\n\n const [balance, setBalance] = React.useState<number>(debt.original_balance ?? 0)\n const isInvalid = balance < 0 || balance > 99999999.99\n\n const handleSave = async () => {\n await updateAccount({ ...debt.account, original_balance: balance })\n debt.original_balance = balance\n onEvent(ANALYTICS_EVENTS.DEBTS_SAVE_BALANCE_ACTION, { account_guid: debt.guid })\n }\n\n const handleCancel = () => {\n setTimeout(() => {\n setBalance(debt.original_balance ?? 0)\n }, 250)\n }\n\n return (\n <ListItemAction\n isSaveDisabled={isInvalid}\n label={copy.details_original_balance}\n onCancel={handleCancel}\n onSave={handleSave}\n primaryText={copy.details_original_balance}\n secondaryText={formatCurrency(debt.original_balance, '0,0')}\n zeroStateText={!debt.original_balance ? copy.add_original_balance : undefined}\n >\n <CurrencyInput\n amount={balance}\n autoFocus={true}\n error={isInvalid}\n fullWidth={true}\n minAmount={0}\n setAmount={(v) => setBalance(!isNaN(Number(v)) ? Number(v) : balance)}\n sx={{ '.MuiTypography-body1': { p: 0 } }}\n />\n </ListItemAction>\n )\n})\n","import React from 'react'\nimport { observer } from 'mobx-react-lite'\n\nimport Divider from '@mui/material/Divider'\nimport Stack from '@mui/material/Stack'\n\nimport { useDebtsUiStore } from '../../hooks/useDebtsUiStore'\nimport { ANALYTICS_EVENTS, useEvent } from '../../../common'\n\nimport { InterestRateAction as GoalInterestRateAction } from '../../../goals/components/actions/InterestRateAction'\nimport { MonthlyPaymentAction as GoalMonthlyPaymentAction } from '../../../goals/components/actions/MonthlyPaymentAction'\nimport { OriginalBalanceAction as GoalOriginalBalanceAction } from '../../../goals/components/actions/OriginalBalanceAction'\nimport { InterestRateAction as DebtInterestRateAction } from '../actions/InterestRateAction'\nimport { MonthlyPaymentAction as DebtMonthlyPaymentAction } from '../actions/MonthlyPaymentAction'\nimport { OriginalBalanceAction as AccountOriginalBalanceAction } from '../actions/OriginalBalanceAction'\n\nconst DebtDetailsTab = () => {\n const { onEvent } = useEvent()\n const { selectedDebtChartData: debt } = useDebtsUiStore()\n\n React.useEffect(() => onEvent(ANALYTICS_EVENTS.DEBT_DETAILS_VIEW), [])\n\n return (\n <Stack bgcolor=\"background.paper\">\n {debt?.goal && (\n <>\n <GoalMonthlyPaymentAction goal={debt.goal} />\n <Divider />\n\n <GoalInterestRateAction goal={debt.goal} />\n <Divider />\n\n <GoalOriginalBalanceAction goal={debt.goal} />\n <Divider />\n </>\n )}\n\n {!debt?.goal && debt?.account && (\n <>\n <DebtMonthlyPaymentAction debt={debt} />\n <Divider />\n\n <DebtInterestRateAction debt={debt} />\n <Divider />\n\n <AccountOriginalBalanceAction debt={debt} />\n <Divider />\n </>\n )}\n </Stack>\n )\n}\n\nexport default observer(DebtDetailsTab)\n","import React from 'react'\nimport { observer } from 'mobx-react-lite'\n\nimport Alert from '@mui/material/Alert'\nimport AlertTitle from '@mui/material/AlertTitle'\nimport Paper from '@mui/material/Paper'\nimport Stack from '@mui/material/Stack'\n\nimport { Text } from '@mxenabled/mxui'\nimport { Error as ErrorIcon, CheckCircle as CompleteIcon } from '@mxenabled/mx-icons'\n\nimport { useGlobalCopyStore } from '../../../common'\nimport { useDebtsUiStore } from '../../hooks/useDebtsUiStore'\n\ninterface DebtStatusCardProps {\n setTabValue: (val: number) => void\n sx?: any\n}\n\nconst DebtStatusCard: React.FC<DebtStatusCardProps> = ({ setTabValue, sx }) => {\n const { debts: copy } = useGlobalCopyStore()\n const { showError, showCompleted } = useDebtsUiStore()\n\n React.useEffect(() => {\n if (showError) {\n setTabValue(1)\n }\n }, [showError])\n\n if (!showError && !showCompleted) return <></>\n\n return (\n <Stack gap={16}>\n <Paper sx={{ my: 16, mx: 24, ...sx }}>\n <Alert\n icon={\n showError ? <ErrorIcon filled={true} /> : <CompleteIcon color=\"success\" filled={true} />\n }\n severity=\"error\"\n sx={{\n alignItems: 'start',\n borderLeft: 5,\n borderRadius: 1,\n borderColor: showError ? 'error.main' : 'success.main',\n color: 'text.primary',\n '&.MuiPaper-root': {\n backgroundColor: 'background.paper',\n },\n }}\n >\n <AlertTitle sx={{ fontWeight: 600, marginTop: 2 }} variant=\"body1\">\n {showError ? copy.status_error_title : copy.status_complete_title}\n </AlertTitle>\n <Text component=\"p\" variant=\"subtitle2\">\n {showError ? copy.status_error_description : copy.status_complete_description}\n </Text>\n </Alert>\n </Paper>\n {showError && (\n <Paper sx={{ mb: 16, mt: 100, mx: 24, ...sx }}>\n <Alert\n icon={<></>}\n severity=\"error\"\n sx={{\n borderRadius: 2,\n color: 'text.primary',\n '&.MuiPaper-root': {\n backgroundColor: 'background.paper',\n },\n }}\n >\n <AlertTitle sx={{ fontWeight: 600, marginTop: 2 }} variant=\"body1\">\n {copy.status_info_title}\n </AlertTitle>\n <Text component=\"p\" variant=\"subtitle2\">\n {copy.status_info_description}\n </Text>\n </Alert>\n </Paper>\n )}\n </Stack>\n )\n}\n\nexport default observer(DebtStatusCard)\n","import React from 'react'\nimport { observer } from 'mobx-react-lite'\n\nimport Tab from '@mui/material/Tab'\nimport Tabs from '@mui/material/Tabs'\n\nimport { useGlobalCopyStore, TabContentContainer } from '../../../common'\nimport { useDebtsUiStore } from '../../hooks/useDebtsUiStore'\n\nimport DebtScheduleTab from './DebtScheduleTab'\nimport DebtDetailsTab from './DebtDetailsTab'\nimport DebtStatusCard from './DebtStatusCard'\n\nconst DebtDetailsContent = () => {\n const { debts: copy } = useGlobalCopyStore()\n const { showError, showCompleted } = useDebtsUiStore()\n const [tabValue, setTabValue] = React.useState(0)\n\n return (\n <>\n {(showError || showCompleted) && (\n <DebtStatusCard setTabValue={setTabValue} sx={{ mt: -24 }} />\n )}\n <Tabs\n aria-label={copy.details_tabs_aria_label}\n centered={true}\n onChange={(_, val) => setTabValue(val)}\n textColor=\"primary\"\n value={tabValue}\n variant=\"fullWidth\"\n >\n <Tab\n aria-controls=\"debt-schedule-tabpanel-0\"\n id=\"debt-schedule-tab-0\"\n label={copy.schedule_tab_label}\n />\n <Tab\n aria-controls=\"debt-details-tabpanel-1\"\n id=\"debt-details-tab-1\"\n label={copy.details_tab_label}\n />\n </Tabs>\n\n <TabContentContainer index={0} name=\"debt-schedule\" value={tabValue}>\n <DebtScheduleTab />\n </TabContentContainer>\n\n <TabContentContainer index={1} name=\"debt-details\" value={tabValue}>\n <DebtDetailsTab />\n </TabContentContainer>\n </>\n )\n}\n\nexport default observer(DebtDetailsContent)\n","import Stack from '@mui/material/Stack'\n\nimport { Drawer, useGlobalCopyStore } from '../../common'\nimport { useDebtsUiStore } from '../hooks/useDebtsUiStore'\n\nimport AccountDetailsHeader from '../../accounts/components/detailsdrawer/Accounts/AccountDetailsHeader'\nimport DebtDetailsChart from './debtsdrawer/DebtDetailsChart'\nimport DebtDetailsContent from './debtsdrawer/DebtDetailsContent'\n\ninterface DebtDrawerProps {\n isOpen: boolean\n onClose: () => void\n}\n\nconst DebtDrawer = ({ isOpen, onClose }: DebtDrawerProps) => {\n const { debts: copy } = useGlobalCopyStore()\n const { showError, showCompleted } = useDebtsUiStore()\n const headerChart = showError || showCompleted ? <></> : <DebtDetailsChart />\n\n return (\n <Drawer\n ariaLabelClose={copy.details_close_aria}\n isOpen={isOpen}\n onClose={onClose}\n title={copy.details_title}\n >\n <Stack bgcolor=\"background.default\">\n <AccountDetailsHeader customDetailsChart={headerChart} />\n <DebtDetailsContent />\n </Stack>\n </Drawer>\n )\n}\n\nexport default DebtDrawer\n","import React from 'react'\nimport { observer } from 'mobx-react-lite'\n\nimport {\n CurrencyInput,\n ListItemAction,\n useGlobalCopyStore,\n useEvent,\n ANALYTICS_EVENTS,\n useGoalStore,\n} from '../../../common'\nimport { formatCurrency } from '../../../core/utils/NumberFormatting'\n\nexport const ExtraPaymentAction = observer(() => {\n const { debts: copy } = useGlobalCopyStore()\n const { monthlyCashFlowProfile, updateMonthlyCashFlowProfile } = useGoalStore()\n const { onEvent } = useEvent()\n\n const [payment, setPayment] = React.useState<number>(monthlyCashFlowProfile?.extra_payment ?? 0)\n const isInvalid = payment < 0 || payment > 99999999.99\n\n const handleSave = async () => {\n if (monthlyCashFlowProfile) {\n await updateMonthlyCashFlowProfile({ ...monthlyCashFlowProfile, extra_payment: payment })\n monthlyCashFlowProfile.extra_payment = payment\n onEvent(ANALYTICS_EVENTS.DEBTS_SAVE_PAYDOWN_ACTION, {\n user_guid: monthlyCashFlowProfile?.user_guid,\n })\n }\n }\n\n const handleCancel = () => {\n setTimeout(() => {\n setPayment(monthlyCashFlowProfile?.extra_payment ?? 0)\n }, 250)\n }\n\n return (\n <ListItemAction\n isSaveDisabled={isInvalid}\n label={copy.paydown_drawer_extra_payment}\n onCancel={handleCancel}\n onSave={handleSave}\n primaryText={copy.paydown_drawer_extra_payment}\n secondaryText={formatCurrency(monthlyCashFlowProfile?.extra_payment, '0,0')}\n zeroStateText={!monthlyCashFlowProfile?.extra_payment ? copy.add_extra_payment : undefined}\n >\n <CurrencyInput\n amount={payment}\n autoFocus={true}\n error={isInvalid}\n fullWidth={true}\n minAmount={0}\n setAmount={(v) => setPayment(!isNaN(Number(v)) ? Number(v) : payment)}\n sx={{ '.MuiTypography-body1': { p: 0 } }}\n />\n </ListItemAction>\n )\n})\n","import { observer } from 'mobx-react-lite'\n\nimport Stack from '@mui/material/Stack'\nimport { P, Text } from '@mxenabled/mxui'\n\nimport { useDebtStore, useGlobalCopyStore, useGoalStore } from '../../../common'\nimport { ExtraPaymentAction } from '../actions/ExtraPaymentAction'\nimport { formatCurrency } from '../../../core/utils/NumberFormatting'\n\nconst PaydownContent = () => {\n const { debts: copy } = useGlobalCopyStore()\n const { totalMonthlyPayments } = useDebtStore()\n const { monthlyCashFlowProfile } = useGoalStore()\n\n const totalContributions = totalMonthlyPayments + Number(monthlyCashFlowProfile?.extra_payment)\n\n return (\n <Stack sx={{ backgroundColor: 'background.default', height: '100%' }}>\n <Stack p={24}>\n <Stack alignItems=\"center\" gap={4} mb={24}>\n <Text variant=\"body1\">{copy.paydown_drawer_mimimum_label}</Text>\n <P bold={true} variant=\"h1\">\n {formatCurrency(totalMonthlyPayments, '0,0')}\n </P>\n <Text textAlign=\"center\" truncate={false} variant=\"body2\" width={208}>\n {copy.paydown_drawer_minimum_info}\n </Text>\n </Stack>\n <Stack>\n <Text variant=\"h3\">{copy.paydown_drawer_subtitle}</Text>\n <Text truncate={false} variant=\"subtitle2\">\n {copy.paydown_drawer_description}\n </Text>\n </Stack>\n </Stack>\n <Stack sx={{ backgroundColor: 'background.paper' }}>\n <ExtraPaymentAction />\n </Stack>\n <Stack flexDirection=\"row-reverse\" px={24} py={12}>\n <Stack gap={4}>\n <Text variant=\"body2\">{copy.paydown_drawer_total_payment}</Text>\n <Text bold={true} textAlign=\"right\" variant=\"body1\">\n {formatCurrency(totalContributions, '0,0')}\n </Text>\n </Stack>\n </Stack>\n </Stack>\n )\n}\n\nexport default observer(PaydownContent)\n","import { Drawer, useGlobalCopyStore } from '../../common'\nimport PaydownContent from './debtspaydown/PaydownContent'\n\ninterface PaydownDrawerProps {\n isOpen: boolean\n onClose: () => void\n}\n\nconst PaydownDrawer = ({ isOpen, onClose }: PaydownDrawerProps) => {\n const { debts: copy } = useGlobalCopyStore()\n\n return (\n <Drawer\n ariaLabelClose={copy.paydown_drawer_close_aria}\n isOpen={isOpen}\n onClose={onClose}\n title={copy.paydown_drawer_title}\n >\n <PaydownContent />\n </Drawer>\n )\n}\n\nexport default PaydownDrawer\n","import { DebtChartData } from '../../core/utils/DebtUtils'\n\ntype PriorityDisplay = number | '!' | '✓'\n\nexport function priorityComparator(a: PriorityDisplay, b: PriorityDisplay) {\n const getWeight = (value: PriorityDisplay) => {\n if (typeof value === 'number') return value // Numbers sorted naturally\n if (value === '!') return Infinity - 1 // '!' comes after numbers\n if (value === '✓') return Infinity // '✓' comes last\n throw new Error('Unsupported value')\n }\n return getWeight(a) - getWeight(b) // Compare based on weights\n}\n\nexport function getPriorityValue(debt: DebtChartData) {\n if (debt.is_paid_off) return '✓'\n if (debt.priority === undefined || debt.is_impossible) return '!'\n return debt.priority\n}\n","import { GridCellParams } from '@mui/x-data-grid-pro'\nimport Box from '@mui/material/Box'\nimport { Text } from '@mxenabled/mxui'\n\nconst getColors = (priority: any) => {\n const colors = {\n text: '#121417',\n background: '#FFB252',\n }\n\n if (priority === '!') {\n colors.text = '#FFFFFF'\n colors.background = '#DF320C'\n }\n\n if (priority === '✓') {\n colors.text = '#FFFFFF'\n colors.background = '#09A57F'\n }\n\n return colors\n}\n\nexport const PriorityCell = (params: GridCellParams) => {\n const priority = String(params.formattedValue)\n const colors = getColors(priority)\n\n return (\n <Box\n sx={{\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n width: 20, // Adjust the size as needed\n height: 20,\n borderRadius: '50%',\n backgroundColor: colors.background,\n marginLeft: '10px',\n }}\n >\n <Text color={colors.text} fontWeight={700} variant=\"body2\">\n {priority}\n </Text>\n </Box>\n )\n}\n","import { GridCellParams } from '@mui/x-data-grid-pro'\nimport { InstitutionLogo, Text } from '@mxenabled/mxui'\nimport Stack from '@mui/material/Stack'\n\nimport { AccountTypeName, type Account } from '../../../core'\n\nexport const AccountCell = (params: GridCellParams) => {\n const account = params.row.account as Account\n const accountType = AccountTypeName[account.account_type]\n\n return (\n <Stack alignItems=\"center\" flexDirection=\"row\">\n <InstitutionLogo\n alt={`${account.institutionName}`}\n institutionGuid={account.institution_guid || ''}\n />\n <Stack ml={12}>\n <Text variant=\"body2\">{account.name}</Text>\n <Text variant=\"caption\">{accountType}</Text>\n </Stack>\n </Stack>\n )\n}\n\nexport default AccountCell\n","import React from 'react'\nimport { Stack, useTheme } from '@mui/material'\nimport { DataGridPro, GridColDef, GridSortModel } from '@mui/x-data-grid-pro'\nimport Box from '@mui/material/Box'\nimport { Icon, Text } from '@mxenabled/mxui'\n\nimport { ANALYTICS_EVENTS, useEvent, useGlobalCopyStore, useScreenSize } from '../../common'\nimport { DATE_FORMATS_INTL, formatDate } from '../../core/constants'\n\nimport { DebtChartData } from '../../core/utils/DebtUtils'\nimport { getPriorityValue, priorityComparator } from '../utils/DebtsTable'\nimport { HeaderCell } from '../../trends/components/trendstable/HeaderCell'\nimport { PriorityCell } from './debtstable/PriorityCell'\nimport { AccountCell } from './debtstable/AccountCell'\nimport { formatCurrency } from '../../core/utils/NumberFormatting'\n\ninterface DebtsTableProps {\n sx?: any\n debts: DebtChartData[]\n hoveredDebtGuid: string\n onHoverRow: (debtGuid: string) => void\n onClickRow: () => void\n}\n\nexport const DebtsTable: React.FC<DebtsTableProps> = ({\n sx = {},\n debts,\n hoveredDebtGuid,\n onHoverRow,\n onClickRow,\n}) => {\n const theme = useTheme()\n const { onEvent } = useEvent()\n const { isMobile } = useScreenSize()\n const { debts: copy, common: commonCopy } = useGlobalCopyStore()\n\n const [sortModel, setSortModel] = React.useState<GridSortModel>([\n { field: 'priority', sort: 'asc' },\n ])\n\n const desktopColumns: GridColDef[] = [\n {\n field: 'priority',\n headerName: copy.table_column_priority,\n renderHeader: HeaderCell,\n renderCell: PriorityCell,\n sortComparator: priorityComparator,\n sortable: true,\n hideSortIcons: true,\n type: 'custom',\n align: 'left',\n headerAlign: 'left',\n minWidth: isMobile ? 67 : 72,\n flex: isMobile ? 0.2 : 0.4,\n },\n {\n field: 'account',\n headerName: copy.table_column_account,\n renderHeader: HeaderCell,\n renderCell: AccountCell,\n sortable: false,\n type: 'custom',\n align: 'left',\n headerAlign: 'left',\n minWidth: isMobile ? 180 : 225,\n flex: 1,\n },\n {\n field: 'balance',\n headerName: copy.table_column_balance,\n renderHeader: HeaderCell,\n renderCell: (params) => (\n <Text color={theme.palette.text.primary} variant=\"body2\">\n {formatCurrency(params.value, '0,0')}\n </Text>\n ),\n sortable: true,\n hideSortIcons: isMobile,\n type: 'number',\n align: 'left',\n headerAlign: 'left',\n minWidth: isMobile ? 70 : 122,\n flex: isMobile ? 0.4 : 0.6,\n },\n {\n field: 'interest_rate',\n headerName: copy.details_interest_rate,\n renderHeader: HeaderCell,\n renderCell: (params) => (\n <Text color={theme.palette.text.primary} variant=\"body2\">\n {typeof params.value === 'number' ? `${Number(params.value).toFixed(2)}%` : '---'}\n </Text>\n ),\n sortable: true,\n hideSortIcons: isMobile,\n type: 'number',\n align: 'left',\n headerAlign: 'left',\n minWidth: 122,\n flex: 0.6,\n },\n {\n field: 'projected_payoff_date',\n headerName: copy.table_column_payoff_date,\n renderHeader: HeaderCell,\n renderCell: (params) => (\n <Text color={theme.palette.text.primary} variant=\"body2\">\n {params.value ? formatDate(params.value, DATE_FORMATS_INTL.MONTH_SHORT_YEAR) : '---'}\n </Text>\n ),\n sortable: true,\n hideSortIcons: isMobile,\n type: 'number',\n align: 'left',\n headerAlign: 'left',\n minWidth: 122,\n flex: 0.6,\n },\n {\n field: 'monthly_payment',\n headerName: copy.table_column_amount_due,\n renderHeader: HeaderCell,\n renderCell: (params) => (\n <Text color={theme.palette.text.primary} variant=\"body2\">\n {typeof params.value === 'number' ? formatCurrency(params.value, '0,0') : '---'}\n </Text>\n ),\n sortable: true,\n hideSortIcons: isMobile,\n type: 'number',\n align: 'left',\n headerAlign: 'left',\n minWidth: 122,\n flex: 0.6,\n },\n ]\n\n const mobileColumns: GridColDef[] = [\n ...desktopColumns.slice(0, 3),\n {\n field: 'chevron',\n headerClassName: 'chevron-header',\n headerName: '',\n renderCell: () => (\n <Stack aria-label={commonCopy.see_details} role=\"button\">\n <Icon name=\"chevron_right\" />\n </Stack>\n ),\n sortable: false,\n hideSortIcons: true,\n type: 'custom',\n align: 'right',\n headerAlign: 'right',\n width: 20,\n },\n ]\n\n const rows = React.useMemo(() => {\n return debts.map((debt, idx) => ({\n ...debt,\n id: idx,\n priority: getPriorityValue(debt),\n }))\n }, [debts])\n\n const handleRowHover = (\n event: React.MouseEvent<HTMLDivElement> | React.TouchEvent<HTMLDivElement>,\n ) => {\n const target = event.target as HTMLElement\n const rowEl = target.closest('[data-id]')\n const debtIdx = rowEl?.getAttribute('data-id')\n const hoveredDebt = debts[Number(debtIdx)]\n onHoverRow?.(hoveredDebt?.guid ?? '')\n }\n\n const onMouseEnterRow = (event: React.MouseEvent<HTMLDivElement, MouseEvent>) => {\n // Only use hover on non-mobile devices\n if (!isMobile) {\n handleRowHover(event)\n }\n }\n\n const onRowInteraction = (\n event: React.MouseEvent<HTMLDivElement> | React.TouchEvent<HTMLDivElement>,\n ) => {\n // For mobile devices, use touch/click to highlight row\n if (isMobile) {\n handleRowHover(event)\n }\n }\n\n const getRowIdByGuid = (guid: string) => {\n return rows.find((r) => r.guid === guid)?.id\n }\n\n return (\n <Box\n sx={{\n height: 'auto',\n width: '100%',\n mt: '15px',\n overflowX: 'auto',\n overflowY: 'visible',\n boxShadow: 'none',\n ...sx,\n }}\n >\n <DataGridPro\n columns={isMobile ? mobileColumns : desktopColumns}\n disableColumnFilter={true}\n disableColumnMenu={true}\n hideFooter={true}\n initialState={{ sorting: { sortModel } }}\n onRowClick={(params) => {\n onClickRow()\n onEvent(ANALYTICS_EVENTS.DEBTS_CLICK_TABLE_ROW, { account_guid: params.row.guid })\n }}\n onSortModelChange={(newModel) => {\n setSortModel(newModel)\n onEvent(ANALYTICS_EVENTS.DEBTS_CLICK_TABLE_SORT)\n }}\n rows={rows}\n slotProps={{\n baseIconButton: { color: 'secondary', sx: { ml: 8 } },\n row: {\n onMouseEnter: onMouseEnterRow,\n onMouseLeave: () => !isMobile && onHoverRow?.(''),\n onTouchStart: onRowInteraction,\n onClick: isMobile ? onRowInteraction : undefined,\n },\n }}\n sortModel={sortModel}\n sortingOrder={['asc', 'desc']}\n sx={{\n '& .chevron-header': { display: 'none' },\n [`& .MuiDataGrid-row[data-id=\"${getRowIdByGuid(hoveredDebtGuid)}\"]`]: {\n backgroundColor: theme.palette.mode === 'light' ? '#f8f9fb' : '#1f2329',\n filter: 'brightness(98%)',\n },\n }}\n />\n </Box>\n )\n}\n","import React from 'react'\n\nimport Button from '@mui/material/Button'\nimport IconButton from '@mui/material/IconButton'\nimport { Icon } from '@mxenabled/mxui'\n\ninterface DebtsPrioriyButtonProps {\n buttonText: string\n disabled?: boolean\n isDesktop?: boolean\n isOpen: boolean\n onClick: (event: React.MouseEvent<HTMLButtonElement>) => void\n}\n\nexport const DebtsPriorityButton = ({\n buttonText,\n disabled,\n isDesktop = false,\n isOpen,\n onClick,\n}: DebtsPrioriyButtonProps) => {\n const icon = isOpen ? 'unfold_less' : 'unfold_more'\n\n return isDesktop ? (\n <Button\n aria-controls=\"prioritize-debts\"\n aria-describedby=\"prioritize-debts\"\n aria-haspopup={true}\n aria-label=\"prioritize-debts\"\n disabled={disabled}\n onClick={onClick}\n startIcon={<Icon name={icon} />}\n sx={{ justifyContent: 'start' }}\n >\n {buttonText}\n </Button>\n ) : (\n <IconButton\n aria-controls=\"prioritize-debts\"\n aria-describedby=\"prioritize-debts\"\n aria-haspopup={true}\n aria-label=\"prioritize-debts\"\n disabled={disabled}\n onClick={onClick}\n >\n <Icon name={icon} />\n </IconButton>\n )\n}\n","import { observer } from 'mobx-react-lite'\n\nimport List from '@mui/material/List'\nimport ListItem from '@mui/material/ListItem'\nimport Popover from '@mui/material/Popover'\n\nimport { Text } from '@mxenabled/mxui'\nimport { CheckCircle as SelectedIcon } from '@mxenabled/mx-icons'\n\nimport { useGlobalCopyStore, useEvent, ANALYTICS_EVENTS } from '../../../common'\nimport { useDebtsUiStore } from '../../hooks/useDebtsUiStore'\nimport { DebtPriority } from '../../../core/constants/Debts'\n\ninterface DebtsPriorityPopoverProps {\n buttonEl: HTMLButtonElement | null\n onClose: () => void\n}\n\nexport const DebtsPriorityPopover = observer(({ buttonEl, onClose }: DebtsPriorityPopoverProps) => {\n const { onEvent } = useEvent()\n const { debts: copy } = useGlobalCopyStore()\n const { selectedDebtPriority, setSelectedDebtPriority } = useDebtsUiStore()\n\n const isOpen = Boolean(buttonEl)\n\n const options = [\n {\n priority: DebtPriority.FASTEST_PAYOFF_FIRST,\n text: copy.priority_sort_fastest_payoff,\n },\n {\n priority: DebtPriority.HIGHEST_INTEREST,\n text: copy.priority_sort_highest_interest,\n },\n {\n priority: DebtPriority.LOWEST_BALANCE,\n text: copy.priority_sort_lowest_balance,\n },\n {\n priority: DebtPriority.HIGHEST_BALANCE,\n text: copy.priority_sort_highest_balance,\n },\n ]\n\n const handleClick = (priority: DebtPriority) => {\n setSelectedDebtPriority(priority)\n onEvent(ANALYTICS_EVENTS.DEBTS_CLICK_PRIORITY, { debts_priority: priority })\n }\n\n return (\n <Popover\n anchorEl={buttonEl}\n anchorOrigin={{\n vertical: 'bottom',\n horizontal: 'left',\n }}\n id=\"prioritize-debts\"\n onClose={onClose}\n open={isOpen}\n transformOrigin={{\n vertical: 'top',\n horizontal: 'left',\n }}\n >\n <List>\n {options.map(({ priority, text }) => (\n <ListItem\n key={priority}\n onClick={() => handleClick(priority)}\n sx={{\n bgcolor: selectedDebtPriority === priority ? 'primary.main' : undefined,\n color: selectedDebtPriority === priority ? '#fff' : undefined,\n justifyContent: 'space-between',\n minHeight: 44,\n minWidth: 268,\n px: 24,\n py: 12,\n '&:hover': {\n bgcolor: 'background.highlight',\n cursor: 'pointer',\n color: 'text.primary',\n },\n }}\n >\n <Text color=\"inherit\" variant=\"body2\">\n {text}\n </Text>\n {selectedDebtPriority === priority && (\n <SelectedIcon color=\"inherit\" filled={true} fontSize=\"small\" />\n )}\n </ListItem>\n ))}\n </List>\n </Popover>\n )\n})\n","import React from 'react'\nimport { observer } from 'mobx-react-lite'\n\nimport { Stack } from '@mui/material'\n\nimport { DebtsPriorityButton } from '../debtspriority/DebtsPriorityButton'\nimport { DebtsPriorityPopover } from '../debtspriority/DebtsPrioriyPopover'\n\nimport { useGlobalCopyStore, useEvent, ANALYTICS_EVENTS } from '../../../common'\nimport { useDebtsUiStore } from '../../hooks/useDebtsUiStore'\nimport { DebtPriority } from '../../../core/constants/Debts'\n\ninterface DebtsPriorityActionProps {\n disabled?: boolean\n isDesktop?: boolean\n}\n\nexport const DebtsPriorityAction = observer(({ disabled, isDesktop }: DebtsPriorityActionProps) => {\n const { onEvent } = useEvent()\n const { debts: copy } = useGlobalCopyStore()\n const { selectedDebtPriority } = useDebtsUiStore()\n\n const [buttonEl, setButtonEl] = React.useState<HTMLButtonElement | null>(null)\n\n const handleOpen = (event: React.MouseEvent<HTMLButtonElement>) => {\n setButtonEl(event.currentTarget)\n onEvent(ANALYTICS_EVENTS.DEBTS_CLICK_PRIORITIZE)\n }\n\n const handleClose = () => {\n setButtonEl(null)\n }\n\n const isOpen = Boolean(buttonEl)\n\n const buttonText = React.useMemo(() => {\n const priorityMap = {\n [DebtPriority.FASTEST_PAYOFF_FIRST]: copy.priority_sort_fastest_payoff,\n [DebtPriority.HIGHEST_INTEREST]: copy.priority_sort_highest_interest,\n [DebtPriority.HIGHEST_BALANCE]: copy.priority_sort_highest_balance,\n [DebtPriority.LOWEST_BALANCE]: copy.priority_sort_lowest_balance,\n }\n return priorityMap[selectedDebtPriority] ?? copy.priority_sort_lowest_balance\n }, [selectedDebtPriority])\n\n return (\n <Stack>\n <DebtsPriorityButton\n buttonText={buttonText}\n disabled={disabled}\n isDesktop={isDesktop}\n isOpen={isOpen}\n onClick={handleOpen}\n />\n <DebtsPriorityPopover buttonEl={buttonEl} onClose={handleClose} />\n </Stack>\n )\n})\n","import { observer } from 'mobx-react-lite'\n\nimport { useDebtStore, useGlobalCopyStore, useGoalStore } from '../../../common'\nimport Button from '@mui/material/Button'\nimport Stack from '@mui/material/Stack'\nimport { formatCurrency } from '../../../core/utils/NumberFormatting'\nimport { buildDynamicCopy } from '../../../core/utils/Localization'\n\ninterface PaydownButtonProps {\n disabled?: boolean\n onClick: (event: React.MouseEvent<HTMLButtonElement>) => void\n}\n\nexport const PaydownButton = observer(({ disabled, onClick }: PaydownButtonProps) => {\n const { debts: copy } = useGlobalCopyStore()\n const { totalMonthlyPayments } = useDebtStore()\n const { monthlyCashFlowProfile } = useGoalStore()\n\n const totalContributions = totalMonthlyPayments + Number(monthlyCashFlowProfile?.extra_payment)\n const buttonText = copy.paydown_button_long\n return (\n <Stack alignItems=\"center\" sx={{ flex: 1, flexShrink: 0 }}>\n <Button\n aria-controls=\"extra-paydown\"\n aria-describedby=\"extra-paydown\"\n aria-haspopup={true}\n aria-label=\"extra-paydown\"\n disabled={disabled}\n onClick={onClick}\n sx={{ justifyContent: 'start' }}\n >\n {buildDynamicCopy(buttonText, formatCurrency(totalContributions, '0,0')) as string}\n </Button>\n </Stack>\n )\n})\n","import React from 'react'\nimport { observer } from 'mobx-react-lite'\nimport Stack from '@mui/material/Stack'\n\nimport {\n ANALYTICS_EVENTS,\n ConnectDrawer,\n EmptyState,\n Loader,\n useAccountStore,\n useAppConfig,\n useDebtStore,\n useEvent,\n useGlobalCopyStore,\n useGlobalUiStore,\n useGoalStore,\n useScreenSize,\n useWidgetLoadTimer,\n WidgetContainer,\n} from '../common'\nimport { AccountType, WidgetProps } from '../core'\n\nimport SnowballCard from './components/SnowballCard'\nimport SnowballDrawer from './components/SnowballDrawer'\nimport DebtDrawer from './components/DebtDrawer'\nimport PaydownDrawer from './components/PaydownDrawer'\nimport { DebtsChart } from './components/DebtsChart'\nimport { DebtsTable } from './components/DebtsTable'\nimport { DebtsPriorityAction } from './components/actions/DebtsPriorityAction'\nimport { buildEmptyStateProps, transformDebtsChartData } from '../core/utils/DebtUtils'\nimport { useAccountUiStore } from '../accounts'\nimport { useDebtsUiStore } from './hooks/useDebtsUiStore'\nimport { PaydownButton } from './components/debtspaydown/PaydownButton'\n\nconst DebtsWidget: React.FC<WidgetProps> = ({ onBackClick, onMenuClick, sx }) => {\n const { isDesktop, isMobile } = useScreenSize()\n const { connect: connectCopy, debts: copy } = useGlobalCopyStore()\n const { onEvent } = useEvent()\n const {\n config: { show_connections_widget_in_master },\n } = useAppConfig()\n const { isInitialized } = useGlobalUiStore()\n const { setSelectedAccount } = useAccountUiStore()\n const { selectedDebtPriority, setSelectedDebtChartData } = useDebtsUiStore()\n\n const {\n isAccountDataLoaded,\n loadAccountData,\n detailedAccounts,\n visibleDebtAccounts: accounts,\n } = useAccountStore()\n const { isAllGoalDataLoaded, loadGoalData, monthlyCashFlowProfile } = useGoalStore()\n const { debts } = useDebtStore()\n\n const [isDebtDrawerOpen, setIsDebtDrawerOpen] = React.useState(false)\n const [isPaydownDrawerOpen, setIsPaydownDrawerOpen] = React.useState(false)\n const [isSnowballDrawerOpen, setIsSnowballDrawerOpen] = React.useState(false)\n const [hoveredDebtGuid, setHoveredDebtGuid] = React.useState('')\n const [showConnectWidget, setShowConnectWidget] = React.useState(false)\n\n useWidgetLoadTimer({\n widgetName: 'DebtsWidget',\n isLoaded: isAccountDataLoaded && isAllGoalDataLoaded,\n })\n\n const debtsChartData = React.useMemo(() => {\n const extraPaydown = monthlyCashFlowProfile?.extra_payment ?? 0\n return transformDebtsChartData(debts, selectedDebtPriority, extraPaydown)\n }, [debts, selectedDebtPriority, monthlyCashFlowProfile])\n\n React.useEffect(() => {\n if (!isAccountDataLoaded) {\n loadAccountData().finally()\n }\n onEvent(ANALYTICS_EVENTS.DEBTS_VIEW)\n }, [])\n\n React.useEffect(() => {\n if (isInitialized) {\n loadGoalData().finally()\n }\n }, [isInitialized])\n\n const onHoverDebt = (guid: string) => setHoveredDebtGuid(guid)\n\n const onClickDebt = () => {\n const account = accounts.find((a) => a.guid === hoveredDebtGuid)\n const chartData = debtsChartData.find((d) => d.guid === hoveredDebtGuid)\n if (account) setSelectedAccount(account)\n if (chartData) setSelectedDebtChartData(chartData)\n setIsDebtDrawerOpen(true)\n }\n\n const onClickAccountFilter = () => onEvent(ANALYTICS_EVENTS.DEBTS_CLICK_FILTER)\n\n const onClickSnowballCta = () => {\n setIsSnowballDrawerOpen(true)\n onEvent(ANALYTICS_EVENTS.DEBTS_CLICK_SNOWBALL_CTA)\n }\n\n const onClickPaydown = () => {\n setIsPaydownDrawerOpen(true)\n onEvent(ANALYTICS_EVENTS.DEBTS_CLICK_PAYDOWN)\n }\n\n if (!isInitialized || !isAccountDataLoaded || !isAllGoalDataLoaded) {\n return <Loader />\n }\n\n const hasNoAccounts = detailedAccounts.length === 0\n const hasNoDebtAccounts = accounts.length === 0\n const hasNoDebts = debts.length === 0\n const showEmptyState = hasNoAccounts || hasNoDebtAccounts || hasNoDebts\n\n const emptyStateProps = buildEmptyStateProps(copy, show_connections_widget_in_master, () =>\n setShowConnectWidget(true),\n )\n\n return (\n <WidgetContainer\n actions={[<DebtsPriorityAction disabled={showEmptyState} key=\"prioritize-debts\" />]}\n allowedAccountTypes={[\n AccountType.CREDIT_CARD,\n AccountType.LOAN,\n AccountType.MORTGAGE,\n AccountType.LINE_OF_CREDIT,\n AccountType.CHECKING_LINE_OF_CREDIT,\n ]}\n hasDivider={true}\n onAccountsFilterClick={onClickAccountFilter}\n onBackClick={onBackClick}\n onMenuClick={onMenuClick}\n slotComponent={\n <PaydownButton disabled={showEmptyState} key=\"extra-paydown\" onClick={onClickPaydown} />\n }\n sx={sx}\n title={copy.title}\n >\n <Stack sx={{ pt: 48, px: isDesktop ? '48px' : '24px' }}>\n {showEmptyState && (\n <EmptyState\n header={emptyStateProps.header}\n icon=\"note_stack\"\n onClick={emptyStateProps.onClickHandler}\n primaryButton={emptyStateProps.primaryButton}\n subText={emptyStateProps.description}\n sx={{ maxWidth: 400 }}\n />\n )}\n {!showEmptyState && (\n <>\n <Stack\n sx={{\n alignItems: isMobile ? 'flex-start' : 'flex-end',\n flexDirection: isMobile ? 'column' : 'row',\n mx: isMobile ? '-12px' : 0,\n }}\n >\n <DebtsChart\n debts={debtsChartData}\n height={isMobile ? 250 : undefined}\n hoveredDebtGuid={hoveredDebtGuid}\n onClickArea={onClickDebt}\n onHoverArea={onHoverDebt}\n sx={{ mr: isMobile ? '4px' : '-48px' }}\n />\n <SnowballCard\n debts={debtsChartData}\n onClickCta={onClickSnowballCta}\n sx={{ mb: isMobile ? '0px' : '64px' }}\n />\n </Stack>\n <Stack sx={{ mx: isMobile ? '-24px' : 0 }}>\n <DebtsTable\n debts={debtsChartData}\n hoveredDebtGuid={hoveredDebtGuid}\n onClickRow={onClickDebt}\n onHoverRow={onHoverDebt}\n />\n </Stack>\n </>\n )}\n </Stack>\n <SnowballDrawer\n isOpen={isSnowballDrawerOpen}\n onClose={() => setIsSnowballDrawerOpen(false)}\n />\n <DebtDrawer isOpen={isDebtDrawerOpen} onClose={() => setIsDebtDrawerOpen(false)} />\n <PaydownDrawer isOpen={isPaydownDrawerOpen} onClose={() => setIsPaydownDrawerOpen(false)} />\n <ConnectDrawer\n onClose={() => setShowConnectWidget(false)}\n showConnectWidget={showConnectWidget}\n title={connectCopy.mini_title}\n />\n </WidgetContainer>\n )\n}\n\nexport default observer(DebtsWidget)\n"],"names":["getPayoffProjection","debts","debtPriority","extraPaydown","sortedDebts","d","sortDebtsByPrioriy","totalSavings","monthlyExtra","startDate","endDate","debt","madePayment","index","monthlyRate","monthlyInterest","monthlyPayment","appliedPayment","hasImpossibleDebts","duration","intervalToDuration","formatCurrency","formatDate","DATE_FORMATS_INTL","formatDuration","useDebtsUiStore","React","GlobalDataContext","useDebtStore","SnowballCard","onClickCta","sx","theme","useTheme","isMobile","useScreenSize","copy","useGlobalCopyStore","selectedDebtPriority","monthlyCashFlowProfile","useGoalStore","payoffDate","payoffSavings","payoffDuration","jsx","Card","jsxs","Stack","Text","SnowballCard$1","observer","SnowballDrawer","isOpen","onClose","readMore","setReadMore","Drawer","P","buildDynamicCopy","Box","SnowballDrawer$1","BASE_LINE_COLOR","adjustBrightness","color","factor","r","g","b","hex","newColor","DebtsChart","height","width","hoveredDebtGuid","onClickArea","onHoverArea","onEvent","useEvent","possibleDebts","uniqueXValues","point","a","timestamp","normalizedDatasets","datasetMap","lastY","normalizedDataset","x","y","initialTotalDebt","sum","payoffLine","linearRate","yMax","xData","series","brightnessFactor","seriesColor","getIndexByGuid","guid","s","LineChart","_event","lineItemIdentifier","areaSeries","ANALYTICS_EVENTS","line","highlightedGuid","value","DebtDetailsChart","selectedDebtChartData","Fragment","CardHeader","H3","CardContent","DebtDetailsChart$1","DebtScheduleTab","showCompleted","showError","List","month","balance","payment","DebtScheduleTab$1","InterestRateAction","updateAccount","useAccountStore","rate","setRate","isInvalid","handleSave","handleCancel","ListItemAction","formatPercentage","TextField","e","MonthlyPaymentAction","setPayment","CurrencyInput","v","OriginalBalanceAction","setBalance","DebtDetailsTab","GoalMonthlyPaymentAction","Divider","GoalInterestRateAction","GoalOriginalBalanceAction","DebtMonthlyPaymentAction","DebtInterestRateAction","AccountOriginalBalanceAction","DebtDetailsTab$1","DebtStatusCard","setTabValue","Paper","Alert","ErrorIcon","CompleteIcon","AlertTitle","DebtStatusCard$1","DebtDetailsContent","tabValue","Tabs","_","val","Tab","TabContentContainer","DebtDetailsContent$1","DebtDrawer","headerChart","AccountDetailsHeader","ExtraPaymentAction","updateMonthlyCashFlowProfile","PaydownContent","totalMonthlyPayments","totalContributions","PaydownContent$1","PaydownDrawer","priorityComparator","getWeight","getPriorityValue","getColors","priority","colors","PriorityCell","params","AccountCell","account","accountType","AccountTypeName","InstitutionLogo","DebtsTable","onHoverRow","onClickRow","commonCopy","sortModel","setSortModel","desktopColumns","HeaderCell","mobileColumns","Icon","rows","idx","handleRowHover","event","debtIdx","hoveredDebt","onMouseEnterRow","onRowInteraction","getRowIdByGuid","DataGridPro","newModel","DebtsPriorityButton","buttonText","disabled","isDesktop","onClick","icon","Button","IconButton","DebtsPriorityPopover","buttonEl","setSelectedDebtPriority","options","DebtPriority","handleClick","Popover","text","ListItem","SelectedIcon","DebtsPriorityAction","setButtonEl","handleOpen","handleClose","PaydownButton","DebtsWidget","onBackClick","onMenuClick","connectCopy","show_connections_widget_in_master","useAppConfig","isInitialized","useGlobalUiStore","setSelectedAccount","useAccountUiStore","setSelectedDebtChartData","isAccountDataLoaded","loadAccountData","detailedAccounts","accounts","isAllGoalDataLoaded","loadGoalData","isDebtDrawerOpen","setIsDebtDrawerOpen","isPaydownDrawerOpen","setIsPaydownDrawerOpen","isSnowballDrawerOpen","setIsSnowballDrawerOpen","setHoveredDebtGuid","showConnectWidget","setShowConnectWidget","useWidgetLoadTimer","debtsChartData","transformDebtsChartData","onHoverDebt","onClickDebt","chartData","onClickAccountFilter","onClickSnowballCta","onClickPaydown","Loader","hasNoAccounts","hasNoDebtAccounts","hasNoDebts","showEmptyState","emptyStateProps","buildEmptyStateProps","WidgetContainer","AccountType","EmptyState","ConnectDrawer","DebtsWidget_default"],"mappings":"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"}