@mx-cartographer/experiences 9.2.1 → 9.2.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"file":"index.es.js","sources":["../../src/cashflow/context/hooks.tsx","../../src/cashflow/components/RemainingCash.tsx","../../src/cashflow/components/CashflowWidgetContent.tsx","../../src/cashflow/CashflowMiniWidget.tsx","../../src/cashflow/components/DetailsFooter.tsx","../../src/cashflow/components/DetailsExpenseRow.tsx","../../src/cashflow/components/DetailsExpenseHeader.tsx","../../src/cashflow/util/Filters.ts","../../src/cashflow/components/DetailsTab.tsx","../../src/cashflow/components/SummaryTab.tsx","../../src/cashflow/components/CashflowContent.tsx","../../src/cashflow/components/CashflowAmountHeading.tsx","../../src/cashflow/components/CashflowHeading.tsx","../../src/cashflow/CashflowWidget.tsx","../../src/cashflow/components/onboarding/StepOne.tsx","../../src/cashflow/constants/CashflowImages.ts","../../src/cashflow/components/onboarding/StepTwo.tsx","../../src/cashflow/CashflowOnboarding.tsx"],"sourcesContent":["import React from 'react'\nimport { GlobalDataContext, useCashflowStore } from '../../common'\n\nexport const useCashflowUiStore = () => {\n const context = React.useContext(GlobalDataContext)\n\n if (!context) {\n throw new Error('useCashflowUiStore() must be used within the GlobalDataContext')\n }\n\n return useCashflowStore().uiStore\n}\n","import { observer } from 'mobx-react-lite'\n\nimport Box from '@mui/material/Box'\n\nimport { Text } from '@mxenabled/mxui'\n\nimport { useGlobalCopyStore } from '../../common'\nimport { CurrencyText } from '../../common'\n\ninterface RemainingCashProps {\n remaining: number\n}\n\nconst RemainingCash = ({ remaining }: RemainingCashProps) => {\n const { cashflow: customCopy } = useGlobalCopyStore()\n\n const getRemainingCashColor = () => {\n if (remaining < 0) {\n return 'error.main'\n }\n if (remaining > 0) {\n return 'success.main'\n }\n return 'warning.main'\n }\n\n return (\n <>\n <Box\n sx={{\n borderRadius: '1px',\n backgroundColor: getRemainingCashColor(),\n height: 6,\n width: 6,\n }}\n />\n <Text bold={true} sx={{ flexGrow: 1, fontSize: 12 }}>\n {customCopy.remaining_cash}\n </Text>\n <CurrencyText amount={remaining} bold={true} sx={{ fontSize: 12 }} />\n </>\n )\n}\n\nexport default observer(RemainingCash)\n","import { observer } from 'mobx-react-lite'\n\nimport Box from '@mui/material/Box'\nimport Divider from '@mui/material/Divider'\nimport Stack from '@mui/material/Stack'\nimport { useTheme } from '@mui/material/styles'\n\nimport { Icon, P, Text } from '@mxenabled/mxui'\n\nimport {\n InformationTooltip,\n Loader,\n useGlobalCopyStore,\n useGlobalUiStore,\n useRecurringTransactionsStore,\n useScreenSize,\n useWidgetContainerProvider,\n} from '../../common'\nimport { useCashflowUiStore } from '../context/hooks'\nimport { CurrencyText } from '../../common'\nimport RemainingCash from './RemainingCash'\nimport { buildDynamicCopy } from '../../core/utils/Localization'\n\nconst CashflowWidgetContent = () => {\n const theme = useTheme()\n const { availableWidth } = useWidgetContainerProvider()\n const { isMobile } = useScreenSize()\n\n const { selectedAccountGuids } = useGlobalUiStore()\n const { cashflow: customCopy } = useGlobalCopyStore()\n const { daysUntilNextIncome, expensesTilNextIncome, selectedCashAccounts, selectedCashBalance } =\n useCashflowUiStore()\n const { isDataLoaded } = useRecurringTransactionsStore()\n\n // Plain derivations: observer tracks the observable reads and re-renders\n // correctly even when arrays are mutated in place by MobX. The account-scoped\n // balance is a store computed (selectedCashBalance).\n const filteredExpenseTotal = expensesTilNextIncome\n .filter((expense) => selectedAccountGuids.includes(expense.accountGuid || ''))\n .reduce((acc, curr) => acc + curr.amount, 0)\n\n const availableToSpend = selectedCashBalance - filteredExpenseTotal\n\n if (!isDataLoaded) {\n return <Loader height={isMobile ? 210 : 120} />\n }\n\n return (\n <Box className=\"mx-cashflow\" pl={16} pr={16} pt={16}>\n {availableWidth > 710 ? (\n <Stack\n border={`1px solid ${theme.palette.divider}`}\n borderRadius={1}\n direction=\"row\"\n justifyContent=\"space-between\"\n px={24}\n >\n <Stack pb={14} pt={12}>\n <CurrencyText amount={selectedCashBalance} variant=\"h2\" />\n <P variant=\"caption\" whiteSpace=\"nowrap\">\n {\n buildDynamicCopy(\n customCopy.total_cash_accounts,\n selectedCashAccounts.length,\n ) as string\n }\n </P>\n </Stack>\n\n <Stack pt={18}>\n <Icon name=\"remove\" />\n </Stack>\n\n <Stack pb={14} pt={12}>\n <CurrencyText amount={filteredExpenseTotal} variant=\"h2\" />\n <P variant=\"caption\" whiteSpace=\"nowrap\">\n {buildDynamicCopy(customCopy.expenses_due, expensesTilNextIncome.length) as string}\n </P>\n </Stack>\n\n <Stack pt={18}>\n <Icon name=\"equal\" />\n </Stack>\n\n <Stack pb={14} pr={24} pt={12}>\n <CurrencyText amount={availableToSpend} variant=\"h2\" />\n <Stack alignItems=\"center\" direction=\"row\" gap={8}>\n <P variant=\"caption\" whiteSpace=\"nowrap\">\n {customCopy.available_to_spend}\n </P>\n <InformationTooltip body={customCopy.tooltip_body} title={customCopy.tooltip_title} />\n </Stack>\n </Stack>\n\n <Stack borderLeft={`1px solid ${theme.palette.divider}`} pb={12} pl={24} pt={12}>\n <>\n <Text variant=\"h2\">\n {buildDynamicCopy(customCopy.days, daysUntilNextIncome) as string}\n </Text>\n <P variant=\"caption\" whiteSpace=\"nowrap\">\n {customCopy.next_paycheck}\n </P>\n </>\n </Stack>\n </Stack>\n ) : (\n <Stack border={`1px solid ${theme.palette.divider}`} borderRadius={1}>\n <Stack direction=\"row\" justifyContent=\"space-between\" p={16}>\n <Text variant=\"body2\">\n {\n buildDynamicCopy(\n customCopy.total_cash_accounts,\n selectedCashAccounts.length,\n ) as string\n }\n </Text>\n <CurrencyText amount={selectedCashBalance} bold={true} variant=\"caption\" />\n </Stack>\n\n <Divider />\n\n <Stack direction=\"row\" justifyContent=\"space-between\" p={16}>\n <Text variant=\"body2\">\n {buildDynamicCopy(customCopy.expenses_due, expensesTilNextIncome.length) as string}\n </Text>\n <CurrencyText amount={filteredExpenseTotal} bold={true} symbol=\"-\" variant=\"caption\" />\n </Stack>\n\n <Divider />\n\n <Stack\n alignItems=\"center\"\n bgcolor=\"background.default\"\n direction=\"row\"\n gap={8}\n height={48}\n justifyContent=\"space-between\"\n px={16}\n sx={{ borderBottomLeftRadius: 4, borderBottomRightRadius: 4 }}\n >\n <RemainingCash remaining={availableToSpend} />\n </Stack>\n <Divider />\n <Stack direction=\"row\" justifyContent=\"space-between\" p={16}>\n <Text variant=\"body2\">{customCopy.next_paycheck}</Text>\n <Text bold={true} variant=\"caption\">\n {buildDynamicCopy(customCopy.days, daysUntilNextIncome) as string}\n </Text>\n </Stack>\n </Stack>\n )}\n </Box>\n )\n}\n\nexport default observer(CashflowWidgetContent)\n","import React from 'react'\nimport { observer } from 'mobx-react-lite'\n\nimport {\n EmptyState,\n Loader,\n MiniWidgetContainer,\n useGlobalCopyStore,\n useGlobalUiStore,\n useRecurringTransactionsStore,\n useWidgetLoadTimer,\n} from '../common'\nimport { MiniWidgetProps } from '../core'\n\nimport CashflowWidgetContent from './components/CashflowWidgetContent'\nimport { useCashflowUiStore } from './context/hooks'\n\nconst CashflowMiniWidget: React.FC<MiniWidgetProps> = ({\n onPrimaryCtaClick,\n onSecondaryCtaClick,\n sx = {},\n}) => {\n const { cashflow: copy } = useGlobalCopyStore()\n const { isInitialized } = useGlobalUiStore()\n const { income } = useCashflowUiStore()\n const { loadRepeatingTransactionData, isDataLoaded } = useRecurringTransactionsStore()\n\n React.useEffect(() => {\n if (!isDataLoaded) {\n loadRepeatingTransactionData().finally()\n }\n }, [])\n\n useWidgetLoadTimer({\n widgetName: 'CashflowMiniWidget',\n isLoaded: isDataLoaded,\n })\n\n const showEmptyState = isDataLoaded && !income.length\n\n if (!isInitialized) return <Loader />\n\n return (\n <MiniWidgetContainer\n className=\"mx-exp-cashflow-miniwidget\"\n onPrimaryCtaClick={onPrimaryCtaClick}\n primaryCtaLabel={copy.primary_cta}\n primaryCtaLabelAria={copy.primary_cta_aria}\n subTitle={showEmptyState || !isDataLoaded ? undefined : copy.sub_title}\n sx={{ height: '100%', ...sx }}\n title={copy.title}\n >\n {!isDataLoaded && <Loader />}\n {isDataLoaded &&\n (showEmptyState ? (\n <EmptyState\n header={copy.create}\n icon=\"local_atm\"\n onClick={onSecondaryCtaClick}\n primaryButton={copy.add_income}\n primaryButtonStartIcon=\"add\"\n subText={copy.create_description}\n />\n ) : (\n <CashflowWidgetContent />\n ))}\n </MiniWidgetContainer>\n )\n}\n\nexport default observer(CashflowMiniWidget)\n","import ListItem from '@mui/material/ListItem'\n\nimport RemainingCash from './RemainingCash'\n\ninterface DetailsFooterProps {\n remaining: number\n}\n\nconst DetailsFooter = ({ remaining }: DetailsFooterProps) => {\n return (\n <ListItem\n sx={{\n alignItems: 'center',\n backgroundColor: 'background.highlight',\n display: 'flex',\n gap: 12,\n padding: '12px 24px',\n borderBottomLeftRadius: '3px',\n borderBottomRightRadius: '3px',\n minHeight: 'auto',\n }}\n >\n <RemainingCash remaining={remaining} />\n </ListItem>\n )\n}\n\nexport default DetailsFooter\n","import React from 'react'\nimport { observer } from 'mobx-react-lite'\n\nimport Divider from '@mui/material/Divider'\nimport ListItem from '@mui/material/ListItem'\nimport Stack from '@mui/material/Stack'\n\nimport { Text } from '@mxenabled/mxui'\n\nimport { DATE_FORMATS_INTL, formatDate } from '../../core/constants'\nimport { type Recurrence } from '../../core'\nimport { CurrencyText } from '../../common'\n\nexport enum ExpenseType {\n EXPENSE = 'expense',\n INCOME = 'income',\n}\n\ninterface DetailsExpenseRowType {\n recurrence: Recurrence\n}\n\nconst DetailsExpenseRow: React.FC<DetailsExpenseRowType> = ({ recurrence }) => {\n return (\n <>\n <ListItem sx={{ display: 'flex', alignItems: 'center', gap: 16, px: 24, py: 12 }}>\n <Stack alignItems=\"center\" height={32} width={32}>\n <Text bold={true} sx={{ fontSize: 11 }}>\n {formatDate(recurrence.expectedDate, DATE_FORMATS_INTL.MONTH)}\n </Text>\n <Text bold={true} sx={{ fontSize: 11 }}>\n {formatDate(recurrence.expectedDate, DATE_FORMATS_INTL.DAY)}\n </Text>\n </Stack>\n <Text sx={{ flexGrow: 1, fontSize: 13 }}>{recurrence.name}</Text>\n <CurrencyText\n amount={recurrence.amount}\n bold={true}\n sx={{ textAlign: 'right', fontSize: 13 }}\n />\n </ListItem>\n <Divider />\n </>\n )\n}\n\nexport default observer(DetailsExpenseRow)\n","import React from 'react'\nimport { observer } from 'mobx-react-lite'\n\nimport Divider from '@mui/material/Divider'\nimport ListSubheader from '@mui/material/ListSubheader'\n\nimport { Text } from '@mxenabled/mxui'\n\nimport { useGlobalCopyStore } from '../../common'\nimport { ExpenseType } from './DetailsExpenseRow'\nimport { formatCurrency } from '../../core/utils/NumberFormatting'\n\ninterface DetailsExpenseHeaderProps {\n total: number\n type: ExpenseType\n}\n\nconst DetailsExpenseHeader: React.FC<DetailsExpenseHeaderProps> = ({ total, type }) => {\n const { cashflow: customCopy } = useGlobalCopyStore()\n\n return (\n <>\n <ListSubheader\n sx={{\n alignItems: 'center',\n backgroundColor: 'background.highlight',\n display: 'flex',\n justifyContent: 'space-between',\n pb: 4,\n pt: 12,\n px: 24,\n }}\n >\n <Text bold={true} sx={{ fontSize: 12 }}>\n {type === ExpenseType.EXPENSE ? customCopy.expenses : customCopy.income}\n </Text>\n <Text bold={true} sx={{ fontSize: 13 }}>\n {type === ExpenseType.EXPENSE ? '-' : '+'}\n {formatCurrency(total, '0,0.00')}\n </Text>\n </ListSubheader>\n <Divider />\n </>\n )\n}\n\nexport default observer(DetailsExpenseHeader)\n","import type { Account, Recurrence } from '../../core'\nimport { isAfter } from 'date-fns/isAfter'\nimport { isBefore } from 'date-fns/isBefore'\nimport { isToday } from 'date-fns/isToday'\n\n/**\n * Returns recurrences that match the given account and date range\n * @param account The account\n * @param dateRange The date range\n */\nexport const recurrenceFilter =\n (account: Account, dateRange: { start: Date; end: Date }) => (r: Recurrence) =>\n r.accountGuid === account.guid &&\n (isToday(r.expectedDate) || isAfter(r.expectedDate, dateRange.start)) &&\n isBefore(r.expectedDate, dateRange.end)\n","import { observer } from 'mobx-react-lite'\nimport { getUnixTime } from 'date-fns/getUnixTime'\n\nimport Divider from '@mui/material/Divider'\nimport List from '@mui/material/List'\nimport ListItem from '@mui/material/ListItem'\nimport Stack from '@mui/material/Stack'\n\nimport { Text } from '@mxenabled/mxui'\n\nimport AccountListItem from '../../accounts/components/AccountListItem'\nimport DetailsFooter from './DetailsFooter'\nimport DetailsExpenseRow, { ExpenseType } from './DetailsExpenseRow'\nimport DetailsExpenseHeader from './DetailsExpenseHeader'\n\nimport { useAppConfig, useGlobalCopyStore, useWidgetContainerProvider } from '../../common'\nimport { DATE_FORMATS_INTL, formatDate } from '../../core/constants'\nimport { type Account, type Recurrence } from '../../core'\nimport { useCashflowUiStore } from '../context/hooks'\nimport { recurrenceFilter } from '../util/Filters'\nimport { getAccountStartingBalance } from '../../core/utils/AccountUtils'\n\nconst DetailsTab = () => {\n const { availableWidth } = useWidgetContainerProvider()\n const { cashflow: customCopy } = useGlobalCopyStore()\n const {\n config: { display_available_balance_in_accounts: useAvailable },\n } = useAppConfig()\n const { dateRange, selectedCashAccounts, upcomingExpenses, upcomingIncome } = useCashflowUiStore()\n\n return (\n <Stack>\n <Stack direction={availableWidth < 400 ? 'column' : 'row'} justifyContent=\"space-between\">\n <Text bold={true} sx={{ fontSize: 15, mb: 12 }}>\n {customCopy.accounts_breakdown}\n </Text>\n <Text bold={true} sx={{ fontSize: 15, mb: 12 }}>\n {formatDate(dateRange.start, DATE_FORMATS_INTL.FULL_MONTH_DAY)} -{' '}\n {formatDate(dateRange.end, DATE_FORMATS_INTL.FULL_MONTH_DAY)}\n </Text>\n </Stack>\n\n <Stack>\n {selectedCashAccounts.map((account: Account) => {\n const upcomingIncomeByAccount = upcomingIncome\n .filter(recurrenceFilter(account, dateRange))\n .sort((a, b) => getUnixTime(a.expectedDate) - getUnixTime(b.expectedDate))\n\n const projectedExpensesByAccount = upcomingExpenses.filter(\n recurrenceFilter(account, dateRange),\n )\n\n const incomeTotal = upcomingIncomeByAccount.reduce(\n (acc: number, curr: Recurrence) => acc + curr.amount,\n 0,\n )\n const expenseTotal = projectedExpensesByAccount.reduce(\n (acc, curr) => acc + curr.amount,\n 0,\n )\n\n const remainingBalance =\n getAccountStartingBalance(account, useAvailable) + incomeTotal - expenseTotal\n\n return (\n <List\n key={account.guid}\n sx={{\n border: '1px solid',\n borderColor: 'neutral.light',\n mb: 24,\n borderRadius: 1,\n }}\n >\n <AccountListItem\n account={account}\n listItemProps={{\n disableGutters: false,\n disablePadding: false,\n sx: { borderTopRadius: 1, pr: 24 },\n }}\n />\n <Divider />\n {/* Income */}\n {upcomingIncomeByAccount.length > 0 && (\n <ListItem>\n <List\n subheader={\n <DetailsExpenseHeader total={incomeTotal} type={ExpenseType.INCOME} />\n }\n sx={{ width: '100%' }}\n >\n {upcomingIncomeByAccount.map((r) => (\n <DetailsExpenseRow key={r.repeatingTransactionGuid} recurrence={r} />\n ))}\n </List>\n </ListItem>\n )}\n {/* Expenses */}\n {projectedExpensesByAccount.length > 0 && (\n <ListItem>\n <List\n subheader={\n <DetailsExpenseHeader total={expenseTotal} type={ExpenseType.EXPENSE} />\n }\n sx={{ width: '100%' }}\n >\n {projectedExpensesByAccount.map((r) => (\n <DetailsExpenseRow key={r.repeatingTransactionGuid} recurrence={r} />\n ))}\n </List>\n </ListItem>\n )}\n {/* Bottom row total */}\n <DetailsFooter remaining={remainingBalance} />\n </List>\n )\n })}\n </Stack>\n </Stack>\n )\n}\n\nexport default observer(DetailsTab)\n","import React from 'react'\nimport { observer } from 'mobx-react-lite'\n\nimport Box from '@mui/material/Box'\nimport Divider from '@mui/material/Divider'\nimport List from '@mui/material/List'\nimport ListItem from '@mui/material/ListItem'\nimport Stack from '@mui/material/Stack'\nimport { useTheme } from '@mui/material/styles'\nimport { alpha } from '@mui/material/styles'\n\nimport { DataGridPro, GridColDef } from '@mui/x-data-grid-pro'\n\nimport { InstitutionLogo, Text } from '@mxenabled/mxui'\n\nimport {\n CurrencyText,\n InformationTooltip,\n useAppConfig,\n useGlobalCopyStore,\n useWidgetContainerProvider,\n} from '../../common'\nimport { DATE_FORMATS_INTL, formatDate } from '../../core/constants'\nimport { type Account } from '../../core'\nimport { useCashflowUiStore } from '../context/hooks'\nimport { recurrenceFilter } from '../util/Filters'\n\nimport RemainingCash from './RemainingCash'\nimport { formatCurrency } from '../../core/utils/NumberFormatting'\nimport { getAccountStartingBalance } from '../../core/utils/AccountUtils'\n\nconst SummaryTab = () => {\n const { availableWidth } = useWidgetContainerProvider()\n const theme = useTheme()\n const { cashflow: customCopy } = useGlobalCopyStore()\n const {\n config: { display_available_balance_in_accounts: useAvailable },\n } = useAppConfig()\n const { dateRange, selectedCashAccounts, upcomingExpenses, upcomingIncome } = useCashflowUiStore()\n\n const columns: GridColDef[] = [\n {\n field: 'account',\n flex: 1.5,\n headerName: customCopy.accounts,\n renderCell: ({ value: { name, nickname, institution_guid, account_number } }) => {\n const accountName = nickname || name\n\n return (\n <Stack alignItems=\"center\" flexDirection=\"row\" gap={12}>\n <InstitutionLogo\n alt={customCopy.institution_logo}\n institutionGuid={institution_guid || ''}\n size={16}\n />\n <Text variant=\"body2\">{`${accountName} ${account_number ? `*${account_number}` : ''}`}</Text>\n </Stack>\n )\n },\n },\n {\n field: 'balance',\n flex: 1,\n headerName: customCopy.balance,\n type: 'number',\n renderCell: (params) => (\n <Text color={theme.palette.text.primary} variant=\"body2\">\n {formatCurrency(params.value, '0,0.00')}\n </Text>\n ),\n },\n {\n field: 'income',\n flex: 1,\n headerName: customCopy.projected_income,\n type: 'number',\n renderCell: (params) => (\n <Text color={theme.palette.text.primary} variant=\"body2\">\n {`+${formatCurrency(params.value, '0,0.00')}`}\n </Text>\n ),\n },\n {\n field: 'expenses',\n flex: 1.1,\n headerName: customCopy.projected_expenses,\n type: 'number',\n renderCell: (params) => (\n <Text color={theme.palette.text.primary} variant=\"body2\">\n {`-${formatCurrency(params.value, '0,0.00')}`}\n </Text>\n ),\n },\n {\n field: 'remaining',\n flex: 1,\n headerName: customCopy.remaining,\n type: 'number',\n renderCell: (params) => {\n const total = params.row.balance + params.row.income - params.row.expenses\n\n return (\n <Text\n color={Math.sign(total) === -1 ? theme.palette.error.main : theme.palette.text.primary}\n variant=\"body2\"\n >\n {formatCurrency(total, '0,0.00')}\n </Text>\n )\n },\n },\n ]\n\n const rows = React.useMemo(() => {\n return selectedCashAccounts.map((account: Account) => {\n const totalprojectedExpenses = upcomingExpenses\n .filter(recurrenceFilter(account, dateRange))\n .reduce((acc, curr) => acc + curr.amount, 0)\n\n const totalProjectedIncome = upcomingIncome\n .filter(recurrenceFilter(account, dateRange))\n .reduce((acc, curr) => acc + curr.amount, 0)\n\n const startingBalance = getAccountStartingBalance(account, useAvailable)\n const remaining = startingBalance + totalProjectedIncome - totalprojectedExpenses\n\n return {\n account,\n balance: startingBalance,\n id: account.guid,\n income: totalProjectedIncome,\n expenses: totalprojectedExpenses,\n remaining,\n }\n })\n }, [selectedCashAccounts, upcomingExpenses, upcomingIncome, useAvailable, dateRange])\n\n return (\n <Box\n sx={{\n width: '100%',\n }}\n >\n <Stack\n direction={availableWidth < 540 ? 'column' : 'row'}\n justifyContent=\"space-between\"\n mb={12}\n >\n <Stack alignItems=\"center\" direction=\"row\" gap={8}>\n <Text\n bold={true}\n sx={{\n fontSize: 15,\n }}\n >\n {customCopy.cash_inflow_and_outflow}\n </Text>\n <InformationTooltip\n body={customCopy.table_tooltip_body}\n title={customCopy.table_tooltip_title}\n />\n </Stack>\n <Text bold={true} sx={{ fontSize: 15 }}>\n {formatDate(dateRange.start, DATE_FORMATS_INTL.FULL_MONTH_DAY)} -{' '}\n {formatDate(dateRange.end, DATE_FORMATS_INTL.FULL_MONTH_DAY)}\n </Text>\n </Stack>\n {availableWidth > 650 ? (\n <DataGridPro\n columnHeaderHeight={48}\n columns={columns}\n density=\"standard\"\n disableColumnMenu={true}\n disableRowSelectionOnClick={true}\n hideFooter={true}\n rowHeight={48}\n rows={rows}\n sx={{\n border: '1px solid',\n borderColor: 'neutral.light',\n borderRadius: 1,\n '& .MuiDataGrid-columnHeader .MuiIconButton-root': {\n color: theme.palette.primary.main,\n '&:hover': {\n backgroundColor: alpha(theme.palette.primary.main, 0.1),\n },\n },\n '& .MuiDataGrid-columnHeaderTitle': {\n fontFamily: theme.typography.h3.fontFamily,\n fontSize: theme.typography.body2.fontSize,\n },\n '& .MuiDataGrid-sortIcon': {\n color: theme.palette.primary.main,\n },\n }}\n />\n ) : (\n rows.map((row) => {\n const { name, nickname, institution_guid, account_number } = row.account\n const accountName = nickname || name\n\n return (\n <List\n key={row.id}\n sx={{\n border: '1px solid',\n borderColor: 'neutral.light',\n borderRadius: 1,\n marginBottom: 24,\n }}\n >\n <ListItem sx={{ minHeight: 'auto' }}>\n <Stack width=\"100%\">\n <Stack\n alignItems=\"center\"\n flexDirection=\"row\"\n justifyContent=\"space-between\"\n px={16}\n py={12}\n >\n <Stack alignItems=\"center\" flexDirection=\"row\" gap={8} width=\"50%\">\n <InstitutionLogo\n alt={customCopy.institution_logo}\n institutionGuid={institution_guid || ''}\n size={16}\n />\n <Text variant=\"body2\">{`${accountName} ${account_number ? `*${account_number}` : ''}`}</Text>\n </Stack>\n <CurrencyText amount={row.balance} bold={true} variant=\"body2\" />\n </Stack>\n <Divider sx={{ width: '100%' }} />\n <Stack\n alignItems=\"center\"\n flexDirection=\"row\"\n justifyContent=\"space-between\"\n px={16}\n py={12}\n >\n <Text variant=\"body2\">{customCopy.projected_income}</Text>\n <CurrencyText amount={row.income} bold={true} symbol=\"+\" variant=\"body2\" />\n </Stack>\n <Divider sx={{ width: '100%' }} />\n <Stack\n alignItems=\"center\"\n flexDirection=\"row\"\n justifyContent=\"space-between\"\n px={16}\n py={12}\n >\n <Text variant=\"body2\">{customCopy.projected_expenses}</Text>\n <CurrencyText amount={row.expenses} bold={true} symbol=\"-\" variant=\"body2\" />\n </Stack>\n <Divider sx={{ width: '100%' }} />\n <Stack\n alignItems=\"center\"\n bgcolor=\"background.default\"\n flexDirection=\"row\"\n gap={8}\n justifyContent=\"space-between\"\n px={16}\n py={12}\n sx={{ borderBottomLeftRadius: '4px', borderBottomRightRadius: '4px' }}\n >\n <RemainingCash remaining={row.remaining} />\n </Stack>\n </Stack>\n </ListItem>\n </List>\n )\n })\n )}\n </Box>\n )\n}\n\nexport default observer(SummaryTab)\n","import React from 'react'\nimport { observer } from 'mobx-react-lite'\n\nimport Box from '@mui/material/Box'\nimport Tabs from '@mui/material/Tabs'\nimport Tab from '@mui/material/Tab'\n\nimport DetailsTab from './DetailsTab'\nimport SummaryTab from './SummaryTab'\nimport { TabContentContainer, useEvent, useGlobalCopyStore, useScreenSize } from '../../common'\n\nconst CashflowContent: React.FC = () => {\n const { cashflow: customCopy } = useGlobalCopyStore()\n const { isDesktop } = useScreenSize()\n const { onEvent } = useEvent()\n\n const [value, setValue] = React.useState(0)\n\n const handleChange = (_event: React.SyntheticEvent, newValue: number) => {\n setValue(newValue)\n }\n\n React.useEffect(() => {\n onEvent(value === 0 ? 'cash_flow_summary' : 'cash_flow_details')\n }, [value])\n\n return (\n <Box>\n <Tabs\n aria-label={customCopy.cashflow_summary_and_details}\n centered={true}\n onChange={handleChange}\n textColor=\"primary\"\n value={value}\n variant=\"fullWidth\"\n >\n <Tab\n aria-controls=\"cashflow-tabpanel-0\"\n id=\"cashflow-tab-0\"\n label={customCopy.summary}\n sx={{\n textTransform: 'none',\n }}\n />\n <Tab\n aria-controls=\"cashflow-tabpanel-1\"\n id=\"cashflow-tab-1\"\n label={customCopy.details}\n sx={{\n textTransform: 'none',\n }}\n />\n </Tabs>\n <Box sx={{ mb: 32 }} />\n <TabContentContainer index={0} name=\"cashflow\" value={value}>\n <Box sx={{ m: isDesktop ? 48 : 16 }}>\n <SummaryTab />\n </Box>\n </TabContentContainer>\n <TabContentContainer index={1} name=\"cashflow\" value={value}>\n <Box sx={{ m: isDesktop ? 48 : 16 }}>\n <DetailsTab />\n </Box>\n </TabContentContainer>\n </Box>\n )\n}\n\nexport default observer(CashflowContent)\n","import React from 'react'\n\nimport Stack from '@mui/material/Stack'\n\nimport { Text } from '@mxenabled/mxui'\n\nimport { CurrencyText } from '../../common/components/CurrencyText'\n\ninterface CashflowAmountHeadingProps {\n amount: number\n isMobile?: boolean\n isTotal?: boolean\n label: string\n symbol?: string\n tooltip?: React.ReactNode\n}\n\nconst CashflowAmountHeading: React.FC<CashflowAmountHeadingProps> = ({\n amount,\n isMobile = false,\n isTotal = false,\n label,\n symbol,\n tooltip,\n}) => {\n return (\n <Stack\n bgcolor={isTotal ? 'background.default' : 'transparent'}\n direction={isMobile ? 'row' : 'column'}\n justifyContent={isMobile ? 'space-between' : 'initial'}\n padding={isMobile ? '14px 16px' : 0}\n sx={{ borderBottomLeftRadius: 4, borderBottomRightRadius: 4 }}\n >\n {!isMobile && <CurrencyText amount={amount} component=\"h2\" variant=\"h2\" />}\n <Stack alignItems=\"center\" component=\"span\" direction=\"row\" gap={8} mt={2}>\n <Text bold={isTotal} variant=\"body2\">\n {label}\n </Text>\n {tooltip}\n </Stack>\n {isMobile && <CurrencyText amount={amount} component=\"h2\" symbol={symbol} variant=\"body2\" />}\n </Stack>\n )\n}\n\nexport default CashflowAmountHeading\n","import React from 'react'\nimport { observer } from 'mobx-react-lite'\nimport { isAfter } from 'date-fns/isAfter'\nimport { isBefore } from 'date-fns/isBefore'\nimport { isToday } from 'date-fns/isToday'\n\nimport Button from '@mui/material/Button'\nimport Divider from '@mui/material/Divider'\nimport Stack from '@mui/material/Stack'\n\nimport { Icon, Text } from '@mxenabled/mxui'\n\nimport {\n Drawer,\n InformationTooltip,\n useGlobalCopyStore,\n useGlobalUiStore,\n useRecurringTransactionsStore,\n useWidgetContainerProvider,\n} from '../../common'\nimport { type Recurrence } from '../../core'\n\nimport { ManageIncome } from '../../recurringtransactions'\n\nimport CashflowAmountHeading from './CashflowAmountHeading'\nimport { useCashflowUiStore } from '../context/hooks'\nimport { buildDynamicCopy } from '../../core/utils/Localization'\n\n// This filter only includes activities that have an account guid that matches an account guid\n// in the given list of accountGuids and is within the given date range\nconst recurrenceAccountFilter =\n (accountGuids: string[], dateRange: { start: Date; end: Date }) => (r: Recurrence) =>\n r.accountGuid &&\n accountGuids.includes(r.accountGuid) &&\n (isToday(r.expectedDate) || isAfter(r.expectedDate, dateRange.start)) &&\n isBefore(r.expectedDate, dateRange.end)\n\nconst CashflowHeading: React.FC = () => {\n const { availableWidth } = useWidgetContainerProvider()\n const { cashflow: customCopy } = useGlobalCopyStore()\n\n const { isDataLoaded } = useRecurringTransactionsStore()\n const { selectedAccountGuids } = useGlobalUiStore()\n const {\n dateRange,\n income,\n selectedCashAccounts,\n selectedCashBalance,\n upcomingExpenses,\n upcomingIncome,\n } = useCashflowUiStore()\n\n const [isOpen, setIsOpen] = React.useState(false)\n\n // Plain derivations: observer tracks the observable reads, so no useMemo is\n // needed. The account-scoped balance is a store computed (selectedCashBalance).\n const filteredExpenses = upcomingExpenses.filter(\n recurrenceAccountFilter(selectedAccountGuids, dateRange),\n )\n\n const filteredIncome = upcomingIncome.filter(\n recurrenceAccountFilter(selectedAccountGuids, dateRange),\n )\n\n const cashBalance = selectedCashBalance\n\n const totalUpcomingExpenses = filteredExpenses.reduce((acc, curr) => acc + curr.amount, 0)\n const totalUpcomingIncome = filteredIncome.reduce((acc, curr) => acc + curr.amount, 0)\n const availableToSpend = cashBalance - totalUpcomingExpenses + totalUpcomingIncome\n\n const hasRecurringIncome = isDataLoaded && income.length > 0\n const isMobile = availableWidth < 725\n\n return (\n <Stack sx={{ mx: isMobile ? 16 : 0, my: isMobile ? 24 : 42 }}>\n <Stack\n border={isMobile ? '1px solid' : 'none'}\n borderColor=\"neutral.light\"\n borderRadius={2}\n flexDirection={isMobile ? 'column' : 'row'}\n gap={isMobile ? 0 : 24}\n justifyContent=\"center\"\n >\n <CashflowAmountHeading\n amount={cashBalance}\n isMobile={isMobile}\n label={buildDynamicCopy(customCopy.cash_and_bank, selectedCashAccounts.length) as string}\n />\n\n {isMobile && <Divider />}\n {hasRecurringIncome ? (\n <>\n {!isMobile && <Text sx={{ fontSize: 25, lineHeight: 1 }}>+</Text>}\n <CashflowAmountHeading\n amount={totalUpcomingIncome}\n isMobile={isMobile}\n label={customCopy.to_be_received}\n symbol={isMobile ? '+' : undefined}\n />\n </>\n ) : (\n <Button\n onClick={() => setIsOpen(true)}\n startIcon={<Icon name=\"add\" />}\n sx={{ fontSize: 13 }}\n >\n {customCopy.add_income}\n </Button>\n )}\n\n {isMobile ? <Divider /> : <Text sx={{ fontSize: 25, lineHeight: 1 }}>-</Text>}\n\n <CashflowAmountHeading\n amount={totalUpcomingExpenses}\n isMobile={isMobile}\n label={buildDynamicCopy(customCopy.to_be_paid_out, filteredExpenses.length) as string}\n symbol={isMobile ? '-' : undefined}\n />\n\n {isMobile ? <Divider /> : <Text sx={{ fontSize: 25, lineHeight: 1 }}>=</Text>}\n\n <CashflowAmountHeading\n amount={availableToSpend}\n isMobile={isMobile}\n isTotal={isMobile}\n label={customCopy.remaining_cash}\n tooltip={\n <InformationTooltip\n body={customCopy.remaining_income_tooltip_body}\n title={customCopy.remaining_income_tooltip_title}\n />\n }\n />\n </Stack>\n\n <Drawer\n ariaLabelClose={customCopy.close_manage_income_aria}\n isOpen={isOpen}\n onClose={() => setIsOpen(false)}\n shouldShowHeaderBorders={false}\n title={customCopy.manage_income}\n >\n <ManageIncome />\n </Drawer>\n </Stack>\n )\n}\n\nexport default observer(CashflowHeading)\n","import React from 'react'\nimport { observer } from 'mobx-react-lite'\n\nimport {\n ANALYTICS_EVENTS,\n Drawer,\n Loader,\n useAccountStore,\n useAppConfig,\n useEvent,\n useGlobalCopyStore,\n useGlobalUiStore,\n useRecurringTransactionsStore,\n useTransactionStore,\n useWidgetLoadTimer,\n WidgetContainer,\n} from '../common'\nimport { AccountType, WidgetProps } from '../core'\n\nimport { RecurringSettings } from '../recurringtransactions'\n\nimport CashflowContent from './components/CashflowContent'\nimport CashflowHeading from './components/CashflowHeading'\nimport { useCashflowUiStore } from './context/hooks'\nimport { subDays } from 'date-fns/subDays'\nimport { startOfToday } from 'date-fns/startOfToday'\nimport { endOfToday } from 'date-fns/endOfToday'\n\nconst CashflowWidget: React.FC<WidgetProps> = ({ onBackClick, onMenuClick, sx = {} }) => {\n const { selectedAccounts, selectedAccountGuids, shouldDisableNextDate, shouldDisablePrevDate } =\n useGlobalUiStore()\n\n const { onEvent } = useEvent()\n const { clientConfig } = useAppConfig()\n const { visibleCashAccounts: cashAccounts } = useAccountStore()\n const { setFilter } = useTransactionStore()\n const { dateRange } = useCashflowUiStore()\n const { loadRepeatingTransactionData, isDataLoaded } = useRecurringTransactionsStore()\n const { cashflow: customCopy, recurring: recurringCopy } = useGlobalCopyStore()\n const { isInitialized } = useGlobalUiStore()\n\n const view = clientConfig?.master?.deep_link_params?.view\n const isManageIncomeView = view === 'manage_income'\n const [isSettingsOpen, setIsSettingsOpen] = React.useState(isManageIncomeView)\n\n React.useEffect(() => {\n if (!isDataLoaded) {\n loadRepeatingTransactionData().finally()\n }\n }, [])\n\n React.useEffect(() => {\n const cashAccountGuids = cashAccounts.map((account) => account.guid)\n const selAccts = selectedAccounts.filter(\n (account) =>\n selectedAccountGuids.includes(account.guid) && cashAccountGuids.includes(account.guid),\n )\n setFilter({\n dateRange: { start: subDays(startOfToday(), 90), end: endOfToday() },\n accounts: selAccts.map((a) => a.guid),\n })\n }, [cashAccounts, selectedAccounts])\n\n useWidgetLoadTimer({\n widgetName: 'CashflowWidget',\n isLoaded: isDataLoaded,\n })\n\n if (!isInitialized) return <Loader />\n\n return (\n <WidgetContainer\n actions={[\n {\n label: recurringCopy.action_title,\n iconName: 'credit_card_gear',\n onClick: () => {\n setIsSettingsOpen(true)\n onEvent(ANALYTICS_EVENTS.CASH_FLOW_CLICK_SETTINGS)\n },\n },\n ]}\n allowedAccountTypes={[\n AccountType.CASH,\n AccountType.CHECKING,\n AccountType.PREPAID,\n AccountType.SAVINGS,\n AccountType.CHECKING_LINE_OF_CREDIT,\n ]}\n calendarActions={{\n shouldDisableNext: shouldDisableNextDate,\n shouldDisablePrevious: shouldDisablePrevDate,\n shouldDisablePicker: true,\n onRangeChanged: () => {},\n }}\n dateRange={dateRange}\n dateRangeVariant=\"readonly\"\n hasDivider={true}\n onAccountsFilterClick={() => onEvent(ANALYTICS_EVENTS.CASH_FLOW_CLICK_FILTER)}\n onBackClick={onBackClick}\n onMenuClick={onMenuClick}\n sx={sx}\n title={customCopy.title}\n >\n <CashflowHeading />\n\n <CashflowContent />\n\n <Drawer\n ariaLabelClose={customCopy.close_settings_aria}\n isOpen={isSettingsOpen}\n onClose={() => setIsSettingsOpen(false)}\n shouldShowHeaderBorders={false}\n title={recurringCopy.action_title}\n >\n <RecurringSettings defaultSelectedTab={isManageIncomeView ? 1 : 0} />\n </Drawer>\n </WidgetContainer>\n )\n}\n\nexport default observer(CashflowWidget)\n","import React from 'react'\nimport { observer } from 'mobx-react-lite'\n\nimport Box from '@mui/material/Box'\nimport Button from '@mui/material/Button'\nimport Stack from '@mui/material/Stack'\n\nimport { H2, H3, Icon, P } from '@mxenabled/mxui'\nimport { useTheme } from '@mui/material/styles'\nimport { useCashflowStore, useGlobalCopyStore } from '../../../common'\n\ninterface StepOneProps {\n handleNextStep: () => void\n}\n\nconst StepOne: React.FC<StepOneProps> = ({ handleNextStep }) => {\n const { completeOnboarding } = useCashflowStore()\n const { cashflow: customCopy } = useGlobalCopyStore()\n\n const theme = useTheme()\n\n return (\n <Stack>\n <H2 pb={12} variant=\"h1\">\n {customCopy.welcome_title}\n </H2>\n <H3 color={theme.palette.primary.light} pb={8}>\n {customCopy.welcome_sub_title}\n </H3>\n <P pb={32}>{customCopy.welcome_description}</P>\n <Stack direction=\"column\" mb={32} spacing={32}>\n <P sx={{ display: 'flex', alignItems: 'center', fontSize: 18 }}>\n <Box\n bgcolor={theme.palette.primary.lighter}\n borderRadius={1}\n component=\"span\"\n height={44}\n mr={24}\n sx={{ display: 'flex', alignItems: 'center', justifyContent: 'center', flexShrink: 0 }}\n width={44}\n >\n <Icon color=\"primary\" name=\"currency_exchange\" />\n </Box>\n {customCopy.bullet_one}\n </P>\n <P sx={{ display: 'flex', alignItems: 'center', fontSize: 18 }}>\n <Box\n bgcolor={theme.palette.primary.lighter}\n borderRadius={1}\n component=\"span\"\n height={44}\n mr={24}\n sx={{ display: 'flex', alignItems: 'center', justifyContent: 'center', flexShrink: 0 }}\n width={44}\n >\n <Icon color=\"primary\" name=\"cardiology\" />\n </Box>\n {customCopy.bullet_two}\n </P>\n <P sx={{ display: 'flex', alignItems: 'center', fontSize: 18 }}>\n <Box\n bgcolor={theme.palette.primary.lighter}\n borderRadius={1}\n component=\"span\"\n height={44}\n mr={24}\n sx={{ display: 'flex', alignItems: 'center', justifyContent: 'center', flexShrink: 0 }}\n width={44}\n >\n <Icon color=\"primary\" name=\"flare\" />\n </Box>\n {customCopy.bullet_three}\n </P>\n </Stack>\n <Stack direction=\"row\" spacing={16}>\n <Button onClick={handleNextStep} variant=\"contained\">\n {customCopy.get_started_button}\n </Button>\n <Button onClick={completeOnboarding} variant=\"outlined\">\n {customCopy.skip_button}\n </Button>\n </Stack>\n </Stack>\n )\n}\n\nexport default observer(StepOne)\n","const ASSETS_URL = 'https://content.moneydesktop.com/storage/MD_Assets/md/cashflow'\n\nexport const CASHFLOW_IMAGES = {\n CASHFLOW_ONBOARDING: `${ASSETS_URL}/cashflow-onboarding.png`,\n CASHFLOW_LOADING_ANIMATION: `${ASSETS_URL}/loading-animation.gif`,\n}\n","import React from 'react'\nimport { observer } from 'mobx-react-lite'\n\nimport { H2, P } from '@mxenabled/mxui'\nimport { useGlobalCopyStore } from '../../../common'\n\nimport { CASHFLOW_IMAGES } from '../../constants/CashflowImages'\n\nconst StepTwo: React.FC = () => {\n const { cashflow: customCopy } = useGlobalCopyStore()\n\n return (\n <React.Fragment>\n <div>\n <img alt=\"Loading\" src={CASHFLOW_IMAGES.CASHFLOW_LOADING_ANIMATION} />\n </div>\n <H2 pb={12} variant=\"h1\">\n {customCopy.loading_title}\n </H2>\n <P>{customCopy.loading_description}</P>\n </React.Fragment>\n )\n}\n\nexport default observer(StepTwo)\n","import React, { useState } from 'react'\nimport { observer } from 'mobx-react-lite'\nimport { formatISO } from 'date-fns/formatISO'\nimport { fromUnixTime } from 'date-fns/fromUnixTime'\nimport { getUnixTime } from 'date-fns/getUnixTime'\nimport { startOfMonth } from 'date-fns/startOfMonth'\nimport { startOfToday } from 'date-fns/startOfToday'\nimport { subDays } from 'date-fns/subDays'\n\nimport Box from '@mui/material/Box'\nimport Button from '@mui/material/Button'\nimport Divider from '@mui/material/Divider'\nimport List from '@mui/material/List'\nimport Stack from '@mui/material/Stack'\nimport { keyframes } from '@mui/material/styles'\nimport { useTheme } from '@mui/material/styles'\n\nimport { H2, Icon, P } from '@mxenabled/mxui'\n\nimport StepOne from './components/onboarding/StepOne'\nimport StepTwo from './components/onboarding/StepTwo'\n\nimport {\n Loader,\n useCashflowStore,\n useGlobalCopyStore,\n useGlobalUiStore,\n useRecurringTransactionsStore,\n useScreenSize,\n useTransactionStore,\n useUserStore,\n} from '../common'\nimport { type RepeatingTransaction, type Transaction, RepeatingType, Frequency } from '../core'\nimport SubheaderRow from '../common/components/SubheaderRow'\n\nimport { useCashflowUiStore } from './context/hooks'\n\nimport { TransactionRow } from '../transactions'\nimport { incomeFilter, incomeFilterSearch } from '../transactions/utils/Filters'\n\nimport { AddRecurringTransactionDetails } from '../recurringtransactions'\nimport { SelectTransaction } from '../recurringtransactions'\nimport { getNextPaymentDate } from '../core/utils/RecurringTransactionsUtil'\n\nimport { fromUnixToDayOfWeekAndDate } from '../core/utils/DateUtil'\nimport { CASHFLOW_IMAGES } from './constants/CashflowImages'\n\ninterface UpcomingTransactions extends Transaction {\n nextDate: Date | null\n frequency: Frequency\n}\n\nconst spin = keyframes`\n from {\n transform: rotate(0deg);\n }\n to {\n transform: rotate(360deg);\n }\n`\n\nconst CashflowOnboarding: React.FC = () => {\n const { addRepeatingTransaction, repeatingTransactions } = useRecurringTransactionsStore()\n const { cashflow: customCopy, common: commonCopy } = useGlobalCopyStore()\n const { user } = useUserStore()\n const { completeOnboarding } = useCashflowStore()\n const { isDirty } = useCashflowUiStore()\n const { isMobile } = useScreenSize()\n const { isCopyLoaded, setDisplayedDate } = useGlobalUiStore()\n const { filter, setFilter, transactions } = useTransactionStore()\n const theme = useTheme()\n\n const [addIncome, setAddIncome] = useState(true)\n const [frequency, setFrequency] = React.useState(Frequency.EveryMonth)\n const [firstDay, setFirstDay] = React.useState(1)\n const [secondDay, setSecondDay] = React.useState(15)\n const [isSubmitting, setIsSubmitting] = useState(false)\n // const [nextDate, setNextDate] = React.useState<Date | null>(null)\n const [step, setStep] = useState(1)\n const [selectedTransactions, setSelectedTransactions] = useState<UpcomingTransactions[] | []>([])\n const [transactionGuid, setTransactionGuid] = useState('')\n\n const transaction = React.useMemo(\n () => transactions.find((t) => t.guid === transactionGuid),\n [transactionGuid, transactions],\n )\n\n const canSubmit = !!repeatingTransactions.filter(\n (r) => r.repeating_transaction_type === RepeatingType.Income,\n ).length\n\n const handleGetTransactions = async () => {\n setStep(2)\n // set transaction date range and filter by income\n setDisplayedDate(\n // Beginning of the month, 90 days before today\n startOfMonth(subDays(startOfToday(), 90)),\n startOfToday(),\n )\n\n setFilter({ ...filter, custom: incomeFilter })\n\n setStep(3)\n }\n\n const handleAddIncome = async () => {\n if (selectedTransactions.length < 1) {\n return\n }\n setIsSubmitting(true)\n\n // Create Repeating Transactions\n for (let i = 0; i < selectedTransactions.length; i++) {\n const upcomingTransaction = selectedTransactions[i]\n\n const nextDate = getNextPaymentDate(frequency, fromUnixTime(upcomingTransaction.date))\n\n const repeatingTransaction = {\n account_guid: upcomingTransaction.account_guid,\n amount: upcomingTransaction.amount,\n created_by: 0, //user\n merchant_guid: upcomingTransaction.merchant_guid,\n description: upcomingTransaction.feed_description || upcomingTransaction.description,\n predicted_occurs_on: formatISO(nextDate, { representation: 'date' }),\n recurrence_day: nextDate.getDay(),\n recurrence_type: frequency,\n repeating_transaction_type: RepeatingType.Income,\n second_recurrence_day: secondDay,\n transaction_type: upcomingTransaction.transaction_type,\n user_guid: user.guid,\n } as RepeatingTransaction\n\n await addRepeatingTransaction(repeatingTransaction, upcomingTransaction)\n }\n await completeOnboarding()\n }\n\n const showSelectIncome =\n (!transaction && addIncome) || (!transaction && selectedTransactions.length < 1)\n\n if (!isCopyLoaded) {\n return <Loader />\n }\n\n return (\n <Box\n sx={{\n display: 'flex',\n alignItems: !isMobile ? 'center' : 'flex-start',\n backgroundColor: theme.palette.background.paper,\n backgroundImage: !isMobile ? `url(${CASHFLOW_IMAGES.CASHFLOW_ONBOARDING})` : null,\n backgroundRepeat: 'no-repeat',\n backgroundPosition: 'left 100px',\n backgroundSize: '35%',\n py: 24,\n }}\n >\n {step === 1 && (\n <Box\n sx={{\n ...(isMobile\n ? { display: 'flex', flexDirection: 'column', maxWidth: '100%', padding: '0 16px' }\n : { maxWidth: 590, ml: '40%', mr: 90 }),\n }}\n >\n <StepOne handleNextStep={handleGetTransactions} />\n </Box>\n )}\n {step === 2 && (\n <Box\n sx={{\n ...(isMobile\n ? { display: 'flex', flexDirection: 'column', maxWidth: '100%', padding: '0 16px' }\n : { maxWidth: 590, ml: '40%', mr: 90 }),\n }}\n >\n <StepTwo />\n </Box>\n )}\n {step === 3 && (\n <Box\n sx={{\n ...(isMobile\n ? { display: 'flex', flexDirection: 'column', maxWidth: '100%', padding: '0 16px' }\n : { maxWidth: 590, ml: '40%', mr: 90 }),\n }}\n >\n <H2 pb={12} variant=\"h1\">\n {customCopy.add_income_title}\n </H2>\n <P mb={24}>{customCopy.add_income_description}</P>\n\n {selectedTransactions.length > 0 && !transaction && (\n <>\n <List>\n {selectedTransactions.map((transaction, index) => {\n return (\n <React.Fragment key={transaction.guid}>\n <SubheaderRow bgcolor=\"background.paper\">\n {fromUnixToDayOfWeekAndDate(\n getUnixTime(transaction.nextDate || transaction.date),\n )}\n </SubheaderRow>\n <TransactionRow transaction={transaction} />\n {index !== selectedTransactions.length - 1 && <Divider />}\n </React.Fragment>\n )\n })}\n </List>\n <Stack alignItems=\"center\" direction=\"row\">\n <Divider sx={{ flexGrow: 1 }} />\n <Button\n onClick={() => setAddIncome(true)}\n startIcon={<Icon name=\"add\" size={20} />}\n >\n {customCopy.add_income}\n </Button>\n </Stack>\n </>\n )}\n\n {showSelectIncome && (\n <SelectTransaction\n bgcolor=\"background.paper\"\n onSearch={(searchValue) =>\n setFilter({\n ...filter,\n custom: (transaction: Transaction) =>\n searchValue\n ? incomeFilterSearch(transaction, searchValue)\n : incomeFilter(transaction),\n })\n }\n onSelected={(guid) => {\n setTransactionGuid(guid)\n setAddIncome(false)\n }}\n />\n )}\n\n {!canSubmit && isDirty && (\n <P color=\"error\" mt={16}>\n {customCopy.confirm_error}\n </P>\n )}\n\n {transaction && (\n <>\n <AddRecurringTransactionDetails\n bgcolor=\"background.paper\"\n firstDay={firstDay}\n frequency={frequency}\n onFirstDayChange={setFirstDay}\n onFrequencyChange={setFrequency}\n onSecondDayChange={setSecondDay}\n secondDay={secondDay}\n transaction={transaction}\n />\n <Stack direction=\"row\" gap={16} ml={24} mt={32}>\n <Button\n aria-disabled={!transaction}\n onClick={() => {\n const updatedTransactions = [...selectedTransactions]\n updatedTransactions.push({\n ...transaction,\n nextDate: getNextPaymentDate(frequency, fromUnixTime(transaction.date)),\n frequency,\n })\n\n setSelectedTransactions(updatedTransactions)\n setTransactionGuid('')\n }}\n variant=\"contained\"\n >\n {commonCopy.confirm_button}\n </Button>\n <Button\n onClick={() => {\n setTransactionGuid('')\n setAddIncome(true)\n handleGetTransactions().finally()\n }}\n variant=\"outlined\"\n >\n {commonCopy.cancel_button}\n </Button>\n </Stack>\n </>\n )}\n\n {selectedTransactions.length > 0 && !transaction && (\n <Stack direction=\"row\" gap={16} ml={24} mt={32}>\n <Button\n aria-disabled={selectedTransactions.length < 1 || isSubmitting}\n onClick={handleAddIncome}\n startIcon={\n isSubmitting ? (\n <Icon\n name=\"progress_activity\"\n sx={{\n animation: `${spin} 2s linear infinite`,\n }}\n />\n ) : null\n }\n variant=\"contained\"\n >\n {customCopy.confirm_income_button}\n </Button>\n <Button onClick={completeOnboarding} variant=\"outlined\">\n {customCopy.skip_button}\n </Button>\n </Stack>\n )}\n </Box>\n )}\n </Box>\n )\n}\n\nexport default observer(CashflowOnboarding)\n"],"names":["useCashflowUiStore","React","GlobalDataContext","useCashflowStore","RemainingCash","remaining","customCopy","useGlobalCopyStore","jsxs","Fragment","jsx","Box","Text","CurrencyText","RemainingCash$1","observer","CashflowWidgetContent","theme","useTheme","availableWidth","useWidgetContainerProvider","isMobile","useScreenSize","selectedAccountGuids","useGlobalUiStore","daysUntilNextIncome","expensesTilNextIncome","selectedCashAccounts","selectedCashBalance","isDataLoaded","useRecurringTransactionsStore","filteredExpenseTotal","expense","acc","curr","availableToSpend","Stack","P","buildDynamicCopy","Icon","InformationTooltip","Divider","Loader","CashflowWidgetContent$1","CashflowMiniWidget","onPrimaryCtaClick","onSecondaryCtaClick","sx","copy","isInitialized","income","loadRepeatingTransactionData","useWidgetLoadTimer","showEmptyState","MiniWidgetContainer","EmptyState","CashflowMiniWidget_default","DetailsFooter","ListItem","ExpenseType","DetailsExpenseRow","recurrence","formatDate","DATE_FORMATS_INTL","DetailsExpenseRow$1","DetailsExpenseHeader","total","type","ListSubheader","formatCurrency","DetailsExpenseHeader$1","recurrenceFilter","account","dateRange","r","isToday","isAfter","isBefore","DetailsTab","useAvailable","useAppConfig","upcomingExpenses","upcomingIncome","upcomingIncomeByAccount","a","b","getUnixTime","projectedExpensesByAccount","incomeTotal","expenseTotal","remainingBalance","getAccountStartingBalance","List","AccountListItem","DetailsTab$1","SummaryTab","columns","name","nickname","institution_guid","account_number","accountName","InstitutionLogo","params","rows","totalprojectedExpenses","totalProjectedIncome","startingBalance","DataGridPro","alpha","row","SummaryTab$1","CashflowContent","isDesktop","onEvent","useEvent","value","setValue","handleChange","_event","newValue","Tabs","Tab","TabContentContainer","CashflowContent$1","CashflowAmountHeading","amount","isTotal","label","symbol","tooltip","recurrenceAccountFilter","accountGuids","CashflowHeading","isOpen","setIsOpen","filteredExpenses","filteredIncome","cashBalance","totalUpcomingExpenses","totalUpcomingIncome","hasRecurringIncome","Button","Drawer","ManageIncome","CashflowHeading$1","CashflowWidget","onBackClick","onMenuClick","selectedAccounts","shouldDisableNextDate","shouldDisablePrevDate","clientConfig","cashAccounts","useAccountStore","setFilter","useTransactionStore","recurringCopy","isManageIncomeView","isSettingsOpen","setIsSettingsOpen","cashAccountGuids","selAccts","subDays","startOfToday","endOfToday","WidgetContainer","ANALYTICS_EVENTS","AccountType","RecurringSettings","CashflowWidget_default","StepOne","handleNextStep","completeOnboarding","H2","H3","StepOne$1","ASSETS_URL","CASHFLOW_IMAGES","StepTwo","StepTwo$1","spin","keyframes","CashflowOnboarding","addRepeatingTransaction","repeatingTransactions","commonCopy","user","useUserStore","isDirty","isCopyLoaded","setDisplayedDate","filter","transactions","addIncome","setAddIncome","useState","frequency","setFrequency","Frequency","firstDay","setFirstDay","secondDay","setSecondDay","isSubmitting","setIsSubmitting","step","setStep","selectedTransactions","setSelectedTransactions","transactionGuid","setTransactionGuid","transaction","t","canSubmit","RepeatingType","handleGetTransactions","startOfMonth","incomeFilter","handleAddIncome","i","upcomingTransaction","nextDate","getNextPaymentDate","fromUnixTime","repeatingTransaction","formatISO","showSelectIncome","index","SubheaderRow","fromUnixToDayOfWeekAndDate","TransactionRow","SelectTransaction","searchValue","incomeFilterSearch","guid","AddRecurringTransactionDetails","updatedTransactions","CashflowOnboarding_default"],"mappings":"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"}
1
+ {"version":3,"file":"index.es.js","sources":["../../src/cashflow/context/hooks.tsx","../../src/cashflow/components/RemainingCash.tsx","../../src/cashflow/components/CashflowWidgetContent.tsx","../../src/cashflow/CashflowMiniWidget.tsx","../../src/cashflow/components/DetailsFooter.tsx","../../src/cashflow/components/DetailsExpenseRow.tsx","../../src/cashflow/components/DetailsExpenseHeader.tsx","../../src/cashflow/util/Filters.ts","../../src/cashflow/components/DetailsTab.tsx","../../src/cashflow/components/SummaryTab.tsx","../../src/cashflow/components/CashflowContent.tsx","../../src/cashflow/components/CashflowAmountHeading.tsx","../../src/cashflow/components/CashflowHeading.tsx","../../src/cashflow/CashflowWidget.tsx","../../src/cashflow/components/onboarding/StepOne.tsx","../../src/cashflow/constants/CashflowImages.ts","../../src/cashflow/components/onboarding/StepTwo.tsx","../../src/cashflow/CashflowOnboarding.tsx"],"sourcesContent":["import React from 'react'\nimport { GlobalDataContext, useCashflowStore } from '../../common'\n\nexport const useCashflowUiStore = () => {\n const context = React.useContext(GlobalDataContext)\n\n if (!context) {\n throw new Error('useCashflowUiStore() must be used within the GlobalDataContext')\n }\n\n return useCashflowStore().uiStore\n}\n","import { observer } from 'mobx-react-lite'\n\nimport Box from '@mui/material/Box'\n\nimport { Text } from '@mxenabled/mxui'\n\nimport { useGlobalCopyStore } from '../../common'\nimport { CurrencyText } from '../../common'\n\ninterface RemainingCashProps {\n remaining: number\n}\n\nconst RemainingCash = ({ remaining }: RemainingCashProps) => {\n const { cashflow: customCopy } = useGlobalCopyStore()\n\n const getRemainingCashColor = () => {\n if (remaining < 0) {\n return 'error.main'\n }\n if (remaining > 0) {\n return 'success.main'\n }\n return 'warning.main'\n }\n\n return (\n <>\n <Box\n sx={{\n borderRadius: '1px',\n backgroundColor: getRemainingCashColor(),\n height: 6,\n width: 6,\n }}\n />\n <Text bold={true} sx={{ flexGrow: 1, fontSize: 12 }}>\n {customCopy.remaining_cash}\n </Text>\n <CurrencyText amount={remaining} bold={true} sx={{ fontSize: 12 }} />\n </>\n )\n}\n\nexport default observer(RemainingCash)\n","import { observer } from 'mobx-react-lite'\n\nimport Box from '@mui/material/Box'\nimport Divider from '@mui/material/Divider'\nimport Stack from '@mui/material/Stack'\nimport { useTheme } from '@mui/material/styles'\n\nimport { Icon, P, Text } from '@mxenabled/mxui'\n\nimport {\n InformationTooltip,\n Loader,\n useGlobalCopyStore,\n useGlobalUiStore,\n useRecurringTransactionsStore,\n useScreenSize,\n useWidgetContainerProvider,\n} from '../../common'\nimport { useCashflowUiStore } from '../context/hooks'\nimport { CurrencyText } from '../../common'\nimport RemainingCash from './RemainingCash'\nimport { buildDynamicCopy } from '../../core/utils/Localization'\n\nconst CashflowWidgetContent = () => {\n const theme = useTheme()\n const { availableWidth } = useWidgetContainerProvider()\n const { isMobile } = useScreenSize()\n\n const { selectedAccountGuids } = useGlobalUiStore()\n const { cashflow: customCopy } = useGlobalCopyStore()\n const { daysUntilNextIncome, expensesTilNextIncome, selectedCashAccounts, selectedCashBalance } =\n useCashflowUiStore()\n const { isDataLoaded } = useRecurringTransactionsStore()\n\n // Plain derivations: observer tracks the observable reads and re-renders\n // correctly even when arrays are mutated in place by MobX. The account-scoped\n // balance is a store computed (selectedCashBalance).\n const filteredExpenseTotal = expensesTilNextIncome\n .filter((expense) => selectedAccountGuids.includes(expense.accountGuid || ''))\n .reduce((acc, curr) => acc + curr.amount, 0)\n\n const availableToSpend = selectedCashBalance - filteredExpenseTotal\n\n if (!isDataLoaded) {\n return <Loader height={isMobile ? 210 : 120} />\n }\n\n return (\n <Box className=\"mx-cashflow\" pl={16} pr={16} pt={16}>\n {availableWidth > 710 ? (\n <Stack\n border={`1px solid ${theme.palette.divider}`}\n borderRadius={1}\n direction=\"row\"\n justifyContent=\"space-between\"\n px={24}\n >\n <Stack pb={14} pt={12}>\n <CurrencyText amount={selectedCashBalance} variant=\"h2\" />\n <P variant=\"caption\" whiteSpace=\"nowrap\">\n {\n buildDynamicCopy(\n customCopy.total_cash_accounts,\n selectedCashAccounts.length,\n ) as string\n }\n </P>\n </Stack>\n\n <Stack pt={18}>\n <Icon name=\"remove\" />\n </Stack>\n\n <Stack pb={14} pt={12}>\n <CurrencyText amount={filteredExpenseTotal} variant=\"h2\" />\n <P variant=\"caption\" whiteSpace=\"nowrap\">\n {buildDynamicCopy(customCopy.expenses_due, expensesTilNextIncome.length) as string}\n </P>\n </Stack>\n\n <Stack pt={18}>\n <Icon name=\"equal\" />\n </Stack>\n\n <Stack pb={14} pr={24} pt={12}>\n <CurrencyText amount={availableToSpend} variant=\"h2\" />\n <Stack alignItems=\"center\" direction=\"row\" gap={8}>\n <P variant=\"caption\" whiteSpace=\"nowrap\">\n {customCopy.available_to_spend}\n </P>\n <InformationTooltip body={customCopy.tooltip_body} title={customCopy.tooltip_title} />\n </Stack>\n </Stack>\n\n <Stack borderLeft={`1px solid ${theme.palette.divider}`} pb={12} pl={24} pt={12}>\n <>\n <Text variant=\"h2\">\n {buildDynamicCopy(customCopy.days, daysUntilNextIncome) as string}\n </Text>\n <P variant=\"caption\" whiteSpace=\"nowrap\">\n {customCopy.next_paycheck}\n </P>\n </>\n </Stack>\n </Stack>\n ) : (\n <Stack border={`1px solid ${theme.palette.divider}`} borderRadius={1}>\n <Stack direction=\"row\" justifyContent=\"space-between\" p={16}>\n <Text variant=\"body2\">\n {\n buildDynamicCopy(\n customCopy.total_cash_accounts,\n selectedCashAccounts.length,\n ) as string\n }\n </Text>\n <CurrencyText amount={selectedCashBalance} bold={true} variant=\"caption\" />\n </Stack>\n\n <Divider />\n\n <Stack direction=\"row\" justifyContent=\"space-between\" p={16}>\n <Text variant=\"body2\">\n {buildDynamicCopy(customCopy.expenses_due, expensesTilNextIncome.length) as string}\n </Text>\n <CurrencyText amount={filteredExpenseTotal} bold={true} symbol=\"-\" variant=\"caption\" />\n </Stack>\n\n <Divider />\n\n <Stack\n alignItems=\"center\"\n bgcolor=\"background.default\"\n direction=\"row\"\n gap={8}\n height={48}\n justifyContent=\"space-between\"\n px={16}\n sx={{ borderBottomLeftRadius: 4, borderBottomRightRadius: 4 }}\n >\n <RemainingCash remaining={availableToSpend} />\n </Stack>\n <Divider />\n <Stack direction=\"row\" justifyContent=\"space-between\" p={16}>\n <Text variant=\"body2\">{customCopy.next_paycheck}</Text>\n <Text bold={true} variant=\"caption\">\n {buildDynamicCopy(customCopy.days, daysUntilNextIncome) as string}\n </Text>\n </Stack>\n </Stack>\n )}\n </Box>\n )\n}\n\nexport default observer(CashflowWidgetContent)\n","import React from 'react'\nimport { observer } from 'mobx-react-lite'\n\nimport {\n EmptyState,\n Loader,\n MiniWidgetContainer,\n useGlobalCopyStore,\n useGlobalUiStore,\n useRecurringTransactionsStore,\n useWidgetLoadTimer,\n} from '../common'\nimport { MiniWidgetProps } from '../core'\n\nimport CashflowWidgetContent from './components/CashflowWidgetContent'\nimport { useCashflowUiStore } from './context/hooks'\n\nconst CashflowMiniWidget: React.FC<MiniWidgetProps> = ({\n onPrimaryCtaClick,\n onSecondaryCtaClick,\n sx = {},\n}) => {\n const { cashflow: copy } = useGlobalCopyStore()\n const { isInitialized } = useGlobalUiStore()\n const { income } = useCashflowUiStore()\n const { loadRepeatingTransactionData, isDataLoaded } = useRecurringTransactionsStore()\n\n React.useEffect(() => {\n if (!isDataLoaded) {\n loadRepeatingTransactionData().finally()\n }\n }, [])\n\n useWidgetLoadTimer({\n widgetName: 'CashflowMiniWidget',\n isLoaded: isDataLoaded,\n })\n\n const showEmptyState = isDataLoaded && !income.length\n\n if (!isInitialized) return <Loader />\n\n return (\n <MiniWidgetContainer\n className=\"mx-exp-cashflow-miniwidget\"\n onPrimaryCtaClick={onPrimaryCtaClick}\n primaryCtaLabel={copy.primary_cta}\n primaryCtaLabelAria={copy.primary_cta_aria}\n subTitle={showEmptyState || !isDataLoaded ? undefined : copy.sub_title}\n sx={{ height: '100%', ...sx }}\n title={copy.title}\n >\n {!isDataLoaded && <Loader />}\n {isDataLoaded &&\n (showEmptyState ? (\n <EmptyState\n header={copy.create}\n icon=\"local_atm\"\n onClick={onSecondaryCtaClick}\n primaryButton={copy.add_income}\n primaryButtonStartIcon=\"add\"\n subText={copy.create_description}\n />\n ) : (\n <CashflowWidgetContent />\n ))}\n </MiniWidgetContainer>\n )\n}\n\nexport default observer(CashflowMiniWidget)\n","import ListItem from '@mui/material/ListItem'\n\nimport RemainingCash from './RemainingCash'\n\ninterface DetailsFooterProps {\n remaining: number\n}\n\nconst DetailsFooter = ({ remaining }: DetailsFooterProps) => {\n return (\n <ListItem\n sx={{\n alignItems: 'center',\n backgroundColor: 'background.highlight',\n display: 'flex',\n gap: 12,\n padding: '12px 24px',\n borderBottomLeftRadius: '3px',\n borderBottomRightRadius: '3px',\n minHeight: 'auto',\n }}\n >\n <RemainingCash remaining={remaining} />\n </ListItem>\n )\n}\n\nexport default DetailsFooter\n","import React from 'react'\nimport { observer } from 'mobx-react-lite'\n\nimport Divider from '@mui/material/Divider'\nimport ListItem from '@mui/material/ListItem'\nimport Stack from '@mui/material/Stack'\n\nimport { Text } from '@mxenabled/mxui'\n\nimport { DATE_FORMATS_INTL, formatDate } from '../../core/constants'\nimport { type Recurrence } from '../../core'\nimport { CurrencyText } from '../../common'\n\nexport enum ExpenseType {\n EXPENSE = 'expense',\n INCOME = 'income',\n}\n\ninterface DetailsExpenseRowType {\n recurrence: Recurrence\n}\n\nconst DetailsExpenseRow: React.FC<DetailsExpenseRowType> = ({ recurrence }) => {\n return (\n <>\n <ListItem sx={{ display: 'flex', alignItems: 'center', gap: 16, px: 24, py: 12 }}>\n <Stack alignItems=\"center\" height={32} width={32}>\n <Text bold={true} sx={{ fontSize: 11 }}>\n {formatDate(recurrence.expectedDate, DATE_FORMATS_INTL.MONTH)}\n </Text>\n <Text bold={true} sx={{ fontSize: 11 }}>\n {formatDate(recurrence.expectedDate, DATE_FORMATS_INTL.DAY)}\n </Text>\n </Stack>\n <Text sx={{ flexGrow: 1, fontSize: 13 }}>{recurrence.name}</Text>\n <CurrencyText\n amount={recurrence.amount}\n bold={true}\n sx={{ textAlign: 'right', fontSize: 13 }}\n />\n </ListItem>\n <Divider />\n </>\n )\n}\n\nexport default observer(DetailsExpenseRow)\n","import React from 'react'\nimport { observer } from 'mobx-react-lite'\n\nimport Divider from '@mui/material/Divider'\nimport ListSubheader from '@mui/material/ListSubheader'\n\nimport { Text } from '@mxenabled/mxui'\n\nimport { useGlobalCopyStore } from '../../common'\nimport { ExpenseType } from './DetailsExpenseRow'\nimport { formatCurrency } from '../../core/utils/NumberFormatting'\n\ninterface DetailsExpenseHeaderProps {\n total: number\n type: ExpenseType\n}\n\nconst DetailsExpenseHeader: React.FC<DetailsExpenseHeaderProps> = ({ total, type }) => {\n const { cashflow: customCopy } = useGlobalCopyStore()\n\n return (\n <>\n <ListSubheader\n sx={{\n alignItems: 'center',\n backgroundColor: 'background.highlight',\n display: 'flex',\n justifyContent: 'space-between',\n pb: 4,\n pt: 12,\n px: 24,\n }}\n >\n <Text bold={true} sx={{ fontSize: 12 }}>\n {type === ExpenseType.EXPENSE ? customCopy.expenses : customCopy.income}\n </Text>\n <Text bold={true} sx={{ fontSize: 13 }}>\n {type === ExpenseType.EXPENSE ? '-' : '+'}\n {formatCurrency(total, '0,0.00')}\n </Text>\n </ListSubheader>\n <Divider />\n </>\n )\n}\n\nexport default observer(DetailsExpenseHeader)\n","import type { Account, Recurrence } from '../../core'\nimport { isAfter } from 'date-fns/isAfter'\nimport { isBefore } from 'date-fns/isBefore'\nimport { isToday } from 'date-fns/isToday'\n\n/**\n * Returns recurrences that match the given account and date range\n * @param account The account\n * @param dateRange The date range\n */\nexport const recurrenceFilter =\n (account: Account, dateRange: { start: Date; end: Date }) => (r: Recurrence) =>\n r.accountGuid === account.guid &&\n (isToday(r.expectedDate) || isAfter(r.expectedDate, dateRange.start)) &&\n isBefore(r.expectedDate, dateRange.end)\n","import { observer } from 'mobx-react-lite'\nimport { getUnixTime } from 'date-fns/getUnixTime'\n\nimport Divider from '@mui/material/Divider'\nimport List from '@mui/material/List'\nimport ListItem from '@mui/material/ListItem'\nimport Stack from '@mui/material/Stack'\n\nimport { Text } from '@mxenabled/mxui'\n\nimport AccountListItem from '../../accounts/components/AccountListItem'\nimport DetailsFooter from './DetailsFooter'\nimport DetailsExpenseRow, { ExpenseType } from './DetailsExpenseRow'\nimport DetailsExpenseHeader from './DetailsExpenseHeader'\n\nimport { useAppConfig, useGlobalCopyStore, useWidgetContainerProvider } from '../../common'\nimport { DATE_FORMATS_INTL, formatDate } from '../../core/constants'\nimport { type Account, type Recurrence } from '../../core'\nimport { useCashflowUiStore } from '../context/hooks'\nimport { recurrenceFilter } from '../util/Filters'\nimport { getAccountStartingBalance } from '../../core/utils/AccountUtils'\n\nconst DetailsTab = () => {\n const { availableWidth } = useWidgetContainerProvider()\n const { cashflow: customCopy } = useGlobalCopyStore()\n const {\n config: { display_available_balance_in_accounts: useAvailable },\n } = useAppConfig()\n const { dateRange, selectedCashAccounts, upcomingExpenses, upcomingIncome } = useCashflowUiStore()\n\n return (\n <Stack>\n <Stack direction={availableWidth < 400 ? 'column' : 'row'} justifyContent=\"space-between\">\n <Text bold={true} sx={{ fontSize: 15, mb: 12 }}>\n {customCopy.accounts_breakdown}\n </Text>\n <Text bold={true} sx={{ fontSize: 15, mb: 12 }}>\n {formatDate(dateRange.start, DATE_FORMATS_INTL.FULL_MONTH_DAY)} -{' '}\n {formatDate(dateRange.end, DATE_FORMATS_INTL.FULL_MONTH_DAY)}\n </Text>\n </Stack>\n\n <Stack>\n {selectedCashAccounts.map((account: Account) => {\n const upcomingIncomeByAccount = upcomingIncome\n .filter(recurrenceFilter(account, dateRange))\n .sort((a, b) => getUnixTime(a.expectedDate) - getUnixTime(b.expectedDate))\n\n const projectedExpensesByAccount = upcomingExpenses.filter(\n recurrenceFilter(account, dateRange),\n )\n\n const incomeTotal = upcomingIncomeByAccount.reduce(\n (acc: number, curr: Recurrence) => acc + curr.amount,\n 0,\n )\n const expenseTotal = projectedExpensesByAccount.reduce(\n (acc, curr) => acc + curr.amount,\n 0,\n )\n\n const remainingBalance =\n getAccountStartingBalance(account, useAvailable) + incomeTotal - expenseTotal\n\n return (\n <List\n key={account.guid}\n sx={{\n border: '1px solid',\n borderColor: 'neutral.light',\n mb: 24,\n borderRadius: 1,\n }}\n >\n <AccountListItem\n account={account}\n listItemProps={{\n disableGutters: false,\n disablePadding: false,\n sx: { borderTopRadius: 1, pr: 24 },\n }}\n />\n <Divider />\n {/* Income */}\n {upcomingIncomeByAccount.length > 0 && (\n <ListItem>\n <List\n subheader={\n <DetailsExpenseHeader total={incomeTotal} type={ExpenseType.INCOME} />\n }\n sx={{ width: '100%' }}\n >\n {upcomingIncomeByAccount.map((r) => (\n <DetailsExpenseRow key={r.repeatingTransactionGuid} recurrence={r} />\n ))}\n </List>\n </ListItem>\n )}\n {/* Expenses */}\n {projectedExpensesByAccount.length > 0 && (\n <ListItem>\n <List\n subheader={\n <DetailsExpenseHeader total={expenseTotal} type={ExpenseType.EXPENSE} />\n }\n sx={{ width: '100%' }}\n >\n {projectedExpensesByAccount.map((r) => (\n <DetailsExpenseRow key={r.repeatingTransactionGuid} recurrence={r} />\n ))}\n </List>\n </ListItem>\n )}\n {/* Bottom row total */}\n <DetailsFooter remaining={remainingBalance} />\n </List>\n )\n })}\n </Stack>\n </Stack>\n )\n}\n\nexport default observer(DetailsTab)\n","import React from 'react'\nimport { observer } from 'mobx-react-lite'\n\nimport Box from '@mui/material/Box'\nimport Divider from '@mui/material/Divider'\nimport List from '@mui/material/List'\nimport ListItem from '@mui/material/ListItem'\nimport Stack from '@mui/material/Stack'\nimport { useTheme } from '@mui/material/styles'\nimport { alpha } from '@mui/material/styles'\n\nimport { DataGridPro, GridColDef } from '@mui/x-data-grid-pro'\n\nimport { InstitutionLogo, Text } from '@mxenabled/mxui'\n\nimport {\n CurrencyText,\n InformationTooltip,\n useAppConfig,\n useGlobalCopyStore,\n useWidgetContainerProvider,\n} from '../../common'\nimport { DATE_FORMATS_INTL, formatDate } from '../../core/constants'\nimport { type Account } from '../../core'\nimport { useCashflowUiStore } from '../context/hooks'\nimport { recurrenceFilter } from '../util/Filters'\n\nimport RemainingCash from './RemainingCash'\nimport { formatCurrency } from '../../core/utils/NumberFormatting'\nimport { getAccountStartingBalance } from '../../core/utils/AccountUtils'\n\nconst SummaryTab = () => {\n const { availableWidth } = useWidgetContainerProvider()\n const theme = useTheme()\n const { cashflow: customCopy } = useGlobalCopyStore()\n const {\n config: { display_available_balance_in_accounts: useAvailable },\n } = useAppConfig()\n const { dateRange, selectedCashAccounts, upcomingExpenses, upcomingIncome } = useCashflowUiStore()\n\n const columns: GridColDef[] = [\n {\n field: 'account',\n flex: 1.5,\n headerName: customCopy.accounts,\n renderCell: ({ value: { name, nickname, institution_guid, account_number } }) => {\n const accountName = nickname || name\n\n return (\n <Stack alignItems=\"center\" flexDirection=\"row\" gap={12}>\n <InstitutionLogo\n alt={customCopy.institution_logo}\n institutionGuid={institution_guid || ''}\n size={16}\n />\n <Text variant=\"body2\">{`${accountName} ${account_number ? `*${account_number}` : ''}`}</Text>\n </Stack>\n )\n },\n },\n {\n field: 'balance',\n flex: 1,\n headerName: customCopy.balance,\n type: 'number',\n renderCell: (params) => (\n <Text color={theme.palette.text.primary} variant=\"body2\">\n {formatCurrency(params.value, '0,0.00')}\n </Text>\n ),\n },\n {\n field: 'income',\n flex: 1,\n headerName: customCopy.projected_income,\n type: 'number',\n renderCell: (params) => (\n <Text color={theme.palette.text.primary} variant=\"body2\">\n {`+${formatCurrency(params.value, '0,0.00')}`}\n </Text>\n ),\n },\n {\n field: 'expenses',\n flex: 1.1,\n headerName: customCopy.projected_expenses,\n type: 'number',\n renderCell: (params) => (\n <Text color={theme.palette.text.primary} variant=\"body2\">\n {`-${formatCurrency(params.value, '0,0.00')}`}\n </Text>\n ),\n },\n {\n field: 'remaining',\n flex: 1,\n headerName: customCopy.remaining,\n type: 'number',\n renderCell: (params) => {\n const total = params.row.balance + params.row.income - params.row.expenses\n\n return (\n <Text\n color={Math.sign(total) === -1 ? theme.palette.error.main : theme.palette.text.primary}\n variant=\"body2\"\n >\n {formatCurrency(total, '0,0.00')}\n </Text>\n )\n },\n },\n ]\n\n const rows = React.useMemo(() => {\n return selectedCashAccounts.map((account: Account) => {\n const totalprojectedExpenses = upcomingExpenses\n .filter(recurrenceFilter(account, dateRange))\n .reduce((acc, curr) => acc + curr.amount, 0)\n\n const totalProjectedIncome = upcomingIncome\n .filter(recurrenceFilter(account, dateRange))\n .reduce((acc, curr) => acc + curr.amount, 0)\n\n const startingBalance = getAccountStartingBalance(account, useAvailable)\n const remaining = startingBalance + totalProjectedIncome - totalprojectedExpenses\n\n return {\n account,\n balance: startingBalance,\n id: account.guid,\n income: totalProjectedIncome,\n expenses: totalprojectedExpenses,\n remaining,\n }\n })\n }, [selectedCashAccounts, upcomingExpenses, upcomingIncome, useAvailable, dateRange])\n\n return (\n <Box\n sx={{\n width: '100%',\n }}\n >\n <Stack\n direction={availableWidth < 540 ? 'column' : 'row'}\n justifyContent=\"space-between\"\n mb={12}\n >\n <Stack alignItems=\"center\" direction=\"row\" gap={8}>\n <Text\n bold={true}\n sx={{\n fontSize: 15,\n }}\n >\n {customCopy.cash_inflow_and_outflow}\n </Text>\n <InformationTooltip\n body={customCopy.table_tooltip_body}\n title={customCopy.table_tooltip_title}\n />\n </Stack>\n <Text bold={true} sx={{ fontSize: 15 }}>\n {formatDate(dateRange.start, DATE_FORMATS_INTL.FULL_MONTH_DAY)} -{' '}\n {formatDate(dateRange.end, DATE_FORMATS_INTL.FULL_MONTH_DAY)}\n </Text>\n </Stack>\n {availableWidth > 650 ? (\n <DataGridPro\n columnHeaderHeight={48}\n columns={columns}\n density=\"standard\"\n disableColumnMenu={true}\n disableRowSelectionOnClick={true}\n hideFooter={true}\n rowHeight={48}\n rows={rows}\n sx={{\n border: '1px solid',\n borderColor: 'neutral.light',\n borderRadius: 1,\n '& .MuiDataGrid-columnHeader .MuiIconButton-root': {\n color: theme.palette.primary.main,\n '&:hover': {\n backgroundColor: alpha(theme.palette.primary.main, 0.1),\n },\n },\n '& .MuiDataGrid-columnHeaderTitle': {\n fontFamily: theme.typography.h3.fontFamily,\n fontSize: theme.typography.body2.fontSize,\n },\n '& .MuiDataGrid-sortIcon': {\n color: theme.palette.primary.main,\n },\n }}\n />\n ) : (\n rows.map((row) => {\n const { name, nickname, institution_guid, account_number } = row.account\n const accountName = nickname || name\n\n return (\n <List\n key={row.id}\n sx={{\n border: '1px solid',\n borderColor: 'neutral.light',\n borderRadius: 1,\n marginBottom: 24,\n }}\n >\n <ListItem sx={{ minHeight: 'auto' }}>\n <Stack width=\"100%\">\n <Stack\n alignItems=\"center\"\n flexDirection=\"row\"\n justifyContent=\"space-between\"\n px={16}\n py={12}\n >\n <Stack alignItems=\"center\" flexDirection=\"row\" gap={8} width=\"50%\">\n <InstitutionLogo\n alt={customCopy.institution_logo}\n institutionGuid={institution_guid || ''}\n size={16}\n />\n <Text variant=\"body2\">{`${accountName} ${account_number ? `*${account_number}` : ''}`}</Text>\n </Stack>\n <CurrencyText amount={row.balance} bold={true} variant=\"body2\" />\n </Stack>\n <Divider sx={{ width: '100%' }} />\n <Stack\n alignItems=\"center\"\n flexDirection=\"row\"\n justifyContent=\"space-between\"\n px={16}\n py={12}\n >\n <Text variant=\"body2\">{customCopy.projected_income}</Text>\n <CurrencyText amount={row.income} bold={true} symbol=\"+\" variant=\"body2\" />\n </Stack>\n <Divider sx={{ width: '100%' }} />\n <Stack\n alignItems=\"center\"\n flexDirection=\"row\"\n justifyContent=\"space-between\"\n px={16}\n py={12}\n >\n <Text variant=\"body2\">{customCopy.projected_expenses}</Text>\n <CurrencyText amount={row.expenses} bold={true} symbol=\"-\" variant=\"body2\" />\n </Stack>\n <Divider sx={{ width: '100%' }} />\n <Stack\n alignItems=\"center\"\n bgcolor=\"background.default\"\n flexDirection=\"row\"\n gap={8}\n justifyContent=\"space-between\"\n px={16}\n py={12}\n sx={{ borderBottomLeftRadius: '4px', borderBottomRightRadius: '4px' }}\n >\n <RemainingCash remaining={row.remaining} />\n </Stack>\n </Stack>\n </ListItem>\n </List>\n )\n })\n )}\n </Box>\n )\n}\n\nexport default observer(SummaryTab)\n","import React from 'react'\nimport { observer } from 'mobx-react-lite'\n\nimport Box from '@mui/material/Box'\nimport Tabs from '@mui/material/Tabs'\nimport Tab from '@mui/material/Tab'\n\nimport DetailsTab from './DetailsTab'\nimport SummaryTab from './SummaryTab'\nimport { TabContentContainer, useEvent, useGlobalCopyStore, useScreenSize } from '../../common'\n\nconst CashflowContent: React.FC = () => {\n const { cashflow: customCopy } = useGlobalCopyStore()\n const { isDesktop } = useScreenSize()\n const { onEvent } = useEvent()\n\n const [value, setValue] = React.useState(0)\n\n const handleChange = (_event: React.SyntheticEvent, newValue: number) => {\n setValue(newValue)\n }\n\n React.useEffect(() => {\n onEvent(value === 0 ? 'cash_flow_summary' : 'cash_flow_details')\n }, [value])\n\n return (\n <Box>\n <Tabs\n aria-label={customCopy.cashflow_summary_and_details}\n centered={true}\n onChange={handleChange}\n textColor=\"primary\"\n value={value}\n variant=\"fullWidth\"\n >\n <Tab\n aria-controls=\"cashflow-tabpanel-0\"\n id=\"cashflow-tab-0\"\n label={customCopy.summary}\n sx={{\n textTransform: 'none',\n }}\n />\n <Tab\n aria-controls=\"cashflow-tabpanel-1\"\n id=\"cashflow-tab-1\"\n label={customCopy.details}\n sx={{\n textTransform: 'none',\n }}\n />\n </Tabs>\n <Box sx={{ mb: 32 }} />\n <TabContentContainer index={0} name=\"cashflow\" value={value}>\n <Box sx={{ m: isDesktop ? 48 : 16 }}>\n <SummaryTab />\n </Box>\n </TabContentContainer>\n <TabContentContainer index={1} name=\"cashflow\" value={value}>\n <Box sx={{ m: isDesktop ? 48 : 16 }}>\n <DetailsTab />\n </Box>\n </TabContentContainer>\n </Box>\n )\n}\n\nexport default observer(CashflowContent)\n","import React from 'react'\n\nimport Stack from '@mui/material/Stack'\n\nimport { Text } from '@mxenabled/mxui'\n\nimport { CurrencyText } from '../../common/components/CurrencyText'\n\ninterface CashflowAmountHeadingProps {\n amount: number\n isMobile?: boolean\n isTotal?: boolean\n label: string\n symbol?: string\n tooltip?: React.ReactNode\n}\n\nconst CashflowAmountHeading: React.FC<CashflowAmountHeadingProps> = ({\n amount,\n isMobile = false,\n isTotal = false,\n label,\n symbol,\n tooltip,\n}) => {\n return (\n <Stack\n bgcolor={isTotal ? 'background.default' : 'transparent'}\n direction={isMobile ? 'row' : 'column'}\n justifyContent={isMobile ? 'space-between' : 'initial'}\n padding={isMobile ? '14px 16px' : 0}\n sx={{ borderBottomLeftRadius: 4, borderBottomRightRadius: 4 }}\n >\n {!isMobile && <CurrencyText amount={amount} component=\"h2\" variant=\"h2\" />}\n <Stack alignItems=\"center\" component=\"span\" direction=\"row\" gap={8} mt={2}>\n <Text bold={isTotal} variant=\"body2\">\n {label}\n </Text>\n {tooltip}\n </Stack>\n {isMobile && <CurrencyText amount={amount} component=\"h2\" symbol={symbol} variant=\"body2\" />}\n </Stack>\n )\n}\n\nexport default CashflowAmountHeading\n","import React from 'react'\nimport { observer } from 'mobx-react-lite'\nimport { isAfter } from 'date-fns/isAfter'\nimport { isBefore } from 'date-fns/isBefore'\nimport { isToday } from 'date-fns/isToday'\n\nimport Button from '@mui/material/Button'\nimport Divider from '@mui/material/Divider'\nimport Stack from '@mui/material/Stack'\n\nimport { Icon, Text } from '@mxenabled/mxui'\n\nimport {\n Drawer,\n InformationTooltip,\n useGlobalCopyStore,\n useGlobalUiStore,\n useRecurringTransactionsStore,\n useWidgetContainerProvider,\n} from '../../common'\nimport { type Recurrence } from '../../core'\n\nimport { ManageIncome } from '../../recurringtransactions'\n\nimport CashflowAmountHeading from './CashflowAmountHeading'\nimport { useCashflowUiStore } from '../context/hooks'\nimport { buildDynamicCopy } from '../../core/utils/Localization'\n\n// This filter only includes activities that have an account guid that matches an account guid\n// in the given list of accountGuids and is within the given date range\nconst recurrenceAccountFilter =\n (accountGuids: string[], dateRange: { start: Date; end: Date }) => (r: Recurrence) =>\n r.accountGuid &&\n accountGuids.includes(r.accountGuid) &&\n (isToday(r.expectedDate) || isAfter(r.expectedDate, dateRange.start)) &&\n isBefore(r.expectedDate, dateRange.end)\n\nconst CashflowHeading: React.FC = () => {\n const { availableWidth } = useWidgetContainerProvider()\n const { cashflow: customCopy } = useGlobalCopyStore()\n\n const { isDataLoaded } = useRecurringTransactionsStore()\n const { selectedAccountGuids } = useGlobalUiStore()\n const {\n dateRange,\n income,\n selectedCashAccounts,\n selectedCashBalance,\n upcomingExpenses,\n upcomingIncome,\n } = useCashflowUiStore()\n\n const [isOpen, setIsOpen] = React.useState(false)\n\n // Plain derivations: observer tracks the observable reads, so no useMemo is\n // needed. The account-scoped balance is a store computed (selectedCashBalance).\n const filteredExpenses = upcomingExpenses.filter(\n recurrenceAccountFilter(selectedAccountGuids, dateRange),\n )\n\n const filteredIncome = upcomingIncome.filter(\n recurrenceAccountFilter(selectedAccountGuids, dateRange),\n )\n\n const cashBalance = selectedCashBalance\n\n const totalUpcomingExpenses = filteredExpenses.reduce((acc, curr) => acc + curr.amount, 0)\n const totalUpcomingIncome = filteredIncome.reduce((acc, curr) => acc + curr.amount, 0)\n const availableToSpend = cashBalance - totalUpcomingExpenses + totalUpcomingIncome\n\n const hasRecurringIncome = isDataLoaded && income.length > 0\n const isMobile = availableWidth < 725\n\n return (\n <Stack sx={{ mx: isMobile ? 16 : 0, my: isMobile ? 24 : 42 }}>\n <Stack\n border={isMobile ? '1px solid' : 'none'}\n borderColor=\"neutral.light\"\n borderRadius={2}\n flexDirection={isMobile ? 'column' : 'row'}\n gap={isMobile ? 0 : 24}\n justifyContent=\"center\"\n >\n <CashflowAmountHeading\n amount={cashBalance}\n isMobile={isMobile}\n label={buildDynamicCopy(customCopy.cash_and_bank, selectedCashAccounts.length) as string}\n />\n\n {isMobile && <Divider />}\n {hasRecurringIncome ? (\n <>\n {!isMobile && <Text sx={{ fontSize: 25, lineHeight: 1 }}>+</Text>}\n <CashflowAmountHeading\n amount={totalUpcomingIncome}\n isMobile={isMobile}\n label={customCopy.to_be_received}\n symbol={isMobile ? '+' : undefined}\n />\n </>\n ) : (\n <Button\n onClick={() => setIsOpen(true)}\n startIcon={<Icon name=\"add\" />}\n sx={{ fontSize: 13 }}\n >\n {customCopy.add_income}\n </Button>\n )}\n\n {isMobile ? <Divider /> : <Text sx={{ fontSize: 25, lineHeight: 1 }}>-</Text>}\n\n <CashflowAmountHeading\n amount={totalUpcomingExpenses}\n isMobile={isMobile}\n label={buildDynamicCopy(customCopy.to_be_paid_out, filteredExpenses.length) as string}\n symbol={isMobile ? '-' : undefined}\n />\n\n {isMobile ? <Divider /> : <Text sx={{ fontSize: 25, lineHeight: 1 }}>=</Text>}\n\n <CashflowAmountHeading\n amount={availableToSpend}\n isMobile={isMobile}\n isTotal={isMobile}\n label={customCopy.remaining_cash}\n tooltip={\n <InformationTooltip\n body={customCopy.remaining_income_tooltip_body}\n title={customCopy.remaining_income_tooltip_title}\n />\n }\n />\n </Stack>\n\n <Drawer\n ariaLabelClose={customCopy.close_manage_income_aria}\n isOpen={isOpen}\n onClose={() => setIsOpen(false)}\n shouldShowHeaderBorders={false}\n title={customCopy.manage_income}\n >\n <ManageIncome />\n </Drawer>\n </Stack>\n )\n}\n\nexport default observer(CashflowHeading)\n","import React from 'react'\nimport { observer } from 'mobx-react-lite'\n\nimport Alert from '@mui/material/Alert'\nimport Snackbar from '@mui/material/Snackbar'\n\nimport {\n ANALYTICS_EVENTS,\n Drawer,\n Loader,\n useAccountStore,\n useAppConfig,\n useEvent,\n useGlobalCopyStore,\n useGlobalUiStore,\n useRecurringTransactionsStore,\n useTransactionStore,\n useWidgetLoadTimer,\n WidgetContainer,\n} from '../common'\nimport { AccountType, WidgetProps } from '../core'\n\nimport { RecurringSettings } from '../recurringtransactions'\n\nimport CashflowContent from './components/CashflowContent'\nimport CashflowHeading from './components/CashflowHeading'\nimport { useCashflowUiStore } from './context/hooks'\nimport { subDays } from 'date-fns/subDays'\nimport { startOfToday } from 'date-fns/startOfToday'\nimport { endOfToday } from 'date-fns/endOfToday'\n\nconst CashflowWidget: React.FC<WidgetProps> = ({ onBackClick, onMenuClick, sx = {} }) => {\n const { selectedAccounts, selectedAccountGuids, shouldDisableNextDate, shouldDisablePrevDate } =\n useGlobalUiStore()\n\n const { onEvent } = useEvent()\n const { clientConfig } = useAppConfig()\n const { visibleCashAccounts: cashAccounts } = useAccountStore()\n const { setFilter } = useTransactionStore()\n const { dateRange } = useCashflowUiStore()\n const { alert, loadRepeatingTransactionData, isDataLoaded, setAlert } =\n useRecurringTransactionsStore()\n const { cashflow: customCopy, recurring: recurringCopy } = useGlobalCopyStore()\n const { isInitialized } = useGlobalUiStore()\n\n const view = clientConfig?.master?.deep_link_params?.view\n const isManageIncomeView = view === 'manage_income'\n const [isSettingsOpen, setIsSettingsOpen] = React.useState(isManageIncomeView)\n\n React.useEffect(() => {\n if (!isDataLoaded) {\n loadRepeatingTransactionData().finally()\n }\n }, [])\n\n React.useEffect(() => {\n const cashAccountGuids = cashAccounts.map((account) => account.guid)\n const selAccts = selectedAccounts.filter(\n (account) =>\n selectedAccountGuids.includes(account.guid) && cashAccountGuids.includes(account.guid),\n )\n setFilter({\n dateRange: { start: subDays(startOfToday(), 90), end: endOfToday() },\n accounts: selAccts.map((a) => a.guid),\n })\n }, [cashAccounts, selectedAccounts])\n\n useWidgetLoadTimer({\n widgetName: 'CashflowWidget',\n isLoaded: isDataLoaded,\n })\n\n if (!isInitialized) return <Loader />\n\n return (\n <WidgetContainer\n actions={[\n {\n label: recurringCopy.action_title,\n iconName: 'credit_card_gear',\n onClick: () => {\n setIsSettingsOpen(true)\n onEvent(ANALYTICS_EVENTS.CASH_FLOW_CLICK_SETTINGS)\n },\n },\n ]}\n allowedAccountTypes={[\n AccountType.CASH,\n AccountType.CHECKING,\n AccountType.PREPAID,\n AccountType.SAVINGS,\n AccountType.CHECKING_LINE_OF_CREDIT,\n ]}\n calendarActions={{\n shouldDisableNext: shouldDisableNextDate,\n shouldDisablePrevious: shouldDisablePrevDate,\n shouldDisablePicker: true,\n onRangeChanged: () => {},\n }}\n dateRange={dateRange}\n dateRangeVariant=\"readonly\"\n hasDivider={true}\n onAccountsFilterClick={() => onEvent(ANALYTICS_EVENTS.CASH_FLOW_CLICK_FILTER)}\n onBackClick={onBackClick}\n onMenuClick={onMenuClick}\n sx={sx}\n title={customCopy.title}\n >\n <CashflowHeading />\n\n <CashflowContent />\n\n <Drawer\n ariaLabelClose={customCopy.close_settings_aria}\n isOpen={isSettingsOpen}\n onClose={() => setIsSettingsOpen(false)}\n shouldShowHeaderBorders={false}\n title={recurringCopy.action_title}\n >\n <RecurringSettings defaultSelectedTab={isManageIncomeView ? 1 : 0} />\n </Drawer>\n <Snackbar\n anchorOrigin={{ vertical: 'bottom', horizontal: 'right' }}\n autoHideDuration={3500}\n onClose={(_event, reason) => {\n if (reason === 'clickaway') return\n setAlert('', alert.severity)\n }}\n open={Boolean(alert.message)}\n >\n <Alert\n onClose={() => setAlert('', alert.severity)}\n severity={alert.severity}\n variant=\"filled\"\n >\n {alert.message}\n </Alert>\n </Snackbar>\n </WidgetContainer>\n )\n}\n\nexport default observer(CashflowWidget)\n","import React from 'react'\nimport { observer } from 'mobx-react-lite'\n\nimport Box from '@mui/material/Box'\nimport Button from '@mui/material/Button'\nimport Stack from '@mui/material/Stack'\n\nimport { H2, H3, Icon, P } from '@mxenabled/mxui'\nimport { useTheme } from '@mui/material/styles'\nimport { useCashflowStore, useGlobalCopyStore } from '../../../common'\n\ninterface StepOneProps {\n handleNextStep: () => void\n}\n\nconst StepOne: React.FC<StepOneProps> = ({ handleNextStep }) => {\n const { completeOnboarding } = useCashflowStore()\n const { cashflow: customCopy } = useGlobalCopyStore()\n\n const theme = useTheme()\n\n return (\n <Stack>\n <H2 pb={12} variant=\"h1\">\n {customCopy.welcome_title}\n </H2>\n <H3 color={theme.palette.primary.light} pb={8}>\n {customCopy.welcome_sub_title}\n </H3>\n <P pb={32}>{customCopy.welcome_description}</P>\n <Stack direction=\"column\" mb={32} spacing={32}>\n <P sx={{ display: 'flex', alignItems: 'center', fontSize: 18 }}>\n <Box\n bgcolor={theme.palette.primary.lighter}\n borderRadius={1}\n component=\"span\"\n height={44}\n mr={24}\n sx={{ display: 'flex', alignItems: 'center', justifyContent: 'center', flexShrink: 0 }}\n width={44}\n >\n <Icon color=\"primary\" name=\"currency_exchange\" />\n </Box>\n {customCopy.bullet_one}\n </P>\n <P sx={{ display: 'flex', alignItems: 'center', fontSize: 18 }}>\n <Box\n bgcolor={theme.palette.primary.lighter}\n borderRadius={1}\n component=\"span\"\n height={44}\n mr={24}\n sx={{ display: 'flex', alignItems: 'center', justifyContent: 'center', flexShrink: 0 }}\n width={44}\n >\n <Icon color=\"primary\" name=\"cardiology\" />\n </Box>\n {customCopy.bullet_two}\n </P>\n <P sx={{ display: 'flex', alignItems: 'center', fontSize: 18 }}>\n <Box\n bgcolor={theme.palette.primary.lighter}\n borderRadius={1}\n component=\"span\"\n height={44}\n mr={24}\n sx={{ display: 'flex', alignItems: 'center', justifyContent: 'center', flexShrink: 0 }}\n width={44}\n >\n <Icon color=\"primary\" name=\"flare\" />\n </Box>\n {customCopy.bullet_three}\n </P>\n </Stack>\n <Stack direction=\"row\" spacing={16}>\n <Button onClick={handleNextStep} variant=\"contained\">\n {customCopy.get_started_button}\n </Button>\n <Button onClick={completeOnboarding} variant=\"outlined\">\n {customCopy.skip_button}\n </Button>\n </Stack>\n </Stack>\n )\n}\n\nexport default observer(StepOne)\n","const ASSETS_URL = 'https://content.moneydesktop.com/storage/MD_Assets/md/cashflow'\n\nexport const CASHFLOW_IMAGES = {\n CASHFLOW_ONBOARDING: `${ASSETS_URL}/cashflow-onboarding.png`,\n CASHFLOW_LOADING_ANIMATION: `${ASSETS_URL}/loading-animation.gif`,\n}\n","import React from 'react'\nimport { observer } from 'mobx-react-lite'\n\nimport { H2, P } from '@mxenabled/mxui'\nimport { useGlobalCopyStore } from '../../../common'\n\nimport { CASHFLOW_IMAGES } from '../../constants/CashflowImages'\n\nconst StepTwo: React.FC = () => {\n const { cashflow: customCopy } = useGlobalCopyStore()\n\n return (\n <React.Fragment>\n <div>\n <img alt=\"Loading\" src={CASHFLOW_IMAGES.CASHFLOW_LOADING_ANIMATION} />\n </div>\n <H2 pb={12} variant=\"h1\">\n {customCopy.loading_title}\n </H2>\n <P>{customCopy.loading_description}</P>\n </React.Fragment>\n )\n}\n\nexport default observer(StepTwo)\n","import React, { useState } from 'react'\nimport { observer } from 'mobx-react-lite'\nimport { formatISO } from 'date-fns/formatISO'\nimport { fromUnixTime } from 'date-fns/fromUnixTime'\nimport { getUnixTime } from 'date-fns/getUnixTime'\nimport { startOfMonth } from 'date-fns/startOfMonth'\nimport { startOfToday } from 'date-fns/startOfToday'\nimport { subDays } from 'date-fns/subDays'\n\nimport Box from '@mui/material/Box'\nimport Button from '@mui/material/Button'\nimport Divider from '@mui/material/Divider'\nimport List from '@mui/material/List'\nimport Stack from '@mui/material/Stack'\nimport { keyframes } from '@mui/material/styles'\nimport { useTheme } from '@mui/material/styles'\n\nimport { H2, Icon, P } from '@mxenabled/mxui'\n\nimport StepOne from './components/onboarding/StepOne'\nimport StepTwo from './components/onboarding/StepTwo'\n\nimport {\n Loader,\n useCashflowStore,\n useGlobalCopyStore,\n useGlobalUiStore,\n useRecurringTransactionsStore,\n useScreenSize,\n useTransactionStore,\n useUserStore,\n} from '../common'\nimport { type RepeatingTransaction, type Transaction, RepeatingType, Frequency } from '../core'\nimport SubheaderRow from '../common/components/SubheaderRow'\n\nimport { useCashflowUiStore } from './context/hooks'\n\nimport { TransactionRow } from '../transactions'\nimport { incomeFilter, incomeFilterSearch } from '../transactions/utils/Filters'\n\nimport { AddRecurringTransactionDetails } from '../recurringtransactions'\nimport { SelectTransaction } from '../recurringtransactions'\nimport { getNextPaymentDate } from '../core/utils/RecurringTransactionsUtil'\n\nimport { fromUnixToDayOfWeekAndDate } from '../core/utils/DateUtil'\nimport { CASHFLOW_IMAGES } from './constants/CashflowImages'\n\ninterface UpcomingTransactions extends Transaction {\n nextDate: Date | null\n frequency: Frequency\n}\n\nconst spin = keyframes`\n from {\n transform: rotate(0deg);\n }\n to {\n transform: rotate(360deg);\n }\n`\n\nconst CashflowOnboarding: React.FC = () => {\n const { addRepeatingTransaction, repeatingTransactions } = useRecurringTransactionsStore()\n const { cashflow: customCopy, common: commonCopy } = useGlobalCopyStore()\n const { user } = useUserStore()\n const { completeOnboarding } = useCashflowStore()\n const { isDirty } = useCashflowUiStore()\n const { isMobile } = useScreenSize()\n const { isCopyLoaded, setDisplayedDate } = useGlobalUiStore()\n const { filter, setFilter, transactions } = useTransactionStore()\n const theme = useTheme()\n\n const [addIncome, setAddIncome] = useState(true)\n const [frequency, setFrequency] = React.useState(Frequency.EveryMonth)\n const [firstDay, setFirstDay] = React.useState(1)\n const [secondDay, setSecondDay] = React.useState(15)\n const [isSubmitting, setIsSubmitting] = useState(false)\n // const [nextDate, setNextDate] = React.useState<Date | null>(null)\n const [step, setStep] = useState(1)\n const [selectedTransactions, setSelectedTransactions] = useState<UpcomingTransactions[] | []>([])\n const [transactionGuid, setTransactionGuid] = useState('')\n\n const transaction = React.useMemo(\n () => transactions.find((t) => t.guid === transactionGuid),\n [transactionGuid, transactions],\n )\n\n const canSubmit = !!repeatingTransactions.filter(\n (r) => r.repeating_transaction_type === RepeatingType.Income,\n ).length\n\n const handleGetTransactions = async () => {\n setStep(2)\n // set transaction date range and filter by income\n setDisplayedDate(\n // Beginning of the month, 90 days before today\n startOfMonth(subDays(startOfToday(), 90)),\n startOfToday(),\n )\n\n setFilter({ ...filter, custom: incomeFilter })\n\n setStep(3)\n }\n\n const handleAddIncome = async () => {\n if (selectedTransactions.length < 1) {\n return\n }\n setIsSubmitting(true)\n\n // Create Repeating Transactions\n for (let i = 0; i < selectedTransactions.length; i++) {\n const upcomingTransaction = selectedTransactions[i]\n\n const nextDate = getNextPaymentDate(frequency, fromUnixTime(upcomingTransaction.date))\n\n const repeatingTransaction = {\n account_guid: upcomingTransaction.account_guid,\n amount: upcomingTransaction.amount,\n created_by: 0, //user\n merchant_guid: upcomingTransaction.merchant_guid,\n description: upcomingTransaction.feed_description || upcomingTransaction.description,\n predicted_occurs_on: formatISO(nextDate, { representation: 'date' }),\n recurrence_day: nextDate.getDay(),\n recurrence_type: frequency,\n repeating_transaction_type: RepeatingType.Income,\n second_recurrence_day: secondDay,\n transaction_type: upcomingTransaction.transaction_type,\n user_guid: user.guid,\n } as RepeatingTransaction\n\n await addRepeatingTransaction(repeatingTransaction, upcomingTransaction)\n }\n await completeOnboarding()\n }\n\n const showSelectIncome =\n (!transaction && addIncome) || (!transaction && selectedTransactions.length < 1)\n\n if (!isCopyLoaded) {\n return <Loader />\n }\n\n return (\n <Box\n sx={{\n display: 'flex',\n alignItems: !isMobile ? 'center' : 'flex-start',\n backgroundColor: theme.palette.background.paper,\n backgroundImage: !isMobile ? `url(${CASHFLOW_IMAGES.CASHFLOW_ONBOARDING})` : null,\n backgroundRepeat: 'no-repeat',\n backgroundPosition: 'left 100px',\n backgroundSize: '35%',\n py: 24,\n }}\n >\n {step === 1 && (\n <Box\n sx={{\n ...(isMobile\n ? { display: 'flex', flexDirection: 'column', maxWidth: '100%', padding: '0 16px' }\n : { maxWidth: 590, ml: '40%', mr: 90 }),\n }}\n >\n <StepOne handleNextStep={handleGetTransactions} />\n </Box>\n )}\n {step === 2 && (\n <Box\n sx={{\n ...(isMobile\n ? { display: 'flex', flexDirection: 'column', maxWidth: '100%', padding: '0 16px' }\n : { maxWidth: 590, ml: '40%', mr: 90 }),\n }}\n >\n <StepTwo />\n </Box>\n )}\n {step === 3 && (\n <Box\n sx={{\n ...(isMobile\n ? { display: 'flex', flexDirection: 'column', maxWidth: '100%', padding: '0 16px' }\n : { maxWidth: 590, ml: '40%', mr: 90 }),\n }}\n >\n <H2 pb={12} variant=\"h1\">\n {customCopy.add_income_title}\n </H2>\n <P mb={24}>{customCopy.add_income_description}</P>\n\n {selectedTransactions.length > 0 && !transaction && (\n <>\n <List>\n {selectedTransactions.map((transaction, index) => {\n return (\n <React.Fragment key={transaction.guid}>\n <SubheaderRow bgcolor=\"background.paper\">\n {fromUnixToDayOfWeekAndDate(\n getUnixTime(transaction.nextDate || transaction.date),\n )}\n </SubheaderRow>\n <TransactionRow transaction={transaction} />\n {index !== selectedTransactions.length - 1 && <Divider />}\n </React.Fragment>\n )\n })}\n </List>\n <Stack alignItems=\"center\" direction=\"row\">\n <Divider sx={{ flexGrow: 1 }} />\n <Button\n onClick={() => setAddIncome(true)}\n startIcon={<Icon name=\"add\" size={20} />}\n >\n {customCopy.add_income}\n </Button>\n </Stack>\n </>\n )}\n\n {showSelectIncome && (\n <SelectTransaction\n bgcolor=\"background.paper\"\n onSearch={(searchValue) =>\n setFilter({\n ...filter,\n custom: (transaction: Transaction) =>\n searchValue\n ? incomeFilterSearch(transaction, searchValue)\n : incomeFilter(transaction),\n })\n }\n onSelected={(guid) => {\n setTransactionGuid(guid)\n setAddIncome(false)\n }}\n />\n )}\n\n {!canSubmit && isDirty && (\n <P color=\"error\" mt={16}>\n {customCopy.confirm_error}\n </P>\n )}\n\n {transaction && (\n <>\n <AddRecurringTransactionDetails\n bgcolor=\"background.paper\"\n firstDay={firstDay}\n frequency={frequency}\n onFirstDayChange={setFirstDay}\n onFrequencyChange={setFrequency}\n onSecondDayChange={setSecondDay}\n secondDay={secondDay}\n transaction={transaction}\n />\n <Stack direction=\"row\" gap={16} ml={24} mt={32}>\n <Button\n aria-disabled={!transaction}\n onClick={() => {\n const updatedTransactions = [...selectedTransactions]\n updatedTransactions.push({\n ...transaction,\n nextDate: getNextPaymentDate(frequency, fromUnixTime(transaction.date)),\n frequency,\n })\n\n setSelectedTransactions(updatedTransactions)\n setTransactionGuid('')\n }}\n variant=\"contained\"\n >\n {commonCopy.confirm_button}\n </Button>\n <Button\n onClick={() => {\n setTransactionGuid('')\n setAddIncome(true)\n handleGetTransactions().finally()\n }}\n variant=\"outlined\"\n >\n {commonCopy.cancel_button}\n </Button>\n </Stack>\n </>\n )}\n\n {selectedTransactions.length > 0 && !transaction && (\n <Stack direction=\"row\" gap={16} ml={24} mt={32}>\n <Button\n aria-disabled={selectedTransactions.length < 1 || isSubmitting}\n onClick={handleAddIncome}\n startIcon={\n isSubmitting ? (\n <Icon\n name=\"progress_activity\"\n sx={{\n animation: `${spin} 2s linear infinite`,\n }}\n />\n ) : null\n }\n variant=\"contained\"\n >\n {customCopy.confirm_income_button}\n </Button>\n <Button onClick={completeOnboarding} variant=\"outlined\">\n {customCopy.skip_button}\n </Button>\n </Stack>\n )}\n </Box>\n )}\n </Box>\n )\n}\n\nexport default observer(CashflowOnboarding)\n"],"names":["useCashflowUiStore","React","GlobalDataContext","useCashflowStore","RemainingCash","remaining","customCopy","useGlobalCopyStore","jsxs","Fragment","jsx","Box","Text","CurrencyText","RemainingCash$1","observer","CashflowWidgetContent","theme","useTheme","availableWidth","useWidgetContainerProvider","isMobile","useScreenSize","selectedAccountGuids","useGlobalUiStore","daysUntilNextIncome","expensesTilNextIncome","selectedCashAccounts","selectedCashBalance","isDataLoaded","useRecurringTransactionsStore","filteredExpenseTotal","expense","acc","curr","availableToSpend","Stack","P","buildDynamicCopy","Icon","InformationTooltip","Divider","Loader","CashflowWidgetContent$1","CashflowMiniWidget","onPrimaryCtaClick","onSecondaryCtaClick","sx","copy","isInitialized","income","loadRepeatingTransactionData","useWidgetLoadTimer","showEmptyState","MiniWidgetContainer","EmptyState","CashflowMiniWidget_default","DetailsFooter","ListItem","ExpenseType","DetailsExpenseRow","recurrence","formatDate","DATE_FORMATS_INTL","DetailsExpenseRow$1","DetailsExpenseHeader","total","type","ListSubheader","formatCurrency","DetailsExpenseHeader$1","recurrenceFilter","account","dateRange","r","isToday","isAfter","isBefore","DetailsTab","useAvailable","useAppConfig","upcomingExpenses","upcomingIncome","upcomingIncomeByAccount","a","b","getUnixTime","projectedExpensesByAccount","incomeTotal","expenseTotal","remainingBalance","getAccountStartingBalance","List","AccountListItem","DetailsTab$1","SummaryTab","columns","name","nickname","institution_guid","account_number","accountName","InstitutionLogo","params","rows","totalprojectedExpenses","totalProjectedIncome","startingBalance","DataGridPro","alpha","row","SummaryTab$1","CashflowContent","isDesktop","onEvent","useEvent","value","setValue","handleChange","_event","newValue","Tabs","Tab","TabContentContainer","CashflowContent$1","CashflowAmountHeading","amount","isTotal","label","symbol","tooltip","recurrenceAccountFilter","accountGuids","CashflowHeading","isOpen","setIsOpen","filteredExpenses","filteredIncome","cashBalance","totalUpcomingExpenses","totalUpcomingIncome","hasRecurringIncome","Button","Drawer","ManageIncome","CashflowHeading$1","CashflowWidget","onBackClick","onMenuClick","selectedAccounts","shouldDisableNextDate","shouldDisablePrevDate","clientConfig","cashAccounts","useAccountStore","setFilter","useTransactionStore","alert","setAlert","recurringCopy","isManageIncomeView","isSettingsOpen","setIsSettingsOpen","cashAccountGuids","selAccts","subDays","startOfToday","endOfToday","WidgetContainer","ANALYTICS_EVENTS","AccountType","RecurringSettings","Snackbar","reason","Alert","CashflowWidget_default","StepOne","handleNextStep","completeOnboarding","H2","H3","StepOne$1","ASSETS_URL","CASHFLOW_IMAGES","StepTwo","StepTwo$1","spin","keyframes","CashflowOnboarding","addRepeatingTransaction","repeatingTransactions","commonCopy","user","useUserStore","isDirty","isCopyLoaded","setDisplayedDate","filter","transactions","addIncome","setAddIncome","useState","frequency","setFrequency","Frequency","firstDay","setFirstDay","secondDay","setSecondDay","isSubmitting","setIsSubmitting","step","setStep","selectedTransactions","setSelectedTransactions","transactionGuid","setTransactionGuid","transaction","t","canSubmit","RepeatingType","handleGetTransactions","startOfMonth","incomeFilter","handleAddIncome","i","upcomingTransaction","nextDate","getNextPaymentDate","fromUnixTime","repeatingTransaction","formatISO","showSelectIncome","index","SubheaderRow","fromUnixToDayOfWeekAndDate","TransactionRow","SelectTransaction","searchValue","incomeFilterSearch","guid","AddRecurringTransactionDetails","updatedTransactions","CashflowOnboarding_default"],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- import { l as Y } from "../UserStore-BBceqFxh.mjs";
1
+ import { l as Y } from "../UserStore-Cp-2Jtnw.mjs";
2
2
  import { b as $, a as H } from "../Localization-DnoVyBNK.mjs";
3
3
  import { f as j, b as V, a as K, c as Z, g as J, d as X } from "../NumberFormatting--XMeeBfr.mjs";
4
4
  import { C as rr, a as er, b as or } from "../CurrencyDialog-DumQCTPO.mjs";
@@ -1,4 +1,4 @@
1
- import { A as g, a as m, b as C, c as N, d as h, B as f, e as E, f as D, g as b, C as I, h as M, i as R, j as B, D as L, F as G, k as _, G as H, l as P, m as U, n as x, o as O, H as F, p as k, q as v, r as w, M as W, s as Y, N as $, t as q, u as K, R as j, v as z, S as J, w as Q, T as X, x as Z, y as V, U as tt, z as at, W as st } from "../UserStore-BBceqFxh.mjs";
1
+ import { A as g, a as m, b as C, c as N, d as h, B as f, e as E, f as D, g as b, C as I, h as M, i as R, j as B, D as L, F as G, k as _, G as H, l as P, m as U, n as x, o as O, H as F, p as k, q as v, r as w, M as W, s as Y, N as $, t as q, u as K, R as j, v as z, S as J, w as Q, T as X, x as Z, y as V, U as tt, z as at, W as st } from "../UserStore-Cp-2Jtnw.mjs";
2
2
  import { b as ot, a as nt, d as rt, c as it, A as ct, C as pt, e as At, E as St, M as ut, N as lt, P as Tt, f as yt, g as dt, S as gt } from "../Account-DR7Plrqy.mjs";
3
3
  import { A as Ct, B as Nt, I as ht, N as ft } from "../Notification-DTNYSd8P.mjs";
4
4
  import { F as n } from "../GlobalCopyApi-CLhyon-B.mjs";
@@ -137,17 +137,17 @@ export declare class RecurringTransactionsStore {
137
137
  * @param repeatingTransaction - The repeating transaction to add.
138
138
  * @param transaction - The transaction associated with the repeating transaction.
139
139
  */
140
- addRepeatingTransaction: (repeatingTransaction: RepeatingTransaction, transaction: Transaction) => Promise<void>;
140
+ addRepeatingTransaction: (repeatingTransaction: RepeatingTransaction, transaction: Transaction) => Promise<boolean>;
141
141
  /**
142
142
  * Delete a repeating transaction by its GUID.
143
143
  * @param guid - The GUID of the repeating transaction to delete.
144
144
  */
145
- deleteRepeatingTransaction: (guid: string) => Promise<void>;
145
+ deleteRepeatingTransaction: (guid: string) => Promise<boolean>;
146
146
  /**
147
147
  * Update an existing repeating transaction.
148
148
  * @param transaction - The repeating transaction to update.
149
149
  */
150
- updateRepeatingTransaction: (transaction: RepeatingTransaction) => Promise<void>;
150
+ updateRepeatingTransaction: (transaction: RepeatingTransaction) => Promise<boolean>;
151
151
  /**
152
152
  * Mark a recurrence as paid by linking a transaction to the repeating transaction.
153
153
  * @param repeatingTransactionGuid - The GUID of the repeating transaction.
@@ -8,6 +8,8 @@ export interface RecurringCopy {
8
8
  add_income: string;
9
9
  add_income_description: string;
10
10
  add_new: string;
11
+ add_repeating_transaction_error: string;
12
+ add_repeating_transaction_success: string;
11
13
  anually: string;
12
14
  anually_ordinal: string;
13
15
  calendar_tooltip: string;
@@ -88,6 +90,10 @@ export interface RecurringCopy {
88
90
  recurring_setting_zero_state_income_description: string;
89
91
  recurring_setting_zero_state_income_title: string;
90
92
  recurring_income: string;
93
+ remove_repeating_transaction_error: string;
94
+ remove_repeating_transaction_success: string;
95
+ update_repeating_transaction_error: string;
96
+ update_repeating_transaction_success: string;
91
97
  reset: string;
92
98
  second_day_of_the_month: string;
93
99
  select_day_label: string;