@mx-cartographer/experiences 9.2.1 → 9.2.3
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 +8 -0
- package/dist/ManageIncome-Czs7daKV.mjs.map +1 -1
- package/dist/{UserStore-BBceqFxh.mjs → UserStore-Cp-2Jtnw.mjs} +49 -50
- package/dist/UserStore-Cp-2Jtnw.mjs.map +1 -0
- package/dist/{WidgetContainer-CjdCY4sj.mjs → WidgetContainer-CoHQ75sR.mjs} +26 -22
- package/dist/WidgetContainer-CoHQ75sR.mjs.map +1 -0
- package/dist/accounts/index.es.js +1 -1
- package/dist/budgets/index.es.js +1 -1
- package/dist/cashflow/index.es.js +333 -311
- package/dist/cashflow/index.es.js.map +1 -1
- package/dist/common/index.es.js +2 -2
- package/dist/core/index.es.js +1 -1
- package/dist/core/stores/RecurringTransactionsStore.d.ts +3 -3
- package/dist/core/types/localization/RecurringCopy.d.ts +6 -0
- package/dist/debts/index.es.js +1 -1
- package/dist/finstrong/index.es.js +1 -1
- package/dist/goals/index.es.js +1 -1
- package/dist/help/index.es.js +1 -1
- package/dist/investments/index.es.js +1 -1
- package/dist/networth/index.es.js +1 -1
- package/dist/recurringtransactions/index.es.js +121 -111
- package/dist/recurringtransactions/index.es.js.map +1 -1
- package/dist/settings/index.es.js +1 -1
- package/dist/spending/index.es.js +1 -1
- package/dist/transactions/index.es.js +1 -1
- package/dist/trends/index.es.js +1 -1
- package/package.json +1 -1
- package/dist/UserStore-BBceqFxh.mjs.map +0 -1
- package/dist/WidgetContainer-CjdCY4sj.mjs.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.es.js","sources":["../../src/recurringtransactions/components/RecurrenceBadges.tsx","../../src/recurringtransactions/components/recurrencecalendar/RecurrenceDay.tsx","../../src/recurringtransactions/components/recurrencecalendar/Legend.tsx","../../src/recurringtransactions/components/recurrencecalendar/RecurrenceCalendar.tsx","../../src/recurringtransactions/components/RecurrenceRow.tsx","../../src/recurringtransactions/components/RecurrenceList.tsx","../../src/recurringtransactions/components/RecurringStatus.tsx","../../src/recurringtransactions/components/RecurringTransactionDetailsDrawer.tsx","../../src/recurringtransactions/components/RecurringTransactions.tsx","../../src/recurringtransactions/RecurringTransactionsWidget.tsx","../../src/recurringtransactions/components/MiniWidgetContent.tsx","../../src/recurringtransactions/RecurringTransactionsMiniWidget.tsx","../../src/recurringtransactions/ZeroStateMicroWidget.tsx","../../src/recurringtransactions/components/micro/RecurrenceLegend.tsx","../../src/recurringtransactions/components/micro/OverlappingMerchantLogos.tsx","../../src/recurringtransactions/components/micro/MerchantLogosRow.tsx","../../src/recurringtransactions/components/MicroWidgetContent.tsx","../../src/recurringtransactions/RecurringTransactionsMicroWidget.tsx","../../src/recurringtransactions/components/RecurringSettingsDrawer.tsx"],"sourcesContent":["import { Schedule } from '@mxenabled/mx-icons'\nimport { MonetizationOn } from '@mxenabled/mx-icons'\nimport { Cancel } from '@mxenabled/mx-icons'\nimport { CheckCircle } from '@mxenabled/mx-icons'\n\nimport IconBacking from '../../common/components/IconBacking'\n\nconst iconStyle = {\n gridRow: 1,\n gridColumn: 1,\n zIndex: 2,\n}\n\nconst offsetStyle = (isOffset: boolean) => {\n return isOffset ? { margin: '0 0 -6px -4px' } : undefined\n}\n\nexport const UpcomingExpenseBadge = ({ isOffset = false, size = 16 }) => (\n <IconBacking\n backingSx={{ backgroundColor: 'background.paper' }}\n size={size}\n sx={{ ...offsetStyle(isOffset) }}\n >\n <Schedule color=\"primary\" filled={true} sx={{ fontSize: size, ...iconStyle }} />\n </IconBacking>\n)\n\nexport const IncomeBadge = ({ isOffset = false, size = 16 }) => (\n <IconBacking\n backingSx={{ backgroundColor: 'background.paper' }}\n size={size}\n sx={{ ...offsetStyle(isOffset) }}\n >\n <MonetizationOn\n filled={true}\n sx={{ color: 'categories.income', fontSize: size, ...iconStyle }}\n />\n </IconBacking>\n)\n\nexport const MissedBadge = ({ isOffset = false, size = 16 }) => (\n <IconBacking\n backingSx={{ backgroundColor: 'background.paper' }}\n size={size}\n sx={{ ...offsetStyle(isOffset) }}\n >\n <Cancel color=\"error\" filled={true} sx={{ fontSize: size, ...iconStyle }} />\n </IconBacking>\n)\n\nexport const PaidBadge = ({ isOffset = false, size = 16 }) => (\n <IconBacking\n backingSx={{ backgroundColor: 'background.paper' }}\n size={size}\n sx={{ ...offsetStyle(isOffset) }}\n >\n <CheckCircle color=\"success\" filled={true} sx={{ fontSize: size, ...iconStyle }} />\n </IconBacking>\n)\n","import React from 'react'\nimport { observer } from 'mobx-react-lite'\nimport { isSameDay } from 'date-fns/isSameDay'\n\nimport Badge from '@mui/material/Badge'\nimport { PickersDay, PickersDayProps } from '@mui/x-date-pickers/PickersDay'\n\nimport {\n useGlobalCopyStore,\n useGlobalUiStore,\n useRecurringTransactionsStore,\n} from '../../../common'\nimport { DATE_FORMATS_INTL, formatDate } from '../../../core/constants'\nimport { RecurrenceStatus, RecurrenceType } from '../../../core'\n\nimport { IncomeBadge, MissedBadge, PaidBadge, UpcomingExpenseBadge } from '../RecurrenceBadges'\n\nexport const RecurrenceDay = observer(\n ({ day, outsideCurrentMonth, ...other }: PickersDayProps<Date>) => {\n const { recurring: copy } = useGlobalCopyStore()\n const { selectedAccountGuids } = useGlobalUiStore()\n const { recurrences, setSelectedDay } = useRecurringTransactionsStore()\n\n const filteredRecurrences = React.useMemo(\n () =>\n recurrences.filter((recurrence) => selectedAccountGuids.includes(recurrence.accountGuid)),\n [selectedAccountGuids, recurrences],\n )\n\n const dayRecurrences = filteredRecurrences.filter((a) =>\n isSameDay(a.occurredOnDate || a.expectedDate, day),\n )\n const hasUpcoming = dayRecurrences.some(\n (a) => a.type !== RecurrenceType.Income && a.status === RecurrenceStatus.Upcoming,\n )\n const hasMissed = dayRecurrences.some(\n (a) => a.type !== RecurrenceType.Income && a.status === RecurrenceStatus.Missed,\n )\n const hasPaid = dayRecurrences.some(\n (a) => a.type !== RecurrenceType.Income && a.status === RecurrenceStatus.Paid,\n )\n const hasIncome = dayRecurrences.some((a) => a.type === RecurrenceType.Income)\n\n const totalBadges =\n (hasUpcoming ? 1 : 0) + (hasMissed ? 1 : 0) + (hasPaid ? 1 : 0) + (hasIncome ? 1 : 0)\n\n const statusParts = [\n hasPaid && copy.paid,\n hasMissed && copy.missed,\n hasUpcoming && copy.upcoming,\n hasIncome && copy.income,\n ].filter(Boolean) as string[]\n\n const ariaLabel =\n statusParts.length > 0\n ? `${formatDate(day, DATE_FORMATS_INTL.MONTH_DAY_YEAR)}, ${statusParts.join(', ')}`\n : formatDate(day, DATE_FORMATS_INTL.MONTH_DAY_YEAR)\n\n return (\n <Badge\n badgeContent={\n dayRecurrences.length > 0 && (\n <>\n {hasMissed && <MissedBadge isOffset={true} />}\n {hasPaid && <PaidBadge isOffset={true} />}\n {hasUpcoming && <UpcomingExpenseBadge isOffset={true} />}\n {hasIncome && <IncomeBadge isOffset={true} />}\n </>\n )\n }\n overlap=\"circular\"\n sx={{\n '& .MuiBadge-badge': {\n padding: 0,\n marginRight: `${(totalBadges - 1) * 6 + 1}px`,\n flexWrap: 'nowrap',\n },\n }}\n >\n <PickersDay\n aria-label={ariaLabel}\n day={day}\n onClick={() => setSelectedDay(day)}\n outsideCurrentMonth={outsideCurrentMonth}\n sx={{\n '&.MuiPickersDay-root': {\n ...(outsideCurrentMonth && {\n color: 'text.disabled',\n }),\n ...(other.today && {\n color: 'primary.main',\n }),\n },\n }}\n {...other}\n />\n </Badge>\n )\n },\n)\n","import { observer } from 'mobx-react-lite'\n\nimport Stack from '@mui/material/Stack'\n\nimport { Text } from '@mxenabled/mxui'\nimport { IncomeBadge, MissedBadge, PaidBadge, UpcomingExpenseBadge } from '../RecurrenceBadges'\nimport { useGlobalCopyStore } from '../../../common'\n\ninterface SymbolProps {\n icon: any\n label: string\n}\n\nconst Symbol = ({ icon: Icon, label }: SymbolProps) => (\n <Stack alignItems=\"center\" flexDirection=\"row\" sx={{ gap: 6 }}>\n <Icon />\n <Text variant=\"caption\">{label}</Text>\n </Stack>\n)\n\nexport const Legend = observer(() => {\n const { recurring: copy } = useGlobalCopyStore()\n\n return (\n <Stack\n alignItems=\"center\"\n aria-hidden={true}\n flexDirection=\"row\"\n gap={16}\n justifyContent=\"center\"\n mt={12}\n >\n <Symbol icon={UpcomingExpenseBadge} label={copy.expense} />\n <Symbol icon={IncomeBadge} label={copy.income} />\n <Symbol icon={MissedBadge} label={copy.missed} />\n <Symbol icon={PaidBadge} label={copy.paid} />\n </Stack>\n )\n})\n","import React from 'react'\nimport { observer } from 'mobx-react-lite'\nimport { endOfMonth } from 'date-fns/endOfMonth'\nimport { getWeeksInMonth } from 'date-fns/getWeeksInMonth'\nimport { startOfMonth } from 'date-fns/startOfMonth'\nimport { Locale } from 'date-fns'\nimport { enCA } from 'date-fns/locale/en-CA'\nimport { enUS } from 'date-fns/locale/en-US'\nimport { es } from 'date-fns/locale/es'\nimport { fr } from 'date-fns/locale/fr'\nimport { frCA } from 'date-fns/locale/fr-CA'\n\nimport { Text } from '@mxenabled/mxui'\nimport Stack from '@mui/material/Stack'\nimport { useTheme } from '@mui/material/styles'\n\nimport { AdapterDateFns } from '@mui/x-date-pickers/AdapterDateFnsV3'\nimport { DateCalendar } from '@mui/x-date-pickers/DateCalendar'\nimport { LocalizationProvider } from '@mui/x-date-pickers/LocalizationProvider'\n\nimport {\n ANALYTICS_EVENTS,\n TOUCH_TARGET,\n useEvent,\n useRecurringTransactionsStore,\n useGlobalCopyStore,\n} from '../../../common'\nimport { getLocale, LOCALES } from '../../../core'\n\nimport { RecurrenceDay } from './RecurrenceDay'\nimport { Legend } from './Legend'\n\nconst HEADER_HEIGHT = 58\n\nconst getDateFnsLocale = () => {\n const locale = getLocale()\n const localeMap: Record<string, Locale> = {\n [LOCALES.EN_US]: enUS,\n [LOCALES.EN_CA]: enCA,\n [LOCALES.FR]: fr,\n [LOCALES.FR_CA]: frCA,\n [LOCALES.ES]: es,\n }\n return localeMap[locale] || enUS\n}\n\nexport const RecurrenceCalendar = observer(() => {\n const theme = useTheme()\n const { onEvent } = useEvent()\n const { recurring: copy } = useGlobalCopyStore()\n const { selectedDay, setDateRange } = useRecurringTransactionsStore()\n const [calendarHeight, setCalendarHeight] = React.useState(\n getWeeksInMonth(new Date()) * TOUCH_TARGET + HEADER_HEIGHT,\n )\n\n const handleMonthChange = (date: Date) => {\n setCalendarHeight(getWeeksInMonth(date) * TOUCH_TARGET + HEADER_HEIGHT)\n setDateRange({\n start: startOfMonth(date),\n end: endOfMonth(date),\n })\n handleDateChange(date)\n onEvent(ANALYTICS_EVENTS.RECURRING_TRANSACTIONS_CLICK_CALENDAR_RIGHT)\n }\n\n const handleDateChange = (date: Date | null) => {\n if (!date) return\n\n requestAnimationFrame(() => {\n const recurrenceList = document.getElementById('recurrence-list')\n recurrenceList?.setAttribute('tabindex', '-1')\n recurrenceList?.focus()\n })\n }\n\n const calendar = (\n <DateCalendar\n minDate={startOfMonth(new Date())}\n onChange={handleDateChange}\n onMonthChange={handleMonthChange}\n showDaysOutsideCurrentMonth={true}\n slots={{\n day: RecurrenceDay,\n }}\n sx={{\n '& .MuiPickersArrowSwitcher-button': {\n color: 'primary.main',\n '&:disabled': {\n color: 'action.disabled',\n },\n },\n '& .MuiButtonBase-root.MuiPickersDay-root': {\n borderRadius: '4px',\n '&:focus, &:hover': {\n borderRadius: '4px',\n },\n },\n '& .MuiPickersCalendarHeader-root': {\n mt: 0,\n pl: 16,\n pr: 8,\n },\n '& .MuiPickersCalendarHeader-label': {\n fontFamily: theme.typography.body1.fontFamily,\n fontSize: theme.typography.body1.fontSize,\n fontWeight: 600,\n },\n '& .MuiDayCalendar-slideTransition': {\n minHeight: calendarHeight,\n },\n '&.MuiDateCalendar-root': {\n minHeight: calendarHeight + TOUCH_TARGET,\n },\n '& .MuiButtonBase-root, .MuiDayCalendar-weekDayLabel': {\n height: TOUCH_TARGET,\n width: TOUCH_TARGET,\n margin: 0,\n },\n '& .MuiDayCalendar-weekDayLabel': {\n fontFamily: theme.typography.h3.fontFamily,\n fontSize: theme.typography.body2.fontSize,\n },\n '& .MuiPickersDay-dayOutsideMonth': {\n color: 'text.secondary',\n },\n textTransform: 'capitalize',\n }}\n value={selectedDay}\n views={['day']}\n />\n )\n\n return (\n <Stack aria-labelledby=\"calendar-label\" justifyContent=\"center\" role=\"group\">\n <LocalizationProvider adapterLocale={getDateFnsLocale()} dateAdapter={AdapterDateFns}>\n {/*NOTE: This seems odd, but because the DateCalendar cannot go from a controlled\n /* calendar to an un-controlled calendar, we have to create 2 different instances\n /* when there a selectedDay and when selectedDay is undefined */}\n {selectedDay && calendar}\n {!selectedDay && calendar}\n\n <Text id=\"calendar-label\" sx={{ alignSelf: 'center' }} variant=\"body2\">\n {copy.calendar_tooltip}\n </Text>\n <Legend />\n </LocalizationProvider>\n </Stack>\n )\n})\n","import React from 'react'\n\nimport ListItem from '@mui/material/ListItem'\nimport ListItemAvatar from '@mui/material/ListItemAvatar'\nimport ListItemButton from '@mui/material/ListItemButton'\nimport ListItemText from '@mui/material/ListItemText'\nimport Stack from '@mui/material/Stack'\n\nimport { CheckCircle, Cancel } from '@mxenabled/mx-icons'\nimport { InstitutionLogo, MerchantLogo, Text } from '@mxenabled/mxui'\n\nimport { useGlobalCopyStore, useRecurringTransactionsStore } from '../../common'\nimport { DATE_FORMATS_INTL, formatDate } from '../../core/constants'\nimport {\n type Recurrence,\n type RecurringCopy,\n RecurrenceStatus,\n RecurrenceType,\n RepeatingTransaction,\n} from '../../core'\n\nimport { getFrequencyLabel } from '../../core/utils/RecurringTransactionsUtil'\n\nimport { IncomeBadge, MissedBadge, PaidBadge, UpcomingExpenseBadge } from './RecurrenceBadges'\nimport { formatCurrency } from '../../core/utils/NumberFormatting'\nimport { buildDynamicCopy } from '../../core/utils/Localization'\n\nconst getStatusIcon = (recurrence: Recurrence): React.ReactNode => {\n if (recurrence.type === RecurrenceType.Income) {\n return <IncomeBadge />\n }\n\n switch (recurrence.status) {\n case RecurrenceStatus.Missed:\n return <MissedBadge />\n case RecurrenceStatus.Paid:\n return <PaidBadge />\n default:\n return <UpcomingExpenseBadge />\n }\n}\n\nconst getStatus = (recurrence: Recurrence, copy: RecurringCopy): string => {\n switch (recurrence.status) {\n case RecurrenceStatus.Paid:\n return recurrence.expectedDate\n ? (buildDynamicCopy(\n copy.paid_on,\n formatDate(\n recurrence.occurredOnDate || recurrence.expectedDate,\n DATE_FORMATS_INTL.MONTH_DAY,\n ),\n ) as string)\n : copy.paid\n case RecurrenceStatus.Missed:\n return buildDynamicCopy(\n copy.missed_on,\n formatDate(recurrence.expectedDate, DATE_FORMATS_INTL.MONTH_DAY),\n ) as string\n case RecurrenceStatus.Upcoming:\n return buildDynamicCopy(\n copy.upcoming_on,\n formatDate(recurrence.expectedDate, DATE_FORMATS_INTL.MONTH_DAY),\n ) as string\n default:\n return copy.unknown\n }\n}\n\ninterface RecurrenceRowProps {\n recurrence: Recurrence\n isMini?: boolean\n onRecurrenceClick?: (recurrence: Recurrence) => void\n showOrdinal?: boolean\n}\n\nexport const RecurrenceRow = ({\n recurrence,\n isMini = false,\n onRecurrenceClick = () => {},\n showOrdinal = false,\n}: RecurrenceRowProps) => {\n const { recurring: copy } = useGlobalCopyStore()\n const { detailedRepeatingTransactions } = useRecurringTransactionsStore()\n\n const repeatingTransaction = React.useMemo(\n () =>\n detailedRepeatingTransactions.find((rt) => rt.guid === recurrence.repeatingTransactionGuid),\n [recurrence, detailedRepeatingTransactions],\n )\n\n const isCredit = recurrence.type === RecurrenceType.Income\n const isPaid = recurrence.status === RecurrenceStatus.Paid\n const isMissed = recurrence.status === RecurrenceStatus.Missed\n const isUpcoming = recurrence.status === RecurrenceStatus.Upcoming\n\n let statusLabel = copy.paid?.toLowerCase()\n if (isMissed) {\n statusLabel = copy.missed?.toLowerCase()\n } else if (isUpcoming) {\n statusLabel = showOrdinal\n ? getFrequencyLabel(copy, repeatingTransaction || ({} as RepeatingTransaction), true)\n : getFrequencyLabel(copy, repeatingTransaction || ({} as RepeatingTransaction), false)\n }\n\n const onItemClick = () => {\n onRecurrenceClick(recurrence)\n }\n\n return (\n //TODO: implement common/components/ListItemRow.tsx\n <ListItem disableGutters={true} disablePadding={true}>\n <ListItemButton onClick={onItemClick}>\n <ListItemAvatar>\n <MerchantLogo\n categoryGuid={recurrence.categoryGuid}\n merchantGuid={recurrence.merchantGuid}\n />\n </ListItemAvatar>\n <ListItemText>\n <Stack\n direction=\"row\"\n gap={4}\n sx={{ justifyContent: 'space-between', textOverflow: 'ellipsis', textWrap: 'nowrap' }}\n >\n <Stack direction=\"column\" width=\"50%\">\n <Text bold={true} variant=\"body1\">\n {recurrence.name}\n </Text>\n <Stack alignItems=\"center\" direction=\"row\" gap={6}>\n {isMini ? (\n <Stack direction=\"row\" gap={4}>\n {getStatusIcon(recurrence)}\n <Text variant=\"caption\">{getStatus(recurrence, copy)}</Text>\n </Stack>\n ) : (\n <>\n {recurrence.institutionGuid && (\n <InstitutionLogo\n alt=\"\"\n institutionGuid={recurrence.institutionGuid}\n size={12}\n />\n )}\n <Text sx={{ maxWidth: 250 }} variant=\"caption\">\n {recurrence.institutionName}\n </Text>\n </>\n )}\n </Stack>\n </Stack>\n\n <Stack alignItems=\"flex-end\" width=\"100%\">\n <Text bold={true} color={isCredit ? 'success.main' : 'text.primary'} variant=\"body1\">\n {isCredit ? '+' : ''}\n {formatCurrency(recurrence.amount, '0,0.00')}\n </Text>\n {!isMini && (\n <Stack\n direction=\"row\"\n sx={{\n alignItems: 'center',\n gap: 6,\n justifyContent: 'flex-end',\n textTransform: 'uppercase',\n width: '100%',\n }}\n >\n {isPaid && <CheckCircle color=\"success\" filled={true} size={12} />}\n {isMissed && <Cancel color=\"error\" filled={true} size={12} />}\n <Text bold={true} color=\"text.secondary\" variant=\"caption\">\n {statusLabel}\n </Text>\n </Stack>\n )}\n </Stack>\n </Stack>\n </ListItemText>\n </ListItemButton>\n </ListItem>\n )\n}\n","import React from 'react'\nimport { observer } from 'mobx-react-lite'\n\nimport Button from '@mui/material/Button'\nimport Divider from '@mui/material/Divider'\nimport List from '@mui/material/List'\nimport ListItem from '@mui/material/ListItem'\nimport ListSubheader from '@mui/material/ListSubheader'\nimport Stack from '@mui/material/Stack'\nimport { type SxProps } from '@mui/material/styles'\n\nimport { H3, Text } from '@mxenabled/mxui'\n\nimport { useGlobalCopyStore } from '../../common'\nimport { DATE_FORMATS_INTL, formatDate } from '../../core/constants'\nimport { type Recurrence } from '../../core'\n\nimport { groupRecurrencesByDate } from '../../core/utils/RecurringTransactionsUtil'\n\nimport { RecurrenceRow } from './RecurrenceRow'\n\ninterface RecurrenceListProps {\n recurrences: Recurrence[]\n isMini?: boolean\n onResetClick?: () => void\n onRecurrenceClick?: (recurrence: Recurrence) => void\n sx?: SxProps\n title?: string\n}\n\nexport const RecurrenceList = observer(\n ({\n recurrences,\n isMini = false,\n onResetClick,\n onRecurrenceClick,\n sx = {},\n title,\n }: RecurrenceListProps) => {\n const { recurring: copy } = useGlobalCopyStore()\n\n const groupedRecurrences = React.useMemo(() => {\n return groupRecurrencesByDate(recurrences)\n }, [recurrences])\n\n return (\n <Stack id=\"recurrence-list\" sx={{ gap: 8, mt: 4, ...sx }} tabIndex={-1}>\n {title && (\n <Stack\n sx={{\n alignItems: 'center',\n flexDirection: 'row',\n justifyContent: 'space-between',\n px: 24,\n }}\n >\n <H3 bold={true} variant=\"body1\">\n {title}\n </H3>\n {onResetClick && (\n <Button onClick={onResetClick} size=\"small\" variant=\"text\">\n {copy.reset}\n </Button>\n )}\n </Stack>\n )}\n\n {recurrences.length === 0 ? (\n <Text fontStyle=\"italic\" sx={{ py: 24, textAlign: 'center' }}>\n {copy.no_activities}\n </Text>\n ) : (\n <List aria-label={title}>\n {isMini\n ? recurrences.map((recurrence, index) => (\n <React.Fragment key={`recurrence-${index}`}>\n <RecurrenceRow\n isMini={isMini}\n onRecurrenceClick={onRecurrenceClick}\n recurrence={recurrence}\n />\n <Divider sx={{ mx: 24 }} />\n </React.Fragment>\n ))\n : groupedRecurrences.map((group, index) => (\n <React.Fragment key={`recurrence-${index}`}>\n <ListItem key={group.id}>\n <List\n aria-labelledby={`date-group-header-${group.id}`}\n subheader={\n <ListSubheader\n aria-hidden=\"true\"\n id={`date-group-header-${group.id}`}\n role=\"presentation\"\n sx={{ bgcolor: 'background.paper', ml: 8, pb: 4, pt: 12 }}\n >\n <Text bold={true} variant=\"caption\">\n {formatDate(group.date, DATE_FORMATS_INTL.DAY_OF_WEEK_MONTH_DAY)}\n </Text>\n </ListSubheader>\n }\n sx={{ width: '100%' }}\n >\n {group.recurrences.map((recurrence, index) => (\n <React.Fragment key={`day-recurrence-${index}`}>\n <RecurrenceRow\n isMini={isMini}\n onRecurrenceClick={onRecurrenceClick}\n recurrence={recurrence}\n />\n </React.Fragment>\n ))}\n </List>\n </ListItem>\n <Divider sx={{ mx: 24 }} />\n </React.Fragment>\n ))}\n </List>\n )}\n </Stack>\n )\n },\n)\n","import React from 'react'\nimport { observer } from 'mobx-react-lite'\n\nimport Box from '@mui/material/Box'\nimport Stack from '@mui/material/Stack'\nimport { useTheme } from '@mui/material/styles'\n\nimport { Text } from '@mxenabled/mxui'\n\nimport { StatusBar, useGlobalCopyStore, useScreenSize } from '../../common'\nimport { formatCurrency } from '../../core/utils/NumberFormatting'\ninterface RecurringStatusProps {\n expected: number\n isExpense?: boolean\n missed?: number\n paid: number\n title: string\n total: number\n upcoming: number\n}\n\nexport const RecurringStatus = observer(\n ({ expected, isExpense = true, missed, paid, title, total, upcoming }: RecurringStatusProps) => {\n const theme = useTheme()\n const { isSmallMobile } = useScreenSize()\n const { recurring: recurringCopy } = useGlobalCopyStore()\n\n const data = React.useMemo(() => {\n const recurrence = [{ color: theme.palette.success.main, percentage: `${paid / expected}` }]\n if (missed) {\n recurrence.push({ color: theme.palette.error.main, percentage: `${missed / expected}` })\n }\n return recurrence\n }, [paid, expected, missed])\n\n return (\n <Stack>\n <Stack sx={{ flexDirection: 'row', justifyContent: 'space-between', pb: 12 }}>\n <Text bold={true} variant=\"body1\">\n {`${title} (${total})`}\n </Text>\n <Text bold={true} color={isExpense ? 'text.primary' : 'success.main'} variant=\"body1\">\n {`${isExpense ? '-' : '+'}${formatCurrency(expected, '0,0.00')}`}\n </Text>\n </Stack>\n\n <StatusBar data={data} height={12} />\n\n <Stack sx={{ alignItems: 'center', flexDirection: 'row', gap: 2, my: 8 }}>\n <Box sx={{ bgcolor: 'success.main', height: 8, mr: 8, width: 8 }} />\n {!isSmallMobile && (\n <Text bold={true} variant=\"body2\">\n {formatCurrency(paid, '0,0.00')}\n </Text>\n )}\n <Text variant=\"caption\">{recurringCopy.paid?.toLowerCase()}</Text>\n\n {missed !== undefined && (\n <>\n <Box sx={{ bgcolor: 'error.main', height: 8, ml: 16, mr: 8, width: 8 }} />\n {!isSmallMobile && (\n <Text bold={true} variant=\"body2\">\n {formatCurrency(missed, '0,0.00')}\n </Text>\n )}\n <Text variant=\"caption\">{recurringCopy.missed?.toLowerCase()}</Text>\n </>\n )}\n\n <Box sx={{ bgcolor: 'divider', height: 8, ml: 16, mr: 8, width: 8 }} />\n {!isSmallMobile && (\n <Text bold={true} variant=\"body2\">\n {formatCurrency(upcoming, '0,0.00')}\n </Text>\n )}\n <Text variant=\"caption\">{recurringCopy.upcoming?.toLowerCase()}</Text>\n </Stack>\n </Stack>\n )\n },\n)\n","import { observer } from 'mobx-react-lite'\n\nimport { Drawer, useGlobalCopyStore, useRecurringTransactionsStore } from '../../common'\nimport { RepeatingType } from '../../core'\n\nimport { RecurringTransactionDetails } from './RecurringTransactionDetails'\n\nexport const RecurringTransactionDetailsDrawer = observer(() => {\n const { recurring: copy } = useGlobalCopyStore()\n const {\n selectedRecurrence,\n selectedRepeatingTransaction,\n setSelectedRecurrence,\n setSelectedRepeatingTransactionGuid,\n } = useRecurringTransactionsStore()\n\n const handleClose = () => {\n setSelectedRepeatingTransactionGuid(null)\n setSelectedRecurrence(null)\n }\n\n return (\n <Drawer\n ariaLabelClose={copy.close_drawer_aria}\n isOpen={!!selectedRepeatingTransaction}\n onClose={handleClose}\n title={\n selectedRepeatingTransaction?.repeating_transaction_type === RepeatingType.Income\n ? copy.income_details\n : copy.expense_details\n }\n >\n {selectedRepeatingTransaction && (\n <RecurringTransactionDetails\n onDeleted={handleClose}\n recurringTransaction={selectedRepeatingTransaction}\n selectedRecurrence={selectedRecurrence}\n />\n )}\n </Drawer>\n )\n})\n","import React from 'react'\nimport { observer } from 'mobx-react-lite'\nimport { addMonths } from 'date-fns/addMonths'\nimport { startOfMonth } from 'date-fns/startOfMonth'\nimport { endOfMonth } from 'date-fns/endOfMonth'\nimport { subMonths } from 'date-fns/subMonths'\nimport { isBefore } from 'date-fns/isBefore'\n\nimport Grid from '@mui/material/Grid'\nimport IconButton from '@mui/material/IconButton'\nimport Stack from '@mui/material/Stack'\nimport Tab from '@mui/material/Tab'\nimport Tabs from '@mui/material/Tabs'\n\nimport { ChevronLeft, ChevronRight } from '@mxenabled/mx-icons'\n\nimport { H2, Text } from '@mxenabled/mxui'\n\nimport {\n ANALYTICS_EVENTS,\n useEvent,\n useGlobalCopyStore,\n useRecurringTransactionsStore,\n useScreenSize,\n useWidgetContainerProvider,\n} from '../../common'\nimport { DATE_FORMATS_INTL, formatDate } from '../../core/constants'\nimport { type Recurrence } from '../../core'\n\nimport { RecurrenceCalendar } from './recurrencecalendar/RecurrenceCalendar'\nimport { RecurrenceList } from './RecurrenceList'\nimport { RecurringStatus } from './RecurringStatus'\nimport { RecurringTransactionDetailsDrawer } from './RecurringTransactionDetailsDrawer'\nimport { buildDynamicCopy } from '../../core/utils/Localization'\n\nexport const RecurringTransactions = observer(() => {\n const { recurring: copy } = useGlobalCopyStore()\n const { availableWidth } = useWidgetContainerProvider()\n const { isDesktop, isSmallMobile, isMobile } = useScreenSize(availableWidth)\n\n const { onEvent } = useEvent()\n const {\n currentMonthExpenses,\n currentMonthIncome,\n dateRange,\n expenseTotal,\n incomeTotal,\n missedExpenseTotal,\n pastRecurrences,\n paidExpenseTotal,\n paidIncomeTotal,\n selectedDay,\n selectedDayRecurrences,\n setDateRange,\n setSelectedRecurrence,\n setSelectedRepeatingTransactionGuid,\n upcomingExpenseTotal,\n upcomingIncomeTotal,\n upcomingRecurrences,\n } = useRecurringTransactionsStore()\n\n const [selectedTab, setSelectedTab] = React.useState(0)\n\n const isPreviousMonthDisabled = isBefore(dateRange.start, new Date())\n\n const handleTabChange = (_event: React.SyntheticEvent, newValue: number) => {\n setSelectedTab(newValue)\n }\n\n const onUpcomingRecurrenceClick = (recurrence: Recurrence) => {\n setSelectedRepeatingTransactionGuid(recurrence.repeatingTransactionGuid)\n setSelectedRecurrence(recurrence)\n onEvent(ANALYTICS_EVENTS.RECURRING_TRANSACTIONS_CLICK_UPCOMING, {\n transaction_guid: recurrence.transaction?.guid,\n })\n }\n\n const onPaidRecurrenceClick = (recurrence: Recurrence) => {\n setSelectedRepeatingTransactionGuid(recurrence.repeatingTransactionGuid)\n setSelectedRecurrence(recurrence)\n onEvent(ANALYTICS_EVENTS.RECURRING_TRANSACTIONS_CLICK_PAID, {\n transaction_guid: recurrence.transaction?.guid,\n })\n }\n\n const onNextMonthClick = () => {\n const nextMonth = addMonths(dateRange.start, 1)\n setDateRange({\n start: startOfMonth(nextMonth),\n end: endOfMonth(nextMonth),\n })\n }\n\n const onPreviousMonthClick = () => {\n const lastMonth = subMonths(dateRange.start, 1)\n setDateRange({\n start: startOfMonth(lastMonth),\n end: endOfMonth(lastMonth),\n })\n }\n\n return (\n <Grid\n container={true}\n sx={{\n pt: 16,\n }}\n >\n <Grid size={{ sm: 12, md: 'grow' }} width={'100%'}>\n <Stack sx={{ gap: 16, px: isDesktop ? 48 : 24 }}>\n <Stack alignItems=\"center\" direction=\"row\" justifyContent=\"space-between\">\n <H2 variant=\"h3\">\n {\n buildDynamicCopy(\n copy.header_title,\n formatDate(dateRange.start, DATE_FORMATS_INTL.MONTH_LONG),\n ) as string\n }\n </H2>\n {!isDesktop && (\n <Stack direction=\"row\" gap={4}>\n <IconButton\n color=\"primary\"\n disabled={isPreviousMonthDisabled}\n onClick={onPreviousMonthClick}\n >\n <ChevronLeft />\n </IconButton>\n <IconButton color=\"primary\" onClick={onNextMonthClick}>\n <ChevronRight />\n </IconButton>\n </Stack>\n )}\n </Stack>\n\n <RecurringStatus\n expected={expenseTotal}\n missed={missedExpenseTotal}\n paid={paidExpenseTotal}\n title={copy.expenses}\n total={currentMonthExpenses.length}\n upcoming={upcomingExpenseTotal}\n />\n\n <RecurringStatus\n expected={incomeTotal}\n isExpense={false}\n paid={paidIncomeTotal}\n title={copy.deposits}\n total={currentMonthIncome.length}\n upcoming={upcomingIncomeTotal}\n />\n\n {isDesktop && (\n <RecurrenceList\n onRecurrenceClick={onUpcomingRecurrenceClick}\n recurrences={upcomingRecurrences}\n title={copy.upcoming_activity}\n />\n )}\n </Stack>\n {!isDesktop && (\n <Stack sx={{ px: isMobile ? 0 : 24 }}>\n <Tabs onChange={handleTabChange} value={selectedTab} variant=\"fullWidth\">\n <Tab\n label={\n <Text bold={true} sx={{ textTransform: 'none' }} variant=\"body1\">\n {isSmallMobile ? copy.upcoming : copy.upcoming_activity}\n </Text>\n }\n />\n <Tab\n label={\n <Text bold={true} sx={{ textTransform: 'none' }} variant=\"body1\">\n {isSmallMobile ? copy.past : copy.past_transactions}\n </Text>\n }\n />\n </Tabs>\n {selectedTab === 0 && (\n <RecurrenceList\n onRecurrenceClick={onUpcomingRecurrenceClick}\n recurrences={upcomingRecurrences}\n />\n )}\n {selectedTab === 1 && (\n <RecurrenceList\n onRecurrenceClick={onPaidRecurrenceClick}\n recurrences={pastRecurrences}\n />\n )}\n </Stack>\n )}\n </Grid>\n\n {isDesktop && (\n <Grid size={{ xs: 'auto' }} sx={{ minWidth: 450 }}>\n <Stack gap={24}>\n <RecurrenceCalendar />\n <RecurrenceList\n onRecurrenceClick={onPaidRecurrenceClick}\n recurrences={selectedDayRecurrences || pastRecurrences}\n title={\n selectedDay\n ? (buildDynamicCopy(\n copy.day_transactions,\n formatDate(selectedDay, DATE_FORMATS_INTL.MONTH_DAY),\n ) as string)\n : copy.past_transactions\n }\n />\n </Stack>\n </Grid>\n )}\n\n <RecurringTransactionDetailsDrawer />\n </Grid>\n )\n})\n","import React from 'react'\nimport { observer } from 'mobx-react-lite'\nimport { endOfMonth } from 'date-fns/endOfMonth'\nimport { endOfToday } from 'date-fns/endOfToday'\nimport { startOfMonth } from 'date-fns/startOfMonth'\nimport { startOfToday } from 'date-fns/startOfToday'\nimport { subDays } from 'date-fns/subDays'\n\nimport Alert from '@mui/material/Alert'\nimport Snackbar from '@mui/material/Snackbar'\n\nimport {\n ANALYTICS_EVENTS,\n Drawer,\n Loader,\n useEvent,\n useGlobalCopyStore,\n useGlobalUiStore,\n useRecurringTransactionsStore,\n useTransactionStore,\n useWidgetLoadTimer,\n WidgetContainer,\n} from '../common'\nimport { type WidgetProps } from '../core'\n\nimport { RecurringSettings } from './components/shared/RecurringSettings'\nimport { RecurringTransactions } from './components/RecurringTransactions'\nimport { SkeletonLoader } from '../common/components/SkeletonLoader'\n\nexport const RecurringTransactionsWidget = observer(\n ({ onBackClick, onMenuClick, sx = {} }: WidgetProps) => {\n const { recurring: copy } = useGlobalCopyStore()\n const { isInitialized, selectedAccountGuids } = useGlobalUiStore()\n const { alert, isDataLoaded, loadRepeatingTransactionData, setAlert, setDateRange } =\n useRecurringTransactionsStore()\n const { setFilter } = useTransactionStore()\n const { onEvent } = useEvent()\n const [isSettingsOpen, setIsSettingsOpen] = React.useState(false)\n\n useWidgetLoadTimer({\n widgetName: 'RecurringTransactionsWidget',\n isLoaded: isDataLoaded,\n })\n\n React.useEffect(() => {\n if (!isDataLoaded) {\n // Load the repeating transactions and related data\n loadRepeatingTransactionData().finally()\n }\n }, [])\n\n React.useEffect(() => {\n // Sets the Transaction filter\n setFilter({\n dateRange: { start: subDays(startOfToday(), 90), end: endOfToday() },\n accounts: selectedAccountGuids,\n })\n // Set the Date Range for Recurring Transactions\n setDateRange({ start: startOfMonth(new Date()), end: endOfMonth(new Date()) })\n }, [selectedAccountGuids])\n\n if (!isInitialized) return <Loader />\n\n return (\n <WidgetContainer\n actions={[\n {\n label: copy.action_title,\n iconName: 'credit_card_gear',\n onClick: () => {\n setIsSettingsOpen(true)\n onEvent(ANALYTICS_EVENTS.RECURRING_TRANSACTIONS_CLICK_SETTINGS)\n },\n },\n ]}\n hasDivider={true}\n onAccountsFilterClick={() => onEvent(ANALYTICS_EVENTS.RECURRING_TRANSACTIONS_CLICK_FILTER)}\n onBackClick={onBackClick}\n onMenuClick={onMenuClick}\n sx={sx}\n title={copy.title}\n >\n {!isDataLoaded ? (\n <SkeletonLoader sx={{ m: 48 }} variant=\"list\" />\n ) : (\n <RecurringTransactions />\n )}\n <Drawer\n ariaLabelClose={copy.close_drawer_aria}\n isOpen={isSettingsOpen}\n onClose={() => setIsSettingsOpen(false)}\n shouldShowHeaderBorders={false}\n title={copy.action_title}\n >\n <RecurringSettings />\n </Drawer>\n <Snackbar\n anchorOrigin={{ vertical: 'bottom', horizontal: 'right' }}\n autoHideDuration={3500}\n onClose={() => setAlert('')}\n open={Boolean(alert.message)}\n >\n <Alert onClose={() => setAlert('')} severity={alert.severity} variant=\"filled\">\n {alert.message}\n </Alert>\n </Snackbar>\n </WidgetContainer>\n )\n },\n)\n","import { observer } from 'mobx-react-lite'\n\nimport Divider from '@mui/material/Divider'\nimport Stack from '@mui/material/Stack'\n\nimport {\n useGlobalCopyStore,\n useRecurringTransactionsStore,\n useWidgetContainerProvider,\n} from '../../common'\nimport { type Recurrence } from '../../core'\nimport { DATE_FORMATS_INTL, formatDate } from '../../core/constants'\n\nimport { RecurrenceCalendar } from './recurrencecalendar/RecurrenceCalendar'\nimport { RecurrenceList } from './RecurrenceList'\nimport { buildDynamicCopy } from '../../core/utils/Localization'\n\nexport const MiniWidgetContent = observer(() => {\n const { recurring: copy } = useGlobalCopyStore()\n const { availableWidth } = useWidgetContainerProvider()\n const {\n selectedDay,\n selectedDayRecurrences,\n setSelectedDay,\n setSelectedRecurrence,\n setSelectedRepeatingTransactionGuid,\n upcomingRecurrences,\n } = useRecurringTransactionsStore()\n\n const onRecurrenceClick = (recurrence: Recurrence) => {\n setSelectedRepeatingTransactionGuid(recurrence.repeatingTransactionGuid)\n setSelectedRecurrence(recurrence)\n }\n\n const isSmall = availableWidth < 750\n\n return (\n <Stack flexDirection={isSmall ? 'column' : 'row'} width=\"100%\">\n <RecurrenceCalendar />\n\n {!isSmall && <Divider flexItem={true} orientation=\"vertical\" sx={{ my: 16, ml: 16 }} />}\n\n <RecurrenceList\n isMini={true}\n onRecurrenceClick={onRecurrenceClick}\n onResetClick={selectedDay ? () => setSelectedDay(selectedDay) : undefined}\n recurrences={selectedDayRecurrences || upcomingRecurrences.slice(0, 5)}\n sx={{ width: isSmall ? '100%' : 'calc(100% - 336px)', mt: 12 }}\n title={\n selectedDay\n ? (buildDynamicCopy(\n copy.day_transactions,\n formatDate(selectedDay, DATE_FORMATS_INTL.MONTH_DAY),\n ) as string)\n : copy.upcoming_activity\n }\n />\n </Stack>\n )\n})\n","import React from 'react'\nimport { observer } from 'mobx-react-lite'\nimport { endOfToday } from 'date-fns/endOfToday'\nimport { startOfToday } from 'date-fns/startOfToday'\nimport { subDays } from 'date-fns/subDays'\n\nimport {\n Loader,\n MiniWidgetContainer,\n useGlobalCopyStore,\n useGlobalUiStore,\n useRecurringTransactionsStore,\n useTransactionStore,\n useWidgetLoadTimer,\n} from '../common'\nimport { type MiniWidgetProps } from '../core'\n\nimport { MiniWidgetContent } from './components/MiniWidgetContent'\nimport { RecurringTransactionDetailsDrawer } from './components/RecurringTransactionDetailsDrawer'\nimport { SkeletonLoader } from '../common/components/SkeletonLoader'\n\nexport const RecurringTransactionsMiniWidget = observer(\n ({ onPrimaryCtaClick, sx }: MiniWidgetProps) => {\n const { recurring: copy } = useGlobalCopyStore()\n const { setFilter } = useTransactionStore()\n const { isDataLoaded, loadRepeatingTransactionData } = useRecurringTransactionsStore()\n const { isInitialized, selectedAccountGuids } = useGlobalUiStore()\n\n useWidgetLoadTimer({\n widgetName: 'RecurringTransactionsMiniWidget',\n isLoaded: isDataLoaded,\n })\n\n React.useEffect(() => {\n if (!isDataLoaded) {\n loadRepeatingTransactionData().finally()\n }\n }, [])\n\n React.useEffect(() => {\n if (selectedAccountGuids.length > 0) {\n setFilter({\n dateRange: { start: subDays(startOfToday(), 90), end: endOfToday() },\n accounts: selectedAccountGuids,\n })\n }\n }, [selectedAccountGuids])\n\n if (!isInitialized) return <Loader />\n\n return (\n <MiniWidgetContainer\n className=\"mx-exp-recurring-transactions-miniwidget\"\n onPrimaryCtaClick={onPrimaryCtaClick}\n primaryCtaLabel={copy.primary_cta}\n primaryCtaLabelAria={copy.primary_cta_aria}\n subTitle={copy.sub_title}\n sx={sx}\n title={copy.mini_title}\n >\n {isDataLoaded ? <MiniWidgetContent /> : <SkeletonLoader sx={{ mx: 16 }} variant=\"list\" />}\n\n <RecurringTransactionDetailsDrawer />\n </MiniWidgetContainer>\n )\n },\n)\n","import Stack from '@mui/material/Stack'\n\nimport { CurrencyExchange } from '@mxenabled/mx-icons'\n\nimport { P } from '@mxenabled/mxui'\n\nimport { observer } from 'mobx-react-lite'\n\nimport { useGlobalCopyStore } from '../common'\n\nexport const ZeroStateMicroWidget = observer(() => {\n const { recurring: recurringCopy } = useGlobalCopyStore()\n\n return (\n <Stack sx={{ alignItems: 'start', flexDirection: 'row', gap: 12 }}>\n <CurrencyExchange size={32} />\n <Stack>\n <P fontWeight={600} variant=\"body1\">\n {recurringCopy.zero_state_content_header}\n </P>\n <P color=\"text.secondary\" variant=\"subtitle2\">\n {recurringCopy.zero_state_content_description}\n </P>\n </Stack>\n </Stack>\n )\n})\n","import Box from '@mui/material/Box'\nimport Stack from '@mui/material/Stack'\nimport { Text } from '@mxenabled/mxui'\nimport { formatCurrency } from '../../../core/utils/NumberFormatting'\ntype RecurringSettingsProps = {\n amount: number\n bgcolor: string\n isLargeScreen: boolean\n isSmallScreen: boolean\n label: string\n}\n\nexport const RecurrenceLegend = ({\n amount,\n bgcolor,\n isLargeScreen,\n isSmallScreen,\n label,\n}: RecurringSettingsProps) => (\n <Stack sx={{ alignItems: 'center', flexDirection: 'row', gap: 8 }}>\n <Box\n sx={{\n borderRadius: '2px',\n bgcolor,\n height: 8,\n width: 8,\n }}\n />\n\n <Stack sx={{ alignItems: 'center', flexDirection: 'row', gap: 2 }}>\n {!isSmallScreen && (\n <Text bold={true} variant=\"caption\">\n {formatCurrency(amount, amount === 0 || !isLargeScreen ? '0,0' : '0,0.00')}\n </Text>\n )}\n <Text variant=\"caption\">{label}</Text>\n </Stack>\n </Stack>\n)\n","import React from 'react'\nimport Box from '@mui/material/Box'\nimport { MerchantLogo } from '@mxenabled/mxui'\nimport { Recurrence } from '../../../core'\n\ninterface OverlappingMerchantLogosProps {\n upcomingRecurrences: Recurrence[]\n logoSize?: number\n maxLogos?: number\n}\n\nexport const OverlappingMerchantLogos: React.FC<OverlappingMerchantLogosProps> = ({\n upcomingRecurrences,\n logoSize = 32,\n maxLogos = 3,\n}) => {\n const ICON_OVERLAP_X = (i: number) => i * (logoSize / 2)\n\n return (\n <Box\n sx={{\n position: 'relative',\n width: 64,\n }}\n >\n {upcomingRecurrences.map((recurrence, index) => {\n if (index < maxLogos) {\n return (\n <Box\n key={`${recurrence.categoryGuid}-${recurrence.merchantGuid}-${index}`}\n sx={{\n borderRadius: '4px',\n left: ICON_OVERLAP_X(index),\n outlineColor: 'common.white',\n outlineStyle: 'solid',\n outlineWidth: 2,\n position: 'absolute',\n }}\n >\n <MerchantLogo\n categoryGuid={recurrence.categoryGuid || ''}\n merchantGuid={recurrence.merchantGuid || ''}\n size={logoSize}\n />\n </Box>\n )\n }\n return null\n })}\n </Box>\n )\n}\n","import React from 'react'\nimport Stack from '@mui/material/Stack'\nimport { MerchantLogo } from '@mxenabled/mxui'\nimport { Recurrence } from '../../../core'\n\ninterface MerchantLogosRowProps {\n upcomingRecurrences: Recurrence[]\n maxLogos?: number\n}\n\nexport const MerchantLogosRow: React.FC<MerchantLogosRowProps> = ({\n upcomingRecurrences,\n maxLogos = 3,\n}) => {\n return (\n <Stack sx={{ flexDirection: 'row', gap: 4 }}>\n {upcomingRecurrences\n ?.slice(0, maxLogos)\n .map((recurrence, index) => (\n <MerchantLogo\n categoryGuid={recurrence.categoryGuid || ''}\n key={`${recurrence.categoryGuid}-${recurrence.merchantGuid}-${index}`}\n merchantGuid={recurrence.merchantGuid || ''}\n />\n ))}\n </Stack>\n )\n}\n","import React from 'react'\nimport { observer } from 'mobx-react-lite'\n\nimport Stack from '@mui/material/Stack'\nimport { useTheme } from '@mui/material/styles'\n\nimport { P, Text } from '@mxenabled/mxui'\n\nimport { StatusBar, useGlobalCopyStore, useRecurringTransactionsStore } from '../../common'\nimport { useDimensions } from '../../common/hooks/useDimensions'\n\nimport { RecurrenceLegend } from './micro/RecurrenceLegend'\nimport { OverlappingMerchantLogos } from './micro/OverlappingMerchantLogos'\nimport { MerchantLogosRow } from './micro/MerchantLogosRow'\nimport { formatCurrency } from '../../core/utils/NumberFormatting'\n\nexport const MicroWidgetContent = observer(() => {\n const theme = useTheme()\n const [containerRef, { width }] = useDimensions()\n const {\n upcomingRecurrences,\n expenseTotal,\n missedExpenseTotal,\n paidExpenseTotal,\n upcomingExpenseTotal,\n } = useRecurringTransactionsStore()\n const { recurring: copy } = useGlobalCopyStore()\n\n const isSmallScreen = width <= 288\n const isLargeScreen = width >= 450\n const logoSize = 32\n const hasLogos = upcomingRecurrences.length > 0\n\n const expectedExpenseTotalFormatted = React.useMemo(() => {\n return formatCurrency(expenseTotal, expenseTotal === 0 ? '0,0' : '0,0.00')\n }, [expenseTotal])\n\n const data = React.useMemo(() => {\n const recurrence = [\n { color: theme.palette.success.main, percentage: `${paidExpenseTotal / expenseTotal}` },\n ]\n if (missedExpenseTotal) {\n recurrence.push({\n color: theme.palette.error.main,\n percentage: `${missedExpenseTotal / expenseTotal}`,\n })\n }\n return recurrence\n }, [\n paidExpenseTotal,\n expenseTotal,\n missedExpenseTotal,\n theme.palette.success.main,\n theme.palette.error.main,\n ])\n\n const renderLogosSection = () => {\n if (!hasLogos) {\n return <Stack sx={{ width: isSmallScreen ? 64 : 104 }} />\n }\n\n return isSmallScreen ? (\n <OverlappingMerchantLogos\n logoSize={logoSize}\n maxLogos={3}\n upcomingRecurrences={upcomingRecurrences.slice(0, 3)}\n />\n ) : (\n <MerchantLogosRow maxLogos={3} upcomingRecurrences={upcomingRecurrences.slice(0, 3)} />\n )\n }\n\n const recurrenceLegend = [\n {\n amount: paidExpenseTotal,\n bgColor: 'success.main',\n label: copy.paid,\n },\n {\n amount: missedExpenseTotal,\n bgColor: 'error.main',\n label: copy.missed,\n },\n {\n amount: upcomingExpenseTotal,\n bgColor: 'neutral.light',\n label: copy.upcoming,\n },\n ]\n\n return (\n <>\n <Stack ref={containerRef} sx={{ flexDirection: 'row', justifyContent: 'space-between' }}>\n <Stack\n sx={[\n expectedExpenseTotalFormatted.length >= 10 && isSmallScreen\n ? { flexDirection: 'column' }\n : { flexDirection: 'row', gap: 2 },\n {\n alignItems: 'baseline',\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n whiteSpace: 'nowrap',\n },\n ]}\n >\n <Text\n sx={{ width: '100%' }}\n variant={expectedExpenseTotalFormatted.length >= 10 && isSmallScreen ? 'h3' : 'h2'}\n >\n {expectedExpenseTotalFormatted}\n </Text>\n\n <P sx={{ pr: 12 }} variant=\"caption\">\n {copy.expected}\n </P>\n </Stack>\n {renderLogosSection()}\n </Stack>\n\n <Stack sx={{ pt: 12 }}>\n <StatusBar data={data} />\n\n <Stack\n sx={{\n alignItems: 'center',\n flexDirection: 'row',\n gap: 16,\n mt: 4,\n }}\n >\n {recurrenceLegend.map((legend, index) => (\n <RecurrenceLegend\n amount={legend.amount}\n bgcolor={legend.bgColor}\n isLargeScreen={isLargeScreen}\n isSmallScreen={isSmallScreen}\n key={`recurrence-legend-${index}`}\n label={legend.label}\n />\n ))}\n </Stack>\n </Stack>\n </>\n )\n})\n","import React from 'react'\nimport { observer } from 'mobx-react-lite'\nimport { endOfMonth } from 'date-fns/endOfMonth'\nimport { endOfToday } from 'date-fns/endOfToday'\nimport { startOfMonth } from 'date-fns/startOfMonth'\nimport { startOfToday } from 'date-fns/startOfToday'\nimport { subDays } from 'date-fns/subDays'\n\nimport {\n ANALYTICS_EVENTS,\n Loader,\n MicroWidgetContainer,\n useEvent,\n useGlobalCopyStore,\n useGlobalUiStore,\n useRecurringTransactionsStore,\n useTransactionStore,\n useWidgetLoadTimer,\n} from '../common'\n\nimport { ZeroStateMicroWidget } from './ZeroStateMicroWidget'\nimport { MicroWidgetContent } from './components/MicroWidgetContent'\n\ninterface RecurringTransactionsMicroWidgetProps {\n onCTAClick: () => void\n}\n\nexport const RecurringTransactionsMicroWidget = observer(\n ({ onCTAClick }: RecurringTransactionsMicroWidgetProps) => {\n const { onEvent } = useEvent()\n\n const { isInitialized, selectedAccountGuids } = useGlobalUiStore()\n const {\n loadRepeatingTransactionData,\n upcomingRecurrences,\n repeatingTransactions,\n setDateRange,\n isDataLoaded,\n } = useRecurringTransactionsStore()\n const { setFilter } = useTransactionStore()\n const { recurring: copy, budgets: budgetsCopy } = useGlobalCopyStore()\n\n useWidgetLoadTimer({\n widgetName: 'RecurringTransactionsMicroWidget',\n isLoaded: isDataLoaded,\n })\n\n React.useEffect(() => {\n if (!isDataLoaded) {\n // Load the repeating transactions and related data\n loadRepeatingTransactionData().finally(() => {\n onEvent(ANALYTICS_EVENTS.RECURRING_TRANSACTIONS_LOAD_WIDGET, {\n state: upcomingRecurrences.length > 0 ? 'default' : 'zeroState',\n })\n })\n }\n }, [])\n\n React.useEffect(() => {\n if (isInitialized) {\n setFilter({\n dateRange: { start: subDays(startOfToday(), 90), end: endOfToday() },\n accounts: selectedAccountGuids,\n })\n setDateRange({ start: startOfMonth(new Date()), end: endOfMonth(new Date()) })\n }\n }, [isInitialized, selectedAccountGuids])\n\n const handleCTAClick = () => {\n onEvent(\n upcomingRecurrences.length > 0\n ? ANALYTICS_EVENTS.RECURRING_TRANSACTIONS_CLICK_GET_STARTED\n : ANALYTICS_EVENTS.RECURRING_TRANSACTIONS_CLICK_VIEW_ALL,\n )\n onCTAClick()\n }\n\n if (!isInitialized || !isDataLoaded) return <Loader height={100} />\n\n const showZeroState = !repeatingTransactions?.length\n\n return (\n <MicroWidgetContainer\n className=\"mx-recurring-transaction-microwidget\"\n ctaLabel={showZeroState ? budgetsCopy.get_started_cta : copy.primary_cta}\n onCTAClick={handleCTAClick}\n title={copy.recurring_expenses}\n >\n {!showZeroState ? <MicroWidgetContent /> : <ZeroStateMicroWidget />}\n </MicroWidgetContainer>\n )\n },\n)\n","import { observer } from 'mobx-react-lite'\n\nimport { Drawer, useGlobalCopyStore } from '../../common'\n\nimport { RecurringSettings } from './shared/RecurringSettings'\n\ninterface RecurringSettingsDrawerProps {\n isOpen: boolean\n onClose: () => void\n selectedTab?: number\n}\n\nexport const RecurringSettingsDrawer = observer(\n ({ isOpen, onClose, selectedTab }: RecurringSettingsDrawerProps) => {\n const { cashflow: copy } = useGlobalCopyStore()\n\n return (\n <Drawer\n ariaLabelClose={copy.close_settings_aria}\n isOpen={isOpen}\n onClose={onClose}\n title={copy.cashflow_settings}\n >\n <RecurringSettings defaultSelectedTab={selectedTab} />\n </Drawer>\n )\n },\n)\n"],"names":["iconStyle","offsetStyle","isOffset","UpcomingExpenseBadge","size","jsx","IconBacking","Schedule","IncomeBadge","MonetizationOn","MissedBadge","Cancel","PaidBadge","CheckCircle","RecurrenceDay","observer","day","outsideCurrentMonth","other","copy","useGlobalCopyStore","selectedAccountGuids","useGlobalUiStore","recurrences","setSelectedDay","useRecurringTransactionsStore","dayRecurrences","React","recurrence","a","isSameDay","hasUpcoming","RecurrenceType","RecurrenceStatus","hasMissed","hasPaid","hasIncome","totalBadges","statusParts","ariaLabel","formatDate","DATE_FORMATS_INTL","Badge","jsxs","Fragment","PickersDay","Symbol","Icon","label","Stack","Text","Legend","HEADER_HEIGHT","getDateFnsLocale","locale","getLocale","LOCALES","enUS","enCA","fr","frCA","es","RecurrenceCalendar","theme","useTheme","onEvent","useEvent","selectedDay","setDateRange","calendarHeight","setCalendarHeight","getWeeksInMonth","TOUCH_TARGET","handleMonthChange","date","startOfMonth","endOfMonth","handleDateChange","ANALYTICS_EVENTS","recurrenceList","calendar","DateCalendar","LocalizationProvider","AdapterDateFns","getStatusIcon","getStatus","buildDynamicCopy","RecurrenceRow","isMini","onRecurrenceClick","showOrdinal","detailedRepeatingTransactions","repeatingTransaction","rt","isCredit","isPaid","isMissed","isUpcoming","statusLabel","getFrequencyLabel","ListItem","ListItemButton","ListItemAvatar","MerchantLogo","ListItemText","InstitutionLogo","formatCurrency","RecurrenceList","onResetClick","sx","title","groupedRecurrences","groupRecurrencesByDate","H3","Button","List","index","Divider","group","ListSubheader","RecurringStatus","expected","isExpense","missed","paid","total","upcoming","isSmallMobile","useScreenSize","recurringCopy","data","StatusBar","Box","RecurringTransactionDetailsDrawer","selectedRecurrence","selectedRepeatingTransaction","setSelectedRecurrence","setSelectedRepeatingTransactionGuid","handleClose","Drawer","RepeatingType","RecurringTransactionDetails","RecurringTransactions","availableWidth","useWidgetContainerProvider","isDesktop","isMobile","currentMonthExpenses","currentMonthIncome","dateRange","expenseTotal","incomeTotal","missedExpenseTotal","pastRecurrences","paidExpenseTotal","paidIncomeTotal","selectedDayRecurrences","upcomingExpenseTotal","upcomingIncomeTotal","upcomingRecurrences","selectedTab","setSelectedTab","isPreviousMonthDisabled","isBefore","handleTabChange","_event","newValue","onUpcomingRecurrenceClick","onPaidRecurrenceClick","onNextMonthClick","nextMonth","addMonths","onPreviousMonthClick","lastMonth","subMonths","Grid","H2","IconButton","ChevronLeft","ChevronRight","Tabs","Tab","RecurringTransactionsWidget","onBackClick","onMenuClick","isInitialized","alert","isDataLoaded","loadRepeatingTransactionData","setAlert","setFilter","useTransactionStore","isSettingsOpen","setIsSettingsOpen","useWidgetLoadTimer","subDays","startOfToday","endOfToday","WidgetContainer","SkeletonLoader","RecurringSettings","Snackbar","Alert","Loader","MiniWidgetContent","isSmall","RecurringTransactionsMiniWidget","onPrimaryCtaClick","MiniWidgetContainer","ZeroStateMicroWidget","CurrencyExchange","P","RecurrenceLegend","amount","bgcolor","isLargeScreen","isSmallScreen","OverlappingMerchantLogos","logoSize","maxLogos","ICON_OVERLAP_X","i","MerchantLogosRow","MicroWidgetContent","containerRef","width","useDimensions","hasLogos","expectedExpenseTotalFormatted","renderLogosSection","recurrenceLegend","legend","RecurringTransactionsMicroWidget","onCTAClick","repeatingTransactions","budgetsCopy","handleCTAClick","showZeroState","MicroWidgetContainer","RecurringSettingsDrawer","isOpen","onClose"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.es.js","sources":["../../src/recurringtransactions/components/RecurrenceBadges.tsx","../../src/recurringtransactions/components/recurrencecalendar/RecurrenceDay.tsx","../../src/recurringtransactions/components/recurrencecalendar/Legend.tsx","../../src/recurringtransactions/components/recurrencecalendar/RecurrenceCalendar.tsx","../../src/recurringtransactions/components/RecurrenceRow.tsx","../../src/recurringtransactions/components/RecurrenceList.tsx","../../src/recurringtransactions/components/RecurringStatus.tsx","../../src/recurringtransactions/components/RecurringTransactionDetailsDrawer.tsx","../../src/recurringtransactions/components/RecurringTransactions.tsx","../../src/recurringtransactions/RecurringTransactionsWidget.tsx","../../src/recurringtransactions/components/MiniWidgetContent.tsx","../../src/recurringtransactions/RecurringTransactionsMiniWidget.tsx","../../src/recurringtransactions/ZeroStateMicroWidget.tsx","../../src/recurringtransactions/components/micro/RecurrenceLegend.tsx","../../src/recurringtransactions/components/micro/OverlappingMerchantLogos.tsx","../../src/recurringtransactions/components/micro/MerchantLogosRow.tsx","../../src/recurringtransactions/components/MicroWidgetContent.tsx","../../src/recurringtransactions/RecurringTransactionsMicroWidget.tsx","../../src/recurringtransactions/components/RecurringSettingsDrawer.tsx"],"sourcesContent":["import { Schedule } from '@mxenabled/mx-icons'\nimport { MonetizationOn } from '@mxenabled/mx-icons'\nimport { Cancel } from '@mxenabled/mx-icons'\nimport { CheckCircle } from '@mxenabled/mx-icons'\n\nimport IconBacking from '../../common/components/IconBacking'\n\nconst iconStyle = {\n gridRow: 1,\n gridColumn: 1,\n zIndex: 2,\n}\n\nconst offsetStyle = (isOffset: boolean) => {\n return isOffset ? { margin: '0 0 -6px -4px' } : undefined\n}\n\nexport const UpcomingExpenseBadge = ({ isOffset = false, size = 16 }) => (\n <IconBacking\n backingSx={{ backgroundColor: 'background.paper' }}\n size={size}\n sx={{ ...offsetStyle(isOffset) }}\n >\n <Schedule color=\"primary\" filled={true} sx={{ fontSize: size, ...iconStyle }} />\n </IconBacking>\n)\n\nexport const IncomeBadge = ({ isOffset = false, size = 16 }) => (\n <IconBacking\n backingSx={{ backgroundColor: 'background.paper' }}\n size={size}\n sx={{ ...offsetStyle(isOffset) }}\n >\n <MonetizationOn\n filled={true}\n sx={{ color: 'categories.income', fontSize: size, ...iconStyle }}\n />\n </IconBacking>\n)\n\nexport const MissedBadge = ({ isOffset = false, size = 16 }) => (\n <IconBacking\n backingSx={{ backgroundColor: 'background.paper' }}\n size={size}\n sx={{ ...offsetStyle(isOffset) }}\n >\n <Cancel color=\"error\" filled={true} sx={{ fontSize: size, ...iconStyle }} />\n </IconBacking>\n)\n\nexport const PaidBadge = ({ isOffset = false, size = 16 }) => (\n <IconBacking\n backingSx={{ backgroundColor: 'background.paper' }}\n size={size}\n sx={{ ...offsetStyle(isOffset) }}\n >\n <CheckCircle color=\"success\" filled={true} sx={{ fontSize: size, ...iconStyle }} />\n </IconBacking>\n)\n","import React from 'react'\nimport { observer } from 'mobx-react-lite'\nimport { isSameDay } from 'date-fns/isSameDay'\n\nimport Badge from '@mui/material/Badge'\nimport { PickersDay, PickersDayProps } from '@mui/x-date-pickers/PickersDay'\n\nimport {\n useGlobalCopyStore,\n useGlobalUiStore,\n useRecurringTransactionsStore,\n} from '../../../common'\nimport { DATE_FORMATS_INTL, formatDate } from '../../../core/constants'\nimport { RecurrenceStatus, RecurrenceType } from '../../../core'\n\nimport { IncomeBadge, MissedBadge, PaidBadge, UpcomingExpenseBadge } from '../RecurrenceBadges'\n\nexport const RecurrenceDay = observer(\n ({ day, outsideCurrentMonth, ...other }: PickersDayProps<Date>) => {\n const { recurring: copy } = useGlobalCopyStore()\n const { selectedAccountGuids } = useGlobalUiStore()\n const { recurrences, setSelectedDay } = useRecurringTransactionsStore()\n\n const filteredRecurrences = React.useMemo(\n () =>\n recurrences.filter((recurrence) => selectedAccountGuids.includes(recurrence.accountGuid)),\n [selectedAccountGuids, recurrences],\n )\n\n const dayRecurrences = filteredRecurrences.filter((a) =>\n isSameDay(a.occurredOnDate || a.expectedDate, day),\n )\n const hasUpcoming = dayRecurrences.some(\n (a) => a.type !== RecurrenceType.Income && a.status === RecurrenceStatus.Upcoming,\n )\n const hasMissed = dayRecurrences.some(\n (a) => a.type !== RecurrenceType.Income && a.status === RecurrenceStatus.Missed,\n )\n const hasPaid = dayRecurrences.some(\n (a) => a.type !== RecurrenceType.Income && a.status === RecurrenceStatus.Paid,\n )\n const hasIncome = dayRecurrences.some((a) => a.type === RecurrenceType.Income)\n\n const totalBadges =\n (hasUpcoming ? 1 : 0) + (hasMissed ? 1 : 0) + (hasPaid ? 1 : 0) + (hasIncome ? 1 : 0)\n\n const statusParts = [\n hasPaid && copy.paid,\n hasMissed && copy.missed,\n hasUpcoming && copy.upcoming,\n hasIncome && copy.income,\n ].filter(Boolean) as string[]\n\n const ariaLabel =\n statusParts.length > 0\n ? `${formatDate(day, DATE_FORMATS_INTL.MONTH_DAY_YEAR)}, ${statusParts.join(', ')}`\n : formatDate(day, DATE_FORMATS_INTL.MONTH_DAY_YEAR)\n\n return (\n <Badge\n badgeContent={\n dayRecurrences.length > 0 && (\n <>\n {hasMissed && <MissedBadge isOffset={true} />}\n {hasPaid && <PaidBadge isOffset={true} />}\n {hasUpcoming && <UpcomingExpenseBadge isOffset={true} />}\n {hasIncome && <IncomeBadge isOffset={true} />}\n </>\n )\n }\n overlap=\"circular\"\n sx={{\n '& .MuiBadge-badge': {\n padding: 0,\n marginRight: `${(totalBadges - 1) * 6 + 1}px`,\n flexWrap: 'nowrap',\n },\n }}\n >\n <PickersDay\n aria-label={ariaLabel}\n day={day}\n onClick={() => setSelectedDay(day)}\n outsideCurrentMonth={outsideCurrentMonth}\n sx={{\n '&.MuiPickersDay-root': {\n ...(outsideCurrentMonth && {\n color: 'text.disabled',\n }),\n ...(other.today && {\n color: 'primary.main',\n }),\n },\n }}\n {...other}\n />\n </Badge>\n )\n },\n)\n","import { observer } from 'mobx-react-lite'\n\nimport Stack from '@mui/material/Stack'\n\nimport { Text } from '@mxenabled/mxui'\nimport { IncomeBadge, MissedBadge, PaidBadge, UpcomingExpenseBadge } from '../RecurrenceBadges'\nimport { useGlobalCopyStore } from '../../../common'\n\ninterface SymbolProps {\n icon: any\n label: string\n}\n\nconst Symbol = ({ icon: Icon, label }: SymbolProps) => (\n <Stack alignItems=\"center\" flexDirection=\"row\" sx={{ gap: 6 }}>\n <Icon />\n <Text variant=\"caption\">{label}</Text>\n </Stack>\n)\n\nexport const Legend = observer(() => {\n const { recurring: copy } = useGlobalCopyStore()\n\n return (\n <Stack\n alignItems=\"center\"\n aria-hidden={true}\n flexDirection=\"row\"\n gap={16}\n justifyContent=\"center\"\n mt={12}\n >\n <Symbol icon={UpcomingExpenseBadge} label={copy.expense} />\n <Symbol icon={IncomeBadge} label={copy.income} />\n <Symbol icon={MissedBadge} label={copy.missed} />\n <Symbol icon={PaidBadge} label={copy.paid} />\n </Stack>\n )\n})\n","import React from 'react'\nimport { observer } from 'mobx-react-lite'\nimport { endOfMonth } from 'date-fns/endOfMonth'\nimport { getWeeksInMonth } from 'date-fns/getWeeksInMonth'\nimport { startOfMonth } from 'date-fns/startOfMonth'\nimport { Locale } from 'date-fns'\nimport { enCA } from 'date-fns/locale/en-CA'\nimport { enUS } from 'date-fns/locale/en-US'\nimport { es } from 'date-fns/locale/es'\nimport { fr } from 'date-fns/locale/fr'\nimport { frCA } from 'date-fns/locale/fr-CA'\n\nimport { Text } from '@mxenabled/mxui'\nimport Stack from '@mui/material/Stack'\nimport { useTheme } from '@mui/material/styles'\n\nimport { AdapterDateFns } from '@mui/x-date-pickers/AdapterDateFnsV3'\nimport { DateCalendar } from '@mui/x-date-pickers/DateCalendar'\nimport { LocalizationProvider } from '@mui/x-date-pickers/LocalizationProvider'\n\nimport {\n ANALYTICS_EVENTS,\n TOUCH_TARGET,\n useEvent,\n useRecurringTransactionsStore,\n useGlobalCopyStore,\n} from '../../../common'\nimport { getLocale, LOCALES } from '../../../core'\n\nimport { RecurrenceDay } from './RecurrenceDay'\nimport { Legend } from './Legend'\n\nconst HEADER_HEIGHT = 58\n\nconst getDateFnsLocale = () => {\n const locale = getLocale()\n const localeMap: Record<string, Locale> = {\n [LOCALES.EN_US]: enUS,\n [LOCALES.EN_CA]: enCA,\n [LOCALES.FR]: fr,\n [LOCALES.FR_CA]: frCA,\n [LOCALES.ES]: es,\n }\n return localeMap[locale] || enUS\n}\n\nexport const RecurrenceCalendar = observer(() => {\n const theme = useTheme()\n const { onEvent } = useEvent()\n const { recurring: copy } = useGlobalCopyStore()\n const { selectedDay, setDateRange } = useRecurringTransactionsStore()\n const [calendarHeight, setCalendarHeight] = React.useState(\n getWeeksInMonth(new Date()) * TOUCH_TARGET + HEADER_HEIGHT,\n )\n\n const handleMonthChange = (date: Date) => {\n setCalendarHeight(getWeeksInMonth(date) * TOUCH_TARGET + HEADER_HEIGHT)\n setDateRange({\n start: startOfMonth(date),\n end: endOfMonth(date),\n })\n handleDateChange(date)\n onEvent(ANALYTICS_EVENTS.RECURRING_TRANSACTIONS_CLICK_CALENDAR_RIGHT)\n }\n\n const handleDateChange = (date: Date | null) => {\n if (!date) return\n\n requestAnimationFrame(() => {\n const recurrenceList = document.getElementById('recurrence-list')\n recurrenceList?.setAttribute('tabindex', '-1')\n recurrenceList?.focus()\n })\n }\n\n const calendar = (\n <DateCalendar\n minDate={startOfMonth(new Date())}\n onChange={handleDateChange}\n onMonthChange={handleMonthChange}\n showDaysOutsideCurrentMonth={true}\n slots={{\n day: RecurrenceDay,\n }}\n sx={{\n '& .MuiPickersArrowSwitcher-button': {\n color: 'primary.main',\n '&:disabled': {\n color: 'action.disabled',\n },\n },\n '& .MuiButtonBase-root.MuiPickersDay-root': {\n borderRadius: '4px',\n '&:focus, &:hover': {\n borderRadius: '4px',\n },\n },\n '& .MuiPickersCalendarHeader-root': {\n mt: 0,\n pl: 16,\n pr: 8,\n },\n '& .MuiPickersCalendarHeader-label': {\n fontFamily: theme.typography.body1.fontFamily,\n fontSize: theme.typography.body1.fontSize,\n fontWeight: 600,\n },\n '& .MuiDayCalendar-slideTransition': {\n minHeight: calendarHeight,\n },\n '&.MuiDateCalendar-root': {\n minHeight: calendarHeight + TOUCH_TARGET,\n },\n '& .MuiButtonBase-root, .MuiDayCalendar-weekDayLabel': {\n height: TOUCH_TARGET,\n width: TOUCH_TARGET,\n margin: 0,\n },\n '& .MuiDayCalendar-weekDayLabel': {\n fontFamily: theme.typography.h3.fontFamily,\n fontSize: theme.typography.body2.fontSize,\n },\n '& .MuiPickersDay-dayOutsideMonth': {\n color: 'text.secondary',\n },\n textTransform: 'capitalize',\n }}\n value={selectedDay}\n views={['day']}\n />\n )\n\n return (\n <Stack aria-labelledby=\"calendar-label\" justifyContent=\"center\" role=\"group\">\n <LocalizationProvider adapterLocale={getDateFnsLocale()} dateAdapter={AdapterDateFns}>\n {/*NOTE: This seems odd, but because the DateCalendar cannot go from a controlled\n /* calendar to an un-controlled calendar, we have to create 2 different instances\n /* when there a selectedDay and when selectedDay is undefined */}\n {selectedDay && calendar}\n {!selectedDay && calendar}\n\n <Text id=\"calendar-label\" sx={{ alignSelf: 'center' }} variant=\"body2\">\n {copy.calendar_tooltip}\n </Text>\n <Legend />\n </LocalizationProvider>\n </Stack>\n )\n})\n","import React from 'react'\n\nimport ListItem from '@mui/material/ListItem'\nimport ListItemAvatar from '@mui/material/ListItemAvatar'\nimport ListItemButton from '@mui/material/ListItemButton'\nimport ListItemText from '@mui/material/ListItemText'\nimport Stack from '@mui/material/Stack'\n\nimport { CheckCircle, Cancel } from '@mxenabled/mx-icons'\nimport { InstitutionLogo, MerchantLogo, Text } from '@mxenabled/mxui'\n\nimport { useGlobalCopyStore, useRecurringTransactionsStore } from '../../common'\nimport { DATE_FORMATS_INTL, formatDate } from '../../core/constants'\nimport {\n type Recurrence,\n type RecurringCopy,\n RecurrenceStatus,\n RecurrenceType,\n RepeatingTransaction,\n} from '../../core'\n\nimport { getFrequencyLabel } from '../../core/utils/RecurringTransactionsUtil'\n\nimport { IncomeBadge, MissedBadge, PaidBadge, UpcomingExpenseBadge } from './RecurrenceBadges'\nimport { formatCurrency } from '../../core/utils/NumberFormatting'\nimport { buildDynamicCopy } from '../../core/utils/Localization'\n\nconst getStatusIcon = (recurrence: Recurrence): React.ReactNode => {\n if (recurrence.type === RecurrenceType.Income) {\n return <IncomeBadge />\n }\n\n switch (recurrence.status) {\n case RecurrenceStatus.Missed:\n return <MissedBadge />\n case RecurrenceStatus.Paid:\n return <PaidBadge />\n default:\n return <UpcomingExpenseBadge />\n }\n}\n\nconst getStatus = (recurrence: Recurrence, copy: RecurringCopy): string => {\n switch (recurrence.status) {\n case RecurrenceStatus.Paid:\n return recurrence.expectedDate\n ? (buildDynamicCopy(\n copy.paid_on,\n formatDate(\n recurrence.occurredOnDate || recurrence.expectedDate,\n DATE_FORMATS_INTL.MONTH_DAY,\n ),\n ) as string)\n : copy.paid\n case RecurrenceStatus.Missed:\n return buildDynamicCopy(\n copy.missed_on,\n formatDate(recurrence.expectedDate, DATE_FORMATS_INTL.MONTH_DAY),\n ) as string\n case RecurrenceStatus.Upcoming:\n return buildDynamicCopy(\n copy.upcoming_on,\n formatDate(recurrence.expectedDate, DATE_FORMATS_INTL.MONTH_DAY),\n ) as string\n default:\n return copy.unknown\n }\n}\n\ninterface RecurrenceRowProps {\n recurrence: Recurrence\n isMini?: boolean\n onRecurrenceClick?: (recurrence: Recurrence) => void\n showOrdinal?: boolean\n}\n\nexport const RecurrenceRow = ({\n recurrence,\n isMini = false,\n onRecurrenceClick = () => {},\n showOrdinal = false,\n}: RecurrenceRowProps) => {\n const { recurring: copy } = useGlobalCopyStore()\n const { detailedRepeatingTransactions } = useRecurringTransactionsStore()\n\n const repeatingTransaction = React.useMemo(\n () =>\n detailedRepeatingTransactions.find((rt) => rt.guid === recurrence.repeatingTransactionGuid),\n [recurrence, detailedRepeatingTransactions],\n )\n\n const isCredit = recurrence.type === RecurrenceType.Income\n const isPaid = recurrence.status === RecurrenceStatus.Paid\n const isMissed = recurrence.status === RecurrenceStatus.Missed\n const isUpcoming = recurrence.status === RecurrenceStatus.Upcoming\n\n let statusLabel = copy.paid?.toLowerCase()\n if (isMissed) {\n statusLabel = copy.missed?.toLowerCase()\n } else if (isUpcoming) {\n statusLabel = showOrdinal\n ? getFrequencyLabel(copy, repeatingTransaction || ({} as RepeatingTransaction), true)\n : getFrequencyLabel(copy, repeatingTransaction || ({} as RepeatingTransaction), false)\n }\n\n const onItemClick = () => {\n onRecurrenceClick(recurrence)\n }\n\n return (\n //TODO: implement common/components/ListItemRow.tsx\n <ListItem disableGutters={true} disablePadding={true}>\n <ListItemButton onClick={onItemClick}>\n <ListItemAvatar>\n <MerchantLogo\n categoryGuid={recurrence.categoryGuid}\n merchantGuid={recurrence.merchantGuid}\n />\n </ListItemAvatar>\n <ListItemText>\n <Stack\n direction=\"row\"\n gap={4}\n sx={{ justifyContent: 'space-between', textOverflow: 'ellipsis', textWrap: 'nowrap' }}\n >\n <Stack direction=\"column\" width=\"50%\">\n <Text bold={true} variant=\"body1\">\n {recurrence.name}\n </Text>\n <Stack alignItems=\"center\" direction=\"row\" gap={6}>\n {isMini ? (\n <Stack direction=\"row\" gap={4}>\n {getStatusIcon(recurrence)}\n <Text variant=\"caption\">{getStatus(recurrence, copy)}</Text>\n </Stack>\n ) : (\n <>\n {recurrence.institutionGuid && (\n <InstitutionLogo\n alt=\"\"\n institutionGuid={recurrence.institutionGuid}\n size={12}\n />\n )}\n <Text sx={{ maxWidth: 250 }} variant=\"caption\">\n {recurrence.institutionName}\n </Text>\n </>\n )}\n </Stack>\n </Stack>\n\n <Stack alignItems=\"flex-end\" width=\"100%\">\n <Text bold={true} color={isCredit ? 'success.main' : 'text.primary'} variant=\"body1\">\n {isCredit ? '+' : ''}\n {formatCurrency(recurrence.amount, '0,0.00')}\n </Text>\n {!isMini && (\n <Stack\n direction=\"row\"\n sx={{\n alignItems: 'center',\n gap: 6,\n justifyContent: 'flex-end',\n textTransform: 'uppercase',\n width: '100%',\n }}\n >\n {isPaid && <CheckCircle color=\"success\" filled={true} size={12} />}\n {isMissed && <Cancel color=\"error\" filled={true} size={12} />}\n <Text bold={true} color=\"text.secondary\" variant=\"caption\">\n {statusLabel}\n </Text>\n </Stack>\n )}\n </Stack>\n </Stack>\n </ListItemText>\n </ListItemButton>\n </ListItem>\n )\n}\n","import React from 'react'\nimport { observer } from 'mobx-react-lite'\n\nimport Button from '@mui/material/Button'\nimport Divider from '@mui/material/Divider'\nimport List from '@mui/material/List'\nimport ListItem from '@mui/material/ListItem'\nimport ListSubheader from '@mui/material/ListSubheader'\nimport Stack from '@mui/material/Stack'\nimport { type SxProps } from '@mui/material/styles'\n\nimport { H3, Text } from '@mxenabled/mxui'\n\nimport { useGlobalCopyStore } from '../../common'\nimport { DATE_FORMATS_INTL, formatDate } from '../../core/constants'\nimport { type Recurrence } from '../../core'\n\nimport { groupRecurrencesByDate } from '../../core/utils/RecurringTransactionsUtil'\n\nimport { RecurrenceRow } from './RecurrenceRow'\n\ninterface RecurrenceListProps {\n recurrences: Recurrence[]\n isMini?: boolean\n onResetClick?: () => void\n onRecurrenceClick?: (recurrence: Recurrence) => void\n sx?: SxProps\n title?: string\n}\n\nexport const RecurrenceList = observer(\n ({\n recurrences,\n isMini = false,\n onResetClick,\n onRecurrenceClick,\n sx = {},\n title,\n }: RecurrenceListProps) => {\n const { recurring: copy } = useGlobalCopyStore()\n\n const groupedRecurrences = React.useMemo(() => {\n return groupRecurrencesByDate(recurrences)\n }, [recurrences])\n\n return (\n <Stack id=\"recurrence-list\" sx={{ gap: 8, mt: 4, ...sx }} tabIndex={-1}>\n {title && (\n <Stack\n sx={{\n alignItems: 'center',\n flexDirection: 'row',\n justifyContent: 'space-between',\n px: 24,\n }}\n >\n <H3 bold={true} variant=\"body1\">\n {title}\n </H3>\n {onResetClick && (\n <Button onClick={onResetClick} size=\"small\" variant=\"text\">\n {copy.reset}\n </Button>\n )}\n </Stack>\n )}\n\n {recurrences.length === 0 ? (\n <Text fontStyle=\"italic\" sx={{ py: 24, textAlign: 'center' }}>\n {copy.no_activities}\n </Text>\n ) : (\n <List aria-label={title}>\n {isMini\n ? recurrences.map((recurrence, index) => (\n <React.Fragment key={`recurrence-${index}`}>\n <RecurrenceRow\n isMini={isMini}\n onRecurrenceClick={onRecurrenceClick}\n recurrence={recurrence}\n />\n <Divider sx={{ mx: 24 }} />\n </React.Fragment>\n ))\n : groupedRecurrences.map((group, index) => (\n <React.Fragment key={`recurrence-${index}`}>\n <ListItem key={group.id}>\n <List\n aria-labelledby={`date-group-header-${group.id}`}\n subheader={\n <ListSubheader\n aria-hidden=\"true\"\n id={`date-group-header-${group.id}`}\n role=\"presentation\"\n sx={{ bgcolor: 'background.paper', ml: 8, pb: 4, pt: 12 }}\n >\n <Text bold={true} variant=\"caption\">\n {formatDate(group.date, DATE_FORMATS_INTL.DAY_OF_WEEK_MONTH_DAY)}\n </Text>\n </ListSubheader>\n }\n sx={{ width: '100%' }}\n >\n {group.recurrences.map((recurrence, index) => (\n <React.Fragment key={`day-recurrence-${index}`}>\n <RecurrenceRow\n isMini={isMini}\n onRecurrenceClick={onRecurrenceClick}\n recurrence={recurrence}\n />\n </React.Fragment>\n ))}\n </List>\n </ListItem>\n <Divider sx={{ mx: 24 }} />\n </React.Fragment>\n ))}\n </List>\n )}\n </Stack>\n )\n },\n)\n","import React from 'react'\nimport { observer } from 'mobx-react-lite'\n\nimport Box from '@mui/material/Box'\nimport Stack from '@mui/material/Stack'\nimport { useTheme } from '@mui/material/styles'\n\nimport { Text } from '@mxenabled/mxui'\n\nimport { StatusBar, useGlobalCopyStore, useScreenSize } from '../../common'\nimport { formatCurrency } from '../../core/utils/NumberFormatting'\ninterface RecurringStatusProps {\n expected: number\n isExpense?: boolean\n missed?: number\n paid: number\n title: string\n total: number\n upcoming: number\n}\n\nexport const RecurringStatus = observer(\n ({ expected, isExpense = true, missed, paid, title, total, upcoming }: RecurringStatusProps) => {\n const theme = useTheme()\n const { isSmallMobile } = useScreenSize()\n const { recurring: recurringCopy } = useGlobalCopyStore()\n\n const data = React.useMemo(() => {\n const recurrence = [{ color: theme.palette.success.main, percentage: `${paid / expected}` }]\n if (missed) {\n recurrence.push({ color: theme.palette.error.main, percentage: `${missed / expected}` })\n }\n return recurrence\n }, [paid, expected, missed])\n\n return (\n <Stack>\n <Stack sx={{ flexDirection: 'row', justifyContent: 'space-between', pb: 12 }}>\n <Text bold={true} variant=\"body1\">\n {`${title} (${total})`}\n </Text>\n <Text bold={true} color={isExpense ? 'text.primary' : 'success.main'} variant=\"body1\">\n {`${isExpense ? '-' : '+'}${formatCurrency(expected, '0,0.00')}`}\n </Text>\n </Stack>\n\n <StatusBar data={data} height={12} />\n\n <Stack sx={{ alignItems: 'center', flexDirection: 'row', gap: 2, my: 8 }}>\n <Box sx={{ bgcolor: 'success.main', height: 8, mr: 8, width: 8 }} />\n {!isSmallMobile && (\n <Text bold={true} variant=\"body2\">\n {formatCurrency(paid, '0,0.00')}\n </Text>\n )}\n <Text variant=\"caption\">{recurringCopy.paid?.toLowerCase()}</Text>\n\n {missed !== undefined && (\n <>\n <Box sx={{ bgcolor: 'error.main', height: 8, ml: 16, mr: 8, width: 8 }} />\n {!isSmallMobile && (\n <Text bold={true} variant=\"body2\">\n {formatCurrency(missed, '0,0.00')}\n </Text>\n )}\n <Text variant=\"caption\">{recurringCopy.missed?.toLowerCase()}</Text>\n </>\n )}\n\n <Box sx={{ bgcolor: 'divider', height: 8, ml: 16, mr: 8, width: 8 }} />\n {!isSmallMobile && (\n <Text bold={true} variant=\"body2\">\n {formatCurrency(upcoming, '0,0.00')}\n </Text>\n )}\n <Text variant=\"caption\">{recurringCopy.upcoming?.toLowerCase()}</Text>\n </Stack>\n </Stack>\n )\n },\n)\n","import { observer } from 'mobx-react-lite'\n\nimport { Drawer, useGlobalCopyStore, useRecurringTransactionsStore } from '../../common'\nimport { RepeatingType } from '../../core'\n\nimport { RecurringTransactionDetails } from './RecurringTransactionDetails'\n\nexport const RecurringTransactionDetailsDrawer = observer(() => {\n const { recurring: copy } = useGlobalCopyStore()\n const {\n selectedRecurrence,\n selectedRepeatingTransaction,\n setSelectedRecurrence,\n setSelectedRepeatingTransactionGuid,\n } = useRecurringTransactionsStore()\n\n const handleClose = () => {\n setSelectedRepeatingTransactionGuid(null)\n setSelectedRecurrence(null)\n }\n\n return (\n <Drawer\n ariaLabelClose={copy.close_drawer_aria}\n isOpen={!!selectedRepeatingTransaction}\n onClose={handleClose}\n title={\n selectedRepeatingTransaction?.repeating_transaction_type === RepeatingType.Income\n ? copy.income_details\n : copy.expense_details\n }\n >\n {selectedRepeatingTransaction && (\n <RecurringTransactionDetails\n onDeleted={handleClose}\n recurringTransaction={selectedRepeatingTransaction}\n selectedRecurrence={selectedRecurrence}\n />\n )}\n </Drawer>\n )\n})\n","import React from 'react'\nimport { observer } from 'mobx-react-lite'\nimport { addMonths } from 'date-fns/addMonths'\nimport { startOfMonth } from 'date-fns/startOfMonth'\nimport { endOfMonth } from 'date-fns/endOfMonth'\nimport { subMonths } from 'date-fns/subMonths'\nimport { isBefore } from 'date-fns/isBefore'\n\nimport Grid from '@mui/material/Grid'\nimport IconButton from '@mui/material/IconButton'\nimport Stack from '@mui/material/Stack'\nimport Tab from '@mui/material/Tab'\nimport Tabs from '@mui/material/Tabs'\n\nimport { ChevronLeft, ChevronRight } from '@mxenabled/mx-icons'\n\nimport { H2, Text } from '@mxenabled/mxui'\n\nimport {\n ANALYTICS_EVENTS,\n useEvent,\n useGlobalCopyStore,\n useRecurringTransactionsStore,\n useScreenSize,\n useWidgetContainerProvider,\n} from '../../common'\nimport { DATE_FORMATS_INTL, formatDate } from '../../core/constants'\nimport { type Recurrence } from '../../core'\n\nimport { RecurrenceCalendar } from './recurrencecalendar/RecurrenceCalendar'\nimport { RecurrenceList } from './RecurrenceList'\nimport { RecurringStatus } from './RecurringStatus'\nimport { RecurringTransactionDetailsDrawer } from './RecurringTransactionDetailsDrawer'\nimport { buildDynamicCopy } from '../../core/utils/Localization'\n\nexport const RecurringTransactions = observer(() => {\n const { recurring: copy } = useGlobalCopyStore()\n const { availableWidth } = useWidgetContainerProvider()\n const { isDesktop, isSmallMobile, isMobile } = useScreenSize(availableWidth)\n\n const { onEvent } = useEvent()\n const {\n currentMonthExpenses,\n currentMonthIncome,\n dateRange,\n expenseTotal,\n incomeTotal,\n missedExpenseTotal,\n pastRecurrences,\n paidExpenseTotal,\n paidIncomeTotal,\n selectedDay,\n selectedDayRecurrences,\n setDateRange,\n setSelectedRecurrence,\n setSelectedRepeatingTransactionGuid,\n upcomingExpenseTotal,\n upcomingIncomeTotal,\n upcomingRecurrences,\n } = useRecurringTransactionsStore()\n\n const [selectedTab, setSelectedTab] = React.useState(0)\n\n const isPreviousMonthDisabled = isBefore(dateRange.start, new Date())\n\n const handleTabChange = (_event: React.SyntheticEvent, newValue: number) => {\n setSelectedTab(newValue)\n }\n\n const onUpcomingRecurrenceClick = (recurrence: Recurrence) => {\n setSelectedRepeatingTransactionGuid(recurrence.repeatingTransactionGuid)\n setSelectedRecurrence(recurrence)\n onEvent(ANALYTICS_EVENTS.RECURRING_TRANSACTIONS_CLICK_UPCOMING, {\n transaction_guid: recurrence.transaction?.guid,\n })\n }\n\n const onPaidRecurrenceClick = (recurrence: Recurrence) => {\n setSelectedRepeatingTransactionGuid(recurrence.repeatingTransactionGuid)\n setSelectedRecurrence(recurrence)\n onEvent(ANALYTICS_EVENTS.RECURRING_TRANSACTIONS_CLICK_PAID, {\n transaction_guid: recurrence.transaction?.guid,\n })\n }\n\n const onNextMonthClick = () => {\n const nextMonth = addMonths(dateRange.start, 1)\n setDateRange({\n start: startOfMonth(nextMonth),\n end: endOfMonth(nextMonth),\n })\n }\n\n const onPreviousMonthClick = () => {\n const lastMonth = subMonths(dateRange.start, 1)\n setDateRange({\n start: startOfMonth(lastMonth),\n end: endOfMonth(lastMonth),\n })\n }\n\n return (\n <Grid\n container={true}\n sx={{\n pt: 16,\n }}\n >\n <Grid size={{ sm: 12, md: 'grow' }} width={'100%'}>\n <Stack sx={{ gap: 16, px: isDesktop ? 48 : 24 }}>\n <Stack alignItems=\"center\" direction=\"row\" justifyContent=\"space-between\">\n <H2 variant=\"h3\">\n {\n buildDynamicCopy(\n copy.header_title,\n formatDate(dateRange.start, DATE_FORMATS_INTL.MONTH_LONG),\n ) as string\n }\n </H2>\n {!isDesktop && (\n <Stack direction=\"row\" gap={4}>\n <IconButton\n color=\"primary\"\n disabled={isPreviousMonthDisabled}\n onClick={onPreviousMonthClick}\n >\n <ChevronLeft />\n </IconButton>\n <IconButton color=\"primary\" onClick={onNextMonthClick}>\n <ChevronRight />\n </IconButton>\n </Stack>\n )}\n </Stack>\n\n <RecurringStatus\n expected={expenseTotal}\n missed={missedExpenseTotal}\n paid={paidExpenseTotal}\n title={copy.expenses}\n total={currentMonthExpenses.length}\n upcoming={upcomingExpenseTotal}\n />\n\n <RecurringStatus\n expected={incomeTotal}\n isExpense={false}\n paid={paidIncomeTotal}\n title={copy.deposits}\n total={currentMonthIncome.length}\n upcoming={upcomingIncomeTotal}\n />\n\n {isDesktop && (\n <RecurrenceList\n onRecurrenceClick={onUpcomingRecurrenceClick}\n recurrences={upcomingRecurrences}\n title={copy.upcoming_activity}\n />\n )}\n </Stack>\n {!isDesktop && (\n <Stack sx={{ px: isMobile ? 0 : 24 }}>\n <Tabs onChange={handleTabChange} value={selectedTab} variant=\"fullWidth\">\n <Tab\n label={\n <Text bold={true} sx={{ textTransform: 'none' }} variant=\"body1\">\n {isSmallMobile ? copy.upcoming : copy.upcoming_activity}\n </Text>\n }\n />\n <Tab\n label={\n <Text bold={true} sx={{ textTransform: 'none' }} variant=\"body1\">\n {isSmallMobile ? copy.past : copy.past_transactions}\n </Text>\n }\n />\n </Tabs>\n {selectedTab === 0 && (\n <RecurrenceList\n onRecurrenceClick={onUpcomingRecurrenceClick}\n recurrences={upcomingRecurrences}\n />\n )}\n {selectedTab === 1 && (\n <RecurrenceList\n onRecurrenceClick={onPaidRecurrenceClick}\n recurrences={pastRecurrences}\n />\n )}\n </Stack>\n )}\n </Grid>\n\n {isDesktop && (\n <Grid size={{ xs: 'auto' }} sx={{ minWidth: 450 }}>\n <Stack gap={24}>\n <RecurrenceCalendar />\n <RecurrenceList\n onRecurrenceClick={onPaidRecurrenceClick}\n recurrences={selectedDayRecurrences || pastRecurrences}\n title={\n selectedDay\n ? (buildDynamicCopy(\n copy.day_transactions,\n formatDate(selectedDay, DATE_FORMATS_INTL.MONTH_DAY),\n ) as string)\n : copy.past_transactions\n }\n />\n </Stack>\n </Grid>\n )}\n\n <RecurringTransactionDetailsDrawer />\n </Grid>\n )\n})\n","import React from 'react'\nimport { observer } from 'mobx-react-lite'\nimport { endOfMonth } from 'date-fns/endOfMonth'\nimport { endOfToday } from 'date-fns/endOfToday'\nimport { startOfMonth } from 'date-fns/startOfMonth'\nimport { startOfToday } from 'date-fns/startOfToday'\nimport { subDays } from 'date-fns/subDays'\n\nimport Alert from '@mui/material/Alert'\nimport Snackbar from '@mui/material/Snackbar'\n\nimport {\n ANALYTICS_EVENTS,\n Drawer,\n Loader,\n useEvent,\n useGlobalCopyStore,\n useGlobalUiStore,\n useRecurringTransactionsStore,\n useTransactionStore,\n useWidgetLoadTimer,\n WidgetContainer,\n} from '../common'\nimport { type WidgetProps } from '../core'\n\nimport { RecurringSettings } from './components/shared/RecurringSettings'\nimport { RecurringTransactions } from './components/RecurringTransactions'\nimport { SkeletonLoader } from '../common/components/SkeletonLoader'\n\nexport const RecurringTransactionsWidget = observer(\n ({ onBackClick, onMenuClick, sx = {} }: WidgetProps) => {\n const { recurring: copy } = useGlobalCopyStore()\n const { isInitialized, selectedAccountGuids } = useGlobalUiStore()\n const { alert, isDataLoaded, loadRepeatingTransactionData, setAlert, setDateRange } =\n useRecurringTransactionsStore()\n const { setFilter } = useTransactionStore()\n const { onEvent } = useEvent()\n const [isSettingsOpen, setIsSettingsOpen] = React.useState(false)\n\n useWidgetLoadTimer({\n widgetName: 'RecurringTransactionsWidget',\n isLoaded: isDataLoaded,\n })\n\n React.useEffect(() => {\n if (!isDataLoaded) {\n // Load the repeating transactions and related data\n loadRepeatingTransactionData().finally()\n }\n }, [])\n\n React.useEffect(() => {\n // Sets the Transaction filter\n setFilter({\n dateRange: { start: subDays(startOfToday(), 90), end: endOfToday() },\n accounts: selectedAccountGuids,\n })\n // Set the Date Range for Recurring Transactions\n setDateRange({ start: startOfMonth(new Date()), end: endOfMonth(new Date()) })\n }, [selectedAccountGuids])\n\n if (!isInitialized) return <Loader />\n\n return (\n <WidgetContainer\n actions={[\n {\n label: copy.action_title,\n iconName: 'credit_card_gear',\n onClick: () => {\n setIsSettingsOpen(true)\n onEvent(ANALYTICS_EVENTS.RECURRING_TRANSACTIONS_CLICK_SETTINGS)\n },\n },\n ]}\n hasDivider={true}\n onAccountsFilterClick={() => onEvent(ANALYTICS_EVENTS.RECURRING_TRANSACTIONS_CLICK_FILTER)}\n onBackClick={onBackClick}\n onMenuClick={onMenuClick}\n sx={sx}\n title={copy.title}\n >\n {!isDataLoaded ? (\n <SkeletonLoader sx={{ m: 48 }} variant=\"list\" />\n ) : (\n <RecurringTransactions />\n )}\n <Drawer\n ariaLabelClose={copy.close_drawer_aria}\n isOpen={isSettingsOpen}\n onClose={() => setIsSettingsOpen(false)}\n shouldShowHeaderBorders={false}\n title={copy.action_title}\n >\n <RecurringSettings />\n </Drawer>\n <Snackbar\n anchorOrigin={{ vertical: 'bottom', horizontal: 'right' }}\n autoHideDuration={3500}\n onClose={(_event, reason) => {\n if (reason === 'clickaway') return\n setAlert('', alert.severity)\n }}\n open={Boolean(alert.message)}\n >\n <Alert\n onClose={() => setAlert('', alert.severity)}\n severity={alert.severity}\n variant=\"filled\"\n >\n {alert.message}\n </Alert>\n </Snackbar>\n </WidgetContainer>\n )\n },\n)\n","import { observer } from 'mobx-react-lite'\n\nimport Divider from '@mui/material/Divider'\nimport Stack from '@mui/material/Stack'\n\nimport {\n useGlobalCopyStore,\n useRecurringTransactionsStore,\n useWidgetContainerProvider,\n} from '../../common'\nimport { type Recurrence } from '../../core'\nimport { DATE_FORMATS_INTL, formatDate } from '../../core/constants'\n\nimport { RecurrenceCalendar } from './recurrencecalendar/RecurrenceCalendar'\nimport { RecurrenceList } from './RecurrenceList'\nimport { buildDynamicCopy } from '../../core/utils/Localization'\n\nexport const MiniWidgetContent = observer(() => {\n const { recurring: copy } = useGlobalCopyStore()\n const { availableWidth } = useWidgetContainerProvider()\n const {\n selectedDay,\n selectedDayRecurrences,\n setSelectedDay,\n setSelectedRecurrence,\n setSelectedRepeatingTransactionGuid,\n upcomingRecurrences,\n } = useRecurringTransactionsStore()\n\n const onRecurrenceClick = (recurrence: Recurrence) => {\n setSelectedRepeatingTransactionGuid(recurrence.repeatingTransactionGuid)\n setSelectedRecurrence(recurrence)\n }\n\n const isSmall = availableWidth < 750\n\n return (\n <Stack flexDirection={isSmall ? 'column' : 'row'} width=\"100%\">\n <RecurrenceCalendar />\n\n {!isSmall && <Divider flexItem={true} orientation=\"vertical\" sx={{ my: 16, ml: 16 }} />}\n\n <RecurrenceList\n isMini={true}\n onRecurrenceClick={onRecurrenceClick}\n onResetClick={selectedDay ? () => setSelectedDay(selectedDay) : undefined}\n recurrences={selectedDayRecurrences || upcomingRecurrences.slice(0, 5)}\n sx={{ width: isSmall ? '100%' : 'calc(100% - 336px)', mt: 12 }}\n title={\n selectedDay\n ? (buildDynamicCopy(\n copy.day_transactions,\n formatDate(selectedDay, DATE_FORMATS_INTL.MONTH_DAY),\n ) as string)\n : copy.upcoming_activity\n }\n />\n </Stack>\n )\n})\n","import React from 'react'\nimport { observer } from 'mobx-react-lite'\nimport { endOfToday } from 'date-fns/endOfToday'\nimport { startOfToday } from 'date-fns/startOfToday'\nimport { subDays } from 'date-fns/subDays'\n\nimport {\n Loader,\n MiniWidgetContainer,\n useGlobalCopyStore,\n useGlobalUiStore,\n useRecurringTransactionsStore,\n useTransactionStore,\n useWidgetLoadTimer,\n} from '../common'\nimport { type MiniWidgetProps } from '../core'\n\nimport { MiniWidgetContent } from './components/MiniWidgetContent'\nimport { RecurringTransactionDetailsDrawer } from './components/RecurringTransactionDetailsDrawer'\nimport { SkeletonLoader } from '../common/components/SkeletonLoader'\n\nexport const RecurringTransactionsMiniWidget = observer(\n ({ onPrimaryCtaClick, sx }: MiniWidgetProps) => {\n const { recurring: copy } = useGlobalCopyStore()\n const { setFilter } = useTransactionStore()\n const { isDataLoaded, loadRepeatingTransactionData } = useRecurringTransactionsStore()\n const { isInitialized, selectedAccountGuids } = useGlobalUiStore()\n\n useWidgetLoadTimer({\n widgetName: 'RecurringTransactionsMiniWidget',\n isLoaded: isDataLoaded,\n })\n\n React.useEffect(() => {\n if (!isDataLoaded) {\n loadRepeatingTransactionData().finally()\n }\n }, [])\n\n React.useEffect(() => {\n if (selectedAccountGuids.length > 0) {\n setFilter({\n dateRange: { start: subDays(startOfToday(), 90), end: endOfToday() },\n accounts: selectedAccountGuids,\n })\n }\n }, [selectedAccountGuids])\n\n if (!isInitialized) return <Loader />\n\n return (\n <MiniWidgetContainer\n className=\"mx-exp-recurring-transactions-miniwidget\"\n onPrimaryCtaClick={onPrimaryCtaClick}\n primaryCtaLabel={copy.primary_cta}\n primaryCtaLabelAria={copy.primary_cta_aria}\n subTitle={copy.sub_title}\n sx={sx}\n title={copy.mini_title}\n >\n {isDataLoaded ? <MiniWidgetContent /> : <SkeletonLoader sx={{ mx: 16 }} variant=\"list\" />}\n\n <RecurringTransactionDetailsDrawer />\n </MiniWidgetContainer>\n )\n },\n)\n","import Stack from '@mui/material/Stack'\n\nimport { CurrencyExchange } from '@mxenabled/mx-icons'\n\nimport { P } from '@mxenabled/mxui'\n\nimport { observer } from 'mobx-react-lite'\n\nimport { useGlobalCopyStore } from '../common'\n\nexport const ZeroStateMicroWidget = observer(() => {\n const { recurring: recurringCopy } = useGlobalCopyStore()\n\n return (\n <Stack sx={{ alignItems: 'start', flexDirection: 'row', gap: 12 }}>\n <CurrencyExchange size={32} />\n <Stack>\n <P fontWeight={600} variant=\"body1\">\n {recurringCopy.zero_state_content_header}\n </P>\n <P color=\"text.secondary\" variant=\"subtitle2\">\n {recurringCopy.zero_state_content_description}\n </P>\n </Stack>\n </Stack>\n )\n})\n","import Box from '@mui/material/Box'\nimport Stack from '@mui/material/Stack'\nimport { Text } from '@mxenabled/mxui'\nimport { formatCurrency } from '../../../core/utils/NumberFormatting'\ntype RecurringSettingsProps = {\n amount: number\n bgcolor: string\n isLargeScreen: boolean\n isSmallScreen: boolean\n label: string\n}\n\nexport const RecurrenceLegend = ({\n amount,\n bgcolor,\n isLargeScreen,\n isSmallScreen,\n label,\n}: RecurringSettingsProps) => (\n <Stack sx={{ alignItems: 'center', flexDirection: 'row', gap: 8 }}>\n <Box\n sx={{\n borderRadius: '2px',\n bgcolor,\n height: 8,\n width: 8,\n }}\n />\n\n <Stack sx={{ alignItems: 'center', flexDirection: 'row', gap: 2 }}>\n {!isSmallScreen && (\n <Text bold={true} variant=\"caption\">\n {formatCurrency(amount, amount === 0 || !isLargeScreen ? '0,0' : '0,0.00')}\n </Text>\n )}\n <Text variant=\"caption\">{label}</Text>\n </Stack>\n </Stack>\n)\n","import React from 'react'\nimport Box from '@mui/material/Box'\nimport { MerchantLogo } from '@mxenabled/mxui'\nimport { Recurrence } from '../../../core'\n\ninterface OverlappingMerchantLogosProps {\n upcomingRecurrences: Recurrence[]\n logoSize?: number\n maxLogos?: number\n}\n\nexport const OverlappingMerchantLogos: React.FC<OverlappingMerchantLogosProps> = ({\n upcomingRecurrences,\n logoSize = 32,\n maxLogos = 3,\n}) => {\n const ICON_OVERLAP_X = (i: number) => i * (logoSize / 2)\n\n return (\n <Box\n sx={{\n position: 'relative',\n width: 64,\n }}\n >\n {upcomingRecurrences.map((recurrence, index) => {\n if (index < maxLogos) {\n return (\n <Box\n key={`${recurrence.categoryGuid}-${recurrence.merchantGuid}-${index}`}\n sx={{\n borderRadius: '4px',\n left: ICON_OVERLAP_X(index),\n outlineColor: 'common.white',\n outlineStyle: 'solid',\n outlineWidth: 2,\n position: 'absolute',\n }}\n >\n <MerchantLogo\n categoryGuid={recurrence.categoryGuid || ''}\n merchantGuid={recurrence.merchantGuid || ''}\n size={logoSize}\n />\n </Box>\n )\n }\n return null\n })}\n </Box>\n )\n}\n","import React from 'react'\nimport Stack from '@mui/material/Stack'\nimport { MerchantLogo } from '@mxenabled/mxui'\nimport { Recurrence } from '../../../core'\n\ninterface MerchantLogosRowProps {\n upcomingRecurrences: Recurrence[]\n maxLogos?: number\n}\n\nexport const MerchantLogosRow: React.FC<MerchantLogosRowProps> = ({\n upcomingRecurrences,\n maxLogos = 3,\n}) => {\n return (\n <Stack sx={{ flexDirection: 'row', gap: 4 }}>\n {upcomingRecurrences\n ?.slice(0, maxLogos)\n .map((recurrence, index) => (\n <MerchantLogo\n categoryGuid={recurrence.categoryGuid || ''}\n key={`${recurrence.categoryGuid}-${recurrence.merchantGuid}-${index}`}\n merchantGuid={recurrence.merchantGuid || ''}\n />\n ))}\n </Stack>\n )\n}\n","import React from 'react'\nimport { observer } from 'mobx-react-lite'\n\nimport Stack from '@mui/material/Stack'\nimport { useTheme } from '@mui/material/styles'\n\nimport { P, Text } from '@mxenabled/mxui'\n\nimport { StatusBar, useGlobalCopyStore, useRecurringTransactionsStore } from '../../common'\nimport { useDimensions } from '../../common/hooks/useDimensions'\n\nimport { RecurrenceLegend } from './micro/RecurrenceLegend'\nimport { OverlappingMerchantLogos } from './micro/OverlappingMerchantLogos'\nimport { MerchantLogosRow } from './micro/MerchantLogosRow'\nimport { formatCurrency } from '../../core/utils/NumberFormatting'\n\nexport const MicroWidgetContent = observer(() => {\n const theme = useTheme()\n const [containerRef, { width }] = useDimensions()\n const {\n upcomingRecurrences,\n expenseTotal,\n missedExpenseTotal,\n paidExpenseTotal,\n upcomingExpenseTotal,\n } = useRecurringTransactionsStore()\n const { recurring: copy } = useGlobalCopyStore()\n\n const isSmallScreen = width <= 288\n const isLargeScreen = width >= 450\n const logoSize = 32\n const hasLogos = upcomingRecurrences.length > 0\n\n const expectedExpenseTotalFormatted = React.useMemo(() => {\n return formatCurrency(expenseTotal, expenseTotal === 0 ? '0,0' : '0,0.00')\n }, [expenseTotal])\n\n const data = React.useMemo(() => {\n const recurrence = [\n { color: theme.palette.success.main, percentage: `${paidExpenseTotal / expenseTotal}` },\n ]\n if (missedExpenseTotal) {\n recurrence.push({\n color: theme.palette.error.main,\n percentage: `${missedExpenseTotal / expenseTotal}`,\n })\n }\n return recurrence\n }, [\n paidExpenseTotal,\n expenseTotal,\n missedExpenseTotal,\n theme.palette.success.main,\n theme.palette.error.main,\n ])\n\n const renderLogosSection = () => {\n if (!hasLogos) {\n return <Stack sx={{ width: isSmallScreen ? 64 : 104 }} />\n }\n\n return isSmallScreen ? (\n <OverlappingMerchantLogos\n logoSize={logoSize}\n maxLogos={3}\n upcomingRecurrences={upcomingRecurrences.slice(0, 3)}\n />\n ) : (\n <MerchantLogosRow maxLogos={3} upcomingRecurrences={upcomingRecurrences.slice(0, 3)} />\n )\n }\n\n const recurrenceLegend = [\n {\n amount: paidExpenseTotal,\n bgColor: 'success.main',\n label: copy.paid,\n },\n {\n amount: missedExpenseTotal,\n bgColor: 'error.main',\n label: copy.missed,\n },\n {\n amount: upcomingExpenseTotal,\n bgColor: 'neutral.light',\n label: copy.upcoming,\n },\n ]\n\n return (\n <>\n <Stack ref={containerRef} sx={{ flexDirection: 'row', justifyContent: 'space-between' }}>\n <Stack\n sx={[\n expectedExpenseTotalFormatted.length >= 10 && isSmallScreen\n ? { flexDirection: 'column' }\n : { flexDirection: 'row', gap: 2 },\n {\n alignItems: 'baseline',\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n whiteSpace: 'nowrap',\n },\n ]}\n >\n <Text\n sx={{ width: '100%' }}\n variant={expectedExpenseTotalFormatted.length >= 10 && isSmallScreen ? 'h3' : 'h2'}\n >\n {expectedExpenseTotalFormatted}\n </Text>\n\n <P sx={{ pr: 12 }} variant=\"caption\">\n {copy.expected}\n </P>\n </Stack>\n {renderLogosSection()}\n </Stack>\n\n <Stack sx={{ pt: 12 }}>\n <StatusBar data={data} />\n\n <Stack\n sx={{\n alignItems: 'center',\n flexDirection: 'row',\n gap: 16,\n mt: 4,\n }}\n >\n {recurrenceLegend.map((legend, index) => (\n <RecurrenceLegend\n amount={legend.amount}\n bgcolor={legend.bgColor}\n isLargeScreen={isLargeScreen}\n isSmallScreen={isSmallScreen}\n key={`recurrence-legend-${index}`}\n label={legend.label}\n />\n ))}\n </Stack>\n </Stack>\n </>\n )\n})\n","import React from 'react'\nimport { observer } from 'mobx-react-lite'\nimport { endOfMonth } from 'date-fns/endOfMonth'\nimport { endOfToday } from 'date-fns/endOfToday'\nimport { startOfMonth } from 'date-fns/startOfMonth'\nimport { startOfToday } from 'date-fns/startOfToday'\nimport { subDays } from 'date-fns/subDays'\n\nimport {\n ANALYTICS_EVENTS,\n Loader,\n MicroWidgetContainer,\n useEvent,\n useGlobalCopyStore,\n useGlobalUiStore,\n useRecurringTransactionsStore,\n useTransactionStore,\n useWidgetLoadTimer,\n} from '../common'\n\nimport { ZeroStateMicroWidget } from './ZeroStateMicroWidget'\nimport { MicroWidgetContent } from './components/MicroWidgetContent'\n\ninterface RecurringTransactionsMicroWidgetProps {\n onCTAClick: () => void\n}\n\nexport const RecurringTransactionsMicroWidget = observer(\n ({ onCTAClick }: RecurringTransactionsMicroWidgetProps) => {\n const { onEvent } = useEvent()\n\n const { isInitialized, selectedAccountGuids } = useGlobalUiStore()\n const {\n loadRepeatingTransactionData,\n upcomingRecurrences,\n repeatingTransactions,\n setDateRange,\n isDataLoaded,\n } = useRecurringTransactionsStore()\n const { setFilter } = useTransactionStore()\n const { recurring: copy, budgets: budgetsCopy } = useGlobalCopyStore()\n\n useWidgetLoadTimer({\n widgetName: 'RecurringTransactionsMicroWidget',\n isLoaded: isDataLoaded,\n })\n\n React.useEffect(() => {\n if (!isDataLoaded) {\n // Load the repeating transactions and related data\n loadRepeatingTransactionData().finally(() => {\n onEvent(ANALYTICS_EVENTS.RECURRING_TRANSACTIONS_LOAD_WIDGET, {\n state: upcomingRecurrences.length > 0 ? 'default' : 'zeroState',\n })\n })\n }\n }, [])\n\n React.useEffect(() => {\n if (isInitialized) {\n setFilter({\n dateRange: { start: subDays(startOfToday(), 90), end: endOfToday() },\n accounts: selectedAccountGuids,\n })\n setDateRange({ start: startOfMonth(new Date()), end: endOfMonth(new Date()) })\n }\n }, [isInitialized, selectedAccountGuids])\n\n const handleCTAClick = () => {\n onEvent(\n upcomingRecurrences.length > 0\n ? ANALYTICS_EVENTS.RECURRING_TRANSACTIONS_CLICK_GET_STARTED\n : ANALYTICS_EVENTS.RECURRING_TRANSACTIONS_CLICK_VIEW_ALL,\n )\n onCTAClick()\n }\n\n if (!isInitialized || !isDataLoaded) return <Loader height={100} />\n\n const showZeroState = !repeatingTransactions?.length\n\n return (\n <MicroWidgetContainer\n className=\"mx-recurring-transaction-microwidget\"\n ctaLabel={showZeroState ? budgetsCopy.get_started_cta : copy.primary_cta}\n onCTAClick={handleCTAClick}\n title={copy.recurring_expenses}\n >\n {!showZeroState ? <MicroWidgetContent /> : <ZeroStateMicroWidget />}\n </MicroWidgetContainer>\n )\n },\n)\n","import { observer } from 'mobx-react-lite'\n\nimport { Drawer, useGlobalCopyStore } from '../../common'\n\nimport { RecurringSettings } from './shared/RecurringSettings'\n\ninterface RecurringSettingsDrawerProps {\n isOpen: boolean\n onClose: () => void\n selectedTab?: number\n}\n\nexport const RecurringSettingsDrawer = observer(\n ({ isOpen, onClose, selectedTab }: RecurringSettingsDrawerProps) => {\n const { cashflow: copy } = useGlobalCopyStore()\n\n return (\n <Drawer\n ariaLabelClose={copy.close_settings_aria}\n isOpen={isOpen}\n onClose={onClose}\n title={copy.cashflow_settings}\n >\n <RecurringSettings defaultSelectedTab={selectedTab} />\n </Drawer>\n )\n },\n)\n"],"names":["iconStyle","offsetStyle","isOffset","UpcomingExpenseBadge","size","jsx","IconBacking","Schedule","IncomeBadge","MonetizationOn","MissedBadge","Cancel","PaidBadge","CheckCircle","RecurrenceDay","observer","day","outsideCurrentMonth","other","copy","useGlobalCopyStore","selectedAccountGuids","useGlobalUiStore","recurrences","setSelectedDay","useRecurringTransactionsStore","dayRecurrences","React","recurrence","a","isSameDay","hasUpcoming","RecurrenceType","RecurrenceStatus","hasMissed","hasPaid","hasIncome","totalBadges","statusParts","ariaLabel","formatDate","DATE_FORMATS_INTL","Badge","jsxs","Fragment","PickersDay","Symbol","Icon","label","Stack","Text","Legend","HEADER_HEIGHT","getDateFnsLocale","locale","getLocale","LOCALES","enUS","enCA","fr","frCA","es","RecurrenceCalendar","theme","useTheme","onEvent","useEvent","selectedDay","setDateRange","calendarHeight","setCalendarHeight","getWeeksInMonth","TOUCH_TARGET","handleMonthChange","date","startOfMonth","endOfMonth","handleDateChange","ANALYTICS_EVENTS","recurrenceList","calendar","DateCalendar","LocalizationProvider","AdapterDateFns","getStatusIcon","getStatus","buildDynamicCopy","RecurrenceRow","isMini","onRecurrenceClick","showOrdinal","detailedRepeatingTransactions","repeatingTransaction","rt","isCredit","isPaid","isMissed","isUpcoming","statusLabel","getFrequencyLabel","ListItem","ListItemButton","ListItemAvatar","MerchantLogo","ListItemText","InstitutionLogo","formatCurrency","RecurrenceList","onResetClick","sx","title","groupedRecurrences","groupRecurrencesByDate","H3","Button","List","index","Divider","group","ListSubheader","RecurringStatus","expected","isExpense","missed","paid","total","upcoming","isSmallMobile","useScreenSize","recurringCopy","data","StatusBar","Box","RecurringTransactionDetailsDrawer","selectedRecurrence","selectedRepeatingTransaction","setSelectedRecurrence","setSelectedRepeatingTransactionGuid","handleClose","Drawer","RepeatingType","RecurringTransactionDetails","RecurringTransactions","availableWidth","useWidgetContainerProvider","isDesktop","isMobile","currentMonthExpenses","currentMonthIncome","dateRange","expenseTotal","incomeTotal","missedExpenseTotal","pastRecurrences","paidExpenseTotal","paidIncomeTotal","selectedDayRecurrences","upcomingExpenseTotal","upcomingIncomeTotal","upcomingRecurrences","selectedTab","setSelectedTab","isPreviousMonthDisabled","isBefore","handleTabChange","_event","newValue","onUpcomingRecurrenceClick","onPaidRecurrenceClick","onNextMonthClick","nextMonth","addMonths","onPreviousMonthClick","lastMonth","subMonths","Grid","H2","IconButton","ChevronLeft","ChevronRight","Tabs","Tab","RecurringTransactionsWidget","onBackClick","onMenuClick","isInitialized","alert","isDataLoaded","loadRepeatingTransactionData","setAlert","setFilter","useTransactionStore","isSettingsOpen","setIsSettingsOpen","useWidgetLoadTimer","subDays","startOfToday","endOfToday","WidgetContainer","SkeletonLoader","RecurringSettings","Snackbar","reason","Alert","Loader","MiniWidgetContent","isSmall","RecurringTransactionsMiniWidget","onPrimaryCtaClick","MiniWidgetContainer","ZeroStateMicroWidget","CurrencyExchange","P","RecurrenceLegend","amount","bgcolor","isLargeScreen","isSmallScreen","OverlappingMerchantLogos","logoSize","maxLogos","ICON_OVERLAP_X","i","MerchantLogosRow","MicroWidgetContent","containerRef","width","useDimensions","hasLogos","expectedExpenseTotalFormatted","renderLogosSection","recurrenceLegend","legend","RecurringTransactionsMicroWidget","onCTAClick","repeatingTransactions","budgetsCopy","handleCTAClick","showZeroState","MicroWidgetContainer","RecurringSettingsDrawer","isOpen","onClose"],"mappings":"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"}
|
|
@@ -42,7 +42,7 @@ import { ChevronRight as Le, ChevronLeft as Be } from "@mxenabled/mx-icons";
|
|
|
42
42
|
import { D as He } from "../Drawer-DsnW2o0v.mjs";
|
|
43
43
|
import { u as ne } from "../useWidgetLoadTimer-B0tB-yzL.mjs";
|
|
44
44
|
import { H as Oe } from "../Help-D4sOpItq.mjs";
|
|
45
|
-
import { W as q } from "../WidgetContainer-
|
|
45
|
+
import { W as q } from "../WidgetContainer-CoHQ75sR.mjs";
|
|
46
46
|
const Fe = ({ availableWidth: t, handleOnLeavClick: r }) => {
|
|
47
47
|
const i = L(), { common: o, settings: n } = k(), { isDesktop: u, isMobile: s, isSmallMobile: a, isTablet: l } = F(t), { config: b } = G(), { updateUser: _ } = E(), { user: d } = Ce(), [h, w] = m.useState({
|
|
48
48
|
first_name: d.first_name,
|
|
@@ -31,7 +31,7 @@ import { D as tt } from "../Drawer-DsnW2o0v.mjs";
|
|
|
31
31
|
import { C as w } from "../Category-DEKZGLYe.mjs";
|
|
32
32
|
import { parseISO as et } from "date-fns/parseISO";
|
|
33
33
|
import { A as nt } from "../Analytics-D-jdcL72.mjs";
|
|
34
|
-
import { W as It } from "../WidgetContainer-
|
|
34
|
+
import { W as It } from "../WidgetContainer-CoHQ75sR.mjs";
|
|
35
35
|
const G = ({ amount: n, label: d, variant: o = "full" }) => /* @__PURE__ */ p(y, { direction: "column", children: [
|
|
36
36
|
/* @__PURE__ */ t(T, { bold: !0, sx: { textTransform: "none" }, variant: "body1", children: d }),
|
|
37
37
|
/* @__PURE__ */ t(T, { variant: "caption", children: k(n, o === "mini" ? "0,0" : "0,0.00") })
|
|
@@ -37,7 +37,7 @@ import { u as ut } from "../useAriaLive-MkYebyUR.mjs";
|
|
|
37
37
|
import { S as mt } from "../SkeletonLoader-BaNboJjD.mjs";
|
|
38
38
|
import { u as _t } from "../useScreenSize-mWpmnh5w.mjs";
|
|
39
39
|
import { u as pt } from "../useWidgetLoadTimer-B0tB-yzL.mjs";
|
|
40
|
-
import { W as gt } from "../WidgetContainer-
|
|
40
|
+
import { W as gt } from "../WidgetContainer-CoHQ75sR.mjs";
|
|
41
41
|
import { S as ht } from "../SearchBox-Cpgu_gdO.mjs";
|
|
42
42
|
import { D as te } from "../Drawer-DsnW2o0v.mjs";
|
|
43
43
|
const ft = (t) => /* @__PURE__ */ m(y, { tabIndex: t.tabIndex, variant: "body2", children: [
|
package/dist/trends/index.es.js
CHANGED
|
@@ -39,7 +39,7 @@ import { T as dt } from "../TransactionDetails-Kmj8GUlD.mjs";
|
|
|
39
39
|
import { D as Pe } from "../Drawer-DsnW2o0v.mjs";
|
|
40
40
|
import { u as Ie } from "../useWidgetLoadTimer-B0tB-yzL.mjs";
|
|
41
41
|
import { L as Le } from "../Loader-CxeBwuPG.mjs";
|
|
42
|
-
import { W as ut } from "../WidgetContainer-
|
|
42
|
+
import { W as ut } from "../WidgetContainer-CoHQ75sR.mjs";
|
|
43
43
|
import { L as Ve } from "../LineChart-CUfiH86G.mjs";
|
|
44
44
|
import { M as Qt } from "../MiniWidgetContainer-Bmv_WeUd.mjs";
|
|
45
45
|
import { subMonths as qt } from "date-fns";
|