@mx-cartographer/experiences 9.1.0 → 9.1.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.
- package/CHANGELOG.md +9 -0
- package/dist/{AccountDetailsDrawer-CZPeLsCq.mjs → AccountDetailsDrawer-Cq4kiiKD.mjs} +5 -5
- package/dist/{AccountDetailsDrawer-CZPeLsCq.mjs.map → AccountDetailsDrawer-Cq4kiiKD.mjs.map} +1 -1
- package/dist/AccountDetailsHeader-BliEZhz7.mjs +230 -0
- package/dist/AccountDetailsHeader-BliEZhz7.mjs.map +1 -0
- package/dist/AccountUtils-Cbh8r9cP.mjs +29 -0
- package/dist/AccountUtils-Cbh8r9cP.mjs.map +1 -0
- package/dist/{Analytics-WeZYytR0.mjs → Analytics-D-jdcL72.mjs} +3 -3
- package/dist/Analytics-D-jdcL72.mjs.map +1 -0
- package/dist/{EmbeddedCard-DH8vQ3qN.mjs → EmbeddedCard-DCOQnTz-.mjs} +2 -2
- package/dist/{EmbeddedCard-DH8vQ3qN.mjs.map → EmbeddedCard-DCOQnTz-.mjs.map} +1 -1
- package/dist/{ExportCsvAction-C9KWH3Az.mjs → ExportCsvAction-C-IisDcv.mjs} +2 -2
- package/dist/{ExportCsvAction-C9KWH3Az.mjs.map → ExportCsvAction-C-IisDcv.mjs.map} +1 -1
- package/dist/{Help-aERwhajy.mjs → Help-zVZdcmlk.mjs} +2 -2
- package/dist/{Help-aERwhajy.mjs.map → Help-zVZdcmlk.mjs.map} +1 -1
- package/dist/{ManageIncome-Dcsnnz86.mjs → ManageIncome-B_8i71mE.mjs} +6 -6
- package/dist/{ManageIncome-Dcsnnz86.mjs.map → ManageIncome-B_8i71mE.mjs.map} +1 -1
- package/dist/{NetWorthUtils-DfSH3z70.mjs → NetWorthUtils-Dj7CgAg2.mjs} +2 -2
- package/dist/{NetWorthUtils-DfSH3z70.mjs.map → NetWorthUtils-Dj7CgAg2.mjs.map} +1 -1
- package/dist/{RecurringSettings-D8hBbXV_.mjs → RecurringSettings-hs0YUp83.mjs} +3 -3
- package/dist/{RecurringSettings-D8hBbXV_.mjs.map → RecurringSettings-hs0YUp83.mjs.map} +1 -1
- package/dist/{TransactionDetails-roZ5xLq8.mjs → TransactionDetails-DT-MQqOB.mjs} +3 -3
- package/dist/{TransactionDetails-roZ5xLq8.mjs.map → TransactionDetails-DT-MQqOB.mjs.map} +1 -1
- package/dist/{UserStore-C1fdL3Iu.mjs → UserStore-BjnNCO5a.mjs} +266 -199
- package/dist/UserStore-BjnNCO5a.mjs.map +1 -0
- package/dist/{WidgetContainer-DJnp6t6c.mjs → WidgetContainer-CjdCY4sj.mjs} +21 -21
- package/dist/WidgetContainer-CjdCY4sj.mjs.map +1 -0
- package/dist/accounts/index.es.js +6 -6
- package/dist/budgets/index.es.js +5 -5
- package/dist/cashflow/context/hooks.d.ts +7 -6
- package/dist/cashflow/index.es.js +436 -464
- package/dist/cashflow/index.es.js.map +1 -1
- package/dist/common/components/daterangeselector/DateRangeSelector.d.ts +5 -0
- package/dist/common/index.es.js +3 -3
- package/dist/core/index.es.js +1 -1
- package/dist/core/stores/CashflowStore.d.ts +8 -7
- package/dist/core/stores/RecurringTransactionsStore.d.ts +24 -0
- package/dist/core/utils/AccountUtils.d.ts +8 -0
- package/dist/debts/index.es.js +3 -3
- package/dist/finstrong/index.es.js +5 -5
- package/dist/goals/index.es.js +2 -2
- package/dist/help/index.es.js +2 -2
- package/dist/insights/index.es.js +2 -2
- package/dist/investments/index.es.js +2 -2
- package/dist/networth/index.es.js +79 -77
- package/dist/networth/index.es.js.map +1 -1
- package/dist/recurringtransactions/index.es.js +6 -6
- package/dist/settings/index.es.js +2 -2
- package/dist/spending/index.es.js +4 -4
- package/dist/transactions/index.es.js +7 -7
- package/dist/trends/index.es.js +5 -5
- package/package.json +1 -1
- package/dist/AccountDetailsHeader-BvbCUQSS.mjs +0 -231
- package/dist/AccountDetailsHeader-BvbCUQSS.mjs.map +0 -1
- package/dist/AccountUtils-B8ZzWI-d.mjs +0 -28
- package/dist/AccountUtils-B8ZzWI-d.mjs.map +0 -1
- package/dist/Analytics-WeZYytR0.mjs.map +0 -1
- package/dist/UserStore-C1fdL3Iu.mjs.map +0 -1
- package/dist/WidgetContainer-DJnp6t6c.mjs.map +0 -1
|
@@ -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 React from 'react'\nimport { 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 useAccountStore,\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 { visibleCashAccounts: cashAccounts, visibleCashBalance: cashBalance } = useAccountStore()\n const { selectedAccountGuids } = useGlobalUiStore()\n const { cashflow: customCopy } = useGlobalCopyStore()\n const {\n daysUntilNextIncome,\n expensesTilNextIncome,\n selectedCashAccounts,\n setNextIncome,\n setSelectedCashAccounts,\n setUpcomingExpenses,\n } = useCashflowUiStore()\n const { isDataLoaded, nextIncomeRecurrence, upcomingExpenses } = useRecurringTransactionsStore()\n\n React.useEffect(() => {\n setSelectedCashAccounts(\n cashAccounts.filter((account) => selectedAccountGuids.includes(account.guid)),\n )\n }, [cashAccounts, selectedAccountGuids])\n\n React.useEffect(() => {\n if (nextIncomeRecurrence) {\n setNextIncome(nextIncomeRecurrence)\n }\n setUpcomingExpenses(upcomingExpenses)\n }, [nextIncomeRecurrence, upcomingExpenses])\n\n const filteredCashBalance = React.useMemo(\n () =>\n cashAccounts\n .filter((account) => selectedAccountGuids.includes(account.guid))\n .reduce((total, account) => total + (account?.balance || 0), 0),\n [selectedAccountGuids, upcomingExpenses],\n )\n\n const filteredExpenseTotal = React.useMemo(\n () =>\n expensesTilNextIncome\n .filter((expense) => selectedAccountGuids.includes(expense.accountGuid || ''))\n .reduce((acc, curr) => acc + curr.amount, 0),\n [selectedAccountGuids, expensesTilNextIncome],\n )\n\n const availableToSpend = React.useMemo(\n () => filteredCashBalance - filteredExpenseTotal,\n [filteredCashBalance, filteredExpenseTotal],\n )\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={filteredCashBalance} 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={cashBalance} 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'\nimport { addMonths } from 'date-fns/addMonths'\nimport { startOfToday } from 'date-fns/startOfToday'\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'\n\nconst CashflowMiniWidget: React.FC<MiniWidgetProps> = ({\n onPrimaryCtaClick,\n onSecondaryCtaClick,\n sx = {},\n}) => {\n const { cashflow: copy } = useGlobalCopyStore()\n const { isInitialized } = useGlobalUiStore()\n const { loadRepeatingTransactionData, income, isDataLoaded, setDateRange } =\n useRecurringTransactionsStore()\n\n React.useEffect(() => {\n setDateRange({ start: startOfToday(), end: addMonths(startOfToday(), 1) })\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 {\n useGlobalCopyStore,\n useRecurringTransactionsStore,\n useWidgetContainerProvider,\n} 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'\n\nconst DetailsTab = () => {\n const { availableWidth } = useWidgetContainerProvider()\n const { cashflow: customCopy } = useGlobalCopyStore()\n const { upcomingExpenses, upcomingIncome } = useRecurringTransactionsStore()\n const { dateRange, selectedCashAccounts } = 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 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\n remaining={\n (account.available_balance || account.balance || 0) + incomeTotal - expenseTotal\n }\n />\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'\nimport { startOfToday } from 'date-fns/startOfToday'\nimport { addDays } from 'date-fns/addDays'\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 useGlobalCopyStore,\n useRecurringTransactionsStore,\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'\n\nconst SummaryTab = () => {\n const { availableWidth } = useWidgetContainerProvider()\n const theme = useTheme()\n const { cashflow: customCopy } = useGlobalCopyStore()\n const { upcomingExpenses, upcomingIncome } = useRecurringTransactionsStore()\n const { dateRange, selectedCashAccounts } = 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(\n recurrenceFilter(account, { start: startOfToday(), end: addDays(startOfToday(), 30) }),\n )\n .reduce((acc, curr) => acc + curr.amount, 0)\n\n const totalProjectedIncome = upcomingIncome\n .filter(\n recurrenceFilter(account, { start: startOfToday(), end: addDays(startOfToday(), 30) }),\n )\n .reduce((acc, curr) => acc + curr.amount, 0)\n\n const remaining = (account.balance || 0) + totalProjectedIncome - totalprojectedExpenses\n\n return {\n account,\n balance: account.balance || 0,\n id: account.guid,\n income: totalProjectedIncome,\n expenses: totalprojectedExpenses,\n remaining,\n }\n })\n }, [selectedCashAccounts, upcomingExpenses, upcomingIncome])\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 { income, isDataLoaded, upcomingExpenses, upcomingIncome } = useRecurringTransactionsStore()\n const { selectedAccountGuids } = useGlobalUiStore()\n const { dateRange, selectedCashAccounts } = useCashflowUiStore()\n\n const [isOpen, setIsOpen] = React.useState(false)\n\n const filteredExpenses = React.useMemo(\n () => upcomingExpenses.filter(recurrenceAccountFilter(selectedAccountGuids, dateRange)),\n [dateRange, selectedAccountGuids, upcomingExpenses],\n )\n\n const filteredIncome = React.useMemo(\n () => upcomingIncome.filter(recurrenceAccountFilter(selectedAccountGuids, dateRange)),\n [dateRange, selectedAccountGuids, upcomingIncome],\n )\n\n const cashBalance = React.useMemo(\n () => selectedCashAccounts.reduce((total, account) => total + (account?.balance || 0), 0),\n [selectedCashAccounts],\n )\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, setSelectedCashAccounts } = useCashflowUiStore()\n const { loadRepeatingTransactionData, isDataLoaded, setDateRange } =\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 setDateRange(dateRange)\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 setSelectedCashAccounts(selAccts)\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","cashAccounts","cashBalance","useAccountStore","selectedAccountGuids","useGlobalUiStore","daysUntilNextIncome","expensesTilNextIncome","selectedCashAccounts","setNextIncome","setSelectedCashAccounts","setUpcomingExpenses","isDataLoaded","nextIncomeRecurrence","upcomingExpenses","useRecurringTransactionsStore","account","filteredCashBalance","total","filteredExpenseTotal","expense","acc","curr","availableToSpend","Stack","P","buildDynamicCopy","Icon","InformationTooltip","Divider","Loader","CashflowWidgetContent$1","CashflowMiniWidget","onPrimaryCtaClick","onSecondaryCtaClick","sx","copy","isInitialized","loadRepeatingTransactionData","income","setDateRange","startOfToday","addMonths","useWidgetLoadTimer","showEmptyState","MiniWidgetContainer","EmptyState","CashflowMiniWidget_default","DetailsFooter","ListItem","ExpenseType","DetailsExpenseRow","recurrence","formatDate","DATE_FORMATS_INTL","DetailsExpenseRow$1","DetailsExpenseHeader","type","ListSubheader","formatCurrency","DetailsExpenseHeader$1","recurrenceFilter","dateRange","r","isToday","isAfter","isBefore","DetailsTab","upcomingIncome","upcomingIncomeByAccount","a","b","getUnixTime","projectedExpensesByAccount","incomeTotal","expenseTotal","List","AccountListItem","DetailsTab$1","SummaryTab","columns","name","nickname","institution_guid","account_number","accountName","InstitutionLogo","params","rows","totalprojectedExpenses","addDays","totalProjectedIncome","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","totalUpcomingExpenses","totalUpcomingIncome","hasRecurringIncome","Button","Drawer","ManageIncome","CashflowHeading$1","CashflowWidget","onBackClick","onMenuClick","selectedAccounts","shouldDisableNextDate","shouldDisablePrevDate","clientConfig","useAppConfig","setFilter","useTransactionStore","recurringCopy","isManageIncomeView","isSettingsOpen","setIsSettingsOpen","cashAccountGuids","selAccts","subDays","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 {\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":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAGO,MAAMA,IAAqB,MAAM;AAGtC,MAAI,CAFYC,EAAM,WAAWC,EAAiB;AAGhD,UAAM,IAAI,MAAM,gEAAgE;AAGlF,SAAOC,KAAmB;AAC5B,GCEMC,KAAgB,CAAC,EAAE,WAAAC,QAAoC;AAC3D,QAAM,EAAE,UAAUC,EAAA,IAAeC,EAAA;AAYjC,SACE,gBAAAC,EAAAC,GAAA,EACE,UAAA;AAAA,IAAA,gBAAAC;AAAA,MAACC;AAAA,MAAA;AAAA,QACC,IAAI;AAAA,UACF,cAAc;AAAA,UACd,iBAdFN,IAAY,IACP,eAELA,IAAY,IACP,iBAEF;AAAA,UASD,QAAQ;AAAA,UACR,OAAO;AAAA,QAAA;AAAA,MACT;AAAA,IAAA;AAAA,IAEF,gBAAAK,EAACE,GAAA,EAAK,MAAM,IAAM,IAAI,EAAE,UAAU,GAAG,UAAU,GAAA,GAC5C,UAAAN,EAAW,eAAA,CACd;AAAA,IACA,gBAAAI,EAACG,GAAA,EAAa,QAAQR,GAAW,MAAM,IAAM,IAAI,EAAE,UAAU,KAAG,CAAG;AAAA,EAAA,GACrE;AAEJ,GAEAS,KAAeC,EAASX,EAAa,GCrB/BY,KAAwB,MAAM;AAClC,QAAMC,IAAQC,GAAA,GACR,EAAE,gBAAAC,EAAA,IAAmBC,GAAA,GACrB,EAAE,UAAAC,EAAA,IAAaC,GAAA,GAEf,EAAE,sBAAAC,EAAA,IAAyBC,EAAA,GAC3B,EAAE,UAAUlB,EAAA,IAAeC,EAAA,GAC3B,EAAE,qBAAAkB,GAAqB,uBAAAC,GAAuB,sBAAAC,GAAsB,qBAAAC,EAAA,IACxE5B,EAAA,GACI,EAAE,cAAA6B,EAAA,IAAiBC,EAAA,GAKnBC,IAAuBL,EAC1B,OAAO,CAACM,MAAYT,EAAqB,SAASS,EAAQ,eAAe,EAAE,CAAC,EAC5E,OAAO,CAACC,GAAKC,MAASD,IAAMC,EAAK,QAAQ,CAAC,GAEvCC,IAAmBP,IAAsBG;AAE/C,SAAKF,IAKH,gBAAAnB,EAACC,GAAA,EAAI,WAAU,eAAc,IAAI,IAAI,IAAI,IAAI,IAAI,IAC9C,UAAAQ,IAAiB,MAChB,gBAAAX;AAAA,IAAC4B;AAAA,IAAA;AAAA,MACC,QAAQ,aAAanB,EAAM,QAAQ,OAAO;AAAA,MAC1C,cAAc;AAAA,MACd,WAAU;AAAA,MACV,gBAAe;AAAA,MACf,IAAI;AAAA,MAEJ,UAAA;AAAA,QAAA,gBAAAT,EAAC4B,GAAA,EAAM,IAAI,IAAI,IAAI,IACjB,UAAA;AAAA,UAAA,gBAAA1B,EAACG,GAAA,EAAa,QAAQe,GAAqB,SAAQ,MAAK;AAAA,UACxD,gBAAAlB,EAAC2B,GAAA,EAAE,SAAQ,WAAU,YAAW,UAE5B,UAAAC;AAAA,YACEhC,EAAW;AAAA,YACXqB,EAAqB;AAAA,UAAA,EACvB,CAEJ;AAAA,QAAA,GACF;AAAA,QAEA,gBAAAjB,EAAC0B,KAAM,IAAI,IACT,4BAACG,GAAA,EAAK,MAAK,UAAS,EAAA,CACtB;AAAA,QAEA,gBAAA/B,EAAC4B,GAAA,EAAM,IAAI,IAAI,IAAI,IACjB,UAAA;AAAA,UAAA,gBAAA1B,EAACG,GAAA,EAAa,QAAQkB,GAAsB,SAAQ,MAAK;AAAA,UACzD,gBAAArB,EAAC2B,GAAA,EAAE,SAAQ,WAAU,YAAW,UAC7B,UAAAC,EAAiBhC,EAAW,cAAcoB,EAAsB,MAAM,EAAA,CACzE;AAAA,QAAA,GACF;AAAA,QAEA,gBAAAhB,EAAC0B,KAAM,IAAI,IACT,4BAACG,GAAA,EAAK,MAAK,SAAQ,EAAA,CACrB;AAAA,0BAECH,GAAA,EAAM,IAAI,IAAI,IAAI,IAAI,IAAI,IACzB,UAAA;AAAA,UAAA,gBAAA1B,EAACG,GAAA,EAAa,QAAQsB,GAAkB,SAAQ,MAAK;AAAA,4BACpDC,GAAA,EAAM,YAAW,UAAS,WAAU,OAAM,KAAK,GAC9C,UAAA;AAAA,YAAA,gBAAA1B,EAAC2B,KAAE,SAAQ,WAAU,YAAW,UAC7B,YAAW,oBACd;AAAA,8BACCG,IAAA,EAAmB,MAAMlC,EAAW,cAAc,OAAOA,EAAW,cAAA,CAAe;AAAA,UAAA,EAAA,CACtF;AAAA,QAAA,GACF;AAAA,QAEA,gBAAAI,EAAC0B,GAAA,EAAM,YAAY,aAAanB,EAAM,QAAQ,OAAO,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAC3E,UAAA,gBAAAT,EAAAC,GAAA,EACE,UAAA;AAAA,UAAA,gBAAAC,EAACE,KAAK,SAAQ,MACX,YAAiBN,EAAW,MAAMmB,CAAmB,GACxD;AAAA,4BACCY,GAAA,EAAE,SAAQ,WAAU,YAAW,UAC7B,YAAW,cAAA,CACd;AAAA,QAAA,EAAA,CACF,EAAA,CACF;AAAA,MAAA;AAAA,IAAA;AAAA,EAAA,IAGF,gBAAA7B,EAAC4B,GAAA,EAAM,QAAQ,aAAanB,EAAM,QAAQ,OAAO,IAAI,cAAc,GACjE,UAAA;AAAA,IAAA,gBAAAT,EAAC4B,KAAM,WAAU,OAAM,gBAAe,iBAAgB,GAAG,IACvD,UAAA;AAAA,MAAA,gBAAA1B,EAACE,GAAA,EAAK,SAAQ,SAEV,UAAA0B;AAAA,QACEhC,EAAW;AAAA,QACXqB,EAAqB;AAAA,MAAA,GAG3B;AAAA,wBACCd,GAAA,EAAa,QAAQe,GAAqB,MAAM,IAAM,SAAQ,UAAA,CAAU;AAAA,IAAA,GAC3E;AAAA,sBAECa,GAAA,EAAQ;AAAA,sBAERL,GAAA,EAAM,WAAU,OAAM,gBAAe,iBAAgB,GAAG,IACvD,UAAA;AAAA,MAAA,gBAAA1B,EAACE,GAAA,EAAK,SAAQ,SACX,UAAA0B,EAAiBhC,EAAW,cAAcoB,EAAsB,MAAM,EAAA,CACzE;AAAA,MACA,gBAAAhB,EAACG,KAAa,QAAQkB,GAAsB,MAAM,IAAM,QAAO,KAAI,SAAQ,UAAA,CAAU;AAAA,IAAA,GACvF;AAAA,sBAECU,GAAA,EAAQ;AAAA,IAET,gBAAA/B;AAAA,MAAC0B;AAAA,MAAA;AAAA,QACC,YAAW;AAAA,QACX,SAAQ;AAAA,QACR,WAAU;AAAA,QACV,KAAK;AAAA,QACL,QAAQ;AAAA,QACR,gBAAe;AAAA,QACf,IAAI;AAAA,QACJ,IAAI,EAAE,wBAAwB,GAAG,yBAAyB,EAAA;AAAA,QAE1D,UAAA,gBAAA1B,EAACN,IAAA,EAAc,WAAW+B,EAAA,CAAkB;AAAA,MAAA;AAAA,IAAA;AAAA,sBAE7CM,GAAA,EAAQ;AAAA,sBACRL,GAAA,EAAM,WAAU,OAAM,gBAAe,iBAAgB,GAAG,IACvD,UAAA;AAAA,MAAA,gBAAA1B,EAACE,GAAA,EAAK,SAAQ,SAAS,UAAAN,EAAW,eAAc;AAAA,MAChD,gBAAAI,EAACE,GAAA,EAAK,MAAM,IAAM,SAAQ,WACvB,UAAA0B,EAAiBhC,EAAW,MAAMmB,CAAmB,EAAA,CACxD;AAAA,IAAA,EAAA,CACF;AAAA,EAAA,EAAA,CACF,EAAA,CAEJ,IA3GO,gBAAAf,EAACgC,GAAA,EAAO,QAAQrB,IAAW,MAAM,KAAK;AA6GjD,GAEAsB,KAAe5B,EAASC,EAAqB,GC1IvC4B,KAAgD,CAAC;AAAA,EACrD,mBAAAC;AAAA,EACA,qBAAAC;AAAA,EACA,IAAAC,IAAK,CAAA;AACP,MAAM;AACJ,QAAM,EAAE,UAAUC,EAAA,IAASzC,EAAA,GACrB,EAAE,eAAA0C,EAAA,IAAkBzB,EAAA,GACpB,EAAE,QAAA0B,EAAA,IAAWlD,EAAA,GACb,EAAE,8BAAAmD,GAA8B,cAAAtB,EAAA,IAAiBC,EAAA;AAEvD7B,EAAAA,EAAM,UAAU,MAAM;AACpB,IAAK4B,KACHsB,EAAA,EAA+B,QAAA;AAAA,EAEnC,GAAG,CAAA,CAAE,GAELC,GAAmB;AAAA,IACjB,YAAY;AAAA,IACZ,UAAUvB;AAAA,EAAA,CACX;AAED,QAAMwB,IAAiBxB,KAAgB,CAACqB,EAAO;AAE/C,SAAKD,IAGH,gBAAAzC;AAAA,IAAC8C;AAAA,IAAA;AAAA,MACC,WAAU;AAAA,MACV,mBAAAT;AAAA,MACA,iBAAiBG,EAAK;AAAA,MACtB,qBAAqBA,EAAK;AAAA,MAC1B,UAAUK,KAAkB,CAACxB,IAAe,SAAYmB,EAAK;AAAA,MAC7D,IAAI,EAAE,QAAQ,QAAQ,GAAGD,EAAA;AAAA,MACzB,OAAOC,EAAK;AAAA,MAEX,UAAA;AAAA,QAAA,CAACnB,uBAAiBa,GAAA,EAAO;AAAA,QACzBb,MACEwB,IACC,gBAAA3C;AAAA,UAAC6C;AAAA,UAAA;AAAA,YACC,QAAQP,EAAK;AAAA,YACb,MAAK;AAAA,YACL,SAASF;AAAA,YACT,eAAeE,EAAK;AAAA,YACpB,wBAAuB;AAAA,YACvB,SAASA,EAAK;AAAA,UAAA;AAAA,QAAA,sBAGfhC,IAAA,EAAsB;AAAA,MAAA;AAAA,IAAA;AAAA,EAAA,IAxBJ,gBAAAN,EAACgC,GAAA,CAAA,CAAO;AA4BrC,GAEAc,KAAezC,EAAS6B,EAAkB,GC9DpCa,KAAgB,CAAC,EAAE,WAAApD,QAErB,gBAAAK;AAAA,EAACgD;AAAA,EAAA;AAAA,IACC,IAAI;AAAA,MACF,YAAY;AAAA,MACZ,iBAAiB;AAAA,MACjB,SAAS;AAAA,MACT,KAAK;AAAA,MACL,SAAS;AAAA,MACT,wBAAwB;AAAA,MACxB,yBAAyB;AAAA,MACzB,WAAW;AAAA,IAAA;AAAA,IAGb,UAAA,gBAAAhD,EAACN,MAAc,WAAAC,EAAA,CAAsB;AAAA,EAAA;AAAA;ACTpC,IAAKsD,sBAAAA,OACVA,EAAA,UAAU,WACVA,EAAA,SAAS,UAFCA,IAAAA,KAAA,CAAA,CAAA;AASZ,MAAMC,KAAqD,CAAC,EAAE,YAAAC,QAE1D,gBAAArD,EAAAC,GAAA,EACE,UAAA;AAAA,EAAA,gBAAAD,EAACkD,GAAA,EAAS,IAAI,EAAE,SAAS,QAAQ,YAAY,UAAU,KAAK,IAAI,IAAI,IAAI,IAAI,MAC1E,UAAA;AAAA,IAAA,gBAAAlD,EAAC4B,KAAM,YAAW,UAAS,QAAQ,IAAI,OAAO,IAC5C,UAAA;AAAA,MAAA,gBAAA1B,EAACE,GAAA,EAAK,MAAM,IAAM,IAAI,EAAE,UAAU,GAAA,GAC/B,UAAAkD,EAAWD,EAAW,cAAcE,EAAkB,KAAK,GAC9D;AAAA,MACA,gBAAArD,EAACE,GAAA,EAAK,MAAM,IAAM,IAAI,EAAE,UAAU,GAAA,GAC/B,UAAAkD,EAAWD,EAAW,cAAcE,EAAkB,GAAG,EAAA,CAC5D;AAAA,IAAA,GACF;AAAA,IACA,gBAAArD,EAACE,GAAA,EAAK,IAAI,EAAE,UAAU,GAAG,UAAU,GAAA,GAAO,UAAAiD,EAAW,KAAA,CAAK;AAAA,IAC1D,gBAAAnD;AAAA,MAACG;AAAA,MAAA;AAAA,QACC,QAAQgD,EAAW;AAAA,QACnB,MAAM;AAAA,QACN,IAAI,EAAE,WAAW,SAAS,UAAU,GAAA;AAAA,MAAG;AAAA,IAAA;AAAA,EACzC,GACF;AAAA,oBACCpB,GAAA,CAAA,CAAQ;AAAA,GACX,GAIJuB,KAAejD,EAAS6C,EAAiB,GC7BnCK,KAA4D,CAAC,EAAE,OAAAC,GAAO,MAAAC,QAAW;AACrF,QAAM,EAAE,UAAU7D,EAAA,IAAeC,EAAA;AAEjC,SACE,gBAAAC,EAAAC,GAAA,EACE,UAAA;AAAA,IAAA,gBAAAD;AAAA,MAAC4D;AAAA,MAAA;AAAA,QACC,IAAI;AAAA,UACF,YAAY;AAAA,UACZ,iBAAiB;AAAA,UACjB,SAAS;AAAA,UACT,gBAAgB;AAAA,UAChB,IAAI;AAAA,UACJ,IAAI;AAAA,UACJ,IAAI;AAAA,QAAA;AAAA,QAGN,UAAA;AAAA,UAAA,gBAAA1D,EAACE,GAAA,EAAK,MAAM,IAAM,IAAI,EAAE,UAAU,GAAA,GAC/B,UAAAuD,MAASR,EAAY,UAAUrD,EAAW,WAAWA,EAAW,QACnE;AAAA,UACA,gBAAAE,EAACI,KAAK,MAAM,IAAM,IAAI,EAAE,UAAU,MAC/B,UAAA;AAAA,YAAAuD,MAASR,EAAY,UAAU,MAAM;AAAA,YACrCU,EAAeH,GAAO,QAAQ;AAAA,UAAA,EAAA,CACjC;AAAA,QAAA;AAAA,MAAA;AAAA,IAAA;AAAA,sBAEDzB,GAAA,CAAA,CAAQ;AAAA,EAAA,GACX;AAEJ,GAEA6B,KAAevD,EAASkD,EAAoB,GCpC/BM,KACX,CAACC,GAAkBC,MAA0C,CAACC,MAC5DA,EAAE,gBAAgBF,EAAQ,SACzBG,GAAQD,EAAE,YAAY,KAAKE,GAAQF,EAAE,cAAcD,EAAU,KAAK,MACnEI,GAASH,EAAE,cAAcD,EAAU,GAAG,GCQpCK,KAAa,MAAM;AACvB,QAAM,EAAE,gBAAA3D,EAAA,IAAmBC,GAAA,GACrB,EAAE,UAAUd,EAAA,IAAeC,EAAA,GAC3B;AAAA,IACJ,QAAQ,EAAE,uCAAuCwE,EAAA;AAAA,EAAa,IAC5DC,GAAA,GACE,EAAE,WAAAP,GAAW,sBAAA9C,GAAsB,kBAAAsD,GAAkB,gBAAAC,EAAA,IAAmBlF,EAAA;AAE9E,2BACGoC,GAAA,EACC,UAAA;AAAA,IAAA,gBAAA5B,EAAC4B,KAAM,WAAWjB,IAAiB,MAAM,WAAW,OAAO,gBAAe,iBACxE,UAAA;AAAA,MAAA,gBAAAT,EAACE,GAAA,EAAK,MAAM,IAAM,IAAI,EAAE,UAAU,IAAI,IAAI,GAAA,GACvC,UAAAN,EAAW,mBAAA,CACd;AAAA,MACA,gBAAAE,EAACI,GAAA,EAAK,MAAM,IAAM,IAAI,EAAE,UAAU,IAAI,IAAI,GAAA,GACvC,UAAA;AAAA,QAAAkD,EAAWW,EAAU,OAAOV,EAAkB,cAAc;AAAA,QAAE;AAAA,QAAG;AAAA,QACjED,EAAWW,EAAU,KAAKV,EAAkB,cAAc;AAAA,MAAA,EAAA,CAC7D;AAAA,IAAA,GACF;AAAA,IAEA,gBAAArD,EAAC0B,GAAA,EACE,UAAAT,EAAqB,IAAI,CAAC6C,MAAqB;AAC9C,YAAMW,IAA0BD,EAC7B,OAAOX,GAAiBC,GAASC,CAAS,CAAC,EAC3C,KAAK,CAACW,GAAGC,MAAMC,GAAYF,EAAE,YAAY,IAAIE,GAAYD,EAAE,YAAY,CAAC,GAErEE,IAA6BN,EAAiB;AAAA,QAClDV,GAAiBC,GAASC,CAAS;AAAA,MAAA,GAG/Be,IAAcL,EAAwB;AAAA,QAC1C,CAAClD,GAAaC,MAAqBD,IAAMC,EAAK;AAAA,QAC9C;AAAA,MAAA,GAEIuD,IAAeF,EAA2B;AAAA,QAC9C,CAACtD,GAAKC,MAASD,IAAMC,EAAK;AAAA,QAC1B;AAAA,MAAA,GAGIwD,IACJC,GAA0BnB,GAASO,CAAY,IAAIS,IAAcC;AAEnE,aACE,gBAAAjF;AAAA,QAACoF;AAAA,QAAA;AAAA,UAEC,IAAI;AAAA,YACF,QAAQ;AAAA,YACR,aAAa;AAAA,YACb,IAAI;AAAA,YACJ,cAAc;AAAA,UAAA;AAAA,UAGhB,UAAA;AAAA,YAAA,gBAAAlF;AAAA,cAACmF;AAAA,cAAA;AAAA,gBACC,SAAArB;AAAA,gBACA,eAAe;AAAA,kBACb,gBAAgB;AAAA,kBAChB,gBAAgB;AAAA,kBAChB,IAAI,EAAE,iBAAiB,GAAG,IAAI,GAAA;AAAA,gBAAG;AAAA,cACnC;AAAA,YAAA;AAAA,8BAED/B,GAAA,EAAQ;AAAA,YAER0C,EAAwB,SAAS,KAChC,gBAAAzE,EAACgD,GAAA,EACC,UAAA,gBAAAhD;AAAA,cAACkF;AAAA,cAAA;AAAA,gBACC,WACE,gBAAAlF,EAACuD,IAAA,EAAqB,OAAOuB,GAAa,MAAM7B,EAAY,QAAQ;AAAA,gBAEtE,IAAI,EAAE,OAAO,OAAA;AAAA,gBAEZ,UAAAwB,EAAwB,IAAI,CAACT,MAC5B,gBAAAhE,EAACkD,MAAmD,YAAYc,KAAxCA,EAAE,wBAAyC,CACpE;AAAA,cAAA;AAAA,YAAA,GAEL;AAAA,YAGDa,EAA2B,SAAS,KACnC,gBAAA7E,EAACgD,GAAA,EACC,UAAA,gBAAAhD;AAAA,cAACkF;AAAA,cAAA;AAAA,gBACC,WACE,gBAAAlF,EAACuD,IAAA,EAAqB,OAAOwB,GAAc,MAAM9B,EAAY,SAAS;AAAA,gBAExE,IAAI,EAAE,OAAO,OAAA;AAAA,gBAEZ,UAAA4B,EAA2B,IAAI,CAACb,MAC/B,gBAAAhE,EAACkD,MAAmD,YAAYc,KAAxCA,EAAE,wBAAyC,CACpE;AAAA,cAAA;AAAA,YAAA,GAEL;AAAA,YAGF,gBAAAhE,EAAC+C,IAAA,EAAc,WAAWiC,EAAA,CAAkB;AAAA,UAAA;AAAA,QAAA;AAAA,QAhDvClB,EAAQ;AAAA,MAAA;AAAA,IAmDnB,CAAC,EAAA,CACH;AAAA,EAAA,GACF;AAEJ,GAEAsB,KAAe/E,EAAS+D,EAAU,GC5F5BiB,KAAa,MAAM;AACvB,QAAM,EAAE,gBAAA5E,EAAA,IAAmBC,GAAA,GACrBH,IAAQC,GAAA,GACR,EAAE,UAAUZ,EAAA,IAAeC,EAAA,GAC3B;AAAA,IACJ,QAAQ,EAAE,uCAAuCwE,EAAA;AAAA,EAAa,IAC5DC,GAAA,GACE,EAAE,WAAAP,GAAW,sBAAA9C,GAAsB,kBAAAsD,GAAkB,gBAAAC,EAAA,IAAmBlF,EAAA,GAExEgG,IAAwB;AAAA,IAC5B;AAAA,MACE,OAAO;AAAA,MACP,MAAM;AAAA,MACN,YAAY1F,EAAW;AAAA,MACvB,YAAY,CAAC,EAAE,OAAO,EAAE,MAAA2F,GAAM,UAAAC,GAAU,kBAAAC,GAAkB,gBAAAC,EAAA,QAAuB;AAC/E,cAAMC,IAAcH,KAAYD;AAEhC,iCACG7D,GAAA,EAAM,YAAW,UAAS,eAAc,OAAM,KAAK,IAClD,UAAA;AAAA,UAAA,gBAAA1B;AAAA,YAAC4F;AAAA,YAAA;AAAA,cACC,KAAKhG,EAAW;AAAA,cAChB,iBAAiB6F,KAAoB;AAAA,cACrC,MAAM;AAAA,YAAA;AAAA,UAAA;AAAA,UAER,gBAAAzF,EAACE,GAAA,EAAK,SAAQ,SAAS,UAAA,GAAGyF,CAAW,IAAID,IAAiB,IAAIA,CAAc,KAAK,EAAE,GAAA,CAAG;AAAA,QAAA,GACxF;AAAA,MAEJ;AAAA,IAAA;AAAA,IAEF;AAAA,MACE,OAAO;AAAA,MACP,MAAM;AAAA,MACN,YAAY9F,EAAW;AAAA,MACvB,MAAM;AAAA,MACN,YAAY,CAACiG,MACX,gBAAA7F,EAACE,GAAA,EAAK,OAAOK,EAAM,QAAQ,KAAK,SAAS,SAAQ,SAC9C,UAAAoD,EAAekC,EAAO,OAAO,QAAQ,EAAA,CACxC;AAAA,IAAA;AAAA,IAGJ;AAAA,MACE,OAAO;AAAA,MACP,MAAM;AAAA,MACN,YAAYjG,EAAW;AAAA,MACvB,MAAM;AAAA,MACN,YAAY,CAACiG,wBACV3F,GAAA,EAAK,OAAOK,EAAM,QAAQ,KAAK,SAAS,SAAQ,SAC9C,UAAA,IAAIoD,EAAekC,EAAO,OAAO,QAAQ,CAAC,GAAA,CAC7C;AAAA,IAAA;AAAA,IAGJ;AAAA,MACE,OAAO;AAAA,MACP,MAAM;AAAA,MACN,YAAYjG,EAAW;AAAA,MACvB,MAAM;AAAA,MACN,YAAY,CAACiG,wBACV3F,GAAA,EAAK,OAAOK,EAAM,QAAQ,KAAK,SAAS,SAAQ,SAC9C,UAAA,IAAIoD,EAAekC,EAAO,OAAO,QAAQ,CAAC,GAAA,CAC7C;AAAA,IAAA;AAAA,IAGJ;AAAA,MACE,OAAO;AAAA,MACP,MAAM;AAAA,MACN,YAAYjG,EAAW;AAAA,MACvB,MAAM;AAAA,MACN,YAAY,CAACiG,MAAW;AACtB,cAAMrC,IAAQqC,EAAO,IAAI,UAAUA,EAAO,IAAI,SAASA,EAAO,IAAI;AAElE,eACE,gBAAA7F;AAAA,UAACE;AAAA,UAAA;AAAA,YACC,OAAO,KAAK,KAAKsD,CAAK,MAAM,KAAKjD,EAAM,QAAQ,MAAM,OAAOA,EAAM,QAAQ,KAAK;AAAA,YAC/E,SAAQ;AAAA,YAEP,UAAAoD,EAAeH,GAAO,QAAQ;AAAA,UAAA;AAAA,QAAA;AAAA,MAGrC;AAAA,IAAA;AAAA,EACF,GAGIsC,IAAOvG,EAAM,QAAQ,MAClB0B,EAAqB,IAAI,CAAC6C,MAAqB;AACpD,UAAMiC,IAAyBxB,EAC5B,OAAOV,GAAiBC,GAASC,CAAS,CAAC,EAC3C,OAAO,CAACxC,GAAKC,MAASD,IAAMC,EAAK,QAAQ,CAAC,GAEvCwE,IAAuBxB,EAC1B,OAAOX,GAAiBC,GAASC,CAAS,CAAC,EAC3C,OAAO,CAACxC,GAAKC,MAASD,IAAMC,EAAK,QAAQ,CAAC,GAEvCyE,IAAkBhB,GAA0BnB,GAASO,CAAY,GACjE1E,IAAYsG,IAAkBD,IAAuBD;AAE3D,WAAO;AAAA,MACL,SAAAjC;AAAA,MACA,SAASmC;AAAA,MACT,IAAInC,EAAQ;AAAA,MACZ,QAAQkC;AAAA,MACR,UAAUD;AAAA,MACV,WAAApG;AAAA,IAAA;AAAA,EAEJ,CAAC,GACA,CAACsB,GAAsBsD,GAAkBC,GAAgBH,GAAcN,CAAS,CAAC;AAEpF,SACE,gBAAAjE;AAAA,IAACG;AAAA,IAAA;AAAA,MACC,IAAI;AAAA,QACF,OAAO;AAAA,MAAA;AAAA,MAGT,UAAA;AAAA,QAAA,gBAAAH;AAAA,UAAC4B;AAAA,UAAA;AAAA,YACC,WAAWjB,IAAiB,MAAM,WAAW;AAAA,YAC7C,gBAAe;AAAA,YACf,IAAI;AAAA,YAEJ,UAAA;AAAA,cAAA,gBAAAX,EAAC4B,KAAM,YAAW,UAAS,WAAU,OAAM,KAAK,GAC9C,UAAA;AAAA,gBAAA,gBAAA1B;AAAA,kBAACE;AAAA,kBAAA;AAAA,oBACC,MAAM;AAAA,oBACN,IAAI;AAAA,sBACF,UAAU;AAAA,oBAAA;AAAA,oBAGX,UAAAN,EAAW;AAAA,kBAAA;AAAA,gBAAA;AAAA,gBAEd,gBAAAI;AAAA,kBAAC8B;AAAA,kBAAA;AAAA,oBACC,MAAMlC,EAAW;AAAA,oBACjB,OAAOA,EAAW;AAAA,kBAAA;AAAA,gBAAA;AAAA,cACpB,GACF;AAAA,cACA,gBAAAE,EAACI,KAAK,MAAM,IAAM,IAAI,EAAE,UAAU,MAC/B,UAAA;AAAA,gBAAAkD,EAAWW,EAAU,OAAOV,EAAkB,cAAc;AAAA,gBAAE;AAAA,gBAAG;AAAA,gBACjED,EAAWW,EAAU,KAAKV,EAAkB,cAAc;AAAA,cAAA,EAAA,CAC7D;AAAA,YAAA;AAAA,UAAA;AAAA,QAAA;AAAA,QAED5C,IAAiB,MAChB,gBAAAT;AAAA,UAACkG;AAAA,UAAA;AAAA,YACC,oBAAoB;AAAA,YACpB,SAAAZ;AAAA,YACA,SAAQ;AAAA,YACR,mBAAmB;AAAA,YACnB,4BAA4B;AAAA,YAC5B,YAAY;AAAA,YACZ,WAAW;AAAA,YACX,MAAAQ;AAAA,YACA,IAAI;AAAA,cACF,QAAQ;AAAA,cACR,aAAa;AAAA,cACb,cAAc;AAAA,cACd,mDAAmD;AAAA,gBACjD,OAAOvF,EAAM,QAAQ,QAAQ;AAAA,gBAC7B,WAAW;AAAA,kBACT,iBAAiB4F,GAAM5F,EAAM,QAAQ,QAAQ,MAAM,GAAG;AAAA,gBAAA;AAAA,cACxD;AAAA,cAEF,oCAAoC;AAAA,gBAClC,YAAYA,EAAM,WAAW,GAAG;AAAA,gBAChC,UAAUA,EAAM,WAAW,MAAM;AAAA,cAAA;AAAA,cAEnC,2BAA2B;AAAA,gBACzB,OAAOA,EAAM,QAAQ,QAAQ;AAAA,cAAA;AAAA,YAC/B;AAAA,UACF;AAAA,QAAA,IAGFuF,EAAK,IAAI,CAACM,MAAQ;AAChB,gBAAM,EAAE,MAAAb,GAAM,UAAAC,GAAU,kBAAAC,GAAkB,gBAAAC,EAAA,IAAmBU,EAAI,SAC3DT,IAAcH,KAAYD;AAEhC,iBACE,gBAAAvF;AAAA,YAACkF;AAAA,YAAA;AAAA,cAEC,IAAI;AAAA,gBACF,QAAQ;AAAA,gBACR,aAAa;AAAA,gBACb,cAAc;AAAA,gBACd,cAAc;AAAA,cAAA;AAAA,cAGhB,UAAA,gBAAAlF,EAACgD,GAAA,EAAS,IAAI,EAAE,WAAW,UACzB,UAAA,gBAAAlD,EAAC4B,GAAA,EAAM,OAAM,QACX,UAAA;AAAA,gBAAA,gBAAA5B;AAAA,kBAAC4B;AAAA,kBAAA;AAAA,oBACC,YAAW;AAAA,oBACX,eAAc;AAAA,oBACd,gBAAe;AAAA,oBACf,IAAI;AAAA,oBACJ,IAAI;AAAA,oBAEJ,UAAA;AAAA,sBAAA,gBAAA5B,EAAC4B,GAAA,EAAM,YAAW,UAAS,eAAc,OAAM,KAAK,GAAG,OAAM,OAC3D,UAAA;AAAA,wBAAA,gBAAA1B;AAAA,0BAAC4F;AAAA,0BAAA;AAAA,4BACC,KAAKhG,EAAW;AAAA,4BAChB,iBAAiB6F,KAAoB;AAAA,4BACrC,MAAM;AAAA,0BAAA;AAAA,wBAAA;AAAA,wBAER,gBAAAzF,EAACE,GAAA,EAAK,SAAQ,SAAS,UAAA,GAAGyF,CAAW,IAAID,IAAiB,IAAIA,CAAc,KAAK,EAAE,GAAA,CAAG;AAAA,sBAAA,GACxF;AAAA,sBACA,gBAAA1F,EAACG,KAAa,QAAQiG,EAAI,SAAS,MAAM,IAAM,SAAQ,QAAA,CAAQ;AAAA,oBAAA;AAAA,kBAAA;AAAA,gBAAA;AAAA,kCAEhErE,GAAA,EAAQ,IAAI,EAAE,OAAO,UAAU;AAAA,gBAChC,gBAAAjC;AAAA,kBAAC4B;AAAA,kBAAA;AAAA,oBACC,YAAW;AAAA,oBACX,eAAc;AAAA,oBACd,gBAAe;AAAA,oBACf,IAAI;AAAA,oBACJ,IAAI;AAAA,oBAEJ,UAAA;AAAA,sBAAA,gBAAA1B,EAACE,GAAA,EAAK,SAAQ,SAAS,UAAAN,EAAW,kBAAiB;AAAA,sBACnD,gBAAAI,EAACG,GAAA,EAAa,QAAQiG,EAAI,QAAQ,MAAM,IAAM,QAAO,KAAI,SAAQ,QAAA,CAAQ;AAAA,oBAAA;AAAA,kBAAA;AAAA,gBAAA;AAAA,kCAE1ErE,GAAA,EAAQ,IAAI,EAAE,OAAO,UAAU;AAAA,gBAChC,gBAAAjC;AAAA,kBAAC4B;AAAA,kBAAA;AAAA,oBACC,YAAW;AAAA,oBACX,eAAc;AAAA,oBACd,gBAAe;AAAA,oBACf,IAAI;AAAA,oBACJ,IAAI;AAAA,oBAEJ,UAAA;AAAA,sBAAA,gBAAA1B,EAACE,GAAA,EAAK,SAAQ,SAAS,UAAAN,EAAW,oBAAmB;AAAA,sBACrD,gBAAAI,EAACG,GAAA,EAAa,QAAQiG,EAAI,UAAU,MAAM,IAAM,QAAO,KAAI,SAAQ,QAAA,CAAQ;AAAA,oBAAA;AAAA,kBAAA;AAAA,gBAAA;AAAA,kCAE5ErE,GAAA,EAAQ,IAAI,EAAE,OAAO,UAAU;AAAA,gBAChC,gBAAA/B;AAAA,kBAAC0B;AAAA,kBAAA;AAAA,oBACC,YAAW;AAAA,oBACX,SAAQ;AAAA,oBACR,eAAc;AAAA,oBACd,KAAK;AAAA,oBACL,gBAAe;AAAA,oBACf,IAAI;AAAA,oBACJ,IAAI;AAAA,oBACJ,IAAI,EAAE,wBAAwB,OAAO,yBAAyB,MAAA;AAAA,oBAE9D,UAAA,gBAAA1B,EAACN,IAAA,EAAc,WAAW0G,EAAI,UAAA,CAAW;AAAA,kBAAA;AAAA,gBAAA;AAAA,cAC3C,EAAA,CACF,EAAA,CACF;AAAA,YAAA;AAAA,YA/DKA,EAAI;AAAA,UAAA;AAAA,QAkEf,CAAC;AAAA,MAAA;AAAA,IAAA;AAAA,EAAA;AAIT,GAEAC,KAAehG,EAASgF,EAAU,GCxQ5BiB,KAA4B,MAAM;AACtC,QAAM,EAAE,UAAU1G,EAAA,IAAeC,EAAA,GAC3B,EAAE,WAAA0G,EAAA,IAAc3F,GAAA,GAChB,EAAE,SAAA4F,EAAA,IAAYC,GAAA,GAEd,CAACC,GAAOC,CAAQ,IAAIpH,EAAM,SAAS,CAAC,GAEpCqH,IAAe,CAACC,GAA8BC,MAAqB;AACvE,IAAAH,EAASG,CAAQ;AAAA,EACnB;AAEAvH,SAAAA,EAAM,UAAU,MAAM;AACpB,IAAAiH,EAAQE,MAAU,IAAI,sBAAsB,mBAAmB;AAAA,EACjE,GAAG,CAACA,CAAK,CAAC,qBAGPzG,GAAA,EACC,UAAA;AAAA,IAAA,gBAAAH;AAAA,MAACiH;AAAA,MAAA;AAAA,QACC,cAAYnH,EAAW;AAAA,QACvB,UAAU;AAAA,QACV,UAAUgH;AAAA,QACV,WAAU;AAAA,QACV,OAAAF;AAAA,QACA,SAAQ;AAAA,QAER,UAAA;AAAA,UAAA,gBAAA1G;AAAA,YAACgH;AAAA,YAAA;AAAA,cACC,iBAAc;AAAA,cACd,IAAG;AAAA,cACH,OAAOpH,EAAW;AAAA,cAClB,IAAI;AAAA,gBACF,eAAe;AAAA,cAAA;AAAA,YACjB;AAAA,UAAA;AAAA,UAEF,gBAAAI;AAAA,YAACgH;AAAA,YAAA;AAAA,cACC,iBAAc;AAAA,cACd,IAAG;AAAA,cACH,OAAOpH,EAAW;AAAA,cAClB,IAAI;AAAA,gBACF,eAAe;AAAA,cAAA;AAAA,YACjB;AAAA,UAAA;AAAA,QACF;AAAA,MAAA;AAAA,IAAA;AAAA,sBAEDK,GAAA,EAAI,IAAI,EAAE,IAAI,MAAM;AAAA,sBACpBgH,IAAA,EAAoB,OAAO,GAAG,MAAK,YAAW,OAAAP,GAC7C,UAAA,gBAAA1G,EAACC,GAAA,EAAI,IAAI,EAAE,GAAGsG,IAAY,KAAK,GAAA,GAC7B,UAAA,gBAAAvG,EAACqF,IAAA,EAAW,GACd,EAAA,CACF;AAAA,sBACC4B,IAAA,EAAoB,OAAO,GAAG,MAAK,YAAW,OAAAP,GAC7C,UAAA,gBAAA1G,EAACC,GAAA,EAAI,IAAI,EAAE,GAAGsG,IAAY,KAAK,GAAA,GAC7B,UAAA,gBAAAvG,EAACoE,IAAA,EAAW,GACd,EAAA,CACF;AAAA,EAAA,GACF;AAEJ,GAEA8C,KAAe7G,EAASiG,EAAe,GCnDjCa,KAA8D,CAAC;AAAA,EACnE,QAAAC;AAAA,EACA,UAAAzG,IAAW;AAAA,EACX,SAAA0G,IAAU;AAAA,EACV,OAAAC;AAAA,EACA,QAAAC;AAAA,EACA,SAAAC;AACF,MAEI,gBAAA1H;AAAA,EAAC4B;AAAA,EAAA;AAAA,IACC,SAAS2F,IAAU,uBAAuB;AAAA,IAC1C,WAAW1G,IAAW,QAAQ;AAAA,IAC9B,gBAAgBA,IAAW,kBAAkB;AAAA,IAC7C,SAASA,IAAW,cAAc;AAAA,IAClC,IAAI,EAAE,wBAAwB,GAAG,yBAAyB,EAAA;AAAA,IAEzD,UAAA;AAAA,MAAA,CAACA,KAAY,gBAAAX,EAACG,GAAA,EAAa,QAAAiH,GAAgB,WAAU,MAAK,SAAQ,MAAK;AAAA,MACxE,gBAAAtH,EAAC4B,GAAA,EAAM,YAAW,UAAS,WAAU,QAAO,WAAU,OAAM,KAAK,GAAG,IAAI,GACtE,UAAA;AAAA,QAAA,gBAAA1B,EAACE,GAAA,EAAK,MAAMmH,GAAS,SAAQ,SAC1B,UAAAC,GACH;AAAA,QACCE;AAAA,MAAA,GACH;AAAA,MACC7G,uBAAaR,GAAA,EAAa,QAAAiH,GAAgB,WAAU,MAAK,QAAAG,GAAgB,SAAQ,QAAA,CAAQ;AAAA,IAAA;AAAA,EAAA;AAAA,GCV1FE,KACJ,CAACC,GAAwB3D,MAA0C,CAACC,MAClEA,EAAE,eACF0D,EAAa,SAAS1D,EAAE,WAAW,MAClCC,GAAQD,EAAE,YAAY,KAAKE,GAAQF,EAAE,cAAcD,EAAU,KAAK,MACnEI,GAASH,EAAE,cAAcD,EAAU,GAAG,GAEpC4D,KAA4B,MAAM;AACtC,QAAM,EAAE,gBAAAlH,EAAA,IAAmBC,GAAA,GACrB,EAAE,UAAUd,EAAA,IAAeC,EAAA,GAE3B,EAAE,cAAAsB,EAAA,IAAiBC,EAAA,GACnB,EAAE,sBAAAP,EAAA,IAAyBC,EAAA,GAC3B;AAAA,IACJ,WAAAiD;AAAA,IACA,QAAAvB;AAAA,IACA,sBAAAvB;AAAA,IACA,qBAAAC;AAAA,IACA,kBAAAqD;AAAA,IACA,gBAAAC;AAAA,EAAA,IACElF,EAAA,GAEE,CAACsI,GAAQC,CAAS,IAAItI,EAAM,SAAS,EAAK,GAI1CuI,IAAmBvD,EAAiB;AAAA,IACxCkD,GAAwB5G,GAAsBkD,CAAS;AAAA,EAAA,GAGnDgE,IAAiBvD,EAAe;AAAA,IACpCiD,GAAwB5G,GAAsBkD,CAAS;AAAA,EAAA,GAGnDiE,IAAc9G,GAEd+G,IAAwBH,EAAiB,OAAO,CAACvG,GAAKC,MAASD,IAAMC,EAAK,QAAQ,CAAC,GACnF0G,IAAsBH,EAAe,OAAO,CAACxG,GAAKC,MAASD,IAAMC,EAAK,QAAQ,CAAC,GAC/EC,IAAmBuG,IAAcC,IAAwBC,GAEzDC,IAAqBhH,KAAgBqB,EAAO,SAAS,GACrD7B,IAAWF,IAAiB;AAElC,SACE,gBAAAX,EAAC4B,GAAA,EAAM,IAAI,EAAE,IAAIf,IAAW,KAAK,GAAG,IAAIA,IAAW,KAAK,GAAA,GACtD,UAAA;AAAA,IAAA,gBAAAb;AAAA,MAAC4B;AAAA,MAAA;AAAA,QACC,QAAQf,IAAW,cAAc;AAAA,QACjC,aAAY;AAAA,QACZ,cAAc;AAAA,QACd,eAAeA,IAAW,WAAW;AAAA,QACrC,KAAKA,IAAW,IAAI;AAAA,QACpB,gBAAe;AAAA,QAEf,UAAA;AAAA,UAAA,gBAAAX;AAAA,YAACmH;AAAA,YAAA;AAAA,cACC,QAAQa;AAAA,cACR,UAAArH;AAAA,cACA,OAAOiB,EAAiBhC,EAAW,eAAeqB,EAAqB,MAAM;AAAA,YAAA;AAAA,UAAA;AAAA,UAG9EN,uBAAaoB,GAAA,EAAQ;AAAA,UACrBoG,IACC,gBAAArI,EAAAC,GAAA,EACG,UAAA;AAAA,YAAA,CAACY,KAAY,gBAAAX,EAACE,GAAA,EAAK,IAAI,EAAE,UAAU,IAAI,YAAY,EAAA,GAAK,UAAA,IAAA,CAAC;AAAA,YAC1D,gBAAAF;AAAA,cAACmH;AAAA,cAAA;AAAA,gBACC,QAAQe;AAAA,gBACR,UAAAvH;AAAA,gBACA,OAAOf,EAAW;AAAA,gBAClB,QAAQe,IAAW,MAAM;AAAA,cAAA;AAAA,YAAA;AAAA,UAC3B,EAAA,CACF,IAEA,gBAAAX;AAAA,YAACoI;AAAA,YAAA;AAAA,cACC,SAAS,MAAMP,EAAU,EAAI;AAAA,cAC7B,WAAW,gBAAA7H,EAAC6B,GAAA,EAAK,MAAK,MAAA,CAAM;AAAA,cAC5B,IAAI,EAAE,UAAU,GAAA;AAAA,cAEf,UAAAjC,EAAW;AAAA,YAAA;AAAA,UAAA;AAAA,UAIfe,IAAW,gBAAAX,EAAC+B,GAAA,CAAA,CAAQ,IAAK,gBAAA/B,EAACE,GAAA,EAAK,IAAI,EAAE,UAAU,IAAI,YAAY,EAAA,GAAK,UAAA,KAAC;AAAA,UAEtE,gBAAAF;AAAA,YAACmH;AAAA,YAAA;AAAA,cACC,QAAQc;AAAA,cACR,UAAAtH;AAAA,cACA,OAAOiB,EAAiBhC,EAAW,gBAAgBkI,EAAiB,MAAM;AAAA,cAC1E,QAAQnH,IAAW,MAAM;AAAA,YAAA;AAAA,UAAA;AAAA,UAG1BA,IAAW,gBAAAX,EAAC+B,GAAA,CAAA,CAAQ,IAAK,gBAAA/B,EAACE,GAAA,EAAK,IAAI,EAAE,UAAU,IAAI,YAAY,EAAA,GAAK,UAAA,KAAC;AAAA,UAEtE,gBAAAF;AAAA,YAACmH;AAAA,YAAA;AAAA,cACC,QAAQ1F;AAAA,cACR,UAAAd;AAAA,cACA,SAASA;AAAA,cACT,OAAOf,EAAW;AAAA,cAClB,SACE,gBAAAI;AAAA,gBAAC8B;AAAA,gBAAA;AAAA,kBACC,MAAMlC,EAAW;AAAA,kBACjB,OAAOA,EAAW;AAAA,gBAAA;AAAA,cAAA;AAAA,YACpB;AAAA,UAAA;AAAA,QAEJ;AAAA,MAAA;AAAA,IAAA;AAAA,IAGF,gBAAAI;AAAA,MAACqI;AAAA,MAAA;AAAA,QACC,gBAAgBzI,EAAW;AAAA,QAC3B,QAAAgI;AAAA,QACA,SAAS,MAAMC,EAAU,EAAK;AAAA,QAC9B,yBAAyB;AAAA,QACzB,OAAOjI,EAAW;AAAA,QAElB,4BAAC0I,IAAA,CAAA,CAAa;AAAA,MAAA;AAAA,IAAA;AAAA,EAChB,GACF;AAEJ,GAEAC,KAAelI,EAASsH,EAAe,GCxHjCa,KAAwC,CAAC,EAAE,aAAAC,GAAa,aAAAC,GAAa,IAAArG,IAAK,CAAA,QAAS;AACvF,QAAM,EAAE,kBAAAsG,GAAkB,sBAAA9H,GAAsB,uBAAA+H,GAAuB,uBAAAC,EAAA,IACrE/H,EAAA,GAEI,EAAE,SAAA0F,EAAA,IAAYC,GAAA,GACd,EAAE,cAAAqC,EAAA,IAAiBxE,GAAA,GACnB,EAAE,qBAAqByE,EAAA,IAAiBC,GAAA,GACxC,EAAE,WAAAC,EAAA,IAAcC,GAAA,GAChB,EAAE,WAAAnF,EAAA,IAAczE,EAAA,GAChB,EAAE,8BAAAmD,GAA8B,cAAAtB,EAAA,IAAiBC,EAAA,GACjD,EAAE,UAAUxB,GAAY,WAAWuJ,EAAA,IAAkBtJ,EAAA,GACrD,EAAE,eAAA0C,EAAA,IAAkBzB,EAAA,GAGpBsI,IADON,GAAc,QAAQ,kBAAkB,SACjB,iBAC9B,CAACO,GAAgBC,CAAiB,IAAI/J,EAAM,SAAS6J,CAAkB;AAyB7E,SAvBA7J,EAAM,UAAU,MAAM;AACpB,IAAK4B,KACHsB,EAAA,EAA+B,QAAA;AAAA,EAEnC,GAAG,CAAA,CAAE,GAELlD,EAAM,UAAU,MAAM;AACpB,UAAMgK,IAAmBR,EAAa,IAAI,CAACjF,MAAYA,EAAQ,IAAI,GAC7D0F,KAAWb,EAAiB;AAAA,MAChC,CAAC7E,MACCjD,EAAqB,SAASiD,EAAQ,IAAI,KAAKyF,EAAiB,SAASzF,EAAQ,IAAI;AAAA,IAAA;AAEzF,IAAAmF,EAAU;AAAA,MACR,WAAW,EAAE,OAAOQ,GAAQC,GAAA,GAAgB,EAAE,GAAG,KAAKC,KAAW;AAAA,MACjE,UAAUH,GAAS,IAAI,CAAC9E,MAAMA,EAAE,IAAI;AAAA,IAAA,CACrC;AAAA,EACH,GAAG,CAACqE,GAAcJ,CAAgB,CAAC,GAEnCjG,GAAmB;AAAA,IACjB,YAAY;AAAA,IACZ,UAAUvB;AAAA,EAAA,CACX,GAEIoB,IAGH,gBAAAzC;AAAA,IAAC8J;AAAA,IAAA;AAAA,MACC,SAAS;AAAA,QACP;AAAA,UACE,OAAOT,EAAc;AAAA,UACrB,UAAU;AAAA,UACV,SAAS,MAAM;AACb,YAAAG,EAAkB,EAAI,GACtB9C,EAAQqD,GAAiB,wBAAwB;AAAA,UACnD;AAAA,QAAA;AAAA,MACF;AAAA,MAEF,qBAAqB;AAAA,QACnBC,EAAY;AAAA,QACZA,EAAY;AAAA,QACZA,EAAY;AAAA,QACZA,EAAY;AAAA,QACZA,EAAY;AAAA,MAAA;AAAA,MAEd,iBAAiB;AAAA,QACf,mBAAmBlB;AAAA,QACnB,uBAAuBC;AAAA,QACvB,qBAAqB;AAAA,QACrB,gBAAgB,MAAM;AAAA,QAAC;AAAA,MAAA;AAAA,MAEzB,WAAA9E;AAAA,MACA,kBAAiB;AAAA,MACjB,YAAY;AAAA,MACZ,uBAAuB,MAAMyC,EAAQqD,GAAiB,sBAAsB;AAAA,MAC5E,aAAApB;AAAA,MACA,aAAAC;AAAA,MACA,IAAArG;AAAA,MACA,OAAOzC,EAAW;AAAA,MAElB,UAAA;AAAA,QAAA,gBAAAI,EAAC2H,IAAA,EAAgB;AAAA,0BAEhBrB,IAAA,EAAgB;AAAA,QAEjB,gBAAAtG;AAAA,UAACqI;AAAA,UAAA;AAAA,YACC,gBAAgBzI,EAAW;AAAA,YAC3B,QAAQyJ;AAAA,YACR,SAAS,MAAMC,EAAkB,EAAK;AAAA,YACtC,yBAAyB;AAAA,YACzB,OAAOH,EAAc;AAAA,YAErB,UAAA,gBAAAnJ,EAAC+J,IAAA,EAAkB,oBAAoBX,IAAqB,IAAI,EAAA,CAAG;AAAA,UAAA;AAAA,QAAA;AAAA,MACrE;AAAA,IAAA;AAAA,EAAA,IAhDuB,gBAAApJ,EAACgC,GAAA,CAAA,CAAO;AAmDrC,GAEAgI,KAAe3J,EAASmI,EAAc,GC1GhCyB,KAAkC,CAAC,EAAE,gBAAAC,QAAqB;AAC9D,QAAM,EAAE,oBAAAC,EAAA,IAAuB1K,GAAA,GACzB,EAAE,UAAUG,EAAA,IAAeC,EAAA,GAE3BU,IAAQC,GAAA;AAEd,2BACGkB,GAAA,EACC,UAAA;AAAA,IAAA,gBAAA1B,EAACoK,MAAG,IAAI,IAAI,SAAQ,MACjB,YAAW,eACd;AAAA,IACA,gBAAApK,EAACqK,IAAA,EAAG,OAAO9J,EAAM,QAAQ,QAAQ,OAAO,IAAI,GACzC,UAAAX,EAAW,kBAAA,CACd;AAAA,IACA,gBAAAI,EAAC2B,GAAA,EAAE,IAAI,IAAK,YAAW,qBAAoB;AAAA,sBAC1CD,GAAA,EAAM,WAAU,UAAS,IAAI,IAAI,SAAS,IACzC,UAAA;AAAA,MAAA,gBAAA5B,EAAC6B,GAAA,EAAE,IAAI,EAAE,SAAS,QAAQ,YAAY,UAAU,UAAU,GAAA,GACxD,UAAA;AAAA,QAAA,gBAAA3B;AAAA,UAACC;AAAA,UAAA;AAAA,YACC,SAASM,EAAM,QAAQ,QAAQ;AAAA,YAC/B,cAAc;AAAA,YACd,WAAU;AAAA,YACV,QAAQ;AAAA,YACR,IAAI;AAAA,YACJ,IAAI,EAAE,SAAS,QAAQ,YAAY,UAAU,gBAAgB,UAAU,YAAY,EAAA;AAAA,YACnF,OAAO;AAAA,YAEP,UAAA,gBAAAP,EAAC6B,GAAA,EAAK,OAAM,WAAU,MAAK,oBAAA,CAAoB;AAAA,UAAA;AAAA,QAAA;AAAA,QAEhDjC,EAAW;AAAA,MAAA,GACd;AAAA,MACA,gBAAAE,EAAC6B,GAAA,EAAE,IAAI,EAAE,SAAS,QAAQ,YAAY,UAAU,UAAU,GAAA,GACxD,UAAA;AAAA,QAAA,gBAAA3B;AAAA,UAACC;AAAA,UAAA;AAAA,YACC,SAASM,EAAM,QAAQ,QAAQ;AAAA,YAC/B,cAAc;AAAA,YACd,WAAU;AAAA,YACV,QAAQ;AAAA,YACR,IAAI;AAAA,YACJ,IAAI,EAAE,SAAS,QAAQ,YAAY,UAAU,gBAAgB,UAAU,YAAY,EAAA;AAAA,YACnF,OAAO;AAAA,YAEP,UAAA,gBAAAP,EAAC6B,GAAA,EAAK,OAAM,WAAU,MAAK,aAAA,CAAa;AAAA,UAAA;AAAA,QAAA;AAAA,QAEzCjC,EAAW;AAAA,MAAA,GACd;AAAA,MACA,gBAAAE,EAAC6B,GAAA,EAAE,IAAI,EAAE,SAAS,QAAQ,YAAY,UAAU,UAAU,GAAA,GACxD,UAAA;AAAA,QAAA,gBAAA3B;AAAA,UAACC;AAAA,UAAA;AAAA,YACC,SAASM,EAAM,QAAQ,QAAQ;AAAA,YAC/B,cAAc;AAAA,YACd,WAAU;AAAA,YACV,QAAQ;AAAA,YACR,IAAI;AAAA,YACJ,IAAI,EAAE,SAAS,QAAQ,YAAY,UAAU,gBAAgB,UAAU,YAAY,EAAA;AAAA,YACnF,OAAO;AAAA,YAEP,UAAA,gBAAAP,EAAC6B,GAAA,EAAK,OAAM,WAAU,MAAK,QAAA,CAAQ;AAAA,UAAA;AAAA,QAAA;AAAA,QAEpCjC,EAAW;AAAA,MAAA,EAAA,CACd;AAAA,IAAA,GACF;AAAA,IACA,gBAAAE,EAAC4B,GAAA,EAAM,WAAU,OAAM,SAAS,IAC9B,UAAA;AAAA,MAAA,gBAAA1B,EAACoI,KAAO,SAAS8B,GAAgB,SAAQ,aACtC,YAAW,oBACd;AAAA,wBACC9B,GAAA,EAAO,SAAS+B,GAAoB,SAAQ,YAC1C,YAAW,YAAA,CACd;AAAA,IAAA,EAAA,CACF;AAAA,EAAA,GACF;AAEJ,GAEAG,KAAejK,EAAS4J,EAAO,GCtFzBM,KAAa,kEAENC,KAAkB;AAAA,EAC7B,qBAAqB,GAAGD,EAAU;AAAA,EAClC,4BAA4B,GAAGA,EAAU;AAC3C,GCGME,KAAoB,MAAM;AAC9B,QAAM,EAAE,UAAU7K,EAAA,IAAeC,EAAA;AAEjC,SACE,gBAAAC,EAACP,EAAM,UAAN,EACC,UAAA;AAAA,IAAA,gBAAAS,EAAC,OAAA,EACC,4BAAC,OAAA,EAAI,KAAI,WAAU,KAAKwK,GAAgB,4BAA4B,EAAA,CACtE;AAAA,sBACCJ,IAAA,EAAG,IAAI,IAAI,SAAQ,MACjB,YAAW,eACd;AAAA,IACA,gBAAApK,EAAC2B,GAAA,EAAG,UAAA/B,EAAW,oBAAA,CAAoB;AAAA,EAAA,GACrC;AAEJ,GAEA8K,KAAerK,EAASoK,EAAO,GC4BzBE,KAAOC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GASPC,KAA+B,MAAM;AACzC,QAAM,EAAE,yBAAAC,GAAyB,uBAAAC,EAAA,IAA0B3J,EAAA,GACrD,EAAE,UAAUxB,GAAY,QAAQoL,EAAA,IAAenL,EAAA,GAC/C,EAAE,MAAAoL,EAAA,IAASC,GAAA,GACX,EAAE,oBAAAf,EAAA,IAAuB1K,GAAA,GACzB,EAAE,SAAA0L,EAAA,IAAY7L,EAAA,GACd,EAAE,UAAAqB,EAAA,IAAaC,GAAA,GACf,EAAE,cAAAwK,GAAc,kBAAAC,EAAA,IAAqBvK,EAAA,GACrC,EAAE,QAAAwK,GAAQ,WAAArC,GAAW,cAAAsC,EAAA,IAAiBrC,GAAA,GACtC3I,IAAQC,GAAA,GAER,CAACgL,GAAWC,CAAY,IAAIC,EAAS,EAAI,GACzC,CAACC,GAAWC,CAAY,IAAIrM,EAAM,SAASsM,GAAU,UAAU,GAC/D,CAACC,GAAUC,CAAW,IAAIxM,EAAM,SAAS,CAAC,GAC1C,CAACyM,GAAWC,CAAY,IAAI1M,EAAM,SAAS,EAAE,GAC7C,CAAC2M,IAAcC,CAAe,IAAIT,EAAS,EAAK,GAEhD,CAACU,IAAMC,EAAO,IAAIX,EAAS,CAAC,GAC5B,CAACY,GAAsBC,EAAuB,IAAIb,EAAsC,CAAA,CAAE,GAC1F,CAACc,IAAiBC,EAAkB,IAAIf,EAAS,EAAE,GAEnDgB,IAAcnN,EAAM;AAAA,IACxB,MAAMgM,EAAa,KAAK,CAACoB,MAAMA,EAAE,SAASH,EAAe;AAAA,IACzD,CAACA,IAAiBjB,CAAY;AAAA,EAAA,GAG1BqB,KAAY,CAAC,CAAC7B,EAAsB;AAAA,IACxC,CAAC/G,MAAMA,EAAE,+BAA+B6I,GAAc;AAAA,EAAA,EACtD,QAEIC,KAAwB,YAAY;AACxC,IAAAT,GAAQ,CAAC,GAEThB;AAAA;AAAA,MAEE0B,GAAatD,GAAQC,GAAA,GAAgB,EAAE,CAAC;AAAA,MACxCA,GAAA;AAAA,IAAa,GAGfT,EAAU,EAAE,GAAGqC,GAAQ,QAAQ0B,IAAc,GAE7CX,GAAQ,CAAC;AAAA,EACX,GAEMY,KAAkB,YAAY;AAClC,QAAI,EAAAX,EAAqB,SAAS,IAGlC;AAAA,MAAAH,EAAgB,EAAI;AAGpB,eAASe,IAAI,GAAGA,IAAIZ,EAAqB,QAAQY,KAAK;AACpD,cAAMC,IAAsBb,EAAqBY,CAAC,GAE5CE,KAAWC,GAAmB1B,GAAW2B,GAAaH,EAAoB,IAAI,CAAC,GAE/EI,KAAuB;AAAA,UAC3B,cAAcJ,EAAoB;AAAA,UAClC,QAAQA,EAAoB;AAAA,UAC5B,YAAY;AAAA;AAAA,UACZ,eAAeA,EAAoB;AAAA,UACnC,aAAaA,EAAoB,oBAAoBA,EAAoB;AAAA,UACzE,qBAAqBK,GAAUJ,IAAU,EAAE,gBAAgB,QAAQ;AAAA,UACnE,gBAAgBA,GAAS,OAAA;AAAA,UACzB,iBAAiBzB;AAAA,UACjB,4BAA4BkB,GAAc;AAAA,UAC1C,uBAAuBb;AAAA,UACvB,kBAAkBmB,EAAoB;AAAA,UACtC,WAAWlC,EAAK;AAAA,QAAA;AAGlB,cAAMH,EAAwByC,IAAsBJ,CAAmB;AAAA,MACzE;AACA,YAAMhD,EAAA;AAAA;AAAA,EACR,GAEMsD,KACH,CAACf,KAAelB,KAAe,CAACkB,KAAeJ,EAAqB,SAAS;AAEhF,SAAKlB,IAKH,gBAAAtL;AAAA,IAACG;AAAA,IAAA;AAAA,MACC,IAAI;AAAA,QACF,SAAS;AAAA,QACT,YAAaU,IAAsB,eAAX;AAAA,QACxB,iBAAiBJ,EAAM,QAAQ,WAAW;AAAA,QAC1C,iBAAkBI,IAA2D,OAAhD,OAAO6J,GAAgB,mBAAmB;AAAA,QACvE,kBAAkB;AAAA,QAClB,oBAAoB;AAAA,QACpB,gBAAgB;AAAA,QAChB,IAAI;AAAA,MAAA;AAAA,MAGL,UAAA;AAAA,QAAA4B,OAAS,KACR,gBAAApM;AAAA,UAACC;AAAA,UAAA;AAAA,YACC,IAAI;AAAA,cACF,GAAIU,IACA,EAAE,SAAS,QAAQ,eAAe,UAAU,UAAU,QAAQ,SAAS,SAAA,IACvE,EAAE,UAAU,KAAK,IAAI,OAAO,IAAI,GAAA;AAAA,YAAG;AAAA,YAGzC,UAAA,gBAAAX,EAACiK,IAAA,EAAQ,gBAAgB6C,GAAA,CAAuB;AAAA,UAAA;AAAA,QAAA;AAAA,QAGnDV,OAAS,KACR,gBAAApM;AAAA,UAACC;AAAA,UAAA;AAAA,YACC,IAAI;AAAA,cACF,GAAIU,IACA,EAAE,SAAS,QAAQ,eAAe,UAAU,UAAU,QAAQ,SAAS,SAAA,IACvE,EAAE,UAAU,KAAK,IAAI,OAAO,IAAI,GAAA;AAAA,YAAG;AAAA,YAGzC,4BAAC8J,IAAA,CAAA,CAAQ;AAAA,UAAA;AAAA,QAAA;AAAA,QAGZ2B,OAAS,KACR,gBAAAtM;AAAA,UAACG;AAAA,UAAA;AAAA,YACC,IAAI;AAAA,cACF,GAAIU,IACA,EAAE,SAAS,QAAQ,eAAe,UAAU,UAAU,QAAQ,SAAS,SAAA,IACvE,EAAE,UAAU,KAAK,IAAI,OAAO,IAAI,GAAA;AAAA,YAAG;AAAA,YAGzC,UAAA;AAAA,cAAA,gBAAAX,EAACoK,MAAG,IAAI,IAAI,SAAQ,MACjB,YAAW,kBACd;AAAA,cACA,gBAAApK,EAAC2B,GAAA,EAAE,IAAI,IAAK,YAAW,wBAAuB;AAAA,cAE7C2K,EAAqB,SAAS,KAAK,CAACI,KACnC,gBAAA5M,EAAAC,GAAA,EACE,UAAA;AAAA,gBAAA,gBAAAC,EAACkF,GAAA,EACE,UAAAoH,EAAqB,IAAI,CAACI,GAAagB,MAEpC,gBAAA5N,EAACP,EAAM,UAAN,EACC,UAAA;AAAA,kBAAA,gBAAAS,EAAC2N,IAAA,EAAa,SAAQ,oBACnB,UAAAC;AAAA,oBACChJ,GAAY8H,EAAY,YAAYA,EAAY,IAAI;AAAA,kBAAA,GAExD;AAAA,kBACA,gBAAA1M,EAAC6N,IAAA,EAAe,aAAanB,EAAAA,CAAa;AAAA,kBACzCgB,MAAUpB,EAAqB,SAAS,uBAAMvK,GAAA,CAAA,CAAQ;AAAA,gBAAA,EAAA,GAPpC2K,EAAY,IAQjC,CAEH,EAAA,CACH;AAAA,gBACA,gBAAA5M,EAAC4B,GAAA,EAAM,YAAW,UAAS,WAAU,OACnC,UAAA;AAAA,kBAAA,gBAAA1B,EAAC+B,GAAA,EAAQ,IAAI,EAAE,UAAU,KAAK;AAAA,kBAC9B,gBAAA/B;AAAA,oBAACoI;AAAA,oBAAA;AAAA,sBACC,SAAS,MAAMqD,EAAa,EAAI;AAAA,sBAChC,WAAW,gBAAAzL,EAAC6B,GAAA,EAAK,MAAK,OAAM,MAAM,IAAI;AAAA,sBAErC,UAAAjC,EAAW;AAAA,oBAAA;AAAA,kBAAA;AAAA,gBACd,EAAA,CACF;AAAA,cAAA,GACF;AAAA,cAGD6N,MACC,gBAAAzN;AAAA,gBAAC8N;AAAA,gBAAA;AAAA,kBACC,SAAQ;AAAA,kBACR,UAAU,CAACC,MACT9E,EAAU;AAAA,oBACR,GAAGqC;AAAA,oBACH,QAAQ,CAACoB,MACPqB,IACIC,GAAmBtB,GAAaqB,CAAW,IAC3Cf,GAAaN,CAAW;AAAA,kBAAA,CAC/B;AAAA,kBAEH,YAAY,CAACuB,MAAS;AACpB,oBAAAxB,GAAmBwB,CAAI,GACvBxC,EAAa,EAAK;AAAA,kBACpB;AAAA,gBAAA;AAAA,cAAA;AAAA,cAIH,CAACmB,MAAazB,KACb,gBAAAnL,EAAC2B,GAAA,EAAE,OAAM,SAAQ,IAAI,IAClB,UAAA/B,EAAW,cAAA,CACd;AAAA,cAGD8M,KACC,gBAAA5M,EAAAC,GAAA,EACE,UAAA;AAAA,gBAAA,gBAAAC;AAAA,kBAACkO;AAAA,kBAAA;AAAA,oBACC,SAAQ;AAAA,oBACR,UAAApC;AAAA,oBACA,WAAAH;AAAA,oBACA,kBAAkBI;AAAA,oBAClB,mBAAmBH;AAAA,oBACnB,mBAAmBK;AAAA,oBACnB,WAAAD;AAAA,oBACA,aAAAU;AAAA,kBAAA;AAAA,gBAAA;AAAA,gBAEF,gBAAA5M,EAAC4B,KAAM,WAAU,OAAM,KAAK,IAAI,IAAI,IAAI,IAAI,IAC1C,UAAA;AAAA,kBAAA,gBAAA1B;AAAA,oBAACoI;AAAA,oBAAA;AAAA,sBACC,iBAAe,CAACsE;AAAA,sBAChB,SAAS,MAAM;AACb,8BAAMyB,IAAsB,CAAC,GAAG7B,CAAoB;AACpD,wBAAA6B,EAAoB,KAAK;AAAA,0BACvB,GAAGzB;AAAA,0BACH,UAAUW,GAAmB1B,GAAW2B,GAAaZ,EAAY,IAAI,CAAC;AAAA,0BACtE,WAAAf;AAAA,wBAAA,CACD,GAEDY,GAAwB4B,CAAmB,GAC3C1B,GAAmB,EAAE;AAAA,sBACvB;AAAA,sBACA,SAAQ;AAAA,sBAEP,UAAAzB,EAAW;AAAA,oBAAA;AAAA,kBAAA;AAAA,kBAEd,gBAAAhL;AAAA,oBAACoI;AAAA,oBAAA;AAAA,sBACC,SAAS,MAAM;AACb,wBAAAqE,GAAmB,EAAE,GACrBhB,EAAa,EAAI,GACjBqB,GAAA,EAAwB,QAAA;AAAA,sBAC1B;AAAA,sBACA,SAAQ;AAAA,sBAEP,UAAA9B,EAAW;AAAA,oBAAA;AAAA,kBAAA;AAAA,gBACd,EAAA,CACF;AAAA,cAAA,GACF;AAAA,cAGDsB,EAAqB,SAAS,KAAK,CAACI,KACnC,gBAAA5M,EAAC4B,GAAA,EAAM,WAAU,OAAM,KAAK,IAAI,IAAI,IAAI,IAAI,IAC1C,UAAA;AAAA,gBAAA,gBAAA1B;AAAA,kBAACoI;AAAA,kBAAA;AAAA,oBACC,iBAAekE,EAAqB,SAAS,KAAKJ;AAAA,oBAClD,SAASe;AAAA,oBACT,WACEf,KACE,gBAAAlM;AAAA,sBAAC6B;AAAA,sBAAA;AAAA,wBACC,MAAK;AAAA,wBACL,IAAI;AAAA,0BACF,WAAW,GAAG8I,EAAI;AAAA,wBAAA;AAAA,sBACpB;AAAA,oBAAA,IAEA;AAAA,oBAEN,SAAQ;AAAA,oBAEP,UAAA/K,EAAW;AAAA,kBAAA;AAAA,gBAAA;AAAA,kCAEbwI,GAAA,EAAO,SAAS+B,GAAoB,SAAQ,YAC1C,YAAW,YAAA,CACd;AAAA,cAAA,EAAA,CACF;AAAA,YAAA;AAAA,UAAA;AAAA,QAAA;AAAA,MAEJ;AAAA,IAAA;AAAA,EAAA,sBA7KInI,GAAA,EAAO;AAiLnB,GAEAoM,KAAe/N,EAASwK,EAAkB;"}
|
|
@@ -14,6 +14,11 @@ export type CalendarActions = {
|
|
|
14
14
|
shouldDisablePrevious?: boolean;
|
|
15
15
|
shouldDisablePicker?: boolean;
|
|
16
16
|
onRangeChanged: (dateRange: DateRange<Date>) => void;
|
|
17
|
+
/**
|
|
18
|
+
* Fires only when the user actively selects a timeframe button/tab (3M/6M/9M/1Y).
|
|
19
|
+
* Unlike onRangeChanged, this does NOT fire on mount, so it's safe for click analytics.
|
|
20
|
+
*/
|
|
21
|
+
onTimeframeClick?: (timeframe: number) => void;
|
|
17
22
|
};
|
|
18
23
|
export interface DateRangeSelectorProps {
|
|
19
24
|
calendarActions: CalendarActions;
|
package/dist/common/index.es.js
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
|
-
import { l as Y } from "../UserStore-
|
|
1
|
+
import { l as Y } from "../UserStore-BjnNCO5a.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";
|
|
5
5
|
import { C as ar } from "../CurrencyInput-DaGEQaLW.mjs";
|
|
6
6
|
import { D as nr, S as ir } from "../Select-CSpkK5cR.mjs";
|
|
7
|
-
import { D as lr, W as mr, u as dr } from "../WidgetContainer-
|
|
7
|
+
import { D as lr, W as mr, u as dr } from "../WidgetContainer-CjdCY4sj.mjs";
|
|
8
8
|
import { D as fr } from "../Dialog-Bvd2n8hz.mjs";
|
|
9
9
|
import { D as yr } from "../Donut-SzzfZDHF.mjs";
|
|
10
10
|
import { D as xr } from "../Drawer-DsnW2o0v.mjs";
|
|
@@ -22,7 +22,7 @@ import { R as wr } from "../ResponsiveButton-CC9F_Ezk.mjs";
|
|
|
22
22
|
import { S as Lr } from "../SelectionBox-B4xELRgp.mjs";
|
|
23
23
|
import { S as Ur } from "../StatusBar-CPfSXe80.mjs";
|
|
24
24
|
import { I as Br, P as Rr, S as qr, T as Yr } from "../TabContentContainer-B0eYJP5p.mjs";
|
|
25
|
-
import { A as $r } from "../Analytics-
|
|
25
|
+
import { A as $r } from "../Analytics-D-jdcL72.mjs";
|
|
26
26
|
import { C as Qr } from "../ConnectCard-D7uxoH5Y.mjs";
|
|
27
27
|
import { C as Vr } from "../ConnectDrawer-CW4LA3H3.mjs";
|
|
28
28
|
import { C as Zr } from "../CurrencyText-CCbE6MmF.mjs";
|
package/dist/core/index.es.js
CHANGED
|
@@ -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-
|
|
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-BjnNCO5a.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-wcnDUzMV.mjs";
|
|
@@ -7,19 +7,20 @@ export declare class CashflowStore {
|
|
|
7
7
|
completeOnboarding: () => Promise<void>;
|
|
8
8
|
}
|
|
9
9
|
declare class UiStore {
|
|
10
|
+
globalStore: GlobalStore;
|
|
10
11
|
dateRange: {
|
|
11
12
|
start: Date;
|
|
12
13
|
end: Date;
|
|
13
14
|
};
|
|
14
15
|
isDirty: boolean;
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
16
|
+
constructor(globalStore: GlobalStore);
|
|
17
|
+
get income(): Recurrence[];
|
|
18
|
+
get upcomingIncome(): Recurrence[];
|
|
19
|
+
get upcomingExpenses(): Recurrence[];
|
|
20
|
+
get nextIncome(): Recurrence | undefined;
|
|
21
|
+
get selectedCashAccounts(): Account[];
|
|
22
|
+
get selectedCashBalance(): number;
|
|
19
23
|
get daysUntilNextIncome(): number;
|
|
20
24
|
get expensesTilNextIncome(): Recurrence[];
|
|
21
|
-
setNextIncome: (nextIncome: Recurrence) => void;
|
|
22
|
-
setUpcomingExpenses: (expenses: Recurrence[]) => void;
|
|
23
|
-
setSelectedCashAccounts: (accounts: Account[]) => Account[];
|
|
24
25
|
}
|
|
25
26
|
export {};
|
|
@@ -19,6 +19,30 @@ export declare class RecurringTransactionsStore {
|
|
|
19
19
|
constructor(globalStore: GlobalStore);
|
|
20
20
|
get copy(): RecurringCopy;
|
|
21
21
|
get detailedRepeatingTransactions(): RepeatingTransaction[];
|
|
22
|
+
/**
|
|
23
|
+
* Returns all recurrences built from repeating transactions and filtered by
|
|
24
|
+
* accounts, scoped to the supplied date range. This is the range-parameterized
|
|
25
|
+
* core used by both the shared getters (which pass this.dateRange) and by
|
|
26
|
+
* consumers such as Cash Flow that need their own independent window without
|
|
27
|
+
* mutating the shared dateRange.
|
|
28
|
+
*/
|
|
29
|
+
recurrencesForRange: (dateRange: DateRange) => Recurrence[];
|
|
30
|
+
/**
|
|
31
|
+
* Returns the upcoming expense recurrences scoped to the supplied date range.
|
|
32
|
+
*/
|
|
33
|
+
upcomingExpensesForRange: (dateRange: DateRange) => Recurrence[];
|
|
34
|
+
/**
|
|
35
|
+
* Returns the income recurrences scoped to the supplied date range.
|
|
36
|
+
*/
|
|
37
|
+
incomeForRange: (dateRange: DateRange) => Recurrence[];
|
|
38
|
+
/**
|
|
39
|
+
* Returns the upcoming income recurrences scoped to the supplied date range.
|
|
40
|
+
*/
|
|
41
|
+
upcomingIncomeForRange: (dateRange: DateRange) => Recurrence[];
|
|
42
|
+
/**
|
|
43
|
+
* Returns the next upcoming income recurrence scoped to the supplied range.
|
|
44
|
+
*/
|
|
45
|
+
nextIncomeForRange: (dateRange: DateRange) => Recurrence | undefined;
|
|
22
46
|
/**
|
|
23
47
|
* Returns all recurrences built from repeating transactions and filtered by accounts.
|
|
24
48
|
*/
|
|
@@ -1,5 +1,13 @@
|
|
|
1
1
|
import { Account, DetailedAccount, Institution, Member } from '../';
|
|
2
2
|
export declare const isAccountLiability: (account: Account) => boolean;
|
|
3
|
+
/**
|
|
4
|
+
* Returns the balance to use as an account's spendable / starting balance.
|
|
5
|
+
* For checking/savings accounts it uses available_balance when present and
|
|
6
|
+
* enabled via config, otherwise the current balance. All other account types
|
|
7
|
+
* use the current balance. Single source of truth shared by the Accounts,
|
|
8
|
+
* Financial Strength, and Cash Flow experiences.
|
|
9
|
+
*/
|
|
10
|
+
export declare const getAccountStartingBalance: (account: Account, showAvailableBalance: boolean) => number;
|
|
3
11
|
export declare const isManual: (account: Account) => boolean;
|
|
4
12
|
export declare const usesCreditLimitField: (account: Account) => boolean;
|
|
5
13
|
export declare const usesInterestRateField: (account: Account) => boolean;
|