@mx-cartographer/experiences 4.0.14-alpha.JB1 → 4.0.14-alpha.JB2
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/dist/AccountStore-B23-oV1B.mjs +244 -0
- package/dist/AccountStore-B23-oV1B.mjs.map +1 -0
- package/dist/BeatApi-BxXgbSJY.mjs +99 -0
- package/dist/BeatApi-BxXgbSJY.mjs.map +1 -0
- package/dist/BudgetUtil-BSn9Zr71.mjs +208 -0
- package/dist/BudgetUtil-BSn9Zr71.mjs.map +1 -0
- package/dist/CashflowApi-zcebgnO1.mjs +103 -0
- package/dist/CashflowApi-zcebgnO1.mjs.map +1 -0
- package/dist/CashflowStore-gPEEBiXo.mjs +53 -0
- package/dist/CashflowStore-gPEEBiXo.mjs.map +1 -0
- package/dist/Categories-XVFviD23.mjs +117 -0
- package/dist/Categories-XVFviD23.mjs.map +1 -0
- package/dist/CategoryStore-CSNSMNA6.mjs +298 -0
- package/dist/CategoryStore-CSNSMNA6.mjs.map +1 -0
- package/dist/ConnectMiniWidget-Ep65CtHH.mjs +10854 -0
- package/dist/ConnectMiniWidget-Ep65CtHH.mjs.map +1 -0
- package/dist/DebtsStore-Duf3n1vZ.mjs +127 -0
- package/dist/DebtsStore-Duf3n1vZ.mjs.map +1 -0
- package/dist/Donut-DgMeKScZ.mjs +53 -0
- package/dist/Donut-DgMeKScZ.mjs.map +1 -0
- package/dist/Fetch-DpUi1_Dx.mjs +99 -0
- package/dist/Fetch-DpUi1_Dx.mjs.map +1 -0
- package/dist/GoalStore-BYoRLx99.mjs +128 -0
- package/dist/GoalStore-BYoRLx99.mjs.map +1 -0
- package/dist/MerchantStore-RhLvDvX-.mjs +118 -0
- package/dist/MerchantStore-RhLvDvX-.mjs.map +1 -0
- package/dist/NetWorthStore-syD1VnxE.mjs +66 -0
- package/dist/NetWorthStore-syD1VnxE.mjs.map +1 -0
- package/dist/NotificationStore-CqTYHfJC.mjs +141 -0
- package/dist/NotificationStore-CqTYHfJC.mjs.map +1 -0
- package/dist/RecurringActivityStore-B_COvGWG.mjs +304 -0
- package/dist/RecurringActivityStore-B_COvGWG.mjs.map +1 -0
- package/dist/StackedLineChart-CCqGRwvs.mjs +342 -0
- package/dist/StackedLineChart-CCqGRwvs.mjs.map +1 -0
- package/dist/TransactionStore-BUrjBWkk.mjs +478 -0
- package/dist/TransactionStore-BUrjBWkk.mjs.map +1 -0
- package/dist/index.es.js +12 -17869
- package/dist/index.es.js.map +1 -1
- package/dist/index.es10.js +107 -0
- package/dist/index.es10.js.map +1 -0
- package/dist/index.es11.js +159 -0
- package/dist/index.es11.js.map +1 -0
- package/dist/index.es12.js +483 -0
- package/dist/index.es12.js.map +1 -0
- package/dist/index.es13.js +620 -0
- package/dist/index.es13.js.map +1 -0
- package/dist/index.es14.js +788 -0
- package/dist/index.es14.js.map +1 -0
- package/dist/index.es15.js +891 -0
- package/dist/index.es15.js.map +1 -0
- package/dist/index.es16.js +962 -0
- package/dist/index.es16.js.map +1 -0
- package/dist/index.es17.js +1904 -0
- package/dist/index.es17.js.map +1 -0
- package/dist/index.es2.js +11 -0
- package/dist/index.es2.js.map +1 -0
- package/dist/index.es3.js +10 -0
- package/dist/index.es3.js.map +1 -0
- package/dist/index.es4.js +9 -0
- package/dist/index.es4.js.map +1 -0
- package/dist/index.es5.js +7 -0
- package/dist/index.es5.js.map +1 -0
- package/dist/index.es6.js +7 -0
- package/dist/index.es6.js.map +1 -0
- package/dist/index.es7.js +10 -0
- package/dist/index.es7.js.map +1 -0
- package/dist/index.es8.js +10 -0
- package/dist/index.es8.js.map +1 -0
- package/dist/index.es9.js +18 -0
- package/dist/index.es9.js.map +1 -0
- package/dist/useCombineEvents-CZUDHE96.mjs +170 -0
- package/dist/useCombineEvents-CZUDHE96.mjs.map +1 -0
- package/dist/usePrevious-BLb3umpI.mjs +11 -0
- package/dist/usePrevious-BLb3umpI.mjs.map +1 -0
- package/package.json +2 -3
- package/src/accounts/AccountsMiniWidget.tsx +0 -62
- package/src/accounts/AccountsWidget.tsx +0 -93
- package/src/accounts/ConnectMiniWidget.tsx +0 -36
- package/src/accounts/__tests__/Accounts.test.tsx +0 -561
- package/src/accounts/api/AccountApi.ts +0 -74
- package/src/accounts/api/__mocks__/AccountApi.ts +0 -46
- package/src/accounts/components/AccountListItem.tsx +0 -102
- package/src/accounts/components/AccountsList.tsx +0 -133
- package/src/accounts/components/ConnectImage.tsx +0 -314
- package/src/accounts/components/ConnectMiniWidgetCard.tsx +0 -41
- package/src/accounts/components/ConnectStatus.tsx +0 -44
- package/src/accounts/components/ConnectionStatusIcons.tsx +0 -26
- package/src/accounts/components/ConnectionsDrawer.tsx +0 -84
- package/src/accounts/components/detailsdrawer/Accounts/AccountActions.tsx +0 -177
- package/src/accounts/components/detailsdrawer/Accounts/AccountActionsRow.tsx +0 -33
- package/src/accounts/components/detailsdrawer/Accounts/AccountConnection.tsx +0 -139
- package/src/accounts/components/detailsdrawer/Accounts/AccountDetailEdit.tsx +0 -162
- package/src/accounts/components/detailsdrawer/Accounts/AccountDetails.tsx +0 -98
- package/src/accounts/components/detailsdrawer/Accounts/AccountDetailsChart.tsx +0 -63
- package/src/accounts/components/detailsdrawer/Accounts/AccountDetailsContent.tsx +0 -52
- package/src/accounts/components/detailsdrawer/Accounts/AccountDetailsHeader.tsx +0 -71
- package/src/accounts/components/detailsdrawer/Accounts/AccountDetailsTab.tsx +0 -25
- package/src/accounts/components/detailsdrawer/Accounts/ConnectionErrorMessage.tsx +0 -99
- package/src/accounts/components/detailsdrawer/Transactions/TransactionsTab.tsx +0 -51
- package/src/accounts/constants/Accounts.ts +0 -11
- package/src/accounts/hooks/useGetMergeableAccounts.tsx +0 -13
- package/src/accounts/hooks/useUiStore.ts +0 -12
- package/src/accounts/index.ts +0 -8
- package/src/accounts/stores/AccountStore.ts +0 -220
- package/src/accounts/stores/UiStore.ts +0 -18
- package/src/accounts/stores/__tests__/AccountStore.test.ts +0 -204
- package/src/accounts/utils/AccountFields.tsx +0 -248
- package/src/accounts/utils/Accounts.ts +0 -28
- package/src/accounts/utils/__tests__/AccountFieldsUtils.test.tsx +0 -215
- package/src/accounts/utils/__tests__/AccountsUtils.test.tsx +0 -104
- package/src/accounts/utils/getConnectionMessages.tsx +0 -198
- package/src/accounts/utils/index.ts +0 -1
- package/src/budgets/BubbleBudgetsMiniWidget.tsx +0 -57
- package/src/budgets/BubbleBudgetsWidget.tsx +0 -154
- package/src/budgets/__tests__/BubbleBudgetsWidget.test.tsx +0 -40
- package/src/budgets/__tests__/BudgetList.test.tsx +0 -38
- package/src/budgets/__tests__/BudgetsStore.test.tsx +0 -48
- package/src/budgets/__tests__/Overview.test.tsx +0 -38
- package/src/budgets/api/BudgetsApi.ts +0 -43
- package/src/budgets/api/__mocks__/BudgetsApi.ts +0 -7
- package/src/budgets/components/AddBudgets.tsx +0 -50
- package/src/budgets/components/BubbleBudgets.tsx +0 -73
- package/src/budgets/components/BubbleChart.tsx +0 -50
- package/src/budgets/components/BudgetDetailsDrawer.tsx +0 -134
- package/src/budgets/components/BudgetList.tsx +0 -50
- package/src/budgets/components/Overview.tsx +0 -156
- package/src/budgets/components/ZeroState.tsx +0 -23
- package/src/budgets/components/addbudget/Header.tsx +0 -59
- package/src/budgets/components/addbudget/RecalculateBudgetRow.tsx +0 -53
- package/src/budgets/components/addbudget/RecalculateBudgets.tsx +0 -69
- package/src/budgets/components/addbudget/UnbudgetedRow.tsx +0 -57
- package/src/budgets/components/bubblechart/Bubble.tsx +0 -148
- package/src/budgets/components/bubblechart/Mercury.tsx +0 -57
- package/src/budgets/components/budgetdetails/AddSubBudget.tsx +0 -111
- package/src/budgets/components/budgetdetails/BudgetDetails.tsx +0 -93
- package/src/budgets/components/budgetdetails/Header.tsx +0 -48
- package/src/budgets/components/budgetdetails/SubBudgetList.tsx +0 -148
- package/src/budgets/components/budgetlist/BudgetRow.tsx +0 -63
- package/src/budgets/components/budgetlist/SubBudgetRow.tsx +0 -64
- package/src/budgets/components/budgetlist/SubBudgetZeroState.tsx +0 -22
- package/src/budgets/components/shared/BudgetAmount.tsx +0 -54
- package/src/budgets/index.ts +0 -2
- package/src/budgets/store/BudgetsStore.ts +0 -183
- package/src/budgets/utils/BubblesSVG.ts +0 -142
- package/src/budgets/utils/BudgetUtil.ts +0 -140
- package/src/cashflow/CashflowMiniWidget.tsx +0 -25
- package/src/cashflow/CashflowOnboarding.tsx +0 -298
- package/src/cashflow/CashflowWidget.tsx +0 -111
- package/src/cashflow/api/CashflowApi.ts +0 -62
- package/src/cashflow/api/__mocks__/CashflowApi.ts +0 -15
- package/src/cashflow/components/CashflowAmountHeading.tsx +0 -46
- package/src/cashflow/components/CashflowContent.tsx +0 -63
- package/src/cashflow/components/CashflowHeading.tsx +0 -172
- package/src/cashflow/components/CashflowWidgetContent.tsx +0 -225
- package/src/cashflow/components/DetailsExpenseHeader.tsx +0 -47
- package/src/cashflow/components/DetailsExpenseRow.tsx +0 -46
- package/src/cashflow/components/DetailsFooter.tsx +0 -28
- package/src/cashflow/components/DetailsTab.tsx +0 -128
- package/src/cashflow/components/RemainingCash.tsx +0 -44
- package/src/cashflow/components/SummaryTab.tsx +0 -247
- package/src/cashflow/components/onboarding/StepOne.tsx +0 -90
- package/src/cashflow/components/onboarding/StepTwo.tsx +0 -23
- package/src/cashflow/context/hooks.tsx +0 -12
- package/src/cashflow/images/cashflow-onboarding.png +0 -0
- package/src/cashflow/images/loading-animation.gif +0 -0
- package/src/cashflow/index.ts +0 -5
- package/src/cashflow/stores/CashflowStore.ts +0 -26
- package/src/cashflow/stores/UiStore.ts +0 -48
- package/src/cashflow/stores/__tests__/CashflowStore.test.ts +0 -16
- package/src/cashflow/util/Filters.ts +0 -15
- package/src/categories/components/CategoryList.tsx +0 -64
- package/src/categories/components/CategoryRow.tsx +0 -68
- package/src/categories/components/CategorySelector.tsx +0 -80
- package/src/categories/components/CategorySelectorDrawer.tsx +0 -41
- package/src/categories/components/CustomCategories/AddSubcategory.tsx +0 -65
- package/src/categories/components/CustomCategories/CustomCategoryModal.tsx +0 -99
- package/src/categories/components/CustomCategories/DeleteSubcategory.tsx +0 -49
- package/src/categories/components/CustomCategories/RenameSubcategory.tsx +0 -48
- package/src/categories/components/CustomCategories/index.ts +0 -4
- package/src/categories/components/SubcategoryList.tsx +0 -47
- package/src/categories/components/SubcategoryRow.tsx +0 -123
- package/src/categories/constants/Analytics.ts +0 -89
- package/src/categories/constants/OnClickEvents.ts +0 -13
- package/src/categories/context/hooks.ts +0 -12
- package/src/categories/index.ts +0 -5
- package/src/categories/stores/CategoryStore.ts +0 -184
- package/src/categories/stores/UiStore.ts +0 -36
- package/src/categories/stores/__tests__/CategoryStore.test.ts +0 -54
- package/src/categories/util/CategoryUtil.ts +0 -136
- package/src/common/api/AnalyticsApi.ts +0 -49
- package/src/common/api/BeatApi.ts +0 -32
- package/src/common/api/CategoryApi.ts +0 -52
- package/src/common/api/GlobalCopyApi.ts +0 -17
- package/src/common/api/LocalizedCopyApi.ts +0 -21
- package/src/common/api/NotificationApi.ts +0 -40
- package/src/common/api/ScheduledPaymentsApi.ts +0 -37
- package/src/common/api/UserApi.ts +0 -23
- package/src/common/api/WidgetApi.ts +0 -15
- package/src/common/api/__mocks__/BeatApi.ts +0 -8
- package/src/common/api/__mocks__/CategoryApi.ts +0 -15
- package/src/common/api/__mocks__/GlobalCopyApi.ts +0 -7
- package/src/common/api/__mocks__/NotificationApi.ts +0 -11
- package/src/common/api/__mocks__/ScheduledPaymentsApi.ts +0 -7
- package/src/common/api/__mocks__/UserApi.ts +0 -9
- package/src/common/api/__mocks__/WidgetApi.ts +0 -11
- package/src/common/api/index.ts +0 -9
- package/src/common/components/ConnectDrawer.tsx +0 -87
- package/src/common/components/CurrencyInput.tsx +0 -147
- package/src/common/components/CurrencyText.tsx +0 -44
- package/src/common/components/DataRow.tsx +0 -52
- package/src/common/components/IconBacking.tsx +0 -41
- package/src/common/components/InformationTooltip.tsx +0 -52
- package/src/common/components/ListItemWrapper.tsx +0 -49
- package/src/common/components/Loader.tsx +0 -24
- package/src/common/components/MiniWidgetContainer.tsx +0 -64
- package/src/common/components/ResponsiveButton.tsx +0 -65
- package/src/common/components/SearchBox.tsx +0 -64
- package/src/common/components/SelectionBox.tsx +0 -64
- package/src/common/components/SubheaderRow.tsx +0 -22
- package/src/common/components/TabContentContainer.tsx +0 -28
- package/src/common/components/WidgetContainer.tsx +0 -239
- package/src/common/components/accountfilter/AccountFilter.tsx +0 -133
- package/src/common/components/accountfilter/AccountFilterOptions.tsx +0 -263
- package/src/common/components/accountfilter/index.ts +0 -1
- package/src/common/components/barchart/Bar.tsx +0 -123
- package/src/common/components/barchart/BarChart.tsx +0 -136
- package/src/common/components/barchart/BarColumn.tsx +0 -150
- package/src/common/components/barchart/Legend.tsx +0 -60
- package/src/common/components/barchart/Util.ts +0 -54
- package/src/common/components/barchart/__tests__/BarChart.test.tsx +0 -46
- package/src/common/components/barchart/index.ts +0 -1
- package/src/common/components/calendar/Calendar.tsx +0 -223
- package/src/common/components/calendar/Day.tsx +0 -127
- package/src/common/components/calendar/Header.tsx +0 -58
- package/src/common/components/calendar/__tests__/Calendar.test.tsx +0 -50
- package/src/common/components/calendar/index.ts +0 -1
- package/src/common/components/calendar/upcomingActivity/CalendarIcons.tsx +0 -40
- package/src/common/components/charts/Donut.tsx +0 -82
- package/src/common/components/charts/LineChart.tsx +0 -204
- package/src/common/components/charts/StackedLineChart.tsx +0 -292
- package/src/common/components/charts/StatusBar.tsx +0 -41
- package/src/common/components/charts/index.ts +0 -4
- package/src/common/components/charts/linechart/CustomLegend.tsx +0 -49
- package/src/common/components/charts/linechart/CustomLine.tsx +0 -31
- package/src/common/components/charts/linechart/CustomMark.tsx +0 -68
- package/src/common/components/charts/stackedlinechart/CategoryIconLabel.tsx +0 -29
- package/src/common/components/charts/stackedlinechart/CustomAreaTooltip.tsx +0 -115
- package/src/common/components/charts/stackedlinechart/CustomLegend.tsx +0 -73
- package/src/common/components/charts/stackedlinechart/CustomPointTooltip.tsx +0 -41
- package/src/common/components/charts/stackedlinechart/utils.ts +0 -13
- package/src/common/components/daterangeselector/DateRangeSelector.tsx +0 -383
- package/src/common/components/daterangeselector/index.ts +0 -1
- package/src/common/components/dialog/Dialog.tsx +0 -92
- package/src/common/components/dialog/index.ts +0 -1
- package/src/common/components/donuts/MultiSegmentDonut.tsx +0 -89
- package/src/common/components/donuts/SingleSegmentDonut.tsx +0 -75
- package/src/common/components/donuts/index.ts +0 -2
- package/src/common/components/drawer/Drawer.tsx +0 -97
- package/src/common/components/drawer/Header.tsx +0 -64
- package/src/common/components/drawer/index.ts +0 -1
- package/src/common/components/index.ts +0 -22
- package/src/common/constants/Account.ts +0 -30
- package/src/common/constants/Analytics.ts +0 -70
- package/src/common/constants/ApiEndpoints.ts +0 -30
- package/src/common/constants/Category.ts +0 -302
- package/src/common/constants/Connect.ts +0 -2
- package/src/common/constants/DateFormats.ts +0 -122
- package/src/common/constants/Donut.ts +0 -2
- package/src/common/constants/Numbers.ts +0 -6
- package/src/common/constants/ScheduledPayment.ts +0 -21
- package/src/common/constants/Sizes.ts +0 -7
- package/src/common/constants/SpendingPlan.ts +0 -17
- package/src/common/constants/Table.ts +0 -13
- package/src/common/constants/index.ts +0 -21
- package/src/common/context/GlobalDataProvider.tsx +0 -31
- package/src/common/context/WidgetContainerProvider.tsx +0 -24
- package/src/common/context/__mocks__/GlobalDataProvider.tsx +0 -25
- package/src/common/context/hooks.tsx +0 -57
- package/src/common/context/index.ts +0 -22
- package/src/common/hooks/__tests__/useDimensions.test.tsx +0 -190
- package/src/common/hooks/index.ts +0 -3
- package/src/common/hooks/useCombineEvents.tsx +0 -53
- package/src/common/hooks/useDimensions.tsx +0 -78
- package/src/common/hooks/usePrevious.tsx +0 -10
- package/src/common/hooks/useScreenSize.tsx +0 -15
- package/src/common/index.ts +0 -23
- package/src/common/stores/ConnectStore.ts +0 -26
- package/src/common/stores/GlobalCopyStore.ts +0 -36
- package/src/common/stores/GlobalStore.ts +0 -83
- package/src/common/stores/GlobalUiStore.ts +0 -66
- package/src/common/stores/UserStore.ts +0 -45
- package/src/common/stores/__tests__/GlobalCopyStore.test.ts +0 -23
- package/src/common/stores/__tests__/GlobalStore.test.ts +0 -24
- package/src/common/stores/index.ts +0 -3
- package/src/common/types/Account.ts +0 -406
- package/src/common/types/Activity.ts +0 -31
- package/src/common/types/Analytics.ts +0 -70
- package/src/common/types/Beat.ts +0 -71
- package/src/common/types/Budget.ts +0 -29
- package/src/common/types/Cashflow.ts +0 -110
- package/src/common/types/Category.ts +0 -68
- package/src/common/types/Date.ts +0 -2
- package/src/common/types/Debt.ts +0 -19
- package/src/common/types/Expense.ts +0 -20
- package/src/common/types/Global.ts +0 -13
- package/src/common/types/GlobalCopy.ts +0 -37
- package/src/common/types/Goal.ts +0 -59
- package/src/common/types/Institution.ts +0 -11
- package/src/common/types/LocalizedContent.ts +0 -9
- package/src/common/types/Merchant.ts +0 -6
- package/src/common/types/Notification.ts +0 -15
- package/src/common/types/ScheduledPayment.ts +0 -15
- package/src/common/types/ScreenSize.tsx +0 -4
- package/src/common/types/SpendingPlan.ts +0 -48
- package/src/common/types/Transaction.ts +0 -91
- package/src/common/types/User.ts +0 -20
- package/src/common/types/Widgets.ts +0 -11
- package/src/common/types/index.ts +0 -93
- package/src/common/types/localization/AccountFilterCopy.ts +0 -12
- package/src/common/types/localization/AccountTypeCopy.ts +0 -16
- package/src/common/types/localization/AccountsCopy.ts +0 -113
- package/src/common/types/localization/BudgetsCopy.ts +0 -52
- package/src/common/types/localization/CashflowCopy.ts +0 -77
- package/src/common/types/localization/CategoryCopy.ts +0 -18
- package/src/common/types/localization/CommonCopy.ts +0 -30
- package/src/common/types/localization/ConnectCopy.ts +0 -74
- package/src/common/types/localization/CurrencyInputCopy.ts +0 -6
- package/src/common/types/localization/DateRangePickerCopy.ts +0 -23
- package/src/common/types/localization/GoalsCopy.ts +0 -37
- package/src/common/types/localization/InsightsFeedCopy.ts +0 -26
- package/src/common/types/localization/MicroInsightsCopy.ts +0 -28
- package/src/common/types/localization/NetWorthCopy.ts +0 -14
- package/src/common/types/localization/NotificationsCopy.ts +0 -7
- package/src/common/types/localization/RecurringCopy.ts +0 -76
- package/src/common/types/localization/SpendingCopy.ts +0 -16
- package/src/common/types/localization/TransactionsCopy.ts +0 -81
- package/src/common/types/localization/TrendsCopy.ts +0 -10
- package/src/common/types/localization/index.ts +0 -19
- package/src/common/utils/AccountFilter.ts +0 -45
- package/src/common/utils/Analytics.ts +0 -51
- package/src/common/utils/Categories.ts +0 -75
- package/src/common/utils/DateUtil.ts +0 -67
- package/src/common/utils/Fetch.ts +0 -115
- package/src/common/utils/Localization.ts +0 -67
- package/src/common/utils/NumberFormatting.ts +0 -65
- package/src/common/utils/__tests__/Fetch.test.tsx +0 -34
- package/src/common/utils/index.ts +0 -18
- package/src/dashboard/Dashboard.tsx +0 -92
- package/src/dashboard/Greeting.tsx +0 -75
- package/src/dashboard/__tests__/Dashboard.test.tsx +0 -84
- package/src/dashboard/constants/Dashboard.ts +0 -4
- package/src/dashboard/index.ts +0 -3
- package/src/dashboard/types/DashboardTypes.ts +0 -9
- package/src/debts/DebtsWidget.tsx +0 -90
- package/src/debts/components/DebtsChart.tsx +0 -190
- package/src/debts/components/DebtsTable.tsx +0 -209
- package/src/debts/components/SnowballCard.tsx +0 -70
- package/src/debts/components/SnowballDrawer.tsx +0 -384
- package/src/debts/components/debtstable/AccountCell.tsx +0 -25
- package/src/debts/components/debtstable/PriorityCell.tsx +0 -46
- package/src/debts/index.ts +0 -4
- package/src/debts/store/DebtsStore.ts +0 -20
- package/src/debts/utils/DebtStore.ts +0 -75
- package/src/debts/utils/DebtsWidget.ts +0 -32
- package/src/debts/utils/SnowballCard.tsx +0 -48
- package/src/goals/GoalsWidget.tsx +0 -128
- package/src/goals/api/GoalApi.ts +0 -29
- package/src/goals/components/GoalDetails.tsx +0 -240
- package/src/goals/components/GoalList.tsx +0 -101
- package/src/goals/components/GoalStatusCard.tsx +0 -87
- package/src/goals/components/TabTitle.tsx +0 -21
- package/src/goals/constants/CopyKeys.ts +0 -29
- package/src/goals/index.ts +0 -2
- package/src/goals/stores/GoalStore.ts +0 -47
- package/src/goals/util/GoalsUtil.ts +0 -61
- package/src/index.ts +0 -17
- package/src/insights/README.md +0 -16
- package/src/insights/contexts/ToastContext.tsx +0 -62
- package/src/insights/index.ts +0 -5
- package/src/insights/settings/SettingsDrawer.tsx +0 -40
- package/src/insights/settings/__tests__/SettingsDrawer.test.tsx +0 -50
- package/src/insights/settings/components/PulseSubheaderRow.tsx +0 -34
- package/src/insights/settings/components/SettingsItem.tsx +0 -55
- package/src/insights/settings/components/Toast.tsx +0 -69
- package/src/insights/settings/hiddeninsights/__tests__/HiddenInsightsDrawer.test.tsx +0 -108
- package/src/insights/settings/hiddeninsights/__tests__/SubCategoryDrawer.test.tsx +0 -150
- package/src/insights/settings/hiddeninsights/components/CategoryEmptyState.tsx +0 -50
- package/src/insights/settings/hiddeninsights/components/HiddenInsightsDrawer.tsx +0 -222
- package/src/insights/settings/hiddeninsights/components/HiddenInsightsDrawerWrapper.tsx +0 -24
- package/src/insights/settings/hiddeninsights/components/SubCategoryDrawer.tsx +0 -256
- package/src/insights/settings/hiddeninsights/images/no-insights.png +0 -0
- package/src/insights/settings/hiddeninsights/types/index.ts +0 -74
- package/src/insights/settings/manageaccounts/__tests__/AccountGroup.test.tsx +0 -92
- package/src/insights/settings/manageaccounts/__tests__/ManageAccountsDrawer.test.tsx +0 -83
- package/src/insights/settings/manageaccounts/components/AccountGroup.tsx +0 -109
- package/src/insights/settings/manageaccounts/components/ManageAccountsDrawer.tsx +0 -63
- package/src/insights/settings/manageaccounts/types/index.ts +0 -13
- package/src/insights/settings/types/index.ts +0 -4
- package/src/insights/store/BeatStore.ts +0 -25
- package/src/insights/utils/beatTemplateCategories.ts +0 -103
- package/src/merchants/api/MerchantApi.ts +0 -33
- package/src/merchants/components/MerchantLookup.tsx +0 -117
- package/src/merchants/index.ts +0 -2
- package/src/merchants/stores/MerchantStore.ts +0 -42
- package/src/microinsights/analytics.ts +0 -31
- package/src/microinsights/components/beatCard/BeatCard.tsx +0 -124
- package/src/microinsights/components/beaticons/BeatCategoryIcon.tsx +0 -20
- package/src/microinsights/components/beaticons/BeatIcon.tsx +0 -45
- package/src/microinsights/components/beaticons/BeatMerchantLogo.tsx +0 -33
- package/src/microinsights/components/beaticons/ChartFilledIcon.tsx +0 -37
- package/src/microinsights/components/beaticons/MonthlySpendComparisonIcon.tsx +0 -30
- package/src/microinsights/components/beaticons/ZeroStateIcon.tsx +0 -558
- package/src/microinsights/components/beaticons/index.tsx +0 -7
- package/src/microinsights/components/carouselheader/CarouselHeader.tsx +0 -111
- package/src/microinsights/components/insightsmicrowidget/InsightsMicroWidget.tsx +0 -163
- package/src/microinsights/components/microBeatCarousel/CarouselControls.tsx +0 -99
- package/src/microinsights/components/microBeatCarousel/MicroBeatCarousel.tsx +0 -207
- package/src/microinsights/components/microInsightCard/MicroInsightCard.tsx +0 -173
- package/src/microinsights/components/noRelevantInsightsCard/NoRelevantInsightsCard.tsx +0 -89
- package/src/microinsights/components/spinner/Spinner.tsx +0 -21
- package/src/microinsights/components/viewMoreMicroCard/ViewMoreMicroCard.tsx +0 -101
- package/src/microinsights/components/zeroStateCard/ZeroStateCard.tsx +0 -62
- package/src/microinsights/constants/Analytics.ts +0 -192
- package/src/microinsights/constants/App.ts +0 -53
- package/src/microinsights/constants/Insights.tsx +0 -3
- package/src/microinsights/constants/OnClickEvents.ts +0 -3
- package/src/microinsights/context/InsightsMicroWidgetDataProvider.tsx +0 -24
- package/src/microinsights/context/hooks.tsx +0 -65
- package/src/microinsights/index.ts +0 -16
- package/src/microinsights/interfaces.ts +0 -28
- package/src/microinsights/stores/AppStore.ts +0 -34
- package/src/microinsights/stores/CopyStore.ts +0 -38
- package/src/microinsights/stores/InsightsMicroWidgetStore.ts +0 -61
- package/src/microinsights/types/BeatUIComponent.ts +0 -5
- package/src/microinsights/utils/DataSeries.ts +0 -20
- package/src/networth/NetWorthWidget.tsx +0 -171
- package/src/networth/__tests__/AssetsLiabilitiesDetail.test.tsx +0 -94
- package/src/networth/__tests__/NetWorthChart.test.tsx +0 -31
- package/src/networth/__tests__/NetWorthList.test.tsx +0 -33
- package/src/networth/components/AssetsLiabilitiesDetail.tsx +0 -146
- package/src/networth/components/GainsLossesDetail.tsx +0 -110
- package/src/networth/components/NetWorthChange.tsx +0 -51
- package/src/networth/components/NetWorthChart.tsx +0 -71
- package/src/networth/components/NetWorthList.tsx +0 -91
- package/src/networth/components/NetWorthListItem.tsx +0 -72
- package/src/networth/components/NetWorthSummary.tsx +0 -36
- package/src/networth/index.ts +0 -5
- package/src/networth/stores/NetWorthStore.ts +0 -99
- package/src/networth/stores/__tests__/NetWorthStore.test.ts +0 -32
- package/src/networth/types/NetWorth.ts +0 -59
- package/src/networth/utils/NetWorthUtils.ts +0 -177
- package/src/networth/utils/__tests__/NetWorthUtils.test.ts +0 -198
- package/src/notifications/__tests__/NotificationList.test.tsx +0 -67
- package/src/notifications/components/DateRow.tsx +0 -21
- package/src/notifications/components/NotificationBadge.tsx +0 -51
- package/src/notifications/components/NotificationCard.tsx +0 -63
- package/src/notifications/components/NotificationList.tsx +0 -65
- package/src/notifications/constants/NotificationConstants.ts +0 -104
- package/src/notifications/index.ts +0 -3
- package/src/notifications/stores/NotificationStore.ts +0 -62
- package/src/notifications/utils/NotificationUtils.ts +0 -21
- package/src/recurringactivity/RecurringActivityMiniWidget.tsx +0 -45
- package/src/recurringactivity/RecurringActivityWidget.tsx +0 -89
- package/src/recurringactivity/__tests__/BuildActivities.test.ts +0 -30
- package/src/recurringactivity/__tests__/BuildNewActivity.test.ts +0 -59
- package/src/recurringactivity/__tests__/RecurringActivityWidget.test.tsx +0 -33
- package/src/recurringactivity/components/ActivityBadges.tsx +0 -40
- package/src/recurringactivity/components/ActivityDetails.tsx +0 -196
- package/src/recurringactivity/components/ActivityList.tsx +0 -141
- package/src/recurringactivity/components/ActivityRow.tsx +0 -161
- package/src/recurringactivity/components/ActivityStatus.tsx +0 -82
- package/src/recurringactivity/components/MiniWidgetContent.tsx +0 -61
- package/src/recurringactivity/components/RecurringActivity.tsx +0 -165
- package/src/recurringactivity/components/actions/FrequencyAction.tsx +0 -130
- package/src/recurringactivity/components/actions/PaymentDateAction.tsx +0 -99
- package/src/recurringactivity/components/activitycalendar/ActivityCalendar.tsx +0 -100
- package/src/recurringactivity/components/activitycalendar/ActivityDay.tsx +0 -88
- package/src/recurringactivity/components/activitycalendar/Legend.tsx +0 -42
- package/src/recurringactivity/components/shared/ActivitySettings.tsx +0 -43
- package/src/recurringactivity/components/shared/activitysettings/AddActivity.tsx +0 -175
- package/src/recurringactivity/components/shared/activitysettings/AddActivityDetails.tsx +0 -148
- package/src/recurringactivity/components/shared/activitysettings/ManageExpenses.tsx +0 -84
- package/src/recurringactivity/components/shared/activitysettings/ManageIncome.tsx +0 -102
- package/src/recurringactivity/components/shared/activitysettings/SelectTransaction.tsx +0 -45
- package/src/recurringactivity/index.ts +0 -5
- package/src/recurringactivity/stores/RecurringActivityStore.ts +0 -312
- package/src/recurringactivity/util/RecurringActivityUtils.ts +0 -40
- package/src/recurringactivity/util/buildActivities.ts +0 -334
- package/src/recurringactivity/util/buildNewActivity.ts +0 -111
- package/src/recurringactivity/util/getRecurrence.ts +0 -50
- package/src/recurringactivity/util/getStatus.ts +0 -32
- package/src/recurringactivity/util/updateActivity.ts +0 -66
- package/src/spending/SpendingMiniWidget.tsx +0 -23
- package/src/spending/SpendingWidget.tsx +0 -71
- package/src/spending/__tests__/MiniSpendingChart.test.tsx +0 -43
- package/src/spending/__tests__/SpendingData.test.ts +0 -38
- package/src/spending/__tests__/SpendingMiniWidget.test.tsx +0 -49
- package/src/spending/__tests__/SpendingWidget.test.tsx +0 -49
- package/src/spending/components/MiniSpendingChart.tsx +0 -125
- package/src/spending/components/Spending.tsx +0 -175
- package/src/spending/components/SpendingChart.tsx +0 -74
- package/src/spending/components/SpendingDonut.tsx +0 -125
- package/src/spending/components/SpendingLegend.tsx +0 -41
- package/src/spending/components/SpendingList.tsx +0 -112
- package/src/spending/components/SpendingTabLabel.tsx +0 -25
- package/src/spending/index.ts +0 -2
- package/src/spending/utils/SpendingData.ts +0 -196
- package/src/transactions/TransactionWidget.tsx +0 -319
- package/src/transactions/analytics.ts +0 -12
- package/src/transactions/api/TransactionApi.ts +0 -204
- package/src/transactions/api/__mocks__/TransactionApi.ts +0 -20
- package/src/transactions/components/shared/TransactionDetails.tsx +0 -140
- package/src/transactions/components/shared/TransactionList.tsx +0 -124
- package/src/transactions/components/shared/TransactionTable.tsx +0 -123
- package/src/transactions/components/shared/transactiondetails/Description.tsx +0 -97
- package/src/transactions/components/shared/transactiondetails/FlagTransaction.tsx +0 -63
- package/src/transactions/components/shared/transactiondetails/ManualTransactionDetails.tsx +0 -148
- package/src/transactions/components/shared/transactiondetails/TransactionAmountHeader.tsx +0 -39
- package/src/transactions/components/shared/transactiondetails/actions/CategoryAction.tsx +0 -149
- package/src/transactions/components/shared/transactiondetails/actions/DateAction.tsx +0 -119
- package/src/transactions/components/shared/transactiondetails/actions/DeleteAction.tsx +0 -85
- package/src/transactions/components/shared/transactiondetails/actions/DeleteLogoAction.tsx +0 -88
- package/src/transactions/components/shared/transactiondetails/actions/HideAction.tsx +0 -126
- package/src/transactions/components/shared/transactiondetails/actions/MemoAction.tsx +0 -112
- package/src/transactions/components/shared/transactiondetails/actions/SplitAction.tsx +0 -234
- package/src/transactions/components/shared/transactiondetails/actions/TagsAction.tsx +0 -119
- package/src/transactions/components/shared/transactiondetails/actions/index.ts +0 -8
- package/src/transactions/components/shared/transactionlist/DateRow.tsx +0 -33
- package/src/transactions/components/shared/transactionlist/TransactionRow.tsx +0 -92
- package/src/transactions/components/shared/transactionlist/ZeroState.tsx +0 -36
- package/src/transactions/components/shared/transactiontable/cells/AccountCell.tsx +0 -12
- package/src/transactions/components/shared/transactiontable/cells/AmountCell.tsx +0 -35
- package/src/transactions/components/shared/transactiontable/cells/CategoryCell.tsx +0 -37
- package/src/transactions/components/shared/transactiontable/cells/DateCell.tsx +0 -17
- package/src/transactions/components/shared/transactiontable/cells/FlagCell.tsx +0 -43
- package/src/transactions/components/shared/transactiontable/cells/HeaderCell.tsx +0 -11
- package/src/transactions/components/shared/transactiontable/cells/PayeeCell.tsx +0 -21
- package/src/transactions/components/shared/transactiontable/cells/index.ts +0 -7
- package/src/transactions/components/splitmanager/SplitManager.tsx +0 -93
- package/src/transactions/components/splitmanager/SplitRow.tsx +0 -149
- package/src/transactions/components/splitmanager/index.ts +0 -1
- package/src/transactions/components/tagmanager/Header.tsx +0 -100
- package/src/transactions/components/tagmanager/SearchBox.tsx +0 -60
- package/src/transactions/components/tagmanager/TagManager.tsx +0 -51
- package/src/transactions/components/tagmanager/TagRow.tsx +0 -145
- package/src/transactions/components/tagmanager/index.ts +0 -1
- package/src/transactions/components/transactionwidget/AddAccountModal.tsx +0 -30
- package/src/transactions/components/transactionwidget/actions/AddTransactionAction.tsx +0 -74
- package/src/transactions/components/transactionwidget/actions/EditCategoryAction.tsx +0 -80
- package/src/transactions/components/transactionwidget/actions/ExportCsvAction.tsx +0 -32
- package/src/transactions/constants/Actions.ts +0 -28
- package/src/transactions/constants/Analytics.ts +0 -272
- package/src/transactions/constants/OnClickEvents.ts +0 -45
- package/src/transactions/constants/Transaction.ts +0 -32
- package/src/transactions/constants/TransactionsTable.ts +0 -26
- package/src/transactions/context/hooks.tsx +0 -12
- package/src/transactions/index.ts +0 -12
- package/src/transactions/stores/TransactionStore.ts +0 -327
- package/src/transactions/stores/UiStore.ts +0 -72
- package/src/transactions/stores/__tests__/TransactionStore.test.ts +0 -80
- package/src/transactions/utils/Filters.ts +0 -35
- package/src/transactions/utils/Transactions.ts +0 -22
- package/src/transactions/utils/buildDetailedTransactions.ts +0 -66
- package/src/transactions/utils/exportTransactionsToCSV.ts +0 -85
- package/src/transactions/utils/sortAndFilterTransactions.ts +0 -127
- package/src/trends/TrendsFullWidget.tsx +0 -286
- package/src/trends/TrendsMiniWidget.tsx +0 -49
- package/src/trends/__tests__/TrendsFullWidget.test.tsx +0 -45
- package/src/trends/__tests__/TrendsMiniWidget.test.tsx +0 -35
- package/src/trends/components/SpendingChart.tsx +0 -29
- package/src/trends/components/TrendsChart.tsx +0 -75
- package/src/trends/components/TrendsDrawer.tsx +0 -74
- package/src/trends/components/TrendsTable.tsx +0 -161
- package/src/trends/components/__tests__/SpendingChart.test.tsx +0 -37
- package/src/trends/components/trendstable/AmountCell.tsx +0 -14
- package/src/trends/components/trendstable/CategoryCell.tsx +0 -39
- package/src/trends/components/trendstable/HeaderCell.tsx +0 -8
- package/src/trends/index.ts +0 -2
- package/src/trends/mocks.ts +0 -423
- package/src/trends/utils/SpendingData.ts +0 -76
- package/src/trends/utils/TrendsData.ts +0 -127
- package/src/trends/utils/shared.ts +0 -39
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ConnectMiniWidget-Ep65CtHH.mjs","sources":["../src/common/constants/Analytics.ts","../src/common/constants/DateFormats.ts","../src/common/types/Account.ts","../src/common/constants/Account.ts","../src/common/constants/Category.ts","../src/common/constants/Numbers.ts","../src/common/constants/ScheduledPayment.ts","../src/common/constants/Sizes.ts","../src/common/utils/Localization.ts","../src/common/utils/NumberFormatting.ts","../src/common/utils/DateUtil.ts","../src/common/utils/AccountFilter.ts","../src/common/components/accountfilter/AccountFilterOptions.tsx","../src/common/hooks/useScreenSize.tsx","../src/common/components/accountfilter/AccountFilter.tsx","../src/common/components/calendar/Header.tsx","../src/common/components/calendar/Day.tsx","../src/common/components/calendar/Calendar.tsx","../src/common/components/charts/linechart/CustomMark.tsx","../src/common/components/charts/linechart/CustomLine.tsx","../src/common/components/charts/linechart/CustomLegend.tsx","../src/common/components/charts/LineChart.tsx","../src/common/context/GlobalDataProvider.tsx","../src/common/context/WidgetContainerProvider.tsx","../src/common/context/hooks.tsx","../src/common/components/charts/stackedlinechart/CategoryIconLabel.tsx","../src/common/components/CurrencyText.tsx","../src/common/components/charts/stackedlinechart/CustomAreaTooltip.tsx","../src/common/components/charts/StatusBar.tsx","../src/common/components/dialog/Dialog.tsx","../src/common/components/drawer/Header.tsx","../src/common/components/drawer/Drawer.tsx","../src/common/components/daterangeselector/DateRangeSelector.tsx","../src/common/hooks/useDimensions.tsx","../src/common/components/MiniWidgetContainer.tsx","../src/common/components/WidgetContainer.tsx","../src/accounts/components/ConnectStatus.tsx","../src/accounts/constants/Accounts.ts","../src/common/constants/Connect.ts","../src/common/components/ConnectDrawer.tsx","../src/common/components/CurrencyInput.tsx","../src/common/components/Loader.tsx","../src/common/components/SearchBox.tsx","../src/common/components/SelectionBox.tsx","../src/common/components/TabContentContainer.tsx","../src/common/components/IconBacking.tsx","../src/common/components/DataRow.tsx","../src/common/components/InformationTooltip.tsx","../src/common/components/ListItemWrapper.tsx","../src/cashflow/context/hooks.tsx","../src/cashflow/components/RemainingCash.tsx","../src/cashflow/components/CashflowWidgetContent.tsx","../src/cashflow/CashflowMiniWidget.tsx","../src/transactions/constants/Actions.ts","../src/transactions/constants/OnClickEvents.ts","../src/transactions/constants/Analytics.ts","../src/common/types/Activity.ts","../src/common/types/Goal.ts","../src/common/types/Transaction.ts","../src/transactions/constants/Transaction.ts","../src/transactions/context/hooks.tsx","../src/transactions/utils/exportTransactionsToCSV.ts","../src/transactions/components/shared/transactionlist/TransactionRow.tsx","../src/common/components/SubheaderRow.tsx","../src/transactions/components/shared/transactionlist/ZeroState.tsx","../src/transactions/utils/Transactions.ts","../src/transactions/components/shared/TransactionList.tsx","../src/transactions/components/shared/transactiontable/cells/AccountCell.tsx","../src/transactions/components/shared/transactiontable/cells/AmountCell.tsx","../src/transactions/components/shared/transactiontable/cells/CategoryCell.tsx","../src/transactions/components/shared/transactiontable/cells/DateCell.tsx","../src/transactions/components/shared/transactiontable/cells/FlagCell.tsx","../src/transactions/components/shared/transactiontable/cells/HeaderCell.tsx","../src/transactions/components/shared/transactiontable/cells/PayeeCell.tsx","../src/transactions/components/shared/TransactionTable.tsx","../src/categories/context/hooks.ts","../src/categories/constants/OnClickEvents.ts","../src/categories/components/CustomCategories/CustomCategoryModal.tsx","../src/categories/components/CustomCategories/AddSubcategory.tsx","../src/categories/components/CustomCategories/RenameSubcategory.tsx","../src/categories/components/CustomCategories/DeleteSubcategory.tsx","../src/categories/components/SubcategoryRow.tsx","../src/categories/components/SubcategoryList.tsx","../src/categories/components/CategoryRow.tsx","../src/categories/components/CategoryList.tsx","../src/categories/components/CategorySelector.tsx","../src/categories/components/CategorySelectorDrawer.tsx","../src/transactions/components/shared/transactiondetails/actions/CategoryAction.tsx","../src/transactions/components/shared/transactiondetails/actions/DateAction.tsx","../src/transactions/components/shared/transactiondetails/actions/DeleteAction.tsx","../src/transactions/components/shared/transactiondetails/actions/DeleteLogoAction.tsx","../src/transactions/components/shared/transactiondetails/actions/HideAction.tsx","../src/transactions/components/shared/transactiondetails/TransactionAmountHeader.tsx","../src/transactions/components/shared/transactiondetails/actions/MemoAction.tsx","../src/transactions/components/splitmanager/SplitRow.tsx","../src/transactions/components/splitmanager/SplitManager.tsx","../src/transactions/components/shared/transactiondetails/actions/SplitAction.tsx","../src/transactions/components/tagmanager/Header.tsx","../src/transactions/components/tagmanager/SearchBox.tsx","../src/transactions/components/tagmanager/TagRow.tsx","../src/transactions/components/tagmanager/TagManager.tsx","../src/transactions/components/shared/transactiondetails/actions/TagsAction.tsx","../src/transactions/components/shared/transactiondetails/Description.tsx","../src/transactions/components/shared/transactiondetails/FlagTransaction.tsx","../src/transactions/components/shared/TransactionDetails.tsx","../src/transactions/components/transactionwidget/AddAccountModal.tsx","../src/transactions/components/shared/transactiondetails/ManualTransactionDetails.tsx","../src/transactions/components/transactionwidget/actions/EditCategoryAction.tsx","../src/transactions/TransactionWidget.tsx","../src/recurringactivity/util/updateActivity.ts","../src/recurringactivity/components/actions/FrequencyAction.tsx","../src/recurringactivity/components/actions/PaymentDateAction.tsx","../src/recurringactivity/components/ActivityDetails.tsx","../src/recurringactivity/components/ActivityBadges.tsx","../src/recurringactivity/util/getRecurrence.ts","../src/recurringactivity/util/getStatus.ts","../src/recurringactivity/components/ActivityRow.tsx","../src/recurringactivity/util/buildNewActivity.ts","../src/recurringactivity/components/shared/activitysettings/SelectTransaction.tsx","../src/recurringactivity/components/shared/activitysettings/AddActivityDetails.tsx","../src/transactions/utils/Filters.ts","../src/recurringactivity/components/shared/activitysettings/AddActivity.tsx","../src/recurringactivity/components/shared/activitysettings/ManageExpenses.tsx","../src/recurringactivity/util/buildActivities.ts","../src/recurringactivity/components/shared/activitysettings/ManageIncome.tsx","../src/recurringactivity/components/shared/ActivitySettings.tsx","../src/recurringactivity/util/RecurringActivityUtils.ts","../src/recurringactivity/components/activitycalendar/ActivityDay.tsx","../src/recurringactivity/components/activitycalendar/Legend.tsx","../src/recurringactivity/components/activitycalendar/ActivityCalendar.tsx","../src/recurringactivity/components/ActivityList.tsx","../src/recurringactivity/components/ActivityStatus.tsx","../src/recurringactivity/components/RecurringActivity.tsx","../src/recurringactivity/RecurringActivityWidget.tsx","../src/recurringactivity/components/MiniWidgetContent.tsx","../src/recurringactivity/RecurringActivityMiniWidget.tsx","../src/accounts/components/ConnectionStatusIcons.tsx","../src/accounts/utils/Accounts.ts","../src/accounts/utils/AccountFields.tsx","../src/accounts/components/AccountListItem.tsx","../src/cashflow/components/DetailsFooter.tsx","../src/cashflow/components/DetailsExpenseRow.tsx","../src/cashflow/components/DetailsExpenseHeader.tsx","../src/cashflow/util/Filters.ts","../src/cashflow/components/DetailsTab.tsx","../src/cashflow/components/SummaryTab.tsx","../src/cashflow/components/CashflowContent.tsx","../src/cashflow/components/CashflowAmountHeading.tsx","../src/cashflow/components/CashflowHeading.tsx","../src/cashflow/components/onboarding/StepOne.tsx","../src/cashflow/images/loading-animation.gif","../src/cashflow/components/onboarding/StepTwo.tsx","../src/cashflow/images/cashflow-onboarding.png","../src/cashflow/CashflowOnboarding.tsx","../src/cashflow/CashflowWidget.tsx","../src/debts/utils/SnowballCard.tsx","../src/debts/components/SnowballCard.tsx","../src/debts/components/SnowballDrawer.tsx","../src/debts/components/DebtsChart.tsx","../src/trends/components/trendstable/HeaderCell.tsx","../src/debts/components/debtstable/PriorityCell.tsx","../src/debts/components/debtstable/AccountCell.tsx","../src/debts/components/DebtsTable.tsx","../src/debts/utils/DebtsWidget.ts","../src/debts/DebtsWidget.tsx","../src/goals/components/TabTitle.tsx","../src/goals/util/GoalsUtil.ts","../src/goals/components/GoalStatusCard.tsx","../src/goals/components/GoalList.tsx","../src/goals/components/GoalDetails.tsx","../src/goals/GoalsWidget.tsx","../src/merchants/components/MerchantLookup.tsx","../src/networth/utils/NetWorthUtils.ts","../src/networth/components/NetWorthChart.tsx","../src/networth/components/NetWorthListItem.tsx","../src/networth/components/NetWorthList.tsx","../src/networth/components/NetWorthChange.tsx","../src/networth/components/NetWorthSummary.tsx","../src/networth/components/AssetsLiabilitiesDetail.tsx","../src/networth/components/GainsLossesDetail.tsx","../src/networth/NetWorthWidget.tsx","../src/notifications/utils/NotificationUtils.ts","../src/notifications/components/NotificationBadge.tsx","../src/notifications/components/NotificationCard.tsx","../src/notifications/components/DateRow.tsx","../src/notifications/components/NotificationList.tsx","../src/accounts/components/detailsdrawer/Accounts/AccountActionsRow.tsx","../src/accounts/hooks/useUiStore.ts","../src/accounts/hooks/useGetMergeableAccounts.tsx","../src/accounts/components/detailsdrawer/Accounts/AccountActions.tsx","../src/accounts/utils/getConnectionMessages.tsx","../src/accounts/components/detailsdrawer/Accounts/AccountConnection.tsx","../src/accounts/components/detailsdrawer/Accounts/AccountDetailEdit.tsx","../src/accounts/components/detailsdrawer/Accounts/AccountDetails.tsx","../src/accounts/components/detailsdrawer/Accounts/AccountDetailsTab.tsx","../src/accounts/components/detailsdrawer/Accounts/ConnectionErrorMessage.tsx","../src/accounts/components/detailsdrawer/Transactions/TransactionsTab.tsx","../src/accounts/components/detailsdrawer/Accounts/AccountDetailsContent.tsx","../src/trends/utils/shared.ts","../src/trends/utils/SpendingData.ts","../src/trends/components/TrendsChart.tsx","../src/accounts/components/detailsdrawer/Accounts/AccountDetailsChart.tsx","../src/accounts/components/detailsdrawer/Accounts/AccountDetailsHeader.tsx","../src/accounts/components/AccountsList.tsx","../src/accounts/components/ConnectionsDrawer.tsx","../src/accounts/AccountsWidget.tsx","../src/accounts/AccountsMiniWidget.tsx","../src/accounts/components/ConnectImage.tsx","../src/accounts/components/ConnectMiniWidgetCard.tsx","../src/accounts/ConnectMiniWidget.tsx"],"sourcesContent":["export const ANALYTICS_EVENTS = {\n ACCOUNTS_CLICK_SYNC: 'accounts_widget_click_sync',\n ACCOUNTS_CLICK_CONNECT: 'accounts_widget_click_connect_accounts',\n ACCOUNTS_CLICK_FILTER: 'accounts_widget_click_filter_accounts',\n ACCOUNTS_CLICK_ACCOUNT: 'accounts_widget_click_account',\n ACCOUNT_DETAILS_CLICK_HIDE: 'account_details_click_hide_account',\n ACCOUNT_DETAILS_CLICK_MARK_CLOSED: 'account_details_click_mark_as_closed',\n ACCOUNT_DETAILS_CLICK_MARK_DUPLICATE: 'account_details_click_mark_as_duplicate',\n ACCOUNT_DETAILS_CLICK_TRANSACTION: 'account_details_click_transaction',\n ACCOUNT_DETAILS_VIEW: 'account_details',\n ACCOUNT_DETAILS_VIEW_TRANSACTIONS: 'account_details_transactions',\n BUDGETS_CLICK_FILTER: 'budgets_widget_click_filter_accounts',\n BUDGETS_CLICK_ADD: 'budgets_widget_click_add_budget',\n BUDGETS_CLICK_EDIT_INCOME: 'budgets_widget_click_edit_income',\n BUDGETS_CLICK_BUDGET_CATEGORY: 'budgets_widget_click_budget_category',\n BUDGETS_VIEW: 'budgets',\n CASH_FLOW_CLICK_SETTINGS: 'cash_flow_widget_click_settings',\n CASH_FLOW_CLICK_FILTER: 'cash_flow_widget_click_filter_accounts',\n DEBTS_CLICK_TABLE_SORT: 'debts_widget_click_table_sort',\n DEBTS_CLICK_TABLE_ROW: 'debts_widget_click_table_row',\n GOALS_VIEW: 'goals',\n GOALS_CLICK_FILTER: 'goals_widget_click_filter_accounts',\n GOALS_CLICK_ADD: 'goals_widget_click_add',\n NET_WORTH_VIEW: 'net_worth',\n NET_WORTH_WIDGET_CLICK_ASSETS_LIABILITIES: 'net_worth_widget_click_view_assets_liabilities',\n NET_WORTH_WIDGET_CLICK_FILTER: 'net_worth_widget_click_filter_accounts',\n NET_WORTH_WIDGET_CLICK_TIMEFRAME: 'net_worth_widget_click_time_period',\n RECURRING_ACTIVITY_CLICK_SETTINGS: 'recurring_transactions_widget_click_settings',\n RECURRING_ACTIVITY_CLICK_FILTER: 'recurring_transactions_widget_click_filter_accounts',\n RECURRING_ACTIVITY_CLICK_UPCOMING: 'recurring_transactions_widget_click_upcoming_transaction',\n RECURRING_ACTIVITY_CLICK_PAID: 'recurring_transactions_widget_click_paid_expense',\n RECURRING_ACTIVITY_CLICK_CALENDAR_RIGHT: 'recurring_transactions_widget_click_calendar_right',\n RECURRING_ACTIVITY_CLICK_EXPENSE: 'recurring_transactions_widget_manage_expenses_click_expense',\n RECURRING_ACTIVITY_CLICK_ADD_EXPENSE:\n 'recurring_transactions_widget_manage_expenses_click_add_expense',\n RECURRING_ACTIVITY_CLICK_INCOME: 'recurring_transactions_widget_click_income',\n RECURRING_ACTIVITY_CLICK_ADD_INCOME:\n 'recurring_transactions_widget_income_details_click_add_income',\n SPENDING_VIEW: 'spending',\n SPENDING_CLICK_FILTER: 'spending_widget_click_filter_accounts',\n TRANSACTIONS_VIEW: 'transactions',\n TRANSACTIONS_ADD_MANUAL_ACCOUNT_MODAL: 'transactions_add_manual_account_modal',\n TRANSACTIONS_CLICK_SEARCH: 'transactions_click_search',\n TRANSACTIONS_CLICK_FILTER: 'transactions_click_filter_accounts',\n TRANSACTIONS_CLICK_EXPORT: 'transactions_click_export_csv',\n TRANSACTIONS_CLICK_ADD: 'transactions_click_add_transaction',\n TRANSACTIONS_CLICK_DETAILS: 'transactions_click_transaction_details',\n TRANSACTION_DETAILS_VIEW: 'transaction_details',\n TRANSACTION_DETAILS_CLICK_DESCRIPTION: 'transaction_details_click_edit_description',\n TRANSACTION_DETAILS_CLICK_FLAG: 'transaction_details_click_flag_transaction',\n TRANSACTION_DETAILS_CLICK_CATEGORY: 'transaction_details_click_category',\n TRANSACTION_DETAILS_CLICK_DATE: 'transaction_details_click_date',\n TRANSACTION_DETAILS_CLICK_DELETE_LOGO: 'transaction_details_click_delete_merchant_logo',\n TRANSACTION_DETAILS_CLICK_MEMO: 'transaction_details_click_memo',\n TRANSACTION_DETAILS_CLICK_SPLIT: 'transaction_details_click_split_transaction',\n TRANSACTION_DETAILS_CLICK_UNSPLIT: 'transaction_details_click_unsplit_transaction',\n TRANSACTION_DETAILS_CLICK_TAGS: 'transaction_details_click_tags',\n TRANSACTION_DETAILS_CLICK_AMOUNT: 'transaction_details_click_transaction_amount',\n TRENDS_CLICK_FILTER: 'trends_widget_click_filter_accounts',\n TRENDS_CLICK_TOGGLE: 'trends_widget_toggle_chart_table',\n TRENDS_CLICK_DATE: 'trends_widget_click_date_range',\n TRENDS_CLICK_TABLE_SORT: 'trends_widget_click_table_sort',\n TRENDS_CLICK_TABLE_ROW: 'trends_widget_click_table_row',\n TRENDS_CLICK_LEGEND: 'trends_widget_click_legend',\n TRENDS_HOVER_LEGEND: 'trends_widget_hover_legend',\n TRENDS_HOVER_AREA: 'trends_widget_hover_chart_area',\n TRENDS_HOVER_POINT: 'trends_widget_hover_chart_point',\n TRENDS_VIEW_TRANSACTIONS: 'trends_widget_view_transactions',\n WIDGET_BACK_CLICK: 'widget_back_button_click',\n}\n","import { intlFormat } from 'date-fns/intlFormat'\nimport { getLocale } from '../utils'\n\nexport const ORDINAL_DATE_FORMAT = 'do'\nexport const ORDINAL_MONTH_DAY_YEAR_FORMAT = 'MMM do, yyyy'\n\n// Documentation on the options for formatting int'l dates\n// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl/DateTimeFormat/DateTimeFormat\nexport const DATE_FORMATS_INTL = {\n TIME_STAMP_HOUR_MINUTE: {\n hour: 'numeric',\n minute: 'numeric',\n },\n DAY: {\n day: 'numeric',\n },\n DAY_OF_WEEK: {\n weekday: 'long',\n },\n DAY_OF_WEEK_MONTH_DAY: {\n day: 'numeric',\n month: 'long',\n weekday: 'long',\n },\n FULL_MONTH_DAY: {\n day: 'numeric',\n month: 'long',\n },\n MONTH: {\n month: 'short',\n },\n MONTH_DAY: {\n day: 'numeric',\n month: 'short',\n },\n MONTH_LONG: {\n month: 'long',\n },\n MONTH_SHORT: {\n month: 'short',\n },\n MONTH_SHORT_YEAR: {\n month: 'short',\n year: 'numeric',\n },\n MONTH_YEAR: {\n month: 'long',\n year: 'numeric',\n },\n YEAR_MONTH_DAY: {\n day: '2-digit',\n month: '2-digit',\n year: 'numeric',\n },\n MONTH_DAY_YEAR: {\n month: 'short',\n day: '2-digit',\n year: 'numeric',\n },\n MED_MONTH_SHORT_DAY_FULL_YEAR: {\n month: 'short',\n day: 'numeric',\n year: 'numeric',\n },\n}\n\nexport interface Day {\n day: string\n}\n\nexport interface DayOfWeek {\n weekday: string\n}\n\nexport interface DayOfWeekMonthDay {\n day: string\n month: string\n weekday: string\n}\n\nexport interface MonthDay {\n day: string\n month: string\n}\n\nexport interface MonthLong {\n month: string\n}\n\nexport interface MonthShort {\n month: string\n}\n\nexport interface MonthYear {\n month: string\n year: string\n}\n\nexport interface TimeStamp {\n hour: string\n minute: string\n}\n\nexport interface YearMonthDay {\n day: string\n month: string\n year: string\n}\n\nexport const formatDate = (\n date: string | Date,\n dFormat:\n | Day\n | DayOfWeek\n | DayOfWeekMonthDay\n | MonthDay\n | MonthLong\n | MonthShort\n | MonthYear\n | TimeStamp\n | YearMonthDay,\n) => intlFormat(new Date(date), Object.assign(dFormat), { locale: getLocale() })\n","export interface Account {\n account_number?: string\n account_subtype?: AccountSubType\n account_type: AccountType\n apr?: number\n apy?: number\n available_balance?: number\n balance?: number\n balance_updated_at?: number\n cash_balance?: number\n credit_limit?: number\n current_balance?: number\n currency_code?: string\n day_payment_is_due?: number\n display_order?: number\n external_guid?: string\n feed_account_type?: number\n feed_apr?: number\n feed_apy?: number\n feed_credit_limit?: number\n feed_day_payment_is_due?: number\n feed_interest_rate?: number\n feed_is_closed?: boolean\n feed_localized_name?: string\n feed_name?: string\n feed_nickname?: string\n feed_original_balance?: number\n flags?: number\n guid: string\n institution_guid?: string\n interest_rate?: number\n interest_rate_set_by?: number\n interestRate?: number\n is_closed: boolean\n is_deleted: boolean\n is_excluded_from_accounts: boolean\n is_excluded_from_budgets: boolean\n is_excluded_from_cash_flow: boolean\n is_excluded_from_debts: boolean\n is_excluded_from_goals: boolean\n is_excluded_from_investments: boolean\n is_excluded_from_net_worth: boolean\n is_excluded_from_spending: boolean\n is_excluded_from_transactions: boolean\n is_excluded_from_trends: boolean\n is_hidden: boolean\n is_manual: boolean\n is_personal: boolean\n localized_name?: string\n member_guid?: string\n member_is_managed_by_user: boolean\n metadata?: string\n minimum_payment?: number\n name?: string\n nickname?: string\n original_balance?: number\n payment_due_at?: number\n pending_balance?: number\n property_type?: PropertyType\n revision?: number\n updated_at?: number\n user_guid?: string\n user_name?: string\n\n // UI Added fields\n memberName?: string\n connectionStatus?: ConnectionStatus\n\n // UI Added fields from Pulse\n displayName?: string\n truncatedDisplayName?: string\n institutionName?: string\n}\n\nexport interface DetailedAccount extends Account {\n institution_name: string\n isEnabled: boolean\n name: string\n}\n\nexport interface Member {\n aggregation_status: number\n connection_status: number\n guid: string\n institution_guid: string\n institution_name?: string\n institution_url?: string\n is_being_aggregated: boolean\n is_manual: boolean\n is_managed_by_user: boolean\n is_oauth: boolean\n last_job_guid?: string\n last_job_status?: string\n last_update_time?: number\n metadata?: string\n mfa: any\n most_recent_job_guid?: string\n needs_updated_credentials: boolean\n name: string\n process_status?: number\n revision: number\n user_guid: string\n oauth_window_uri?: string\n verification_is_enabled: boolean\n tax_statement_is_enabled: boolean\n successfully_aggregated_at?: number\n\n // UI Added fields\n connectionStatus?: ConnectionStatus\n}\n\nexport interface MonthlyAccountBalance {\n account_guid: string\n balance: number\n credit_transaction_total: number\n debit_transaction_total: number\n id: string\n month: number\n transaction_total: number\n user_guid: string\n year: number\n year_month: number\n}\n\nexport enum AccountType {\n ANY = 0,\n CHECKING = 1,\n SAVINGS = 2,\n LOAN = 3,\n CREDIT_CARD = 4,\n INVESTMENT = 5,\n LINE_OF_CREDIT = 6,\n MORTGAGE = 7,\n PROPERTY = 8,\n CASH = 9,\n INSURANCE = 10,\n PREPAID = 11,\n CHECKING_LINE_OF_CREDIT = 12,\n DIGITAL_WALLET = 13,\n}\n\nexport enum AccountSubType {\n NONE = 0,\n MONEY_MARKET = 1,\n CERTIFICATE_OF_DEPOSIT = 2,\n AUTO = 3,\n STUDENT = 4,\n SMALL_BUSINESS = 5,\n PERSONAL = 6,\n PERSONAL_WITH_COLLATERAL = 7,\n HOME_EQUITY = 8,\n PLAN_401_K = 9,\n PLAN_403_B = 10,\n PLAN_529 = 11,\n IRA = 12,\n ROLLOVER_IRA = 13,\n ROTH_IRA = 14,\n TAXABLE = 15,\n NON_TAXABLE = 16,\n BROKERAGE = 17,\n TRUST = 18,\n UNIFORM_GIFTS_TO_MINORS_ACT = 19,\n PLAN_457 = 20,\n PENSION = 21,\n EMPLOYEE_STOCK_OWNERSHIP_PLAN = 22,\n SIMPLIFIED_EMPLOYEE_PENSION = 23,\n SIMPLE_IRA = 24,\n BOAT = 25,\n POWERSPORTS = 26,\n RV = 27,\n HELOC = 28,\n PLAN_ROTH_401_K = 29,\n FIXED_ANNUITY = 30,\n VARIABLE_ANNUITY = 31,\n VEHICLE_INSURANCE = 32,\n DISABILITY = 33,\n HEALTH = 34,\n LONG_TERM_CARE = 35,\n PROPERTY_AND_CASUALTY = 36,\n UNIVERSAL_LIFE = 37,\n TERM_LIFE = 38,\n WHOLE_LIFE = 39,\n ACCIDENTAL_DEATH_AND_DISMEMBERMENT = 40,\n VARIABLE_UNIVERSAL_LIFE = 41,\n HSA = 42,\n TAX_FREE_SAVINGS_ACCOUNT = 43,\n INDIVIDUAL = 44,\n REGISTERED_RETIREMENT_INCOME_FUND = 45,\n CASH_MANAGEMENT_ACCOUNT = 46,\n EMPLOYEE_STOCK_PURCHASE_PLAN = 47,\n REGISTERED_EDUCATION_SAVINGS_PLAN = 48,\n PROFIT_SHARING_PLAN = 49,\n UNIFORM_TRANSFER_TO_MINORS_ACT = 50,\n PLAN_401_A = 51,\n SARSEP_IRA = 52,\n FIXED_ANNUITY_TRADITIONAL_IRA = 53,\n VARIABLE_ANNUITY_TRADITIONAL_IRA = 54,\n SEPP_IRA = 55,\n INHERITED_TRADITIONAL_IRA = 56,\n FIXED_ANNUITY_ROTH_IRA = 57,\n VARIABLE_ANNUITY_ROTH_IRA = 58,\n INHERITED_ROTH_IRA = 59,\n COVERDELL = 60,\n ADVISORY_ACCOUNT = 61,\n BROKERAGE_MARGIN = 62,\n CHARITABLE_GIFT_ACCOUNT = 63,\n CHURCH_ACCOUNT = 64,\n CONSERVATORSHIP = 65,\n CUSTODIAL = 66,\n DEFINED_BENEFIT_PLAN = 67,\n DEFINED_CONTRIBUTION_PLAN = 68,\n EDUCATIONAL = 69,\n ESTATE = 70,\n EXECUTOR = 71,\n GROUP_RETIREMENT_SAVINGS_PLAN = 72,\n GUARANTEED_INVESTMENT_CERTIFICATE = 73,\n HRA = 74,\n INDEXED_ANNUITY = 75,\n INVESTMENT_CLUB = 76,\n IRREVOCABLE_TRUST = 77,\n JOINT_TENANTS_BY_ENTIRITY = 78,\n JOINT_TENANTS_COMMUNITY_PROPERTY = 79,\n JOINT_TENANTS_IN_COMMON = 80,\n JOINT_TENANTS_WITH_RIGHTS_OF_SURVIVORSHIP = 81,\n KEOUGH_PLAN = 82,\n LIFE_INCOME_FUND = 83,\n LIVING_TRUST = 84,\n LOCKED_IN_RETIREMENT_ACCOUNT = 85,\n LOCKED_IN_RETIREMENT_INVESTMENT_FUND = 86,\n LOCKED_IN_RETIREMENT_SAVINGS_ACCOUNT = 87,\n MONEY_PURCHASE_PLAN = 88,\n PARTNERSHIP = 89,\n PLAN_409_A = 90,\n PLAN_ROTH_403_B = 91,\n REGISTERED_DISABILITY_SAVINGS_PLAN = 92,\n REGISTERED_LOCKED_IN_SAVINGS_PLAN = 93,\n REGISTERED_PENSION_PLAN = 94,\n REGISTERED_RETIREMENT_SAVINGS_PLAN = 95,\n REVOCABLE_TRUST = 96,\n ROTH_CONVERSION = 97,\n SOLE_PROPRIETORSHIP = 98,\n SPOUSAL_IRA = 99,\n SPOUSAL_ROTH_IRA = 100,\n TESTAMENTARY_TRUST = 101,\n THRIFT_SAVINGS_PLAN = 102,\n INHERITED_ANNUITY = 103,\n CORPORATE_ACCOUNT = 104,\n LIMITED_LIABILITY_ACCOUNT = 105,\n HSA_SAVINGS = 106,\n HSA_CHECKING = 107,\n}\n\nexport enum PropertyType {\n REAL_ESTATE = 0,\n VEHICLE = 1,\n ART = 2,\n JEWELRY = 3,\n FURNITURE = 4,\n APPLIANCES = 5,\n COMPUTER = 6,\n ELECTRONICS = 7,\n SPORTS_EQUIPMENT = 8,\n MISCELLANEOUS = 9,\n}\n\nexport enum ConnectionStatusEnums {\n CREATED = 0, // The member is new and has not aggregated yet\n PREVENTED = 1, // MX preventing aggregation until credentials are updated\n DENIED = 2, // Invalid credentials\n CHALLENGED = 3, // MFA presented\n REJECTED = 4, // MFA answered incorrectly\n LOCKED = 5, // Institution is preventing authentication, user must contact FI\n CONNECTED = 6, // Successfully authenticated and aggregating data\n IMPEDED = 7, // User attention is needed in online banking (marketing message, terms and conditions etc.)\n RECONNECTED = 8, // The connection has been migrated, we will not aggregate until user interacts with UI\n DEGRADED = 9, // Aggregation has failed for a short period with a minimum number of attempts\n DISCONNECTED = 10, // Aggregation has failed for an extended period of time with a minimum number of attempts\n DISCONTINUED = 11, // The connection to this institution is no longer available\n CLOSED = 12, // The user, MX, the client or partner have marked the account as closed\n DELAYED = 13, // Aggregation has taken longer than expected without being CONNECTED\n FAILED = 14, // Aggregation failed without being CONNECTED\n UPDATED = 15, // Credenitals have been updated, but the member has not yet been CONNECTED\n DISABLED = 16, // Aggregation has been momentarily paused, but the member is still CONNECTED\n IMPORTED = 17, // Member was imported from another provider using the MDX Migration API\n RESUMED = 18, // MFA has been answered and has not yet been CONNECTED\n EXPIRED = 19, // MFA has not been answered before job timed out\n IMPAIRED = 20, // Memeber is missing some or all credentials needed to connect\n PENDING = 21, // OAuth member created but waiting for authentication redirect // Not visible to user\n}\n\nexport const ProcessingStatuses = [\n ConnectionStatusEnums.CREATED,\n ConnectionStatusEnums.UPDATED,\n ConnectionStatusEnums.RESUMED,\n]\n\nexport const MfaStatuses = [ConnectionStatusEnums.CHALLENGED, ConnectionStatusEnums.REJECTED]\n\nexport const ErrorStatuses = [\n ConnectionStatusEnums.PREVENTED,\n ConnectionStatusEnums.DENIED,\n ConnectionStatusEnums.LOCKED,\n ConnectionStatusEnums.IMPEDED,\n ConnectionStatusEnums.DEGRADED,\n ConnectionStatusEnums.DISCONNECTED,\n ConnectionStatusEnums.DISCONTINUED,\n ConnectionStatusEnums.CLOSED,\n ConnectionStatusEnums.DELAYED,\n ConnectionStatusEnums.FAILED,\n ConnectionStatusEnums.DISABLED,\n ConnectionStatusEnums.IMPORTED,\n ConnectionStatusEnums.EXPIRED,\n ConnectionStatusEnums.IMPAIRED,\n]\n\nexport const NonConnectedStatuses = [...ErrorStatuses, ...MfaStatuses]\n\nexport enum ConnectionStatus {\n Connected = 'Connected',\n Error = 'Error',\n Processing = 'Processing',\n RequiresMfa = 'RequiresMfa',\n}\n\nexport const StatusName: any = {\n [ConnectionStatusEnums.CHALLENGED]: 'Challenged',\n [ConnectionStatusEnums.CLOSED]: 'Closed',\n [ConnectionStatusEnums.DEGRADED]: 'Degraded',\n [ConnectionStatusEnums.DELAYED]: 'Delayed',\n [ConnectionStatusEnums.DENIED]: 'Denied',\n [ConnectionStatusEnums.DISABLED]: 'Disabled',\n [ConnectionStatusEnums.DISCONNECTED]: 'Disconnected',\n [ConnectionStatusEnums.DISCONTINUED]: 'Discontinued',\n [ConnectionStatusEnums.EXPIRED]: 'Expired',\n [ConnectionStatusEnums.FAILED]: 'Failed',\n [ConnectionStatusEnums.IMPAIRED]: 'Impaired',\n [ConnectionStatusEnums.IMPEDED]: 'Impeded',\n [ConnectionStatusEnums.IMPORTED]: 'Imported',\n [ConnectionStatusEnums.LOCKED]: 'Locked',\n [ConnectionStatusEnums.PREVENTED]: 'Prevented',\n [ConnectionStatusEnums.REJECTED]: 'Rejected',\n}\n\nexport const AccountTypeName: any = {\n [AccountType.ANY]: 'Any',\n [AccountType.CASH]: 'Cash',\n [AccountType.CHECKING]: 'Checking',\n [AccountType.CHECKING_LINE_OF_CREDIT]: 'Checking Line of Credit',\n [AccountType.CREDIT_CARD]: 'Credit Card',\n [AccountType.DIGITAL_WALLET]: 'Digital Wallet',\n [AccountType.INSURANCE]: 'Insurance',\n [AccountType.INVESTMENT]: 'Investment',\n [AccountType.LINE_OF_CREDIT]: 'Line of Credit',\n [AccountType.LOAN]: 'Loan',\n [AccountType.MORTGAGE]: 'Mortgage',\n [AccountType.PREPAID]: 'Prepaid',\n [AccountType.PROPERTY]: 'Property',\n [AccountType.SAVINGS]: 'Savings',\n}\n\nexport const AccountIcon: any = {\n [AccountType.ANY]: 'account_balance',\n [AccountType.CASH]: 'monetization_on',\n [AccountType.CHECKING]: 'checkbook',\n [AccountType.CHECKING_LINE_OF_CREDIT]: 'checkbook', // Checking line of credit has the same icon as checking\n [AccountType.CREDIT_CARD]: 'credit_card',\n [AccountType.DIGITAL_WALLET]: 'wallet',\n [AccountType.INSURANCE]: 'monitor_heart',\n [AccountType.INVESTMENT]: 'trending_up',\n [AccountType.LINE_OF_CREDIT]: 'add_credit',\n [AccountType.LOAN]: 'loans',\n [AccountType.MORTGAGE]: 'house',\n [AccountType.PREPAID]: 'credit_card',\n [AccountType.PROPERTY]: 'key',\n [AccountType.SAVINGS]: 'savings',\n}\n\nexport const AccountIconVariants: any = {\n [AccountType.INVESTMENT]: 'bid_landscape',\n}\n\nexport const PropertyTypeName: any = {\n [PropertyType.REAL_ESTATE]: 'Real Estate',\n [PropertyType.VEHICLE]: 'Vehicle',\n [PropertyType.ART]: 'Art',\n [PropertyType.JEWELRY]: 'Jewelry',\n [PropertyType.FURNITURE]: 'Furniture',\n [PropertyType.APPLIANCES]: 'Appliances',\n [PropertyType.COMPUTER]: 'Computer',\n [PropertyType.ELECTRONICS]: 'Electronics',\n [PropertyType.SPORTS_EQUIPMENT]: 'Sports Equipment',\n [PropertyType.MISCELLANEOUS]: 'Miscellaneous',\n}\n\nexport const PropertyIcon: any = {\n [PropertyType.REAL_ESTATE]: 'home_work',\n [PropertyType.VEHICLE]: 'directions_car',\n [PropertyType.ART]: 'insert_photo',\n [PropertyType.JEWELRY]: 'diamond',\n [PropertyType.FURNITURE]: 'chair',\n [PropertyType.APPLIANCES]: 'kitchen',\n [PropertyType.COMPUTER]: 'computer',\n [PropertyType.ELECTRONICS]: 'camera_alt',\n [PropertyType.SPORTS_EQUIPMENT]: 'sports_baseball',\n [PropertyType.MISCELLANEOUS]: 'monetization_on',\n}\n","import { AccountType } from '../types/Account'\n\nexport const INCOME_ACCOUNT_TYPES = [\n AccountType.ANY,\n AccountType.CASH,\n AccountType.CHECKING,\n AccountType.DIGITAL_WALLET,\n AccountType.PREPAID,\n AccountType.SAVINGS,\n]\n\nexport const PAYMENT_ACCOUNT_TYPES = [\n AccountType.CHECKING_LINE_OF_CREDIT,\n AccountType.CREDIT_CARD,\n AccountType.LINE_OF_CREDIT,\n AccountType.LOAN,\n AccountType.MORTGAGE,\n]\n\nexport const SPENDING_ACCOUNT_TYPES = [\n AccountType.ANY,\n AccountType.CASH,\n AccountType.CHECKING,\n AccountType.CHECKING_LINE_OF_CREDIT,\n AccountType.CREDIT_CARD,\n AccountType.DIGITAL_WALLET,\n AccountType.LINE_OF_CREDIT,\n AccountType.PREPAID,\n AccountType.SAVINGS,\n]\n","export const CategoryGuids = {\n // Top-level categories\n AUTO_AND_TRANSPORT: 'CAT-7829f71c-2e8c-afa5-2f55-fa3634b89874',\n BILLS_AND_UTILITIES: 'CAT-79b02f2f-2adc-88f0-ac2b-4e71ead9cfc8',\n BUSINESS_SERVICES: 'CAT-94b11142-e97b-941a-f67f-6e18d246a23f',\n EDUCATION: 'CAT-bf5c9cca-c96b-b50d-440d-38d9adfda5b0',\n ENTERTAINMENT: 'CAT-e04e9d1e-e041-c315-2e50-094143ab3f73',\n FEES_AND_CHARGES: 'CAT-d73ee74b-13a4-ac3e-4015-fc4ba9a62b2a',\n FINANCIAL: 'CAT-6c7de3f8-de6c-7061-1dd2-b093044014bf',\n FOOD_AND_DINING: 'CAT-bd56d35a-a9a7-6e10-66c1-5b9cc1b6c81a',\n GIFTS_AND_DONATIONS: 'CAT-8edf9663-623e-4735-490e-31288f0a70b0',\n HEALTH_AND_FITNESS: 'CAT-52fa4693-c088-afb2-2a99-7bc39bb23a0f',\n HOME: 'CAT-b709172b-4eb7-318e-3b5d-e0f0500b32ac',\n INCOME: 'CAT-bf9f3294-4c40-1677-d269-54fbc189faf3',\n INVESTMENTS: 'CAT-ccd42390-9e8c-3fb6-a5d9-6c31182d9c5c',\n KIDS: 'CAT-0cb1d99d-f558-99e3-2282-b31f359b411a',\n PERSONAL_CARE: 'CAT-e5154228-fe45-790d-a280-f6bf5ae5ac9f',\n PETS: 'CAT-7cccbafa-87d7-c9a6-661b-8b3402fe9e78',\n SHOPPING: 'CAT-aad51b46-d6f7-3da5-fd6e-492328b3023f',\n TAXES: 'CAT-d00fc539-aa14-009b-4ffb-7e8c7b839954',\n TRANSFER: 'CAT-bce48142-fea4-ff45-20d9-0a642d44de83',\n TRAVEL: 'CAT-ea23d844-cbd1-eb10-f6ac-0df9610e59ae',\n UNCATEGORIZED: 'CAT-d7851c65-3353-e490-1953-fb9235e681e4',\n // Subcategories\n LOCAL_TAX: 'CAT-0bbdacce-ba14-3e73-e1aa-cc64e671575c',\n WITHDRAWAL: 'CAT-00c762a2-be42-c735-2d3f-b14a1e58453f',\n TRADE_COMMISSIONS: 'CAT-1a01ddd4-9a37-b96b-33dc-6c68457e7806',\n BABYSITTER_DAYCARE: 'CAT-2ba97a5c-a371-3b4f-d018-cba64bb9767a',\n CHILD_SUPPORT: 'CAT-2cb0a3a8-3f05-9325-1203-27ed2d619dce',\n CREDIT_CARD_PAYMENT: 'CAT-2cc9b500-e09d-88be-e3e0-0a8a82a54586',\n STUDENT_LOAN: 'CAT-2ce4972e-5620-57be-8475-d084edf88888',\n LIFE_INSURANCE: 'CAT-2cf64b94-e966-0949-0d07-b211080ddaa6',\n PRINTING: 'CAT-3b09fb0b-3296-c76c-2bbd-a2bce0012d83',\n FINANCIAL_ADVISOR: 'CAT-3db5697d-5dce-6bd9-c08f-5065b25e96c8',\n INTEREST_INCOME: 'CAT-5aa555dc-a071-c727-8d04-cb337832d342',\n LATE_FEE: 'CAT-5bfddc95-a506-b1d2-0f73-63b1afeddb91',\n LAWN_GARDEN: 'CAT-5cc7f5e2-3f2e-61ce-52e7-4acf366c2ee3',\n FINANCE_CHARGE: 'CAT-5dab8347-e0b4-daf9-0a65-f2be80feb8ad',\n FRAUD_PROTECTION: 'CAT-5f7f2084-6f8a-d927-6fa7-8e699912432a',\n MOVIES_DVDS: 'CAT-6ab65efd-36e4-69ca-969a-a7304d05240a',\n HOME_INSURANCE: 'CAT-6cb40bc6-0c0d-6fae-db3b-62a6bc4bb1a2',\n CASH: 'CAT-08a5d861-2890-686e-ebaf-d7632ec88540',\n TUITION: 'CAT-8b01fafd-9bf5-7999-49c9-cb67da50b14d',\n HEALTH_INSURANCE: 'CAT-8faa2a11-f393-9c13-2885-e7d11fa6a51a',\n DIVIDEND_CAP_GAINS: 'CAT-9b21122f-bd17-97ce-ef5c-3f034e75fd6c',\n ALCOHOL_BARS: 'CAT-9d58b17b-0982-18b5-5a6e-8a76337c4f88',\n LEGAL: 'CAT-13c1e57c-3749-41b4-3bc4-b1b334adab85',\n PUBLIC_TRANSPORTATION: 'CAT-19e6ec13-83ed-5511-7f75-3688d3f97a8e',\n MORTGAGE_RENT: 'CAT-23b4b4c6-5fbb-9299-b887-4b56196e6fb4',\n HOTEL: 'CAT-28be9904-9f4c-c4af-d2b7-bb24763ae0ae',\n TRANSFER_FOR_CASH_SPENDING: 'CAT-28d5fc92-cb41-8daa-3ab7-6f7bbde118fb',\n UTILITIES: 'CAT-56a2979d-d6df-25da-f357-06282f08208e',\n DEPOSIT: 'CAT-58aced66-6d70-4024-7667-77e98b6e5805',\n HOME_PHONE: 'CAT-60d81dd3-8ac1-a6fb-b181-b736dbb42be3',\n SERVICE_PARTS: 'CAT-67a20fb1-1a61-dc27-3fff-f28fa904025f',\n INTERNET: 'CAT-78d29c63-54db-197d-9851-feeb94cf6e10',\n BOOKS: 'CAT-80a40aa1-9f7e-2393-0dfe-b222dc8099a2',\n NEWSPAPERS_MAGAZINES: 'CAT-84f5a582-f620-bea1-fb2c-a746094e9955',\n FAST_FOOD: 'CAT-88cbb033-0fc1-ff06-6532-0f357c0f5081',\n COFFEE_SHOPS: 'CAT-93ebd80b-4801-cf52-e844-91594ed4c217',\n SELL: 'CAT-095e8e70-f5fa-9e68-8187-6cac76d14f85',\n OFFICE_SUPPLIES: 'CAT-97a2b899-5a32-4196-b87c-a8e65d8a9849',\n PET_GROOMING: 'CAT-99b03e0f-c678-268b-a97c-81092e68efab',\n AMUSEMENT: 'CAT-163c92ab-5ac1-3125-6a0b-c3aff5cdbb59',\n BOOKS_SUPPLIES: 'CAT-167d816f-c68e-9988-e064-173dc6417a90',\n VACATION: 'CAT-206fbc35-a569-c89a-30be-a3b65d0fbea7',\n SERVICE_FEE: 'CAT-386e01dd-8cc0-a433-f4a9-b3a2d153abbf',\n GIFT: 'CAT-465a2e70-099b-dc43-4422-913c21311002',\n CHARITY: 'CAT-583f1ede-3608-3ec6-b39b-0874198626ed',\n PARKING: 'CAT-726da718-d572-1e4d-7c3f-0b8b5370fe71',\n SHIPPING: 'CAT-748efd05-e27a-5c79-1217-681a0ec5cc67',\n ARTS: 'CAT-967a9441-5694-9419-6b40-67f15cd55fe4',\n PAYCHECK: 'CAT-982ea9e6-3f0e-0c5b-611b-6657a10ba819',\n FURNISHINGS: 'CAT-2910e436-7fed-f922-184c-60bc1b6c5417',\n RESTAURANTS: 'CAT-006862be-64a0-e778-f035-0936445b9c16',\n SPA_MASSAGE: 'CAT-8008cdab-ba5c-26e9-310d-a3ff4afeeb62',\n RENTAL_CAR_TAXI: 'CAT-9588eaad-90a4-bb5c-66c8-1812503d0db8',\n ALLOWANCE: 'CAT-9961e379-d9e9-490c-1c4b-bfa233899167',\n BANKING_FEE: 'CAT-30283e5b-f0fb-d8ab-a9fd-de992b508eac',\n BUY: 'CAT-70215a5e-bd15-e0ac-3842-058b5e8e99b7',\n STATE_TAX: 'CAT-7248227b-303e-ee19-e30c-c4f389da169b',\n TOYS: 'CAT-7524310a-da68-ac09-2312-71ca60a40ec0',\n KIDS_ACTIVITIES: 'CAT-32012156-b11d-a1db-9697-b15432e18215',\n RENTAL_INCOME: 'CAT-67070667-8b54-b450-4e84-5f8da2d70d85',\n VETERINARY: 'CAT-71380790-762a-6e2a-d79e-d7f47689af25',\n SPORTING_GOODS: 'CAT-a9abd9b1-2e2c-4236-040d-fb414d334419',\n LAUNDRY: 'CAT-a9fb2085-ce57-a196-4cbd-338c85bae0b0',\n CLOTHING: 'CAT-a96c2e17-f69a-9805-34aa-633276a42cec',\n PHARMACY: 'CAT-a5600b35-c9b1-347d-f678-781597851104',\n HOME_SERVICES: 'CAT-a64154ee-d5e9-09c7-d5f1-59b3273c6e3c',\n ATM_FEE: 'CAT-ac2eba3a-100a-30ac-09c3-d7d88415ca1a',\n HAIR: 'CAT-af671119-50a2-636c-ddfe-c794c38e8181',\n GROCERIES: 'CAT-b1de2a04-db08-b6ed-f6fe-ca2f5b11c2d0',\n GAS: 'CAT-b6d63a19-30a7-e852-2703-bdfb4072289e',\n FEDERAL_TAX: 'CAT-b8cc4011-cdc9-10b0-b79d-bf1d534296dc',\n HOSTING: 'CAT-b74fdd98-4391-8015-eafa-e9ca0fad3bee',\n TELEVISION: 'CAT-b316e683-c898-6497-a476-6bc48d12e51d',\n MOBILE_PHONE: 'CAT-b4789667-6acc-a112-975e-15746003ed61',\n BABY_SUPPLIES: 'CAT-c9c99041-e009-4a45-4b1d-fa92daeb5dd4',\n MUSIC: 'CAT-c874ccff-d069-40df-d7c5-ddba6fbdd225',\n MORTGAGE_PAYMENT: 'CAT-c94442a5-a762-8830-4c80-2a2f6a79e627',\n SPORTS: 'CAT-cb3de962-ea82-27a9-d096-c232caeb96bd',\n AUTO_PAYMENT: 'CAT-cb93691a-684d-b326-4c32-f8abaecfde90',\n GYM: 'CAT-cd9f9f60-622d-0488-d203-044c8726a7eb',\n REIMBURSEMENT: 'CAT-ce7b7bc8-71b7-9f41-af10-b8c2d5bafc37',\n AIR_TRAVEL: 'CAT-cf82d772-fbe2-4658-303a-f4cd13d9c3c2',\n EYECARE: 'CAT-cf183729-fb60-d16a-32d0-2e1d21ff21cd',\n HOBBIES: 'CAT-d1e54c52-80cc-01ba-3907-5bbdaa0ff521',\n SALES_TAX: 'CAT-d1244982-f8d0-09b8-77bb-6495c6e0c12a',\n ELECTRONICS_SOFTWARE: 'CAT-db5d480c-5130-b42e-def4-f6dabf9c1d10',\n DOCTOR: 'CAT-db6391b3-c218-fbe5-e496-139dca993645',\n RETURNED_PURCHASE: 'CAT-dc201021-6aa2-636b-f041-8577e6f1bc73',\n HOME_IMPROVEMENT: 'CAT-ddc9b8e0-a9a1-e31e-a467-2c33e553afd9',\n AUTO_INSURANCE: 'CAT-de7c2dc7-90e6-85a2-6509-5ec10942e887',\n PROPERTY_TAX: 'CAT-dfdf9324-3c48-589d-8886-bb21bb73b5d6',\n DOMAIN_NAMES: 'CAT-e7c5ebc7-f73d-955a-db06-3724bbcf6faa',\n HOME_SUPPLIES: 'CAT-e671e3a1-b7cb-f0a9-ac6e-bc4632245c31',\n ADVERTISING: 'CAT-e6682ebe-f239-c654-8233-0970b94cc162',\n CHECK: 'CAT-ea6db36f-3985-719d-1304-ccb7eeef5ecc',\n DENTIST: 'CAT-ee48b740-c981-778b-3c02-04540dec0262',\n BONUS: 'CAT-f52f2a88-2cb6-04e4-e36a-58f7b7c6a798',\n PET_FOOD_SUPPLIES: 'CAT-fbcdb437-2533-2857-1d1a-0624c9d9e1dc',\n}\n\nexport const PaymentCategories = [\n CategoryGuids.CREDIT_CARD_PAYMENT,\n CategoryGuids.MORTGAGE_PAYMENT,\n CategoryGuids.AUTO_PAYMENT,\n]\n\nexport const CategoryGuidToName = {\n // Top-level categories\n [CategoryGuids.AUTO_AND_TRANSPORT]: 'Auto & Transport',\n [CategoryGuids.BILLS_AND_UTILITIES]: 'Bills & Utilities',\n [CategoryGuids.BUSINESS_SERVICES]: 'Business Services',\n [CategoryGuids.EDUCATION]: 'Education',\n [CategoryGuids.ENTERTAINMENT]: 'Entertainment',\n [CategoryGuids.FEES_AND_CHARGES]: 'Fees & Charges',\n [CategoryGuids.FINANCIAL]: 'Financial',\n [CategoryGuids.FOOD_AND_DINING]: 'Food & Dining',\n [CategoryGuids.GIFTS_AND_DONATIONS]: 'Gifts & Donations',\n [CategoryGuids.HEALTH_AND_FITNESS]: 'Health & Fitness',\n [CategoryGuids.HOME]: 'Home',\n [CategoryGuids.INCOME]: 'Income',\n [CategoryGuids.INVESTMENTS]: 'Investments',\n [CategoryGuids.KIDS]: 'Kids',\n [CategoryGuids.PERSONAL_CARE]: 'Personal Care',\n [CategoryGuids.PETS]: 'Pets',\n [CategoryGuids.SHOPPING]: 'Shopping',\n [CategoryGuids.TAXES]: 'Taxes',\n [CategoryGuids.TRANSFER]: 'Transfer',\n [CategoryGuids.TRAVEL]: 'Travel',\n [CategoryGuids.UNCATEGORIZED]: 'Uncategorized',\n // Subcategories\n [CategoryGuids.LOCAL_TAX]: 'Local Tax',\n [CategoryGuids.WITHDRAWAL]: 'Withdrawal',\n [CategoryGuids.TRADE_COMMISSIONS]: 'Trade Commissions',\n [CategoryGuids.BABYSITTER_DAYCARE]: 'Babysitter & Daycare',\n [CategoryGuids.CHILD_SUPPORT]: 'Child Support',\n [CategoryGuids.CREDIT_CARD_PAYMENT]: 'Credit Card Payment',\n [CategoryGuids.STUDENT_LOAN]: 'Student Loan',\n [CategoryGuids.LIFE_INSURANCE]: 'Life Insurance',\n [CategoryGuids.PRINTING]: 'Printing',\n [CategoryGuids.FINANCIAL_ADVISOR]: 'Financial Advisor',\n [CategoryGuids.INTEREST_INCOME]: 'Interest Income',\n [CategoryGuids.LATE_FEE]: 'Late Fee',\n [CategoryGuids.LAWN_GARDEN]: 'Lawn & Garden',\n [CategoryGuids.FINANCE_CHARGE]: 'Finance Charge',\n [CategoryGuids.FRAUD_PROTECTION]: 'Fraud Protection',\n [CategoryGuids.MOVIES_DVDS]: 'Movies & DVDs',\n [CategoryGuids.HOME_INSURANCE]: 'Home Insurance',\n [CategoryGuids.CASH]: 'Cash',\n [CategoryGuids.TUITION]: 'Tuition',\n [CategoryGuids.HEALTH_INSURANCE]: 'Health Insurance',\n [CategoryGuids.DIVIDEND_CAP_GAINS]: 'Dividend & Cap Gains',\n [CategoryGuids.ALCOHOL_BARS]: 'Alcohol & Bars',\n [CategoryGuids.LEGAL]: 'Legal',\n [CategoryGuids.PUBLIC_TRANSPORTATION]: 'Public Transportation',\n [CategoryGuids.MORTGAGE_RENT]: 'Mortgage & Rent',\n [CategoryGuids.HOTEL]: 'Hotel',\n [CategoryGuids.TRANSFER_FOR_CASH_SPENDING]: 'Transfer for Cash Spending',\n [CategoryGuids.UTILITIES]: 'Utilities',\n [CategoryGuids.DEPOSIT]: 'Deposit',\n [CategoryGuids.HOME_PHONE]: 'Home Phone',\n [CategoryGuids.SERVICE_PARTS]: 'Service Parts',\n [CategoryGuids.INTERNET]: 'Internet',\n [CategoryGuids.BOOKS]: 'Books',\n [CategoryGuids.NEWSPAPERS_MAGAZINES]: 'Newspapers & Magazines',\n [CategoryGuids.FAST_FOOD]: 'Fast Food',\n [CategoryGuids.COFFEE_SHOPS]: 'Coffee Shops',\n [CategoryGuids.SELL]: 'Sell',\n [CategoryGuids.OFFICE_SUPPLIES]: 'Office Supplies',\n [CategoryGuids.PET_GROOMING]: 'Pet Grooming',\n [CategoryGuids.AMUSEMENT]: 'Amusement',\n [CategoryGuids.BOOKS_SUPPLIES]: 'Books & Supplies',\n [CategoryGuids.VACATION]: 'Vacation',\n [CategoryGuids.SERVICE_FEE]: 'Service Fee',\n [CategoryGuids.GIFT]: 'Gift',\n [CategoryGuids.CHARITY]: 'Charity',\n [CategoryGuids.PARKING]: 'Parking',\n [CategoryGuids.SHIPPING]: 'Shipping',\n [CategoryGuids.ARTS]: 'Arts',\n [CategoryGuids.PAYCHECK]: 'Paycheck',\n [CategoryGuids.FURNISHINGS]: 'Furnishings',\n [CategoryGuids.RESTAURANTS]: 'Restaurants',\n [CategoryGuids.SPA_MASSAGE]: 'Spa & Massage',\n [CategoryGuids.RENTAL_CAR_TAXI]: 'Rental Car & Taxi',\n [CategoryGuids.ALLOWANCE]: 'Allowance',\n [CategoryGuids.BANKING_FEE]: 'Banking Fee',\n [CategoryGuids.BUY]: 'Buy',\n [CategoryGuids.STATE_TAX]: 'State Tax',\n [CategoryGuids.TOYS]: 'Toys',\n [CategoryGuids.KIDS_ACTIVITIES]: 'Kids Activities',\n [CategoryGuids.RENTAL_INCOME]: 'Rental Income',\n [CategoryGuids.VETERINARY]: 'Veterinary',\n [CategoryGuids.SPORTING_GOODS]: 'Sporting Goods',\n [CategoryGuids.LAUNDRY]: 'Laundry',\n [CategoryGuids.CLOTHING]: 'Clothing',\n [CategoryGuids.PHARMACY]: 'Pharmacy',\n [CategoryGuids.HOME_SERVICES]: 'Home Services',\n [CategoryGuids.ATM_FEE]: 'ATM Fee',\n [CategoryGuids.HAIR]: 'Hair',\n [CategoryGuids.GROCERIES]: 'Groceries',\n [CategoryGuids.GAS]: 'Gas',\n [CategoryGuids.FEDERAL_TAX]: 'Federal Tax',\n [CategoryGuids.HOSTING]: 'Hosting',\n [CategoryGuids.TELEVISION]: 'Television',\n [CategoryGuids.MOBILE_PHONE]: 'Mobile Phone',\n [CategoryGuids.BABY_SUPPLIES]: 'Baby Supplies',\n [CategoryGuids.MUSIC]: 'Music',\n [CategoryGuids.MORTGAGE_PAYMENT]: 'Mortgage Payment',\n [CategoryGuids.SPORTS]: 'Sports',\n [CategoryGuids.AUTO_PAYMENT]: 'Auto Payment',\n [CategoryGuids.GYM]: 'Gym',\n [CategoryGuids.REIMBURSEMENT]: 'Reimbursement',\n [CategoryGuids.AIR_TRAVEL]: 'Air Travel',\n [CategoryGuids.EYECARE]: 'Eyecare',\n [CategoryGuids.HOBBIES]: 'Hobbies',\n [CategoryGuids.SALES_TAX]: 'Sales Tax',\n [CategoryGuids.ELECTRONICS_SOFTWARE]: 'Electronics & Software',\n [CategoryGuids.DOCTOR]: 'Doctor',\n [CategoryGuids.RETURNED_PURCHASE]: 'Returned Purchase',\n [CategoryGuids.HOME_IMPROVEMENT]: 'Home Improvement',\n [CategoryGuids.AUTO_INSURANCE]: 'Auto Insurance',\n [CategoryGuids.PROPERTY_TAX]: 'Property Tax',\n [CategoryGuids.DOMAIN_NAMES]: 'Domain Names',\n [CategoryGuids.HOME_SUPPLIES]: 'Home Supplies',\n [CategoryGuids.ADVERTISING]: 'Advertising',\n [CategoryGuids.CHECK]: 'Check',\n [CategoryGuids.DENTIST]: 'Dentist',\n [CategoryGuids.BONUS]: 'Bonus',\n [CategoryGuids.PET_FOOD_SUPPLIES]: 'Pet Food & Supplies',\n}\n\nexport const CategoryColors = {\n [CategoryGuids.AUTO_AND_TRANSPORT]: '#4B9DBC',\n [CategoryGuids.BILLS_AND_UTILITIES]: '#EF9B2C',\n [CategoryGuids.BUSINESS_SERVICES]: '#B3DE8C',\n [CategoryGuids.EDUCATION]: '#F8AB3A',\n [CategoryGuids.ENTERTAINMENT]: '#AB5B89',\n [CategoryGuids.FEES_AND_CHARGES]: '#FF9696',\n [CategoryGuids.FINANCIAL]: '#6BCDDB',\n [CategoryGuids.FOOD_AND_DINING]: '#58AC7B',\n [CategoryGuids.GIFTS_AND_DONATIONS]: '#347AA5',\n [CategoryGuids.HEALTH_AND_FITNESS]: '#5C446E',\n [CategoryGuids.HOME]: '#FFD84D',\n [CategoryGuids.INCOME]: '#133F49',\n [CategoryGuids.INVESTMENTS]: '#FF7070',\n [CategoryGuids.KIDS]: '#82D196',\n [CategoryGuids.PERSONAL_CARE]: '#338B7A',\n [CategoryGuids.PETS]: '#615BAB',\n [CategoryGuids.SHOPPING]: '#CF5F84',\n [CategoryGuids.TAXES]: '#32588D',\n [CategoryGuids.TRANSFER]: '#959CA6',\n [CategoryGuids.TRAVEL]: '#E37434',\n [CategoryGuids.UNCATEGORIZED]: '#FA5555',\n}\n\nexport const CategoryIcon = {\n [CategoryGuids.AUTO_AND_TRANSPORT]: 'directions_car',\n [CategoryGuids.BILLS_AND_UTILITIES]: 'electrical_services',\n [CategoryGuids.BUSINESS_SERVICES]: 'business_center',\n [CategoryGuids.EDUCATION]: 'school',\n [CategoryGuids.ENTERTAINMENT]: 'stadium',\n [CategoryGuids.FEES_AND_CHARGES]: 'problem',\n [CategoryGuids.FINANCIAL]: 'price_check',\n [CategoryGuids.FOOD_AND_DINING]: 'grocery',\n [CategoryGuids.GIFTS_AND_DONATIONS]: 'featured_seasonal_and_gifts',\n [CategoryGuids.HEALTH_AND_FITNESS]: 'ecg_heart',\n [CategoryGuids.HOME]: 'cottage',\n [CategoryGuids.INCOME]: 'monetization_on',\n [CategoryGuids.INVESTMENTS]: 'bid_landscape',\n [CategoryGuids.KIDS]: 'face',\n [CategoryGuids.PERSONAL_CARE]: 'volunteer_activism',\n [CategoryGuids.PETS]: 'pet_supplies',\n [CategoryGuids.SHOPPING]: 'shopping_cart',\n [CategoryGuids.TAXES]: 'heap_snapshot_large',\n [CategoryGuids.TRANSFER]: 'compare_arrows',\n [CategoryGuids.TRAVEL]: 'airplane_ticket',\n [CategoryGuids.UNCATEGORIZED]: 'category',\n UNKNOWN: 'help',\n}\n","export const MAX_MONEY_INPUT = 99999999.99\n\nexport enum CurrencyCodes {\n CAD = 'CAD',\n USD = 'USD',\n}\n","export enum RecurrenceTypes {\n Unknown = 0,\n EveryWeek = 1,\n EveryOtherWeek = 2,\n EveryMonth = 3,\n EveryOtherMonth = 4,\n EveryQuarter = 5,\n EveryOtherQuarter = 6,\n EveryYear = 7,\n}\n\nexport const RECURRENCE_COPY = [\n { id: RecurrenceTypes.Unknown, copy: 'frequency_unknown' },\n { id: RecurrenceTypes.EveryWeek, copy: 'frequency_every_week' },\n { id: RecurrenceTypes.EveryOtherWeek, copy: 'frequency_every_other_week' },\n { id: RecurrenceTypes.EveryMonth, copy: 'frequency_every_month' },\n { id: RecurrenceTypes.EveryOtherMonth, copy: 'frequency_every_other_month' },\n { id: RecurrenceTypes.EveryQuarter, copy: 'frequency_every_quarter' },\n { id: RecurrenceTypes.EveryOtherQuarter, copy: 'frequency_every_other_quarter' },\n { id: RecurrenceTypes.EveryYear, copy: 'frequency_every_year' },\n]\n","export const enum Sizes {\n Small = 'small',\n Medium = 'medium',\n Large = 'large',\n}\n\nexport const TOUCH_TARGET = 44\n","import React from 'react'\nimport { DynamicCopyElement } from '../types'\n\n// matches a pattern like \"static text _1{category_name} and _2{amount} more static text\"\nconst copyPattern = /(?<static>.*?)(?<dynamic>(?:_\\d+{(?:.*?)}))|(?<staticEnd>.+)/g\n\nexport const buildDynamicCopy = (str: string, ...args: DynamicCopyElement[]) => {\n if (!str) return ''\n\n const hasFormattedElement = args.some((arg) => typeof arg !== 'string')\n\n // finds all instances of matching pattern in given string\n const regexMatches = [...str.matchAll(copyPattern)]\n const matches = regexMatches.reduce(\n (acc: DynamicCopyElement[], match: RegExpMatchArray, matchIndex) => {\n const temp = [...acc]\n const groups = match.groups\n if (groups?.static) {\n temp.push(groups.static)\n }\n\n if (groups?.dynamic) {\n const curlyIndex = groups.dynamic.indexOf('{')\n const variableName = groups.dynamic.substring(curlyIndex + 1, groups.dynamic.length - 1)\n const index = Number(groups.dynamic.substring(1, curlyIndex))\n if (React.isValidElement(args[index - 1])) {\n const element = args[index - 1] as React.ReactElement\n const clonedElement = React.cloneElement(element, {\n key: `${variableName}-${matchIndex}`,\n })\n temp.push(clonedElement)\n } else {\n temp.push(args[index - 1])\n }\n }\n\n if (groups?.staticEnd) {\n temp.push(groups.staticEnd)\n }\n\n return temp\n },\n [],\n )\n\n return hasFormattedElement ? (matches as DynamicCopyElement[]) : (matches.join('') as string)\n}\n\nexport const buildPluralCopy = (\n strOne: string,\n strMulti: string,\n count: number,\n ...args: DynamicCopyElement[]\n) => {\n if (!strOne || !strMulti) return ''\n const str = count === 1 ? strOne : strMulti\n\n return buildDynamicCopy(str, ...args)\n}\n\nexport const getLocale = () => {\n return (\n (window as any)?.app?.options?.language ||\n document.querySelector('html')?.getAttribute('lang') ||\n 'en-US'\n ).toLowerCase()\n}\n","import numeral from 'numeral'\nimport type { RoundingFunction } from 'numeral'\nimport { getLocale } from './Localization'\nimport { CurrencyCodes } from '../constants'\n\n// enhances numeral's localization functionality by puting the $ in the correct place\nexport const formatCurrency = (\n amount: number | undefined,\n formatting: string,\n roundingFunction?: RoundingFunction,\n) => {\n switch (getLocale()) {\n case 'fr-ca': {\n return numeral(amount).format(`${formatting} $`, roundingFunction)\n }\n default: {\n return numeral(amount).format(`$${formatting}`, roundingFunction)\n }\n }\n}\n\nexport const getCurrencyCodes = () => {\n switch (getLocale()) {\n case 'fr-ca':\n return CurrencyCodes.CAD\n default:\n return CurrencyCodes.USD\n }\n}\n\n// will return `true` if value is a string number, like '99', which matches Serenity logic\nexport const isValidNumber = (value: any) =>\n value !== undefined && value !== null && value !== '' && isFinite(value)\n\nconst defaultPercentStyle = {\n style: 'percent',\n minimumFractionDigits: 2,\n maximumFractionDigits: 2,\n} as Intl.NumberFormatOptions\n\nexport const formatPercentage = (\n amount: number | string | undefined,\n options: Intl.NumberFormatOptions = defaultPercentStyle,\n) =>\n isValidNumber(amount)\n ? new Intl.NumberFormat(getLocale(), options).format(Number(amount))\n : amount\n\nexport const getPluralRules = (options: Intl.PluralRulesOptions) =>\n new Intl.PluralRules(getLocale(), options)\n\nexport const formatOrdinal = (\n number: number,\n options: Intl.PluralRulesOptions = { type: 'ordinal' },\n copy = {\n one: 'st',\n two: 'nd',\n few: 'rd',\n other: 'th',\n } as const,\n) => {\n const rule = getPluralRules(options).select(number)\n\n return `${number}${copy[rule as keyof typeof copy]}`\n}\n","import { addMonths } from 'date-fns/addMonths'\nimport { addQuarters } from 'date-fns/addQuarters'\nimport { addWeeks } from 'date-fns/addWeeks'\nimport { addYears } from 'date-fns/addYears'\nimport { getDay } from 'date-fns/getDay'\nimport { isBefore } from 'date-fns/isBefore'\nimport { nextDay } from 'date-fns/nextDay'\nimport { setDate } from 'date-fns/setDate'\nimport { startOfToday } from 'date-fns/startOfToday'\nimport { fromUnixTime } from 'date-fns/fromUnixTime'\nimport { type Day } from 'date-fns/types'\nimport { DATE_FORMATS_INTL, formatDate } from '../constants'\n\nexport const getNextWeeklyDate = (date: Date): Date => {\n const dayOfWeek = getDay(date)\n let nextDate = nextDay(date, dayOfWeek as Day)\n while (isBefore(nextDate, startOfToday())) {\n nextDate = addWeeks(nextDate, 1)\n }\n return nextDate\n}\n\nexport const getNextBiWeeklyDate = (date: Date): Date => {\n const nextWeeklyday = getNextWeeklyDate(date)\n return addWeeks(nextWeeklyday, 1)\n}\n\nexport const getNextMonthlyDate = (date: Date): Date => {\n let nextDate = setDate(startOfToday(), date.getDate())\n while (isBefore(nextDate, startOfToday())) {\n nextDate = addMonths(nextDate, 1)\n }\n return nextDate\n}\n\nexport const getNextBiMonthlyDate = (date: Date): Date => {\n const nextMonthlyDate = getNextWeeklyDate(date)\n return addMonths(nextMonthlyDate, 1)\n}\n\nexport const getNextQuarterlyDate = (date: Date): Date => {\n let nextDate = addQuarters(date, 1)\n while (isBefore(nextDate, startOfToday())) {\n nextDate = addQuarters(nextDate, 1)\n }\n return nextDate\n}\n\nexport const getNextBiQuarterlyDate = (date: Date): Date => {\n const nextQuarterlyDate = getNextQuarterlyDate(date)\n return addQuarters(nextQuarterlyDate, 1)\n}\n\nexport const getNextYearlyDate = (date: Date): Date => {\n return addYears(date, 1)\n}\n\nexport const fromUnixUTC = (utcTime: number) => {\n const date = fromUnixTime(utcTime)\n return new Date(date.getUTCFullYear(), date.getUTCMonth(), date.getUTCDate())\n}\n\nexport const fromUnixToDayOfWeekAndDate = (date: number) =>\n formatDate(fromUnixTime(date), DATE_FORMATS_INTL.DAY_OF_WEEK_MONTH_DAY)\n\nexport const fromTimestampToMonthYear = (timestamp?: number) =>\n timestamp ? formatDate(fromUnixTime(timestamp), DATE_FORMATS_INTL.MONTH_YEAR) : ''\n","import { AccountTypeName } from '../'\n\nimport type { Account } from '../types'\n\nexport interface MappedAccounts {\n [key: string]: MappedAccount[]\n}\n\nexport interface MappedAccount {\n accountNumber: string\n name: string\n guid: string\n}\n\nexport interface MappedOptions {\n [key: string]: boolean\n}\n\n// Sets up the collection of selected account guids into a mapped object\nexport const setupMappedSelectedOptions = (accounts: Account[], selectedAccountGuids: string[]) => {\n return accounts.reduce((accumulator: MappedOptions, account) => {\n accumulator[account.guid] = selectedAccountGuids?.includes(account.guid)\n return accumulator\n }, {})\n}\n\n// Creates a mapped collection of accounts that are grouped together by the account type\nexport const setupMappedAccounts = (accounts: Account[]) => {\n return accounts.reduce((accumulator: MappedAccounts, account) => {\n const accountType = AccountTypeName[account.account_type]\n const newAccount = {\n accountNumber: account.account_number,\n name: account.name || account.feed_name,\n guid: account.guid,\n } as MappedAccount\n\n if (Object.prototype.hasOwnProperty.call(accumulator, accountType)) {\n accumulator[accountType] = accumulator[accountType].concat(newAccount)\n } else {\n accumulator[accountType] = [newAccount]\n }\n\n return accumulator\n }, {})\n}\n","import React, { useMemo } from 'react'\n\nimport Button from '@mui/material/Button'\nimport FormControlLabel from '@mui/material/FormControlLabel'\nimport List from '@mui/material/List'\nimport ListItem from '@mui/material/ListItem'\nimport ListItemButton from '@mui/material/ListItemButton'\nimport ListSubheader from '@mui/material/ListSubheader'\nimport ListItemText from '@mui/material/ListItemText'\nimport Popover from '@mui/material/Popover'\nimport Stack from '@mui/material/Stack'\nimport CheckBox from '@mui/material/Checkbox'\nimport { AccountsIcon, P } from '@kyper/mui'\nimport { setupMappedAccounts } from '../../utils/AccountFilter'\nimport type { Account } from '../../types/Account'\nimport type { MappedAccount, MappedAccounts, MappedOptions } from '../../utils/AccountFilter'\nimport { buildDynamicCopy } from '../../utils'\n\nexport type AccountFilterOptionsCopy = {\n accountTypeAccounts: string\n cancelButton: string\n filterButton: string\n filterButtonAria: string\n selectAllAccounts: string\n toggleAccountTypeAccounts: string\n unselectAllAccounts: string\n zeroStateButton: string\n zeroStateDescription: string\n zeroStateTitle: string\n}\n\ninterface AccountFilterOptionsProps {\n accounts: Account[]\n copy: AccountFilterOptionsCopy\n accountFilterButtonEl: HTMLButtonElement | null\n onAccountClick: (account: MappedAccount) => void\n onAccountGroupClick: (\n accountType: string,\n mappedAccounts: MappedAccounts,\n allGroupedAccountsSelected: boolean,\n ) => void\n onCancelClick: () => void\n onConnectAccountClick: () => void\n onFilterClick: () => void\n selectedOptions: MappedOptions\n setSelectedOptions: (value: React.SetStateAction<MappedOptions>) => void\n handleClose: () => void\n showAccountNumbers: boolean\n}\n\nexport const AccountFilterOptions: React.FC<AccountFilterOptionsProps> = ({\n accounts,\n accountFilterButtonEl,\n copy,\n onAccountClick,\n onAccountGroupClick,\n onCancelClick,\n onConnectAccountClick,\n onFilterClick,\n selectedOptions,\n setSelectedOptions,\n handleClose,\n showAccountNumbers,\n}) => {\n const mappedAccounts = useMemo(() => setupMappedAccounts(accounts), [accounts])\n const shouldShowZeroState = accounts.length < 1\n const isOpen = Boolean(accountFilterButtonEl)\n\n const isAllChecked = Object.values(selectedOptions).every((value) => Boolean(value))\n\n return (\n <Popover\n anchorEl={accountFilterButtonEl}\n anchorOrigin={{\n vertical: 'bottom',\n horizontal: 'left',\n }}\n onClose={handleClose}\n open={isOpen}\n sx={{ maxHeight: 400, maxWidth: shouldShowZeroState ? '100%' : 300 }}\n transformOrigin={{\n vertical: 'top',\n horizontal: 'left',\n }}\n >\n {shouldShowZeroState ? (\n <Stack\n sx={{\n alignItems: 'center',\n flexDirection: 'column',\n padding: 16,\n textAlign: 'center',\n width: 320,\n maxWidth: '100%',\n }}\n >\n <AccountsIcon size={32} />\n <P bold={true} mt={12}>\n {copy.zeroStateTitle}\n </P>\n <P mt={12}>{copy.zeroStateDescription}</P>\n <Button onClick={onConnectAccountClick}>{copy.zeroStateButton}</Button>\n </Stack>\n ) : (\n <form onSubmit={handleClose}>\n <List\n className=\"mx-cmn-account-options\"\n dense={true}\n id=\"filter_accounts\"\n sx={{\n overflow: 'auto',\n maxHeight: 300,\n minWidth: 268,\n '& .MuiFormControlLabel-root': {\n m: 4,\n borderRadius: 1,\n width: '100%',\n '&:hover': {\n bgcolor: 'background.default',\n },\n '&:focus-within': {\n outline: '2px solid rgba(82, 138, 224, 0.8)',\n outlineOffset: '2px',\n },\n '& .MuiFormControlLabel-label': {\n fontSize: 13,\n },\n },\n }}\n >\n <ListItem disableGutters={true} disablePadding={true}>\n <FormControlLabel\n control={\n <CheckBox\n checked={isAllChecked}\n data-ui-test={`checked-${isAllChecked}`}\n disableRipple={true}\n onChange={() => {\n const updatedOptions: MappedOptions = {}\n\n Object.keys(selectedOptions).forEach((key) => {\n updatedOptions[key] = !isAllChecked\n })\n setSelectedOptions(updatedOptions)\n }}\n size=\"small\"\n sx={{\n '&.Mui-focusVisible': {\n outline: 'none',\n boxShadow: 'none',\n },\n }}\n />\n }\n label={isAllChecked ? copy.unselectAllAccounts : copy.selectAllAccounts}\n />\n </ListItem>\n {Object.keys(mappedAccounts).map((accountType) => {\n const groupedAccounts = mappedAccounts[accountType]\n const allGroupedAccountsSelected = groupedAccounts.every(\n (account: MappedAccount) => selectedOptions[account.guid],\n )\n\n return (\n <ListItem disableGutters={true} disablePadding={true} key={accountType}>\n <List\n aria-label={buildDynamicCopy(copy.accountTypeAccounts, accountType) as string}\n className=\"mx-cmn-account-options-group\"\n dense={true}\n subheader={\n <ListSubheader disableGutters={true}>\n <ListItemButton\n aria-label={\n buildDynamicCopy(copy.toggleAccountTypeAccounts, accountType) as string\n }\n aria-pressed={allGroupedAccountsSelected}\n disableGutters={true}\n onClick={() =>\n onAccountGroupClick(\n accountType,\n mappedAccounts,\n allGroupedAccountsSelected,\n )\n }\n sx={{\n paddingLeft: 12,\n minHeight: 40,\n justifyContent: 'left',\n }}\n >\n <ListItemText\n primary={accountType}\n primaryTypographyProps={{ variant: 'XSmall', fontWeight: 'bold' }}\n />\n </ListItemButton>\n </ListSubheader>\n }\n sx={{ overflow: 'auto', width: '100%' }}\n >\n {groupedAccounts.map((account: MappedAccount) => {\n const isSelected = selectedOptions[account.guid]\n const label = `${account.name}${\n showAccountNumbers && account.accountNumber\n ? ` *${account.accountNumber.slice(-4)}`\n : ''\n }`\n\n return (\n <ListItem\n className=\"mx-cmn-account-options-container\"\n disableGutters={true}\n disablePadding={true}\n key={account.guid}\n >\n <FormControlLabel\n control={\n <CheckBox\n checked={isSelected}\n data-ui-test={`checked-${isSelected}`}\n disableRipple={true}\n id={account.guid}\n onChange={() => {\n onAccountClick(account)\n }}\n size=\"small\"\n sx={{\n '&.Mui-focusVisible': {\n outline: 'none',\n boxShadow: 'none',\n },\n }}\n />\n }\n label={label}\n />\n </ListItem>\n )\n })}\n </List>\n </ListItem>\n )\n })}\n </List>\n <Stack direction=\"row\" justifyContent=\"flex-end\" padding={12} spacing={16} width=\"100%\">\n <Button onClick={onCancelClick} variant=\"outlined\">\n {copy.cancelButton}\n </Button>\n <Button\n aria-label={copy.filterButtonAria}\n color=\"primary\"\n onClick={onFilterClick}\n variant=\"contained\"\n >\n {copy.filterButton}\n </Button>\n </Stack>\n </form>\n )}\n </Popover>\n )\n}\n\nAccountFilterOptions.displayName = 'AccountFilterOptions'\n","import useTheme from '@mui/material/styles/useTheme'\nimport useMediaQuery from '@mui/material/useMediaQuery'\n\nexport const useScreenSize = () => {\n return {\n // Larger than 1200\n isDesktop: useMediaQuery(useTheme().breakpoints.up('xl')),\n // Smaller than 768\n isMobile: useMediaQuery(useTheme().breakpoints.down('md')),\n // Between 768 and 992\n isSmallTablet: useMediaQuery(useTheme().breakpoints.between('md', 'lg')),\n // Between 768 and 1200\n isTablet: useMediaQuery(useTheme().breakpoints.between('md', 'xl')),\n }\n}\n","import React, { FC } from 'react'\n\nimport Button from '@mui/material/Button'\nimport { Icon } from '@kyper/mui'\nimport Tooltip from '@mui/material/Tooltip'\nimport Box from '@mui/material/Box'\nimport IconButton from '@mui/material/IconButton'\nimport { type SxProps } from '@mui/material/styles'\n\nimport { AccountFilterOptions } from './AccountFilterOptions'\nimport { setupMappedSelectedOptions } from '../../utils/AccountFilter'\n\nimport type { Account } from '../../types'\nimport type { AccountFilterOptionsCopy } from './AccountFilterOptions'\nimport type { MappedAccount, MappedOptions } from '../../utils/AccountFilter'\nimport { useScreenSize } from '../../hooks'\n\nexport type AccountFilterCopy = {\n accountFilterOptionsCopy: AccountFilterOptionsCopy\n title: string\n}\n\n// TODO: pass in copy to account filter like this when refactored\n// const accountFilterCopy = {\n// ...copy.account_filter,\n// accounts_type: copy.full_view.accounts_type,\n// title: copy.full_view.account_filter_title,\n// }\n\nexport interface AccountFilterProps {\n accounts: Account[]\n copy: AccountFilterCopy\n onFilterClick: (selected: string[]) => void\n onConnectAccountClick?: () => void\n selectedAccountGuids: string[]\n showAccountNumbers: boolean\n sx?: SxProps\n variant?: 'outlined' | 'text'\n}\n\nconst AccountFilter: FC<AccountFilterProps> = ({\n accounts,\n copy,\n onFilterClick,\n onConnectAccountClick = () => {},\n selectedAccountGuids,\n showAccountNumbers,\n sx = {},\n variant = 'outlined',\n}) => {\n const { isMobile } = useScreenSize()\n\n const [accountFilterButtonEl, setAccountFilterButtonEl] =\n React.useState<HTMLButtonElement | null>(null)\n\n const [selectedOptions, setSelectedOptions] = React.useState<MappedOptions>(\n setupMappedSelectedOptions(accounts, selectedAccountGuids),\n )\n\n React.useEffect(() => {\n setSelectedOptions(setupMappedSelectedOptions(accounts, selectedAccountGuids))\n }, [accounts, selectedAccountGuids])\n\n const onClick = (event: React.MouseEvent<HTMLButtonElement>) => {\n setAccountFilterButtonEl(event.currentTarget)\n }\n\n const handleClose = () => {\n setAccountFilterButtonEl(null)\n }\n\n return (\n <Box className=\"mx-cmn-account-filter\" m={4} sx={{ ...sx }}>\n {isMobile ? (\n <Tooltip id=\"filter-accounts\" placement=\"bottom\" title={copy.title}>\n <IconButton\n aria-controls=\"filter_accounts\"\n aria-describedby=\"filter-accounts\"\n aria-haspopup={true}\n aria-label={copy.title}\n onClick={onClick}\n >\n <Icon name=\"filter_alt\" />\n </IconButton>\n </Tooltip>\n ) : (\n <Button\n aria-controls=\"filter_accounts\"\n aria-haspopup={true}\n aria-label={copy.title}\n onClick={onClick}\n startIcon={<Icon name=\"filter_alt\" />}\n variant={variant}\n >\n {copy.title}\n </Button>\n )}\n\n <AccountFilterOptions\n accountFilterButtonEl={accountFilterButtonEl}\n accounts={accounts}\n copy={copy.accountFilterOptionsCopy}\n handleClose={handleClose}\n onAccountClick={(account) => {\n setSelectedOptions({ ...selectedOptions, [account.guid]: !selectedOptions[account.guid] })\n }}\n onAccountGroupClick={(accountType, mappedAccounts, allSelected) => {\n const selectedOptionsClone = { ...selectedOptions }\n\n mappedAccounts[accountType].forEach((account: MappedAccount) => {\n selectedOptionsClone[account.guid] = !allSelected\n })\n\n setSelectedOptions(selectedOptionsClone)\n }}\n onCancelClick={() => {\n setSelectedOptions(setupMappedSelectedOptions(accounts, selectedAccountGuids))\n handleClose()\n }}\n onConnectAccountClick={onConnectAccountClick}\n onFilterClick={() => {\n onFilterClick(Object.keys(selectedOptions).filter((guid) => selectedOptions[guid]))\n handleClose()\n }}\n selectedOptions={selectedOptions}\n setSelectedOptions={setSelectedOptions}\n showAccountNumbers={showAccountNumbers}\n />\n </Box>\n )\n}\n\nexport default AccountFilter\n","import React from 'react'\nimport { css } from '@mxenabled/cssinjs'\n\nimport KeyboardArrowLeftRoundedIcon from '@mui/icons-material/KeyboardArrowLeftRounded'\nimport KeyboardArrowRightRoundedIcon from '@mui/icons-material/KeyboardArrowRightRounded'\n\nimport Button from '@mui/material/Button'\n\nimport { H2, useTokens } from '@kyper/mui'\n\nimport { DATE_FORMATS_INTL, formatDate } from '../../constants/DateFormats'\nimport type { CalendarCopy } from './Calendar'\n\ninterface HeaderProps {\n copy: CalendarCopy\n date: Date\n onNextClick: () => void\n onPreviousClick: () => void\n}\n\nconst Header: React.FC<HeaderProps> = ({ copy, date, onNextClick, onPreviousClick }) => {\n const tokens = useTokens()\n const styles = getStyles(tokens)\n\n return (\n <div className={`mx-cmn-calendar-header ${styles}`}>\n <H2 className=\"mx-cmn-calendar-header-title\" variant=\"H3\">\n {formatDate(date, DATE_FORMATS_INTL.MONTH_YEAR)}\n </H2>\n <div className=\"mx-cmn-calendar-header-button-container\">\n <Button aria-label={copy.prevAria} onClick={onPreviousClick}>\n <KeyboardArrowLeftRoundedIcon />\n </Button>\n <Button aria-label={copy.nextAria} onClick={onNextClick}>\n <KeyboardArrowRightRoundedIcon />\n </Button>\n </div>\n </div>\n )\n}\n\nconst getStyles = (tokens: any) =>\n css({\n alignItems: 'center',\n display: 'flex',\n marginBottom: tokens.Spacing.Medium,\n marginRight: -tokens.Spacing.Medium,\n paddingLeft: tokens.Spacing.XSmall,\n '& .mx-cmn-calendar-header-title': {\n flexGrow: 1,\n },\n '& .mx-cmn-calendar-header-button-container': {\n display: 'flex',\n gap: 4,\n },\n })\n\nexport default Header\n","import React from 'react'\nimport { css } from '@mxenabled/cssinjs'\nimport { format } from 'date-fns/format'\nimport { isSameDay } from 'date-fns/isSameDay'\nimport { isWithinInterval } from 'date-fns/isWithinInterval'\nimport { startOfToday } from 'date-fns/startOfToday'\n\nimport Button from '@mui/material/Button'\nimport useTheme from '@mui/material/styles/useTheme'\n\nimport { Text, useTokens } from '@kyper/mui'\n\nimport { DATE_SIZE } from './Calendar'\n\ninterface DayProps {\n beginDate: Date | undefined\n date: Date\n endDate: Date | undefined\n isInMonth: boolean\n onClick: (date: Date) => void\n}\n\nconst Day: React.FC<DayProps> = ({ beginDate, date, endDate, isInMonth, onClick }) => {\n const theme = useTheme()\n const tokens = useTokens()\n const styles = getStyles(tokens, theme)\n\n const isInRange =\n beginDate &&\n endDate &&\n isWithinInterval(date, { start: beginDate, end: endDate }) &&\n !isSameDay(date, beginDate) &&\n !isSameDay(date, endDate)\n\n const isRangeStart =\n beginDate && endDate && isSameDay(beginDate, date) && !isSameDay(beginDate, endDate)\n\n const isRangeEnd =\n endDate && beginDate && isSameDay(endDate, date) && !isSameDay(beginDate, endDate)\n\n const isSelected =\n (beginDate && isSameDay(beginDate, date)) || (endDate && isSameDay(endDate, date))\n\n const isToday = isSameDay(date, startOfToday())\n\n return (\n <div\n className={`\n mx-cmn-calendar-day\n ${styles}\n ${!isInMonth ? 'mx-cmn-out-of-month' : ''}\n ${isInRange ? 'mx-cmn-date-interval' : ''}\n `}\n >\n <Button\n className={`\n mx-cmn-calendar-day-button\n ${isRangeStart ? 'mx-cmn-range-start' : ''}\n ${isRangeEnd ? 'mx-cmn-range-end' : ''}\n `}\n color={isSelected ? 'primary' : 'secondary'}\n onClick={() => onClick(date)}\n variant={isSelected ? 'contained' : 'text'}\n >\n <Text\n className={`\n mx-cmn-calendar-day-text\n ${isSelected ? 'mx-cmn-day-selected' : ''}\n ${isToday ? 'mx-cmn-today' : ''}`}\n variant=\"Small\"\n >\n {format(date, 'd')}\n </Text>\n </Button>\n </div>\n )\n}\n\nconst getStyles = (tokens: any, theme: any) =>\n css({\n height: DATE_SIZE,\n width: DATE_SIZE,\n display: 'flex',\n justifyContent: 'center',\n '&.mx-cmn-out-of-month': {\n backgroundColor: theme.palette.background.default,\n },\n '&.mx-cmn-date-interval': {\n backgroundColor: theme.palette.secondary.light,\n },\n '& .MuiButton-root': {\n maxWidth: 44,\n minWidth: 44,\n height: 44,\n padding: 0,\n width: 44,\n '&.mx-cmn-range-start': {\n borderTopRightRadius: 0,\n borderBottomRightRadius: 0,\n '&:focus': {\n boxShadow: 'none',\n },\n },\n '&.mx-cmn-range-end': {\n borderTopLeftRadius: 0,\n borderBottomLeftRadius: 0,\n '&:focus': {\n boxShadow: 'none',\n },\n },\n },\n '& .mx-cmn-calendar-day-text': {\n '&.mx-cmn-day-selected': {\n color: theme.palette.primary,\n '&.mx-cmn-day-selected': {\n borderColor: theme.palette.common.white,\n },\n },\n '&.mx-cmn-today': {\n borderBottom: `solid 2px ${tokens.Color.Brand300}`,\n marginBottom: -6,\n paddingBottom: 5,\n },\n },\n })\n\nexport default Day\n","import React from 'react'\nimport { css } from '@mxenabled/cssinjs'\nimport { addDays } from 'date-fns/addDays'\nimport { addMonths } from 'date-fns/addMonths'\nimport { eachDayOfInterval } from 'date-fns/eachDayOfInterval'\nimport { eachWeekOfInterval } from 'date-fns/eachWeekOfInterval'\nimport { endOfMonth } from 'date-fns/endOfMonth'\nimport { format } from 'date-fns/format'\nimport { isBefore } from 'date-fns/isBefore'\nimport { isSameMonth } from 'date-fns/isSameMonth'\nimport { startOfMonth } from 'date-fns/startOfMonth'\nimport { startOfToday } from 'date-fns/startOfToday'\nimport { subMonths } from 'date-fns/subMonths'\n\nimport Button from '@mui/material/Button'\nimport Paper from '@mui/material/Paper'\n\nimport { Text, useTokens } from '@kyper/mui'\n\nimport Header from './Header'\nimport Day from './Day'\n\nexport const CALENDAR_WIDTH = 340\nexport const DATE_SIZE = 44\nexport const enum CalendarSelectionTypes {\n None = 'None',\n Single = 'Single',\n Range = 'Range',\n}\n\nexport type CalendarCopy = {\n nextAria: string\n prevAria: string\n today: string\n}\n\nexport interface CalendarProps {\n copy: CalendarCopy\n beginDate?: Date\n endDate?: Date\n onDateSelected?: (date: Date) => void\n onRangeSelected?: (beginDate: Date, endDate: Date) => void\n selectionType?: CalendarSelectionTypes\n}\n\nconst Calendar: React.FC<CalendarProps> = ({\n copy,\n beginDate: beginDateProp = undefined,\n endDate: endDateProp = undefined,\n onDateSelected,\n onRangeSelected,\n selectionType = CalendarSelectionTypes.Single,\n}) => {\n const tokens = useTokens()\n const styles = getStyles(tokens)\n\n const [date, setDate] = React.useState(startOfToday)\n\n const [beginDate, setBeginDate] = React.useState<Date | undefined>(beginDateProp)\n const [endDate, setEndDate] = React.useState<Date | undefined>(endDateProp)\n\n React.useEffect(() => {\n setBeginDate(beginDateProp)\n setEndDate(endDateProp)\n if (beginDateProp) {\n setDate(beginDateProp)\n }\n }, [beginDateProp, endDateProp])\n\n const weeks = React.useMemo(() => {\n const weeksInInterval = eachWeekOfInterval({ start: startOfMonth(date), end: endOfMonth(date) })\n\n const weeks = [] as Date[][]\n for (let i = 0; i < weeksInInterval.length; i++) {\n const weekStart = weeksInInterval[i]\n const days = eachDayOfInterval({ start: weekStart, end: addDays(weekStart, 6) })\n\n const week = [] as Date[]\n for (let j = 0; j < days.length; j++) {\n week.push(days[j])\n }\n weeks.push(week)\n }\n\n return weeks\n }, [date])\n\n const handleSelection = (date: Date) => {\n if (selectionType === CalendarSelectionTypes.None) return\n\n if (selectionType === CalendarSelectionTypes.Single) {\n setBeginDate(date)\n onDateSelected?.(date)\n return\n }\n\n if (!beginDate || endDate) {\n setBeginDate(date)\n setEndDate(undefined)\n } else if (isBefore(date, beginDate)) {\n setEndDate(beginDate)\n setBeginDate(date)\n onRangeSelected?.(date, beginDate)\n } else {\n setEndDate(date)\n onRangeSelected?.(beginDate, date)\n }\n }\n\n const handleTodayClick = () => {\n const today = startOfToday()\n setDate(today)\n\n if (selectionType === CalendarSelectionTypes.None) return\n\n setBeginDate(today)\n\n if (selectionType === CalendarSelectionTypes.Single) {\n onDateSelected?.(today)\n } else {\n setEndDate(today)\n onRangeSelected?.(today, today)\n }\n }\n\n const handleNextMonthClick = () => {\n setDate(addMonths(date, 1))\n }\n\n const handlePreviousMonthClick = () => {\n setDate(subMonths(date, 1))\n }\n\n return (\n <div className={`mx-cmn-calendar ${styles}`}>\n <Paper sx={{ boxShadow: 'none' }}>\n <Header\n copy={copy}\n date={date}\n onNextClick={handleNextMonthClick}\n onPreviousClick={handlePreviousMonthClick}\n />\n\n <div className=\"mx-cmn-calendar-header-row\">\n {weeks[0].map((day, index) => (\n <div className=\"mx-cmn-calendar-header-cell\" key={index}>\n <Text bold={true} variant=\"Small\">\n {format(day, 'EEEEE')}\n </Text>\n </div>\n ))}\n </div>\n\n {weeks.map((week, index) => (\n <div className=\"mx-cmn-calendar-week\" key={`w-${index}`}>\n {week.map((day, index) => (\n <Day\n beginDate={beginDate}\n date={day}\n endDate={endDate}\n isInMonth={isSameMonth(day, date)}\n key={index}\n onClick={handleSelection}\n />\n ))}\n </div>\n ))}\n\n <div className=\"mx-cmn-calendar-today-container\">\n <Button onClick={handleTodayClick} size=\"small\" variant=\"text\">\n {copy.today}\n </Button>\n </div>\n </Paper>\n </div>\n )\n}\n\nconst getStyles = (tokens: any) =>\n css({\n width: CALENDAR_WIDTH,\n '& .MuiPaper-root': {\n paddingLeft: 24,\n paddingRight: 24,\n paddingTop: 4,\n paddingBottom: 4,\n },\n '& .mx-cmn-calendar-header-row': {\n display: 'flex',\n justifyContent: 'center',\n textAlign: 'center',\n '& .mx-cmn-calendar-header-cell': {\n height: DATE_SIZE,\n width: DATE_SIZE,\n minWidth: DATE_SIZE,\n '& .kmui-text': {\n alignItems: 'center',\n display: 'flex',\n height: '100%',\n justifyContent: 'center',\n width: '100%',\n },\n },\n },\n '& .mx-cmn-calendar-week': {\n display: 'flex',\n justifyContent: 'center',\n textAlign: 'center',\n },\n '& .mx-cmn-calendar-today-container': {\n display: 'block',\n marginTop: tokens.Spacing.Medium,\n textAlign: 'center',\n width: '100%',\n '& > .MuiButton-root': {\n display: 'inline-block',\n marginLeft: 'auto',\n marginRight: 'auto',\n },\n },\n })\n\nexport default Calendar\n","import React from 'react'\n\nimport { useTheme } from '@mui/material/styles'\nimport { MarkElementProps } from '@mui/x-charts'\n\nimport { formatCurrency } from '../../../utils'\n\nexport type MarkHandlers = {\n onMarkClick?: (event: React.MouseEvent<SVGPathElement, MouseEvent>, dataIndex: number) => void\n onMouseEnter?: (dataIndex: number) => void\n onMouseLeave?: () => void\n}\n\ninterface CustomMarkProps extends MarkElementProps {\n handlers?: MarkHandlers\n showLabel: boolean\n yData: number[]\n}\n\nexport const CustomMark: React.FC<CustomMarkProps> = (props) => {\n const theme = useTheme()\n const showLabel = props.showLabel\n const styles = props.style\n const xNumber = Number(props.x)\n const yNumber = Number(props.y)\n\n const handleMarkClick = props.handlers?.onMarkClick\n const handleMouseEnter = props.handlers?.onMouseEnter\n const handleMouseLeave = props.handlers?.onMouseLeave\n\n return (\n <>\n {showLabel && (\n <text\n fill={theme.palette.text.primary}\n style={{ fontSize: theme.typography.Small?.fontSize }}\n x={xNumber - 5}\n y={yNumber - 15}\n >\n {formatCurrency(props.yData[props.dataIndex], '0,0')}\n </text>\n )}\n <path\n cursor={handleMarkClick ? 'pointer' : 'unset'}\n d=\"M4.514,0A4.514,4.514,0,1,1,-4.514,0A4.514,4.514,0,1,1,4.514,0\"\n height=\"20px\"\n onClick={(event) => {\n handleMarkClick?.(event, props.dataIndex)\n }}\n onMouseEnter={() => {\n handleMouseEnter?.(props.dataIndex)\n }}\n onMouseLeave={() => {\n handleMouseLeave?.()\n }}\n style={{\n fill: styles?.fill ? styles.fill : theme.palette.background.paper,\n stroke: styles?.stroke ? styles.stroke : theme.palette.primary.main,\n strokeWidth: 2,\n transform: `translate(${props.x}px, ${props.y}px)`,\n transformOrigin: `${props.x}px, ${props.y}px`,\n filter: styles?.filter ? styles.filter : 'none',\n }}\n width=\"20px\"\n />\n </>\n )\n}\n","import React from 'react'\n\nimport { AnimatedLineProps } from '@mui/x-charts'\n\ninterface CustomLineProps extends AnimatedLineProps {\n lineColor?: string\n}\n\nexport const CustomLine: React.FC<CustomLineProps> = (props) => {\n return (\n <>\n <clipPath id={props.id}>\n <rect height={props.height} width={props.width} x=\"0\" y=\"0\" />\n </clipPath>\n <g>\n <path\n cursor=\"unset\"\n d={props.d}\n style={{\n strokeWidth: 2,\n strokeLinejoin: 'round',\n fill: 'none',\n stroke: props.lineColor ? props.lineColor : props.stroke,\n transition: 'opacity 0.2s ease-in, stroke 0.2s ease-in',\n opacity: 1,\n }}\n />\n </g>\n </>\n )\n}\n","import { observer } from 'mobx-react-lite'\n\nimport { Box, Stack } from '@mui/material'\nimport { Text } from '@kyper/mui'\n\nimport { formatCurrency } from '../../../utils'\nimport { useGlobalCopyStore } from '../../../../common'\n\nconst CustomLegend = ({\n series,\n average,\n style,\n}: {\n average: number\n series: any[]\n style: any\n}) => {\n const { common: commonCopy } = useGlobalCopyStore()\n return (\n <Stack style={{ flexDirection: 'row', gap: 25, ...style }}>\n {series.map((s, index) => (\n <Stack key={index} style={{ alignItems: 'center', flexDirection: 'row' }}>\n <Box\n sx={{\n width: 10,\n height: 10,\n backgroundColor: s.color,\n marginRight: 8,\n }}\n />\n <Text variant=\"Small\">{s.label}</Text>\n </Stack>\n ))}\n <Stack sx={{ alignItems: 'center', flexDirection: 'row' }}>\n <Text bold={true} sx={{ marginRight: 8 }} variant=\"Small\">\n – –\n </Text>\n <Text variant=\"Small\">\n {commonCopy.average}{' '}\n <Text bold={true} variant=\"Small\">\n {formatCurrency(average, '0,0')}\n </Text>\n </Text>\n </Stack>\n </Stack>\n )\n}\n\nexport default observer(CustomLegend)\n","import React, { CSSProperties } from 'react'\n\nimport { useTheme } from '@mui/material/styles'\n\nimport {\n AllSeriesType,\n AreaPlot,\n BarPlot,\n ChartsLegend,\n ChartsReferenceLine,\n ChartsXAxis,\n ChartsYAxis,\n LinePlot,\n MarkPlot,\n ResponsiveChartContainer,\n} from '@mui/x-charts'\n\nimport { formatCurrency } from '../../utils'\n\nimport { CustomMark, MarkHandlers } from './linechart/CustomMark'\nimport { CustomLine } from './linechart/CustomLine'\nimport CustomLegend from './linechart/CustomLegend'\n\ninterface LineChartProps {\n baseline?: string\n // Because theme chart colors are typed string|undefined\n colors: (string | undefined)[]\n datasets: { x: string; y: number }[][]\n height?: number\n labels: string[]\n margin?: { top?: number; right?: number; bottom?: number; left?: number }\n markHandlers?: MarkHandlers\n markStyles?: (markIndex: number) => CSSProperties\n showArea?: boolean\n showAverage?: boolean\n showBars?: boolean\n showMarkLabel?: boolean\n useCustomMark?: boolean\n valueFormatterString?: string\n width?: number\n}\n\nexport const LineChart: React.FC<LineChartProps> = ({\n baseline = 'max',\n colors,\n datasets,\n height,\n labels,\n margin,\n markHandlers,\n markStyles,\n showBars = false,\n showArea = false,\n showAverage = false,\n showMarkLabel = false,\n useCustomMark = false,\n valueFormatterString = '0,0',\n width,\n}) => {\n const theme = useTheme()\n\n // Data for the X axis\n const xData = datasets.flat().map((item) => item.x)\n const yData = datasets.flat().map((item) => item.y)\n\n const average = Math.round(yData.reduce((value, total) => total + value, 0) / yData.length)\n\n // Used for the min and max Y axis values\n const yMin = Math.floor(Math.min(...yData) / 100) * 100\n const yMax = Math.ceil(Math.max(...yData) / 100) * 100\n\n const series = datasets.map((data, index) => {\n return {\n type: showBars ? 'bar' : 'line',\n curve: 'linear',\n color: showBars ? theme.palette.chart?.chart6 : (colors[index] ?? theme.palette.primary.main),\n data: data.map((item) => item.y),\n area: showArea,\n baseline: baseline,\n showMark: true,\n label: labels[index],\n valueFormatter: (value: number) => formatCurrency(value || 0, valueFormatterString),\n }\n })\n\n return (\n <div style={{ position: 'relative' }}>\n <ResponsiveChartContainer\n height={height}\n margin={margin}\n series={series as AllSeriesType[]}\n sx={{\n p: 4,\n '& .MuiBarLabel-root': {\n fontSize: 10,\n fontWeight: 600,\n },\n '& .MuiAreaElement-root': {\n opacity: 0.15,\n },\n }}\n width={width}\n xAxis={[{ data: xData, scaleType: showBars ? 'band' : 'point' }]}\n yAxis={[\n {\n min: yMin,\n max: yMax || 100,\n colorMap: showArea\n ? {\n type: 'continuous',\n min: yMin,\n max: yMax,\n color: [theme.palette.background.paper, colors[0] ?? theme.palette.primary.main],\n }\n : undefined,\n valueFormatter: (value) => formatCurrency(value, valueFormatterString),\n },\n ]}\n >\n {/** Area plot provides gradiant below the line **/}\n {/* Note: Must be above the LinePlot for some style rules to work */}\n <AreaPlot />\n\n {/** Line plot provides the data line **/}\n <LinePlot\n slots={\n showArea && series.length < 2\n ? {\n line: (props) => (\n <CustomLine {...props} lineColor={colors[0] ?? theme.palette.primary.main} />\n ),\n }\n : undefined\n }\n />\n\n {/** Mark plot provides the circles **/}\n <MarkPlot\n slots={\n useCustomMark\n ? {\n mark: (props) => {\n return (\n <CustomMark\n handlers={markHandlers}\n showLabel={showMarkLabel}\n style={markStyles?.(props.dataIndex) ?? {}}\n yData={yData}\n {...props}\n />\n )\n },\n }\n : undefined\n }\n />\n\n <BarPlot\n barLabel={(item) => (Number(item.value) > 0 ? `$${item.value}` : null)}\n borderRadius={10}\n />\n\n {/** Provides the X axis line and values **/}\n <ChartsXAxis disableLine={true} disableTicks={true} />\n\n {/** Provides the Y axis values **/}\n <ChartsYAxis disableLine={true} disableTicks={true} />\n\n {/** Provides the average line **/}\n {showAverage && (\n <ChartsReferenceLine\n lineStyle={{\n stroke: theme.palette.grey[700],\n strokeDasharray: '10, 8',\n strokeWidth: 2,\n }}\n y={average}\n />\n )}\n\n {/** Provides the legend for the chart **/}\n {!showAverage && (\n <ChartsLegend\n position={{ horizontal: 'left', vertical: 'top' }}\n slotProps={{\n legend: {\n labelStyle: { fontSize: 12 },\n itemMarkHeight: 10,\n itemMarkWidth: 10,\n },\n }}\n />\n )}\n </ResponsiveChartContainer>\n {showAverage && (\n <CustomLegend\n average={average}\n series={series}\n style={{ position: 'absolute', top: 16, left: 16 }}\n />\n )}\n </div>\n )\n}\n","import React from 'react'\n\nimport { GlobalStore } from '..'\n\nexport interface GlobalStoreContextTypes {\n children: React.ReactNode\n onEvent: (event: string, props?: object) => void\n onPageView: (pageViewEvent: string) => void\n globalStore: GlobalStore\n}\nexport const GlobalDataContext = React.createContext<GlobalStoreContextTypes | null>(null)\n\nexport const GlobalDataProvider: React.FC<React.PropsWithChildren<GlobalStoreContextTypes>> = ({\n children,\n globalStore,\n onEvent,\n onPageView,\n}) => {\n return (\n <GlobalDataContext.Provider\n value={{\n globalStore,\n onEvent,\n onPageView,\n children,\n }}\n >\n {children}\n </GlobalDataContext.Provider>\n )\n}\n","import React from 'react'\n\nexport interface WidgetContainerContextTypes {\n children: React.ReactNode\n availableHeight: number\n availableWidth: number\n}\nexport const WidgetContainerContext = React.createContext<WidgetContainerContextTypes | null>(null)\n\nexport const WidgetContainerProvider: React.FC<\n React.PropsWithChildren<WidgetContainerContextTypes>\n> = ({ children, availableHeight, availableWidth }) => {\n return (\n <WidgetContainerContext.Provider\n value={{\n availableHeight,\n availableWidth,\n children,\n }}\n >\n {children}\n </WidgetContainerContext.Provider>\n )\n}\n","import React from 'react'\nimport { GlobalDataContext } from './GlobalDataProvider'\nimport { WidgetContainerContext } from './WidgetContainerProvider'\n\nexport const useGlobalDataContext = (providerName = 'useGlobalStore') => {\n const context = React.useContext(GlobalDataContext)\n\n if (!context) {\n throw new Error(`${providerName}() must be used within the GlobalDataContext`)\n }\n\n return context\n}\n\nexport const useAccountStore = () =>\n useGlobalDataContext('useAccountStore').globalStore.accountStore\nexport const useBudgetsStore = () =>\n useGlobalDataContext('useBudgetsStore').globalStore.budgetsStore\nexport const useCashflowStore = () =>\n useGlobalDataContext('useCashflowStore').globalStore.cashflowStore\nexport const useCategoryStore = () =>\n useGlobalDataContext('useCategoryStore').globalStore.categoryStore\nexport const useConnectStore = () =>\n useGlobalDataContext('useConnectStore').globalStore.connectStore\nexport const useDebtStore = () => useGlobalDataContext('useDebtsStore').globalStore.debtsStore\nexport const useGlobalStore = () => useGlobalDataContext('useGlobalStore').globalStore\nexport const useGlobalUiStore = () =>\n useGlobalDataContext('useGlobalUiStore').globalStore.globalUiStore\nexport const useGlobalCopyStore = () =>\n useGlobalDataContext('globalCopyStore').globalStore.copyStore.copy\nexport const useGoalStore = () => useGlobalDataContext('useGoalStore').globalStore.goalStore\nexport const useMerchantStore = () =>\n useGlobalDataContext('useMerchantStore').globalStore.merchantStore\nexport const useNetWorthStore = () =>\n useGlobalDataContext('useNetWorthStore').globalStore.netWorthStore\nexport const useNotificationStore = () =>\n useGlobalDataContext('useNotificationStore').globalStore.notificationStore\nexport const useRecurringActivityStore = () =>\n useGlobalDataContext('useRecurringActivityStore').globalStore.recurringActivityStore\nexport const useTransactionStore = () =>\n useGlobalDataContext('useTransactionStore').globalStore.transactionStore\nexport const useUserStore = () => useGlobalDataContext('useUserStore').globalStore.userStore\n\nexport const useEvent = () => ({ onEvent: useGlobalDataContext().onEvent })\nexport const usePageView = () => ({ onPageView: useGlobalDataContext().onPageView })\n\nexport const useWidgetContainerContext = (providerName = 'useWidgetContainerContext') => {\n const context = React.useContext(WidgetContainerContext)\n\n if (!context) {\n throw new Error(`${providerName}() must be used within the WidgetContainerContext`)\n }\n\n return context\n}\n\nexport const useWidgetContainerProvider = () => useWidgetContainerContext()\n","import React from 'react'\nimport Box from '@mui/material/Box'\nimport Stack from '@mui/material/Stack'\nimport { CategoryIcon, Text } from '@kyper/mui'\n\nimport { buildDynamicCopy } from '../../../utils'\nimport { useCategoryStore, useGlobalCopyStore } from '../../../context'\n\nexport const CategoryIconLabel: React.FC<{\n categoryGuid: string\n topLevelCategoryGuid: string\n}> = ({ categoryGuid, topLevelCategoryGuid }) => {\n const { categories: copy } = useGlobalCopyStore()\n const { getCategoryName } = useCategoryStore()\n const categoryName = getCategoryName(categoryGuid)\n\n return (\n <Stack alignItems=\"center\" direction=\"column\" gap=\"8\" justifyContent=\"center\" mb={4}>\n <Box\n aria-label={buildDynamicCopy(copy.category_icon_label_aria, categoryName) as string}\n mb={4}\n role=\"img\"\n >\n <CategoryIcon categoryGuid={topLevelCategoryGuid} />\n </Box>\n <Text variant=\"Body\">{categoryName}</Text>\n </Stack>\n )\n}\n","import React from 'react'\nimport { SxProps } from '@mui/material/styles'\nimport { Text } from '@kyper/mui'\nimport { TypographyProps } from '@mui/material/Typography'\n\nimport { formatCurrency } from '../utils'\n\ninterface CurrencyTextProps extends TypographyProps {\n isIncome?: boolean\n amount: number | string\n bold?: boolean\n color?: string\n formatString?: string\n sx?: SxProps\n symbol?: string\n variant?: TypographyProps['variant']\n}\n\nexport const CurrencyText: React.FC<CurrencyTextProps> = ({\n isIncome = false,\n amount = 0,\n bold,\n color,\n formatString,\n sx,\n symbol,\n variant,\n ...rest\n}) => {\n const textColor = () => {\n if (color) {\n return color\n } else {\n return isIncome ? 'success.main' : 'text.primary'\n }\n }\n\n return (\n <Text bold={bold} color={textColor()} sx={sx} variant={variant} {...rest}>\n {symbol && symbol}\n {formatCurrency(Number(amount), formatString ?? '0,0.00')}\n </Text>\n )\n}\n","import React, { useEffect, useRef, useState } from 'react'\nimport { observer } from 'mobx-react-lite'\n\nimport Box from '@mui/material/Box'\nimport Card from '@mui/material/Card'\nimport CardContent from '@mui/material/CardContent'\nimport Divider from '@mui/material/Divider'\nimport Grid from '@mui/material/Grid'\nimport { Text } from '@kyper/mui'\nimport { useTheme } from '@mui/material/styles'\n\nimport { CategoryIconLabel } from './CategoryIconLabel'\nimport { CurrencyText } from '../../CurrencyText'\n\ntype DataPoint = { x: string | number; y: number }\n\nconst CustomAreaTooltip: React.FC<{\n categoryGuids: { guid: string; topLevelGuid: string }\n hoveredAreaData: DataPoint[]\n cursorPosition: { x: number; y: number }\n chartContainerRef: React.RefObject<HTMLDivElement>\n}> = ({\n categoryGuids: { guid, topLevelGuid },\n hoveredAreaData,\n cursorPosition,\n chartContainerRef,\n}) => {\n const theme = useTheme()\n const tooltipRef = useRef<HTMLDivElement>(null)\n const [adjustedPos, setAdjustedPos] = useState({ x: cursorPosition.x, y: cursorPosition.y })\n\n useEffect(() => {\n const adjustTooltipPosition = () => {\n const tooltipEl = tooltipRef.current\n const chartEl = chartContainerRef.current\n\n if (!tooltipEl || !chartEl) return\n\n const tooltipRect = tooltipEl.getBoundingClientRect()\n const containerRect = chartEl.getBoundingClientRect()\n\n let newX = cursorPosition.x\n let newY = cursorPosition.y\n\n // If the tooltip overflows the right or left edge\n if (newX + tooltipRect.width * 2 > containerRect.right) {\n // Move the tooltip to the left of the cursor\n newX = cursorPosition.x - tooltipRect.width\n } else if (newX - tooltipRect.width < containerRect.left) {\n // Move the tooltip to the right of the cursor\n newX = cursorPosition.x\n }\n\n // If the tooltip overflows the bottom edge\n if (newY + tooltipRect.height * 2 > containerRect.bottom) {\n // Move the tooltip to the top of the cursor\n newY = cursorPosition.y - tooltipRect.height\n }\n\n setAdjustedPos({ x: newX, y: newY })\n }\n\n adjustTooltipPosition()\n }, [cursorPosition, chartContainerRef])\n\n if (!hoveredAreaData) return null\n\n const seriesSum = hoveredAreaData.reduce((sum, dataPoint) => sum + dataPoint.y, 0)\n\n return (\n <Card\n ref={tooltipRef}\n sx={{\n position: 'absolute',\n top: adjustedPos.y,\n left: adjustedPos.x,\n width: 250,\n pointerEvents: 'none',\n }}\n >\n <CardContent>\n <Box alignItems=\"center\" display=\"flex\" flexDirection=\"column\">\n <CategoryIconLabel categoryGuid={guid} topLevelCategoryGuid={topLevelGuid} />\n <Text variant=\"Small\">{`${hoveredAreaData.length}-month total`}</Text>\n <CurrencyText amount={seriesSum} bold={true} formatString=\"0,0\" variant=\"body2\" />\n </Box>\n\n <Divider sx={{ my: 16, width: '100%' }} />\n\n <Grid container={true}>\n {hoveredAreaData.map((dataPoint, index) => (\n <React.Fragment key={index}>\n {index > 0 && index % 3 === 0 && <Divider sx={{ my: 16, width: '100%' }} />}\n <Grid item={true} xs={4}>\n <Box alignItems=\"center\" display=\"flex\" flexDirection=\"column\">\n <Text color={theme.palette.text.secondary} variant=\"XSmall\">\n {dataPoint.x}\n </Text>\n <CurrencyText\n amount={dataPoint.y}\n bold={true}\n formatString=\"0,0\"\n variant=\"Body\"\n />\n </Box>\n </Grid>\n </React.Fragment>\n ))}\n </Grid>\n </CardContent>\n </Card>\n )\n}\n\nexport default observer(CustomAreaTooltip)\n","import React from 'react'\n\nimport Box from '@mui/material/Box'\nimport Stack from '@mui/material/Stack'\n\nexport type StatusBarData = {\n color: string\n percentage: string\n}\n\ninterface StatusBarProps {\n data: StatusBarData[]\n height?: number\n}\n\nconst StatusBar: React.FC<StatusBarProps> = ({ data, height = 8 }) => {\n const borderRadius = `${height / 4}px`\n\n return (\n <Stack\n bgcolor=\"grey.300\"\n borderRadius={borderRadius}\n direction=\"row\"\n gap={2}\n height={height}\n width=\"100%\"\n >\n {data.map((item, index) => (\n <Box\n bgcolor={item.color}\n borderRadius={borderRadius}\n height={height}\n key={index}\n width={item.percentage}\n />\n ))}\n </Stack>\n )\n}\n\nexport default StatusBar\n","import React from 'react'\nimport MuiDialog from '@mui/material/Dialog'\nimport DialogContent from '@mui/material/DialogContent'\nimport { DialogFooter, DialogHeader } from '@kyper/mui'\nimport { DialogProps as MuiDialogProps } from '@mui/material/Dialog'\n\nexport type CopyObject = {\n close_aria?: string\n title: string\n}\n\nexport interface DialogProps extends Omit<MuiDialogProps, 'open'> {\n className?: string\n copy: CopyObject\n disablePrimaryButton?: boolean\n isOpen: boolean\n onClose: () => void\n onPrimaryAction?: () => void\n onSecondaryAction?: () => void\n primaryColor?: 'primary' | 'inherit' | 'secondary' | 'success' | 'error' | 'info' | 'warning'\n primaryText?: string\n secondaryColor?: 'primary' | 'inherit' | 'secondary' | 'success' | 'error' | 'info' | 'warning'\n secondaryText?: string\n}\n\nconst Dialog: React.FC<React.PropsWithChildren<DialogProps>> = ({\n className,\n copy = {\n title: '',\n close_aria: 'Close',\n },\n disablePrimaryButton = false,\n isOpen = false,\n onClose,\n onPrimaryAction,\n primaryColor = 'primary',\n primaryText = 'Confirm',\n onSecondaryAction,\n secondaryColor = 'primary',\n secondaryText = 'Cancel',\n children,\n ...rest\n}) => {\n const handlePrimaryAction = () => {\n onPrimaryAction?.()\n onClose()\n }\n\n const handleSecondaryAction = () => {\n if (onSecondaryAction) {\n onSecondaryAction()\n }\n onClose()\n }\n\n return (\n <div className={`mx-cmn-dialog ${className}`}>\n <MuiDialog\n onClose={onClose}\n open={isOpen}\n sx={{\n '& .MuiDialog-paperScrollPaper': {\n backgroundColor: 'background.default',\n },\n height: '100%',\n }}\n {...rest}\n >\n <DialogHeader\n copy={{ title: copy.title, close_aria: copy.close_aria }}\n onClose={onClose}\n style={{ boxSizing: 'border-box' }}\n />\n\n <DialogContent sx={{ lineHeight: 1.5 }}>{children}</DialogContent>\n\n <DialogFooter\n isPrimaryDisabled={disablePrimaryButton}\n onPrimaryAction={handlePrimaryAction}\n onSecondaryAction={handleSecondaryAction}\n primaryColor={primaryColor}\n primaryText={primaryText}\n secondaryColor={secondaryColor}\n secondaryText={secondaryText}\n style={{ boxSizing: 'border-box' }}\n />\n </MuiDialog>\n </div>\n )\n}\n\nexport default Dialog\n","import React from 'react'\n\nimport Box from '@mui/material/Box'\nimport Stack from '@mui/material/Stack'\nimport IconButton from '@mui/material/IconButton'\nimport ArrowBackOutlinedIcon from '@mui/icons-material/ArrowBackOutlined'\n\nimport { H2 } from '@kyper/mui'\n\ninterface DrawerHeaderProps {\n ariaLabelClose: string\n onClose: () => void\n shouldShowBorders: boolean\n shouldShowShadow?: boolean\n title: string\n}\n\nconst DrawerHeader: React.FC<DrawerHeaderProps> = ({\n ariaLabelClose,\n onClose,\n shouldShowBorders,\n shouldShowShadow,\n title,\n}) => {\n return (\n <Stack\n aria-level={1}\n direction=\"row\"\n role=\"heading\"\n sx={{\n alignItems: 'center',\n backgroundColor: 'background.paper',\n ...(shouldShowBorders && {\n borderBottom: 1,\n borderTop: 1,\n borderColor: 'border.light',\n }),\n ...(shouldShowShadow && {\n boxShadow: '0px 2px 8px 0px #6A73811F',\n }),\n padding: '8px 8px 8px 8px',\n }}\n >\n <IconButton aria-label={ariaLabelClose} color=\"primary\" onClick={onClose}>\n <ArrowBackOutlinedIcon color=\"primary\" sx={{ fontSize: 22 }} />\n </IconButton>\n <Box\n sx={{\n flexGrow: 1,\n margin: 'auto',\n textAlign: 'center',\n }}\n >\n <H2 bold={true} variant=\"Body\">\n {title}\n </H2>\n </Box>\n {/* placeholder for when we add a button here, this also ensures the title text is centered */}\n <Box width=\"44px\" />\n </Stack>\n )\n}\n\nexport default DrawerHeader\n","import React from 'react'\n\nimport Box from '@mui/material/Box'\nimport Stack from '@mui/material/Stack'\nimport type { SxProps } from '@mui/material/styles'\n\nimport { Drawer as KMuiDrawer, Footer } from '@kyper/mui'\n\nimport Header from './Header'\n\nexport type CopyObject = {\n close_drawer_aria: string\n}\n\ninterface DrawerProps {\n ariaLabelClose?: string\n className?: string\n id?: string\n isOpen: boolean\n isPrimaryDisabled?: boolean\n onClose: () => void\n onPrimaryAction?: () => void\n onSecondaryAction?: () => void\n primaryColor?: 'primary' | 'inherit' | 'secondary' | 'success' | 'error' | 'info' | 'warning'\n primaryText?: string\n secondaryColor?: 'primary' | 'inherit' | 'secondary' | 'success' | 'error' | 'info' | 'warning'\n secondaryText?: string\n shouldShowHeaderBorders?: boolean\n shouldShowHeaderShadow?: boolean\n sx?: SxProps\n title: string\n}\n\nconst Drawer: React.FC<React.PropsWithChildren<DrawerProps>> = ({\n ariaLabelClose = 'Close',\n children,\n id,\n isOpen,\n isPrimaryDisabled,\n onClose,\n onPrimaryAction,\n onSecondaryAction,\n primaryColor = 'primary',\n primaryText,\n secondaryColor = 'secondary',\n secondaryText,\n shouldShowHeaderBorders = true,\n shouldShowHeaderShadow = false,\n title,\n ...rest\n}) => {\n return (\n <KMuiDrawer\n id={id}\n isOpen={isOpen}\n onClose={onClose}\n sx={{\n '& .MuiDrawer-paper': {\n backgroundColor: 'background.default',\n },\n height: '100%',\n '& .MuiToolbar-root': {\n backgroundColor: 'background.paper',\n },\n }}\n {...rest}\n >\n <Stack height=\"100%\" justifyContent=\"space-between\">\n <Header\n ariaLabelClose={ariaLabelClose}\n onClose={onClose}\n shouldShowBorders={shouldShowHeaderBorders}\n shouldShowShadow={shouldShowHeaderShadow}\n title={title}\n />\n\n <Box height=\"100%\" overflow=\"auto\">\n {children}\n </Box>\n\n {onPrimaryAction && (\n <Footer\n isPrimaryDisabled={isPrimaryDisabled}\n onPrimaryAction={onPrimaryAction}\n onSecondaryAction={onSecondaryAction ?? onClose}\n primaryColor={primaryColor}\n primaryText={primaryText}\n secondaryColor={secondaryColor}\n secondaryText={secondaryText}\n />\n )}\n </Stack>\n </KMuiDrawer>\n )\n}\n\nexport default Drawer\n","import React from 'react'\nimport { addMonths } from 'date-fns/addMonths'\nimport { addDays } from 'date-fns/addDays'\nimport { addYears } from 'date-fns/addYears'\nimport { differenceInCalendarDays } from 'date-fns/differenceInCalendarDays'\nimport { endOfMonth } from 'date-fns/endOfMonth'\nimport { endOfToday } from 'date-fns/endOfToday'\nimport { endOfYear } from 'date-fns/endOfYear'\nimport { startOfMonth } from 'date-fns/startOfMonth'\nimport { startOfToday } from 'date-fns/startOfToday'\nimport { startOfYear } from 'date-fns/startOfYear'\nimport { subMonths } from 'date-fns/subMonths'\nimport { subDays } from 'date-fns/subDays'\nimport { subYears } from 'date-fns/subYears'\n\nimport Box from '@mui/material/Box'\nimport Button from '@mui/material/Button'\nimport ButtonGroup from '@mui/material/ButtonGroup'\nimport IconButton from '@mui/material/IconButton'\nimport Stack from '@mui/material/Stack'\nimport Tab from '@mui/material/Tab'\nimport Tabs from '@mui/material/Tabs'\nimport ToggleButton from '@mui/material/ToggleButton'\nimport ToggleButtonGroup from '@mui/material/ToggleButtonGroup'\nimport Tooltip from '@mui/material/Tooltip'\nimport useTheme from '@mui/material/styles/useTheme'\n\nimport { DateRange } from '@mui/x-date-pickers-pro'\n\nimport { DateRangePicker, DateRangePickerCopy, Icon, Text } from '@kyper/mui'\n\nimport { DATE_FORMATS_INTL, formatDate } from '../../constants'\nimport { useScreenSize } from '../../hooks'\nimport Dialog from '../dialog/Dialog'\nimport Drawer from '../drawer/Drawer'\n\nexport type DateRangeSelectorCopy = {\n dateRangePickerCopy: DateRangePickerCopy\n dateRangeEditApply: string\n dateRangeEditTitle: string\n dateRangeNextAria: string\n dateRangePreviousAria: string\n dateRangeCloseAria: string\n}\n\nexport type CalendarActions = {\n shouldDisableNext?: boolean\n shouldDisablePrevious?: boolean\n shouldDisablePicker?: boolean\n onRangeChanged: (dateRange: DateRange<Date>) => void\n}\n\nexport interface DateRangeSelectorProps {\n calendarActions: CalendarActions\n color?: 'primary' | 'secondary'\n copy: DateRangeSelectorCopy\n range?: DateRange<Date>\n shouldShrinkToIcon?: boolean\n toolTipContent?: string\n variant?: 'outlined' | 'text' | 'readonly' | 'timeframebuttons' | 'timeframetabs'\n}\n\nexport type Timeframe = {\n label: string\n value: number\n}\n\nconst DateRangeSelector: React.FC<DateRangeSelectorProps> = ({\n calendarActions,\n color = 'primary',\n copy,\n range = [startOfMonth(startOfToday()), endOfMonth(endOfToday())],\n shouldShrinkToIcon = true,\n toolTipContent = '',\n variant = 'outlined',\n}) => {\n const theme = useTheme()\n const isDark = theme.palette.mode === 'dark'\n const { isDesktop, isMobile } = useScreenSize()\n\n const [dateRange, setDateRange] = React.useState<DateRange<Date>>(range)\n const [shortcut, setShortcut] = React.useState(copy.dateRangePickerCopy.dateRangeThisMonth)\n const [pickerDateRange, setPickerDateRange] = React.useState(dateRange)\n const [isPickerOpen, setIsPickerOpen] = React.useState(false)\n const [isMonthFormat, setIsMonthFormat] = React.useState(true)\n const [timeframe, setTimeframe] = React.useState(6)\n\n // TODO: put labels in mrs content and use as copy\n const timeframes = {\n buttons: [\n { label: '3M', value: 3 },\n { label: '6M', value: 6 },\n { label: '9M', value: 9 },\n { label: '1Y', value: 12 },\n ],\n tabs: [\n { label: '3 Months', value: 3 },\n { label: '6 Months', value: 6 },\n { label: '9 Months', value: 9 },\n { label: '1 Year', value: 12 },\n ],\n }\n\n React.useEffect(() => {\n setPickerDateRange(range)\n }, [range])\n\n // dates for timeframe buttons\n // using today's date as the end date, looks back 3, 6, 9, or 12 months\n React.useEffect(() => {\n if (variant === 'timeframebuttons' || variant === 'timeframetabs') {\n calendarActions.onRangeChanged(getTimeFrameDates())\n }\n }, [timeframe])\n\n const getTimeFrameDates = () => {\n const timeframeEndDate = endOfMonth(endOfToday()) as Date\n const timeframeBeginDate = endOfMonth(subMonths(timeframeEndDate, timeframe))\n return [timeframeBeginDate, timeframeEndDate] as DateRange<Date>\n }\n\n const handlePrevNextClick = (direction: 'previous' | 'next') => {\n const newRange = [...dateRange] as DateRange<Date>\n const beginDate = dateRange[0] as Date\n const endDate = dateRange[1] as Date\n const isPrev = direction === 'previous'\n\n if (shortcut === copy.dateRangePickerCopy.dateRangeThisMonth) {\n newRange[0] = isPrev ? subMonths(beginDate, 1) : addMonths(beginDate, 1)\n newRange[1] = endOfMonth(isPrev ? subMonths(endDate, 1) : addMonths(endDate, 1))\n } else if (\n shortcut === copy.dateRangePickerCopy.dateRangeYTD ||\n shortcut === copy.dateRangePickerCopy.dateRangeLastYear\n ) {\n newRange[0] = isPrev\n ? subYears(startOfYear(beginDate), 1)\n : addYears(startOfYear(beginDate), 1)\n newRange[1] = isPrev ? subYears(endOfYear(beginDate), 1) : addYears(endOfYear(beginDate), 1)\n } else {\n const numDays = differenceInCalendarDays(endDate, beginDate)\n newRange[0] =\n direction === 'previous' ? subDays(beginDate, numDays) : addDays(beginDate, numDays)\n newRange[1] = direction === 'previous' ? subDays(endDate, numDays) : addDays(endDate, numDays)\n }\n\n setDateRange(newRange)\n calendarActions.onRangeChanged(newRange)\n }\n\n const handleRangeChanged = () => {\n setDateRange(pickerDateRange)\n setIsMonthFormat(\n shortcut === copy.dateRangePickerCopy.dateRangeThisMonth ||\n shortcut === copy.dateRangePickerCopy.dateRangeLastMonth,\n )\n calendarActions.onRangeChanged(pickerDateRange)\n }\n\n const handleTimeframeChanged = (timeframe: number) => {\n setTimeframe(timeframe)\n }\n\n return (\n <Box className=\"mx-cmn-date-range-selector\" m={4}>\n <Tooltip\n id=\"select-date\"\n placement=\"bottom\"\n sx={{ display: { xs: shouldShrinkToIcon ? 'inline-flex' : 'none', sm: 'none' } }}\n title={toolTipContent}\n >\n <IconButton\n aria-describedby=\"select-date\"\n aria-label=\"Select a date\"\n onClick={() => setIsPickerOpen(true)}\n >\n <Icon name=\"calendar_month\" />\n </IconButton>\n </Tooltip>\n\n <Box\n sx={{\n [theme.breakpoints.down('sm')]: {\n display: shouldShrinkToIcon ? 'none' : 'flex',\n justifyContent: 'center',\n },\n [theme.breakpoints.up('sm')]: { display: 'inline-flex' },\n }}\n >\n {variant === 'readonly' && (\n <Stack alignItems=\"center\" direction=\"row\" gap={8}>\n <Icon name=\"calendar_month\" size={24} />\n <Text bold={true}>\n {formatDate(pickerDateRange[0] as Date, DATE_FORMATS_INTL.MONTH_DAY)}\n </Text>\n <Icon name=\"remove\" />\n <Text bold={true}>\n {formatDate(pickerDateRange[1] as Date, DATE_FORMATS_INTL.MONTH_DAY_YEAR)}\n </Text>\n </Stack>\n )}\n\n {variant !== 'readonly' &&\n variant !== 'timeframebuttons' &&\n variant !== 'timeframetabs' && (\n <ButtonGroup\n color={color}\n sx={{\n '& .MuiButtonGroup-grouped': {\n padding: isMobile ? 0 : 'inherit',\n },\n height: 44,\n }}\n variant={variant}\n >\n <Button\n aria-disabled={calendarActions.shouldDisablePrevious}\n aria-label={copy.dateRangePreviousAria}\n color={calendarActions.shouldDisablePrevious ? 'secondary' : 'primary'}\n onClick={() =>\n calendarActions.shouldDisablePrevious ? null : handlePrevNextClick('previous')\n }\n >\n <Icon name=\"chevron_left\" size={28} />\n </Button>\n <Button\n aria-disabled={calendarActions.shouldDisablePicker}\n color={color}\n onClick={() => (calendarActions.shouldDisablePicker ? null : setIsPickerOpen(true))}\n startIcon={<Icon name=\"calendar_month\" size={20} />}\n sx={{\n p: isMobile ? 0 : 8,\n width: isDesktop ? 280 : 232,\n }}\n >\n {isMonthFormat ? (\n formatDate(dateRange[0] as Date, DATE_FORMATS_INTL.MONTH_YEAR)\n ) : (\n <span>\n {formatDate(dateRange[0] as Date, DATE_FORMATS_INTL.MONTH_DAY_YEAR)} -{' '}\n {formatDate(dateRange[1] as Date, DATE_FORMATS_INTL.MONTH_DAY_YEAR)}\n </span>\n )}\n </Button>\n <Button\n aria-disabled={calendarActions.shouldDisableNext}\n aria-label={copy.dateRangeNextAria}\n color={calendarActions.shouldDisableNext ? 'secondary' : 'primary'}\n onClick={() =>\n calendarActions.shouldDisableNext ? null : handlePrevNextClick('next')\n }\n >\n <Icon name=\"chevron_right\" size={28} />\n </Button>\n </ButtonGroup>\n )}\n\n {variant === 'timeframebuttons' && (\n <ToggleButtonGroup\n color={color}\n exclusive={true}\n orientation=\"horizontal\"\n value={timeframe}\n >\n {timeframes.buttons.map((timeframe: Timeframe) => (\n <ToggleButton\n key={timeframe.label}\n onClick={() => handleTimeframeChanged(timeframe.value)}\n sx={{\n fontSize: 15,\n fontWeight: 600,\n height: 44,\n width: 56,\n color: isDark ? theme.palette.grey[200] : theme.palette.grey[600],\n borderColor: isDark ? theme.palette.grey[600] : theme.palette.grey[400],\n '&:hover': {\n backgroundColor: isDark ? `${theme.palette.primary.darker}25` : 'inherit', // with 25% opacity\n borderColor: isDark ? theme.palette.grey[500] : theme.palette.primary.main,\n color: isDark ? theme.palette.primary.light : theme.palette.primary.dark,\n },\n '&.Mui-selected': {\n backgroundColor: isDark\n ? theme.palette.primary.darker\n : theme.palette.primary.lighter,\n borderColor: isDark ? theme.palette.primary.light : theme.palette.primary.main,\n color: isDark ? theme.palette.common.white : theme.palette.primary.dark,\n },\n '&.Mui-disabled': {\n borderColor: isDark ? theme.palette.grey[700] : theme.palette.grey[400],\n color: theme.palette.grey[500],\n },\n }}\n value={timeframe.value}\n >\n {timeframe.label}\n </ToggleButton>\n ))}\n </ToggleButtonGroup>\n )}\n\n {variant === 'timeframetabs' && (\n <Tabs\n indicatorColor=\"primary\"\n onChange={(_, newValue) => handleTimeframeChanged(newValue)}\n textColor=\"primary\"\n value={timeframe}\n variant=\"fullWidth\"\n >\n {timeframes.tabs.map((timeframe: Timeframe) => (\n <Tab\n key={timeframe.label}\n label={\n <Text bold={true} variant=\"Body\">\n {timeframe.label}\n </Text>\n }\n sx={{ minWidth: 80 }}\n value={timeframe.value}\n />\n ))}\n </Tabs>\n )}\n </Box>\n\n {isPickerOpen && isMobile && (\n <Drawer\n ariaLabelClose={copy.dateRangeCloseAria}\n isOpen={isPickerOpen}\n onClose={() => setIsPickerOpen(false)}\n onPrimaryAction={() => {\n handleRangeChanged()\n setIsPickerOpen(false)\n }}\n primaryText={copy.dateRangeEditApply}\n title={copy.dateRangeEditTitle}\n >\n <DateRangePicker\n copy={copy.dateRangePickerCopy}\n dateRange={pickerDateRange}\n onRangeChanged={(range, shortcut) => {\n setPickerDateRange(range)\n setShortcut(shortcut)\n }}\n selectedShortcut={shortcut}\n sx={{ p: 16 }}\n />\n </Drawer>\n )}\n\n {isPickerOpen && !isMobile && (\n <Dialog\n copy={{ title: copy.dateRangeEditTitle }}\n isOpen={true}\n onClose={() => setIsPickerOpen(false)}\n onPrimaryAction={() => handleRangeChanged()}\n primaryText={copy.dateRangeEditApply}\n sx={{\n '& .MuiDialogContent-root': {\n padding: 0,\n },\n }}\n >\n <DateRangePicker\n copy={copy.dateRangePickerCopy}\n dateRange={pickerDateRange}\n onRangeChanged={(range, shortcut) => {\n setPickerDateRange(range)\n setShortcut(shortcut)\n }}\n selectedShortcut={shortcut}\n sx={{\n pt: 0,\n '& .MuiPickersLayout-toolbar': {\n gridColumn: '1/4',\n },\n }}\n />\n </Dialog>\n )}\n </Box>\n )\n}\n\nexport default DateRangeSelector\n","// Based off the useMeasure hook from useHooks.com/usemeasure(ui.dev). Converted to typescript and added a debounce. https://github.com/uidotdev/usehooks/blob/main/index.js\n\nimport React from 'react'\n\ntype Dimensions = {\n width: number\n height: number\n}\n\n// Memoized debounce function\nconst useDebounce = <T extends (...args: any[]) => void>(func: T, delay: number) => {\n return React.useMemo(() => {\n let timeoutId: NodeJS.Timeout | null = null\n return (...args: Parameters<T>) => {\n if (timeoutId) {\n clearTimeout(timeoutId)\n }\n timeoutId = setTimeout(() => {\n func(...args)\n }, delay)\n }\n }, [func, delay])\n}\n\nexport function useDimensions(\n debounceDelay: number = 100,\n): [React.RefCallback<HTMLElement>, Dimensions] {\n const [dimensions, setDimensions] = React.useState<Dimensions>({\n width: 0,\n height: 0,\n })\n\n const observerRef = React.useRef<ResizeObserver | null>(null)\n const previousDimensions = React.useRef<Dimensions>(dimensions)\n\n const debouncedSetDimensions = useDebounce((width: number, height: number) => {\n if (\n width !== previousDimensions.current.width ||\n height !== previousDimensions.current.height\n ) {\n setDimensions({ width, height })\n previousDimensions.current = { width, height }\n }\n }, debounceDelay)\n\n const customRef = React.useCallback(\n (node: HTMLElement | null) => {\n if (observerRef.current) {\n observerRef.current.disconnect()\n observerRef.current = null\n }\n\n if (node?.nodeType === Node.ELEMENT_NODE) {\n const observer = new ResizeObserver(([entry]) => {\n if (entry && entry.borderBoxSize) {\n const { inlineSize: width, blockSize: height } = entry.borderBoxSize[0]\n debouncedSetDimensions(width, height)\n }\n })\n\n observer.observe(node)\n observerRef.current = observer\n }\n },\n [debouncedSetDimensions],\n )\n\n // Add cleanup effect\n React.useEffect(() => {\n return () => {\n if (observerRef.current) {\n observerRef.current.disconnect()\n }\n }\n }, [])\n\n return [customRef, dimensions]\n}\n","import React from 'react'\n\nimport Button from '@mui/material/Button'\nimport Card from '@mui/material/Card'\nimport CardHeader from '@mui/material/CardHeader'\nimport CardContent from '@mui/material/CardContent'\nimport type { SxProps } from '@mui/material/styles'\n\nimport { H3, Icon, Text } from '@kyper/mui'\n\nimport { WidgetContainerProvider } from '../context'\nimport { useDimensions } from '../hooks/useDimensions'\n\ninterface CardContainerProps {\n className?: string\n onPrimaryCtaClick?: () => void\n primaryCtaLabel?: string\n subTitle?: string\n sx?: SxProps\n title?: string\n}\n\nconst MiniWidgetContainer: React.FC<React.PropsWithChildren<CardContainerProps>> = ({\n className = 'mx-cmn-mini-widget',\n children,\n onPrimaryCtaClick,\n primaryCtaLabel = '',\n subTitle = '',\n sx = {},\n title = '',\n}) => {\n const [containerRef, { height, width }] = useDimensions()\n\n return (\n <Card className={className} sx={{ borderRadius: '8px', ...sx }}>\n <CardHeader\n action={\n onPrimaryCtaClick && (\n <Button\n endIcon={<Icon name=\"keyboard_arrow_right_rounded\" />}\n onClick={onPrimaryCtaClick}\n >\n <Text bold={true} variant=\"Small\">\n {primaryCtaLabel}\n </Text>\n </Button>\n )\n }\n subheader={subTitle ? subTitle : null}\n subheaderTypographyProps={{ variant: 'Small' }}\n sx={{ pb: 4 }}\n title={title ? <H3 sx={{ pb: 4 }}>{title}</H3> : null}\n />\n\n <CardContent ref={containerRef} sx={{ p: 0 }}>\n <WidgetContainerProvider availableHeight={height} availableWidth={width}>\n {children}\n </WidgetContainerProvider>\n </CardContent>\n </Card>\n )\n}\n\nexport default MiniWidgetContainer\n","import React, { PropsWithChildren } from 'react'\nimport { observer } from 'mobx-react-lite'\n\nimport Button from '@mui/material/Button'\nimport Box from '@mui/material/Box'\nimport Card from '@mui/material/Card'\nimport CardHeader from '@mui/material/CardHeader'\nimport CardContent from '@mui/material/CardContent'\nimport Divider from '@mui/material/Divider'\nimport IconButton from '@mui/material/IconButton'\nimport Stack from '@mui/material/Stack'\nimport type { SxProps } from '@mui/material/styles'\n\nimport { H1, H3, Icon } from '@kyper/mui'\n\nimport { AccountFilter } from './accountfilter'\nimport { DateRangeSelector } from './daterangeselector'\nimport { ANALYTICS_EVENTS, useEvent } from '../../common'\nimport { useGlobalCopyStore, useGlobalUiStore } from '../context'\nimport { useScreenSize } from '../hooks'\nimport { Account } from '../types'\nimport { CalendarActions, DateRangeSelectorCopy } from './daterangeselector/DateRangeSelector'\n\nimport { WidgetContainerProvider } from '../context'\nimport { useDimensions } from '../hooks/useDimensions'\n\ntype Action = {\n label: string\n iconName: string\n onClick: () => void\n}\n\ninterface WidgetContainerProps {\n accountOptions?: Account[]\n actions?: Action[]\n calendarActions?: CalendarActions\n className?: string\n dateRange?: { start: Date; end: Date }\n dateRangeVariant?: 'outlined' | 'text' | 'readonly' | 'timeframebuttons' | 'timeframetabs'\n hasDivider?: boolean\n onBackClick?: () => void\n onAccountsFilterClick?: () => void\n showDividerAboveDateSelector?: boolean\n sx?: SxProps\n title?: string\n}\n\nconst WidgetContainer: React.FC<PropsWithChildren<WidgetContainerProps>> = ({\n accountOptions,\n actions = [],\n calendarActions,\n children,\n dateRange,\n dateRangeVariant,\n className = 'mx-cmn-widget',\n hasDivider = false,\n onBackClick,\n onAccountsFilterClick,\n showDividerAboveDateSelector = true,\n sx = {},\n title = '',\n}) => {\n const [containerRef, { height, width }] = useDimensions()\n const { onEvent } = useEvent()\n\n const { isDesktop, isMobile, isTablet } = useScreenSize()\n const { displayedDateRange, selectedAccountGuids, setSelectedAccountGuids } = useGlobalUiStore()\n const { common: commonCopy } = useGlobalCopyStore()\n\n const handleBackClick = () => {\n if (onBackClick) {\n onBackClick()\n onEvent(ANALYTICS_EVENTS.WIDGET_BACK_CLICK)\n }\n }\n\n const accountFilterCopy = {\n accountFilterOptionsCopy: {\n accountTypeAccounts: commonCopy.account_filter.account_type_accounts,\n cancelButton: commonCopy.cancel_button,\n filterButton: commonCopy.filter_button,\n filterButtonAria: commonCopy.account_filter.filter_button_generic_aria,\n selectAllAccounts: commonCopy.account_filter.select_all_accounts,\n toggleAccountTypeAccounts: commonCopy.account_filter.toggle_account_type_accounts,\n unselectAllAccounts: commonCopy.account_filter.unselect_all_accounts,\n zeroStateButton: commonCopy.account_filter.zero_state_button,\n zeroStateDescription: commonCopy.account_filter.zero_state_description,\n zeroStateTitle: commonCopy.account_filter.zero_state_title,\n },\n title: commonCopy.account_filter.title,\n }\n\n const dateRangeSelectorCopy = {\n dateRangePickerCopy: {\n dateRangeFrom: commonCopy.date_range_picker.from,\n dateRangeTo: commonCopy.date_range_picker.to,\n dateRangeCustom: commonCopy.date_range_picker.custom,\n dateRangeSelectARange: commonCopy.date_range_picker.select_range,\n dateRangeThisMonth: commonCopy.date_range_picker.this_month,\n dateRangeLastMonth: commonCopy.date_range_picker.last_month,\n dateRangeLast30Days: commonCopy.date_range_picker.last_30_days,\n dateRangeLast90Days: commonCopy.date_range_picker.last_90_days,\n dateRangeYTD: commonCopy.date_range_picker.ytd,\n dateRangeLastYear: commonCopy.date_range_picker.last_year,\n dateRangeSelect: commonCopy.date_range_picker.select,\n },\n dateRangeEditApply: commonCopy.date_range_picker.edit_apply,\n dateRangeEditTitle: commonCopy.date_range_picker.edit_title,\n dateRangeNextAria: commonCopy.date_range_picker.next_aria,\n dateRangePreviousAria: commonCopy.date_range_picker.previous_aria,\n } as DateRangeSelectorCopy\n\n const startDate = dateRange ? dateRange.start : displayedDateRange.start\n const endDate = dateRange ? dateRange.end : displayedDateRange.end\n\n return (\n <Card\n className={className}\n sx={{\n borderRadius: '8px',\n ...(isMobile && {\n px: 4,\n }),\n '& .mx-cmn-date-range-selector': {\n ...((isMobile || isTablet) && {\n textAlign: 'center',\n }),\n },\n ...sx,\n }}\n >\n <CardHeader\n action={\n <Stack alignItems=\"center\" flexDirection=\"row\">\n {isDesktop && calendarActions && (\n <Box sx={{ flexGrow: 1 }}>\n <DateRangeSelector\n calendarActions={calendarActions}\n copy={dateRangeSelectorCopy}\n range={[startDate, endDate]}\n shouldShrinkToIcon={false}\n variant={dateRangeVariant}\n />\n </Box>\n )}\n {accountOptions && (\n <AccountFilter\n accounts={accountOptions}\n copy={accountFilterCopy}\n onFilterClick={(guids) => {\n const selAcctGuids = accountOptions\n .filter((account) => guids.includes(account.guid))\n .map((account) => account.guid)\n\n setSelectedAccountGuids(selAcctGuids)\n onAccountsFilterClick?.()\n }}\n selectedAccountGuids={selectedAccountGuids}\n showAccountNumbers={false}\n sx={{ '& .mx-cmn-account-filter-title': { fontSize: 15 }, mx: 4 }}\n variant=\"text\"\n />\n )}\n {actions.map((action) =>\n isDesktop || isTablet ? (\n <Button\n key={action.iconName}\n onClick={action.onClick}\n startIcon={<Icon name={action.iconName} />}\n sx={{ mx: 4 }}\n >\n {action.label}\n </Button>\n ) : (\n <IconButton\n aria-label={action.label}\n key={action.iconName}\n onClick={action.onClick}\n >\n <Icon name={action.iconName} />\n </IconButton>\n ),\n )}\n </Stack>\n }\n sx={{\n '& .MuiCardHeader-action': {\n ...(calendarActions && isDesktop && { flexGrow: 1 }),\n ...((isMobile || isTablet) && {\n alignSelf: 'center',\n }),\n },\n p: isDesktop ? 48 : 24,\n pb: 0,\n }}\n title={\n isDesktop || isTablet ? (\n <H1>{title}</H1>\n ) : (\n <Stack alignItems=\"center\" flexDirection=\"row\">\n {isMobile && onBackClick && (\n <IconButton\n aria-label={commonCopy.back_to_dashboard}\n onClick={handleBackClick}\n sx={{ ml: -16, mr: 16 }}\n >\n <Icon name=\"arrow_back\" />\n </IconButton>\n )}\n <H3>{title}</H3>\n </Stack>\n )\n }\n />\n\n {hasDivider && <Divider sx={{ mt: isDesktop ? 48 : 24 }} />}\n\n {calendarActions && (isMobile || isTablet) && (\n <Stack gap={24} justifyContent=\"center\" sx={{ mt: 16 }}>\n {showDividerAboveDateSelector && <Divider />}\n <DateRangeSelector\n calendarActions={calendarActions}\n copy={dateRangeSelectorCopy}\n range={[startDate, endDate]}\n shouldShrinkToIcon={false}\n variant={dateRangeVariant}\n />\n </Stack>\n )}\n <CardContent ref={containerRef} sx={{ p: 0 }}>\n <WidgetContainerProvider availableHeight={height} availableWidth={width}>\n {children}\n </WidgetContainerProvider>\n </CardContent>\n </Card>\n )\n}\n\nexport default observer(WidgetContainer)\n","import { observer } from 'mobx-react-lite'\n\nimport Box from '@mui/material/Box'\nimport CircularProgress from '@mui/material/CircularProgress'\nimport Stack from '@mui/material/Stack'\n\nimport { Text } from '@kyper/mui'\n\nimport { MemberConnectionStatus } from '../../accounts'\nimport { useGlobalCopyStore } from '../../common'\n\ninterface ConnectStatus {\n status?: MemberConnectionStatus\n}\n\nconst ConnectStatus: React.FC<ConnectStatus> = ({ status = MemberConnectionStatus.Loading }) => {\n const { connect: connectCopy } = useGlobalCopyStore()\n\n return (\n <Box\n sx={{\n height: 'calc(100% - 62px)',\n position: 'absolute',\n width: '100%',\n }}\n >\n <Stack alignItems=\"center\" direction=\"column\" justifyContent=\"center\" sx={{ height: '100%' }}>\n {status === MemberConnectionStatus.Loading && (\n <CircularProgress color=\"primary\" size={48} />\n )}\n <Text\n sx={{\n color: 'grey.600',\n marginTop: '16px',\n }}\n >\n {status === MemberConnectionStatus.Error ? connectCopy.oops : connectCopy.loading}\n </Text>\n </Stack>\n </Box>\n )\n}\n\nexport default observer(ConnectStatus)\n","export enum MemberConnectionStatus {\n Loading = 'loading',\n Error = 'error',\n}\n\nexport enum FieldType {\n Currency = 'currency',\n Date = 'date',\n Input = 'input',\n Select = 'select',\n}\n","export const CONNECT_WIDGET_ID = 'connect_widget'\nexport const CONNECTIONS_WIDGET_ID = 'connections_widget'\n","import React from 'react'\nimport { observer } from 'mobx-react-lite'\nimport useTheme from '@mui/material/styles/useTheme'\nimport { ConnectWidget } from '@mxenabled/web-widget-sdk'\n\nimport ConnectStatus from '../../accounts/components/ConnectStatus'\nimport { Drawer, useAccountStore, useGlobalCopyStore } from '../../common'\nimport { MemberConnectionStatus } from '../../accounts/constants/Accounts'\nimport { CONNECT_WIDGET_ID } from '../constants/Connect'\nimport { useConnectStore } from '../context/hooks'\n\ninterface ConnectDrawerProps {\n loadWidgetProps?: object\n onClose: () => void\n showConnectWidget: boolean\n title: string\n}\n\nconst ConnectDrawer: React.FC<ConnectDrawerProps> = ({\n loadWidgetProps,\n onClose,\n showConnectWidget,\n title,\n}) => {\n let connectWidget: ConnectWidget\n\n const { refreshAccounts } = useAccountStore()\n const { loadWidget } = useConnectStore()\n const { connect: connectCopy } = useGlobalCopyStore()\n const [isLoading, setIsLoading] = React.useState(false)\n const [hasError, setHasError] = React.useState(false)\n const {\n palette: { mode },\n } = useTheme()\n\n React.useEffect(() => {\n if (showConnectWidget) {\n setIsLoading(true)\n loadWidget({ mode: mode, ...loadWidgetProps }).then((res) => {\n connectWidget = new ConnectWidget({\n container: `#${CONNECT_WIDGET_ID}`,\n style: {\n height: 'calc(100% - 62px)',\n maxWidth: '450px',\n position: 'absolute',\n width: '100%',\n },\n url: res.url,\n onSsoUrlLoadError: () => {\n setIsLoading(false)\n setHasError(true)\n },\n onLoad: () => {\n setIsLoading(false)\n setHasError(false)\n },\n })\n })\n } else {\n setIsLoading(false)\n setHasError(false)\n }\n\n return () => {\n connectWidget?.unmount()\n }\n }, [showConnectWidget])\n\n return (\n <Drawer\n ariaLabelClose={connectCopy.close_manage_connection_aria}\n isOpen={showConnectWidget}\n onClose={() => {\n onClose()\n refreshAccounts()\n }}\n title={title}\n >\n <div id={CONNECT_WIDGET_ID}>\n {hasError && <ConnectStatus status={MemberConnectionStatus.Error} />}\n {isLoading && <ConnectStatus status={MemberConnectionStatus.Loading} />}\n </div>\n </Drawer>\n )\n}\n\nexport default observer(ConnectDrawer)\n","import React from 'react'\nimport { css } from '@mxenabled/cssinjs'\nimport { v4 as uuidv4 } from 'uuid'\n\nimport type { TextFieldProps as MuiTextFieldProps } from '@mui/material/TextField'\n\nimport { P, TextField, useTokens } from '@kyper/mui'\n\nimport { buildDynamicCopy, getLocale } from '../utils/Localization'\nimport { formatCurrency, getCurrencyCodes } from '../utils/NumberFormatting'\nimport { CurrencyCodes, MAX_MONEY_INPUT } from '../constants/Numbers'\nimport { CurrencyInputCopy } from '../types'\nimport { useGlobalCopyStore } from '../../common'\n\ntype CurrencyInputProps = {\n allowDecimals?: boolean\n amountIsRequired?: boolean\n ariaLabel?: string\n amount: string | number\n copy?: CurrencyInputCopy\n customValidate?: () => boolean\n errorText?: string\n label?: string\n minAmount?: number\n setAmount: (s: string) => void\n setHasValidInput?: (b: boolean) => void\n} & MuiTextFieldProps\n\nconst CurrencyInput: React.FC<CurrencyInputProps> = ({\n allowDecimals = true,\n ariaLabel,\n amount,\n amountIsRequired = true,\n copy,\n customValidate = () => true,\n errorText = '',\n label,\n minAmount = 1,\n setAmount,\n setHasValidInput,\n ...rest\n}) => {\n const [errorMsg, setErrorMsg] = React.useState('')\n const { common: commonCopy } = useGlobalCopyStore()\n const customCopy = copy ? copy : commonCopy.currency_input\n\n const tokens = useTokens()\n const styles = getStyles(tokens)\n\n const numbersOnly = /^[0-9]*$/\n // disabling this lint rule because this \"useless\" escape is not useless and breaks functionality if removed\n // eslint-disable-next-line no-useless-escape\n const numbersWithComma = /^(\\d)*(\\,)?([0-9]{1,2})?$/\n const numbersWithDecimal = /^(\\d)*(\\.)?([0-9]{1,2})?$/\n let pattern: RegExp\n\n const nameRef = React.useRef(uuidv4())\n\n if (allowDecimals) {\n switch (getCurrencyCodes()) {\n case CurrencyCodes.CAD:\n pattern = numbersWithComma\n break\n default:\n pattern = numbersWithDecimal\n break\n }\n } else {\n pattern = numbersOnly\n }\n\n React.useEffect(() => {\n handleValidation(amount)\n }, [amount])\n\n const handleValidation = (value: string | number) => {\n if (!amountIsRequired && (value === '' || value === '.' || value === ',')) {\n // don't display error in these instances, but indicate the input isn't valid\n setErrorMsg('')\n setHasValidInput?.(false)\n } else if (Number(value) < minAmount) {\n // display error if number is negative\n setErrorMsg(\n buildDynamicCopy(\n customCopy.error_amount_must_be_equal_to,\n formatCurrency(minAmount, '0'),\n ) as string,\n )\n setHasValidInput?.(false)\n } else if (Number(value) > MAX_MONEY_INPUT) {\n // display error if number is greater than max amount allowed\n setErrorMsg(\n buildDynamicCopy(\n customCopy.error_amount_must_be_less_than_or_equal_to,\n formatCurrency(MAX_MONEY_INPUT, allowDecimals ? '0,0.00' : '0,0', Math.floor),\n ) as string,\n )\n setHasValidInput?.(false)\n } else if (!value.toString().match(pattern)) {\n // check that input is valid and display error on special characters, etc\n setErrorMsg(customCopy.error_amount_is_invalid)\n setHasValidInput?.(false)\n } else if (!customValidate()) {\n // if custom error validation returns false, error passed in by parent is displayed\n setErrorMsg(errorText)\n setHasValidInput?.(false)\n } else {\n // input is valid!\n setErrorMsg('')\n setHasValidInput?.(true)\n }\n\n setAmount(value.toString())\n }\n\n return (\n <TextField\n InputProps={{\n endAdornment: getLocale().includes('fr-ca') ? <P>$</P> : undefined,\n startAdornment: !getLocale().includes('fr-ca') ? <P>$</P> : undefined,\n }}\n aria-label={ariaLabel || customCopy.enter_amount}\n className={`mx-cmn-currency-input ${styles}`}\n error={Boolean(errorMsg)}\n helperText={errorMsg}\n inputMode={allowDecimals ? 'decimal' : 'numeric'}\n inputProps={{\n noValidate: true,\n pattern: '[0-9]*',\n }}\n label={label}\n name={`currency-input-${nameRef.current}`}\n onChange={(e: any) => handleValidation(e.target.value)}\n value={amount}\n {...rest}\n />\n )\n}\n\nconst getStyles = (tokens: any) =>\n css({\n '& .MuiInputBase-adornedStart > .p': {\n marginRight: tokens.Spacing.Tiny,\n },\n })\n\nexport default CurrencyInput\n","import React from 'react'\n\nimport CircularProgress from '@mui/material/CircularProgress'\nimport Stack from '@mui/material/Stack'\n\nimport { Text, useTokens } from '@kyper/mui'\n\ninterface LoaderProps {\n label?: string\n size?: number\n}\n\nconst Loader: React.FC<LoaderProps> = ({ label = '', size = 32 }) => {\n const tokens = useTokens()\n\n return (\n <Stack alignItems=\"center\" gap={tokens.Spacing.XLarge} height={450} justifyContent=\"center\">\n <CircularProgress size={size} />\n {label && <Text>{label}</Text>}\n </Stack>\n )\n}\n\nexport default Loader\n","import React from 'react'\nimport { observer } from 'mobx-react-lite'\n\nimport Box from '@mui/material/Box'\nimport IconButton from '@mui/material/IconButton'\nimport InputAdornment from '@mui/material/InputAdornment'\n\nimport { Icon, TextField, useTokens } from '@kyper/mui'\n\nexport interface SearchBoxProps {\n ariaLabel?: string\n cancelAriaLabel?: string\n onChange: (value: string) => void\n placeholder?: string\n searchValue: string\n}\n\nconst SearchBox: React.FC<SearchBoxProps> = ({\n ariaLabel = 'Search',\n cancelAriaLabel = 'Cancel Search',\n onChange,\n placeholder = 'Search',\n searchValue,\n}) => {\n const tokens = useTokens()\n\n const cancelButton = (\n <IconButton\n aria-label={cancelAriaLabel}\n className=\"mx-cat-cancel-search-button\"\n onClick={() => onChange('')}\n >\n <Icon name=\"cancel\" size={24} />\n </IconButton>\n )\n\n return (\n <Box className=\"mx-cmn-search-box\" px={tokens.Spacing.Large} py={tokens.Spacing.Medium}>\n <TextField\n InputProps={{\n startAdornment: (\n <InputAdornment position=\"start\">\n <Icon color=\"disabled\" name=\"search\" size={26} />\n </InputAdornment>\n ),\n endAdornment: (\n <InputAdornment position=\"end\" sx={{ p: 0 }}>\n {searchValue ? cancelButton : null}\n </InputAdornment>\n ),\n }}\n aria-label={ariaLabel}\n name=\"search\"\n onChange={(e: React.ChangeEvent<HTMLInputElement>) => onChange(e.target.value)}\n placeholder={placeholder}\n // TODO: Theme needs to have the background color defaulted to paper for TextField\n sx={{ bgcolor: 'background.paper', width: '100%' }}\n value={searchValue}\n />\n </Box>\n )\n}\n\nexport default observer(SearchBox)\n","import React from 'react'\n\nimport Box from '@mui/material/Box'\nimport FormControlLabel from '@mui/material/FormControlLabel'\nimport Radio from '@mui/material/Radio'\nimport type { SxProps } from '@mui/material/styles'\nimport useTheme from '@mui/material/styles/useTheme'\nimport Tooltip from '@mui/material/Tooltip'\n\ninterface SelectionBoxProps {\n checked?: boolean\n label: string\n sx?: SxProps\n tooltip?: string\n value: string | number\n}\n\n/** TODO: Move this component to KyperMUI **/\nconst SelectionBox: React.FC<SelectionBoxProps> = ({\n checked = false,\n label,\n sx = {},\n tooltip = '',\n value,\n}) => {\n const theme = useTheme()\n\n /** TODO: Add new theme color to handle this color and remove the mode check **/\n const greyColor =\n theme.palette.mode === 'light' ? theme.palette.grey[400] : theme.palette.grey[700]\n const borderColor = checked ? theme.palette.action.active : greyColor\n const borderSize = checked ? 3 : 1\n\n return (\n <Box\n bgcolor=\"background.paper\"\n border={`${borderSize}px solid`}\n borderColor={borderColor}\n borderRadius={2}\n mt={-2}\n mx={8}\n pr={8}\n py={4}\n sx={{ '&:hover': { borderColor: theme.palette.action.active }, ...sx }}\n >\n <Tooltip title={tooltip}>\n <FormControlLabel\n control={\n <Radio\n disableRipple={true}\n sx={{ '&.Mui-checked': { color: theme.palette.action.active } }}\n />\n }\n label={label}\n labelPlacement=\"start\"\n sx={{ ml: 0, pl: 8 }}\n value={value}\n />\n </Tooltip>\n </Box>\n )\n}\n\nexport default SelectionBox\n","interface TabContentProps {\n children?: React.ReactNode\n index: number\n name: string\n value: number\n}\n\nconst TabContentContainer: React.FC<TabContentProps> = ({\n children,\n index,\n name,\n value,\n ...rest\n}) => {\n return (\n <div\n aria-labelledby={`${name}-tab-${index}`}\n hidden={value !== index}\n id={`${name}-tabpanel-${index}`}\n role=\"tabpanel\"\n {...rest}\n >\n {value === index && children}\n </div>\n )\n}\n\nexport default TabContentContainer\n","import Box from '@mui/material/Box'\nimport Stack from '@mui/material/Stack'\nimport type { SxProps } from '@mui/material/styles'\n\ninterface IconProps {\n backingSx?: SxProps\n size: number\n sx?: SxProps\n}\n\nconst IconBacking: React.FC<React.PropsWithChildren<IconProps>> = ({\n backingSx,\n children,\n size,\n sx,\n}) => (\n <Stack\n sx={{\n display: 'grid',\n placeItems: 'center',\n zIndex: 3,\n ...sx,\n }}\n >\n {children}\n\n <Box\n sx={{\n backgroundColor: 'common.white',\n borderRadius: '50%',\n height: size,\n width: size,\n gridRow: 1,\n gridColumn: 1,\n ...backingSx,\n }}\n />\n </Stack>\n)\n\nexport default IconBacking\n","import React from 'react'\n\nimport Avatar from '@mui/material/Avatar'\nimport ListItem from '@mui/material/ListItem'\nimport ListItemAvatar from '@mui/material/ListItemAvatar'\nimport ListItemButton from '@mui/material/ListItemButton'\nimport ListItemText from '@mui/material/ListItemText'\n\nimport { Icon, IconWeight } from '@kyper/mui'\nimport ListItemIcon from '@mui/material/ListItemIcon'\n\ninterface DataRowProps {\n iconName: string\n label: string\n onClick?: () => void\n value: string\n}\n\nconst DataRow: React.FC<DataRowProps> = ({ iconName, label, onClick, value }) => {\n const rowContents = (\n <>\n <ListItemAvatar>\n <Avatar sx={{ bgcolor: 'border.light' }} variant=\"rounded\">\n <Icon name={iconName} sx={{ color: 'text.primary' }} weight={IconWeight.Dark} />\n </Avatar>\n </ListItemAvatar>\n <ListItemText\n primary={label}\n primaryTypographyProps={{ variant: 'XSmall' }}\n secondary={value}\n secondaryTypographyProps={{ color: 'text.default', variant: 'Body', fontWeight: 600 }}\n />\n </>\n )\n\n return onClick ? (\n <ListItem disableGutters={true} disablePadding={true}>\n <ListItemButton onClick={onClick}>\n {rowContents}\n <ListItemIcon>\n <Icon name=\"chevron_right\" size={24} />\n </ListItemIcon>\n </ListItemButton>\n </ListItem>\n ) : (\n <ListItem disableGutters={false} disablePadding={false}>\n {rowContents}\n </ListItem>\n )\n}\n\nexport default DataRow\n","import React from 'react'\n\nimport IconButton from '@mui/material/IconButton'\nimport Stack from '@mui/material/Stack'\nimport Tooltip from '@mui/material/Tooltip'\n\nimport { Icon, IconWeight, Text } from '@kyper/mui'\n\ninterface InformationTooltipProps {\n body: string\n iconName?: string\n title: string\n}\n\nconst InformationTooltip: React.FC<InformationTooltipProps> = ({\n body,\n iconName = 'info',\n title,\n}) => {\n return (\n <Tooltip\n enterTouchDelay={500}\n title={\n <Stack gap={2} p={12} sx={{ textOverflow: 'none' }}>\n <Text bold={true} variant=\"Body\">\n {title}\n </Text>\n <Text sx={{ whiteSpace: 'unset' }} variant=\"Small\">\n {body}\n </Text>\n </Stack>\n }\n >\n <IconButton\n aria-label={title}\n sx={{\n minHeight: 0,\n minWidth: 0,\n p: 0,\n }}\n >\n <Icon\n name={iconName}\n sx={{ color: 'action.active', fontSize: 16 }}\n weight={IconWeight.Dark}\n />\n </IconButton>\n </Tooltip>\n )\n}\n\nexport default InformationTooltip\n","import React from 'react'\n\nimport ListItem from '@mui/material/ListItem'\nimport ListItemButton from '@mui/material/ListItemButton'\nimport { SxProps } from '@mui/material/styles'\n\nimport { useEvent } from '../context'\n\ninterface ListItemWrapperProps {\n clickEventName?: string\n onClick?: () => void\n sx?: SxProps\n}\n\nexport const ListItemWrapper: React.FC<React.PropsWithChildren<ListItemWrapperProps>> = ({\n children,\n clickEventName,\n onClick,\n sx = {},\n}) => {\n const { onEvent } = useEvent()\n\n if (onClick) {\n return (\n <ListItem sx={{ bgcolor: 'background.paper', ...sx }}>\n <ListItemButton\n onClick={() => {\n if (clickEventName) {\n onEvent(clickEventName)\n }\n onClick()\n }}\n >\n {children}\n </ListItemButton>\n </ListItem>\n )\n } else {\n return (\n <ListItem\n disableGutters={false}\n disablePadding={false}\n sx={{ bgcolor: 'background.paper', ...sx }}\n >\n {children}\n </ListItem>\n )\n }\n}\n","import React from 'react'\nimport { GlobalDataContext, useCashflowStore } from '../../common'\n\nexport const useCashflowUiStore = () => {\n const context = React.useContext(GlobalDataContext)\n\n if (!context) {\n throw new Error('useCashflowUiStore() must be used within the GlobalDataContext')\n }\n\n return useCashflowStore().uiStore\n}\n","import { observer } from 'mobx-react-lite'\n\nimport Box from '@mui/material/Box'\n\nimport { Text } from '@kyper/mui'\nimport { useGlobalCopyStore } from '../../common'\nimport { CurrencyText } from '../../common/components/CurrencyText'\n\ninterface RemainingCashProps {\n remaining: number\n}\n\nconst RemainingCash: React.FC<RemainingCashProps> = ({ remaining }) => {\n const { cashflow: customCopy } = useGlobalCopyStore()\n\n const getRemainingCashColor = () => {\n if (remaining < 0) {\n return 'error.main'\n }\n if (remaining > 0) {\n return 'success.main'\n }\n return 'warning.main'\n }\n\n return (\n <>\n <Box\n sx={{\n borderRadius: '1px',\n backgroundColor: getRemainingCashColor(),\n height: 6,\n width: 6,\n }}\n />\n <Text bold={true} sx={{ flexGrow: 1, fontSize: 12 }}>\n {customCopy.remaining_cash}\n </Text>\n <CurrencyText amount={remaining} bold={true} sx={{ fontSize: 12 }} />\n </>\n )\n}\n\nexport default observer(RemainingCash)\n","import React from 'react'\nimport { observer } from 'mobx-react-lite'\n\nimport Box from '@mui/material/Box'\nimport Button from '@mui/material/Button'\nimport Divider from '@mui/material/Divider'\nimport Stack from '@mui/material/Stack'\nimport useTheme from '@mui/material/styles/useTheme'\n\nimport { Icon, P, Text } from '@kyper/mui'\n\nimport {\n buildDynamicCopy,\n InformationTooltip,\n useAccountStore,\n useGlobalCopyStore,\n useGlobalUiStore,\n useRecurringActivityStore,\n useUserStore,\n useWidgetContainerProvider,\n} from '../../common'\n\nimport { useCashflowUiStore } from '../context/hooks'\nimport { CurrencyText } from '../../common/components/CurrencyText'\nimport RemainingCash from './RemainingCash'\n\ninterface CashflowWidgetContentProps {\n onAddIncomeClick?: () => void\n}\n\nconst CashflowWidgetContent: React.FC<CashflowWidgetContentProps> = ({ onAddIncomeClick }) => {\n const theme = useTheme()\n const { availableWidth } = useWidgetContainerProvider()\n\n const { cashAccounts, cashBalance } = useAccountStore()\n const { selectedAccountGuids } = useGlobalUiStore()\n const { cashflow: customCopy } = useGlobalCopyStore()\n const { userProfile } = useUserStore()\n const {\n daysUntilNextIncome,\n expensesTilNextIncome,\n selectedCashAccounts,\n setNextIncome,\n setSelectedCashAccounts,\n setUpcomingExpenses,\n } = useCashflowUiStore()\n const { nextIncomeActivity, upcomingExpenses } = useRecurringActivityStore()\n\n React.useEffect(() => {\n setSelectedCashAccounts(\n cashAccounts.filter((account) => selectedAccountGuids.includes(account.guid)),\n )\n }, [cashAccounts, selectedAccountGuids])\n\n React.useEffect(() => {\n if (nextIncomeActivity) {\n setNextIncome(nextIncomeActivity)\n }\n setUpcomingExpenses(upcomingExpenses)\n }, [nextIncomeActivity, upcomingExpenses])\n\n const filteredCashBalance = React.useMemo(\n () =>\n cashAccounts\n .filter((account) => selectedAccountGuids.includes(account.guid))\n .reduce((total, account) => total + (account?.balance || 0), 0),\n [selectedAccountGuids, upcomingExpenses],\n )\n\n const filteredExpenseTotal = React.useMemo(\n () =>\n expensesTilNextIncome\n .filter((expense) => selectedAccountGuids.includes(expense.accountGuid || ''))\n .reduce((acc, curr) => acc + curr.amount, 0),\n [selectedAccountGuids, expensesTilNextIncome],\n )\n\n const availableToSpend = React.useMemo(\n () => filteredCashBalance - filteredExpenseTotal,\n [filteredCashBalance, filteredExpenseTotal],\n )\n\n const hasCompletedCashflowOnboarding =\n userProfile?.has_completed_cash_flow_onboarding && !!onAddIncomeClick\n\n return (\n <Box className=\"mx-cashflow\" pl={16} pr={16} pt={16}>\n {availableWidth > 610 ? (\n <Stack\n border={`1px solid ${theme.palette.border.light}`}\n borderRadius={1}\n direction=\"row\"\n justifyContent=\"space-between\"\n px={24}\n >\n <Stack pb={14} pt={12}>\n <CurrencyText amount={filteredCashBalance} variant=\"H2\" />\n <P variant=\"XSmall\" whiteSpace=\"nowrap\">\n {\n buildDynamicCopy(\n customCopy.total_cash_accounts,\n selectedCashAccounts.length,\n ) as string\n }\n </P>\n </Stack>\n\n <Stack pt={18}>\n <Icon name=\"remove\" />\n </Stack>\n\n <Stack pb={14} pt={12}>\n <CurrencyText amount={filteredExpenseTotal} variant=\"H2\" />\n <P variant=\"XSmall\" whiteSpace=\"nowrap\">\n {buildDynamicCopy(customCopy.expenses_due, expensesTilNextIncome.length) as string}\n </P>\n </Stack>\n\n <Stack pt={18}>\n <Icon name=\"equals\" />\n </Stack>\n\n <Stack pb={14} pr={24} pt={12}>\n <CurrencyText amount={availableToSpend} variant=\"H2\" />\n <Stack alignItems=\"center\" direction=\"row\" gap={8}>\n <P variant=\"XSmall\" whiteSpace=\"nowrap\">\n {customCopy.available_to_spend}\n </P>\n <InformationTooltip body={customCopy.tooltip_body} title={customCopy.tooltip_title} />\n </Stack>\n </Stack>\n\n <Stack borderLeft={`1px solid ${theme.palette.border.light}`} pb={12} pl={24} pt={12}>\n {!hasCompletedCashflowOnboarding ? (\n <Button\n onClick={onAddIncomeClick}\n startIcon={<Icon name=\"add\" />}\n sx={{ fontSize: 13, lineHeight: 'initial' }}\n >\n {customCopy.add_income}\n </Button>\n ) : (\n <>\n <Text variant=\"H2\">\n {buildDynamicCopy(customCopy.days, daysUntilNextIncome) as string}\n </Text>\n <P variant=\"XSmall\" whiteSpace=\"nowrap\">\n {customCopy.next_paycheck}\n </P>\n </>\n )}\n </Stack>\n </Stack>\n ) : (\n <Stack border={`1px solid ${theme.palette.border.light}`} borderRadius={1}>\n <Stack direction=\"row\" justifyContent=\"space-between\" p={16}>\n <Text variant=\"Small\">\n {\n buildDynamicCopy(\n customCopy.total_cash_accounts,\n selectedCashAccounts.length,\n ) as string\n }\n </Text>\n <CurrencyText amount={cashBalance} bold={true} variant=\"XSmall\" />\n </Stack>\n\n <Divider />\n\n <Stack direction=\"row\" justifyContent=\"space-between\" p={16}>\n <Text variant=\"Small\">\n {buildDynamicCopy(customCopy.expenses_due, expensesTilNextIncome.length) as string}\n </Text>\n <CurrencyText amount={filteredExpenseTotal} bold={true} symbol=\"-\" variant=\"XSmall\" />\n </Stack>\n\n <Divider />\n\n <Stack\n alignItems=\"center\"\n bgcolor=\"background.default\"\n direction=\"row\"\n gap={8}\n height={48}\n justifyContent=\"space-between\"\n px={16}\n sx={{ borderBottomLeftRadius: 4, borderBottomRightRadius: 4 }}\n >\n <RemainingCash remaining={availableToSpend} />\n </Stack>\n <Divider />\n\n {!hasCompletedCashflowOnboarding ? (\n <Stack\n alignItems=\"center\"\n direction=\"row\"\n justifyContent=\"space-between\"\n pl={16}\n pr={2}\n py={2}\n >\n <Text variant=\"Small\">{customCopy.next_paycheck}</Text>\n <Button\n onClick={onAddIncomeClick}\n startIcon={<Icon name=\"add\" />}\n sx={{ fontSize: 13 }}\n >\n {customCopy.add_income}\n </Button>\n </Stack>\n ) : (\n <Stack direction=\"row\" justifyContent=\"space-between\" p={16}>\n <Text variant=\"Small\">{customCopy.next_paycheck}</Text>\n <Text bold={true} variant=\"XSmall\">\n {buildDynamicCopy(customCopy.days, daysUntilNextIncome) as string}\n </Text>\n </Stack>\n )}\n </Stack>\n )}\n </Box>\n )\n}\n\nexport default observer(CashflowWidgetContent)\n","import React from 'react'\nimport { observer } from 'mobx-react-lite'\n\nimport { MiniWidgetContainer, MiniWidgetProps, useGlobalCopyStore } from '../common'\n\nimport CashflowWidgetContent from './components/CashflowWidgetContent'\n\nconst CashflowMiniWidget: React.FC<MiniWidgetProps> = ({ onPrimaryCtaClick, sx = {} }) => {\n const { cashflow: customCopy } = useGlobalCopyStore()\n\n return (\n <MiniWidgetContainer\n className=\"mx-exp-cashflow-miniwidget\"\n onPrimaryCtaClick={onPrimaryCtaClick}\n primaryCtaLabel={customCopy.primary_cta}\n subTitle={customCopy.sub_title}\n sx={sx}\n title={customCopy.title}\n >\n <CashflowWidgetContent onAddIncomeClick={onPrimaryCtaClick} />\n </MiniWidgetContainer>\n )\n}\n\nexport default observer(CashflowMiniWidget)\n","export enum TopActions {\n Category,\n Date,\n Memo,\n Tags,\n}\n\nexport enum BottomActions {\n SplitTransaction,\n HideTransaction,\n MerchantLogo,\n}\n\nexport const DEFAULT_TOP_ACTIONS = [\n TopActions.Category,\n TopActions.Date,\n TopActions.Memo,\n TopActions.Tags,\n] as TopActions[]\n\nexport const DEFAULT_BOTTOM_ACTIONS = [\n BottomActions.SplitTransaction,\n BottomActions.HideTransaction,\n BottomActions.MerchantLogo,\n] as BottomActions[]\n\nexport const CHEVRON_ICON_SIZE = 20\nexport const ICON_SIZE = 28\n","export const ON_CLICK_EVENTS = {\n ON_TRANSACTION_CATEGORY_CLICK: 'onTransactionCategoryClick',\n ON_TRANSACTION_CATEGORY_CHANGED: 'onTransactionCategoryChanged',\n ON_TRANSACTION_MANUAL_ADD_CLICK: 'onTransactionManualAddClick',\n ON_TRANSACTION_MANUAL_ADD_ADDED: 'onTransactionManualAddAdded',\n ON_TRANSACTION_DATE_CHANGED: 'onTransactionDateChanged',\n ON_TRANSACTION_DATE_CLICK: 'onTransactionDateClick',\n ON_TRANSACTION_DELETE_CANCEL: 'onTransactionDeleteCancel',\n ON_TRANSACTION_DELETE_CLICK: 'onTransactionDeleteClick',\n ON_TRANSACTION_DELETE_DELETED: 'onTransactionDeleted',\n ON_TRANSACTION_DELETE_LOGO_CANCEL: 'onTransactionDeleteLogoCancel',\n ON_TRANSACTION_DELETE_LOGO_CLICK: 'onTransactionDeleteLogoClick',\n ON_TRANSACTION_DELETE_LOGO_DELETED: 'onTransactionDeletedLogo',\n ON_TRANSACTION_DESCRIPTION_EDIT_CLICK: 'onTransactionDescriptionEditClick',\n ON_TRANSACTION_DESCRIPTION_SAVE_CLICK: 'onTransactionDescriptionSaveClick',\n ON_TRANSACTION_EXPORT_CSV_CLICK: 'onTransactionExportCsvClick',\n ON_TRANSACTION_HIDDEN: 'onTransactionHidden',\n ON_TRANSACTION_HIDE_CLICK: 'onTransactionHideClick',\n ON_TRANSACTION_HIDE_CANCEL_CLICK: 'onTransactionHideCancelClick',\n ON_TRANSACTION_LIST_ITEM_CLICK: 'onTransactionListItemClick',\n ON_TRANSACTION_MEMO_CHANGED: 'onTransactionMemoChanged',\n ON_TRANSACTION_MEMO_CLICK: 'onTransactionMemoClick',\n ON_TRANSACTION_SPLIT_ADD_CLICK: 'onTransactionSplitAddClick',\n ON_TRANSACTION_SPLIT_CANCEL_CLICK: 'onTransactionSplitCancelClick',\n ON_TRANSACTION_SPLIT_CATEGORY_CLICK: 'onTransactionSplitCategoryClick',\n ON_TRANSACTION_SPLIT_CLICK: 'onTransactionSplitClick',\n ON_TRANSACTION_SPLIT_DELETE_CLICK: 'onTransactionSplitDeleteClick',\n ON_TRANSACTION_SPLIT_SAVE_CLICK: 'onTransactionSplitSaveClick',\n ON_TRANSACTION_TAGS_CHANGED: 'onTransactionTagsChanged',\n ON_TRANSACTION_TAGS_CLICK: 'onTransactionTagsClick',\n ON_TRANSACTION_TAGS_TAG_ADD_CANCEL_CLICK: 'onTransactionTagsTagAddCancelClick',\n ON_TRANSACTION_TAGS_TAG_ADD_CLICK: 'onTransactionTagsTagAddClick',\n ON_TRANSACTION_TAGS_TAG_ADDED: 'onTransactionTagsTagAdded',\n ON_TRANSACTION_TAGS_TAG_DELETE_CLICK: 'onTransactionTagsTagDeleteClick',\n ON_TRANSACTION_TAGS_TAG_DELETE_CANCEL_CLICK: 'onTransactionTagsTagDeleteCancelClick',\n ON_TRANSACTION_TAGS_TAG_DELETED: 'onTransactionTagsTagDeleted',\n ON_TRANSACTION_TAGS_TAG_EDIT_CLICK: 'onTransactionTagsTagEditClick',\n ON_TRANSACTION_TAGS_TAG_EDIT_SAVED: 'onTransactionTagsTagEditSavedClick',\n ON_TRANSACTION_TOGGLE_FLAG_CLICK: 'onTransactionToggleFlagClick',\n ON_TRANSACTION_UNHIDDEN: 'onTransactionUnHidden',\n ON_TRANSACTION_UNHIDE_CLICK: 'onTransactionUnHideClick',\n ON_TRANSACTION_UNHIDE_CANCEL_CLICK: 'onTransactionUnHideCancelClick',\n ON_TRANSACTION_UNSPLIT: 'onTransactionUnsplit',\n ON_TRANSACTION_UNSPLIT_CANCEL: 'onTransactionUnsplitCancel',\n}\n","import { ON_CLICK_EVENTS } from './OnClickEvents'\n\nexport const ANALYTICS_ACTIONS = {\n ADD: 'Add',\n ADD_CATEGORY: 'Add Category',\n CHANGE_CATEGORY: 'Change Category',\n CHANGE_DATE: 'Change Date',\n CLOSE: 'Close',\n DELETE: 'Delete',\n EDIT: 'Edit',\n HIDE: 'Hide',\n SAVE: 'Save',\n SPLIT: 'Split',\n SELECT: 'Select',\n UNHIDE: 'Unhide',\n UNSPLIT: 'Unsplit',\n}\n\nexport const ANALYTICS_CATEGORIES = {\n TRANSACTION_DETAILS: 'Transaction Details',\n TRANSACTIONS_LIST: 'Transactions List',\n TRANSACTIONS_WIDGET: 'Transactions Widget',\n}\n\nexport const ANALYTICS_LABELS = {\n ADD_TRANSACTION: 'Manual Transaction',\n CATEGORY: 'Category',\n DATE: 'Date',\n DELETE_MERCHANT_LOGO: 'Merchant Logo',\n DELETE_TRANSACTION: 'Delete Transaction',\n DESCRIPTION: 'Description',\n EXPORT_CSV: 'Export CSV',\n FLAG: 'Flag',\n HIDE_TRANSACTION: 'Hide Transaction',\n MEMO: 'Memo',\n SPLITS: 'Split Transactions',\n TAGS: 'Tags',\n TAG_ADD: 'Add Tag',\n TAG_DELETE: 'Delete Tag',\n TAG_EDIT: 'Edit Tag',\n TRANSACTION: 'Transaction',\n TRANSACTIONS_LIST: 'Transactions List',\n UNHIDE_TRANSACTION: 'Unhide Transaction',\n}\n\nexport const ANALYTICS_EVENTS = {\n // splits\n [ON_CLICK_EVENTS.ON_TRANSACTION_SPLIT_CLICK]: {\n action: ANALYTICS_ACTIONS.SELECT,\n category: ANALYTICS_CATEGORIES.TRANSACTION_DETAILS,\n label: ANALYTICS_LABELS.SPLITS,\n },\n [ON_CLICK_EVENTS.ON_TRANSACTION_SPLIT_CATEGORY_CLICK]: {\n action: ANALYTICS_ACTIONS.ADD_CATEGORY,\n category: ANALYTICS_CATEGORIES.TRANSACTION_DETAILS,\n label: ANALYTICS_LABELS.SPLITS,\n },\n [ON_CLICK_EVENTS.ON_TRANSACTION_SPLIT_DELETE_CLICK]: {\n action: ANALYTICS_ACTIONS.DELETE,\n category: ANALYTICS_CATEGORIES.TRANSACTION_DETAILS,\n label: ANALYTICS_LABELS.SPLITS,\n },\n [ON_CLICK_EVENTS.ON_TRANSACTION_SPLIT_SAVE_CLICK]: {\n action: ANALYTICS_ACTIONS.SPLIT,\n category: ANALYTICS_CATEGORIES.TRANSACTION_DETAILS,\n label: ANALYTICS_LABELS.SPLITS,\n },\n [ON_CLICK_EVENTS.ON_TRANSACTION_UNSPLIT]: {\n action: ANALYTICS_ACTIONS.UNSPLIT,\n category: ANALYTICS_CATEGORIES.TRANSACTION_DETAILS,\n label: ANALYTICS_LABELS.SPLITS,\n },\n\n // category\n [ON_CLICK_EVENTS.ON_TRANSACTION_CATEGORY_CLICK]: {\n action: ANALYTICS_ACTIONS.SELECT,\n category: ANALYTICS_CATEGORIES.TRANSACTIONS_LIST,\n label: ANALYTICS_LABELS.CATEGORY,\n },\n [ON_CLICK_EVENTS.ON_TRANSACTION_CATEGORY_CHANGED]: {\n action: ANALYTICS_ACTIONS.CHANGE_CATEGORY,\n category: ANALYTICS_CATEGORIES.TRANSACTION_DETAILS,\n label: ANALYTICS_LABELS.CATEGORY,\n },\n\n // date\n [ON_CLICK_EVENTS.ON_TRANSACTION_DATE_CHANGED]: {\n action: ANALYTICS_ACTIONS.SAVE,\n category: ANALYTICS_CATEGORIES.TRANSACTION_DETAILS,\n label: ANALYTICS_LABELS.DATE,\n },\n [ON_CLICK_EVENTS.ON_TRANSACTION_DATE_CLICK]: {\n action: ANALYTICS_ACTIONS.SELECT,\n category: ANALYTICS_CATEGORIES.TRANSACTION_DETAILS,\n label: ANALYTICS_LABELS.DATE,\n },\n\n // merchant logo\n [ON_CLICK_EVENTS.ON_TRANSACTION_DELETE_LOGO_CANCEL]: {\n action: ANALYTICS_ACTIONS.CLOSE,\n category: ANALYTICS_CATEGORIES.TRANSACTION_DETAILS,\n label: ANALYTICS_LABELS.DELETE_MERCHANT_LOGO,\n },\n [ON_CLICK_EVENTS.ON_TRANSACTION_DELETE_LOGO_CLICK]: {\n action: ANALYTICS_ACTIONS.SELECT,\n category: ANALYTICS_CATEGORIES.TRANSACTION_DETAILS,\n label: ANALYTICS_LABELS.DELETE_MERCHANT_LOGO,\n },\n [ON_CLICK_EVENTS.ON_TRANSACTION_DELETE_LOGO_DELETED]: {\n action: ANALYTICS_ACTIONS.DELETE,\n category: ANALYTICS_CATEGORIES.TRANSACTION_DETAILS,\n label: ANALYTICS_LABELS.DELETE_MERCHANT_LOGO,\n },\n\n // description\n [ON_CLICK_EVENTS.ON_TRANSACTION_DESCRIPTION_EDIT_CLICK]: {\n action: ANALYTICS_ACTIONS.EDIT,\n category: ANALYTICS_CATEGORIES.TRANSACTION_DETAILS,\n label: ANALYTICS_LABELS.DESCRIPTION,\n },\n [ON_CLICK_EVENTS.ON_TRANSACTION_DESCRIPTION_SAVE_CLICK]: {\n action: ANALYTICS_ACTIONS.SAVE,\n category: ANALYTICS_CATEGORIES.TRANSACTION_DETAILS,\n label: ANALYTICS_LABELS.DESCRIPTION,\n },\n\n // hide transactions\n [ON_CLICK_EVENTS.ON_TRANSACTION_HIDDEN]: {\n action: ANALYTICS_ACTIONS.SAVE,\n category: ANALYTICS_CATEGORIES.TRANSACTION_DETAILS,\n label: ANALYTICS_LABELS.HIDE_TRANSACTION,\n },\n [ON_CLICK_EVENTS.ON_TRANSACTION_HIDE_CLICK]: {\n action: ANALYTICS_ACTIONS.SELECT,\n category: ANALYTICS_CATEGORIES.TRANSACTION_DETAILS,\n label: ANALYTICS_LABELS.HIDE_TRANSACTION,\n },\n [ON_CLICK_EVENTS.ON_TRANSACTION_HIDE_CANCEL_CLICK]: {\n action: ANALYTICS_ACTIONS.CLOSE,\n category: ANALYTICS_CATEGORIES.TRANSACTION_DETAILS,\n label: ANALYTICS_LABELS.HIDE_TRANSACTION,\n },\n\n // transaction list\n [ON_CLICK_EVENTS.ON_TRANSACTION_LIST_ITEM_CLICK]: {\n action: ANALYTICS_ACTIONS.SELECT,\n category: ANALYTICS_CATEGORIES.TRANSACTIONS_LIST,\n label: ANALYTICS_LABELS.TRANSACTION,\n },\n\n // memo\n [ON_CLICK_EVENTS.ON_TRANSACTION_MEMO_CHANGED]: {\n action: ANALYTICS_ACTIONS.SAVE,\n category: ANALYTICS_CATEGORIES.TRANSACTION_DETAILS,\n label: ANALYTICS_LABELS.MEMO,\n },\n [ON_CLICK_EVENTS.ON_TRANSACTION_MEMO_CLICK]: {\n action: ANALYTICS_ACTIONS.SELECT,\n category: ANALYTICS_CATEGORIES.TRANSACTION_DETAILS,\n label: ANALYTICS_LABELS.MEMO,\n },\n\n // tags\n [ON_CLICK_EVENTS.ON_TRANSACTION_TAGS_CHANGED]: {\n action: ANALYTICS_ACTIONS.SAVE,\n category: ANALYTICS_CATEGORIES.TRANSACTION_DETAILS,\n label: ANALYTICS_LABELS.TAGS,\n },\n [ON_CLICK_EVENTS.ON_TRANSACTION_TAGS_CLICK]: {\n action: ANALYTICS_ACTIONS.SELECT,\n category: ANALYTICS_CATEGORIES.TRANSACTION_DETAILS,\n label: ANALYTICS_LABELS.TAGS,\n },\n [ON_CLICK_EVENTS.ON_TRANSACTION_TAGS_TAG_ADD_CANCEL_CLICK]: {\n action: ANALYTICS_ACTIONS.CLOSE,\n category: ANALYTICS_CATEGORIES.TRANSACTION_DETAILS,\n label: ANALYTICS_LABELS.TAGS,\n },\n [ON_CLICK_EVENTS.ON_TRANSACTION_TAGS_TAG_ADD_CLICK]: {\n action: ANALYTICS_ACTIONS.ADD,\n category: ANALYTICS_CATEGORIES.TRANSACTION_DETAILS,\n label: ANALYTICS_LABELS.TAG_ADD,\n },\n [ON_CLICK_EVENTS.ON_TRANSACTION_TAGS_TAG_ADDED]: {\n action: ANALYTICS_ACTIONS.SAVE,\n category: ANALYTICS_CATEGORIES.TRANSACTION_DETAILS,\n label: ANALYTICS_LABELS.TAG_ADD,\n },\n [ON_CLICK_EVENTS.ON_TRANSACTION_TAGS_TAG_DELETE_CLICK]: {\n action: ANALYTICS_ACTIONS.SELECT,\n category: ANALYTICS_CATEGORIES.TRANSACTION_DETAILS,\n label: ANALYTICS_LABELS.TAG_DELETE,\n },\n [ON_CLICK_EVENTS.ON_TRANSACTION_TAGS_TAG_DELETE_CANCEL_CLICK]: {\n action: ANALYTICS_ACTIONS.CLOSE,\n category: ANALYTICS_CATEGORIES.TRANSACTION_DETAILS,\n label: ANALYTICS_LABELS.TAG_DELETE,\n },\n [ON_CLICK_EVENTS.ON_TRANSACTION_TAGS_TAG_DELETED]: {\n action: ANALYTICS_ACTIONS.SAVE,\n category: ANALYTICS_CATEGORIES.TRANSACTION_DETAILS,\n label: ANALYTICS_LABELS.TAG_DELETE,\n },\n [ON_CLICK_EVENTS.ON_TRANSACTION_TAGS_TAG_EDIT_CLICK]: {\n action: ANALYTICS_ACTIONS.EDIT,\n category: ANALYTICS_CATEGORIES.TRANSACTION_DETAILS,\n label: ANALYTICS_LABELS.TAG_EDIT,\n },\n [ON_CLICK_EVENTS.ON_TRANSACTION_TAGS_TAG_EDIT_SAVED]: {\n action: ANALYTICS_ACTIONS.SAVE,\n category: ANALYTICS_CATEGORIES.TRANSACTION_DETAILS,\n label: ANALYTICS_LABELS.TAG_EDIT,\n },\n\n // flag\n [ON_CLICK_EVENTS.ON_TRANSACTION_TOGGLE_FLAG_CLICK]: {\n action: ANALYTICS_ACTIONS.SELECT,\n category: ANALYTICS_CATEGORIES.TRANSACTION_DETAILS,\n label: ANALYTICS_LABELS.FLAG,\n },\n\n // hide\n [ON_CLICK_EVENTS.ON_TRANSACTION_UNHIDDEN]: {\n action: ANALYTICS_ACTIONS.SAVE,\n category: ANALYTICS_CATEGORIES.TRANSACTION_DETAILS,\n label: ANALYTICS_LABELS.UNHIDE_TRANSACTION,\n },\n [ON_CLICK_EVENTS.ON_TRANSACTION_UNHIDE_CLICK]: {\n action: ANALYTICS_ACTIONS.SELECT,\n category: ANALYTICS_CATEGORIES.TRANSACTION_DETAILS,\n label: ANALYTICS_LABELS.UNHIDE_TRANSACTION,\n },\n [ON_CLICK_EVENTS.ON_TRANSACTION_UNHIDE_CANCEL_CLICK]: {\n action: ANALYTICS_ACTIONS.CLOSE,\n category: ANALYTICS_CATEGORIES.TRANSACTION_DETAILS,\n label: ANALYTICS_LABELS.UNHIDE_TRANSACTION,\n },\n\n // export CSV\n [ON_CLICK_EVENTS.ON_TRANSACTION_EXPORT_CSV_CLICK]: {\n action: ANALYTICS_ACTIONS.SELECT,\n category: ANALYTICS_CATEGORIES.TRANSACTIONS_WIDGET,\n label: ANALYTICS_LABELS.EXPORT_CSV,\n },\n\n // add transaction\n [ON_CLICK_EVENTS.ON_TRANSACTION_MANUAL_ADD_CLICK]: {\n action: ANALYTICS_ACTIONS.SELECT,\n category: ANALYTICS_CATEGORIES.TRANSACTIONS_WIDGET,\n label: ANALYTICS_LABELS.ADD_TRANSACTION,\n },\n [ON_CLICK_EVENTS.ON_TRANSACTION_MANUAL_ADD_ADDED]: {\n action: ANALYTICS_ACTIONS.ADD,\n category: ANALYTICS_CATEGORIES.TRANSACTIONS_WIDGET,\n label: ANALYTICS_LABELS.ADD_TRANSACTION,\n },\n [ON_CLICK_EVENTS.ON_TRANSACTION_DELETE_CLICK]: {\n action: ANALYTICS_ACTIONS.SELECT,\n category: ANALYTICS_CATEGORIES.TRANSACTIONS_WIDGET,\n label: ANALYTICS_LABELS.DELETE_TRANSACTION,\n },\n [ON_CLICK_EVENTS.ON_TRANSACTION_DELETE_CANCEL]: {\n action: ANALYTICS_ACTIONS.CLOSE,\n category: ANALYTICS_CATEGORIES.TRANSACTIONS_WIDGET,\n label: ANALYTICS_LABELS.DELETE_TRANSACTION,\n },\n [ON_CLICK_EVENTS.ON_TRANSACTION_DELETE_DELETED]: {\n action: ANALYTICS_ACTIONS.DELETE,\n category: ANALYTICS_CATEGORIES.TRANSACTIONS_WIDGET,\n label: ANALYTICS_LABELS.DELETE_TRANSACTION,\n },\n}\n","import { RecurrenceTypes } from '../constants'\n\nexport enum ActivityType {\n Expense = 0,\n Income = 1,\n}\n\nexport enum ActivityStatus {\n Paid = 0,\n Missed = 1,\n Upcoming = 2,\n}\n\nexport interface Activity {\n accountGuid?: string\n activityStatus: ActivityStatus\n activityType: ActivityType\n amount: number\n categoryGuid?: string\n expectedDate: Date\n occurredOnDate?: Date\n name: string\n institution?: string\n institutionGuid?: string\n merchantGuid?: string\n recurrenceType: RecurrenceTypes\n recurrenceDay?: number\n scheduledPaymentGuid?: string\n sequenceGuid?: string\n transactionGuid?: string\n}\n","export interface Goal {\n guid: string\n account_guid: string\n account_is_excluded_from_debts: boolean\n amount: number\n budget_guid: string\n completed_at?: number\n created_at: number\n created_by: number\n current_amount: number\n goal_type: GoalType\n has_been_spent: boolean\n initial_amount: number\n interest_rate?: number\n is_complete: boolean\n is_spendable: boolean\n meta_type: MetaType\n metadata?: string\n monthly_payment?: number\n name: string\n payment_due_at?: number\n position: number\n projected_to_complete_at?: number\n revision: number\n track_type?: TrackType\n updated_at: number\n user_guid: string\n}\n\nexport enum TrackType {\n DEBT_TRACK = 1,\n SAVINGS_TRACK = 2,\n RETIREMENT_TRACK = 3,\n EMERGENCY_FUND_TRACK = 4,\n}\n\nexport enum GoalType {\n SAVE_AMOUNT = 1,\n KEEP_BALANCE_BELOW = 2,\n KEEP_BALANCE_ABOVE = 3,\n ACTION = 4,\n}\n\nexport enum MetaType {\n AUTOMOBILE = 1,\n COLLEGE = 2,\n HOUSE = 3,\n RECREATIONAL_VEHICLE = 4,\n VACATION = 5,\n ELECTRONIC = 6,\n OTHER = 7,\n RETIREMENT = 8,\n EMERGENCY_FUND = 9,\n SETUP_BUDGETS = 10,\n START_MONEY_MANAGEMENT = 11,\n CREDIT_CARD = 12,\n LINE_OF_CREDIT = 13,\n LOANS = 14,\n}\n","export interface Transaction {\n guid: string\n account_guid: string\n amount: number\n attachment_guid?: string | null\n category_guid?: string\n check_number?: string | null\n currency_code: string | null\n date: number\n description: string\n duplicate: boolean\n external_guid?: string | null\n feed_attachment_guid?: string | null\n feed_description: string\n feed_localized_description?: string | null\n feed_posted_date?: number | null\n feed_status: TransactionStatus | null\n feed_transaction_date: number | null\n flags?: number | null\n has_been_split: boolean\n has_been_viewed: boolean\n is_cleared: boolean\n is_flagged: boolean\n is_hidden: boolean\n is_international?: boolean | null\n is_manual: boolean\n is_personal: boolean\n is_reimbursable: boolean\n is_subscription: boolean\n is_void: boolean\n localized_description?: string | null\n localized_memo?: string | null\n memo?: string | null\n metadata?: string | null\n merchant_guid?: string | null\n parent_guid?: string | null\n posted_date?: number | null\n reference?: string | null\n revision: number\n scheduled_payment_guid?: string | null\n top_level_category_guid?: string\n transaction_type: TransactionType\n user_date?: number | null\n user_guid: string\n user_transaction_rule_guid?: string | null\n is_duplicate: boolean\n tags: string[]\n feed_transacted_at: number | null\n\n // Detailed Transaction fields\n account?: string\n accountIsClosed?: boolean\n accountIsHidden?: boolean\n category?: string\n isIncome?: boolean\n isPending?: boolean\n number?: string\n payee?: string\n}\n\nexport enum TransactionType {\n CREDIT = 1,\n DEBIT = 2,\n}\n\nexport enum TransactionStatus {\n POSTED = 1,\n PENDING = 2,\n}\n\nexport interface Tag {\n guid: string\n is_default_tag: boolean\n name: string\n user_guid: string\n}\n\nexport interface Tagging {\n guid: string\n user_guid: string\n tag_guid: string\n transaction_guid: string\n}\n\nexport interface TransactionRule {\n guid: string\n user_guid: string\n category_guid: string\n match_description: string\n description: string\n}\n","import type { Transaction } from '../../common/types'\nimport { TransactionStatus, TransactionType } from '../../common/types'\n\nexport const DEFAULT_TRANSACTION = {\n account_guid: '',\n amount: 0,\n currency_code: '',\n date: 0,\n description: '',\n duplicate: false,\n feed_description: '',\n feed_status: TransactionStatus.POSTED,\n feed_transaction_date: 0,\n has_been_split: false,\n has_been_viewed: false,\n is_cleared: false,\n is_flagged: false,\n is_hidden: false,\n is_manual: true,\n is_personal: true,\n is_reimbursable: false,\n is_subscription: false,\n is_void: false,\n revision: 1,\n transaction_type: TransactionType.DEBIT,\n user_guid: '',\n is_duplicate: false,\n feed_transacted_at: 0,\n guid: '',\n memo: undefined,\n tags: [],\n} as Transaction\n","import React from 'react'\nimport { GlobalDataContext, useTransactionStore } from '../../common'\n\nexport const useTransactionsUiStore = () => {\n const context = React.useContext(GlobalDataContext)\n\n if (!context) {\n throw new Error('useTransactionsUiStore() must be used within the GlobalDataContext')\n }\n\n return useTransactionStore().uiStore\n}\n","import { format } from 'date-fns/format'\nimport { fromUnixTime } from 'date-fns/fromUnixTime'\n\nimport { CategoryGuidToName } from '../../common'\nimport type { Tag, Transaction } from '../../common'\n\n// TODO: Change the way formatting data is exported in order to handle localization\ntype FormattedTransaction = {\n Date: string\n Description: string\n 'Original Description': string\n Amount: string\n 'Parent Category': string\n Category: string\n Account: string\n Tags: string\n Memo: string\n}\n\nexport const exportTransactionsToCSV = (transactions: Transaction[], tags: Tag[]) => {\n const csvContent = structureCSVData(formatTransactions(transactions, tags))\n const uriEncodedData = encodeURIComponent(csvContent)\n const link = document.createElement('a')\n\n link.href = `data:attachment/csv;charset=utf-8,${uriEncodedData}`\n link.download = 'transactions.csv'\n\n document.body.appendChild(link)\n link.click()\n document.body.removeChild(link)\n}\n\n/**\n * Formats a list of transactions into a list that will be used when\n * downloaded to a CSV file.\n */\nconst formatTransactions = (transactions: Transaction[], tags: Tag[]) => {\n return transactions.map((transaction) => ({\n // TODO: Data format should be localized\n Date: format(fromUnixTime(transaction.date), 'MM/dd/yy'),\n Description: getDescription(transaction),\n 'Original Description': transaction.feed_description,\n Amount: `${transaction.amount}`,\n 'Parent Category': CategoryGuidToName[transaction.top_level_category_guid || ''],\n Category: transaction.category,\n Account: transaction.account,\n Tags: getTags(transaction, tags),\n Memo: transaction.memo,\n })) as FormattedTransaction[]\n}\n\n/**\n * Structures the CSV file data using the formatted transactions\n */\nconst structureCSVData = (formattedTransactions: FormattedTransaction[]) => {\n const csvHeader = Object.keys(formattedTransactions[0]).join(',').concat('\\r\\n')\n const csvRows = formattedTransactions\n .map((transaction) => Object.values(transaction).join(','))\n .join('\\r\\n')\n\n return csvHeader + csvRows\n}\n\n/**\n * Get the description for a transaction that will be used within the CSV copy.\n * We want to highlight that split transactions are a split as well as\n * hidden transactions are hidden.\n */\nconst getDescription = (transaction: Transaction) => {\n let description = transaction.parent_guid ? 'Split: ' : ''\n description += transaction.is_hidden ? '(Excluded) ' : ''\n description += transaction.description\n\n return description\n}\n\nconst getTags = (transaction: Transaction, tags: Tag[]) => {\n return transaction.tags\n .map((tagGuid) => {\n const tag = tags.filter((t) => t.guid === tagGuid)[0]\n\n return tag?.name ?? ''\n })\n .join(' ')\n}\n","import React from 'react'\nimport { observer } from 'mobx-react-lite'\n\nimport ListItemAvatar from '@mui/material/ListItemAvatar'\nimport ListItemText from '@mui/material/ListItemText'\nimport Stack from '@mui/material/Stack'\n\nimport { Icon, MerchantLogo, Text } from '@kyper/mui'\n\nimport {\n formatCurrency,\n ListItemWrapper,\n Transaction,\n TransactionType,\n useGlobalCopyStore,\n useTransactionStore,\n} from '../../../../common'\n\nimport { ON_CLICK_EVENTS } from '../../../constants/OnClickEvents'\nimport { useTransactionsUiStore } from '../../../context/hooks'\n\ninterface TransactionRowProps {\n onClick?: (guid: string) => void\n transaction: Transaction\n}\n\nconst TransactionRow: React.FC<TransactionRowProps> = ({ transaction, onClick }) => {\n const { associatedBeats } = useTransactionStore()\n const { transactions: copy } = useGlobalCopyStore()\n const { showInsights } = useTransactionsUiStore()\n\n const isCredit = transaction.transaction_type === TransactionType.CREDIT\n\n const beat = React.useMemo(() => {\n return associatedBeats.find((beat) => beat.associated_transaction_guid === transaction.guid)\n }, [associatedBeats, transaction])\n\n return (\n <ListItemWrapper\n clickEventName={ON_CLICK_EVENTS.ON_TRANSACTION_LIST_ITEM_CLICK}\n onClick={onClick ? () => onClick(transaction.guid) : undefined}\n >\n <ListItemAvatar>\n {transaction.parent_guid ? (\n <React.Fragment />\n ) : (\n <MerchantLogo\n categoryGuid={transaction.top_level_category_guid || ''}\n merchantGuid={transaction.merchant_guid || ''}\n />\n )}\n </ListItemAvatar>\n <ListItemText\n disableTypography={true}\n secondary={\n <Stack direction=\"row\" justifyContent=\"space-between\">\n <Stack alignItems=\"center\" direction=\"row\" gap={4}>\n {transaction.is_flagged && (\n <Icon fill={true} name=\"flag\" size={16} sx={{ color: 'warning.dark' }} />\n )}\n {transaction.is_hidden && <Icon name=\"visibility_off\" size={16} />}\n {transaction.has_been_split && <Icon name=\"call_split\" size={16} />}\n <Text variant=\"XSmall\">\n {transaction.has_been_split\n ? copy.split_transaction_category_label\n : transaction.category}\n </Text>\n </Stack>\n {beat && showInsights && (\n <Text bold={true} color=\"action.active\" variant=\"XSmall\">\n {beat.short_title}\n </Text>\n )}\n </Stack>\n }\n >\n <Stack direction=\"row\" justifyContent=\"space-between\">\n <Text bold={true} variant=\"Body\">\n {transaction.is_hidden && copy.hide_trnx_cancel_hidden_note}\n {transaction.payee || transaction.description || transaction.feed_description}\n </Text>\n <Text bold={true} color={isCredit ? 'success.main' : 'text.primary'} variant=\"Body\">\n {isCredit ? '+' : ''}\n {formatCurrency(transaction.amount, '0,0.00')}\n </Text>\n </Stack>\n </ListItemText>\n </ListItemWrapper>\n )\n}\n\nexport default observer(TransactionRow)\n","import React, { PropsWithChildren } from 'react'\n\nimport Box from '@mui/material/Box'\n\nimport { Text } from '@kyper/mui'\n\ninterface SubheaderRowProps {\n bgcolor?: string\n}\n\nconst SubheaderRow: React.FC<PropsWithChildren<SubheaderRowProps>> = ({\n bgcolor = 'background.default',\n children,\n}) => (\n <Box display=\"inline-block\" pb={4} pl={24} pt={4} sx={{ bgcolor, width: '100%' }}>\n <Text bold={true} variant=\"XSmall\">\n {children}\n </Text>\n </Box>\n)\n\nexport default SubheaderRow\n","import React from 'react'\nimport { observer } from 'mobx-react-lite'\n\nimport ReceiptOutlinedIcon from '@mui/icons-material/ReceiptOutlined'\n\nimport Stack from '@mui/material/Stack'\n\nimport { Text, useTokens } from '@kyper/mui'\n\nimport { useGlobalCopyStore } from '../../../../common'\n\ninterface ZeroStateProps {\n showIcon?: boolean\n showSubtitle?: boolean\n}\n\nconst ZeroState: React.FC<ZeroStateProps> = ({ showIcon = true, showSubtitle = true }) => {\n const tokens = useTokens()\n const { transactions: copy } = useGlobalCopyStore()\n\n return (\n <Stack alignItems=\"center\" gap={tokens.Spacing.Small} height=\"auto\" mt={tokens.Spacing.Large}>\n {showIcon && <ReceiptOutlinedIcon color=\"secondary\" sx={{ fontSize: 32 }} />}\n <Text bold={true} color=\"secondary\" variant=\"Small\">\n {copy.zero_state_no_transactions}\n </Text>\n {showSubtitle && (\n <Text color=\"secondary\" variant=\"XSmall\">\n {copy.zero_state_there_are_no_transactions}\n </Text>\n )}\n </Stack>\n )\n}\n\nexport default observer(ZeroState)\n","import { fromUnixTime } from 'date-fns/fromUnixTime'\nimport { isSameDay } from 'date-fns/isSameDay'\n\nimport { Transaction } from '../../common'\n\nexport const sortByDate = (a: Transaction, b: Transaction) => {\n return b.date - a.date\n}\n\nexport const shouldShowDate = (index: number, transactions: Transaction[]) => {\n const currentDate = fromUnixTime(transactions[index].date)\n const previousDate = fromUnixTime(transactions[index - 1]?.date)\n\n return !isSameDay(currentDate, previousDate)\n}\n\nexport const hasInsetBorder = (index: number, transactions: Transaction[]) => {\n const currentDate = fromUnixTime(transactions[index].date)\n const nextDate = fromUnixTime(transactions[index + 1]?.date)\n\n return isSameDay(currentDate, nextDate)\n}\n","import React from 'react'\nimport { observer } from 'mobx-react-lite'\nimport { useVirtualizer } from '@tanstack/react-virtual'\n\nimport Box from '@mui/material/Box'\nimport Divider from '@mui/material/Divider'\nimport List from '@mui/material/List'\n\nimport { ANALYTICS_EVENTS, Loader, useEvent } from '../../../common'\n\nimport { useTransactionsUiStore } from '../../context/hooks'\nimport { useTransactionStore } from '../../../common'\n\nimport SubheaderRow from '../../../common/components/SubheaderRow'\nimport TransactionRow from './transactionlist/TransactionRow'\nimport ZeroState from './transactionlist/ZeroState'\n\nimport { hasInsetBorder, shouldShowDate } from '../../utils/Transactions'\nimport { fromUnixToDayOfWeekAndDate } from '../../../common/utils/DateUtil'\n\nconst ROW_HEIGHT = 65\nconst DATE_ROW_HEIGHT = 34\n\nexport interface TransactionListProps {\n bgcolor?: string\n height?: number | string\n loader?: JSX.Element\n onClick?: (guid: string) => void\n showInsights?: boolean\n showLoader?: boolean\n width?: number | string\n zeroState?: JSX.Element\n}\n\nconst TransactionList: React.FC<TransactionListProps> = ({\n bgcolor,\n height = 'calc(100dvh - 36px)',\n loader = <Loader label=\"Loading\" size={40} />,\n onClick,\n showInsights = false,\n showLoader = false,\n width = '100%',\n zeroState = <ZeroState />,\n}) => {\n const { isLoading, sortedTransactions: transactions } = useTransactionStore()\n\n const { setShowInsights, toggleSplit } = useTransactionsUiStore()\n const { onEvent } = useEvent()\n\n const handleClick = (guid: string) => {\n const transaction = transactions.find((t) => t.guid === guid)\n\n if (transaction?.has_been_split) {\n toggleSplit(transaction.guid)\n return\n }\n\n onEvent(ANALYTICS_EVENTS.ACCOUNT_DETAILS_CLICK_TRANSACTION, {\n account_guid: transaction?.account_guid,\n transaction_guid: guid,\n })\n onClick?.(guid)\n }\n\n const parentRef = React.useRef<HTMLDivElement>(null)\n const rowVirtualizer = useVirtualizer({\n count: transactions.length,\n getScrollElement: () => parentRef.current,\n estimateSize: (i) => ROW_HEIGHT + (shouldShowDate(i, transactions) ? DATE_ROW_HEIGHT : 0),\n overscan: 5,\n })\n\n React.useEffect(() => rowVirtualizer.measure(), [transactions])\n React.useEffect(() => setShowInsights(showInsights), [showInsights])\n\n return (\n <List>\n <Box height={height} overflow=\"auto\" ref={parentRef} width={width}>\n <Box\n height={\n // set the height to auto when there are no transactions so the zero state isn't set to 0\n rowVirtualizer.getVirtualItems().length === 0 ? 'auto' : rowVirtualizer.getTotalSize()\n }\n position=\"relative\"\n width=\"100%\"\n >\n {(isLoading || showLoader) && loader}\n {!isLoading && !showLoader && rowVirtualizer.getVirtualItems().length === 0 && zeroState}\n {!isLoading &&\n !showLoader &&\n rowVirtualizer.getVirtualItems().length > 0 &&\n rowVirtualizer.getVirtualItems().map((row) => {\n const transaction = transactions[row.index]\n const showDate = shouldShowDate(row.index, transactions)\n const isInset = hasInsetBorder(row.index, transactions)\n const rowHeight = ROW_HEIGHT + (showDate ? DATE_ROW_HEIGHT : 0)\n\n return (\n <Box\n key={transaction.guid}\n sx={{\n height: rowHeight,\n position: 'absolute',\n transform: `translateY(${row.start}px)`,\n width: '100%',\n }}\n >\n {showDate && (\n <SubheaderRow bgcolor={bgcolor}>\n {fromUnixToDayOfWeekAndDate(transaction.date)}\n </SubheaderRow>\n )}\n <TransactionRow onClick={handleClick} transaction={transaction} />\n <Divider sx={{ ml: isInset ? 24 : 0 }} />\n </Box>\n )\n })}\n </Box>\n </Box>\n </List>\n )\n}\n\nexport default observer(TransactionList)\n","import { GridCellParams } from '@mui/x-data-grid'\n\nimport { Text } from '@kyper/mui'\n\nconst AccountCell = (params: GridCellParams) => (\n <Text tabIndex={params.tabIndex} variant=\"Small\">\n {`${params.row.account}`}\n {params.row.number && ` | ${params.row.number}`}\n </Text>\n)\n\nexport default AccountCell\n","import Stack from '@mui/material/Stack'\n\nimport { GridCellParams } from '@mui/x-data-grid'\n\nimport { Text } from '@kyper/mui'\n\nimport { formatCurrency, TransactionType, useTransactionStore } from '../../../../../common'\n\nimport { useTransactionsUiStore } from '../../../../context/hooks'\n\nconst AmountCell = (params: GridCellParams) => {\n const { associatedBeats } = useTransactionStore()\n const { showInsights } = useTransactionsUiStore()\n\n const { amount, transaction_type } = params.row\n const beat = associatedBeats.find((beat) => beat.associated_transaction_guid === params.row.guid)\n\n const isCredit = transaction_type === TransactionType.CREDIT\n\n return (\n <Stack alignItems=\"flex-end\" tabIndex={params.tabIndex}>\n <Text color={isCredit ? 'success.main' : 'text.primary'} variant=\"Small\">\n {isCredit ? '+' : ''}\n {formatCurrency(amount, '0,0.00')}\n </Text>\n {beat && showInsights && (\n <Text bold={true} color=\"action.active\" variant=\"XSmall\">\n {beat.short_title}\n </Text>\n )}\n </Stack>\n )\n}\n\nexport default AmountCell\n","import React from 'react'\nimport { observer } from 'mobx-react-lite'\n\nimport Stack from '@mui/material/Stack'\n\nimport { GridCellParams } from '@mui/x-data-grid-pro'\n\nimport { Icon, Text } from '@kyper/mui'\n\nimport { useGlobalCopyStore } from '../../../../../common'\n\nconst CategoryCell = (params: GridCellParams) => {\n const { transactions: copy } = useGlobalCopyStore()\n const [isHover, setIsHover] = React.useState(false)\n\n return (\n <Stack\n alignItems=\"center\"\n direction=\"row\"\n gap={8}\n height=\"100%\"\n onMouseEnter={() => setIsHover(true)}\n onMouseLeave={() => setIsHover(false)}\n width=\"100%\"\n >\n {params.row.has_been_split && <Icon name=\"call_split\" size={16} />}\n <Text tabIndex={params.tabIndex} variant=\"Small\">\n {params.row.has_been_split ? copy.split_transaction_category_label : params.row.category}\n </Text>\n {!params.row.has_been_split && isHover && (\n <Icon name=\"edit\" sx={{ color: 'action.active' }} />\n )}\n </Stack>\n )\n}\n\nexport default observer(CategoryCell)\n","import { fromUnixTime } from 'date-fns/fromUnixTime'\n\nimport { GridCellParams } from '@mui/x-data-grid'\n\nimport { Text } from '@kyper/mui'\n\nimport { DATE_FORMATS_INTL, formatDate } from '../../../../../common'\n\nconst DateCell = (params: GridCellParams) => {\n return (\n <Text tabIndex={params.tabIndex} variant=\"Small\">\n {formatDate(fromUnixTime(params.row.date), DATE_FORMATS_INTL.MONTH_DAY)}\n </Text>\n )\n}\n\nexport default DateCell\n","import Box from '@mui/material/Box'\nimport { observer } from 'mobx-react-lite'\n\nimport { useTheme } from '@mui/material/styles'\nimport { GridRenderCellParams } from '@mui/x-data-grid-pro'\nimport { Icon } from '@kyper/mui'\n\nimport { useGlobalCopyStore } from '../../../../../common'\n\nconst FlagCell = (params: GridRenderCellParams) => {\n const theme = useTheme()\n const { transactions: transactionsCopy } = useGlobalCopyStore()\n const { is_flagged, is_hidden, has_been_viewed, parent_guid } = params.row\n const isChildOfSplit = !!parent_guid\n const hasNotBeenViewed = !has_been_viewed && !isChildOfSplit\n\n return (\n <Box\n aria-label={is_hidden ? transactionsCopy.is_hidden : transactionsCopy.is_flagged}\n tabIndex={params.tabIndex}\n >\n {is_flagged && <Icon fill={true} name=\"flag\" size={16} sx={{ color: 'warning.dark' }} />}\n {!is_flagged && is_hidden && <Icon name=\"visibility_off\" size={16} />}\n {hasNotBeenViewed && (\n <svg\n data-testid=\"svg\"\n style={{\n display: 'inline-block',\n height: 16,\n fill: theme.palette.primary.light,\n verticalAlign: 'middle',\n width: 16,\n }}\n viewBox=\"0 0 512 512\"\n >\n <circle cx=\"256\" cy=\"256\" r=\"60\" />\n </svg>\n )}\n </Box>\n )\n}\n\nexport default observer(FlagCell)\n","import { Text } from '@kyper/mui'\n\nimport { GridColumnHeaderParams } from '@mui/x-data-grid'\n\nconst HeaderCell = (params: GridColumnHeaderParams) => (\n <Text fontWeight={600} variant=\"Small\">\n {params.colDef.headerName}\n </Text>\n)\n\nexport default HeaderCell\n","import Stack from '@mui/material/Stack'\n\nimport { GridCellParams } from '@mui/x-data-grid'\n\nimport { MerchantLogo, Text } from '@kyper/mui'\n\nconst PayeeCell = (params: GridCellParams) => {\n return (\n <Stack alignItems=\"center\" direction=\"row\" gap={8}>\n <MerchantLogo\n categoryGuid={params.row.top_level_category_guid || ''}\n merchantGuid={params.row.merchant_guid || ''}\n />\n <Text tabIndex={params.tabIndex} variant=\"Small\">\n {params.row.payee}\n </Text>\n </Stack>\n )\n}\n\nexport default PayeeCell\n","import React from 'react'\nimport { observer } from 'mobx-react-lite'\n\nimport Paper from '@mui/material/Paper'\nimport { DataGridPro, GridCellParams, GridColDef } from '@mui/x-data-grid-pro'\n\nimport { useGlobalCopyStore, useTransactionStore } from '../../../common'\n\nimport {\n AccountCell,\n AmountCell,\n CategoryCell,\n DateCell,\n FlagCell,\n HeaderCell,\n PayeeCell,\n} from './transactiontable/cells'\n\ninterface TransactionTableProps {\n height?: number | string\n onCategoryClick?: (guid: string) => void\n onRowClick?: (guid: string) => void\n}\n\nconst TransactionTable: React.FC<TransactionTableProps> = ({\n height = '100dvh',\n onCategoryClick,\n onRowClick,\n}) => {\n const { isLoading, sortedTransactions } = useTransactionStore()\n const { transactions: copy } = useGlobalCopyStore()\n\n const columns: GridColDef[] = [\n {\n field: 'flag',\n headerName: '',\n minWidth: 32,\n width: 32,\n sortable: false,\n renderCell: (params) => <FlagCell {...params} />,\n renderHeader: () => <span aria-label={copy.transaction_status} role=\"presentation\" />,\n },\n {\n field: 'date',\n headerName: copy.date_title,\n width: 103,\n renderHeader: HeaderCell,\n renderCell: DateCell,\n sortingOrder: ['desc', 'asc'],\n },\n {\n cellClassName: 'vertical-align-center',\n field: 'payee',\n headerName: copy.payee_title,\n flex: 0.33,\n renderHeader: HeaderCell,\n renderCell: PayeeCell,\n sortingOrder: ['asc', 'desc'],\n },\n {\n field: 'category',\n headerName: copy.category_title,\n flex: 0.25,\n renderHeader: HeaderCell,\n renderCell: (params) => <CategoryCell {...params} />,\n sortingOrder: ['asc', 'desc'],\n },\n {\n field: 'account',\n headerName: copy.account_title,\n flex: 0.33,\n renderHeader: HeaderCell,\n renderCell: AccountCell,\n sortingOrder: ['asc', 'desc'],\n },\n {\n field: 'amount',\n headerName: copy.amount_title,\n flex: 0.25,\n renderHeader: HeaderCell,\n renderCell: AmountCell,\n align: 'right',\n headerAlign: 'right',\n sortingOrder: ['asc', 'desc'],\n },\n ]\n\n const rows = React.useMemo(\n () =>\n sortedTransactions.map((transaction) => ({\n id: transaction.guid,\n isHovering: false,\n ...transaction,\n })),\n [sortedTransactions],\n )\n\n const handleCellClick = (params: GridCellParams) => {\n if (params.field === 'category') {\n onCategoryClick?.(params.row.guid)\n } else {\n onRowClick?.(params.row.guid)\n }\n }\n\n return (\n <Paper sx={{ height: height, px: 24, width: '100%', boxShadow: 'none' }}>\n <DataGridPro\n columns={columns}\n disableColumnFilter={true}\n disableColumnMenu={true}\n hideFooter={true}\n initialState={{ sorting: { sortModel: [{ field: 'date', sort: 'desc' }] } }}\n loading={isLoading}\n onCellClick={handleCellClick}\n rows={rows}\n slotProps={{ baseIconButton: { color: 'secondary', sx: { ml: 8 } } }}\n />\n </Paper>\n )\n}\n\nexport default observer(TransactionTable)\n","import React from 'react'\nimport { GlobalDataContext, useCategoryStore } from '../../common'\n\nexport const useCategoryUiStore = () => {\n const context = React.useContext(GlobalDataContext)\n\n if (!context) {\n throw new Error('useCategoryUiStore() must be used within the GlobalDataContext')\n }\n\n return useCategoryStore().uiStore\n}\n","export const ON_CLICK_EVENTS = {\n ON_CATEGORY_EXPANDED: 'onCategoryExpanded',\n ON_CATEGORY_COLLAPSED: 'onCategoryCollapsed',\n ON_CATEGORY_SELECTED: 'onCategorySelected',\n ON_SUBCATEGORY_ADD_CLICK: 'onSubcategoryAddClick',\n ON_SUBCATEGORY_ADD_CANCEL_CLICK: 'onSubcategoryAddCancelClick',\n ON_SUBCATEGORY_ADDED: 'onSubcategoryAdded',\n ON_SUBCATEGORY_EDIT_CLICK: 'onSubcategoryEditClick',\n ON_SUBCATEGORY_EDIT_CANCEL_CLICK: 'onSubcategoryEditCancelClick',\n ON_SUBCATEGORY_DELETE_CLICK: 'onSubcategoryDeleteClick',\n ON_SUBCATEGORY_DELETED: 'onSubcategoryDeleted',\n ON_SUBCATEGORY_SAVED: 'onSubcategorySaved',\n}\n","import React from 'react'\nimport { observer } from 'mobx-react-lite'\nimport { Text } from '@kyper/mui'\nimport { TextField } from '@kyper/mui'\n\nimport { Dialog, useGlobalCopyStore } from '../../../common'\nimport { buildDynamicCopy } from '../../../common/utils'\nimport type { DynamicCopyElement } from '../../../common/types'\nimport DialogContent from '@mui/material/DialogContent'\n\nimport { useCategoryUiStore } from '../../context/hooks'\n\nexport enum CustomCategoryModalType {\n ADD = 'add',\n EDIT = 'edit',\n DELETE = 'delete',\n}\n\ninterface CustomCategoryModalProps {\n categoryName?: string\n onClose: () => void\n onSave: (name: string) => void\n isOpen: boolean\n type: CustomCategoryModalType\n}\n\nconst CustomCategoryModal: React.FC<CustomCategoryModalProps> = ({\n categoryName = '',\n onClose,\n onSave,\n isOpen,\n type,\n}) => {\n const [name, setName] = React.useState(categoryName)\n const { categories: copy } = useGlobalCopyStore()\n const { setShouldDisableDrawerScroll } = useCategoryUiStore()\n\n let headingText = ''\n let primaryText: DynamicCopyElement = []\n\n const isDeleteType = type === CustomCategoryModalType.DELETE\n\n switch (type) {\n case CustomCategoryModalType.ADD:\n headingText = copy.add_subcategory_title\n break\n case CustomCategoryModalType.EDIT:\n headingText = buildDynamicCopy(copy.edit_subcategory_title, categoryName) as string\n break\n case CustomCategoryModalType.DELETE:\n headingText = copy.delete_subcategory_heading\n primaryText = buildDynamicCopy(\n copy.all_transactions_in_this_subcategory,\n <Text bold={true}>\n {buildDynamicCopy(copy.all_parent_category, categoryName) as string}\n </Text>,\n ) as DynamicCopyElement\n break\n }\n\n return (\n <Dialog\n copy={{\n title: headingText,\n }}\n disablePrimaryButton={!name}\n isOpen={isOpen}\n onClose={() => {\n setShouldDisableDrawerScroll(false)\n onClose()\n }}\n onPrimaryAction={() => {\n setShouldDisableDrawerScroll(false)\n onSave(name)\n }}\n >\n <DialogContent>\n {isDeleteType ? (\n <Text>{primaryText as string}</Text>\n ) : (\n <TextField\n aria-label={\n type === CustomCategoryModalType.EDIT\n ? copy.edit_subcategory_aria\n : copy.add_subcategory_aria\n }\n name=\"modify-subcategory\"\n onChange={(e: React.ChangeEvent<HTMLInputElement>) => setName(e.target.value)}\n placeholder={copy.input_placeholder}\n sx={{ width: '100%' }}\n value={name}\n />\n )}\n </DialogContent>\n </Dialog>\n )\n}\n\nexport default observer(CustomCategoryModal)\n","import React from 'react'\nimport { observer } from 'mobx-react-lite'\n\nimport ListItem from '@mui/material/ListItem'\nimport ListItemButton from '@mui/material/ListItemButton'\nimport ListItemText from '@mui/material/ListItemText'\n\nimport type { Category } from '../../../common/types'\n\nimport CustomCategoryModal, { CustomCategoryModalType } from './CustomCategoryModal'\n\nimport { ON_CLICK_EVENTS } from '../../constants/OnClickEvents'\nimport { useCategoryStore, useEvent, useGlobalCopyStore } from '../../../common'\nimport { useCategoryUiStore } from '../../context/hooks'\n\ninterface AddSubcategoryProps {\n parentCategory: Category\n}\n\nconst AddSubcategory: React.FC<AddSubcategoryProps> = ({ parentCategory }) => {\n const [showAdd, setShowAdd] = React.useState(false)\n const { addCategory } = useCategoryStore()\n const { categories: copy } = useGlobalCopyStore()\n const { onEvent } = useEvent()\n const { setShouldDisableDrawerScroll } = useCategoryUiStore()\n\n const handleAdd = async (name: string) => {\n await addCategory(name.trim(), parentCategory.guid)\n onEvent(ON_CLICK_EVENTS.ON_SUBCATEGORY_ADDED)\n setShowAdd(false)\n }\n\n const handleAdding = async () => {\n onEvent(ON_CLICK_EVENTS.ON_SUBCATEGORY_ADD_CLICK)\n setShouldDisableDrawerScroll(true)\n setShowAdd(true)\n }\n\n const handleModalClose = () => {\n setShowAdd(false)\n onEvent(ON_CLICK_EVENTS.ON_SUBCATEGORY_ADD_CANCEL_CLICK)\n }\n\n return (\n <ListItem disableGutters={true} disablePadding={true}>\n <ListItemButton onClick={handleAdding} sx={{ ml: 60 }}>\n <ListItemText\n primary={copy.add_subcategory_button}\n primaryTypographyProps={{ color: 'primary', fontWeight: 'normal', variant: 'Body' }}\n />\n </ListItemButton>\n\n {showAdd && (\n <CustomCategoryModal\n isOpen={showAdd}\n onClose={handleModalClose}\n onSave={handleAdd}\n type={CustomCategoryModalType.ADD}\n />\n )}\n </ListItem>\n )\n}\n\nexport default observer(AddSubcategory)\n","import React from 'react'\nimport { observer } from 'mobx-react-lite'\n\nimport type { Category } from '../../../common/types'\n\nimport CustomCategoryModal from './CustomCategoryModal'\n\nimport { CustomCategoryModalType } from './CustomCategoryModal'\nimport { ON_CLICK_EVENTS } from '../../constants/OnClickEvents'\nimport { useCategoryStore, useEvent } from '../../../common'\n\ninterface RenameSubcategoryProps {\n setShowRename: (show: boolean) => void\n subCategory: Category\n showRename: boolean\n}\n\nconst RenameSubcategory: React.FC<RenameSubcategoryProps> = ({\n setShowRename,\n subCategory,\n showRename,\n}) => {\n const { updateCategory } = useCategoryStore()\n const { onEvent } = useEvent()\n\n const handleRename = async (name: string) => {\n await updateCategory({ ...subCategory, name })\n onEvent(ON_CLICK_EVENTS.ON_SUBCATEGORY_SAVED)\n setShowRename(false)\n }\n\n const handleModalClose = () => {\n setShowRename(false)\n onEvent(ON_CLICK_EVENTS.ON_SUBCATEGORY_EDIT_CANCEL_CLICK)\n }\n\n return (\n <CustomCategoryModal\n categoryName={subCategory.name}\n isOpen={showRename}\n onClose={handleModalClose}\n onSave={handleRename}\n type={CustomCategoryModalType.EDIT}\n />\n )\n}\n\nexport default observer(RenameSubcategory)\n","import React from 'react'\nimport { observer } from 'mobx-react-lite'\n\nimport CustomCategoryModal, { CustomCategoryModalType } from './CustomCategoryModal'\n\nimport { useCategoryStore, useEvent } from '../../../common'\nimport type { Category } from '../../../common'\n\nimport { ON_CLICK_EVENTS } from '../../constants/OnClickEvents'\n\ninterface DeleteSubcategoryProps {\n parentCategory: Category\n showDelete: boolean\n setShowDelete: (isOpen: boolean) => void\n subCategory: Category\n}\n\nconst DeleteSubcategory: React.FC<DeleteSubcategoryProps> = ({\n parentCategory,\n showDelete,\n setShowDelete,\n subCategory,\n}) => {\n const { onEvent } = useEvent()\n const { removeCategory } = useCategoryStore()\n\n const handleClose = () => {\n setShowDelete(false)\n onEvent(ON_CLICK_EVENTS.ON_SUBCATEGORY_DELETE_CLICK)\n }\n\n const handleDelete = async () => {\n onEvent(ON_CLICK_EVENTS.ON_SUBCATEGORY_DELETED)\n await removeCategory(subCategory.guid)\n setShowDelete(false)\n }\n\n return (\n <CustomCategoryModal\n categoryName={parentCategory.name}\n isOpen={showDelete}\n onClose={handleClose}\n onSave={handleDelete}\n type={CustomCategoryModalType.DELETE}\n />\n )\n}\n\nexport default observer(DeleteSubcategory)\n","import React from 'react'\nimport { observer } from 'mobx-react-lite'\n\nimport Box from '@mui/material/Box'\nimport Chip from '@mui/material/Chip'\nimport IconButton from '@mui/material/IconButton'\nimport ListItem from '@mui/material/ListItem'\nimport ListItemButton from '@mui/material/ListItemButton'\nimport ListItemText from '@mui/material/ListItemText'\n\nimport CheckCircleIcon from '@mui/icons-material/CheckCircle'\nimport DeleteOutlinedIcon from '@mui/icons-material/DeleteOutlined'\nimport EditOutlinedIcon from '@mui/icons-material/EditOutlined'\n\nimport { buildDynamicCopy } from '../../common/utils'\nimport type { Category } from '../../common/types'\n\nimport RenameSubcategory from './CustomCategories/RenameSubcategory'\nimport DeleteSubcategory from './CustomCategories/DeleteSubcategory'\n\nimport { useEvent, useGlobalCopyStore } from '../../common'\nimport { useCategoryUiStore } from '../context/hooks'\nimport { ON_CLICK_EVENTS } from '../constants/OnClickEvents'\n\ninterface SubcategoryRowProps {\n parentCategory: Category\n subCategory: Category\n}\n\nconst SubcategoryRow: React.FC<SubcategoryRowProps> = ({ parentCategory, subCategory }) => {\n const {\n onSelect,\n selectedGuid,\n setSelectedGuid,\n setShouldDisableDrawerScroll,\n showSelected,\n unselectable,\n unselectableText,\n } = useCategoryUiStore()\n const { categories: copy } = useGlobalCopyStore()\n const { onEvent } = useEvent()\n\n const [showRename, setShowRename] = React.useState(false)\n const [showDelete, setShowDelete] = React.useState(false)\n\n const isCustom = Boolean(subCategory.revision)\n const isSelected = subCategory.guid === selectedGuid\n const isSelectable = !unselectable.some((item) => item === subCategory.guid)\n const handleClick = () => {\n if (isSelectable) {\n // Internal state\n setSelectedGuid(subCategory.guid)\n // External notification\n onSelect(subCategory.guid)\n onEvent(ON_CLICK_EVENTS.ON_CATEGORY_SELECTED)\n }\n }\n\n return (\n <ListItem\n className=\"mx-cat-subcategory-row\"\n disableGutters={true}\n disablePadding={true}\n sx={{ pl: 58 }}\n >\n <ListItemButton\n aria-pressed={isSelected}\n color=\"secondary\"\n onClick={handleClick}\n sx={{ height: 44 }}\n >\n <ListItemText\n primary={subCategory.name}\n primaryTypographyProps={{ fontWeight: 'normal', variant: 'Body' }}\n />\n {showSelected && isSelected && <CheckCircleIcon fontSize=\"small\" />}\n {!isSelectable && <Chip label={unselectableText} />}\n </ListItemButton>\n {isCustom && (\n <Box className={`mx-cat-subcategory-edit-container`} sx={{ marginRight: 24 }}>\n <IconButton\n aria-label={buildDynamicCopy(copy.edit_subcategory_aria, subCategory.name) as string}\n onClick={() => {\n setShowRename(true)\n setShouldDisableDrawerScroll(true)\n onEvent(ON_CLICK_EVENTS.ON_SUBCATEGORY_EDIT_CLICK)\n }}\n >\n <EditOutlinedIcon color=\"secondary\" />\n </IconButton>\n <IconButton\n aria-label={buildDynamicCopy(copy.delete_subcategory_aria, subCategory.name) as string}\n edge=\"end\"\n onClick={() => {\n setShowDelete(true)\n setShouldDisableDrawerScroll(true)\n onEvent(ON_CLICK_EVENTS.ON_SUBCATEGORY_DELETE_CLICK)\n }}\n >\n <DeleteOutlinedIcon color=\"secondary\" />\n </IconButton>\n </Box>\n )}\n {showDelete && (\n <DeleteSubcategory\n parentCategory={parentCategory}\n setShowDelete={setShowDelete}\n showDelete={showDelete}\n subCategory={subCategory}\n />\n )}\n {showRename && (\n <RenameSubcategory\n setShowRename={setShowRename}\n showRename={showRename}\n subCategory={subCategory}\n />\n )}\n </ListItem>\n )\n}\n\nexport default observer(SubcategoryRow)\n","import React from 'react'\nimport { observer } from 'mobx-react-lite'\n\nimport Collapse from '@mui/material/Collapse'\nimport Divider from '@mui/material/Divider'\nimport List from '@mui/material/List'\n\nimport type { Category } from '../../common/types'\nimport AddSubcategory from './CustomCategories/AddSubcategory'\nimport SubcategoryRow from './SubcategoryRow'\nimport { useCategoryUiStore } from '../context/hooks'\n\ninterface SubcategoryListProps {\n categories: Category[]\n parentCategory: Category\n}\n\nconst SubcategoryList: React.FC<SubcategoryListProps> = ({ categories, parentCategory }) => {\n const { expandedGuid, searchValue } = useCategoryUiStore()\n const isExpanded = parentCategory.guid === expandedGuid\n const isFiltered = Boolean(searchValue)\n\n return (\n <Collapse\n in={isExpanded || isFiltered}\n sx={{ backgroundColor: 'background.default' }}\n timeout=\"auto\"\n unmountOnExit={true}\n >\n <List\n aria-labelledby={`category-${parentCategory.guid}`}\n className=\"mx-cat-subcategory-list\"\n id={`subcategories-${parentCategory.guid}`}\n >\n {categories.map((category) => (\n <React.Fragment key={category.guid}>\n <SubcategoryRow parentCategory={parentCategory} subCategory={category} />\n <Divider sx={{ ml: 58 }} />\n </React.Fragment>\n ))}\n {!isFiltered && <AddSubcategory parentCategory={parentCategory} />}\n </List>\n </Collapse>\n )\n}\n\nexport default observer(SubcategoryList)\n","import React from 'react'\nimport { observer } from 'mobx-react-lite'\n\nimport Divider from '@mui/material/Divider'\nimport ListItem from '@mui/material/ListItem'\nimport ListItemAvatar from '@mui/material/ListItemAvatar'\nimport ListItemButton from '@mui/material/ListItemButton'\nimport ListItemIcon from '@mui/material/ListItemIcon'\nimport ListItemText from '@mui/material/ListItemText'\n\nimport ChevronRightIcon from '@mui/icons-material/ChevronRight'\nimport ExpandMoreIcon from '@mui/icons-material/ExpandMore'\n\nimport { CategoryIcon } from '@kyper/mui'\n\nimport { useEvent } from '../../common'\nimport type { Category } from '../../common'\n\nimport { useCategoryUiStore } from '../context/hooks'\nimport { ON_CLICK_EVENTS } from '../constants/OnClickEvents'\nimport SubcategoryList from './SubcategoryList'\n\ninterface CategoryRowProps {\n category: Category\n subCategories: Category[]\n}\n\nconst CategoryRow: React.FC<CategoryRowProps> = ({ category, subCategories }) => {\n const { expandedGuid, searchValue, setExpandedGuid } = useCategoryUiStore()\n const { onEvent } = useEvent()\n const isExpanded = category.guid === expandedGuid\n\n const handleExpanderClick = () => {\n const guid = category.guid !== expandedGuid ? category.guid : null\n setExpandedGuid(guid)\n onEvent(guid ? ON_CLICK_EVENTS.ON_CATEGORY_EXPANDED : ON_CLICK_EVENTS.ON_CATEGORY_COLLAPSED)\n }\n\n return (\n <React.Fragment>\n <ListItem disableGutters={true} disablePadding={true}>\n <ListItemButton\n aria-controls={`subcategories-${category.guid}`}\n aria-expanded={category.guid === expandedGuid}\n aria-label={category.name}\n id={`category-${category.guid}`}\n key={category.guid}\n onClick={handleExpanderClick}\n >\n <ListItemAvatar>\n <CategoryIcon categoryGuid={category.guid} />\n </ListItemAvatar>\n <ListItemText\n primary={category.name}\n primaryTypographyProps={{ fontWeight: 'normal', variant: 'Body' }}\n />\n <ListItemIcon>\n {isExpanded || searchValue ? <ExpandMoreIcon /> : <ChevronRightIcon />}\n </ListItemIcon>\n </ListItemButton>\n </ListItem>\n <Divider sx={{ ml: 58 }} />\n <SubcategoryList categories={subCategories} parentCategory={category} />\n </React.Fragment>\n )\n}\n\nexport default observer(CategoryRow)\n","import React from 'react'\nimport { observer } from 'mobx-react-lite'\nimport List from '@mui/material/List'\nimport Paper from '@mui/material/Paper'\n\nimport { buildDynamicCopy, useCategoryStore, useGlobalCopyStore } from '../../common'\nimport type { Category } from '../../common/types'\n\nimport { useCategoryUiStore } from '../context/hooks'\nimport CategoryRow from './CategoryRow'\n\ninterface NestedCategory {\n category: Category\n children: Category[]\n}\n\nconst CategoryList: React.FC = () => {\n const { categories } = useCategoryStore()\n const { searchValue } = useCategoryUiStore()\n const { categories: copy } = useGlobalCopyStore()\n\n const buildNestedCategories = (categories: Category[], filter = ''): NestedCategory[] => {\n return categories.reduce((acc, currCategory) => {\n if (currCategory.parent_guid === null) {\n const categoriesWithParent = [\n {\n ...currCategory,\n name: buildDynamicCopy(copy.all_parent_category, currCategory.name) as string,\n parent_guid: currCategory.guid,\n },\n ...categories,\n ]\n const children = categoriesWithParent.filter(\n (category) =>\n category.parent_guid === currCategory.guid &&\n category.name.toLowerCase().includes(filter.toLowerCase()),\n )\n\n if (currCategory.name.toLowerCase().includes(filter.toLowerCase()) || children.length > 0) {\n return [...acc, { category: { ...currCategory }, children }]\n }\n }\n return acc\n }, [] as NestedCategory[])\n }\n\n const nestedCategories = buildNestedCategories(categories, searchValue)\n\n return (\n <Paper className=\"mx-cat-category-list\" sx={{ boxShadow: 'none' }}>\n <List>\n {nestedCategories.map((nested: NestedCategory) => (\n <CategoryRow\n category={nested.category}\n key={nested.category.guid}\n subCategories={nested.children}\n />\n ))}\n </List>\n </Paper>\n )\n}\n\nexport default observer(CategoryList)\n","import React from 'react'\nimport { css } from '@mxenabled/cssinjs'\nimport { observer } from 'mobx-react-lite'\n\nimport CategoryList from './CategoryList'\nimport { SearchBox, useCategoryStore, useGlobalCopyStore } from '../../common'\nimport { useCategoryUiStore } from '../context/hooks'\n\nexport interface CategorySelectorProps {\n initialSelected?: string\n onSelect: (guid: string) => void\n showSelected?: boolean\n unselectable?: string[]\n unselectableText?: string\n}\n\nconst CategorySelector: React.FC<CategorySelectorProps> = ({\n initialSelected,\n onSelect = undefined,\n showSelected = true,\n unselectable = [],\n unselectableText = 'Unselectable',\n}) => {\n const styles = getStyles()\n const { categories, loadCategories } = useCategoryStore()\n const { common: copy } = useGlobalCopyStore()\n\n const {\n searchValue,\n setOnSelect,\n setSearchValue,\n setSelectedGuid,\n setShowSelected,\n setUnselectable,\n setUnselectableText,\n } = useCategoryUiStore()\n\n React.useEffect(() => {\n if (onSelect) {\n setOnSelect(onSelect)\n }\n })\n\n React.useEffect(() => {\n if (!categories.length) {\n loadCategories()\n }\n }, [])\n\n React.useEffect(() => {\n if (initialSelected) {\n setSelectedGuid(initialSelected)\n }\n setShowSelected(showSelected)\n setUnselectable(unselectable)\n setUnselectableText(unselectableText)\n }, [initialSelected, showSelected, unselectable, unselectableText])\n\n return (\n <div className={`mx-cat-category-selector ${styles}`}>\n <SearchBox\n ariaLabel={copy.search_aria}\n cancelAriaLabel={copy.cancel_search_aria}\n onChange={(value) => setSearchValue(value)}\n placeholder={copy.search_placeholder}\n searchValue={searchValue}\n />\n <CategoryList />\n </div>\n )\n}\n\nconst getStyles = () =>\n css({\n display: 'flex',\n flexDirection: 'column',\n width: '100%',\n })\n\nexport default observer(CategorySelector)\n","import React from 'react'\nimport { observer } from 'mobx-react-lite'\n\nimport { Drawer, useGlobalCopyStore } from '../../common'\n\nimport CategorySelector from './CategorySelector'\n\nimport type { CategorySelectorProps } from './CategorySelector'\n\nexport interface CategorySelectorDrawerProps extends CategorySelectorProps {\n disableScroll?: boolean\n id?: string\n onClose: () => void\n title: string\n showDrawer: boolean\n}\n\nconst CategorySelectorDrawer: React.FC<CategorySelectorDrawerProps> = ({\n id,\n onClose,\n title,\n showDrawer,\n ...categorySelectorProps\n}) => {\n const { common: commonCopy } = useGlobalCopyStore()\n\n return (\n <Drawer\n ariaLabelClose={commonCopy.close_aria}\n className=\"mx-cat-category-selector-drawer\"\n id={id}\n isOpen={showDrawer}\n onClose={onClose}\n title={title}\n >\n <CategorySelector {...categorySelectorProps} />\n </Drawer>\n )\n}\n\nexport default observer(CategorySelectorDrawer)\n","import React from 'react'\n\nimport Avatar from '@mui/material/Avatar'\nimport ListItem from '@mui/material/ListItem'\nimport ListItemAvatar from '@mui/material/ListItemAvatar'\nimport ListItemButton from '@mui/material/ListItemButton'\nimport ListItemIcon from '@mui/material/ListItemIcon'\nimport ListItemText from '@mui/material/ListItemText'\n\nimport { CategoryIcon, CategoryIconVariants, Icon, IconWeight, Text } from '@kyper/mui'\n\nimport { CategorySelectorDrawer } from '../../../../../categories'\n\nimport {\n ANALYTICS_EVENTS,\n buildDynamicCopy,\n Dialog,\n useCategoryStore,\n useGlobalCopyStore,\n} from '../../../../../common'\n\nimport type { Transaction } from '../../../../../common'\n\nimport { ON_CLICK_EVENTS } from '../../../../constants/OnClickEvents'\nimport { useTransactionsUiStore } from '../../../../context/hooks'\nimport { useEvent, useTransactionStore } from '../../../../../common'\n\ninterface CategoryActionProps {\n transaction: Transaction\n}\n\nconst CategoryAction: React.FC<CategoryActionProps> = ({ transaction }) => {\n const { addOrUpdateTransactionRule, updateTransaction } = useTransactionStore()\n const { categories } = useCategoryStore()\n const { onEvent } = useEvent()\n const { setShouldDisableDrawerScroll, updateManualTransaction } = useTransactionsUiStore()\n const { transactions: copy } = useGlobalCopyStore()\n\n const [open, setOpen] = React.useState(false)\n const [selectedGuid, setSelectedGuid] = React.useState('')\n\n const handleCategoryChange = async (applyToAll: boolean) => {\n await updateTransaction({ ...transaction, category_guid: selectedGuid })\n if (applyToAll) {\n await addOrUpdateTransactionRule(selectedGuid, transaction)\n }\n setSelectedGuid('')\n onEvent(ANALYTICS_EVENTS.TRANSACTION_DETAILS_CLICK_CATEGORY, {\n transaction_guid: transaction.guid,\n })\n }\n\n const handleSelected = (guid: string) => {\n if (transaction.is_manual && !transaction.guid) {\n const category = categories.find((c) => c.guid === guid)\n updateManualTransaction({\n ...transaction,\n category: category?.name,\n category_guid: guid,\n top_level_category_guid: category?.parent_guid || guid,\n })\n } else {\n setSelectedGuid(guid)\n }\n\n handleCloseDrawer()\n }\n\n const handleCloseDrawer = () => {\n setOpen(false)\n setShouldDisableDrawerScroll(false)\n }\n\n const category = React.useMemo(\n () => categories.find((item) => item.guid === selectedGuid),\n [selectedGuid],\n )\n\n return (\n <React.Fragment>\n <ListItem disableGutters={true} disablePadding={true}>\n <ListItemButton\n onClick={() => {\n onEvent(ON_CLICK_EVENTS.ON_TRANSACTION_CATEGORY_CLICK)\n setOpen(true)\n }}\n >\n <ListItemAvatar>\n <Avatar sx={{ bgcolor: 'border.light' }} variant=\"rounded\">\n <CategoryIcon\n categoryGuid={transaction.top_level_category_guid}\n size={24}\n sx={{ color: 'text.primary' }}\n variant={CategoryIconVariants.Transparent}\n />\n </Avatar>\n </ListItemAvatar>\n <ListItemText\n primary=\"Category\"\n primaryTypographyProps={{ variant: 'XSmall' }}\n secondary={\n <Text bold={true} variant=\"Body\">\n {transaction.category ?? copy.actions_select_a_category}\n </Text>\n }\n />\n <ListItemIcon>\n <Icon name=\"chevron_right\" weight={IconWeight.Dark} />\n </ListItemIcon>\n </ListItemButton>\n </ListItem>\n\n <CategorySelectorDrawer\n initialSelected={transaction.category_guid}\n onClose={handleCloseDrawer}\n onSelect={handleSelected}\n showDrawer={open}\n title={copy.actions_select_a_category}\n />\n\n <Dialog\n copy={{\n title: buildDynamicCopy(\n copy.actions_apply_to_all_transaction_types,\n transaction.description,\n ) as string,\n }}\n isOpen={Boolean(selectedGuid)}\n onClose={() => setSelectedGuid('')}\n onPrimaryAction={() => handleCategoryChange(true)}\n onSecondaryAction={() => handleCategoryChange(false)}\n primaryText={copy.actions_apply_to_all}\n secondaryText={copy.actions_this_time_only}\n >\n <Text>\n {\n buildDynamicCopy(\n copy.actions_all_past_and_future,\n transaction.description,\n category?.name,\n ) as string\n }\n </Text>\n </Dialog>\n </React.Fragment>\n )\n}\n\nexport default CategoryAction\n","import React from 'react'\nimport { fromUnixTime } from 'date-fns/fromUnixTime'\nimport { getUnixTime } from 'date-fns/getUnixTime'\n\nimport Avatar from '@mui/material/Avatar'\nimport Box from '@mui/material/Box'\nimport Stack from '@mui/material/Stack'\nimport ListItem from '@mui/material/ListItem'\nimport ListItemAvatar from '@mui/material/ListItemAvatar'\nimport ListItemButton from '@mui/material/ListItemButton'\nimport ListItemIcon from '@mui/material/ListItemIcon'\nimport ListItemText from '@mui/material/ListItemText'\n\nimport { Icon, IconWeight, Text, useTokens } from '@kyper/mui'\n\nimport {\n ANALYTICS_EVENTS,\n Calendar,\n CalendarSelectionTypes,\n DATE_FORMATS_INTL,\n Drawer,\n formatDate,\n useEvent,\n useGlobalCopyStore,\n useTransactionStore,\n} from '../../../../../common'\n\nimport type { Transaction } from '../../../../../common'\n\nimport { useTransactionsUiStore } from '../../../../context/hooks'\nimport { ON_CLICK_EVENTS } from '../../../../constants/OnClickEvents'\n\ninterface DateActionProps {\n transaction: Transaction\n}\n\nconst DateAction: React.FC<DateActionProps> = ({ transaction }) => {\n const tokens = useTokens()\n\n const { onEvent } = useEvent()\n const { updateTransaction } = useTransactionStore()\n const { updateManualTransaction } = useTransactionsUiStore()\n const { common: commonCopy, transactions: copy } = useGlobalCopyStore()\n\n const [open, setOpen] = React.useState(false)\n const [date, setDate] = React.useState<number>(transaction.date)\n\n const handleDateSelected = (date: Date) => {\n setDate(getUnixTime(date))\n }\n\n const handleSave = async () => {\n if (transaction.is_manual && !transaction.guid) {\n updateManualTransaction({ ...transaction, date })\n setOpen(false)\n return\n }\n\n await updateTransaction({ ...transaction, date })\n onEvent(ANALYTICS_EVENTS.TRANSACTION_DETAILS_CLICK_DATE, { transaction_guid: transaction.guid })\n setOpen(false)\n }\n\n return (\n <Box className=\"mx-txn-date-action\">\n <ListItem disableGutters={true} disablePadding={true}>\n <ListItemButton\n onClick={() => {\n onEvent(ON_CLICK_EVENTS.ON_TRANSACTION_DATE_CLICK)\n setOpen(true)\n }}\n >\n <ListItemAvatar>\n <Avatar sx={{ bgcolor: 'border.light' }} variant=\"rounded\">\n <Icon name=\"calendar_month\" sx={{ color: 'text.primary' }} weight={IconWeight.Dark} />\n </Avatar>\n </ListItemAvatar>\n <ListItemText\n primary={copy.date_title}\n primaryTypographyProps={{ variant: 'XSmall' }}\n secondary={\n <Text bold={true} variant=\"Body\">\n {formatDate(fromUnixTime(transaction.date), DATE_FORMATS_INTL.YEAR_MONTH_DAY)}\n </Text>\n }\n />\n <ListItemIcon>\n <Icon name=\"chevron_right\" weight={IconWeight.Dark} />\n </ListItemIcon>\n </ListItemButton>\n </ListItem>\n\n <Drawer\n ariaLabelClose={commonCopy.close_aria}\n isOpen={open}\n onClose={() => setOpen(false)}\n onPrimaryAction={handleSave}\n primaryText={commonCopy.save_button}\n secondaryText={commonCopy.cancel_button}\n title={copy.date_edit_title}\n >\n <Stack alignItems=\"center\" mt={tokens.Spacing.XXLarge}>\n <Calendar\n beginDate={fromUnixTime(date)}\n copy={{\n nextAria: copy.date_next_aria,\n prevAria: copy.date_prev_aria,\n today: commonCopy.date_range_picker.today,\n }}\n onDateSelected={handleDateSelected}\n selectionType={CalendarSelectionTypes.Single}\n />\n </Stack>\n </Drawer>\n </Box>\n )\n}\n\nexport default DateAction\n","import React from 'react'\nimport { observer } from 'mobx-react-lite'\n\nimport DeleteOutlinedIcon from '@mui/icons-material/DeleteOutlined'\n\nimport Avatar from '@mui/material/Avatar'\nimport Box from '@mui/material/Box'\nimport ListItem from '@mui/material/ListItem'\nimport ListItemAvatar from '@mui/material/ListItemAvatar'\nimport ListItemButton from '@mui/material/ListItemButton'\nimport ListItemIcon from '@mui/material/ListItemIcon'\nimport ListItemText from '@mui/material/ListItemText'\n\nimport { Text } from '@kyper/mui'\n\nimport { Dialog, useEvent, useGlobalCopyStore, useTransactionStore } from '../../../../../common'\n\nimport type { Transaction } from '../../../../../common'\n\nimport { useTransactionsUiStore } from '../../../../context/hooks'\nimport { ON_CLICK_EVENTS } from '../../../../constants/OnClickEvents'\n\ninterface DeleteActionProps {\n transaction: Transaction\n}\n\nconst DeleteAction: React.FC<DeleteActionProps> = ({ transaction }) => {\n const { onEvent } = useEvent()\n const { removeTransaction } = useTransactionStore()\n const { setShouldDisableDrawerScroll } = useTransactionsUiStore()\n const { common: commonCopy, transactions: copy } = useGlobalCopyStore()\n\n const [open, setOpen] = React.useState(false)\n const handleDelete = async () => {\n await removeTransaction(transaction.guid)\n onEvent(ON_CLICK_EVENTS.ON_TRANSACTION_DELETE_DELETED)\n }\n\n return (\n <Box className=\"mx-txn-delete\">\n {transaction && (\n <ListItem disableGutters={true} disablePadding={true}>\n <ListItemButton\n onClick={() => {\n onEvent(ON_CLICK_EVENTS.ON_TRANSACTION_DELETE_CLICK)\n setShouldDisableDrawerScroll(true)\n setOpen(true)\n }}\n >\n <ListItemAvatar>\n <Avatar variant=\"rounded\">\n <DeleteOutlinedIcon color=\"secondary\" fontSize=\"small\" />\n </Avatar>\n </ListItemAvatar>\n <ListItemText\n primary={copy.manual_transaction_delete_title}\n secondary={copy.manual_transaction_delete_subtitle}\n />\n <ListItemIcon>\n <DeleteOutlinedIcon />\n </ListItemIcon>\n </ListItemButton>\n </ListItem>\n )}\n <Dialog\n copy={{ title: copy.manual_transaction_delete_title }}\n isOpen={open}\n onClose={() => {\n setShouldDisableDrawerScroll(false)\n setOpen(false)\n }}\n onPrimaryAction={handleDelete}\n onSecondaryAction={() => onEvent(ON_CLICK_EVENTS.ON_TRANSACTION_DELETE_CANCEL)}\n primaryText={commonCopy.delete_button}\n secondaryText={commonCopy.cancel_button}\n >\n <Text sx={{ whiteSpace: 'normal' }} variant=\"Paragraph\">\n {copy.manual_transaction_delete_description}\n </Text>\n </Dialog>\n </Box>\n )\n}\n\nexport default observer(DeleteAction)\n","import React from 'react'\nimport { observer } from 'mobx-react-lite'\n\nimport Avatar from '@mui/material/Avatar'\nimport Box from '@mui/material/Box'\nimport ListItem from '@mui/material/ListItem'\nimport ListItemAvatar from '@mui/material/ListItemAvatar'\nimport ListItemButton from '@mui/material/ListItemButton'\nimport ListItemIcon from '@mui/material/ListItemIcon'\nimport ListItemText from '@mui/material/ListItemText'\n\nimport { Icon, IconWeight, Text } from '@kyper/mui'\n\nimport { ANALYTICS_EVENTS, Dialog, useGlobalCopyStore } from '../../../../../common'\n\nimport type { Transaction } from '../../../../../common'\n\nimport { useTransactionsUiStore } from '../../../../context/hooks'\nimport { useEvent, useTransactionStore } from '../../../../../common'\nimport { ON_CLICK_EVENTS } from '../../../../constants/OnClickEvents'\n\ninterface DeleteLogoActionProps {\n transaction: Transaction\n}\n\nconst DeleteLogoAction: React.FC<DeleteLogoActionProps> = ({ transaction }) => {\n const { onEvent } = useEvent()\n const { updateTransaction } = useTransactionStore()\n const { setShouldDisableDrawerScroll } = useTransactionsUiStore()\n const { common: commonCopy, transactions: copy } = useGlobalCopyStore()\n\n const [open, setOpen] = React.useState(false)\n\n const handleDeleteLogo = async () => {\n await updateTransaction({ ...transaction, merchant_guid: '' })\n onEvent(ANALYTICS_EVENTS.TRANSACTION_DETAILS_CLICK_DELETE_LOGO, {\n transaction_guid: transaction.guid,\n })\n }\n\n return (\n <Box className=\"mx-txn-delete-logo\">\n {transaction && (\n <ListItem disableGutters={true} disablePadding={true}>\n <ListItemButton\n onClick={() => {\n onEvent(ON_CLICK_EVENTS.ON_TRANSACTION_DELETE_LOGO_CLICK)\n setOpen(true)\n }}\n >\n <ListItemAvatar>\n <Avatar sx={{ bgcolor: 'border.light' }} variant=\"rounded\">\n <Icon name=\"delete\" sx={{ color: 'text.primary' }} weight={IconWeight.Dark} />\n </Avatar>\n </ListItemAvatar>\n <ListItemText primary={copy.merchant_logo_title} secondary={copy.merchant_logo_desc} />\n <ListItemIcon>\n <Icon name=\"chevron_right\" weight={IconWeight.Dark} />\n </ListItemIcon>\n </ListItemButton>\n </ListItem>\n )}\n\n <Dialog\n copy={{ title: copy.merchant_logo_modal_title }}\n isOpen={open}\n onClose={() => {\n setShouldDisableDrawerScroll(false)\n setOpen(false)\n }}\n onPrimaryAction={handleDeleteLogo}\n onSecondaryAction={() => onEvent(ON_CLICK_EVENTS.ON_TRANSACTION_DELETE_LOGO_CANCEL)}\n primaryText={commonCopy.delete_button}\n secondaryText={commonCopy.cancel_button}\n title={copy.merchant_logo_modal_title}\n >\n <Text sx={{ whiteSpace: 'normal' }} variant=\"Paragraph\">\n {copy.merchant_logo_modal_desc}\n </Text>\n <Text bold={true} sx={{ whiteSpace: 'normal' }} variant=\"Paragraph\">\n {` ${copy.merchant_logo_modal_desc_bold}`}\n </Text>\n </Dialog>\n </Box>\n )\n}\n\nexport default observer(DeleteLogoAction)\n","import React from 'react'\nimport { observer } from 'mobx-react-lite'\n\nimport Avatar from '@mui/material/Avatar'\nimport Box from '@mui/material/Box'\nimport ListItem from '@mui/material/ListItem'\nimport ListItemAvatar from '@mui/material/ListItemAvatar'\nimport ListItemButton from '@mui/material/ListItemButton'\nimport ListItemIcon from '@mui/material/ListItemIcon'\nimport ListItemText from '@mui/material/ListItemText'\nimport Switch from '@mui/material/Switch'\n\nimport { Icon, IconWeight, Text } from '@kyper/mui'\n\nimport { Dialog, useEvent, useGlobalCopyStore, useTransactionStore } from '../../../../../common'\n\nimport type { Transaction } from '../../../../../common'\n\nimport { useTransactionsUiStore } from '../../../../context/hooks'\nimport { ON_CLICK_EVENTS } from '../../../../constants/OnClickEvents'\n\ninterface HideActionProps {\n transaction: Transaction\n}\n\nconst HideAction: React.FC<HideActionProps> = ({ transaction }) => {\n const { onEvent } = useEvent()\n const { updateTransaction } = useTransactionStore()\n const { setShouldDisableDrawerScroll } = useTransactionsUiStore()\n const { common: commonCopy, transactions: copy } = useGlobalCopyStore()\n\n const [open, setOpen] = React.useState(false)\n\n const isHidden = transaction.is_hidden\n\n const toggleHide = async () => {\n await updateTransaction({ ...transaction, is_hidden: !transaction.is_hidden })\n onEvent(\n isHidden ? ON_CLICK_EVENTS.ON_TRANSACTION_UNHIDDEN : ON_CLICK_EVENTS.ON_TRANSACTION_HIDDEN,\n )\n }\n\n return (\n <Box className=\"mx-txn-hide-transaction\">\n {transaction && (\n <ListItem disableGutters={true} disablePadding={true}>\n <ListItemButton\n aria-checked={isHidden}\n onClick={() => {\n onEvent(\n isHidden\n ? ON_CLICK_EVENTS.ON_TRANSACTION_UNHIDE_CLICK\n : ON_CLICK_EVENTS.ON_TRANSACTION_HIDE_CLICK,\n )\n onEvent(\n isHidden\n ? 'transaction_details_click_unhide_transaction'\n : 'transaction_details_click_hide_transaction',\n {\n transaction_guid: transaction.guid,\n },\n )\n setOpen(true)\n }}\n role=\"switch\"\n >\n <ListItemAvatar>\n <Avatar sx={{ bgcolor: 'border.light' }} variant=\"rounded\">\n {isHidden ? (\n <Icon\n name=\"visibilityOff\"\n sx={{ color: 'text.primary' }}\n weight={IconWeight.Dark}\n />\n ) : (\n <Icon name=\"visibility\" sx={{ color: 'text.primary' }} weight={IconWeight.Dark} />\n )}\n </Avatar>\n </ListItemAvatar>\n <ListItemText\n primary={\n isHidden ? copy.hide_trnx_subtitle_unhide_trnx : copy.hide_trnx_subtitle_hide_trnx\n }\n secondary={isHidden ? copy.hide_trnx_desc_unhiding : copy.hide_trnx_desc_hiding}\n />\n <ListItemIcon>\n <Switch\n checked={isHidden}\n id=\"hide-transaction\"\n name=\"hide-transaction\"\n tabIndex={-1}\n />\n </ListItemIcon>\n </ListItemButton>\n </ListItem>\n )}\n\n <Dialog\n copy={{\n title: isHidden ? copy.hide_trnx_subtitle_unhide_trnx : copy.hide_trnx_subtitle_hide_trnx,\n }}\n isOpen={open}\n onClose={() => {\n setShouldDisableDrawerScroll(false)\n setOpen(false)\n }}\n onPrimaryAction={toggleHide}\n onSecondaryAction={() =>\n onEvent(\n isHidden\n ? ON_CLICK_EVENTS.ON_TRANSACTION_UNHIDE_CANCEL_CLICK\n : ON_CLICK_EVENTS.ON_TRANSACTION_HIDE_CANCEL_CLICK,\n )\n }\n primaryText={isHidden ? commonCopy.unhide_button : commonCopy.hide_button}\n secondaryText={commonCopy.cancel_button}\n >\n <Text truncate={false} variant=\"Paragraph\">\n {isHidden ? copy.hide_trnx_desc_unhiding : copy.hide_trnx_desc_hiding}\n </Text>\n </Dialog>\n </Box>\n )\n}\n\nexport default observer(HideAction)\n","import React from 'react'\n\nimport Stack from '@mui/material/Stack'\n\nimport { H1, MerchantLogo, Text } from '@kyper/mui'\n\nimport { formatCurrency } from '../../../../common'\n\nimport type { Transaction } from '../../../../common'\n\ninterface TransactionAmountHeaderProps {\n transaction: Transaction\n}\n\nconst TransactionAmountHeader: React.FC<TransactionAmountHeaderProps> = ({ transaction }) => {\n const { amount, description, isIncome, merchant_guid, payee, top_level_category_guid } =\n transaction\n\n return (\n <Stack className=\"mx-txn-amount-header\" direction=\"row\" gap={12} px={16} py={24}>\n <MerchantLogo\n categoryGuid={top_level_category_guid || ''}\n merchantGuid={merchant_guid || ''}\n size={64}\n />\n <Stack overflow=\"hidden'\">\n <Text bold={true} mb={4} truncate={true} variant=\"Body\">\n {description || payee}\n </Text>\n <H1 color={isIncome ? 'success.main' : 'text.primary'} truncate={true}>\n {isIncome ? '+' : ''}\n {formatCurrency(amount, '0,0.00')}\n </H1>\n </Stack>\n </Stack>\n )\n}\n\nexport default TransactionAmountHeader\n","import React from 'react'\nimport { observer } from 'mobx-react-lite'\n\nimport Avatar from '@mui/material/Avatar'\nimport ListItem from '@mui/material/ListItem'\nimport ListItemAvatar from '@mui/material/ListItemAvatar'\nimport ListItemButton from '@mui/material/ListItemButton'\nimport ListItemIcon from '@mui/material/ListItemIcon'\nimport ListItemText from '@mui/material/ListItemText'\nimport TextField from '@mui/material/TextField'\n\nimport { Icon, IconWeight, Text } from '@kyper/mui'\n\nimport { ANALYTICS_EVENTS, Drawer, useGlobalCopyStore } from '../../../../../common'\n\nimport type { Transaction } from '../../../../../common'\n\nimport { useTransactionsUiStore } from '../../../../context/hooks'\nimport { useEvent, useTransactionStore } from '../../../../../common'\nimport { ON_CLICK_EVENTS } from '../../../../constants/OnClickEvents'\n\nimport TransactionAmountHeader from '../TransactionAmountHeader'\n\ninterface MemoActionProps {\n transaction: Transaction\n}\n\nconst MemoAction: React.FC<MemoActionProps> = ({ transaction }) => {\n const { onEvent } = useEvent()\n const { updateTransaction } = useTransactionStore()\n const { updateManualTransaction } = useTransactionsUiStore()\n const { common: commonCopy, transactions: copy } = useGlobalCopyStore()\n\n const [open, setOpen] = React.useState(false)\n const [memoText, setMemoText] = React.useState('')\n\n React.useEffect(() => {\n if (open) {\n setMemoText(transaction.memo ? transaction.memo : '')\n }\n }, [open])\n\n const handleSave = async () => {\n if (transaction.is_manual && !transaction.guid) {\n updateManualTransaction({ ...transaction, memo: memoText })\n setOpen(false)\n return\n }\n\n await updateTransaction({ ...transaction, memo: memoText })\n onEvent(ANALYTICS_EVENTS.TRANSACTION_DETAILS_CLICK_MEMO, { transaction_guid: transaction.guid })\n setOpen(false)\n }\n\n return (\n <div className=\"mx-txn-memo-action\">\n <ListItem disableGutters={true} disablePadding={true}>\n <ListItemButton\n onClick={() => {\n onEvent(ON_CLICK_EVENTS.ON_TRANSACTION_MEMO_CLICK)\n setOpen(true)\n }}\n >\n <ListItemAvatar>\n <Avatar sx={{ bgcolor: 'border.light' }} variant=\"rounded\">\n <Icon name=\"article\" sx={{ color: 'text.primary' }} weight={IconWeight.Dark} />\n </Avatar>\n </ListItemAvatar>\n <ListItemText\n primary={copy.memo_title}\n primaryTypographyProps={{ variant: 'XSmall' }}\n secondary={\n <Text\n bold={true}\n sx={{ overflowWrap: 'break-word', whiteSpace: 'wrap' }}\n variant=\"Body\"\n >\n {transaction.memo ? transaction.memo : copy.memo_desc}\n </Text>\n }\n />\n <ListItemIcon>\n <Icon name=\"chevron_right\" weight={IconWeight.Dark} />\n </ListItemIcon>\n </ListItemButton>\n </ListItem>\n\n <Drawer\n ariaLabelClose={commonCopy.close_aria}\n isOpen={open}\n onClose={() => setOpen(false)}\n onPrimaryAction={handleSave}\n title={copy.memo_title}\n >\n <TransactionAmountHeader transaction={transaction} />\n <TextField\n aria-label={copy.memo_desc_aria}\n focused={true}\n multiline={true}\n name=\"memo\"\n onChange={(e: React.ChangeEvent<HTMLInputElement>) => setMemoText(e.target.value)}\n placeholder={copy.memo_desc}\n rows={4}\n sx={{ px: 16 }}\n value={memoText}\n />\n </Drawer>\n </div>\n )\n}\n\nexport default observer(MemoAction)\n","import React from 'react'\nimport { observer } from 'mobx-react-lite'\n\nimport Box from '@mui/material/Box'\nimport Button from '@mui/material/Button'\nimport Grid from '@mui/material/Grid'\nimport IconButton from '@mui/material/IconButton'\nimport Stack from '@mui/material/Stack'\n\nimport CancelIcon from '@mui/icons-material/Cancel'\nimport ChevronRightIcon from '@mui/icons-material/ChevronRight'\nimport DeleteOutlinedIcon from '@mui/icons-material/DeleteOutlined'\n\nimport { CategoryIcon, Text, useTokens } from '@kyper/mui'\n\nimport { CategorySelectorDrawer } from '../../../categories'\n\nimport { CurrencyInput, formatCurrency, useGlobalCopyStore } from '../../../common'\n\nimport type { Transaction } from '../../../common'\n\nimport { useEvent } from '../../../common'\nimport { ON_CLICK_EVENTS } from '../../constants/OnClickEvents'\n\ninterface SplitRowProps {\n index: number\n onCategoryChanged: (index: number, categoryGuid: string) => void\n onDeleteRow: (index: number) => void\n onUpdateAmount: (index: number, amount: number) => void\n split: Transaction\n}\n\nconst SplitRow: React.FC<SplitRowProps> = ({\n index,\n onDeleteRow,\n onCategoryChanged,\n onUpdateAmount,\n split,\n}) => {\n const tokens = useTokens()\n\n const { onEvent } = useEvent()\n const { transactions: copy } = useGlobalCopyStore()\n\n const [amount, setAmount] = React.useState(`${split.amount}`)\n const [categorySelectorOpen, setCategorySelectorOpen] = React.useState(false)\n\n const isTopRow = index === 0\n\n const handleChangeAmount = (value: string) => {\n if (!isNaN(Number(value))) {\n setAmount(value)\n onUpdateAmount(index, Number(value))\n }\n }\n\n return (\n <Box\n bgcolor=\"background.paper\"\n className=\"mx-txn-split-manager-row\"\n pb={tokens.Spacing.Tiny}\n px={tokens.Spacing.XSmall}\n >\n <Grid alignItems={isTopRow ? 'center' : 'start'} container={true}>\n <Grid item={true} xs={7}>\n <Stack alignItems=\"start\">\n <Button\n endIcon={<ChevronRightIcon />}\n onClick={() => setCategorySelectorOpen(true)}\n startIcon={<CategoryIcon categoryGuid={split.top_level_category_guid} />}\n sx={{ px: tokens.Spacing.Small, py: tokens.Spacing.XSmall }}\n >\n {split.category}\n </Button>\n <Box>\n {!split.category_guid && (\n <Stack\n color=\"error.main\"\n direction=\"row\"\n gap={tokens.Spacing.XSmall}\n p={tokens.Spacing.Small}\n >\n <CancelIcon sx={{ fontSize: tokens.FontSize.Body }} />\n <Text variant=\"Small\">{copy.split_transaction_errors_select_category}</Text>\n </Stack>\n )}\n </Box>\n </Stack>\n </Grid>\n <Grid item={true} xs={5}>\n {isTopRow ? (\n <div className=\"mx-txn-split-manager-row-top-container\">\n <Text>{formatCurrency(split.amount, '0,0.00')}</Text>\n </div>\n ) : (\n <Stack alignItems=\"start\">\n <Stack alignItems=\"start\" direction=\"row\" gap={tokens.Spacing.XSmall}>\n <CurrencyInput\n amount={amount}\n aria-label={copy.split_transaction_edit_split_amount}\n name=\"split-amount-input\"\n setAmount={handleChangeAmount}\n sx={{\n '.MuiOutlinedInput-input': { p: tokens.Spacing.Small },\n }}\n />\n <IconButton\n aria-label={copy.split_transaction_delete_split_btn}\n color=\"secondary\"\n onClick={() => {\n onEvent(ON_CLICK_EVENTS.ON_TRANSACTION_SPLIT_DELETE_CLICK)\n onDeleteRow(index)\n }}\n sx={{ w: 44, h: 44 }}\n >\n <DeleteOutlinedIcon />\n </IconButton>\n </Stack>\n {!amount && (\n <Stack\n color=\"error.main\"\n direction=\"row\"\n gap={tokens.Spacing.XSmall}\n py={tokens.Spacing.Small}\n >\n <CancelIcon sx={{ fontSize: tokens.FontSize.Body }} />\n <Text variant=\"Small\">{copy.split_transaction_errors_enter_an_amount}</Text>\n </Stack>\n )}\n </Stack>\n )}\n </Grid>\n </Grid>\n\n <CategorySelectorDrawer\n initialSelected={split.category_guid}\n onClose={() => setCategorySelectorOpen(false)}\n onSelect={(guid: string) => {\n onCategoryChanged(index, guid)\n setCategorySelectorOpen(false)\n }}\n showDrawer={categorySelectorOpen}\n title={copy.actions_select_a_category}\n />\n </Box>\n )\n}\n\nexport default observer(SplitRow)\n","import React from 'react'\nimport { observer } from 'mobx-react-lite'\n\nimport Box from '@mui/material/Box'\nimport Button from '@mui/material/Button'\nimport CancelIcon from '@mui/icons-material/Cancel'\nimport Stack from '@mui/material/Stack'\n\nimport { Text, useTokens } from '@kyper/mui'\n\nimport { buildDynamicCopy, formatCurrency } from '../../../common'\nimport type { Transaction } from '../../../common'\n\nimport SplitRow from './SplitRow'\n\nimport { useEvent, useGlobalCopyStore } from '../../../common'\nimport { ON_CLICK_EVENTS } from '../../constants/OnClickEvents'\n\ninterface SplitManagerProps {\n onAddSplit: () => void\n onCategoryChanged: (index: number, categoryGuid: string) => void\n onDeleteSplit: (index: number) => void\n onUpdateAmount: (index: number, amount: number) => void\n splits: Transaction[]\n transaction: Transaction\n}\n\nconst SplitManager: React.FC<SplitManagerProps> = ({\n onAddSplit,\n onCategoryChanged,\n onDeleteSplit,\n onUpdateAmount,\n splits,\n transaction,\n}) => {\n const tokens = useTokens()\n\n const { transactions: copy } = useGlobalCopyStore()\n const { onEvent } = useEvent()\n\n const [error, setError] = React.useState('')\n\n React.useEffect(() => {\n setError(splits.length <= 1 ? copy.split_transaction_errors_min_splits : '')\n setError(\n splits[0].amount < 0\n ? (buildDynamicCopy(\n copy.split_transaction_errors_totals_must_equal_amount,\n formatCurrency(transaction.amount, '0,0.00'),\n ) as string)\n : '',\n )\n }, [splits])\n\n return (\n <Box className=\"mx-txn-split-manager\">\n {splits.map((split, index) => (\n <SplitRow\n index={index}\n key={index}\n onCategoryChanged={onCategoryChanged}\n onDeleteRow={onDeleteSplit}\n onUpdateAmount={onUpdateAmount}\n split={split}\n />\n ))}\n {error && (\n <Stack\n color=\"error.main\"\n direction=\"row\"\n gap={tokens.Spacing.XSmall}\n p={tokens.Spacing.Medium}\n >\n <CancelIcon sx={{ fontSize: tokens.FontSize.Body }} />\n <Text variant=\"Small\">{error}</Text>\n </Stack>\n )}\n <Box p={tokens.Spacing.Medium}>\n <Button\n aria-label={copy.split_transaction_add_split_btn}\n onClick={() => {\n onEvent(ON_CLICK_EVENTS.ON_TRANSACTION_SPLIT_ADD_CLICK)\n onAddSplit()\n }}\n >\n {copy.split_transaction_add_split_btn}\n </Button>\n </Box>\n </Box>\n )\n}\n\nexport default observer(SplitManager)\n","import React from 'react'\nimport { observer } from 'mobx-react-lite'\n\nimport Avatar from '@mui/material/Avatar'\nimport ListItem from '@mui/material/ListItem'\nimport ListItemAvatar from '@mui/material/ListItemAvatar'\nimport ListItemButton from '@mui/material/ListItemButton'\nimport ListItemIcon from '@mui/material/ListItemIcon'\nimport ListItemText from '@mui/material/ListItemText'\n\nimport { Icon, IconWeight, Text } from '@kyper/mui'\n\nimport {\n buildDynamicCopy,\n Dialog,\n Drawer,\n useCategoryStore,\n useGlobalCopyStore,\n useEvent,\n useTransactionStore,\n ANALYTICS_EVENTS,\n} from '../../../../../common'\n\nimport type { Transaction } from '../../../../../common'\n\nimport { useTransactionsUiStore } from '../../../../context/hooks'\nimport { ON_CLICK_EVENTS } from '../../../../constants/OnClickEvents'\n\nimport { SplitManager } from '../../../splitmanager'\n\nimport TransactionAmountHeader from '../TransactionAmountHeader'\n\ninterface SplitActionProps {\n transaction: Transaction\n}\n\nconst SplitAction: React.FC<SplitActionProps> = ({ transaction }) => {\n const { onEvent } = useEvent()\n const { splitTransaction, unSplitTransaction } = useTransactionStore()\n const { common: commonCopy, transactions: copy } = useGlobalCopyStore()\n const { setShouldDisableDrawerScroll } = useTransactionsUiStore()\n const { categories } = useCategoryStore()\n\n const INITIAL_SPLIT = {\n ...transaction,\n amount: transaction.amount - 1,\n guid: '',\n has_been_split: false,\n parent_guid: transaction.guid,\n }\n\n const EMPTY_SPLIT = {\n ...transaction,\n amount: 1,\n category_guid: undefined,\n category: copy.split_transaction_select_category_btn,\n guid: '',\n has_been_split: false,\n parent_guid: transaction.guid,\n top_level_category_guid: undefined,\n }\n\n const [isSplitDrawerOpen, setIsSplitDrawerOpen] = React.useState(false)\n const [isDeleteSplitOpen, setIsDeleteSplitOpen] = React.useState(false)\n const [splits, setSplits] = React.useState<Transaction[]>([])\n\n const handleAddSplit = () => {\n const updatedSplits = [...splits]\n\n updatedSplits.push({ ...EMPTY_SPLIT })\n updatedSplits[0].amount -= 1\n setSplits(updatedSplits)\n }\n\n const handleDeleteSplit = (index: number) => {\n if (index > 0) {\n const row = splits[index]\n const updatedSplits = [...splits]\n\n updatedSplits.splice(index, 1)\n updatedSplits[0].amount += row.amount\n setSplits(updatedSplits)\n }\n }\n\n const handleUpdateAmount = (index: number, amount: number) => {\n const updatedSplits = [...splits]\n\n updatedSplits[index].amount = amount\n updatedSplits[0].amount =\n transaction.amount -\n updatedSplits.reduce(\n (sum: number, split: Transaction, index) => sum + (index !== 0 ? split.amount : 0),\n 0,\n )\n setSplits(updatedSplits)\n }\n\n const handleCategoryChanged = (index: number, categoryGuid: string) => {\n const updatedSplits = [...splits]\n const category = categories.find((item) => item.guid === categoryGuid)\n if (category) {\n updatedSplits[index] = {\n ...updatedSplits[index],\n category_guid: categoryGuid,\n category: category.name,\n top_level_category_guid: category.parent_guid || categoryGuid,\n }\n setSplits(updatedSplits)\n }\n }\n\n const handleClick = () => {\n if (transaction.parent_guid || transaction.has_been_split) {\n setIsDeleteSplitOpen(true)\n return\n }\n\n setSplits([{ ...INITIAL_SPLIT }, { ...EMPTY_SPLIT }])\n\n onEvent(ANALYTICS_EVENTS.TRANSACTION_DETAILS_CLICK_SPLIT, {\n transaction_guid: transaction.guid,\n })\n setIsSplitDrawerOpen(true)\n }\n\n const handleSave = async () => {\n onEvent(ON_CLICK_EVENTS.ON_TRANSACTION_SPLIT_SAVE_CLICK)\n await splitTransaction({ ...transaction, has_been_split: true }, splits)\n\n setIsSplitDrawerOpen(false)\n }\n\n const handleCancel = async () => {\n onEvent(ON_CLICK_EVENTS.ON_TRANSACTION_SPLIT_CANCEL_CLICK)\n setSplits([{ ...INITIAL_SPLIT }, { ...EMPTY_SPLIT }])\n setIsSplitDrawerOpen(false)\n }\n\n const handleUnSplit = async () => {\n onEvent(ANALYTICS_EVENTS.TRANSACTION_DETAILS_CLICK_UNSPLIT, {\n transaction_guid: transaction.guid,\n })\n const guid = transaction.parent_guid ?? transaction.guid\n await unSplitTransaction(guid)\n }\n\n const hasError = React.useMemo(() => {\n const hasCategoryError = splits.some((split) => !split.category_guid)\n const hasAmountError = splits.some((split) => split.amount <= 0)\n\n return hasCategoryError || hasAmountError\n }, [splits])\n\n return (\n <React.Fragment>\n {transaction && (\n <ListItem disableGutters={true} disablePadding={true}>\n <ListItemButton onClick={handleClick}>\n <ListItemAvatar>\n <Avatar sx={{ bgcolor: 'border.light' }} variant=\"rounded\">\n <Icon name=\"call_split\" sx={{ color: 'text.primary' }} weight={IconWeight.Dark} />\n </Avatar>\n </ListItemAvatar>\n <ListItemText\n primary={\n transaction.has_been_split || transaction.parent_guid\n ? copy.split_transaction_unsplit_title\n : copy.split_transaction_title\n }\n secondary={\n transaction.has_been_split || transaction.parent_guid\n ? copy.split_transaction_unsplit_subtitle\n : copy.split_transaction_desc\n }\n />\n <ListItemIcon>\n {transaction.has_been_split || transaction.parent_guid ? (\n <Icon name=\"delete\" weight={IconWeight.Dark} />\n ) : (\n <Icon name=\"chevron_right\" weight={IconWeight.Dark} />\n )}\n </ListItemIcon>\n </ListItemButton>\n </ListItem>\n )}\n <Drawer\n ariaLabelClose={commonCopy.close_aria}\n isOpen={isSplitDrawerOpen}\n isPrimaryDisabled={hasError}\n onClose={handleCancel}\n onPrimaryAction={handleSave}\n primaryText={commonCopy.save_button}\n secondaryText={commonCopy.cancel_button}\n title={copy.split_transaction_title}\n >\n <TransactionAmountHeader transaction={transaction} />\n <SplitManager\n onAddSplit={handleAddSplit}\n onCategoryChanged={handleCategoryChanged}\n onDeleteSplit={handleDeleteSplit}\n onUpdateAmount={handleUpdateAmount}\n splits={splits}\n transaction={transaction}\n />\n </Drawer>\n <Dialog\n copy={{ title: copy.split_transaction_unsplit_title }}\n isOpen={isDeleteSplitOpen}\n onClose={() => {\n setShouldDisableDrawerScroll(false)\n setIsDeleteSplitOpen(false)\n }}\n onPrimaryAction={handleUnSplit}\n onSecondaryAction={() => {\n onEvent(ON_CLICK_EVENTS.ON_TRANSACTION_UNSPLIT_CANCEL)\n }}\n primaryText={commonCopy.delete_button}\n secondaryText={commonCopy.cancel_button}\n >\n <Text variant=\"Paragraph\">\n {\n buildDynamicCopy(\n copy.split_transaction_unsplit_description,\n transaction.description,\n ) as string\n }\n </Text>\n </Dialog>\n </React.Fragment>\n )\n}\n\nexport default observer(SplitAction)\n","import React from 'react'\nimport { observer } from 'mobx-react-lite'\n\nimport Box from '@mui/material/Box'\nimport Button from '@mui/material/Button'\nimport Stack from '@mui/material/Stack'\nimport useTheme from '@mui/material/styles/useTheme'\n\nimport { P, Text, TextField } from '@kyper/mui'\n\nimport { Dialog, useGlobalCopyStore } from '../../../common'\n\nimport { useEvent, useTransactionStore } from '../../../common'\nimport { ON_CLICK_EVENTS } from '../../constants/OnClickEvents'\n\nconst Header = () => {\n const theme = useTheme()\n\n const { onEvent } = useEvent()\n const { addTag } = useTransactionStore()\n const { transactions: copy } = useGlobalCopyStore()\n\n const [isAdding, setIsAdding] = React.useState(false)\n const [tagName, setTagName] = React.useState('')\n const [tagNameError, setTagNameError] = React.useState('')\n\n const inputRef = React.useRef<HTMLInputElement>(null)\n\n React.useEffect(() => {\n if (isAdding) {\n inputRef?.current?.focus()\n }\n }, [isAdding])\n\n const handleAdding = () => {\n onEvent(\n isAdding\n ? ON_CLICK_EVENTS.ON_TRANSACTION_TAGS_TAG_ADD_CANCEL_CLICK\n : ON_CLICK_EVENTS.ON_TRANSACTION_TAGS_TAG_ADD_CLICK,\n )\n if (!isAdding) {\n setTagName('')\n }\n setIsAdding(!isAdding)\n }\n\n const handleAddTag = async () => {\n onEvent(ON_CLICK_EVENTS.ON_TRANSACTION_TAGS_TAG_ADDED)\n await addTag(tagName)\n setIsAdding(false)\n }\n\n React.useEffect(() => {\n setTagNameError(tagName.length > 40 ? copy.tags_error_name_must_be_40_chars : '')\n }, [tagName])\n\n return (\n <Box className=\"mx-txn-tag-manager-header\">\n <Stack\n alignItems=\"center\"\n bgcolor={theme.palette.background.default}\n direction=\"row\"\n justifyContent=\"space-between\"\n px={24}\n py={16}\n >\n <Text bold={true}>{copy.tags_your_tags}</Text>\n <Button\n aria-expanded={isAdding}\n aria-label={copy.tags_add_tag_btn_aria}\n onClick={handleAdding}\n >\n {copy.tags_add_tag_btn}\n </Button>\n </Stack>\n\n <Dialog\n copy={{ title: copy.tags_add_tag_btn }}\n isOpen={isAdding}\n onClose={() => setIsAdding(false)}\n onPrimaryAction={handleAddTag}\n onSecondaryAction={() => setIsAdding(false)}\n >\n <TextField\n aria-label={copy.tags_placeholder}\n name=\"add-tag\"\n onChange={(e: React.ChangeEvent<HTMLInputElement>) => setTagName(e.target.value)}\n placeholder={copy.tags_placeholder}\n sx={{ width: '100%' }}\n value={tagName}\n />\n <P id=\"add-tag-error\" sx={{ color: 'error.main' }} variant=\"ParagraphSmall\">\n {tagNameError}\n </P>\n </Dialog>\n </Box>\n )\n}\n\nexport default observer(Header)\n","import React from 'react'\nimport { observer } from 'mobx-react-lite'\n\nimport HighlightOffIcon from '@mui/icons-material/HighlightOff'\nimport SearchIcon from '@mui/icons-material/Search'\n\nimport Box from '@mui/material/Box'\nimport IconButton from '@mui/material/IconButton'\nimport InputAdornment from '@mui/material/InputAdornment'\n\nimport { TextField, useTokens } from '@kyper/mui'\n\nimport { useGlobalCopyStore } from '../../../common'\n\ninterface SearchBoxProps {\n onSearchValueChanged: (value: string) => void\n searchValue: string\n}\n\nconst SearchBox: React.FC<SearchBoxProps> = ({ onSearchValueChanged, searchValue }) => {\n const { common: commonCopy, transactions: copy } = useGlobalCopyStore()\n const tokens = useTokens()\n\n const cancelButton = (\n <IconButton\n aria-label={copy.tags_cancel_search || 'Search'}\n onClick={() => onSearchValueChanged('')}\n >\n <HighlightOffIcon />\n </IconButton>\n )\n\n return (\n <Box className=\"mx-txn-tag-manager-search\" px={tokens.Spacing.Large} py={tokens.Spacing.Medium}>\n <TextField\n InputProps={{\n startAdornment: (\n <InputAdornment position=\"start\">\n <SearchIcon color=\"disabled\" />\n </InputAdornment>\n ),\n endAdornment: (\n <InputAdornment position=\"end\" sx={{ padding: 0 }}>\n {searchValue ? cancelButton : null}\n </InputAdornment>\n ),\n }}\n aria-label={commonCopy.search_aria}\n name=\"search\"\n onChange={(e: React.ChangeEvent<HTMLInputElement>) => onSearchValueChanged(e.target.value)}\n placeholder={commonCopy.search_placeholder}\n // TODO: Theme needs to have the background color defaulted to paper for TextField\n sx={{ bgcolor: 'background.paper', width: '100%' }}\n value={searchValue}\n />\n </Box>\n )\n}\n\nexport default observer(SearchBox)\n","import React from 'react'\nimport { observer } from 'mobx-react-lite'\n\nimport DeleteOutlinedIcon from '@mui/icons-material/DeleteOutlined'\nimport EditIcon from '@mui/icons-material/Edit'\n\nimport Checkbox from '@mui/material/Checkbox'\nimport IconButton from '@mui/material/IconButton'\nimport ListItem from '@mui/material/ListItem'\nimport ListItemButton from '@mui/material/ListItemButton'\nimport ListItemIcon from '@mui/material/ListItemIcon'\nimport ListItemText from '@mui/material/ListItemText'\nimport Stack from '@mui/material/Stack'\n\nimport { P, Text, TextField } from '@kyper/mui'\n\nimport { Dialog, useGlobalCopyStore } from '../../../common'\n\nimport type { Tag } from '../../../common'\n\nimport { useEvent, useTransactionStore } from '../../../common'\nimport { ON_CLICK_EVENTS } from '../../constants/OnClickEvents'\n\ninterface TagRowProps {\n tag: Tag\n selectedTags: string[]\n onTagChecked: (guid: string) => void\n}\n\nconst TagRow: React.FC<TagRowProps> = ({ onTagChecked, selectedTags, tag }) => {\n const { onEvent } = useEvent()\n const { removeTag, updateTag } = useTransactionStore()\n const { common: commonCopy, transactions: copy } = useGlobalCopyStore()\n\n const [editOpen, setEditOpen] = React.useState(false)\n const [deleteOpen, setDeleteOpen] = React.useState(false)\n\n const [tagName, setTagName] = React.useState('')\n const [tagNameError, setTagNameError] = React.useState('')\n\n const handleSaveTag = async () => {\n onEvent(ON_CLICK_EVENTS.ON_TRANSACTION_TAGS_TAG_EDIT_SAVED)\n if (tag) {\n await updateTag({ ...tag, name: tagName })\n }\n setEditOpen(false)\n }\n\n const handleDeleteTag = async () => {\n onEvent(ON_CLICK_EVENTS.ON_TRANSACTION_TAGS_TAG_DELETED)\n await removeTag(tag.guid)\n setDeleteOpen(false)\n }\n\n React.useEffect(() => {\n setTagNameError(tagName.length > 40 ? copy.tags_error_name_must_be_40_chars : '')\n }, [tagName])\n\n const handleEditClick = () => {\n onEvent(ON_CLICK_EVENTS.ON_TRANSACTION_TAGS_TAG_EDIT_CLICK)\n setTagName(tag.name)\n setEditOpen(true)\n }\n\n const handleDeleteClick = () => {\n onEvent(ON_CLICK_EVENTS.ON_TRANSACTION_TAGS_TAG_DELETE_CLICK)\n setDeleteOpen(true)\n }\n\n return (\n <ListItem\n className=\"mx-txn-transaction-manager-row\"\n disableGutters={true}\n disablePadding={true}\n secondaryAction={\n !tag.is_default_tag && (\n <Stack direction=\"row\">\n <IconButton\n aria-label={`Edit ${tag.name} tag`}\n color=\"secondary\"\n onClick={handleEditClick}\n >\n <EditIcon color=\"secondary\" />\n </IconButton>\n <IconButton\n aria-label={`Delete ${tag.name} tag`}\n color=\"secondary\"\n onClick={handleDeleteClick}\n >\n <DeleteOutlinedIcon color=\"secondary\" />\n </IconButton>\n </Stack>\n )\n }\n >\n <ListItemButton\n aria-checked={selectedTags.includes(tag.guid)}\n onClick={() => onTagChecked(tag.guid)}\n role=\"checkbox\"\n >\n <ListItemIcon sx={{ ml: 0 }}>\n <Checkbox checked={selectedTags.includes(tag.guid)} edge=\"start\" tabIndex={-1} />\n </ListItemIcon>\n <ListItemText>{tag.name}</ListItemText>\n </ListItemButton>\n\n <Dialog\n copy={{ title: 'Update tag name' }} // TODO: Need copy\n isOpen={editOpen}\n onClose={() => setEditOpen(false)}\n onPrimaryAction={handleSaveTag}\n onSecondaryAction={() => setEditOpen(false)}\n >\n <TextField\n aria-describedby={tagNameError ? 'update-tag-error' : undefined}\n aria-label={copy.tags_update_the_tag_name}\n name=\"update-tag\"\n onChange={(e: React.ChangeEvent<HTMLInputElement>) => setTagName(e.target.value)}\n placeholder=\"Tag name\" // TODO: Need copy\n sx={{ width: '100%' }}\n value={tagName}\n />\n <P id=\"update-tag-error\" sx={{ color: 'error.main' }} variant=\"ParagraphSmall\">\n {tagNameError}\n </P>\n </Dialog>\n\n <Dialog\n copy={{ title: copy.tags_delete_title }}\n isOpen={deleteOpen}\n onClose={() => setDeleteOpen(false)}\n onPrimaryAction={handleDeleteTag}\n onSecondaryAction={() =>\n onEvent(ON_CLICK_EVENTS.ON_TRANSACTION_TAGS_TAG_DELETE_CANCEL_CLICK)\n }\n primaryText={commonCopy.delete_button}\n secondaryText={commonCopy.cancel_button}\n >\n <Text truncate={false}>{copy.tags_deleting_this_tag_will_remove_it}</Text>\n </Dialog>\n </ListItem>\n )\n}\n\nexport default observer(TagRow)\n","import React from 'react'\nimport { observer } from 'mobx-react-lite'\n\nimport Divider from '@mui/material/Divider'\nimport List from '@mui/material/List'\nimport Paper from '@mui/material/Paper'\n\nimport { useTransactionStore } from '../../../common'\n\nimport Header from './Header'\nimport SearchBox from './SearchBox'\nimport TagRow from './TagRow'\n\ninterface TagManagerProps {\n selectedTags: string[]\n onTagChecked: (guid: string) => void\n}\n\nconst TagManager: React.FC<TagManagerProps> = ({ selectedTags, onTagChecked }) => {\n const { tags } = useTransactionStore()\n\n const [searchValue, setSearchValue] = React.useState('')\n\n const filteredTags = tags.filter((tag) =>\n tag.name.toLowerCase().includes(searchValue.toLowerCase()),\n )\n\n return (\n <div className=\"mx-txn-tag-manager\">\n <SearchBox\n onSearchValueChanged={(value) => setSearchValue(value)}\n searchValue={searchValue}\n />\n\n <Header />\n\n <Paper sx={{ boxShadow: 'none' }}>\n <List>\n {filteredTags.map((tag) => (\n <React.Fragment key={tag.guid}>\n <TagRow onTagChecked={onTagChecked} selectedTags={selectedTags} tag={tag} />\n <Divider sx={{ ml: 24 }} />\n </React.Fragment>\n ))}\n </List>\n </Paper>\n </div>\n )\n}\n\nexport default observer(TagManager)\n","import React from 'react'\nimport { observer } from 'mobx-react-lite'\n\nimport Avatar from '@mui/material/Avatar'\nimport ListItem from '@mui/material/ListItem'\nimport ListItemAvatar from '@mui/material/ListItemAvatar'\nimport ListItemButton from '@mui/material/ListItemButton'\nimport ListItemIcon from '@mui/material/ListItemIcon'\nimport ListItemText from '@mui/material/ListItemText'\n\nimport { Icon, IconWeight, Text } from '@kyper/mui'\n\nimport { ANALYTICS_EVENTS, Drawer, useGlobalCopyStore } from '../../../../../common'\n\nimport type { Transaction } from '../../../../../common'\n\nimport { TagManager } from '../../../tagmanager'\nimport { useTransactionsUiStore } from '../../../../context/hooks'\nimport { useEvent, useTransactionStore } from '../../../../../common'\nimport { ON_CLICK_EVENTS } from '../../../../constants/OnClickEvents'\n\ninterface TagsActionProps {\n transaction: Transaction\n}\n\nconst TagsAction: React.FC<TagsActionProps> = ({ transaction }) => {\n const { onEvent } = useEvent()\n const { tags, updateTaggings, updateTransaction } = useTransactionStore()\n const { common: commonCopy, transactions: copy } = useGlobalCopyStore()\n const { updateManualTransaction } = useTransactionsUiStore()\n\n const [open, setOpen] = React.useState(false)\n const [selectedTags, setSelectedTags] = React.useState<string[]>(transaction.tags)\n\n React.useEffect(() => {\n setSelectedTags(transaction.tags)\n }, [open, transaction])\n\n const handleTagChecked = (guid: string) => {\n const tags = [...selectedTags]\n\n const index = selectedTags.indexOf(guid)\n if (index >= 0) {\n tags.splice(index, 1)\n } else {\n tags.push(guid)\n }\n setSelectedTags(tags)\n }\n\n const handleSave = async () => {\n if (transaction.is_manual && !transaction.guid) {\n updateManualTransaction({ ...transaction, tags: selectedTags })\n setOpen(false)\n return\n }\n\n await updateTaggings(selectedTags, transaction.guid)\n await updateTransaction({ ...transaction })\n onEvent(ANALYTICS_EVENTS.TRANSACTION_DETAILS_CLICK_TAGS, { transaction_guid: transaction.guid })\n setOpen(false)\n }\n\n const tagNames = React.useMemo(\n () =>\n transaction.tags.map(\n (tagGuid, index, selectedTags) =>\n `${tags.find((item) => item.guid === tagGuid)?.name}${\n index < selectedTags.length - 1 ? ' / ' : ''\n }`,\n ),\n [tags, transaction],\n )\n\n return (\n <React.Fragment>\n <ListItem disableGutters={true} disablePadding={true}>\n <ListItemButton\n onClick={() => {\n onEvent(ON_CLICK_EVENTS.ON_TRANSACTION_TAGS_CLICK)\n setOpen(true)\n }}\n >\n <ListItemAvatar>\n <Avatar sx={{ bgcolor: 'border.light' }} variant=\"rounded\">\n <Icon name=\"local_offer\" sx={{ color: 'text.primary' }} weight={IconWeight.Dark} />\n </Avatar>\n </ListItemAvatar>\n <ListItemText\n primary={copy.tags_title}\n primaryTypographyProps={{ variant: 'XSmall' }}\n secondary={\n <Text bold={true} variant=\"Body\">\n {transaction.tags?.length > 0 ? tagNames : copy.tags_desc}\n </Text>\n }\n />\n <ListItemIcon>\n <Icon name=\"chevron_right\" weight={IconWeight.Dark} />\n </ListItemIcon>\n </ListItemButton>\n </ListItem>\n\n <Drawer\n ariaLabelClose={commonCopy.close_aria}\n isOpen={open}\n onClose={() => setOpen(false)}\n onPrimaryAction={handleSave}\n primaryText={commonCopy.save_button}\n secondaryText={commonCopy.cancel_button}\n title={copy.tags_title}\n >\n <TagManager onTagChecked={handleTagChecked} selectedTags={selectedTags} />\n </Drawer>\n </React.Fragment>\n )\n}\n\nexport default observer(TagsAction)\n","import React from 'react'\nimport { observer } from 'mobx-react-lite'\n\nimport Box from '@mui/material/Box'\nimport Button from '@mui/material/Button'\nimport FormGroup from '@mui/material/FormGroup'\nimport IconButton from '@mui/material/IconButton'\nimport Stack from '@mui/material/Stack'\nimport TextField from '@mui/material/TextField'\n\nimport { Icon, Text } from '@kyper/mui'\n\nimport type { Transaction } from '../../../../common'\n\nimport {\n ANALYTICS_EVENTS,\n useEvent,\n useGlobalCopyStore,\n useTransactionStore,\n} from '../../../../common'\nimport { ON_CLICK_EVENTS } from '../../../constants/OnClickEvents'\n\ninterface DescriptionProps {\n transaction: Transaction\n}\n\nconst Description: React.FC<DescriptionProps> = ({ transaction }) => {\n const { updateTransaction } = useTransactionStore()\n const { common: commonCopy, transactions: copy } = useGlobalCopyStore()\n const { onEvent } = useEvent()\n\n const [isEditing, setIsEditing] = React.useState(false)\n const [description, setDescription] = React.useState('')\n\n const inputRef = React.useRef<HTMLInputElement>(null)\n\n React.useEffect(() => {\n if (isEditing) {\n setDescription(transaction.description)\n inputRef?.current?.focus()\n }\n }, [isEditing])\n\n const handleSave = async () => {\n onEvent(ANALYTICS_EVENTS.TRANSACTION_DETAILS_CLICK_DESCRIPTION, {\n transaction_guid: transaction.guid,\n })\n await updateTransaction({ ...transaction, description })\n setIsEditing(false)\n }\n\n return (\n <Box className=\"mx-txn-transaction-description\">\n {isEditing ? (\n <FormGroup row={true}>\n <TextField\n aria-label={copy.description_add_a_subcategory}\n name=\"add-subcategory\"\n onChange={(e: React.ChangeEvent<HTMLInputElement>) => setDescription(e.target.value)}\n ref={inputRef}\n sx={{\n backgroundColor: 'background.paper',\n '.MuiOutlinedInput-root': { borderTopRightRadius: 0, borderBottomRightRadius: 0 },\n '.MuiOutlinedInput-input': { p: 11 },\n width: 250,\n }}\n value={description}\n />\n <Button\n disabled={!description}\n onClick={handleSave}\n sx={{ borderTopLeftRadius: 0, borderBottomLeftRadius: 0 }}\n variant=\"outlined\"\n >\n {commonCopy.save_button}\n </Button>\n </FormGroup>\n ) : (\n <Stack alignItems=\"center\" direction=\"row\" gap={4}>\n <Text bold={true}>{transaction.description}</Text>\n <IconButton\n aria-label={copy.description_edit_transaction_name}\n onClick={() => {\n setIsEditing(true)\n onEvent(ON_CLICK_EVENTS.ON_TRANSACTION_DESCRIPTION_EDIT_CLICK)\n }}\n sx={{ color: 'action.active' }}\n >\n <Icon name=\"create\" size={22} />\n </IconButton>\n </Stack>\n )}\n </Box>\n )\n}\n\nexport default observer(Description)\n","import React from 'react'\nimport { observer } from 'mobx-react-lite'\n\nimport FlagOutlinedIcon from '@mui/icons-material/FlagOutlined'\nimport ToggleButton from '@mui/material/ToggleButton'\nimport useTheme from '@mui/material/styles/useTheme'\n\nimport type { Transaction } from '../../../../common'\n\nimport {\n ANALYTICS_EVENTS,\n useEvent,\n useGlobalCopyStore,\n useTransactionStore,\n} from '../../../../common'\n\ninterface FlagTransactionProps {\n transaction: Transaction\n}\n\nconst FlagTransaction: React.FC<FlagTransactionProps> = ({ transaction }) => {\n const { updateTransaction } = useTransactionStore()\n const { transactions: copy } = useGlobalCopyStore()\n const { onEvent } = useEvent()\n const theme = useTheme()\n\n const handleFlagTransaction = async () => {\n onEvent(ANALYTICS_EVENTS.TRANSACTION_DETAILS_CLICK_FLAG, { transaction_guid: transaction.guid })\n await updateTransaction({ ...transaction, is_flagged: !transaction.is_flagged })\n }\n\n return (\n <div className=\"mx-txn-transaction-flag\">\n <ToggleButton\n aria-label={copy.flag_btn_aria}\n aria-pressed={transaction.is_flagged}\n color=\"warning\"\n onClick={handleFlagTransaction}\n selected={transaction.is_flagged}\n sx={{\n borderRadius: 6,\n color: theme.palette.secondary.main,\n '&.Mui-selected': {\n color: theme.palette.common.white,\n backgroundColor: theme.palette.warning.dark,\n ':hover': {\n color: theme.palette.common.white,\n backgroundColor: theme.palette.warning.main,\n },\n },\n ':hover': {\n color: theme.palette.warning.contrastText,\n backgroundColor: theme.palette.warning.light,\n },\n }}\n value=\"flagged\"\n >\n <FlagOutlinedIcon color=\"inherit\" />\n </ToggleButton>\n </div>\n )\n}\nexport default observer(FlagTransaction)\n","import React from 'react'\nimport { observer } from 'mobx-react-lite'\n\nimport Box from '@mui/material/Box'\nimport Divider from '@mui/material/Divider'\nimport List from '@mui/material/List'\nimport Paper from '@mui/material/Paper'\nimport Stack from '@mui/material/Stack'\n\nimport { H1, MerchantLogo, Text, useTokens } from '@kyper/mui'\n\nimport { ANALYTICS_EVENTS, formatCurrency, Transaction, useEvent } from '../../../common'\n\nimport {\n BottomActions,\n DEFAULT_BOTTOM_ACTIONS,\n DEFAULT_TOP_ACTIONS,\n TopActions,\n} from '../../constants/Actions'\nimport {\n CategoryAction,\n DateAction,\n DeleteAction,\n DeleteLogoAction,\n HideAction,\n MemoAction,\n SplitAction,\n TagsAction,\n} from './transactiondetails/actions'\nimport Description from './transactiondetails/Description'\nimport FlagTransaction from './transactiondetails/FlagTransaction'\n\nexport interface TransactionDetailsProps {\n bottomActions?: BottomActions[]\n topActions?: TopActions[]\n transaction: Transaction\n}\n\nconst TransactionDetails: React.FC<TransactionDetailsProps> = ({\n bottomActions = DEFAULT_BOTTOM_ACTIONS,\n topActions = DEFAULT_TOP_ACTIONS,\n transaction,\n}) => {\n const tokens = useTokens()\n const showFullNumber = transaction?.number && transaction.number.length > 4\n const { onEvent } = useEvent()\n\n React.useEffect(\n () =>\n onEvent(ANALYTICS_EVENTS.TRANSACTION_DETAILS_VIEW, { transaction_guid: transaction.guid }),\n [],\n )\n\n return (\n <Box className=\"mx-txn-transaction-details\" width=\"100%\">\n {transaction && (\n <Stack>\n <Stack gap={tokens.Spacing.Small} p={tokens.Spacing.Large}>\n <Paper elevation={2} sx={{ borderRadius: tokens.BorderRadius.Small, width: 64 }}>\n <MerchantLogo\n categoryGuid={transaction.top_level_category_guid || ''}\n merchantGuid={transaction.merchant_guid || ''}\n size={64}\n />\n </Paper>\n\n <Description transaction={transaction} />\n\n <Stack direction=\"row\" justifyContent=\"space-between\">\n <H1 color={transaction.isIncome ? 'success.main' : 'text.primary'}>\n {transaction.isIncome ? '+' : ''}\n {formatCurrency(transaction.amount, '0,0.00')}\n </H1>\n <FlagTransaction transaction={transaction} />\n </Stack>\n\n <Stack\n bgcolor=\"background.highlight\"\n borderRadius={tokens.BorderRadius.Small}\n gap={tokens.Spacing.Tiny}\n p={tokens.Spacing.XSmall}\n >\n <Text bold={true}>\n {`${transaction.account}\n ${\n showFullNumber\n ? transaction.number\n : '\\u2022'.repeat(4).concat(transaction.number ?? '')\n }`}\n </Text>\n <Text bold={true} color=\"secondary\" variant=\"Tiny\">\n {transaction.feed_description}\n </Text>\n </Stack>\n </Stack>\n\n <Paper square={true} sx={{ boxShadow: 'none' }}>\n <List>\n {topActions.map((action, index) => (\n <React.Fragment key={action}>\n {action === TopActions.Category && <CategoryAction transaction={transaction} />}\n {action === TopActions.Date && <DateAction transaction={transaction} />}\n {action === TopActions.Memo && <MemoAction transaction={transaction} />}\n {action === TopActions.Tags && <TagsAction transaction={transaction} />}\n <Divider variant={index < topActions.length - 1 ? 'inset' : 'fullWidth'} />\n </React.Fragment>\n ))}\n </List>\n </Paper>\n\n <Text bold={true} mb={8} ml={26} mt={16} variant=\"Body\">\n Actions\n </Text>\n\n <Paper square={true} sx={{ boxShadow: 'none' }}>\n <List>\n {bottomActions.map((action, index) => (\n <React.Fragment key={action}>\n {action === BottomActions.SplitTransaction && (\n <SplitAction transaction={transaction} />\n )}\n {action === BottomActions.HideTransaction && (\n <HideAction transaction={transaction} />\n )}\n {action === BottomActions.MerchantLogo && (\n <DeleteLogoAction transaction={transaction} />\n )}\n <Divider variant={index < bottomActions.length - 1 ? 'inset' : 'fullWidth'} />\n </React.Fragment>\n ))}\n {transaction.is_manual && <DeleteAction transaction={transaction} />}\n </List>\n </Paper>\n </Stack>\n )}\n </Box>\n )\n}\n\nexport default observer(TransactionDetails)\n","import React from 'react'\nimport { observer } from 'mobx-react-lite'\nimport { Text } from '@kyper/mui'\nimport { Dialog, useGlobalCopyStore } from '../../../common'\nimport { DialogProps } from '../../../common/components/dialog/Dialog'\n\nconst AddAccountModal: React.FC<DialogProps> = ({ copy, isOpen, onClose, onPrimaryAction }) => {\n const { common: commonCopy, transactions: modalCopy } = useGlobalCopyStore()\n return (\n <Dialog\n copy={{\n title: copy.title,\n }}\n isOpen={isOpen}\n onClose={onClose}\n onPrimaryAction={onPrimaryAction}\n primaryText={modalCopy.add_manual_account}\n secondaryText={commonCopy.cancel_button}\n >\n <Text component=\"p\" sx={{ marginBottom: '20px' }} truncate={false}>\n {modalCopy.add_account_modal_message}\n </Text>\n <Text component=\"p\" truncate={false}>\n {modalCopy.add_account_modal_cta}\n </Text>\n </Dialog>\n )\n}\n\nexport default observer(AddAccountModal)\n","import React from 'react'\nimport { observer } from 'mobx-react-lite'\n\nimport Box from '@mui/material/Box'\nimport Divider from '@mui/material/Divider'\nimport MenuItem from '@mui/material/MenuItem'\nimport RadioGroup from '@mui/material/RadioGroup'\nimport Stack from '@mui/material/Stack'\n\nimport ExpandMoreIcon from '@mui/icons-material/ExpandMore'\n\nimport { TextField } from '@kyper/mui'\n\nimport {\n CurrencyInput,\n SelectionBox,\n TransactionType,\n formatCurrency,\n useGlobalCopyStore,\n useGlobalUiStore,\n} from '../../../../common'\n\nimport { useTransactionsUiStore } from '../../../context/hooks'\n\nimport { CategoryAction, DateAction, MemoAction, TagsAction } from './actions'\n\ntype ManualAccount = {\n label: string\n value: string\n}\nconst ManualTransactionDetails = () => {\n const { selectedAccounts } = useGlobalUiStore()\n const { common: commonCopy, transactions: copy } = useGlobalCopyStore()\n const { manualTransaction, setIsAmountValid, updateManualTransaction } = useTransactionsUiStore()\n\n const [amount, setAmount] = React.useState('')\n const [payee, setPayee] = React.useState('')\n\n const manualAccounts = React.useMemo(\n () => selectedAccounts.filter((account) => account.is_manual),\n [selectedAccounts],\n ).map((account) => {\n return {\n label: `${account.name} | ${formatCurrency(account.balance, '0,0.00')}`,\n value: account.guid,\n } as ManualAccount\n })\n\n const currencyCopy = {\n error_amount_is_invalid: commonCopy.currency_input.error_amount_is_invalid,\n error_amount_must_be_equal_to: commonCopy.currency_input.error_amount_must_be_equal_to,\n error_amount_must_be_less_than_or_equal_to:\n commonCopy.currency_input.error_amount_must_be_less_than_or_equal_to,\n enter_amount: commonCopy.currency_input.enter_amount,\n }\n\n const handleAmountChanged = (amount: string) => {\n setAmount(amount)\n updateManualTransaction({ ...manualTransaction, amount: Number(amount) })\n }\n\n const handleTransactionTypeChanged = (_event: React.ChangeEvent<HTMLElement>, value: string) => {\n updateManualTransaction({ ...manualTransaction, transaction_type: Number(value) })\n }\n\n const handlePayeeChanged = (payee: string) => {\n setPayee(payee)\n updateManualTransaction({ ...manualTransaction, payee, description: payee })\n }\n\n const handleAccountChanged = (guid: string) => {\n updateManualTransaction({ ...manualTransaction, account_guid: guid })\n }\n\n return (\n <Box className=\"mx-txn-manual-transaction-details\">\n <Stack gap={40} mx={24} my={32}>\n <Stack\n direction=\"row\"\n sx={{ flexDirection: { xs: 'column', sm: 'row' }, gap: { xs: 40, sm: 8 } }}\n >\n <CurrencyInput\n allowDecimals={true}\n amount={amount}\n ariaLabel={copy.amount_title}\n copy={currencyCopy}\n label={copy.amount_title}\n setAmount={handleAmountChanged}\n setHasValidInput={setIsAmountValid}\n sx={{ bgcolor: 'background.paper' }}\n />\n <RadioGroup name=\"TransactionType\" onChange={handleTransactionTypeChanged} row={true}>\n <Stack alignItems=\"center\" direction=\"row\">\n <SelectionBox\n checked={manualTransaction.transaction_type === TransactionType.CREDIT}\n label={copy.manual_transaction_credit_button_label}\n sx={{ ml: { xs: 0, sm: 8 } }}\n tooltip={copy.manual_transaction_credit_button_tooltip}\n value={TransactionType.CREDIT}\n />\n <SelectionBox\n checked={manualTransaction.transaction_type === TransactionType.DEBIT}\n label={copy.manual_transaction_debit_button_label}\n tooltip={copy.manual_transaction_debit_button_tooltip}\n value={TransactionType.DEBIT}\n />\n </Stack>\n </RadioGroup>\n </Stack>\n\n <TextField\n label={copy.payee_title}\n name=\"payee\"\n onChange={(e: React.ChangeEvent<HTMLInputElement>) => handlePayeeChanged(e.target.value)}\n sx={{ bgcolor: 'background.paper' }}\n value={payee}\n />\n\n <TextField\n InputLabelProps={{ shrink: true }}\n SelectProps={{ defaultValue: -1, IconComponent: ExpandMoreIcon }}\n label={copy.manual_transaction_select_an_account}\n onChange={(e: React.ChangeEvent<HTMLInputElement>) =>\n handleAccountChanged(e.target.value)\n }\n placeholder={copy.manual_transaction_select}\n select={true}\n sx={{ bgcolor: 'background.paper' }}\n >\n {manualAccounts.map((account) => (\n <MenuItem key={account.value} value={account.value}>\n {account.label}\n </MenuItem>\n ))}\n </TextField>\n </Stack>\n <Divider light={true} />\n <Box bgcolor=\"background.paper\">\n <CategoryAction transaction={manualTransaction} />\n <DateAction transaction={manualTransaction} />\n <MemoAction transaction={manualTransaction} />\n <TagsAction transaction={manualTransaction} />\n </Box>\n </Box>\n )\n}\n\nexport default observer(ManualTransactionDetails)\n","import React from 'react'\nimport { observer } from 'mobx-react-lite'\n\nimport Box from '@mui/material/Box'\n\nimport { Text } from '@kyper/mui'\n\nimport { CategorySelectorDrawer } from '../../../../categories'\n\nimport { buildDynamicCopy, Dialog, useCategoryStore, useGlobalCopyStore } from '../../../../common'\nimport type { Transaction } from '../../../../common'\n\nimport { useTransactionStore } from '../../../../common'\n\ninterface EditCategoryActionProps {\n onClose: () => void\n transaction: Transaction\n}\n\nconst EditCategoryAction: React.FC<EditCategoryActionProps> = ({ onClose, transaction }) => {\n const { addOrUpdateTransactionRule, updateTransaction } = useTransactionStore()\n const { transactions: copy } = useGlobalCopyStore()\n\n const { categories } = useCategoryStore()\n\n const [categoryGuid, setCategoryGuid] = React.useState('')\n\n const category = React.useMemo(\n () => categories.find((item) => item.guid === categoryGuid),\n [categoryGuid],\n )\n\n const handleCategoryChanged = async (applyToAll: boolean) => {\n await updateTransaction({ ...transaction, category_guid: categoryGuid })\n if (applyToAll) {\n await addOrUpdateTransactionRule(categoryGuid, transaction)\n }\n\n setCategoryGuid('')\n onClose()\n }\n\n return (\n <Box className=\"mx-txn-edit-category-action\">\n <CategorySelectorDrawer\n initialSelected={transaction.category_guid}\n onClose={onClose}\n onSelect={(guid: string) => setCategoryGuid(guid)}\n showDrawer={!!transaction}\n title={copy.actions_select_a_category}\n />\n <Dialog\n copy={{\n title: buildDynamicCopy(\n copy.actions_apply_to_all_transaction_types,\n transaction.description,\n ) as string,\n }}\n isOpen={!!categoryGuid}\n onClose={() => handleCategoryChanged(false)}\n onPrimaryAction={() => handleCategoryChanged(true)}\n onSecondaryAction={() => handleCategoryChanged(false)}\n primaryText={copy.actions_apply_to_all}\n secondaryText={copy.actions_this_time_only}\n >\n <Text>\n {\n buildDynamicCopy(\n copy.actions_all_past_and_future,\n transaction.description,\n category?.name,\n ) as string\n }\n </Text>\n </Dialog>\n </Box>\n )\n}\n\nexport default observer(EditCategoryAction)\n","import React from 'react'\nimport { observer } from 'mobx-react-lite'\nimport { endOfMonth } from 'date-fns/endOfMonth'\nimport { getUnixTime } from 'date-fns/getUnixTime'\nimport { startOfMonth } from 'date-fns/startOfMonth'\nimport { startOfToday } from 'date-fns/startOfToday'\n\nimport Box from '@mui/material/Box'\nimport useTheme from '@mui/material/styles/useTheme'\n\nimport type { DateRange } from '@mui/x-date-pickers-pro'\n\nimport {\n ANALYTICS_EVENTS,\n Drawer,\n Loader,\n SearchBox,\n useAccountStore,\n useEvent,\n useGlobalCopyStore,\n useGlobalUiStore,\n useTransactionStore,\n useUserStore,\n WidgetContainer,\n WidgetProps,\n} from '../common'\n\nimport { useTransactionsUiStore } from './context/hooks'\nimport { DEFAULT_TRANSACTION } from './constants/Transaction'\nimport { exportTransactionsToCSV } from './utils/exportTransactionsToCSV'\nimport ConnectDrawer from '../common/components/ConnectDrawer'\nimport ManualTransactionDetails from './components/shared/transactiondetails/ManualTransactionDetails'\nimport TransactionDetails from './components/shared/TransactionDetails'\nimport TransactionList from './components/shared/TransactionList'\nimport TransactionTable from './components/shared/TransactionTable'\nimport AddAccountModal from './components/transactionwidget/AddAccountModal'\nimport EditCategoryAction from './components/transactionwidget/actions/EditCategoryAction'\n\nconst HEADER_HEIGHT = 120\n\nenum Drawers {\n AddTransaction = 'addTransaction',\n Category = 'category',\n Transaction = 'transaction',\n}\n\ninterface TransactionWidgetProps extends WidgetProps {\n height?: string | number\n showInsights?: boolean\n}\n\nconst TransactionWidget: React.FC<TransactionWidgetProps> = ({\n onBackClick,\n height = '100dvh',\n showInsights = false,\n sx = {},\n}) => {\n const { accounts, refreshAccounts } = useAccountStore()\n const theme = useTheme()\n const {\n manualTransaction,\n isAmountValid,\n searchValue,\n setSearchValue,\n setShowInsights,\n updateManualTransaction,\n } = useTransactionsUiStore()\n const {\n addTransaction,\n filter,\n loadAssociatedBeats,\n setFilter,\n tags,\n transactions,\n updateTransaction,\n } = useTransactionStore()\n const { common: commonCopy, transactions: copy } = useGlobalCopyStore()\n const { userProfile } = useUserStore()\n const { onEvent } = useEvent()\n const {\n displayedDateRange,\n isInitialized,\n selectedAccountGuids,\n selectedAccounts,\n setDisplayedDate,\n setSelectedAccounts,\n } = useGlobalUiStore()\n\n const [drawerOpen, setDrawerOpen] = React.useState('')\n const [transactionGuid, setTransactionGuid] = React.useState('')\n\n const [addManualAccountModalOpen, setAddManualAccountModalOpen] = React.useState(false)\n const [showConnectWidget, setShowConnectWidget] = React.useState(false)\n\n const [isWidgetInitialized, setIsWidgetInitialized] = React.useState(false)\n\n React.useEffect(() => {\n setSelectedAccounts(accounts)\n }, [accounts])\n\n React.useEffect(() => {\n const startDate = startOfMonth(startOfToday())\n const endDate = endOfMonth(startOfToday())\n // Set the displayed date to the current month\n setDisplayedDate(startDate, endDate)\n // Set a Base filter\n setFilter({\n dateRange: { start: startDate, end: endDate },\n accounts: selectedAccounts.map((account) => account.guid),\n })\n setIsWidgetInitialized(true)\n onEvent(ANALYTICS_EVENTS.TRANSACTIONS_VIEW)\n }, [])\n\n React.useEffect(() => {\n // Update the filter whenever the display date or account filter changes\n if (isWidgetInitialized) {\n setFilter({\n ...filter,\n dateRange: { start: displayedDateRange.start, end: displayedDateRange.end },\n accounts: selectedAccountGuids,\n })\n //load associated beats for new date range\n loadAssociatedBeats(displayedDateRange.start)\n }\n }, [displayedDateRange, selectedAccountGuids])\n\n React.useEffect(() => {\n setShowInsights(showInsights)\n }, [showInsights])\n\n const manualAccounts = React.useMemo(\n () => accounts.filter((account) => account.is_manual),\n [accounts],\n )\n\n const transaction = transactionGuid\n ? transactions.find((transaction) => transaction.guid === transactionGuid)\n : undefined\n\n const isTransactionValid =\n isAmountValid &&\n Boolean(manualTransaction.payee) &&\n Boolean(manualTransaction.account_guid) &&\n Boolean(manualTransaction.category_guid)\n\n const handleDateChanged = (range: DateRange<Date>) => {\n setDisplayedDate(range[0] as Date, range[1] as Date)\n }\n\n const handleSearch = (searchTerm: string) => {\n setSearchValue(searchTerm)\n setFilter({\n ...filter,\n searchTerm,\n })\n onEvent(ANALYTICS_EVENTS.TRANSACTIONS_CLICK_SEARCH, { search_term: searchTerm })\n }\n\n const handleExportCsvClick = () => {\n exportTransactionsToCSV(transactions, tags)\n onEvent(ANALYTICS_EVENTS.TRANSACTIONS_CLICK_EXPORT)\n }\n\n const handleAddTransactionClick = () => {\n if (manualAccounts.length > 0) {\n updateManualTransaction({\n ...DEFAULT_TRANSACTION,\n date: getUnixTime(startOfToday()),\n user_guid: userProfile?.user_guid || '',\n })\n\n setDrawerOpen(Drawers.AddTransaction)\n onEvent(ANALYTICS_EVENTS.TRANSACTIONS_CLICK_ADD)\n } else {\n setAddManualAccountModalOpen(true)\n onEvent(ANALYTICS_EVENTS.TRANSACTIONS_ADD_MANUAL_ACCOUNT_MODAL)\n }\n }\n\n const handleAddTransaction = async () => {\n if (isTransactionValid) {\n await addTransaction(manualTransaction)\n }\n\n setDrawerOpen('')\n }\n\n const handleAddManualAccountClick = () => {\n setAddManualAccountModalOpen(false)\n setShowConnectWidget(true)\n }\n\n const handleConnectWidgetClose = () => {\n setShowConnectWidget(false)\n refreshAccounts()\n }\n\n if (!isInitialized || !isWidgetInitialized) {\n return <Loader />\n }\n\n return (\n <WidgetContainer\n accountOptions={accounts}\n actions={[\n {\n iconName: 'open_in_new',\n label: copy.export_csv_btn,\n onClick: handleExportCsvClick,\n },\n {\n iconName: 'add',\n label: copy.add_transaction_btn,\n onClick: handleAddTransactionClick,\n },\n ]}\n calendarActions={{\n onRangeChanged: handleDateChanged,\n }}\n onAccountsFilterClick={() => onEvent(ANALYTICS_EVENTS.ACCOUNTS_CLICK_FILTER)}\n onBackClick={onBackClick}\n sx={sx}\n title={copy.transactions_title}\n >\n <Box mt={16}>\n <SearchBox\n onChange={handleSearch}\n placeholder={copy.action_bar_search_placeholder}\n searchValue={searchValue}\n />\n </Box>\n\n <Box\n sx={{\n [theme.breakpoints.down('md')]: { display: 'none' },\n [theme.breakpoints.up('md')]: { display: 'block' },\n }}\n >\n <TransactionTable\n height={`calc(${height} - ${HEADER_HEIGHT}px)`}\n onCategoryClick={(guid: string) => {\n setTransactionGuid(guid)\n setDrawerOpen(Drawers.Category)\n }}\n onRowClick={(guid: string) => {\n setTransactionGuid(guid)\n setDrawerOpen(Drawers.Transaction)\n onEvent(ANALYTICS_EVENTS.TRANSACTIONS_CLICK_DETAILS, { transaction_guid: guid })\n }}\n />\n </Box>\n <Box\n sx={{\n [theme.breakpoints.down('md')]: { display: 'block' },\n [theme.breakpoints.up('md')]: { display: 'none' },\n }}\n >\n <TransactionList\n height={`calc(${height} - ${HEADER_HEIGHT}px)`}\n onClick={(guid: string) => {\n setTransactionGuid(guid)\n setDrawerOpen(Drawers.Transaction)\n }}\n showInsights={showInsights}\n />\n </Box>\n\n <Drawer\n ariaLabelClose={commonCopy.close_aria}\n isOpen={drawerOpen === Drawers.Transaction}\n onClose={() => {\n // mark transaction as viewed\n if (transaction && !transaction.has_been_viewed) {\n updateTransaction({ ...transaction, has_been_viewed: true })\n }\n setDrawerOpen('')\n }}\n title={copy.details_title}\n >\n {transaction && <TransactionDetails transaction={transaction} />}\n </Drawer>\n {transaction && drawerOpen === Drawers.Category && (\n <EditCategoryAction\n onClose={() => {\n setDrawerOpen('')\n setTransactionGuid('')\n }}\n transaction={transaction}\n />\n )}\n <Drawer\n ariaLabelClose={commonCopy.close_aria}\n isOpen={drawerOpen === Drawers.AddTransaction}\n isPrimaryDisabled={!isTransactionValid}\n onClose={() => setDrawerOpen('')}\n onPrimaryAction={handleAddTransaction}\n title={copy.add_transaction_title}\n >\n <ManualTransactionDetails />\n </Drawer>\n <AddAccountModal\n copy={{ title: copy.add_manual_account }}\n isOpen={addManualAccountModalOpen}\n onClose={() => {\n setAddManualAccountModalOpen(false)\n }}\n onPrimaryAction={handleAddManualAccountClick}\n />\n <ConnectDrawer\n onClose={handleConnectWidgetClose}\n showConnectWidget={showConnectWidget}\n title={copy.add_manual_account}\n />\n </WidgetContainer>\n )\n}\n\nexport default observer(TransactionWidget)\n","import { formatISO } from 'date-fns/formatISO'\nimport { getDate } from 'date-fns/getDate'\nimport { getDay } from 'date-fns/getDay'\nimport { getUnixTime } from 'date-fns/getUnixTime'\nimport { getMonth } from 'date-fns/getMonth'\n\nimport { RecurrenceTypes } from '../../common'\n\nimport type {\n Activity,\n CashflowSequence,\n RepeatDay,\n RepeatMonth,\n RepeatWeekday,\n ScheduledPayment,\n} from '../../common'\n\nexport const updateIncome = (activity: Activity, sequence: CashflowSequence): CashflowSequence => {\n const updatedSequence = {\n ...sequence,\n repeat_day: null,\n repeat_interval: null,\n repeat_month: null,\n repeat_weekday: null,\n start_date: getUnixTime(activity.expectedDate),\n } as CashflowSequence\n\n const repeatDay = `${getDate(activity.expectedDate)}` as RepeatDay\n const repeatMonth = `${getMonth(activity.expectedDate)}` as RepeatMonth\n const repeatWeekday = `${getDay(activity.expectedDate)}` as RepeatWeekday\n\n switch (activity.recurrenceType) {\n case RecurrenceTypes.EveryWeek:\n updatedSequence.repeat_interval = '1'\n updatedSequence.repeat_weekday = repeatWeekday\n break\n case RecurrenceTypes.EveryOtherWeek:\n updatedSequence.repeat_interval = '2'\n updatedSequence.repeat_weekday = repeatWeekday\n break\n case RecurrenceTypes.EveryMonth:\n updatedSequence.repeat_day = repeatDay\n break\n case RecurrenceTypes.EveryQuarter:\n updatedSequence.repeat_day = repeatDay\n updatedSequence.repeat_interval = '3'\n break\n case RecurrenceTypes.EveryYear:\n updatedSequence.repeat_day = repeatDay\n updatedSequence.repeat_month = repeatMonth\n break\n }\n\n return updatedSequence\n}\n\nexport const updateExpense = (\n activity: Activity,\n scheduledPayment: ScheduledPayment,\n): ScheduledPayment => {\n return {\n ...scheduledPayment,\n occurs_on: formatISO(activity.expectedDate, { representation: 'date' }),\n recurrence_type: activity.recurrenceType,\n }\n}\n","import React from 'react'\nimport { observer } from 'mobx-react-lite'\n\nimport Divider from '@mui/material/Divider'\nimport List from '@mui/material/List'\nimport ListItem from '@mui/material/ListItem'\nimport ListItemButton from '@mui/material/ListItemButton'\nimport ListItemText from '@mui/material/ListItemText'\n\nimport { Icon } from '@kyper/mui'\n\nimport {\n type Activity,\n ActivityType,\n DataRow,\n Drawer,\n RecurrenceTypes,\n useEvent,\n useGlobalCopyStore,\n useRecurringActivityStore,\n} from '../../../common'\n\nimport { updateExpense, updateIncome } from '../../util/updateActivity'\n\ninterface FrequencyActionProps {\n activity: Activity\n}\n\nconst FrequencyAction: React.FC<FrequencyActionProps> = ({ activity }) => {\n const { recurring: recurringCopy } = useGlobalCopyStore()\n const { cashflowSequences, scheduledPayments, updateCashflowSequence, updateScheduledPayment } =\n useRecurringActivityStore()\n\n const { onEvent } = useEvent()\n const [isOpen, setIsOpen] = React.useState(false)\n const isIncome = activity.activityType === ActivityType.Income\n\n const frequencies = [\n { id: RecurrenceTypes.EveryWeek, label: recurringCopy.frequency_every_week },\n { id: RecurrenceTypes.EveryOtherWeek, label: recurringCopy.frequency_every_other_week },\n { id: RecurrenceTypes.EveryMonth, label: recurringCopy.frequency_every_month },\n { id: RecurrenceTypes.EveryOtherMonth, label: recurringCopy.frequency_every_other_month },\n { id: RecurrenceTypes.EveryQuarter, label: recurringCopy.frequency_every_quarter },\n { id: RecurrenceTypes.EveryOtherQuarter, label: recurringCopy.frequency_every_other_quarter },\n { id: RecurrenceTypes.EveryYear, label: recurringCopy.frequency_every_year },\n ]\n\n const handleOnClick = async (recurrenceType: RecurrenceTypes) => {\n const updatedActivity = { ...activity, recurrenceType }\n\n if (activity.activityType === ActivityType.Expense) {\n const payment = scheduledPayments.find((sp) => sp.guid === activity.scheduledPaymentGuid)\n\n if (payment) {\n // update scheduled payment\n await updateScheduledPayment(updateExpense(updatedActivity, payment))\n }\n } else {\n const sequence = cashflowSequences.find((cs) => cs.guid === activity.sequenceGuid)\n\n if (sequence) {\n // update cashflow sequence\n await updateCashflowSequence(updateIncome(updatedActivity, sequence))\n }\n }\n\n setIsOpen(false)\n }\n\n const handleOpen = () => {\n setIsOpen(true)\n onEvent(\n isIncome\n ? 'recurring_transactions_widget_income_details_click_payment_schedule'\n : 'recurring_transactions_widget_expense_details_click_payment_schedule',\n {\n transaction_guid: activity.transactionGuid,\n },\n )\n }\n\n const frequency = frequencies.find((f) => f.id === activity.recurrenceType)\n\n return (\n <>\n <DataRow\n iconName=\"sync\"\n label={recurringCopy.activity_schedule}\n onClick={handleOpen}\n value={frequency?.label || ''}\n />\n <Drawer\n ariaLabelClose={recurringCopy.close_drawer_aria}\n isOpen={isOpen}\n onClose={() => setIsOpen(false)}\n title={recurringCopy.frequency_title}\n >\n <List>\n {frequencies\n .filter(\n (f) =>\n // Filter out every other month and every other quarter when income since cashflow\n // sequence doesn't support them\n activity.activityType === ActivityType.Expense ||\n (f.id !== RecurrenceTypes.EveryOtherMonth &&\n f.id !== RecurrenceTypes.EveryOtherQuarter),\n )\n .map((frequency) => (\n <React.Fragment key={frequency.id}>\n <ListItem disableGutters={true} disablePadding={true} key={frequency.id}>\n <ListItemButton onClick={() => handleOnClick(frequency.id)}>\n <ListItemText\n primary={frequency.label}\n primaryTypographyProps={{ fontWeight: 400 }}\n />\n {activity.recurrenceType === frequency.id && (\n <Icon color=\"primary\" fill={true} name=\"check_circle\" size={24} />\n )}\n </ListItemButton>\n </ListItem>\n <Divider />\n </React.Fragment>\n ))}\n </List>\n </Drawer>\n </>\n )\n}\n\nexport default observer(FrequencyAction)\n","import React from 'react'\nimport { observer } from 'mobx-react-lite'\nimport { startOfToday } from 'date-fns/startOfToday'\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 type Activity,\n ActivityType,\n DATE_FORMATS_INTL,\n DataRow,\n Drawer,\n formatDate,\n useEvent,\n useGlobalCopyStore,\n useRecurringActivityStore,\n} from '../../../common'\n\nimport { updateExpense, updateIncome } from '../../util/updateActivity'\n\ninterface PaymentDateActionProps {\n activity: Activity\n}\n\nconst PaymentDateAction: React.FC<PaymentDateActionProps> = ({ activity }) => {\n const { recurring: recurringCopy } = useGlobalCopyStore()\n const { cashflowSequences, scheduledPayments, updateCashflowSequence, updateScheduledPayment } =\n useRecurringActivityStore()\n\n const { onEvent } = useEvent()\n const [isOpen, setIsOpen] = React.useState(false)\n const [selected, setSelected] = React.useState(activity.expectedDate)\n const isIncome = activity.activityType === ActivityType.Income\n\n const handleOpen = () => {\n setSelected(activity.expectedDate)\n setIsOpen(true)\n onEvent(\n isIncome\n ? 'recurring_transactions_widget_income_details_click_next_payment_due'\n : 'recurring_transactions_widget_expense_details_click_next_payment_due',\n {\n transaction_guid: activity.transactionGuid,\n },\n )\n }\n\n const handleSave = async () => {\n const updatedActivity = { ...activity, expectedDate: selected }\n\n if (activity.activityType === ActivityType.Expense) {\n const payment = scheduledPayments.find((sp) => sp.guid === activity.scheduledPaymentGuid)\n\n if (payment) {\n // update scheduled payment\n await updateScheduledPayment(updateExpense(updatedActivity, payment))\n }\n } else {\n const sequence = cashflowSequences.find((cs) => cs.guid === activity.sequenceGuid)\n\n if (sequence) {\n // update cashflow sequence\n await updateCashflowSequence(updateIncome(updatedActivity, sequence))\n }\n }\n\n setIsOpen(false)\n }\n\n return (\n <>\n <DataRow\n iconName=\"calendar_month\"\n label={recurringCopy.activity_payment_date}\n onClick={handleOpen}\n value={formatDate(activity.expectedDate, DATE_FORMATS_INTL.MONTH_DAY_YEAR)}\n />\n <Drawer\n ariaLabelClose={recurringCopy.close_drawer_aria}\n isOpen={isOpen}\n onClose={() => setIsOpen(false)}\n onPrimaryAction={handleSave}\n title={recurringCopy.activity_payment_date}\n >\n <LocalizationProvider dateAdapter={AdapterDateFns}>\n <DateCalendar\n minDate={startOfToday()}\n onChange={(date) => setSelected(date)}\n value={selected}\n />\n </LocalizationProvider>\n </Drawer>\n </>\n )\n}\n\nexport default observer(PaymentDateAction)\n","import React from 'react'\nimport { observer } from 'mobx-react-lite'\nimport { endOfMonth } from 'date-fns/endOfMonth'\nimport { startOfToday } from 'date-fns/startOfToday'\nimport { subDays } from 'date-fns/subDays'\n\nimport Button from '@mui/material/Button'\nimport Divider from '@mui/material/Divider'\nimport List from '@mui/material/List'\nimport Stack from '@mui/material/Stack'\n\nimport { H1, Icon, MerchantLogo, Text } from '@kyper/mui'\n\nimport {\n type Activity,\n type Transaction,\n ActivityType,\n DataRow,\n Dialog,\n formatCurrency,\n useCategoryStore,\n useRecurringActivityStore,\n useTransactionStore,\n Drawer,\n useGlobalUiStore,\n useEvent,\n useGlobalCopyStore,\n} from '../../common'\n\nimport { TransactionDetails, TransactionList } from '../../transactions'\n\nimport FrequencyAction from './actions/FrequencyAction'\nimport PaymentDateAction from './actions/PaymentDateAction'\n\ninterface ActivityDetailsProps {\n activity: Activity\n onDeleted: () => void\n}\n\nconst ActivityDetails: React.FC<ActivityDetailsProps> = ({ activity, onDeleted }) => {\n const { recurring: recurringCopy } = useGlobalCopyStore()\n const { categories } = useCategoryStore()\n const { deleteCashflowSequence, deleteScheduledPayment, paidActivities } =\n useRecurringActivityStore()\n const { filter, setFilter, transactions } = useTransactionStore()\n const { selectedAccountGuids } = useGlobalUiStore()\n const { onEvent } = useEvent()\n\n const [showDeleteConfirm, setShowDeleteConfirm] = React.useState(false)\n const [transactionGuid, setTransactionGuid] = React.useState('')\n\n const category = categories.find((c) => c.guid === activity.categoryGuid)\n const isIncome = activity.activityType === ActivityType.Income\n const transaction = React.useMemo(\n () => transactions.find((t) => t.guid === transactionGuid),\n [transactionGuid],\n )\n\n React.useEffect(() => {\n setFilter({\n accounts: selectedAccountGuids,\n dateRange: { start: subDays(startOfToday(), 90), end: endOfMonth(startOfToday()) },\n })\n }, [])\n\n React.useEffect(() => {\n if (isIncome && activity.sequenceGuid) {\n // Set filter to show related paid income\n const transactionGuids = paidActivities\n .filter((pa) => pa.sequenceGuid === activity.sequenceGuid)\n .map((pa) => pa.transactionGuid)\n setFilter({\n ...filter,\n custom: (t: Transaction) => Boolean(transactionGuids.find((guid) => t.guid === guid)),\n })\n } else if (!isIncome && activity.scheduledPaymentGuid) {\n // Set filter to show related paid expenses\n setFilter({\n ...filter,\n custom: (t: Transaction) => t.scheduled_payment_guid === activity.scheduledPaymentGuid,\n })\n }\n }, [activity])\n\n const handleDeleteActivity = async () => {\n if (isIncome && activity.sequenceGuid) {\n await deleteCashflowSequence(activity.sequenceGuid)\n } else if (activity.scheduledPaymentGuid) {\n await deleteScheduledPayment(activity.scheduledPaymentGuid)\n }\n onDeleted()\n }\n\n const handleDeleteButtonClick = () => {\n setShowDeleteConfirm(true)\n onEvent(\n isIncome\n ? 'recurring_transactions_widget_income_details_click_delete'\n : 'recurring_transactions_widget_expense_details_click_delete',\n {\n transaction_guid: activity.transactionGuid,\n },\n )\n }\n\n return (\n <Stack bgcolor=\"background.default\" direction=\"column\" height=\"100%\">\n <Stack direction=\"column\" gap={12} m={24}>\n <MerchantLogo\n categoryGuid={activity.categoryGuid || ''}\n merchantGuid={activity.merchantGuid || ''}\n size={64}\n />\n <Text bold={true} variant=\"Body\">\n {activity.name}\n </Text>\n <H1 color={isIncome ? 'success.main' : 'text.primary'}>\n {isIncome ? '+' : ''}\n {formatCurrency(activity.amount, '0,0.00')}\n </H1>\n </Stack>\n <List sx={{ bgcolor: 'background.paper' }}>\n {activity.institution && (\n <>\n <DataRow\n iconName=\"checkbook\"\n label={recurringCopy.account}\n value={activity.institution}\n />\n <Divider color=\"secondary\" variant=\"inset\" />\n </>\n )}\n\n {category && (\n <>\n <DataRow\n iconName=\"monetization_on\"\n label={recurringCopy.category}\n value={category.name}\n />\n <Divider color=\"secondary\" variant=\"inset\" />\n </>\n )}\n\n <FrequencyAction activity={activity} />\n <Divider color=\"secondary\" variant=\"inset\" />\n\n <PaymentDateAction activity={activity} />\n <Divider color=\"secondary\" />\n </List>\n\n <Button\n color=\"error\"\n onClick={handleDeleteButtonClick}\n startIcon={<Icon name=\"delete\" />}\n sx={{ mx: 24, my: 16 }}\n variant=\"text\"\n >\n {isIncome ? recurringCopy.delete_income_title : recurringCopy.delete_expense_title}\n </Button>\n\n <Text bold={true} sx={{ ml: 24, mt: 16 }} variant=\"Body\">\n {recurringCopy.paid_transactions}\n </Text>\n\n <TransactionList height=\"30dvh\" onClick={setTransactionGuid} />\n\n <Drawer\n ariaLabelClose={recurringCopy.close_drawer_aria}\n isOpen={!!transactionGuid}\n onClose={() => setTransactionGuid('')}\n title={recurringCopy.transaction_details_drawer_title}\n >\n {transaction && <TransactionDetails transaction={transaction} />}\n </Drawer>\n\n <Dialog\n copy={{\n title: isIncome ? recurringCopy.delete_income_title : recurringCopy.delete_expense_title,\n close_aria: recurringCopy.close_drawer_aria,\n }}\n isOpen={showDeleteConfirm}\n onClose={() => setShowDeleteConfirm(false)}\n onPrimaryAction={handleDeleteActivity}\n >\n <Text>\n {isIncome\n ? recurringCopy.delete_income_description\n : recurringCopy.delete_expense_description}\n </Text>\n </Dialog>\n </Stack>\n )\n}\n\nexport default observer(ActivityDetails)\n","import AccessTimeFilledIcon from '@mui/icons-material/AccessTimeFilled'\nimport MonetizationOnIcon from '@mui/icons-material/MonetizationOn'\nimport CancelIcon from '@mui/icons-material/Cancel'\nimport CheckCircleIcon from '@mui/icons-material/CheckCircle'\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 size={size} sx={{ ...offsetStyle(isOffset) }}>\n <AccessTimeFilledIcon color=\"primary\" sx={{ fontSize: size, ...iconStyle }} />\n </IconBacking>\n)\n\nexport const IncomeBadge = ({ isOffset = false, size = 16 }) => (\n <IconBacking size={size} sx={{ ...offsetStyle(isOffset) }}>\n <MonetizationOnIcon sx={{ color: 'categories.income', fontSize: size, ...iconStyle }} />\n </IconBacking>\n)\n\nexport const MissedBadge = ({ isOffset = false, size = 16 }) => (\n <IconBacking size={size} sx={{ ...offsetStyle(isOffset) }}>\n <CancelIcon color=\"error\" sx={{ fontSize: size, ...iconStyle }} />\n </IconBacking>\n)\n\nexport const PaidBadge = ({ isOffset = false, size = 16 }) => (\n <IconBacking size={size} sx={{ ...offsetStyle(isOffset) }}>\n <CheckCircleIcon color=\"success\" sx={{ fontSize: size, ...iconStyle }} />\n </IconBacking>\n)\n","import { format } from 'date-fns/format'\nimport { isValid } from 'date-fns/isValid'\nimport { buildDynamicCopy, RecurrenceTypes, type RecurringCopy } from '../../common'\n\ninterface GetRecurrenceArgs {\n copy: RecurringCopy\n date: Date | null\n type: RecurrenceTypes\n}\n\nexport const getRecurrence = ({ copy, date, type }: GetRecurrenceArgs) => {\n let recurrenceType =\n date && isValid(date)\n ? buildDynamicCopy(copy.monthly_ordinal, format(date, 'do'))\n : copy.monthly\n switch (type) {\n case RecurrenceTypes.EveryQuarter:\n recurrenceType = date\n ? buildDynamicCopy(copy.quarterly_ordinal, format(date, 'do'))\n : copy.quarterly\n break\n case RecurrenceTypes.EveryWeek:\n recurrenceType = date\n ? buildDynamicCopy(copy.weekly_ordinal, format(date, 'do'))\n : copy.weekly\n break\n case RecurrenceTypes.EveryYear:\n recurrenceType = date\n ? buildDynamicCopy(copy.anually_ordinal, format(date, 'do'))\n : copy.anually\n break\n case RecurrenceTypes.EveryOtherWeek:\n recurrenceType = date\n ? buildDynamicCopy(copy.every_other_week_ordinal, format(date, 'do'))\n : copy.every_other_week\n break\n case RecurrenceTypes.EveryOtherMonth:\n recurrenceType = date\n ? buildDynamicCopy(copy.every_other_month_ordinal, format(date, 'do'))\n : copy.every_other_month\n break\n case RecurrenceTypes.EveryOtherQuarter:\n recurrenceType = date\n ? buildDynamicCopy(copy.every_other_quarter_ordinal, format(date, 'do'))\n : copy.every_other_quarter\n break\n }\n\n return recurrenceType as string\n}\n","import {\n type Activity,\n ActivityStatus,\n buildDynamicCopy,\n DATE_FORMATS_INTL,\n formatDate,\n type RecurringCopy,\n} from '../../common'\n\nexport const getStatus = (activity: Activity, copy: RecurringCopy): string => {\n switch (activity.activityStatus) {\n case ActivityStatus.Paid:\n return activity.occurredOnDate\n ? (buildDynamicCopy(\n copy.paid_on,\n formatDate(activity.occurredOnDate, DATE_FORMATS_INTL.MONTH_DAY),\n ) as string)\n : copy.paid\n case ActivityStatus.Missed:\n return buildDynamicCopy(\n copy.missed_on,\n formatDate(activity.expectedDate, DATE_FORMATS_INTL.MONTH_DAY),\n ) as string\n case ActivityStatus.Upcoming:\n return buildDynamicCopy(\n copy.upcoming_on,\n formatDate(activity.expectedDate, DATE_FORMATS_INTL.MONTH_DAY),\n ) as string\n default:\n return copy.unknown\n }\n}\n","import React from 'react'\nimport { observer } from 'mobx-react-lite'\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 { Icon, InstitutionLogo, MerchantLogo, Text } from '@kyper/mui'\n\nimport {\n type Activity,\n ActivityStatus,\n ActivityType,\n Drawer,\n formatCurrency,\n useGlobalCopyStore,\n} from '../../common'\n\nimport ActivityDetails from './ActivityDetails'\nimport { IncomeBadge, MissedBadge, PaidBadge, UpcomingExpenseBadge } from './ActivityBadges'\nimport { getRecurrence } from '../util/getRecurrence'\nimport { getStatus } from '../util/getStatus'\n\nconst getStatusIcon = (activity: Activity): React.ReactNode => {\n if (activity.activityType === ActivityType.Income) {\n return <IncomeBadge />\n }\n\n switch (activity.activityStatus) {\n case ActivityStatus.Missed:\n return <MissedBadge />\n case ActivityStatus.Paid:\n return <PaidBadge />\n default:\n return <UpcomingExpenseBadge />\n }\n}\n\ninterface ActivityRowProps {\n activity: Activity\n isMini?: boolean\n onActivityClick?: (activity: Activity) => void\n showOrdinal?: boolean\n}\n\nconst ActivityRow: React.FC<ActivityRowProps> = ({\n activity,\n isMini = false,\n onActivityClick = () => {},\n showOrdinal = false,\n}) => {\n const { recurring: recurringCopy } = useGlobalCopyStore()\n\n // Use a guid rather than a boolean to force the drawer to close properly\n const [openGuid, setOpenGuid] = React.useState('')\n\n const isCredit = activity.activityType === ActivityType.Income\n const isPaid = activity.activityStatus === ActivityStatus.Paid\n const isMissed = activity.activityStatus === ActivityStatus.Missed\n const isUpcoming = activity.activityStatus === ActivityStatus.Upcoming\n\n let status = recurringCopy.paid?.toLowerCase()\n if (isMissed) {\n status = recurringCopy.missed?.toLowerCase()\n } else if (isUpcoming) {\n status = showOrdinal\n ? getRecurrence({\n copy: recurringCopy,\n date: activity.expectedDate,\n type: activity.recurrenceType,\n })\n : getRecurrence({ copy: recurringCopy, date: null, type: activity.recurrenceType })\n }\n\n const onItemClick = () => {\n setOpenGuid(activity.sequenceGuid || activity.scheduledPaymentGuid || '')\n onActivityClick(activity)\n }\n\n return (\n <ListItem disableGutters={true} disablePadding={true}>\n <ListItemButton onClick={onItemClick}>\n <ListItemAvatar>\n <MerchantLogo\n categoryGuid={activity.categoryGuid || ''}\n merchantGuid={activity.merchantGuid || ''}\n />\n </ListItemAvatar>\n <ListItemText>\n <Stack direction=\"row\" sx={{ textOverflow: 'ellipsis', textWrap: 'nowrap' }}>\n <Stack direction=\"column\" maxWidth=\"60%\">\n <Text bold={true} variant=\"Body\">\n {activity.name}\n </Text>\n <Stack alignItems=\"center\" direction=\"row\" gap={6}>\n {isMini ? (\n <Stack direction=\"row\" gap={4}>\n {getStatusIcon(activity)}\n <Text variant=\"XSmall\">{getStatus(activity, recurringCopy)}</Text>\n </Stack>\n ) : (\n <>\n {activity.institutionGuid && (\n <InstitutionLogo\n alt={activity.institution || ''}\n institutionGuid={activity.institutionGuid}\n size={12}\n />\n )}\n <Text variant=\"XSmall\">{activity.institution}</Text>\n </>\n )}\n </Stack>\n </Stack>\n\n <Stack\n alignItems=\"center\"\n direction=\"row\"\n flexGrow={1}\n gap={8}\n justifyContent=\"flex-end\"\n >\n <Stack alignItems=\"flex-end\">\n <Text bold={true} color={isCredit ? 'success.main' : 'text.primary'} variant=\"Body\">\n {isCredit ? '+' : ''}\n {formatCurrency(activity.amount, '0,0.00')}\n </Text>\n {!isMini && (\n <Stack alignItems=\"center\" direction=\"row\" gap={6} textTransform=\"uppercase\">\n {isPaid && <Icon color=\"success\" fill={true} name=\"check_circle\" size={12} />}\n {isMissed && <Icon color=\"error\" fill={true} name=\"cancel\" size={12} />}\n <Text bold={true} color=\"secondary.light\" variant=\"XSmall\">\n {status}\n </Text>\n </Stack>\n )}\n </Stack>\n </Stack>\n </Stack>\n </ListItemText>\n </ListItemButton>\n\n <Drawer\n ariaLabelClose={recurringCopy.close_drawer_aria}\n isOpen={openGuid === activity.sequenceGuid || openGuid === activity.scheduledPaymentGuid}\n onClose={() => setOpenGuid('')}\n title={\n activity.activityType !== ActivityType.Income\n ? recurringCopy.expense_details\n : recurringCopy.income_details\n }\n >\n <ActivityDetails activity={activity} onDeleted={() => setOpenGuid('')} />\n </Drawer>\n </ListItem>\n )\n}\n\nexport default observer(ActivityRow)\n","import { formatISO } from 'date-fns/formatISO'\nimport { getDay } from 'date-fns/getDay'\nimport { getDate } from 'date-fns/getDate'\nimport { getMonth } from 'date-fns/getMonth'\nimport { getUnixTime } from 'date-fns/getUnixTime'\n\nimport {\n type CashflowEvent,\n type CashflowSequence,\n type RepeatDay,\n type RepeatMonth,\n type ScheduledPayment,\n type Transaction,\n RecurrenceTypes,\n RepeatWeekday,\n} from '../../common'\n\nexport const buildNewCashflowSequence = (\n transaction: Transaction,\n recurrenceType: RecurrenceTypes,\n nextDate: Date,\n): CashflowSequence => {\n const cashflowSequence = {\n account_guid: transaction.account_guid,\n amount: transaction.amount,\n category_guid: transaction.category_guid,\n description: transaction.feed_description || transaction.description,\n name: transaction.description,\n repeat_day: null,\n repeat_interval: null,\n repeat_month: null,\n repeat_week: null,\n repeat_weekday: null,\n repeat_year: null,\n start_date: getUnixTime(nextDate),\n transaction_type: transaction.transaction_type,\n } as CashflowSequence\n\n switch (recurrenceType) {\n case RecurrenceTypes.EveryWeek:\n cashflowSequence.repeat_interval = '1'\n cashflowSequence.repeat_weekday = `${getDay(nextDate)}` as RepeatWeekday\n break\n case RecurrenceTypes.EveryOtherWeek:\n cashflowSequence.repeat_interval = '2'\n cashflowSequence.repeat_weekday = `${getDay(nextDate)}` as RepeatWeekday\n break\n case RecurrenceTypes.EveryMonth:\n cashflowSequence.repeat_day = `${getDate(nextDate)}` as RepeatDay\n break\n case RecurrenceTypes.EveryQuarter:\n cashflowSequence.repeat_interval = '3'\n cashflowSequence.repeat_day = `${getDate(nextDate)}` as RepeatDay\n break\n case RecurrenceTypes.EveryYear:\n cashflowSequence.repeat_day = `${getDate(nextDate)}` as RepeatDay\n cashflowSequence.repeat_month = `${getMonth(nextDate)}` as RepeatMonth\n break\n }\n\n return cashflowSequence\n}\n\nexport const buildNewCashflowEvent = (\n cashflowSequence: CashflowSequence,\n transaction: Transaction,\n) => {\n return {\n amount: transaction.amount,\n cashflow_sequence_guid: cashflowSequence.guid,\n category_guid: transaction.category_guid,\n description: transaction.feed_description || transaction.description,\n expected_date: transaction.date,\n name: transaction.description,\n occurred_on: transaction.date,\n transaction_guid: transaction.guid,\n transaction_type: transaction.transaction_type,\n } as CashflowEvent\n}\n\nexport const buildNewScheduledPayment = (\n transaction: Transaction,\n recurrenceType: RecurrenceTypes,\n nextDate: Date,\n) => {\n const payment = {\n amount: transaction.amount,\n description: transaction.feed_description || transaction.description,\n is_tracked_by_user: true,\n merchant_guid: transaction.merchant_guid,\n occurs_on: formatISO(nextDate, { representation: 'date' }),\n recurrence_day: 0,\n recurrence_type: RecurrenceTypes.EveryMonth,\n } as ScheduledPayment\n\n switch (recurrenceType) {\n case RecurrenceTypes.EveryWeek:\n case RecurrenceTypes.EveryOtherWeek:\n payment.recurrence_day = getDay(nextDate)\n break\n case RecurrenceTypes.EveryMonth:\n case RecurrenceTypes.EveryOtherMonth:\n case RecurrenceTypes.EveryQuarter:\n case RecurrenceTypes.EveryOtherQuarter:\n case RecurrenceTypes.EveryYear:\n payment.recurrence_day = getDate(nextDate)\n break\n }\n\n return payment\n}\n","import React from 'react'\nimport { observer } from 'mobx-react-lite'\n\nimport Stack from '@mui/material/Stack'\n\nimport { P } from '@kyper/mui'\n\nimport { SearchBox, useGlobalCopyStore } from '../../../../common'\nimport { TransactionList, useTransactionsUiStore } from '../../../../transactions'\n\ninterface SelectTransactionProps {\n bgcolor?: string\n description?: string\n onSearch: (value: string) => void\n onSelected: (guid: string) => void\n}\n\nconst SelectTransaction: React.FC<SelectTransactionProps> = ({\n bgcolor = 'background.default',\n description,\n onSearch,\n onSelected,\n}) => {\n const { recurring: recurringCopy } = useGlobalCopyStore()\n const { searchValue, setSearchValue } = useTransactionsUiStore()\n\n return (\n <Stack sx={{ bgcolor, gap: 16, pt: 8 }}>\n {description && <P sx={{ mx: 24 }}>{description}</P>}\n <SearchBox\n ariaLabel={recurringCopy.select_transaction_search_aria}\n cancelAriaLabel={recurringCopy.select_transaction_search_cancel_aria}\n onChange={(value) => {\n setSearchValue(value)\n onSearch(value)\n }}\n placeholder={recurringCopy.select_transaction_search_placeholder}\n searchValue={searchValue}\n />\n <TransactionList bgcolor={bgcolor} height=\"auto\" onClick={onSelected} showLoader={false} />\n </Stack>\n )\n}\n\nexport default observer(SelectTransaction)\n","import React from 'react'\nimport { observer } from 'mobx-react-lite'\nimport { fromUnixTime } from 'date-fns/fromUnixTime'\n\nimport MenuItem from '@mui/material/MenuItem'\nimport Stack from '@mui/material/Stack'\nimport TextField from '@mui/material/TextField'\n\nimport { AdapterDateFns } from '@mui/x-date-pickers/AdapterDateFnsV3'\nimport { DatePicker } from '@mui/x-date-pickers'\nimport { LocalizationProvider } from '@mui/x-date-pickers/LocalizationProvider'\n\nimport { Icon, Text } from '@kyper/mui'\n\nimport { RecurrenceTypes, useGlobalCopyStore, type Transaction } from '../../../../common'\nimport SubheaderRow from '../../../../common/components/SubheaderRow'\n\nimport { TransactionRow } from '../../../../transactions'\n\nimport {\n fromUnixToDayOfWeekAndDate,\n getNextBiMonthlyDate,\n getNextBiQuarterlyDate,\n getNextBiWeeklyDate,\n getNextMonthlyDate,\n getNextQuarterlyDate,\n getNextWeeklyDate,\n getNextYearlyDate,\n} from '../../../../common/utils/DateUtil'\n\ninterface ActivityDetailsProps {\n bgcolor?: string\n frequency: RecurrenceTypes\n isIncome: boolean\n nextDate: Date | null\n onFrequencyChange: (frequency: RecurrenceTypes) => void\n onNextDateChange: (date: Date | null) => void\n transaction: Transaction\n}\n\nconst AddActivityDetails: React.FC<ActivityDetailsProps> = ({\n bgcolor = 'background.default',\n frequency,\n isIncome,\n nextDate,\n onFrequencyChange,\n onNextDateChange,\n transaction,\n}) => {\n const { recurring: recurringCopy } = useGlobalCopyStore()\n const frequencies = [\n { id: RecurrenceTypes.EveryWeek, label: recurringCopy.frequency_every_week },\n { id: RecurrenceTypes.EveryOtherWeek, label: recurringCopy.frequency_every_other_week },\n { id: RecurrenceTypes.EveryMonth, label: recurringCopy.frequency_every_month },\n { id: RecurrenceTypes.EveryOtherMonth, label: recurringCopy.frequency_every_other_month },\n { id: RecurrenceTypes.EveryQuarter, label: recurringCopy.frequency_every_quarter },\n { id: RecurrenceTypes.EveryOtherQuarter, label: recurringCopy.frequency_every_other_quarter },\n { id: RecurrenceTypes.EveryYear, label: recurringCopy.frequency_every_year },\n ]\n\n React.useEffect(() => {\n // Calculate the next payment date based on monthly\n const transactionDate = fromUnixTime(transaction.date)\n\n onNextDateChange(getNextMonthlyDate(transactionDate))\n\n // Default the frequency to Monthly\n onFrequencyChange(RecurrenceTypes.EveryMonth)\n }, [transaction])\n\n const handleFrequencyChange = (e: React.ChangeEvent<HTMLTextAreaElement>) => {\n const transactionDate = fromUnixTime(transaction.date)\n\n switch (Number(e.target.value)) {\n case RecurrenceTypes.EveryWeek:\n onNextDateChange(getNextWeeklyDate(transactionDate))\n break\n case RecurrenceTypes.EveryOtherWeek:\n onNextDateChange(getNextBiWeeklyDate(transactionDate))\n break\n case RecurrenceTypes.EveryMonth:\n onNextDateChange(getNextMonthlyDate(transactionDate))\n break\n case RecurrenceTypes.EveryOtherMonth:\n onNextDateChange(getNextBiMonthlyDate(transactionDate))\n break\n case RecurrenceTypes.EveryQuarter:\n onNextDateChange(getNextQuarterlyDate(transactionDate))\n break\n case RecurrenceTypes.EveryOtherQuarter:\n onNextDateChange(getNextBiQuarterlyDate(transactionDate))\n break\n case RecurrenceTypes.EveryYear:\n onNextDateChange(getNextYearlyDate(transactionDate))\n break\n }\n onFrequencyChange(Number(e.target.value))\n }\n\n return (\n <Stack bgcolor={bgcolor} gap={24} height=\"100%\">\n <Stack>\n <SubheaderRow bgcolor={bgcolor}>\n {fromUnixToDayOfWeekAndDate(transaction.date)}\n </SubheaderRow>\n <TransactionRow transaction={transaction} />\n </Stack>\n\n <Text bold={true} sx={{ mx: 24 }} variant=\"Body\">\n {isIncome ? recurringCopy.income_schedule : recurringCopy.expense_schedule}\n </Text>\n\n <TextField\n InputLabelProps={{ shrink: true }}\n SelectProps={{\n IconComponent: (props) => (\n <Icon fill={false} name=\"expand_more\" size={20} sx={{ mr: 4 }} {...props} />\n ),\n }}\n defaultValue={0}\n label={recurringCopy.frequency}\n onChange={handleFrequencyChange}\n select={true}\n sx={{ mx: 24 }}\n value={frequency}\n variant=\"outlined\"\n >\n {frequencies.map((frequency) => (\n <MenuItem key={frequency.id} value={frequency.id}>\n {frequency.label}\n </MenuItem>\n ))}\n </TextField>\n\n <LocalizationProvider dateAdapter={AdapterDateFns}>\n <DatePicker\n disablePast={true}\n label={isIncome ? recurringCopy.income_date_label : recurringCopy.expense_date_label}\n onChange={onNextDateChange}\n sx={{ mx: 24 }}\n value={nextDate}\n />\n </LocalizationProvider>\n </Stack>\n )\n}\n\nexport default observer(AddActivityDetails)\n","import { CategoryGuids, type Transaction, TransactionType } from '../../common'\n\n// Returns true if the transaction is not income\nexport const expenseFilter = (t: Transaction) =>\n t.top_level_category_guid !== CategoryGuids.INCOME && t.transaction_type === TransactionType.DEBIT\n\n// Returns true if the transaction is an expense and it matches the search string\nexport const expenseFilterSearch = (t: Transaction, searchValue: string) => {\n if (expenseFilter(t)) {\n return (\n t.payee?.toLowerCase().includes(searchValue.toLowerCase()) ||\n t.description.toLowerCase().includes(searchValue.toLowerCase()) ||\n t.feed_description.toLowerCase().includes(searchValue.toLowerCase())\n )\n }\n return false\n}\n\n// Returns true if the transaction is income\nexport const incomeFilter = (t: Transaction) =>\n t.top_level_category_guid === CategoryGuids.INCOME ||\n (t.top_level_category_guid === CategoryGuids.TRANSFER &&\n t.transaction_type === TransactionType.CREDIT)\n\n// Returns true if the transaction is income and it matches the search string\nexport const incomeFilterSearch = (t: Transaction, searchValue: string) => {\n if (incomeFilter(t)) {\n return (\n t.payee?.toLowerCase().includes(searchValue.toLowerCase()) ||\n t.description?.toLowerCase().includes(searchValue.toLowerCase()) ||\n t.feed_description?.toLowerCase().includes(searchValue.toLowerCase())\n )\n }\n return false\n}\n","import React from 'react'\nimport { observer } from 'mobx-react-lite'\n\nimport Box from '@mui/material/Box'\nimport Divider from '@mui/material/Divider'\nimport ListItem from '@mui/material/ListItem'\nimport ListItemButton from '@mui/material/ListItemButton'\nimport ListItemText from '@mui/material/ListItemText'\nimport Stack from '@mui/material/Stack'\n\nimport { Icon, Text } from '@kyper/mui'\n\nimport {\n type Transaction,\n Drawer,\n RecurrenceTypes,\n useGlobalCopyStore,\n useRecurringActivityStore,\n useTransactionStore,\n} from '../../../../common'\n\nimport {\n buildNewCashflowEvent,\n buildNewCashflowSequence,\n buildNewScheduledPayment,\n} from '../../../util/buildNewActivity'\n\nimport SelectTransaction from './SelectTransaction'\nimport AddActivityDetails from './AddActivityDetails'\nimport {\n expenseFilter,\n expenseFilterSearch,\n incomeFilter,\n incomeFilterSearch,\n} from '../../../../transactions/utils/Filters'\n\ninterface AddActivityProps {\n isIncome?: boolean\n label: string\n onAddActivity?: () => void\n}\n\nconst AddActivity: React.FC<AddActivityProps> = ({\n isIncome = false,\n label,\n onAddActivity = () => null,\n}) => {\n const { recurring: recurringCopy } = useGlobalCopyStore()\n const { addCashflowEvent, addCashflowSequence, addScheduledPayment } = useRecurringActivityStore()\n\n const { filter, setFilter, transactions } = useTransactionStore()\n\n const [isSelectTransactionOpen, setIsSelectTransactionOpen] = React.useState(false)\n const [transactionGuid, setTransactionGuid] = React.useState('')\n const [frequency, setFrequency] = React.useState(RecurrenceTypes.EveryMonth)\n const [nextDate, setNextDate] = React.useState<Date | null>(null)\n\n const transaction = React.useMemo(\n () => transactions.find((t) => t.guid === transactionGuid),\n [transactionGuid],\n )\n\n const handleOpen = () => {\n setIsSelectTransactionOpen(true)\n\n if (isIncome) {\n setFilter({ ...filter, custom: incomeFilter })\n } else {\n setFilter({ ...filter, custom: expenseFilter })\n }\n }\n\n const handleAddActivity = async () => {\n onAddActivity()\n\n if (!transaction || !nextDate) {\n closeOnAdd()\n return\n }\n\n if (isIncome) {\n // Create CashflowSequence & CashflowEvent if Income\n const sequence = buildNewCashflowSequence(transaction, frequency, nextDate)\n\n const newSequence = await addCashflowSequence(sequence)\n if (newSequence) {\n const event = buildNewCashflowEvent(newSequence, transaction)\n await addCashflowEvent(event)\n }\n } else {\n // Create ScheduledPayment if Expense\n const payment = buildNewScheduledPayment(transaction, frequency, nextDate)\n await addScheduledPayment(payment, transaction)\n }\n\n closeOnAdd()\n }\n\n const closeOnAdd = () => {\n setTransactionGuid('')\n setIsSelectTransactionOpen(false)\n }\n\n return (\n <Box>\n <ListItem disableGutters={true} disablePadding={true}>\n <ListItemButton onClick={handleOpen}>\n <ListItemText>\n <Stack alignItems=\"center\" direction=\"row\" justifyContent=\"space-between\">\n <Stack alignItems=\"center\" direction=\"row\" gap={8}>\n <Icon fill={true} name=\"add_box\" size={24} sx={{ color: 'action.active' }} />\n <Text bold={true} sx={{ color: 'action.active' }} variant=\"Body\">\n {label}\n </Text>\n </Stack>\n <Icon name=\"chevron_right\" size={24} sx={{ color: 'primary.light' }} />\n </Stack>\n </ListItemText>\n </ListItemButton>\n </ListItem>\n <Divider />\n\n <Drawer\n ariaLabelClose={recurringCopy.close_drawer_aria}\n isOpen={isSelectTransactionOpen}\n onClose={() => setIsSelectTransactionOpen(false)}\n title={label}\n >\n <SelectTransaction\n description={\n isIncome ? recurringCopy.add_income_description : recurringCopy.add_expense_description\n }\n onSearch={(searchValue) => {\n setFilter({\n ...filter,\n custom: (transaction: Transaction) => {\n if (isIncome) {\n return searchValue\n ? incomeFilterSearch(transaction, searchValue)\n : incomeFilter(transaction)\n } else {\n return searchValue\n ? expenseFilterSearch(transaction, searchValue)\n : expenseFilter(transaction)\n }\n },\n })\n }}\n onSelected={(guid) => setTransactionGuid(guid)}\n />\n </Drawer>\n\n <Drawer\n ariaLabelClose={recurringCopy.close_drawer_aria}\n isOpen={Boolean(transactionGuid)}\n onClose={() => setTransactionGuid('')}\n onPrimaryAction={handleAddActivity}\n title={isIncome ? recurringCopy.income_details : recurringCopy.expense_details}\n >\n {transaction && (\n <AddActivityDetails\n frequency={frequency}\n isIncome={isIncome}\n nextDate={nextDate}\n onFrequencyChange={setFrequency}\n onNextDateChange={setNextDate}\n transaction={transaction}\n />\n )}\n </Drawer>\n </Box>\n )\n}\n\nexport default observer(AddActivity)\n","import React from 'react'\nimport { parseISO } from 'date-fns/parseISO'\nimport { observer } from 'mobx-react-lite'\n\nimport Divider from '@mui/material/Divider'\nimport List from '@mui/material/List'\n\nimport {\n Account,\n Activity,\n ActivityStatus,\n ActivityType,\n ANALYTICS_EVENTS,\n ScheduledPayment,\n Transaction,\n useEvent,\n useGlobalCopyStore,\n useGlobalUiStore,\n useRecurringActivityStore,\n useTransactionStore,\n} from '../../../../common'\nimport ActivityRow from '../../ActivityRow'\nimport AddActivity from './AddActivity'\n\nconst buildExpenses = (\n accounts: Account[],\n payments: ScheduledPayment[],\n transactions: Transaction[],\n) => {\n return payments.map((payment) => {\n // TODO: Refactor to shared filter functions\n const transaction = transactions.find((t) => t.scheduled_payment_guid === payment.guid)\n const account = accounts.find((a) => a.guid === transaction?.account_guid)\n\n return {\n activityStatus: ActivityStatus.Upcoming,\n activityType: ActivityType.Expense,\n amount: payment.amount,\n categoryGuid: transaction?.category_guid,\n expectedDate: parseISO(payment.occurs_on),\n name: payment.description,\n institution: account?.user_name,\n institutionGuid: account?.institution_guid,\n merchantGuid: payment.merchant_guid,\n recurrenceType: payment.recurrence_type,\n recurrenceDay: payment.recurrence_day,\n scheduledPaymentGuid: payment.guid,\n } as Activity\n })\n}\n\nconst ManageExpenses = () => {\n const { recurring: recurringCopy } = useGlobalCopyStore()\n const { scheduledPayments } = useRecurringActivityStore()\n const { transactions } = useTransactionStore()\n const { selectedAccounts } = useGlobalUiStore()\n const { onEvent } = useEvent()\n\n const expenses = buildExpenses(selectedAccounts, scheduledPayments, transactions)\n\n const onActivityClick = (activity: Activity) => {\n onEvent(ANALYTICS_EVENTS.RECURRING_ACTIVITY_CLICK_EXPENSE, {\n transaction_guid: activity.transactionGuid,\n })\n }\n\n const onAddActivity = () => {\n onEvent(ANALYTICS_EVENTS.RECURRING_ACTIVITY_CLICK_ADD_EXPENSE)\n }\n\n return (\n <List sx={{ bgcolor: 'background.paper' }}>\n {expenses.map((expense, index) => (\n <React.Fragment key={expense.scheduledPaymentGuid}>\n <ActivityRow activity={expense} onActivityClick={onActivityClick} showOrdinal={true} />\n <Divider variant={index < expenses.length - 1 ? 'inset' : 'fullWidth'} />\n </React.Fragment>\n ))}\n <AddActivity label={recurringCopy.add_expense} onAddActivity={onAddActivity} />\n </List>\n )\n}\n\nexport default observer(ManageExpenses)\n","import { addDays } from 'date-fns/addDays'\nimport { addMonths } from 'date-fns/addMonths'\nimport { addQuarters } from 'date-fns/addQuarters'\nimport { addWeeks } from 'date-fns/addWeeks'\nimport { addYears } from 'date-fns/addYears'\nimport { fromUnixTime } from 'date-fns/fromUnixTime'\nimport { getUnixTime } from 'date-fns/getUnixTime'\nimport { isAfter } from 'date-fns/isAfter'\nimport { isBefore } from 'date-fns/isBefore'\nimport { isWithinInterval } from 'date-fns/isWithinInterval'\nimport { nextDay } from 'date-fns/nextDay'\nimport { parseISO } from 'date-fns/parseISO'\nimport { setDate } from 'date-fns/setDate'\nimport { startOfMonth } from 'date-fns/startOfMonth'\nimport { startOfToday } from 'date-fns/startOfToday'\nimport { subDays } from 'date-fns/subDays'\nimport { subWeeks } from 'date-fns/subWeeks'\nimport { Day } from 'date-fns/types'\n\nimport {\n type Account,\n type Activity,\n ActivityStatus,\n ActivityType,\n type CashflowEvent,\n type CashflowSequence,\n RecurrenceTypes,\n type ScheduledPayment,\n type Transaction,\n} from '../../common'\n\nimport { fromUnixUTC } from '../../common/utils/DateUtil'\n\nconst buildInstitutionName = (account: Account) => {\n let name = account.user_name || account.feed_name || ''\n if (account.account_number) {\n name = `${name} *${account.account_number}`\n }\n return name\n}\n\nexport const getRecurrenceType = (sequence?: CashflowSequence) => {\n if (!sequence) return RecurrenceTypes.Unknown\n\n if (sequence.repeat_interval === '1') return RecurrenceTypes.EveryWeek\n if (sequence.repeat_interval === '2') return RecurrenceTypes.EveryOtherWeek\n if (sequence.repeat_day && !sequence.repeat_month && !sequence.repeat_interval)\n return RecurrenceTypes.EveryMonth\n if (sequence.repeat_day && sequence.repeat_interval === '3') return RecurrenceTypes.EveryQuarter\n if (sequence.repeat_day && sequence.repeat_month) return RecurrenceTypes.EveryYear\n\n return RecurrenceTypes.Unknown\n}\n\nexport const buildActivities = (\n accounts: Account[],\n events: CashflowEvent[],\n payments: ScheduledPayment[],\n projected: CashflowEvent[],\n sequences: CashflowSequence[],\n transactions: Transaction[],\n): Activity[] => {\n // Add paid income\n const paidIncome = events\n .filter((e) => {\n const sequence = sequences.find((s) => s.guid === e.cashflow_sequence_guid)\n const transaction = transactions.find((t) => t.guid === e.transaction_guid)\n\n return sequence?.end_date === null && transaction\n })\n .map((e) => {\n const sequence = sequences.find((s) => s.guid === e.cashflow_sequence_guid)\n const transaction = transactions.find((t) => t.guid === e.transaction_guid)\n const account = accounts.find((a) => a.guid === transaction?.account_guid)\n\n return {\n accountGuid: sequence?.account_guid || account?.guid,\n activityStatus: ActivityStatus.Paid,\n activityType: ActivityType.Income,\n amount: e.amount,\n categoryGuid: e.category_guid,\n expectedDate: fromUnixUTC(e.expected_date),\n occurredOnDate: e.occurred_on ? fromUnixUTC(e.occurred_on) : undefined,\n name: e.name,\n institution: account ? buildInstitutionName(account) : undefined,\n institutionGuid: account?.institution_guid,\n merchantGuid: transaction?.merchant_guid || undefined,\n recurrenceType: getRecurrenceType(sequence),\n recurrenceDay: sequence?.repeat_day ? Number(sequence?.repeat_day) : undefined,\n sequenceGuid: sequence?.guid,\n transactionGuid: e.transaction_guid,\n }\n })\n\n // Add expected income for the next 30 days\n const upcomingIncome = projected\n .filter((e) =>\n isWithinInterval(fromUnixTime(e.expected_date), {\n start: startOfMonth(startOfToday()),\n end: addDays(startOfToday(), 30),\n }),\n )\n .filter((e) => {\n const sequence = sequences.find((s) => s.guid === e.cashflow_sequence_guid)\n const actual = events.find(\n (a) => a.cashflow_sequence_guid === sequence?.guid && a.expected_date === e.expected_date,\n )\n return sequence?.end_date === null && !actual\n })\n .map((e) => {\n const sequence = sequences.find((s) => s.guid === e.cashflow_sequence_guid)\n // Find a past event to fill in account and merchant information\n const pastEvent = events.find(\n (p) => p.cashflow_sequence_guid === e.cashflow_sequence_guid && Boolean(p.transaction_guid),\n )\n const transaction = transactions.find((t) => t.guid === pastEvent?.transaction_guid)\n const account = accounts.find((a) => a.guid === transaction?.account_guid)\n\n return {\n accountGuid: sequence?.account_guid || account?.guid,\n activityStatus: ActivityStatus.Upcoming,\n activityType: ActivityType.Income,\n amount: e.amount,\n categoryGuid: e.category_guid,\n expectedDate: fromUnixUTC(e.expected_date),\n name: e.name,\n institution: account ? buildInstitutionName(account) : undefined,\n institutionGuid: account?.institution_guid,\n merchantGuid: transaction?.merchant_guid || undefined,\n recurrenceType: getRecurrenceType(sequence),\n recurrenceDay: sequence?.repeat_day ? Number(sequence?.repeat_day) : undefined,\n sequenceGuid: sequence?.guid,\n transactionGuid: undefined,\n }\n })\n\n // Add scheduled payments for the next 30 days\n const expenses = [] as Activity[]\n\n if (payments) {\n payments.forEach((payment) => expenses.push(...buildExpenses(accounts, payment, transactions)))\n }\n\n const activities = [...paidIncome, ...upcomingIncome, ...expenses] as Activity[]\n\n return activities.sort(\n (a, b) =>\n getUnixTime(a.occurredOnDate || a.expectedDate) -\n getUnixTime(b.occurredOnDate || b.expectedDate),\n )\n}\n\nconst buildExpenses = (\n accounts: Account[],\n payment: ScheduledPayment,\n transactions: Transaction[],\n): Activity[] => {\n const expenses = [] as Activity[]\n\n const pastTransaction = transactions.find((t) => t.scheduled_payment_guid === payment.guid)\n if (!pastTransaction) return []\n\n const account = accounts.find((a) => a.guid === pastTransaction?.account_guid)\n const occursOn = parseISO(payment.occurs_on)\n const baseExpense = {\n accountGuid: account?.guid,\n activityStatus: ActivityStatus.Upcoming,\n activityType: ActivityType.Expense,\n amount: payment.amount,\n categoryGuid: pastTransaction?.category_guid,\n expectedDate: occursOn,\n name: payment.description,\n institution: account ? buildInstitutionName(account) : undefined,\n institutionGuid: account?.institution_guid,\n merchantGuid: payment.merchant_guid,\n recurrenceType: payment.recurrence_type,\n recurrenceDay: payment.recurrence_day,\n scheduledPaymentGuid: payment.guid,\n transactionGuid: '',\n }\n\n const day = payment.recurrence_day\n const today = startOfToday()\n const startDate = startOfMonth(startOfToday())\n const endDate = addDays(startOfToday(), 30)\n\n let nextDate = startDate\n switch (payment.recurrence_type) {\n case RecurrenceTypes.EveryWeek:\n // Add upcoming expenses for each week in the current month + next month\n nextDate = nextDay(nextDate, day as Day)\n while (isBefore(nextDate, endDate)) {\n expenses.push({\n ...baseExpense,\n expectedDate: nextDate,\n })\n nextDate = nextDay(nextDate, day as Day)\n }\n break\n case RecurrenceTypes.EveryOtherWeek:\n // Add upcoming expense for every other week in current month + next month\n if (isBefore(occursOn, startDate)) {\n nextDate = addWeeks(occursOn, 2)\n while (isBefore(nextDate, endDate)) {\n if (isAfter(nextDate, startDate)) {\n expenses.push({\n ...baseExpense,\n expectedDate: nextDate,\n })\n }\n nextDate = addWeeks(nextDate, 2)\n }\n } else {\n // Add for occurs_on\n expenses.push({\n ...baseExpense,\n expectedDate: occursOn,\n })\n // Add past starting at occurs_on\n nextDate = subWeeks(occursOn, 2)\n while (isAfter(nextDate, startDate)) {\n expenses.push({\n ...baseExpense,\n expectedDate: nextDate,\n })\n nextDate = subWeeks(nextDate, 2)\n }\n\n // Add future starting at occurs_on\n nextDate = addWeeks(occursOn, 2)\n while (isBefore(nextDate, endDate)) {\n expenses.push({\n ...baseExpense,\n expectedDate: nextDate,\n })\n nextDate = addWeeks(nextDate, 2)\n }\n }\n break\n case RecurrenceTypes.EveryMonth:\n // Add expense for current month and next month\n expenses.push({\n ...baseExpense,\n expectedDate: setDate(nextDate, day),\n })\n expenses.push({\n ...baseExpense,\n expectedDate: addMonths(setDate(nextDate, day), 1),\n })\n break\n case RecurrenceTypes.EveryOtherMonth:\n // Use occurs_on to calculate next expense\n if (isBefore(occursOn, startDate)) {\n if (isBefore(addMonths(occursOn, 2), endDate)) {\n expenses.push({\n ...baseExpense,\n expectedDate: addMonths(occursOn, 2),\n })\n }\n } else if (isBefore(occursOn, endDate)) {\n expenses.push({\n ...baseExpense,\n expectedDate: occursOn,\n })\n }\n break\n case RecurrenceTypes.EveryQuarter:\n // Use occurs_on to calculate next expense\n if (isBefore(occursOn, startDate)) {\n if (isBefore(addQuarters(occursOn, 1), endDate)) {\n expenses.push({\n ...baseExpense,\n expectedDate: addQuarters(occursOn, 1),\n })\n }\n } else if (isBefore(occursOn, endDate)) {\n expenses.push({\n ...baseExpense,\n expectedDate: occursOn,\n })\n }\n break\n case RecurrenceTypes.EveryOtherQuarter:\n // Use occurs_on to calculate next expense\n if (isBefore(occursOn, startDate)) {\n if (isBefore(addQuarters(occursOn, 2), endDate)) {\n expenses.push({\n ...baseExpense,\n expectedDate: addQuarters(occursOn, 2),\n })\n }\n } else if (isBefore(occursOn, endDate)) {\n expenses.push({\n ...baseExpense,\n expectedDate: occursOn,\n })\n }\n break\n case RecurrenceTypes.EveryYear:\n // Use occurs_on to calculate next expense\n if (isBefore(occursOn, startDate)) {\n if (isBefore(addYears(occursOn, 1), endDate)) {\n expenses.push({\n ...baseExpense,\n expectedDate: addYears(occursOn, 1),\n })\n }\n } else if (isBefore(occursOn, endDate)) {\n expenses.push({\n ...baseExpense,\n expectedDate: occursOn,\n })\n }\n break\n }\n\n expenses.forEach((exp) => {\n const transaction = transactions.find(\n (t) =>\n t.scheduled_payment_guid === exp.scheduledPaymentGuid &&\n t.date > getUnixTime(subDays(exp.expectedDate, 3)) &&\n t.date < getUnixTime(addDays(exp.expectedDate, 3)),\n )\n if (transaction) {\n exp.transactionGuid = transaction.guid\n exp.occurredOnDate = fromUnixTime(transaction.date)\n exp.activityStatus = ActivityStatus.Paid\n } else if (isBefore(exp.expectedDate, subDays(today, 3))) {\n exp.activityStatus = ActivityStatus.Missed\n }\n })\n\n return expenses\n}\n","import React from 'react'\nimport { observer } from 'mobx-react-lite'\n\nimport Divider from '@mui/material/Divider'\nimport List from '@mui/material/List'\n\nimport {\n Account,\n Activity,\n ActivityStatus,\n ActivityType,\n ANALYTICS_EVENTS,\n CashflowEvent,\n CashflowSequence,\n Transaction,\n useEvent,\n useGlobalCopyStore,\n useGlobalUiStore,\n useRecurringActivityStore,\n useTransactionStore,\n} from '../../../../common'\nimport { fromUnixUTC } from '../../../../common/utils/DateUtil'\nimport { getRecurrenceType } from '../../../util/buildActivities'\nimport ActivityRow from '../../ActivityRow'\nimport AddActivity from './AddActivity'\n\nconst buildIncome = (\n accounts: Account[],\n events: CashflowEvent[],\n projectedEvents: CashflowEvent[],\n sequences: CashflowSequence[],\n transactions: Transaction[],\n) => {\n return sequences.map((sequence) => {\n const event = events.find((e) => e.cashflow_sequence_guid === sequence.guid)\n const projected = projectedEvents.find((e) => e.cashflow_sequence_guid === sequence.guid)\n const transaction = transactions.find((t) => t.guid === event?.transaction_guid)\n const account = accounts.find((a) => a.guid === transaction?.account_guid)\n\n // Fallback in case both event and projected are null, which should never happen\n let expectedDate = new Date()\n if (event) {\n expectedDate = fromUnixUTC(event.expected_date)\n } else if (projected) {\n expectedDate = fromUnixUTC(projected.expected_date)\n }\n return {\n activityStatus: ActivityStatus.Upcoming,\n activityType: ActivityType.Income,\n amount: sequence.amount,\n categoryGuid: event?.category_guid,\n expectedDate: expectedDate,\n name: sequence.name,\n institution: account?.user_name,\n institutionGuid: account?.institution_guid,\n merchantGuid: transaction?.merchant_guid,\n recurrenceType: getRecurrenceType(sequence),\n recurrenceDay: Number(sequence.repeat_day),\n sequenceGuid: sequence.guid,\n } as Activity\n })\n}\n\nconst ManageIncome = () => {\n const { recurring: recurringCopy } = useGlobalCopyStore()\n const { selectedAccounts } = useGlobalUiStore()\n const { cashflowEvents, cashflowSequences, projectedEvents } = useRecurringActivityStore()\n const { transactions } = useTransactionStore()\n const { onEvent } = useEvent()\n\n const income = buildIncome(\n selectedAccounts,\n cashflowEvents,\n projectedEvents,\n cashflowSequences.filter((cs) => !cs.end_date),\n transactions,\n )\n\n const onActivityClick = (activity: Activity) => {\n onEvent(ANALYTICS_EVENTS.RECURRING_ACTIVITY_CLICK_INCOME, {\n transaction_guid: activity.transactionGuid,\n })\n }\n\n const onAddActivity = () => {\n onEvent(ANALYTICS_EVENTS.RECURRING_ACTIVITY_CLICK_ADD_INCOME)\n }\n\n return (\n <List sx={{ bgcolor: 'background.paper' }}>\n {income.map((item, index) => (\n <React.Fragment key={item.sequenceGuid}>\n <ActivityRow activity={item} onActivityClick={onActivityClick} showOrdinal={true} />\n <Divider variant={index < income.length - 1 ? 'inset' : 'fullWidth'} />\n </React.Fragment>\n ))}\n <AddActivity isIncome={true} label={recurringCopy.add_income} onAddActivity={onAddActivity} />\n </List>\n )\n}\n\nexport default observer(ManageIncome)\n","import React from 'react'\nimport { observer } from 'mobx-react-lite'\n\nimport Box from '@mui/material/Box'\nimport Tab from '@mui/material/Tab'\nimport Tabs from '@mui/material/Tabs'\n\nimport ManageExpenses from './activitysettings/ManageExpenses'\nimport ManageIncome from './activitysettings/ManageIncome'\nimport { useEvent, useGlobalCopyStore } from '../../../common'\n\nconst ActivitySettings = () => {\n const [selectedTab, setSelectedTab] = React.useState(0)\n const { onEvent } = useEvent()\n const { recurring: recurringCopy } = useGlobalCopyStore()\n\n const handleTabChange = (_event: React.SyntheticEvent, newValue: number) => {\n setSelectedTab(newValue)\n onEvent(\n newValue === 0\n ? 'recurring_transactions_widget_manage_expenses'\n : 'recurring_transactions_widget_edit_income',\n )\n }\n\n return (\n <Box bgcolor=\"background.default\" height=\"100%\">\n <Tabs\n onChange={handleTabChange}\n sx={{ bgcolor: 'background.paper' }}\n value={selectedTab}\n variant=\"fullWidth\"\n >\n <Tab label={recurringCopy.manage_expenses} />\n <Tab label={recurringCopy.manage_income} />\n </Tabs>\n {selectedTab === 0 && <ManageExpenses />}\n {selectedTab === 1 && <ManageIncome />}\n </Box>\n )\n}\n\nexport default observer(ActivitySettings)\n","import { addDays } from 'date-fns/addDays'\nimport { endOfMonth } from 'date-fns/endOfMonth'\nimport { isWithinInterval } from 'date-fns/isWithinInterval'\nimport { startOfMonth } from 'date-fns/startOfMonth'\nimport { startOfToday } from 'date-fns/startOfToday'\n\nimport { type Activity, ActivityType } from '../../common'\n\n// This adds up the total amount in a list of activities\nexport const totalReducer = (acc: number, curr: Activity) => acc + curr.amount\n\n// This filters activity to income during the current month\n// This is used by the Income activity bar\nexport const incomeFilter = (i: Activity) =>\n i.activityType === ActivityType.Income &&\n isWithinInterval(i.expectedDate, {\n start: startOfMonth(startOfToday()),\n end: endOfMonth(startOfToday()),\n })\n\n// This filters activity to expenses during the current month\n// This is used by the Expense activity bar\nexport const expenseFilter = (i: Activity) =>\n i.activityType === ActivityType.Expense &&\n isWithinInterval(i.expectedDate, {\n start: startOfMonth(startOfToday()),\n end: endOfMonth(startOfToday()),\n })\n\n// This filters all activity to the current month plus the next 30 days\nexport const dateFilter = (a: Activity) =>\n (a.occurredOnDate &&\n isWithinInterval(a.occurredOnDate, {\n start: startOfMonth(new Date()),\n end: addDays(startOfToday(), 30),\n })) ||\n isWithinInterval(a.expectedDate, {\n start: startOfMonth(new Date()),\n end: addDays(startOfToday(), 30),\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 ActivityStatus,\n ActivityType,\n useGlobalCopyStore,\n useGlobalUiStore,\n useRecurringActivityStore,\n} from '../../../common'\nimport { IncomeBadge, MissedBadge, PaidBadge, UpcomingExpenseBadge } from '../ActivityBadges'\n\nconst ActivityDay: React.FC<PickersDayProps<Date>> = ({ day, outsideCurrentMonth, ...other }) => {\n const { recurring: recurringCopy } = useGlobalCopyStore()\n const { selectedAccountGuids } = useGlobalUiStore()\n const { activities, setSelectedDay } = useRecurringActivityStore()\n\n const filteredActivities = React.useMemo(\n () =>\n activities.filter((activity) => selectedAccountGuids.includes(activity.accountGuid || '')),\n [selectedAccountGuids, activities],\n )\n\n const dayActivities = filteredActivities.filter((a) =>\n isSameDay(a.occurredOnDate || a.expectedDate, day),\n )\n const hasUpcoming = dayActivities.some(\n (a) => a.activityType === ActivityType.Expense && a.activityStatus === ActivityStatus.Upcoming,\n )\n const hasMissed = dayActivities.some(\n (a) => a.activityType === ActivityType.Expense && a.activityStatus === ActivityStatus.Missed,\n )\n const hasPaid = dayActivities.some(\n (a) => a.activityType === ActivityType.Expense && a.activityStatus === ActivityStatus.Paid,\n )\n const hasIncome = dayActivities.some((a) => a.activityType === ActivityType.Income)\n\n const totalBadges =\n (hasUpcoming ? 1 : 0) + (hasMissed ? 1 : 0) + (hasPaid ? 1 : 0) + (hasIncome ? 1 : 0)\n\n return (\n <Badge\n badgeContent={\n dayActivities.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={`\n ${hasPaid && recurringCopy.paid}, \n ${hasMissed && recurringCopy.missed}, \n ${hasUpcoming && recurringCopy.upcoming}, \n ${hasIncome && recurringCopy.income}`}\n day={day}\n onClick={() => setSelectedDay(day)}\n outsideCurrentMonth={outsideCurrentMonth}\n sx={{\n '&.MuiPickersDay-root': {\n ...(outsideCurrentMonth && {\n color: 'text.disabled',\n }),\n },\n }}\n {...other}\n />\n </Badge>\n )\n}\n\nexport default observer(ActivityDay)\n","import React from 'react'\nimport { observer } from 'mobx-react-lite'\n\nimport Stack from '@mui/material/Stack'\n\nimport { Text } from '@kyper/mui'\nimport { IncomeBadge, MissedBadge, PaidBadge, UpcomingExpenseBadge } from '../ActivityBadges'\nimport { useGlobalCopyStore } from '../../../common'\n\ninterface SymbolProps {\n icon: any\n label: string\n}\n\nconst Symbol: React.FC<SymbolProps> = ({ icon: Icon, label }) => (\n <Stack alignItems=\"center\" flexDirection=\"row\" sx={{ gap: 6 }}>\n <Icon />\n <Text variant=\"XSmall\">{label}</Text>\n </Stack>\n)\n\nconst Legend = () => {\n const { recurring: recurringCopy } = 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={recurringCopy.expense} />\n <Symbol icon={IncomeBadge} label={recurringCopy.income} />\n <Symbol icon={MissedBadge} label={recurringCopy.missed} />\n <Symbol icon={PaidBadge} label={recurringCopy.paid} />\n </Stack>\n )\n}\n\nexport default observer(Legend)\n","import React from 'react'\nimport { observer } from 'mobx-react-lite'\nimport { addMonths } from 'date-fns/addMonths'\nimport { endOfMonth } from 'date-fns/endOfMonth'\nimport { getWeeksInMonth } from 'date-fns/getWeeksInMonth'\nimport { startOfMonth } from 'date-fns/startOfMonth'\n\nimport Stack from '@mui/material/Stack'\nimport useTheme from '@mui/material/styles/useTheme'\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 useRecurringActivityStore,\n} from '../../../common'\nimport ActivityDay from './ActivityDay'\nimport Legend from './Legend'\n\nconst HEADER_HEIGHT = 58\n\nconst ActivityCalendar = () => {\n const theme = useTheme()\n const { onEvent } = useEvent()\n const { selectedDay } = useRecurringActivityStore()\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 onEvent(ANALYTICS_EVENTS.RECURRING_ACTIVITY_CLICK_CALENDAR_RIGHT)\n }\n\n const calendar = (\n <DateCalendar\n maxDate={endOfMonth(addMonths(new Date(), 1))}\n minDate={startOfMonth(new Date())}\n onMonthChange={handleMonthChange}\n showDaysOutsideCurrentMonth={true}\n slots={{\n day: ActivityDay,\n }}\n sx={{\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 fontSize: theme.typography.Body.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.Small.fontSize,\n },\n }}\n value={selectedDay}\n views={['day']}\n />\n )\n\n return (\n <Stack justifyContent=\"center\">\n <LocalizationProvider 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 <Legend />\n </LocalizationProvider>\n </Stack>\n )\n}\n\nexport default observer(ActivityCalendar)\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 { SxProps } from '@mui/material/styles'\n\nimport { Text } from '@kyper/mui'\n\nimport { type Activity, DATE_FORMATS_INTL, formatDate, useGlobalCopyStore } from '../../common'\nimport ActivityRow from './ActivityRow'\n\ninterface ActivityListProps {\n activities: Activity[]\n isMini?: boolean\n onResetClick?: () => void\n onActivityClick?: (activity: Activity) => void\n sx?: SxProps\n title?: string\n}\n\ninterface GroupedActivity {\n activities: Activity[]\n id: string\n expectedDate: Date\n}\n\nconst groupActivitiesByDate = (activities: Activity[]): GroupedActivity[] => {\n return activities.reduce((groupedActivities: GroupedActivity[], activity) => {\n const dateString = activity.expectedDate.toISOString().split('T')[0]\n const existingGroup = groupedActivities.find(\n (group) => group.expectedDate.toString() === activity.expectedDate.toString(),\n )\n\n if (existingGroup) {\n existingGroup.activities.push(activity)\n } else {\n groupedActivities.push({\n expectedDate: activity.expectedDate,\n id: `date-${dateString}`,\n activities: [activity],\n })\n }\n\n return groupedActivities\n }, [])\n}\n\nconst ActivityList: React.FC<ActivityListProps> = ({\n activities,\n isMini = false,\n onResetClick,\n onActivityClick,\n sx = {},\n title,\n}) => {\n const { recurring: recurringCopy } = useGlobalCopyStore()\n const groupedActivities = groupActivitiesByDate(activities)\n\n return (\n <Stack gap={8} mt={4} sx={sx}>\n {title && (\n <Stack alignItems=\"top\" direction=\"row\" justifyContent=\"space-between\" px={24}>\n <Text bold={true} variant=\"Body\">\n {title}\n </Text>\n {onResetClick && (\n <Button onClick={onResetClick} sx={{ mt: -12 }} variant=\"text\">\n {recurringCopy.reset}\n </Button>\n )}\n </Stack>\n )}\n\n {activities.length === 0 ? (\n <Text fontStyle=\"italic\" py={24} sx={{ textAlign: 'center' }}>\n {recurringCopy.no_activities}\n </Text>\n ) : (\n <List>\n {isMini\n ? activities.map((item, index) => (\n <>\n <ActivityRow\n activity={item}\n isMini={isMini}\n key={item.expectedDate.toString() + index}\n onActivityClick={onActivityClick}\n />\n <Divider sx={{ mx: 24 }} />\n </>\n ))\n : groupedActivities.map((day) => {\n return (\n <>\n <ListItem key={day.id}>\n <List\n subheader={\n <ListSubheader sx={{ bgcolor: 'background.paper', ml: 8, pb: 4, pt: 12 }}>\n <Text bold={true} variant=\"XSmall\">\n {formatDate(\n day.activities[0].occurredOnDate || day.activities[0].expectedDate,\n DATE_FORMATS_INTL.DAY_OF_WEEK_MONTH_DAY,\n )}\n </Text>\n </ListSubheader>\n }\n sx={{ width: '100%' }}\n >\n {day.activities.map((activity: Activity, i: number) => {\n return (\n <>\n <ActivityRow\n activity={activity}\n isMini={isMini}\n key={activity.expectedDate.toString() + i}\n onActivityClick={onActivityClick}\n />\n {i !== day.activities.length - 1 && (\n <Divider sx={{ ml: 64, mr: 24 }} />\n )}\n </>\n )\n })}\n </List>\n </ListItem>\n <Divider sx={{ mx: 24 }} />\n </>\n )\n })}\n </List>\n )}\n </Stack>\n )\n}\n\nexport default observer(ActivityList)\n","import React from 'react'\nimport { observer } from 'mobx-react-lite'\n\nimport Box from '@mui/material/Box'\nimport Button from '@mui/material/Button'\nimport Stack from '@mui/material/Stack'\nimport useTheme from '@mui/material/styles/useTheme'\n\nimport { Icon, Text } from '@kyper/mui'\n\nimport { formatCurrency, StatusBar, useGlobalCopyStore } from '../../common'\n\ninterface ActivityStatusProps {\n title: string\n expected: number\n paid: number\n missed?: number\n total: number\n onNewClick?: () => void\n}\n\nconst ActivityStatus: React.FC<ActivityStatusProps> = ({\n title,\n expected,\n paid,\n missed,\n total,\n onNewClick,\n}) => {\n const { recurring: recurringCopy } = useGlobalCopyStore()\n const theme = useTheme()\n\n const data = React.useMemo(() => {\n const activity = [{ color: theme.palette.success.main, percentage: `${paid / expected}` }]\n if (missed) {\n activity.push({ color: theme.palette.error.main, percentage: `${missed / expected}` })\n }\n return activity\n }, [paid, expected, missed])\n\n return (\n <Box px={24}>\n <Stack direction=\"row\" justifyContent=\"space-between\">\n <Box>\n <Text bold={true} variant=\"Body\">\n {`${total} ${title}`}\n </Text>\n <Stack direction=\"row\" gap={2} mb={8}>\n <Text bold={true} variant=\"XSmall\">\n {formatCurrency(paid, '0,0.00')}\n </Text>\n <Text variant=\"XSmall\">{recurringCopy.paid?.toLowerCase()}</Text>\n\n {missed !== undefined && (\n <>\n <Text variant=\"XSmall\">/</Text>\n <Text bold={true} variant=\"XSmall\">\n {formatCurrency(missed, '0,0.00')}\n </Text>\n <Text variant=\"XSmall\">{recurringCopy.missed?.toLowerCase()}</Text>\n </>\n )}\n\n <Text variant=\"XSmall\">/</Text>\n <Text bold={true} variant=\"XSmall\">\n {formatCurrency(expected, '0,0.00')}\n </Text>\n <Text variant=\"XSmall\">{recurringCopy.expected}</Text>\n </Stack>\n </Box>\n {onNewClick && (\n <Button onClick={onNewClick} startIcon={<Icon name=\"add\" />} variant=\"text\">\n {recurringCopy.add_new}\n </Button>\n )}\n </Stack>\n <StatusBar data={data} />\n </Box>\n )\n}\n\nexport default observer(ActivityStatus)\n","import React from 'react'\nimport { observer } from 'mobx-react-lite'\n\nimport Box from '@mui/material/Box'\nimport Grid from '@mui/material/Unstable_Grid2'\nimport Stack from '@mui/material/Stack'\nimport Tab from '@mui/material/Tab'\nimport Tabs from '@mui/material/Tabs'\n\nimport { Text } from '@kyper/mui'\n\nimport {\n Activity,\n ANALYTICS_EVENTS,\n buildDynamicCopy,\n DATE_FORMATS_INTL,\n formatDate,\n useEvent,\n useGlobalCopyStore,\n useRecurringActivityStore,\n useScreenSize,\n} from '../../common'\n\nimport {\n dateFilter,\n expenseFilter,\n incomeFilter,\n totalReducer,\n} from '../util/RecurringActivityUtils'\n\nimport ActivityCalendar from './activitycalendar/ActivityCalendar'\nimport ActivityList from './ActivityList'\nimport ActivityStatus from './ActivityStatus'\n\nconst RecurringActivity = () => {\n const { recurring: recurringCopy } = useGlobalCopyStore()\n const { isMobile, isSmallTablet } = useScreenSize()\n\n const {\n activities,\n missedActivities,\n paidActivities,\n selectedDay,\n selectedDayActivities,\n setSelectedDay,\n upcomingActivities,\n } = useRecurringActivityStore()\n\n const [selectedTab, setSelectedTab] = React.useState(0)\n const { onEvent } = useEvent()\n\n const all = activities.filter(dateFilter)\n const paid = paidActivities.filter(dateFilter)\n const missed = missedActivities.filter(dateFilter)\n\n const expenseExpected = all.filter(expenseFilter).reduce(totalReducer, 0)\n const expensePaid = paid.filter(expenseFilter).reduce(totalReducer, 0)\n const expenseMissed = missed.filter(expenseFilter).reduce(totalReducer, 0)\n const numExpenses = all.filter(expenseFilter).length\n\n const incomeExpected = all.filter(incomeFilter).reduce(totalReducer, 0)\n const incomePaid = paid.filter(incomeFilter).reduce(totalReducer, 0)\n const numIncome = all.filter(incomeFilter).length\n\n const handleTabChange = (_event: React.SyntheticEvent, newValue: number) => {\n setSelectedTab(newValue)\n }\n\n const onUpcomingActivityClick = (activity: Activity) => {\n onEvent(ANALYTICS_EVENTS.RECURRING_ACTIVITY_CLICK_UPCOMING, {\n transaction_guid: activity.transactionGuid,\n })\n }\n\n const onPaidActivityClick = (activity: Activity) => {\n onEvent(ANALYTICS_EVENTS.RECURRING_ACTIVITY_CLICK_PAID, {\n transaction_guid: activity.transactionGuid,\n })\n }\n\n return (\n <Grid container={true} pt={16} px={24} spacing={24}>\n <Grid md={true} sm={12}>\n <Stack gap={24}>\n <ActivityStatus\n expected={expenseExpected}\n missed={expenseMissed}\n //onNewClick={() => {}} // TODO: Replace with function to add new expense\n paid={expensePaid}\n title={recurringCopy.expenses}\n total={numExpenses}\n />\n <ActivityStatus\n expected={incomeExpected}\n //onNewClick={() => {}} // TODO: Replace with function to add new income\n paid={incomePaid}\n title={recurringCopy.deposits}\n total={numIncome}\n />\n\n {!isSmallTablet && !isMobile && (\n <ActivityList\n activities={upcomingActivities}\n onActivityClick={onUpcomingActivityClick}\n title={recurringCopy.upcoming_activity}\n />\n )}\n\n {(isSmallTablet || isMobile) && (\n <Box>\n <Tabs onChange={handleTabChange} value={selectedTab} variant=\"fullWidth\">\n <Tab\n label={\n <Text bold={true} sx={{ textTransform: 'none' }} variant=\"Body\">\n {recurringCopy.upcoming_activity}\n </Text>\n }\n />\n <Tab\n label={\n <Text bold={true} sx={{ textTransform: 'none' }} variant=\"Body\">\n {recurringCopy.paid_activity}\n </Text>\n }\n />\n </Tabs>\n {selectedTab === 0 && (\n <ActivityList\n activities={upcomingActivities}\n onActivityClick={onUpcomingActivityClick}\n />\n )}\n {selectedTab === 1 && (\n <ActivityList activities={paid} onActivityClick={onPaidActivityClick} />\n )}\n </Box>\n )}\n </Stack>\n </Grid>\n\n {!isSmallTablet && !isMobile && (\n <Grid sx={{ minWidth: 450 }} xs=\"auto\">\n <Stack gap={35}>\n <ActivityCalendar />\n <ActivityList\n activities={selectedDayActivities || paid}\n onActivityClick={onPaidActivityClick}\n onResetClick={selectedDay ? () => setSelectedDay(selectedDay) : undefined}\n title={\n selectedDay\n ? (buildDynamicCopy(\n recurringCopy.day_transactions,\n formatDate(selectedDay, DATE_FORMATS_INTL.MONTH_DAY),\n ) as string)\n : recurringCopy.paid_activity\n }\n />\n </Stack>\n </Grid>\n )}\n </Grid>\n )\n}\n\nexport default observer(RecurringActivity)\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 Stack from '@mui/material/Stack'\nimport Skeleton from '@mui/material/Skeleton'\n\nimport {\n ANALYTICS_EVENTS,\n Drawer,\n useAccountStore,\n useEvent,\n useGlobalCopyStore,\n useGlobalUiStore,\n useRecurringActivityStore,\n useTransactionStore,\n WidgetContainer,\n WidgetProps,\n} from '../common'\n\nimport ActivitySettings from './components/shared/ActivitySettings'\nimport RecurringActivity from './components/RecurringActivity'\n\nconst RecurringActivityWidget: React.FC<WidgetProps> = ({ onBackClick, sx = {} }) => {\n const { accounts } = useAccountStore()\n const { recurring: recurringCopy } = useGlobalCopyStore()\n const { isInitialized, selectedAccountGuids, setSelectedAccounts } = useGlobalUiStore()\n const { setFilter } = useTransactionStore()\n const { isLoading } = useRecurringActivityStore()\n const { onEvent } = useEvent()\n\n React.useEffect(() => {\n setSelectedAccounts(accounts)\n }, [accounts])\n\n React.useEffect(() => {\n if (isInitialized) {\n setFilter({\n dateRange: { start: subDays(startOfToday(), 90), end: endOfToday() },\n accounts: selectedAccountGuids,\n })\n }\n }, [isInitialized, selectedAccountGuids])\n\n const [isSettingsOpen, setIsSettingsOpen] = React.useState(false)\n\n return (\n <WidgetContainer\n accountOptions={accounts}\n actions={[\n {\n label: recurringCopy.settings,\n iconName: 'settings',\n onClick: () => {\n setIsSettingsOpen(true)\n onEvent(ANALYTICS_EVENTS.RECURRING_ACTIVITY_CLICK_SETTINGS)\n },\n },\n ]}\n onAccountsFilterClick={() => onEvent(ANALYTICS_EVENTS.RECURRING_ACTIVITY_CLICK_FILTER)}\n onBackClick={onBackClick}\n sx={sx}\n title={recurringCopy.title}\n >\n {isInitialized || !isLoading ? (\n <RecurringActivity />\n ) : (\n <Stack direction=\"column\" p={48} spacing={24}>\n <Skeleton height={100} variant=\"rounded\" width=\"100%\" />\n <Skeleton height={100} variant=\"rounded\" width=\"100%\" />\n <Skeleton height={600} variant=\"rounded\" width=\"100%\" />\n </Stack>\n )}\n <Drawer\n ariaLabelClose={recurringCopy.close_drawer_aria}\n isOpen={isSettingsOpen}\n onClose={() => setIsSettingsOpen(false)}\n shouldShowHeaderBorders={false}\n title={recurringCopy.settings}\n >\n <ActivitySettings />\n </Drawer>\n </WidgetContainer>\n )\n}\n\nexport default observer(RecurringActivityWidget)\n","import React from 'react'\nimport { observer } from 'mobx-react-lite'\n\nimport Divider from '@mui/material/Divider'\nimport Stack from '@mui/material/Stack'\n\nimport {\n buildDynamicCopy,\n DATE_FORMATS_INTL,\n formatDate,\n MiniWidgetProps,\n useGlobalCopyStore,\n useGlobalUiStore,\n useRecurringActivityStore,\n useWidgetContainerProvider,\n} from '../../common'\n\nimport ActivityCalendar from './activitycalendar/ActivityCalendar'\nimport ActivityList from './ActivityList'\n\nconst MiniWidgetContent: React.FC<MiniWidgetProps> = () => {\n const { recurring: recurringCopy } = useGlobalCopyStore()\n const { selectedAccountGuids } = useGlobalUiStore()\n const { selectedDay, selectedDayActivities, setSelectedDay, upcomingActivities } =\n useRecurringActivityStore()\n\n const filteredUpcomingActivities = React.useMemo(\n () =>\n upcomingActivities.filter((activity) =>\n selectedAccountGuids.includes(activity.accountGuid || ''),\n ),\n [selectedAccountGuids, upcomingActivities],\n )\n\n const { availableWidth } = useWidgetContainerProvider()\n\n const isSmall = availableWidth < 750\n\n return (\n <Stack flexDirection={isSmall ? 'column' : 'row'} width=\"100%\">\n <ActivityCalendar />\n {!isSmall && <Divider flexItem={true} orientation=\"vertical\" sx={{ my: 16, ml: 16 }} />}\n <ActivityList\n activities={selectedDayActivities || filteredUpcomingActivities.slice(0, 4)}\n isMini={true}\n onResetClick={selectedDay ? () => setSelectedDay(selectedDay) : undefined}\n sx={{ width: isSmall ? '100%' : 'calc(100% - 336px)', mt: 12 }}\n title={\n selectedDay\n ? (buildDynamicCopy(\n recurringCopy.day_transactions,\n formatDate(selectedDay, DATE_FORMATS_INTL.MONTH_DAY),\n ) as string)\n : recurringCopy.upcoming_activity\n }\n />\n </Stack>\n )\n}\n\nexport default observer(MiniWidgetContent)\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 MiniWidgetContainer,\n MiniWidgetProps,\n useGlobalCopyStore,\n useGlobalUiStore,\n useTransactionStore,\n} from '../common'\n\nimport MiniWidgetContent from './components/MiniWidgetContent'\n\nconst RecurringActivityMiniWidget: React.FC<MiniWidgetProps> = ({ onPrimaryCtaClick, sx }) => {\n const { recurring: recurringCopy } = useGlobalCopyStore()\n const { isInitialized, selectedAccountGuids } = useGlobalUiStore()\n const { setFilter } = useTransactionStore()\n\n React.useEffect(() => {\n if (isInitialized) {\n setFilter({\n dateRange: { start: subDays(startOfToday(), 90), end: endOfToday() },\n accounts: selectedAccountGuids,\n })\n }\n }, [isInitialized, selectedAccountGuids])\n\n return (\n <MiniWidgetContainer\n className=\"mx-exp-upcoming-activity-miniwidget\"\n onPrimaryCtaClick={onPrimaryCtaClick}\n primaryCtaLabel={recurringCopy.primary_cta}\n subTitle={recurringCopy.sub_title}\n sx={sx}\n title={recurringCopy.mini_title}\n >\n <MiniWidgetContent />\n </MiniWidgetContainer>\n )\n}\n\nexport default observer(RecurringActivityMiniWidget)\n","import CheckCircleIcon from '@mui/icons-material/CheckCircle'\nimport ErrorIcon from '@mui/icons-material/Error'\n\nimport { IconBacking } from '../../common'\n\ntype IconProp = {\n size?: number\n}\n\nconst iconStyle = {\n gridRow: 1,\n gridColumn: 1,\n zIndex: 2,\n}\n\nexport const ConnectedStatus = ({ size = 20 }: IconProp) => (\n <IconBacking size={size}>\n <CheckCircleIcon color=\"success\" sx={{ fontSize: size, ...iconStyle }} />\n </IconBacking>\n)\n\nexport const ErrorStatus = ({ size = 20 }: IconProp) => (\n <IconBacking size={size}>\n <ErrorIcon color=\"error\" sx={{ fontSize: size, ...iconStyle }} />\n </IconBacking>\n)\n","import { AccountType } from '../../common/types'\nimport type { Account } from '../../common/types'\n\nexport const isAccountLiability = (account: Account) =>\n account &&\n (account.account_type === AccountType.CREDIT_CARD ||\n account.account_type === AccountType.LOAN ||\n account.account_type === AccountType.MORTGAGE ||\n account.account_type === AccountType.LINE_OF_CREDIT ||\n account.account_type === AccountType.CHECKING_LINE_OF_CREDIT)\n\nexport const isManual = (account: Account) => account.is_manual || !account.guid\n\nexport const usesCreditLimitField = (account: Account) =>\n account.account_type === AccountType.LINE_OF_CREDIT ||\n account.account_type === AccountType.CREDIT_CARD ||\n account.account_type === AccountType.CHECKING_LINE_OF_CREDIT\n\nexport const usesInterestRateField = (account: Account) =>\n account.account_type === AccountType.SAVINGS ||\n account.account_type === AccountType.CHECKING ||\n account.account_type === AccountType.LINE_OF_CREDIT ||\n account.account_type === AccountType.CREDIT_CARD ||\n account.account_type === AccountType.LOAN ||\n account.account_type === AccountType.MORTGAGE\n\nexport const usesOriginalBalanceField = (account: Account) =>\n account.account_type === AccountType.LOAN || account.account_type === AccountType.MORTGAGE\n","import { Icon, Text } from '@kyper/mui'\n\nimport {\n AccountIcon,\n AccountType,\n buildDynamicCopy,\n DATE_FORMATS_INTL,\n formatCurrency,\n formatDate,\n formatOrdinal,\n formatPercentage,\n isValidNumber,\n PropertyType,\n} from '../../common'\nimport type { Account, AccountsCopy } from '../../common'\n\nimport { PropertyIcon } from '../../common/types/Account'\nimport {\n isAccountLiability,\n isManual,\n usesCreditLimitField,\n usesInterestRateField,\n usesOriginalBalanceField,\n} from './Accounts'\nimport { FieldType } from '../constants/Accounts'\n\ntype SelectOption = {\n label: string\n value: number\n icon: React.ReactElement\n}\n\nexport type AccountField = {\n event?: string\n label: string\n minAmount?: number\n options?: SelectOption[]\n name: keyof Account\n placeholder?: string\n type?: string\n validation?: (val: any) => string\n valueFormatter: (val: any) => any\n}\n\nexport const getAccountDetailFields = (account: Account, copy: AccountsCopy) => {\n const fields: AccountField[] = [\n {\n event: 'account_details_click_account_name',\n label: copy.account_name,\n name: 'user_name',\n placeholder: buildDynamicCopy(copy.enter_value, copy.account_name) as string,\n type: FieldType.Input,\n validation: (val: string) =>\n val ? '' : (buildDynamicCopy(copy.field_is_required, copy.account_name) as string),\n valueFormatter: (val) => val,\n },\n ]\n\n if (isManual(account)) {\n fields.unshift({\n label: copy.account_balance,\n name: 'balance',\n placeholder: buildDynamicCopy(copy.enter_value, copy.account_balance) as string,\n type: FieldType.Currency,\n valueFormatter: (val) => formatCurrency(val, '0,0.00'),\n })\n\n const accountTypeOptions = Object.keys(AccountType)\n .filter((key) => Number(key))\n .map((value) => ({\n label: copy.account_types[value],\n value: Number(value),\n icon: <Icon name={AccountIcon[value]} />,\n }))\n\n fields.push({\n label: copy.account_type,\n name: 'account_type',\n options: accountTypeOptions,\n placeholder: buildDynamicCopy(copy.select_value, copy.account_type) as string,\n type: FieldType.Select,\n valueFormatter: (val) => accountTypeOptions.find((option) => option.value === val)?.label,\n })\n }\n\n if (account.account_type === AccountType.PROPERTY) {\n const propertyTypeOptions = Object.keys(PropertyType)\n .filter((key) => Number(key))\n .map((value) => ({\n label: copy.property_types[value],\n value: Number(value),\n icon: <Icon name={PropertyIcon[value]} />,\n }))\n\n fields.push({\n label: copy.property_type,\n name: 'property_type',\n options: propertyTypeOptions,\n placeholder: buildDynamicCopy(copy.select_value, copy.property_type) as string,\n type: FieldType.Select,\n valueFormatter: (val) => propertyTypeOptions.find((option) => option.value === val)?.label,\n })\n }\n\n if (usesInterestRateField(account)) {\n let label = copy.interest_rate\n let fieldName = 'interest_rate' as keyof Account\n\n if (!account.is_manual) {\n if (typeof account.apr === 'number') {\n label = copy.apr\n fieldName = 'apr'\n }\n if (typeof account.apy === 'number') {\n label = copy.apy\n fieldName = 'apy'\n }\n }\n\n fields.push({\n event: 'account_details_click_interest_rate',\n label,\n name: fieldName,\n placeholder: buildDynamicCopy(copy.enter_value, label) as string,\n type: FieldType.Input,\n validation: (val) => (!isValidNumber(val) ? copy.error_amount_is_invalid : ''),\n valueFormatter: (val) => (isValidNumber(val) ? formatPercentage(val / 100) : val),\n })\n }\n\n if (isAccountLiability(account)) {\n fields.push({\n label: copy.minimum_payment,\n name: 'minimum_payment',\n placeholder: buildDynamicCopy(copy.enter_value, copy.minimum_payment) as string,\n type: FieldType.Currency,\n valueFormatter: (val) => formatCurrency(val, '0,0.00'),\n })\n\n if (account.payment_due_at) {\n fields.push({\n label: copy.next_payment,\n name: 'payment_due_at',\n type: FieldType.Date,\n valueFormatter: (val) => {\n // accounts for Unix and DateTime values\n const dateTimeStamp = typeof val === 'number' ? new Date(val * 1000) : val\n return formatDate(dateTimeStamp, DATE_FORMATS_INTL.MED_MONTH_SHORT_DAY_FULL_YEAR)\n },\n })\n } else {\n fields.push({\n label: copy.day_payment_due,\n name: 'day_payment_is_due',\n placeholder: buildDynamicCopy(copy.enter_value, copy.day_payment_due) as string,\n type: FieldType.Date,\n valueFormatter: (val) =>\n buildDynamicCopy(\n copy.day_of_every_month,\n formatOrdinal(val <= 31 ? val : new Date(val).getDate()),\n ) as string,\n })\n }\n }\n\n if (usesCreditLimitField(account)) {\n fields.push({\n label: copy.credit_limit,\n name: 'credit_limit',\n placeholder: buildDynamicCopy(copy.enter_value, copy.credit_limit) as string,\n type: FieldType.Currency,\n valueFormatter: (val) => formatCurrency(val, '0,0.00'),\n })\n }\n\n if (usesOriginalBalanceField(account)) {\n fields.push({\n label: copy.original_balance,\n minAmount: 1,\n name: 'original_balance',\n placeholder: buildDynamicCopy(copy.enter_value, copy.original_balance) as string,\n type: FieldType.Currency,\n valueFormatter: (val) => formatCurrency(val, '0,0.00'),\n })\n }\n\n return fields\n}\n\nexport const getAccountBalanceDetails = (account: Account, copy: AccountsCopy) => {\n let firstSubtitle = ''\n let firstValue = null\n let secondSubtitle = null\n let secondValue = null\n let hasAvailableBalance = false\n\n switch (account.account_type) {\n // checking or savings\n case 1:\n case 2: {\n // some savings accounts only have balance, and not available_balance\n if (account.available_balance) {\n firstSubtitle = copy.available_balance\n firstValue = account.available_balance\n secondSubtitle = account.available_balance ? copy.current_balance : null\n secondValue = formatCurrency(account.balance, '0,0.00')\n hasAvailableBalance = true\n } else {\n firstSubtitle = copy.current_balance\n firstValue = account.balance\n }\n break\n }\n // credit cards, loans, investments, etc\n default: {\n firstSubtitle = copy.current_balance\n firstValue = account.balance\n if (account.minimum_payment && account.payment_due_at) {\n const dateTimeStamp =\n typeof account.payment_due_at === 'number'\n ? new Date(account.payment_due_at * 1000)\n : account.payment_due_at\n secondSubtitle = (\n <Text component=\"strong\" variant=\"XSmall\">\n {\n buildDynamicCopy(\n copy.payment_due_on,\n formatCurrency(account.minimum_payment, '0,0.00'),\n formatDate(dateTimeStamp, DATE_FORMATS_INTL.FULL_MONTH_DAY),\n ) as string\n }\n </Text>\n )\n } else if (account.credit_limit) {\n secondSubtitle = copy.available_credit\n secondValue = formatCurrency(account.credit_limit, '0,0.00')\n }\n }\n }\n\n return {\n firstSubtitle,\n firstValue,\n secondSubtitle,\n secondValue,\n hasAvailableBalance,\n }\n}\n","import React from 'react'\nimport { observer } from 'mobx-react-lite'\n\nimport Badge from '@mui/material/Badge'\nimport Box from '@mui/material/Box'\nimport ListItem, { ListItemOwnProps } from '@mui/material/ListItem'\nimport ListItemAvatar from '@mui/material/ListItemAvatar'\nimport ListItemButton from '@mui/material/ListItemButton'\nimport ListItemText from '@mui/material/ListItemText'\n\nimport { InstitutionLogo, Text } from '@kyper/mui'\n\nimport { ErrorStatus } from './ConnectionStatusIcons'\n\nimport { Account, ConnectionStatus, formatCurrency, useGlobalCopyStore } from '../../common'\nimport { getAccountBalanceDetails } from '../utils/AccountFields'\n\ninterface AccountListItemProps {\n account: Account\n onRowClick?: () => void\n listItemProps?: ListItemOwnProps\n shouldShowConnectionStatus?: boolean\n}\n\nconst AccountListItem: React.FC<AccountListItemProps> = ({\n account,\n onRowClick,\n listItemProps,\n shouldShowConnectionStatus = false,\n}) => {\n const { accounts: accountsCopy } = useGlobalCopyStore()\n const { firstSubtitle, firstValue, secondSubtitle, secondValue } = getAccountBalanceDetails(\n account,\n accountsCopy,\n )\n\n let statusIcon = undefined\n if (\n account.connectionStatus === ConnectionStatus.Error ||\n account.connectionStatus === ConnectionStatus.RequiresMfa\n ) {\n statusIcon = <ErrorStatus size={16} />\n }\n\n const content = (\n <>\n <ListItemAvatar>\n <Badge\n badgeContent={shouldShowConnectionStatus ? statusIcon : undefined}\n sx={{\n '& .MuiBadge-badge': {\n right: -1,\n },\n }}\n >\n <InstitutionLogo alt=\"MX\" institutionGuid={account.institution_guid || ''} />\n </Badge>\n </ListItemAvatar>\n\n <ListItemText\n disableTypography={true}\n primary={\n <Text bold={true} sx={{ whiteSpace: 'normal' }} variant=\"Body\">\n {`${account.name || account.feed_name} ${account.account_number ? `*${account.account_number}` : ''}`}{' '}\n {account.is_hidden && !account.is_closed && accountsCopy.is_hidden}\n {account.is_closed && accountsCopy.is_closed}\n </Text>\n }\n secondary={\n <>\n <Box sx={{ alignItems: 'center', display: 'flex', justifyContent: 'space-between' }}>\n <Text variant=\"XSmall\">{firstSubtitle}</Text>\n <Text bold={true} variant=\"Small\">\n {formatCurrency(firstValue, '0,0.00')}\n </Text>\n </Box>\n <Box sx={{ alignItems: 'center', display: 'flex', justifyContent: 'space-between' }}>\n <Text variant=\"XSmall\">{secondSubtitle}</Text>\n <Text ml=\"auto\" variant=\"XSmall\">\n {secondValue}\n </Text>\n </Box>\n </>\n }\n />\n </>\n )\n\n return (\n <ListItem sx={{ backgroundColor: 'background.paper' }} {...listItemProps}>\n {onRowClick ? (\n <ListItemButton alignItems=\"flex-start\" onClick={onRowClick} sx={{ px: 24 }}>\n {content}\n </ListItemButton>\n ) : (\n content\n )}\n </ListItem>\n )\n}\n\nexport default observer(AccountListItem)\n","import ListItem from '@mui/material/ListItem'\n\nimport RemainingCash from './RemainingCash'\n\ninterface DetailsFooterProps {\n remaining: number\n}\n\nconst DetailsFooter: React.FC<DetailsFooterProps> = ({ remaining }) => {\n return (\n <ListItem\n sx={{\n alignItems: 'center',\n backgroundColor: 'background.highlight',\n display: 'flex',\n gap: 12,\n padding: '12px 24px',\n borderBottomLeftRadius: '3px',\n borderBottomRightRadius: '3px',\n minHeight: 'auto',\n }}\n >\n <RemainingCash remaining={remaining} />\n </ListItem>\n )\n}\n\nexport default DetailsFooter\n","import React from 'react'\nimport { observer } from 'mobx-react-lite'\n\nimport Divider from '@mui/material/Divider'\nimport ListItem from '@mui/material/ListItem'\nimport Stack from '@mui/material/Stack'\n\nimport { Text } from '@kyper/mui'\n\nimport { type Activity, DATE_FORMATS_INTL, formatDate } from '../../common'\nimport { CurrencyText } from '../../common/components/CurrencyText'\n\nexport enum ExpenseType {\n EXPENSE = 'expense',\n INCOME = 'income',\n}\n\ninterface DetailsExpenseRowType {\n activity: Activity\n}\n\nconst DetailsExpenseRow: React.FC<DetailsExpenseRowType> = ({ activity }) => {\n return (\n <>\n <ListItem sx={{ display: 'flex', alignItems: 'center', gap: 16, px: 24, py: 12 }}>\n <Stack alignItems=\"center\" height={32} width={32}>\n <Text bold={true} sx={{ fontSize: 11 }}>\n {formatDate(activity.expectedDate, DATE_FORMATS_INTL.MONTH)}\n </Text>\n <Text bold={true} sx={{ fontSize: 11 }}>\n {formatDate(activity.expectedDate, DATE_FORMATS_INTL.DAY)}\n </Text>\n </Stack>\n <Text sx={{ flexGrow: 1, fontSize: 13 }}>{activity.name}</Text>\n <CurrencyText\n amount={activity.amount}\n bold={true}\n sx={{ textAlign: 'right', fontSize: 13 }}\n />\n </ListItem>\n <Divider />\n </>\n )\n}\n\nexport default observer(DetailsExpenseRow)\n","import React from 'react'\nimport { observer } from 'mobx-react-lite'\n\nimport Divider from '@mui/material/Divider'\nimport ListSubheader from '@mui/material/ListSubheader'\n\nimport { Text } from '@kyper/mui'\n\nimport { formatCurrency, useGlobalCopyStore } from '../../common'\n\nimport { ExpenseType } from './DetailsExpenseRow'\n\ninterface DetailsExpenseHeaderProps {\n total: number\n type: ExpenseType\n}\n\nconst DetailsExpenseHeader: React.FC<DetailsExpenseHeaderProps> = ({ total, type }) => {\n const { cashflow: customCopy } = useGlobalCopyStore()\n\n return (\n <>\n <ListSubheader\n sx={{\n alignItems: 'center',\n backgroundColor: 'background.highlight',\n display: 'flex',\n justifyContent: 'space-between',\n pb: 4,\n pt: 12,\n px: 24,\n }}\n >\n <Text bold={true} sx={{ fontSize: 12 }}>\n {type === ExpenseType.EXPENSE ? customCopy.expenses : customCopy.income}\n </Text>\n <Text bold={true} sx={{ fontSize: 13 }}>\n {type === ExpenseType.EXPENSE ? '-' : '+'}\n {formatCurrency(total, '0,0.00')}\n </Text>\n </ListSubheader>\n <Divider />\n </>\n )\n}\n\nexport default observer(DetailsExpenseHeader)\n","import type { Account, Activity } from '../../common'\nimport { isAfter } from 'date-fns/isAfter'\nimport { isBefore } from 'date-fns/isBefore'\nimport { isToday } from 'date-fns/isToday'\n\n/**\n * Returns activities that match the given account and date range\n * @param account The account\n * @param dateRange The date range\n */\nexport const activityFilter =\n (account: Account, dateRange: { start: Date; end: Date }) => (a: Activity) =>\n a.accountGuid === account.guid &&\n (isToday(a.expectedDate) || isAfter(a.expectedDate, dateRange.start)) &&\n isBefore(a.expectedDate, dateRange.end)\n","import { observer } from 'mobx-react-lite'\nimport { getUnixTime } from 'date-fns/getUnixTime'\n\nimport Divider from '@mui/material/Divider'\nimport List from '@mui/material/List'\nimport ListItem from '@mui/material/ListItem'\nimport Stack from '@mui/material/Stack'\n\nimport { Text } from '@kyper/mui'\n\nimport AccountListItem from '../../accounts/components/AccountListItem'\nimport DetailsFooter from './DetailsFooter'\nimport DetailsExpenseRow, { ExpenseType } from './DetailsExpenseRow'\nimport DetailsExpenseHeader from './DetailsExpenseHeader'\n\nimport {\n Account,\n Activity,\n DATE_FORMATS_INTL,\n formatDate,\n useGlobalCopyStore,\n useRecurringActivityStore,\n useWidgetContainerProvider,\n} from '../../common'\nimport { useCashflowUiStore } from '../context/hooks'\nimport { activityFilter } from '../util/Filters'\n\nconst DetailsTab = () => {\n const { availableWidth } = useWidgetContainerProvider()\n const { cashflow: customCopy } = useGlobalCopyStore()\n const { upcomingExpenses, upcomingIncome } = useRecurringActivityStore()\n const { dateRange, selectedCashAccounts } = useCashflowUiStore()\n\n return (\n <Stack>\n <Stack direction={availableWidth < 400 ? 'column' : 'row'} justifyContent=\"space-between\">\n <Text bold={true} sx={{ fontSize: 15, mb: 12, whiteSpace: 'normal' }}>\n {customCopy.accounts_breakdown}\n </Text>\n <Text bold={true} sx={{ fontSize: 15, mb: 12, whiteSpace: 'normal' }}>\n {formatDate(dateRange.start, DATE_FORMATS_INTL.FULL_MONTH_DAY)} -{' '}\n {formatDate(dateRange.end, DATE_FORMATS_INTL.FULL_MONTH_DAY)}\n </Text>\n </Stack>\n\n <Stack>\n {selectedCashAccounts.map((account: Account) => {\n const upcomingIncomeByAccount = upcomingIncome\n .filter(activityFilter(account, dateRange))\n .sort((a, b) => getUnixTime(a.expectedDate) - getUnixTime(b.expectedDate))\n\n const projectedExpensesByAccount = upcomingExpenses.filter(\n activityFilter(account, dateRange),\n )\n\n const incomeTotal = upcomingIncomeByAccount.reduce(\n (acc: number, curr: Activity) => acc + curr.amount,\n 0,\n )\n const expenseTotal = projectedExpensesByAccount.reduce(\n (acc, curr) => acc + curr.amount,\n 0,\n )\n\n return (\n <List\n key={account.guid}\n sx={{\n border: '1px solid',\n borderColor: 'border.light',\n mb: 24,\n borderRadius: 1,\n }}\n >\n <AccountListItem\n account={account}\n listItemProps={{\n disableGutters: false,\n disablePadding: false,\n sx: { borderTopRadius: 1, pr: 24 },\n }}\n />\n <Divider />\n {/* Income */}\n {upcomingIncomeByAccount.length > 0 && (\n <ListItem>\n <List\n subheader={\n <DetailsExpenseHeader total={incomeTotal} type={ExpenseType.INCOME} />\n }\n sx={{ width: '100%' }}\n >\n {upcomingIncomeByAccount.map((a) => (\n <DetailsExpenseRow activity={a} key={a.sequenceGuid} />\n ))}\n </List>\n </ListItem>\n )}\n {/* Expenses */}\n {projectedExpensesByAccount.length > 0 && (\n <ListItem>\n <List\n subheader={\n <DetailsExpenseHeader total={expenseTotal} type={ExpenseType.EXPENSE} />\n }\n sx={{ width: '100%' }}\n >\n {projectedExpensesByAccount.map((a) => (\n <DetailsExpenseRow activity={a} key={a.scheduledPaymentGuid} />\n ))}\n </List>\n </ListItem>\n )}\n {/* Bottom row total */}\n <DetailsFooter\n remaining={\n (account.available_balance || account.balance || 0) + incomeTotal - expenseTotal\n }\n />\n </List>\n )\n })}\n </Stack>\n </Stack>\n )\n}\n\nexport default observer(DetailsTab)\n","import React from 'react'\nimport { observer } from 'mobx-react-lite'\n\nimport Box from '@mui/material/Box'\nimport Divider from '@mui/material/Divider'\nimport List from '@mui/material/List'\nimport ListItem from '@mui/material/ListItem'\nimport Stack from '@mui/material/Stack'\nimport useTheme from '@mui/material/styles/useTheme'\n\nimport { DataGridPro, GridColDef } from '@mui/x-data-grid-pro'\n\nimport { InstitutionLogo, Text } from '@kyper/mui'\n\nimport {\n type Account,\n DATE_FORMATS_INTL,\n formatCurrency,\n formatDate,\n InformationTooltip,\n useGlobalCopyStore,\n useRecurringActivityStore,\n useWidgetContainerProvider,\n} from '../../common'\nimport { useCashflowUiStore } from '../context/hooks'\nimport { CurrencyText } from '../../common/components/CurrencyText'\nimport RemainingCash from './RemainingCash'\n\nconst SummaryTab = () => {\n const { availableWidth } = useWidgetContainerProvider()\n const theme = useTheme()\n const { cashflow: customCopy } = useGlobalCopyStore()\n const { upcomingExpenses, upcomingIncome } = useRecurringActivityStore()\n const { dateRange, selectedCashAccounts } = useCashflowUiStore()\n\n const columns: GridColDef[] = [\n {\n field: 'account',\n flex: 1.5,\n headerName: customCopy.accounts,\n renderCell: ({ value: { name, nickname, institution_guid, account_number } }) => {\n const accountName = nickname || name\n\n return (\n <Stack alignItems=\"center\" flexDirection=\"row\" gap={12}>\n <InstitutionLogo\n alt={customCopy.institution_logo}\n institutionGuid={institution_guid || ''}\n size={16}\n />\n {`${accountName} ${account_number ? `*${account_number}` : ''}`}\n </Stack>\n )\n },\n },\n {\n field: 'balance',\n flex: 1,\n headerName: customCopy.balance,\n type: 'number',\n renderCell: (params) => formatCurrency(params.value, '0,0.00'),\n },\n {\n field: 'income',\n flex: 1,\n headerName: customCopy.projected_income,\n type: 'number',\n renderCell: (params) => `+${formatCurrency(params.value, '0,0.00')}`,\n },\n {\n field: 'expenses',\n flex: 1.1,\n headerName: customCopy.projected_expenses,\n type: 'number',\n renderCell: (params) => `-${formatCurrency(params.value, '0,0.00')}`,\n },\n {\n field: 'remaining',\n flex: 1,\n headerName: customCopy.remaining,\n type: 'number',\n renderCell: (params) => {\n const total = params.row.balance + params.row.income - params.row.expenses\n\n return (\n <Text\n color={Math.sign(total) === -1 ? theme.palette.error.main : theme.palette.text.primary}\n variant=\"Small\"\n >\n {formatCurrency(total, '0,0.00')}\n </Text>\n )\n },\n },\n ]\n\n const rows = React.useMemo(() => {\n return selectedCashAccounts.map((account: Account) => {\n const totalprojectedExpenses = upcomingExpenses\n .filter((a) => a.accountGuid === account.guid)\n .reduce((acc, curr) => acc + curr.amount, 0)\n\n const totalProjectedIncome = upcomingIncome\n .filter((a) => a.accountGuid === account.guid)\n .reduce((acc, curr) => acc + curr.amount, 0)\n\n const remaining = (account.balance || 0) + totalProjectedIncome - totalprojectedExpenses\n\n return {\n account,\n balance: account.balance || 0,\n id: account.guid,\n income: totalProjectedIncome,\n expenses: totalprojectedExpenses,\n remaining,\n }\n })\n }, [selectedCashAccounts, upcomingExpenses, upcomingIncome])\n\n return (\n <Box\n sx={{\n width: '100%',\n }}\n >\n <Stack\n direction={availableWidth < 540 ? 'column' : 'row'}\n justifyContent=\"space-between\"\n mb={12}\n >\n <Stack alignItems=\"center\" direction=\"row\" gap={8}>\n <Text\n bold={true}\n sx={{\n fontSize: 15,\n whiteSpace: 'normal',\n }}\n >\n {customCopy.cash_inflow_and_outflow}\n </Text>\n <InformationTooltip\n body={customCopy.table_tooltip_body}\n title={customCopy.table_tooltip_title}\n />\n </Stack>\n <Text bold={true} sx={{ fontSize: 15, whiteSpace: 'normal' }}>\n {formatDate(dateRange.start, DATE_FORMATS_INTL.FULL_MONTH_DAY)} -{' '}\n {formatDate(dateRange.end, DATE_FORMATS_INTL.FULL_MONTH_DAY)}\n </Text>\n </Stack>\n {availableWidth > 650 ? (\n <DataGridPro\n autoHeight={true}\n columnHeaderHeight={48}\n columns={columns}\n density=\"standard\"\n disableColumnMenu={true}\n disableRowSelectionOnClick={true}\n hideFooter={true}\n rowHeight={48}\n rows={rows}\n sx={{\n border: '1px solid',\n borderColor: 'border.light',\n borderRadius: 1,\n }}\n />\n ) : (\n rows.map((row) => {\n const { name, nickname, institution_guid, account_number } = row.account\n const accountName = nickname || name\n\n return (\n <List\n key={row.id}\n sx={{\n border: '1px solid',\n borderColor: 'border.light',\n borderRadius: 1,\n marginBottom: 24,\n }}\n >\n <ListItem sx={{ minHeight: 'auto' }}>\n <Stack width=\"100%\">\n <Stack\n alignItems=\"center\"\n flexDirection=\"row\"\n justifyContent=\"space-between\"\n px={16}\n py={12}\n >\n <Stack alignItems=\"center\" flexDirection=\"row\" gap={8}>\n <InstitutionLogo\n alt={customCopy.institution_logo}\n institutionGuid={institution_guid || ''}\n size={16}\n />\n <Text variant=\"Small\">{`${accountName} ${account_number ? `*${account_number}` : ''}`}</Text>\n </Stack>\n <CurrencyText amount={row.balance} bold={true} variant=\"Small\" />\n </Stack>\n <Divider sx={{ width: '100%' }} />\n <Stack\n alignItems=\"center\"\n flexDirection=\"row\"\n justifyContent=\"space-between\"\n px={16}\n py={12}\n >\n <Text variant=\"Small\">{customCopy.projected_income}</Text>\n <CurrencyText amount={row.income} bold={true} symbol=\"+\" variant=\"Small\" />\n </Stack>\n <Divider sx={{ width: '100%' }} />\n <Stack\n alignItems=\"center\"\n flexDirection=\"row\"\n justifyContent=\"space-between\"\n px={16}\n py={12}\n >\n <Text variant=\"Small\">{customCopy.projected_expenses}</Text>\n <CurrencyText amount={row.expenses} bold={true} symbol=\"-\" variant=\"Small\" />\n </Stack>\n <Divider sx={{ width: '100%' }} />\n <Stack\n alignItems=\"center\"\n bgcolor=\"background.default\"\n flexDirection=\"row\"\n gap={8}\n justifyContent=\"space-between\"\n px={16}\n py={12}\n sx={{ borderBottomLeftRadius: '4px', borderBottomRightRadius: '4px' }}\n >\n <RemainingCash remaining={row.remaining} />\n </Stack>\n </Stack>\n </ListItem>\n </List>\n )\n })\n )}\n </Box>\n )\n}\n\nexport default observer(SummaryTab)\n","import React from 'react'\nimport { observer } from 'mobx-react-lite'\nimport Box from '@mui/material/Box'\nimport Tabs from '@mui/material/Tabs'\nimport Tab from '@mui/material/Tab'\n\nimport DetailsTab from './DetailsTab'\nimport SummaryTab from './SummaryTab'\nimport { TabContentContainer, useEvent, useGlobalCopyStore, useScreenSize } from '../../common'\n\nconst CashflowContent: React.FC = () => {\n const { cashflow: customCopy } = useGlobalCopyStore()\n const { isDesktop } = useScreenSize()\n const { onEvent } = useEvent()\n\n const [value, setValue] = React.useState(0)\n\n const handleChange = (_event: React.SyntheticEvent, newValue: number) => {\n setValue(newValue)\n }\n\n React.useEffect(() => {\n onEvent(value === 0 ? 'cash_flow_summary' : 'cash_flow_details')\n }, [value])\n\n return (\n <Box>\n <Tabs\n aria-label={customCopy.cashflow_summary_and_details}\n centered={true}\n onChange={handleChange}\n value={value}\n variant=\"fullWidth\"\n >\n <Tab\n aria-controls=\"cashflow-tabpanel-0\"\n id=\"cashflow-tab-0\"\n label={customCopy.summary}\n sx={{ textTransform: 'none' }}\n />\n <Tab\n aria-controls=\"cashflow-tabpanel-1\"\n id=\"cashflow-tab-1\"\n label={customCopy.details}\n sx={{ textTransform: 'none' }}\n />\n </Tabs>\n <Box sx={{ mb: 32 }} />\n <TabContentContainer index={0} name=\"cashflow\" value={value}>\n <Box sx={{ m: isDesktop ? 48 : 16 }}>\n <SummaryTab />\n </Box>\n </TabContentContainer>\n <TabContentContainer index={1} name=\"cashflow\" value={value}>\n <Box sx={{ m: isDesktop ? 48 : 16 }}>\n <DetailsTab />\n </Box>\n </TabContentContainer>\n </Box>\n )\n}\n\nexport default observer(CashflowContent)\n","import React from 'react'\n\nimport Stack from '@mui/material/Stack'\n\nimport { Text } from '@kyper/mui'\n\nimport { CurrencyText } from '../../common/components/CurrencyText'\n\ninterface CashflowAmountHeadingProps {\n amount: number\n isMobile?: boolean\n isTotal?: boolean\n label: string\n symbol?: string\n tooltip?: React.ReactNode\n}\n\nconst CashflowAmountHeading: React.FC<CashflowAmountHeadingProps> = ({\n amount,\n isMobile = false,\n isTotal = false,\n label,\n symbol,\n tooltip,\n}) => {\n return (\n <Stack\n bgcolor={isTotal ? 'background.default' : 'transparent'}\n direction={isMobile ? 'row' : 'column'}\n justifyContent={isMobile ? 'space-between' : 'initial'}\n padding={isMobile ? '14px 16px' : 0}\n sx={{ borderBottomLeftRadius: 4, borderBottomRightRadius: 4 }}\n >\n {!isMobile && <CurrencyText amount={amount} component=\"h2\" variant=\"H2\" />}\n <Stack alignItems=\"center\" component=\"span\" direction=\"row\" gap={8} mt={2}>\n <Text bold={isTotal} variant=\"Small\">\n {label}\n </Text>\n {tooltip}\n </Stack>\n {isMobile && <CurrencyText amount={amount} component=\"h2\" symbol={symbol} variant=\"Small\" />}\n </Stack>\n )\n}\n\nexport default CashflowAmountHeading\n","import React from 'react'\nimport { observer } from 'mobx-react-lite'\nimport { isAfter } from 'date-fns/isAfter'\nimport { isBefore } from 'date-fns/isBefore'\nimport { isToday } from 'date-fns/isToday'\n\nimport Button from '@mui/material/Button'\nimport Divider from '@mui/material/Divider'\nimport Stack from '@mui/material/Stack'\n\nimport { Icon, Text } from '@kyper/mui'\n\nimport {\n Activity,\n Drawer,\n InformationTooltip,\n useGlobalCopyStore,\n useGlobalUiStore,\n useRecurringActivityStore,\n useUserStore,\n useWidgetContainerProvider,\n} from '../../common'\n\nimport { ManageIncome } from '../../recurringactivity'\n\nimport CashflowAmountHeading from './CashflowAmountHeading'\nimport { useCashflowUiStore } from '../context/hooks'\n\n// This filter only includes activities that have an account guid that matches an account guid\n// in the given list of accountGuids and is within the given date range\nconst activityAccountFilter =\n (accountGuids: string[], dateRange: { start: Date; end: Date }) => (a: Activity) =>\n a.accountGuid &&\n accountGuids.includes(a.accountGuid) &&\n (isToday(a.expectedDate) || isAfter(a.expectedDate, dateRange.start)) &&\n isBefore(a.expectedDate, dateRange.end)\n\nconst CashflowHeading: React.FC = () => {\n const [isOpen, setIsOpen] = React.useState(false)\n\n const { availableWidth } = useWidgetContainerProvider()\n const { cashflow: customCopy } = useGlobalCopyStore()\n\n const { upcomingExpenses, upcomingIncome } = useRecurringActivityStore()\n const { selectedAccountGuids } = useGlobalUiStore()\n const { dateRange, selectedCashAccounts } = useCashflowUiStore()\n const { userProfile } = useUserStore()\n\n const filteredExpenses = React.useMemo(\n () => upcomingExpenses.filter(activityAccountFilter(selectedAccountGuids, dateRange)),\n [dateRange, selectedAccountGuids, upcomingExpenses],\n )\n\n const filteredIncome = React.useMemo(\n () => upcomingIncome.filter(activityAccountFilter(selectedAccountGuids, dateRange)),\n [dateRange, selectedAccountGuids, upcomingIncome],\n )\n\n const cashBalance = React.useMemo(\n () => selectedCashAccounts.reduce((total, account) => total + (account?.balance || 0), 0),\n [selectedCashAccounts],\n )\n\n const totalUpcomingExpenses = filteredExpenses.reduce((acc, curr) => acc + curr.amount, 0)\n const totalUpcomingIncome = filteredIncome.reduce((acc, curr) => acc + curr.amount, 0)\n const availableToSpend = cashBalance - totalUpcomingExpenses + totalUpcomingIncome\n\n const hasCompletedCashflowOnboarding =\n upcomingIncome.length > 0 && userProfile?.has_completed_cash_flow_onboarding\n const isSmallContainer = availableWidth < 725\n\n return (\n <Stack flexDirection=\"row\" gap={24} justifyContent=\"center\" my={isSmallContainer ? 24 : 42}>\n {isSmallContainer ? (\n <Stack border=\"1px solid\" borderColor=\"border.light\" borderRadius={1} mx={16} width=\"100%\">\n <CashflowAmountHeading\n amount={cashBalance}\n isMobile={true}\n label={customCopy.cash_and_bank}\n />\n\n <Divider />\n\n {hasCompletedCashflowOnboarding ? (\n <CashflowAmountHeading\n amount={totalUpcomingIncome}\n isMobile={true}\n label={customCopy.to_be_received}\n symbol=\"+\"\n />\n ) : (\n <Button\n onClick={() => setIsOpen(true)}\n startIcon={<Icon name=\"add\" />}\n sx={{ fontSize: 13 }}\n >\n {customCopy.add_income}\n </Button>\n )}\n\n <Divider />\n\n <CashflowAmountHeading\n amount={totalUpcomingExpenses}\n isMobile={true}\n label={customCopy.to_be_paid_out}\n symbol=\"-\"\n />\n\n <Divider />\n <CashflowAmountHeading\n amount={availableToSpend}\n isMobile={true}\n isTotal={true}\n label={customCopy.remaining_cash}\n tooltip={\n <InformationTooltip\n body={customCopy.remaining_income_tooltip_body}\n title={customCopy.remaining_income_tooltip_title}\n />\n }\n />\n </Stack>\n ) : (\n <>\n <CashflowAmountHeading amount={cashBalance} label={customCopy.cash_and_bank} />\n {hasCompletedCashflowOnboarding ? (\n <>\n <Text sx={{ fontSize: 25, lineHeight: 1 }}>+</Text>\n <CashflowAmountHeading\n amount={totalUpcomingIncome}\n label={customCopy.to_be_received}\n />\n </>\n ) : (\n <Button\n onClick={() => setIsOpen(true)}\n startIcon={<Icon name=\"add\" />}\n sx={{ fontSize: 13 }}\n >\n {customCopy.add_income}\n </Button>\n )}\n <Text sx={{ fontSize: 25, lineHeight: 1 }}>-</Text>\n <CashflowAmountHeading amount={totalUpcomingExpenses} label={customCopy.to_be_paid_out} />\n <Text sx={{ fontSize: 25, lineHeight: 1 }}>=</Text>\n <CashflowAmountHeading\n amount={availableToSpend}\n label={customCopy.remaining_cash}\n tooltip={\n <InformationTooltip\n body={customCopy.remaining_income_tooltip_body}\n title={customCopy.remaining_income_tooltip_title}\n />\n }\n />\n </>\n )}\n <Drawer\n ariaLabelClose={customCopy.close_manage_income_aria}\n isOpen={isOpen}\n onClose={() => setIsOpen(false)}\n shouldShowHeaderBorders={false}\n title={customCopy.manage_income}\n >\n <ManageIncome />\n </Drawer>\n </Stack>\n )\n}\n\nexport default observer(CashflowHeading)\n","import React from 'react'\nimport { observer } from 'mobx-react-lite'\n\nimport Box from '@mui/material/Box'\nimport Button from '@mui/material/Button'\nimport Stack from '@mui/material/Stack'\n\nimport { H1, H2, Icon, P } from '@kyper/mui'\nimport useTheme from '@mui/material/styles/useTheme'\nimport { useCashflowStore, useGlobalCopyStore } from '../../../common'\n\ninterface StepOneProps {\n handleNextStep: () => void\n}\n\nconst StepOne: React.FC<StepOneProps> = ({ handleNextStep }) => {\n const { completeOnboarding } = useCashflowStore()\n const { cashflow: customCopy } = useGlobalCopyStore()\n\n const theme = useTheme()\n\n return (\n <Stack>\n <H1 pb={12}>{customCopy.welcome_title}</H1>\n <H2\n color={theme.palette.action.active}\n pb={8}\n sx={{ wordBreak: 'break-word', whiteSpace: 'initial' }}\n variant=\"H3\"\n >\n {customCopy.welcome_sub_title}\n </H2>\n <P pb={32}>{customCopy.welcome_description}</P>\n <Stack direction=\"column\" mb={32} spacing={32}>\n <P sx={{ display: 'flex', alignItems: 'center', fontSize: 18 }}>\n <Box\n bgcolor={theme.palette.primary.lighter}\n borderRadius={1}\n component=\"span\"\n height={44}\n mr={24}\n sx={{ display: 'flex', alignItems: 'center', justifyContent: 'center', flexShrink: 0 }}\n width={44}\n >\n <Icon color=\"primary\" name=\"currency_exchange\" />\n </Box>\n {customCopy.bullet_one}\n </P>\n <P sx={{ display: 'flex', alignItems: 'center', fontSize: 18 }}>\n <Box\n bgcolor={theme.palette.primary.lighter}\n borderRadius={1}\n component=\"span\"\n height={44}\n mr={24}\n sx={{ display: 'flex', alignItems: 'center', justifyContent: 'center', flexShrink: 0 }}\n width={44}\n >\n <Icon color=\"primary\" name=\"cardiology\" />\n </Box>\n {customCopy.bullet_two}\n </P>\n <P sx={{ display: 'flex', alignItems: 'center', fontSize: 18 }}>\n <Box\n bgcolor={theme.palette.primary.lighter}\n borderRadius={1}\n component=\"span\"\n height={44}\n mr={24}\n sx={{ display: 'flex', alignItems: 'center', justifyContent: 'center', flexShrink: 0 }}\n width={44}\n >\n <Icon color=\"primary\" name=\"flare\" />\n </Box>\n {customCopy.bullet_three}\n </P>\n </Stack>\n <Stack direction=\"row\" spacing={16}>\n <Button onClick={handleNextStep} variant=\"contained\">\n {customCopy.get_started_button}\n </Button>\n <Button onClick={completeOnboarding} variant=\"outlined\">\n {customCopy.skip_button}\n </Button>\n </Stack>\n </Stack>\n )\n}\n\nexport default observer(StepOne)\n","export default \"data:image/gif;base64,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Zr5sNsOmSKx8DRiYGYADzmJHc9piSZNoXwBil0YddnSvWnRmwYYtezftr6NB2aLTabfs2b+9jqaViY4nzcd9J+d6GtMoOrKgx5Y+fevpRZ9ufP+KxXv75u5AjXCMJevGKEyme5+fqB690QGebmSiFX++/a6d3GALKAAMYN5/XI2myQ219FLggQj29AJHo81ywyOcPOhfRRNGCNRot9wgwSsPcqfYcSiOhEIDLLbYgAIygXgDF66UuGFKCLjo4mkhoZgiRj72FhICGByQwgFIViBADzJR1soNfVwCQAbItfQAARUcaeQBFUQgUpBCXgTmjRshwAEBSKZpwAUZIYERlZtACcmUJkbkJkYPaJDmnl72OGZGfw5pApppprCmTC34woseW8yZgQNkovSAAHsimUKfII0ZKUSBgmQmoWqyKRMrn3DBhSeUZMajS5NWiiSmH2n/CiiYIn1a6aEyqdKHBL5soUorMrXqKqweyQokrUOeeauoMFniiw686vCIszEJWymxHRl7UQ4qMKDCt95qUauye+KKUybVUjqsSA10+627DGz6kBQwECDAvQTIYNAAOrY4mkS2lstsWtbyORG//Tbw70B7yGDvvQIY4ANHKQxUgQYGScJlBRxzfEAOFRFg0MBpCbBRDht3XMEBkhikQQUEzYBBSBgXxACoaRIwgYcGHUDRBDgjSQADDc18EgMzuDrDzhNxUJDPgUEt0QRJVzoD0TXd7KrOBWmLntdAb401TVpXyjVBXncHdtAHDG1T2XueTVqnHwEGlN2Z0h222WPTwsS23NoFieDaW9+kNUFtMz1QAz2wgMPjj7MA439aXOA45DiwgABBYSPudlEyaGDA6KMLIC6CuERMugFSS4XlQBXDjKASL8Puy8RbVUxShzzxzvPvwAcv/PDEF2/88cgnr/zyLxU2kO+7F+Q889QvVoVI11evPWOVIJS9Rt8X1P325F82vUTnl29TKhCxr/778Mcv//z012///fjnr//+/Pfv//8ADKAAB0jAAhrwgAhMoAIXyMAGOvCBEIygBCeYkIAAACH5BAUEAMQALAAAAADwAHEAh////6axweHm7/39/uHm8KCsveDl7+Ln8P7+/qeywv7+/6iywvj5+/j5/P7///v7/fb3+qOuv/3+/+Po8W+i5uXp8vH0+KGtvubq8qGsvfn6/KWwwODm7/v8/qKu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\"","import React from 'react'\nimport { observer } from 'mobx-react-lite'\n\nimport { H1, P } from '@kyper/mui'\nimport { useGlobalCopyStore } from '../../../common'\n\nimport stepTwoLoadingUrl from '../../images/loading-animation.gif'\n\nconst StepTwo: React.FC = () => {\n const { cashflow: customCopy } = useGlobalCopyStore()\n\n return (\n <React.Fragment>\n <div>\n <img alt=\"Loading\" src={stepTwoLoadingUrl} />\n </div>\n <H1 pb={12}>{customCopy.loading_title}</H1>\n <P>{customCopy.loading_description}</P>\n </React.Fragment>\n )\n}\n\nexport default observer(StepTwo)\n","export default \"data:image/png;base64,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\"","import React, { useState } from 'react'\nimport { observer } from 'mobx-react-lite'\nimport { getUnixTime } from 'date-fns/getUnixTime'\nimport { startOfMonth } from 'date-fns/startOfMonth'\nimport { startOfToday } from 'date-fns/startOfToday'\nimport { subDays } from 'date-fns/subDays'\n\nimport Box from '@mui/material/Box'\nimport Button from '@mui/material/Button'\nimport Divider from '@mui/material/Divider'\nimport List from '@mui/material/List'\nimport Stack from '@mui/material/Stack'\nimport { keyframes } from '@mui/material/styles'\nimport useTheme from '@mui/material/styles/useTheme'\n\nimport { H1, Icon, P } from '@kyper/mui'\n\nimport StepOne from './components/onboarding/StepOne'\nimport StepTwo from './components/onboarding/StepTwo'\n\nimport {\n RecurrenceTypes,\n type Transaction,\n useCashflowStore,\n useGlobalCopyStore,\n useGlobalUiStore,\n useRecurringActivityStore,\n useScreenSize,\n useTransactionStore,\n} from '../common'\nimport SubheaderRow from '../common/components/SubheaderRow'\n\nimport { useCashflowUiStore } from './context/hooks'\n\nimport { TransactionRow } from '../transactions'\nimport { incomeFilter, incomeFilterSearch } from '../transactions/utils/Filters'\nimport SelectTransaction from '../recurringactivity/components/shared/activitysettings/SelectTransaction'\nimport AddActivityDetails from '../recurringactivity/components/shared/activitysettings/AddActivityDetails'\n\nimport {\n buildNewCashflowEvent,\n buildNewCashflowSequence,\n} from '../recurringactivity/util/buildNewActivity'\n\nimport { fromUnixToDayOfWeekAndDate } from '../common/utils/DateUtil'\n\nimport stepOneImageUrl from './images/cashflow-onboarding.png'\n\ninterface UpcomingTransactions extends Transaction {\n nextDate: Date | null\n frequency: RecurrenceTypes\n}\n\nconst spin = keyframes`\n from {\n transform: rotate(0deg);\n }\n to {\n transform: rotate(360deg);\n }\n`\n\nconst CashflowOnboarding: React.FC = () => {\n const { addCashflowEvent, addCashflowSequence, cashflowSequences } = useRecurringActivityStore()\n const { cashflow: customCopy, common: commonCopy } = useGlobalCopyStore()\n\n const { completeOnboarding } = useCashflowStore()\n const { isDirty } = useCashflowUiStore()\n const { isMobile } = useScreenSize()\n const { setDisplayedDate } = useGlobalUiStore()\n const { filter, setFilter, transactions } = useTransactionStore()\n const theme = useTheme()\n\n const [addIncome, setAddIncome] = useState(true)\n const [frequency, setFrequency] = React.useState(RecurrenceTypes.EveryMonth)\n const [isSubmitting, setIsSubmitting] = useState(false)\n const [nextDate, setNextDate] = React.useState<Date | null>(null)\n const [step, setStep] = useState(1)\n const [selectedTransactions, setSelectedTransactions] = useState<UpcomingTransactions[] | []>([])\n const [transactionGuid, setTransactionGuid] = useState('')\n\n const transaction = React.useMemo(\n () => transactions.find((t) => t.guid === transactionGuid),\n [transactionGuid],\n )\n\n const canSubmit = !!cashflowSequences.length\n\n const handleGetTransactions = async () => {\n setStep(2)\n // set transaction date range and filter by income\n setDisplayedDate(\n // Beginning of the month, 90 days before today\n startOfMonth(subDays(startOfToday(), 90)),\n startOfToday(),\n )\n\n setFilter({ ...filter, custom: incomeFilter })\n\n setStep(3)\n }\n\n const handleAddIncome = async () => {\n if (selectedTransactions.length < 1) {\n return\n }\n setIsSubmitting(true)\n\n // Create CashflowSequences & CashflowEvents\n for (let i = 0; i < selectedTransactions.length; i++) {\n const upcomingTransaction = selectedTransactions[i]\n const sequence = buildNewCashflowSequence(\n upcomingTransaction,\n upcomingTransaction.frequency,\n upcomingTransaction.nextDate as Date,\n )\n const newSequence = await addCashflowSequence(sequence)\n if (newSequence) {\n const event = buildNewCashflowEvent(newSequence, upcomingTransaction)\n await addCashflowEvent(event)\n }\n }\n completeOnboarding()\n }\n\n const showSelectIncome =\n (!transaction && addIncome) || (!transaction && selectedTransactions.length < 1)\n\n return (\n <Box\n sx={{\n display: 'flex',\n alignItems: !isMobile ? 'center' : 'flex-start',\n backgroundColor: theme.palette.background.paper,\n backgroundImage: !isMobile ? `url(${stepOneImageUrl})` : null,\n backgroundRepeat: 'no-repeat',\n backgroundPosition: 'left 100px',\n backgroundSize: '35%',\n py: 24,\n }}\n >\n {step === 1 && (\n <Box\n sx={{\n ...(isMobile\n ? { display: 'flex', flexDirection: 'column', maxWidth: '100%', padding: '0 16px' }\n : { maxWidth: 590, ml: '40%', mr: 90 }),\n }}\n >\n <StepOne handleNextStep={handleGetTransactions} />\n </Box>\n )}\n {step === 2 && (\n <Box\n sx={{\n ...(isMobile\n ? { display: 'flex', flexDirection: 'column', maxWidth: '100%', padding: '0 16px' }\n : { maxWidth: 590, ml: '40%', mr: 90 }),\n }}\n >\n <StepTwo />\n </Box>\n )}\n {step === 3 && (\n <Box\n sx={{\n ...(isMobile\n ? { display: 'flex', flexDirection: 'column', maxWidth: '100%', padding: '0 16px' }\n : { maxWidth: 590, ml: '40%', mr: 90 }),\n }}\n >\n <H1 pb={12}>{customCopy.add_income_title}</H1>\n <P mb={24}>{customCopy.add_income_description}</P>\n\n {selectedTransactions.length > 0 && !transaction && (\n <>\n <List>\n {selectedTransactions.map((transaction, index) => {\n return (\n <React.Fragment key={transaction.guid}>\n <SubheaderRow bgcolor=\"background.paper\">\n {fromUnixToDayOfWeekAndDate(\n getUnixTime(transaction.nextDate || transaction.date),\n )}\n </SubheaderRow>\n <TransactionRow transaction={transaction} />\n {index !== selectedTransactions.length - 1 && <Divider />}\n </React.Fragment>\n )\n })}\n </List>\n <Stack alignItems=\"center\" direction=\"row\">\n <Divider sx={{ flexGrow: 1 }} />\n <Button\n onClick={() => setAddIncome(true)}\n startIcon={<Icon name=\"add\" size={20} />}\n >\n {customCopy.add_additional_income_button}\n </Button>\n </Stack>\n </>\n )}\n\n {showSelectIncome && (\n <SelectTransaction\n bgcolor=\"background.paper\"\n onSearch={(searchValue) =>\n setFilter({\n ...filter,\n custom: (transaction: Transaction) =>\n searchValue\n ? incomeFilterSearch(transaction, searchValue)\n : incomeFilter(transaction),\n })\n }\n onSelected={(guid) => {\n setTransactionGuid(guid)\n setAddIncome(false)\n }}\n />\n )}\n\n {!canSubmit && isDirty && (\n <P color=\"error\" mt={16}>\n {customCopy.confirm_error}\n </P>\n )}\n\n {transaction && (\n <>\n <AddActivityDetails\n bgcolor=\"background.paper\"\n frequency={frequency}\n isIncome={true}\n nextDate={nextDate}\n onFrequencyChange={setFrequency}\n onNextDateChange={setNextDate}\n transaction={transaction}\n />\n <Stack direction=\"row\" gap={16} ml={24} mt={32}>\n <Button\n aria-disabled={!transaction || !nextDate}\n onClick={() => {\n const updatedTransactions = [...selectedTransactions]\n updatedTransactions.push({ ...transaction, nextDate, frequency })\n\n setSelectedTransactions(updatedTransactions)\n setTransactionGuid('')\n }}\n variant=\"contained\"\n >\n {commonCopy.confirm_button}\n </Button>\n <Button\n onClick={() => {\n setTransactionGuid('')\n setAddIncome(true)\n handleGetTransactions()\n }}\n variant=\"outlined\"\n >\n {commonCopy.cancel_button}\n </Button>\n </Stack>\n </>\n )}\n\n {selectedTransactions.length > 0 && !transaction && (\n <Stack direction=\"row\" gap={16} ml={24} mt={32}>\n <Button\n aria-disabled={selectedTransactions.length < 1 || isSubmitting}\n onClick={handleAddIncome}\n startIcon={\n isSubmitting ? (\n <Icon\n name=\"progress_activity\"\n sx={{\n animation: `${spin} 2s linear infinite`,\n }}\n />\n ) : null\n }\n variant=\"contained\"\n >\n {customCopy.confirm_income_button}\n </Button>\n <Button onClick={completeOnboarding} variant=\"outlined\">\n {customCopy.skip_button}\n </Button>\n </Stack>\n )}\n </Box>\n )}\n </Box>\n )\n}\n\nexport default observer(CashflowOnboarding)\n","import React from 'react'\nimport { observer } from 'mobx-react-lite'\n\nimport {\n ANALYTICS_EVENTS,\n Drawer,\n useAccountStore,\n useEvent,\n useGlobalCopyStore,\n useGlobalUiStore,\n useTransactionStore,\n useUserStore,\n WidgetContainer,\n WidgetProps,\n} from '../common'\n\nimport { ActivitySettings } from '../recurringactivity'\n\nimport CashflowContent from './components/CashflowContent'\nimport CashflowHeading from './components/CashflowHeading'\nimport CashflowOnboarding from './CashflowOnboarding'\nimport { useCashflowUiStore } from './context/hooks'\n\nconst CashflowWidget: React.FC<WidgetProps> = ({ onBackClick, sx = {} }) => {\n const {\n selectedAccounts,\n selectedAccountGuids,\n setSelectedAccounts,\n shouldDisableNextDate,\n shouldDisablePrevDate,\n } = useGlobalUiStore()\n\n const { onEvent } = useEvent()\n const { cashAccounts } = useAccountStore()\n const { setFilter } = useTransactionStore()\n const { userProfile } = useUserStore()\n const { dateRange, setSelectedCashAccounts } = useCashflowUiStore()\n const { cashflow: customCopy } = useGlobalCopyStore()\n\n const [isSettingsOpen, setIsSettingsOpen] = React.useState(false)\n\n React.useEffect(() => {\n setSelectedAccounts(cashAccounts)\n }, [cashAccounts])\n\n React.useEffect(() => {\n const cashAccountGuids = cashAccounts.map((account) => account.guid)\n const selAccts = selectedAccounts.filter(\n (account) =>\n selectedAccountGuids.includes(account.guid) && cashAccountGuids.includes(account.guid),\n )\n setSelectedCashAccounts(selAccts)\n setFilter({ accounts: selAccts.map((a) => a.guid) })\n }, [cashAccounts, selectedAccounts])\n\n if (userProfile?.has_completed_cash_flow_onboarding) {\n return (\n <WidgetContainer\n accountOptions={cashAccounts}\n actions={[\n {\n label: customCopy.cashflow_settings,\n iconName: 'settings',\n onClick: () => {\n setIsSettingsOpen(true)\n onEvent(ANALYTICS_EVENTS.CASH_FLOW_CLICK_SETTINGS)\n },\n },\n ]}\n calendarActions={{\n shouldDisableNext: shouldDisableNextDate,\n shouldDisablePrevious: shouldDisablePrevDate,\n shouldDisablePicker: true,\n onRangeChanged: () => {},\n }}\n dateRange={dateRange}\n dateRangeVariant=\"readonly\"\n onAccountsFilterClick={() => onEvent(ANALYTICS_EVENTS.CASH_FLOW_CLICK_FILTER)}\n onBackClick={onBackClick}\n sx={sx}\n title={customCopy.title}\n >\n <CashflowHeading />\n\n <CashflowContent />\n\n <Drawer\n ariaLabelClose={customCopy.close_settings_aria}\n isOpen={isSettingsOpen}\n onClose={() => setIsSettingsOpen(false)}\n shouldShowHeaderBorders={false}\n title={customCopy.cashflow_settings}\n >\n <ActivitySettings />\n </Drawer>\n </WidgetContainer>\n )\n }\n\n return (\n <WidgetContainer\n onBackClick={onBackClick}\n sx={{ height: '100%', overflow: 'auto' }}\n title={customCopy.title}\n >\n <CashflowOnboarding />\n </WidgetContainer>\n )\n}\n\nexport default observer(CashflowWidget)\n","import { formatDuration, intervalToDuration } from 'date-fns'\n\nimport { Debt, formatCurrency, formatDate, DATE_FORMATS_INTL } from '../../common'\n\ntype PayoffProjection = {\n payoffSavings: string\n payoffDate: string\n payoffDuration: string\n}\n\nexport function getPayoffProjection(debts: Debt[], extraPayment?: number): PayoffProjection {\n // Sort non-zero debts by balance (ascending)\n const sortedDebts = debts.filter((d) => d.balance > 0).sort((a, b) => a.balance - b.balance)\n\n let totalSavings = 0\n let monthlyExtra = extraPayment ?? 0\n const startDate = new Date()\n const endDate = new Date()\n\n while (sortedDebts.some((debt) => debt.balance > 0)) {\n for (const debt of sortedDebts) {\n if (debt.balance <= 0) continue\n\n const monthlyInterest = (debt.balance * debt.interest_rate) / 12\n totalSavings += monthlyInterest\n\n // Apply monthly payment with any extra payment\n const appliedPayment = Math.min(debt.balance, debt.monthly_payment + monthlyExtra)\n debt.balance -= appliedPayment\n\n // If debt was paid off, roll over (\"snowball\") its payment as extra payment\n if (debt.balance <= 0) {\n monthlyExtra += debt.monthly_payment\n }\n }\n\n // Increment to the next month\n endDate.setMonth(endDate.getMonth() + 1)\n }\n\n const duration = intervalToDuration({ start: startDate, end: endDate })\n\n return {\n payoffSavings: formatCurrency(totalSavings, '0,0.00'),\n payoffDate: formatDate(endDate, DATE_FORMATS_INTL.MONTH_YEAR),\n payoffDuration: formatDuration(duration, { format: ['years', 'months'] }),\n }\n}\n","import React, { MouseEventHandler } from 'react'\nimport { observer } from 'mobx-react-lite'\nimport { Card, Stack, useTheme } from '@mui/material'\nimport { Text } from '@kyper/mui'\n\nimport { useDebtStore, useScreenSize } from '../../common'\nimport { getPayoffProjection } from '../utils/SnowballCard'\n\nconst copy = {\n date_description: 'Debt-free by',\n amount_description: 'total savings by snowballing minimum payments',\n duration_description: 'debt-free acceleration',\n drawer_cta: 'What is Snowballing?',\n}\n\nconst SnowballCard = ({ onClickCta, sx }: { onClickCta: MouseEventHandler; sx?: any }) => {\n const theme = useTheme()\n const { isMobile } = useScreenSize()\n const { debts } = useDebtStore()\n\n const { payoffDate, payoffSavings, payoffDuration } = React.useMemo(() => {\n return getPayoffProjection(debts)\n }, [debts])\n\n return (\n <Card sx={{ width: isMobile ? '100%' : '186px', minWidth: '186px', ...sx }}>\n <Stack sx={{ gap: '12px', p: '16px' }}>\n <Stack\n flexDirection={isMobile ? 'row' : 'column'}\n gap={isMobile ? '4px' : '0'}\n sx={{\n borderBottom: '1px solid',\n borderBottomColor: theme.palette.grey[300],\n pb: '8px',\n }}\n >\n <Text variant=\"XSmall\">{copy.date_description}</Text>\n <Text bold={true} color={theme.palette.primary.main} variant=\"Small\">\n {payoffDate}\n </Text>\n </Stack>\n <Stack flexDirection={isMobile ? 'row' : 'column'} gap={isMobile ? '4px' : '0'}>\n <Text bold={true} variant=\"Small\">\n {payoffSavings}\n </Text>\n <Text sx={{ whiteSpace: 'normal' }} variant=\"XSmall\">\n {copy.amount_description}\n </Text>\n </Stack>\n <Stack flexDirection={isMobile ? 'row' : 'column'} gap={isMobile ? '4px' : '0'}>\n <Text bold={true} variant=\"Small\">\n {payoffDuration}\n </Text>\n <Text variant=\"XSmall\">{copy.duration_description}</Text>\n </Stack>\n <Text\n bold={true}\n color={theme.palette.primary.main}\n onClick={onClickCta}\n sx={{ cursor: 'pointer' }}\n variant=\"Small\"\n >\n {copy.drawer_cta}\n </Text>\n </Stack>\n </Card>\n )\n}\n\nexport default observer(SnowballCard)\n","import React from 'react'\nimport { observer } from 'mobx-react-lite'\nimport { Box, Card, Stack, useTheme } from '@mui/material'\nimport { Text } from '@kyper/mui'\n\nimport { buildDynamicCopy, Drawer } from '../../common'\n\nconst copy = {\n title: 'Snowball Method',\n subtitle: 'Benefits of the snowball method',\n payoff_savings: '$361.71',\n amount_description: 'Interest Saved',\n duration_description: 'in in 3 yrs, 0 mo',\n card_question: 'What is the snowballing method?',\n card_answer:\n 'The snowball method helps you pay off multiple debts quickly by paying the same combined amount every month. When you’ve paid off the highest-priority debt, take that monthly payment and put it toward your next debt. The monthly total you pay for all the debts remains the same.',\n card_more: 'Read More',\n card_less: 'See Less',\n disclaimer:\n 'This information is for demonstration purposes and does not reflect your actual data.',\n month_header: 'Month _1{month_number}',\n payment_header: 'Payment',\n paid_label: 'Paid Off',\n total_label: 'Total payment',\n debt_label: 'Debt _1{label}',\n rollover_explainer_pt1: 'Put this _1{amount} towards ',\n rollover_explainer_pt2: ' next month.',\n}\n\ninterface SnowballDrawerProps {\n isOpen: boolean\n onClose: () => void\n sx?: any\n}\n\nconst SnowballDrawer = ({ isOpen, onClose, sx }: SnowballDrawerProps) => {\n const theme = useTheme()\n const [readMore, setReadMore] = React.useState(false)\n\n return (\n <Drawer ariaLabelClose={''} isOpen={isOpen} onClose={onClose} sx={{ ...sx }} title={copy.title}>\n <Stack bgcolor={theme.palette.grey[100]} height=\"100%\">\n {/* Drawer Header */}\n <Stack alignItems={'center'} px={24} py={24}>\n <Stack alignItems={'center'} pb={24}>\n <Text mb={12} variant=\"H3\">\n {copy.subtitle}\n </Text>\n <Text color={theme.palette.grey[700]} variant=\"Small\">\n {copy.amount_description}\n </Text>\n <Text variant=\"H1\">{copy.payoff_savings}</Text>\n <Text color={theme.palette.grey[700]} variant=\"Small\">\n {copy.duration_description}\n </Text>\n </Stack>\n {/* Drawer Info Card */}\n <Card sx={{ display: 'grid', py: 16, px: 24 }}>\n <Text mb={4} variant=\"H3\">\n {copy.card_question}\n </Text>\n <Text\n color={theme.palette.grey[700]}\n mb={8}\n sx={{ whiteSpace: readMore ? 'normal' : 'nowrap' }}\n variant=\"ParagraphSmall\"\n >\n {copy.card_answer}\n </Text>\n <Text\n bold={true}\n color={theme.palette.primary.main}\n onClick={() => setReadMore(!readMore)}\n sx={{ cursor: 'pointer' }}\n variant=\"Small\"\n >\n {!readMore ? copy.card_more : copy.card_less}\n </Text>\n </Card>\n </Stack>\n {/* Drawer Payoff Table */}\n <Stack>\n {/* Drawer Disclaimer */}\n <Text\n color={theme.palette.grey[700]}\n px={24}\n sx={{ textAlign: 'center', whiteSpace: 'normal' }}\n variant=\"Small\"\n >\n {copy.disclaimer}\n </Text>\n\n <Stack flexDirection=\"row\" justifyContent=\"space-between\" sx={{ pt: 12, px: 24, pb: 8 }}>\n <Text bold={true} variant=\"XSmall\">\n {buildDynamicCopy(copy.month_header, 1) as string}\n </Text>\n <Text bold={true} variant=\"XSmall\">\n {copy.payment_header}\n </Text>\n </Stack>\n <Stack bgcolor={theme.palette.background.paper} mb={24}>\n <Stack alignItems=\"center\" flexDirection=\"row\" pl={24}>\n <Box\n sx={{\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n width: 20,\n height: 20,\n borderRadius: '50%',\n backgroundColor: theme.palette.success.main,\n marginRight: 12,\n }}\n >\n <Text color=\"white\" fontWeight={700} variant=\"Small\">\n ✓\n </Text>\n </Box>\n <Stack\n sx={{\n borderBottom: `1px solid ${theme.palette.grey[300]}`,\n flexDirection: 'row',\n flexGrow: 1,\n py: 14,\n pr: 24,\n }}\n >\n <Stack flexGrow={1}>\n <Text variant=\"Body\">{buildDynamicCopy(copy.debt_label, 'A') as string}</Text>\n <Text color={theme.palette.grey[700]} variant=\"XSmall\">\n {buildDynamicCopy(copy.rollover_explainer_pt1, '$100') as string}\n <strong>{buildDynamicCopy(copy.debt_label, 'B') as string}</strong>\n {copy.rollover_explainer_pt2}\n </Text>\n </Stack>\n <Stack>\n <Text variant=\"Body\">$100.00</Text>\n <Text\n bold={true}\n color={theme.palette.success.main}\n textAlign=\"end\"\n variant=\"Tiny\"\n >\n {copy.paid_label}\n </Text>\n </Stack>\n </Stack>\n </Stack>\n <Stack alignItems=\"center\" flexDirection=\"row\" pl={24}>\n <Box\n sx={{\n width: 20,\n height: 20,\n marginRight: 12,\n borderRadius: '50%',\n border: `3px solid ${theme.palette.grey[700]}`,\n }}\n />\n <Stack\n sx={{\n borderBottom: `1px solid ${theme.palette.grey[300]}`,\n flexDirection: 'row',\n flexGrow: 1,\n py: 14,\n pr: 24,\n }}\n >\n <Text flexGrow={1} variant=\"Body\">\n {buildDynamicCopy(copy.debt_label, 'B') as string}\n </Text>\n <Text variant=\"Body\">$400.00</Text>\n </Stack>\n </Stack>\n <Stack alignItems=\"center\" flexDirection=\"row\" pl={24} py={14}>\n <Box\n sx={{\n width: 20,\n height: 20,\n marginRight: 12,\n borderRadius: '50%',\n border: `3px solid ${theme.palette.grey[700]}`,\n }}\n />\n <Stack flexDirection=\"row\" flexGrow={1} pr={24}>\n <Text flexGrow={1} variant=\"Body\">\n {buildDynamicCopy(copy.debt_label, 'C') as string}\n </Text>\n <Text variant=\"Body\">$1,000.00</Text>\n </Stack>\n </Stack>\n <Stack\n sx={{\n py: 8,\n px: 24,\n flexDirection: 'row',\n justifyContent: 'space-between',\n borderTop: `1px solid ${theme.palette.grey[300]}`,\n borderBottom: `1px solid ${theme.palette.grey[300]}`,\n }}\n >\n <Text bold={true} variant=\"Body\">\n {copy.total_label}\n </Text>\n <Text bold={true} variant=\"Body\">\n $1,500.00\n </Text>\n </Stack>\n </Stack>\n\n <Stack flexDirection=\"row\" justifyContent=\"space-between\" sx={{ pt: 12, px: 24, pb: 8 }}>\n <Text bold={true} variant=\"XSmall\">\n {buildDynamicCopy(copy.month_header, 2) as string}\n </Text>\n <Text bold={true} variant=\"XSmall\">\n {copy.payment_header}\n </Text>\n </Stack>\n <Stack bgcolor={theme.palette.background.paper} mb={24}>\n <Stack alignItems=\"center\" flexDirection=\"row\" pl={24}>\n <Box\n sx={{\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n width: 20,\n height: 20,\n borderRadius: '50%',\n backgroundColor: theme.palette.success.main,\n marginRight: 12,\n }}\n >\n <Text color=\"white\" fontWeight={700} variant=\"Small\">\n ✓\n </Text>\n </Box>\n <Stack\n sx={{\n borderBottom: `1px solid ${theme.palette.grey[300]}`,\n flexDirection: 'row',\n flexGrow: 1,\n py: 14,\n pr: 24,\n }}\n >\n <Stack flexGrow={1}>\n <Text variant=\"Body\">{buildDynamicCopy(copy.debt_label, 'B') as string}</Text>\n <Text color={theme.palette.grey[700]} variant=\"XSmall\">\n {buildDynamicCopy(copy.rollover_explainer_pt1, '$500') as string}\n <strong>{buildDynamicCopy(copy.debt_label, 'C') as string}</strong>\n {copy.rollover_explainer_pt2}\n </Text>\n </Stack>\n <Stack>\n <Text variant=\"Body\">$500.00</Text>\n <Text\n bold={true}\n color={theme.palette.success.main}\n textAlign=\"end\"\n variant=\"Tiny\"\n >\n {copy.paid_label}\n </Text>\n </Stack>\n </Stack>\n </Stack>\n <Stack alignItems=\"center\" flexDirection=\"row\" pl={24}>\n <Box\n sx={{\n width: 20,\n height: 20,\n marginRight: 12,\n borderRadius: '50%',\n border: `3px solid ${theme.palette.grey[700]}`,\n }}\n />\n <Stack\n sx={{\n flexDirection: 'row',\n flexGrow: 1,\n py: 14,\n pr: 24,\n }}\n >\n <Text flexGrow={1} variant=\"Body\">\n {buildDynamicCopy(copy.debt_label, 'C') as string}\n </Text>\n <Text variant=\"Body\">$1,000.00</Text>\n </Stack>\n </Stack>\n <Stack\n sx={{\n py: 8,\n px: 24,\n flexDirection: 'row',\n justifyContent: 'space-between',\n borderTop: `1px solid ${theme.palette.grey[300]}`,\n borderBottom: `1px solid ${theme.palette.grey[300]}`,\n }}\n >\n <Text bold={true} variant=\"Body\">\n {copy.total_label}\n </Text>\n <Text bold={true} variant=\"Body\">\n $1,500.00\n </Text>\n </Stack>\n </Stack>\n\n <Stack flexDirection=\"row\" justifyContent=\"space-between\" sx={{ pt: 12, px: 24, pb: 8 }}>\n <Text bold={true} variant=\"XSmall\">\n {buildDynamicCopy(copy.month_header, 3) as string}\n </Text>\n <Text bold={true} variant=\"XSmall\">\n {copy.payment_header}\n </Text>\n </Stack>\n <Stack bgcolor={theme.palette.background.paper} mb={24}>\n <Stack alignItems=\"center\" flexDirection=\"row\" pl={24}>\n <Box\n sx={{\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n width: 20,\n height: 20,\n borderRadius: '50%',\n backgroundColor: theme.palette.success.main,\n marginRight: 12,\n }}\n >\n <Text color=\"white\" fontWeight={700} variant=\"Small\">\n ✓\n </Text>\n </Box>\n <Stack\n sx={{\n alignItems: 'center',\n flexDirection: 'row',\n flexGrow: 1,\n py: 14,\n pr: 24,\n }}\n >\n <Stack flexGrow={1}>\n <Text variant=\"Body\">{buildDynamicCopy(copy.debt_label, 'C') as string}</Text>\n </Stack>\n <Stack>\n <Text variant=\"Body\">$1,500.00</Text>\n <Text\n bold={true}\n color={theme.palette.success.main}\n textAlign=\"end\"\n variant=\"Tiny\"\n >\n {copy.paid_label}\n </Text>\n </Stack>\n </Stack>\n </Stack>\n <Stack\n sx={{\n py: 8,\n px: 24,\n flexDirection: 'row',\n justifyContent: 'space-between',\n borderTop: `1px solid ${theme.palette.grey[300]}`,\n borderBottom: `1px solid ${theme.palette.grey[300]}`,\n }}\n >\n <Text bold={true} variant=\"Body\">\n {copy.total_label}\n </Text>\n <Text bold={true} variant=\"Body\">\n $1,500.00\n </Text>\n </Stack>\n </Stack>\n </Stack>\n </Stack>\n </Drawer>\n )\n}\n\nexport default observer(SnowballDrawer)\n","import React from 'react'\nimport { LineSeriesType, LineChart, HighlightItemData } from '@mui/x-charts'\nimport { useTheme } from '@mui/material/styles'\n\nimport { formatCurrency, formatDate, DATE_FORMATS_INTL } from '../../common'\n\nconst BASE_LINE_COLOR = '#FF7B08'\n\nfunction adjustBrightness(color: string, factor: number): string {\n const [r, g, b] = color\n .replace(/^#/, '')\n .match(/.{1,2}/g)!\n .map((hex) => parseInt(hex, 16))\n\n const newColor = [\n Math.max(0, Math.min(255, Math.round(r * factor))),\n Math.max(0, Math.min(255, Math.round(g * factor))),\n Math.max(0, Math.min(255, Math.round(b * factor))),\n ]\n\n return `rgb(${newColor[0]}, ${newColor[1]}, ${newColor[2]})`\n}\n\ntype DataPoint = { x: Date; y: number }\ntype Dataset = DataPoint[]\n\ninterface DebtData {\n guid: string | undefined\n name: string\n dataset: Dataset\n}\n\ninterface DebtsChartProps {\n sx?: any\n height?: number\n width?: number\n debts: DebtData[]\n hoveredDebtGuid: string\n onHoverArea: (debtGuid: string) => void\n}\n\ninterface DebtsChartSeries extends LineSeriesType {\n guid?: string | null\n}\n\nexport const DebtsChart: React.FC<DebtsChartProps> = ({\n sx,\n height = 500,\n width,\n debts,\n hoveredDebtGuid,\n onHoverArea,\n}) => {\n // TODO: Ask design team about color selection rules\n const theme = useTheme()\n\n // Generate sorted array of unique dates\n const uniqueXValues = [\n ...new Set(debts.flatMap((debt) => debt.dataset.map((point) => new Date(point.x).getTime()))),\n ]\n .sort((a, b) => a - b)\n .map((timestamp) => new Date(timestamp))\n\n // Normalize datasets with missing dates\n const normalizedDatasets = debts.map((debt) => {\n const datasetMap = new Map(debt.dataset.map((point) => [new Date(point.x).getTime(), point.y]))\n\n let lastY = datasetMap.get(uniqueXValues[0].getTime()) ?? 0\n const normalizedDataset = uniqueXValues.map((x) => {\n const y = datasetMap.get(x.getTime()) ?? lastY // Use last known value for missing points\n lastY = y\n return { x, y }\n })\n\n return { ...debt, dataset: normalizedDataset }\n })\n\n const initialTotalDebt = normalizedDatasets.reduce(\n (sum, debt) => sum + (debt.dataset[0]?.y ?? 0),\n 0,\n )\n\n const payoffLine = uniqueXValues.map((x, index) => {\n const linearRate = index / (uniqueXValues.length - 1)\n const y = initialTotalDebt * (1 - linearRate)\n return { x, y }\n })\n\n const yMax = Math.ceil(initialTotalDebt / 100) * 100\n const xData = uniqueXValues\n\n const series: DebtsChartSeries[] = normalizedDatasets.map((debt, index) => {\n const brightnessFactor = 1 - (index / normalizedDatasets.length) * 0.5\n const seriesColor = adjustBrightness(BASE_LINE_COLOR, brightnessFactor)\n\n return {\n id: `debt-${index}`,\n guid: debt.guid,\n label: debt.name,\n data: debt.dataset.map((point) => point.y),\n color: seriesColor,\n curve: 'linear',\n type: 'line',\n area: true,\n stack: 'total',\n showMark: false,\n }\n })\n\n series.push({\n id: 'payoff-line',\n label: 'Payoff Line',\n data: payoffLine.map((point) => point.y),\n color: theme.palette.grey[700],\n curve: 'linear',\n type: 'line',\n stack: undefined,\n showMark: false,\n disableHighlight: true,\n })\n\n const getIndexByGuid = (guid: string) => {\n return series.findIndex((s) => s?.guid === guid)\n }\n\n const onHighlightChange = (line: HighlightItemData | null) => {\n const highlightedGuid = series.find((s) => s.id === line?.seriesId)?.guid\n onHoverArea(highlightedGuid ?? '')\n }\n\n return (\n <LineChart\n axisHighlight={{ x: 'none' }}\n disableLineItemHighlight={true}\n height={height}\n onHighlightChange={onHighlightChange}\n series={series}\n skipAnimation={true}\n slotProps={{\n legend: {\n hidden: true,\n },\n }}\n sx={{\n p: 4,\n '& .MuiBarLabel-root': {\n fontSize: 10,\n fontWeight: 600,\n },\n '& .MuiAreaElement-root': {\n opacity: 0.4,\n transition: 'opacity 0.3s ease',\n },\n '& .MuiAreaElement-root:hover': {\n opacity: 1,\n },\n '& .MuiLineElement-series-payoff-line': {\n strokeDasharray: '10 5',\n strokeWidth: 1,\n },\n [`& .MuiLineElement-series-debt-${getIndexByGuid(hoveredDebtGuid)}`]: {\n opacity: 1,\n },\n [`& .MuiAreaElement-series-debt-${getIndexByGuid(hoveredDebtGuid)}`]: {\n opacity: 1,\n },\n ...sx,\n }}\n tooltip={{ trigger: 'none' }}\n width={width}\n xAxis={[\n {\n data: xData,\n scaleType: 'time',\n min: uniqueXValues[0],\n disableTicks: true,\n valueFormatter: (value: Date) => formatDate(value, DATE_FORMATS_INTL.MONTH_SHORT_YEAR),\n },\n ]}\n yAxis={[\n {\n min: 0,\n max: yMax,\n disableTicks: true,\n valueFormatter: (value: number) => formatCurrency(value, '0,0'),\n },\n ]}\n />\n )\n}\n","import { Text } from '@kyper/mui'\nimport { GridColumnHeaderParams } from '@mui/x-data-grid'\n\nexport const HeaderCell = (params: GridColumnHeaderParams) => (\n <Text fontWeight={600} variant=\"Small\">\n {params.colDef.headerName}\n </Text>\n)\n","import { GridCellParams } from '@mui/x-data-grid-pro'\nimport Box from '@mui/material/Box'\nimport { Text } from '@kyper/mui'\n\nconst getColors = (priority: any) => {\n const colors = {\n text: '#121417',\n background: '#FFB252',\n }\n\n if (priority === '!') {\n colors.text = '#FFFFFF'\n colors.background = '#DF320C'\n }\n\n if (priority === '✓') {\n colors.text = '#FFFFFF'\n colors.background = '#09A57F'\n }\n\n return colors\n}\n\nexport const PriorityCell = (params: GridCellParams) => {\n const priority = String(params.formattedValue)\n const colors = getColors(priority)\n\n return (\n <Box\n sx={{\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n width: 20, // Adjust the size as needed\n height: 20,\n borderRadius: '50%',\n backgroundColor: colors.background,\n marginLeft: '10px',\n }}\n >\n <Text color={colors.text} fontWeight={700} variant=\"Small\">\n {priority}\n </Text>\n </Box>\n )\n}\n","import { GridCellParams } from '@mui/x-data-grid-pro'\nimport { InstitutionLogo, Text } from '@kyper/mui'\nimport Stack from '@mui/material/Stack'\n\nimport { AccountTypeName, type Account } from '../../../common'\n\nexport const AccountCell = (params: GridCellParams) => {\n const account = params.row.account as Account\n const accountType = AccountTypeName[account.account_type]\n\n return (\n <Stack alignItems=\"center\" flexDirection=\"row\">\n <InstitutionLogo\n alt={`${account.institutionName}`}\n institutionGuid={account.institution_guid || ''}\n />\n <Stack ml={12}>\n <Text variant=\"Small\">{account.name}</Text>\n <Text variant=\"XSmall\">{accountType}</Text>\n </Stack>\n </Stack>\n )\n}\n\nexport default AccountCell\n","import React from 'react'\nimport Box from '@mui/material/Box'\nimport { fromUnixTime } from 'date-fns/fromUnixTime'\nimport { DataGridPro, GridColDef, GridSortModel } from '@mui/x-data-grid-pro'\n\nimport {\n ANALYTICS_EVENTS,\n DATE_FORMATS_INTL,\n Debt,\n formatCurrency,\n formatDate,\n useEvent,\n} from '../../common'\n\nimport { HeaderCell } from '../../trends/components/trendstable/HeaderCell'\nimport { PriorityCell } from './debtstable/PriorityCell'\nimport { AccountCell } from './debtstable/AccountCell'\nimport { useTheme } from '@mui/material'\n\nfunction getPriority(debt: Debt) {\n if (debt.position === undefined) return '!'\n if (debt.is_paid_off) return '✓'\n return debt.position\n}\n\ntype Priority = number | '!' | '✓'\nfunction priorityComparator(a: Priority, b: Priority) {\n const getWeight = (value: Priority) => {\n if (typeof value === 'number') return value // Numbers sorted naturally\n if (value === '!') return Infinity - 1 // '!' comes after numbers\n if (value === '✓') return Infinity // '✓' comes last\n throw new Error('Unsupported value')\n }\n return getWeight(a) - getWeight(b) // Compare based on weights\n}\n\ninterface DebtsTableProps {\n sx?: any\n debts: Debt[]\n hoveredDebtGuid: string\n onHoverRow?: (debtGuid: string) => void\n onClickRow?: (debtGuid: string) => void\n}\n\nexport const DebtsTable: React.FC<DebtsTableProps> = ({\n sx = {},\n debts,\n hoveredDebtGuid,\n onHoverRow,\n onClickRow,\n}) => {\n const theme = useTheme()\n const { onEvent } = useEvent()\n const [sortModel, setSortModel] = React.useState<GridSortModel>([\n { field: 'priority', sort: 'asc' },\n ])\n\n const columns: GridColDef[] = [\n {\n field: 'priority',\n headerName: 'Priority',\n renderHeader: HeaderCell,\n renderCell: PriorityCell,\n sortComparator: priorityComparator,\n sortable: true,\n hideSortIcons: true,\n type: 'custom',\n align: 'left',\n headerAlign: 'left',\n minWidth: 72,\n flex: 0.4,\n },\n {\n field: 'account',\n headerName: 'Account',\n renderHeader: HeaderCell,\n renderCell: AccountCell,\n sortable: false,\n type: 'custom',\n align: 'left',\n headerAlign: 'left',\n minWidth: 225,\n flex: 1,\n },\n {\n field: 'balance',\n headerName: 'Balance',\n renderHeader: HeaderCell,\n valueFormatter: (val) => formatCurrency(val, '0,0'),\n sortable: true,\n hideSortIcons: true,\n type: 'number',\n align: 'left',\n headerAlign: 'left',\n minWidth: 122,\n flex: 0.6,\n },\n {\n field: 'apr',\n headerName: 'APR',\n renderHeader: HeaderCell,\n valueFormatter: (v) => `${Number(v * 100).toFixed(2)}%`,\n sortable: true,\n hideSortIcons: true,\n type: 'number',\n align: 'left',\n headerAlign: 'left',\n minWidth: 122,\n flex: 0.6,\n },\n {\n field: 'payoffDate',\n headerName: 'Final Payment',\n renderHeader: HeaderCell,\n valueFormatter: (v) =>\n v ? formatDate(fromUnixTime(v), DATE_FORMATS_INTL.MONTH_SHORT_YEAR) : '',\n sortable: true,\n hideSortIcons: true,\n type: 'number',\n align: 'left',\n headerAlign: 'left',\n minWidth: 122,\n flex: 0.6,\n },\n {\n field: 'payment',\n headerName: 'Amount Due',\n renderHeader: HeaderCell,\n valueFormatter: (val) => formatCurrency(val, '0,0'),\n sortable: true,\n hideSortIcons: true,\n type: 'number',\n align: 'left',\n headerAlign: 'left',\n minWidth: 122,\n flex: 0.6,\n },\n ]\n\n const rows = React.useMemo(() => {\n return debts.map((d, idx) => ({\n id: idx,\n guid: d.guid,\n priority: getPriority(d),\n account: d.account,\n balance: d.balance,\n apr: d.interest_rate,\n payoffDate: d.projected_payoff_date,\n payment: d.monthly_payment,\n }))\n }, [debts])\n\n const onMouseEnterRow = (event: React.MouseEvent<HTMLDivElement, MouseEvent>) => {\n const target = event.target as HTMLElement\n const rowEl = target.closest('[data-id]')\n const debtIdx = rowEl?.getAttribute('data-id')\n const hoveredDebt = debts[Number(debtIdx)]\n onHoverRow?.(hoveredDebt?.guid ?? '')\n }\n\n const getRowIdByGuid = (guid: string) => {\n return rows.find((r) => r.guid === guid)?.id\n }\n\n return (\n <Box\n sx={{\n height: '100dvh',\n width: '100%',\n mt: '15px',\n overflowX: 'auto',\n boxShadow: 'none',\n ...sx,\n }}\n >\n <DataGridPro\n columns={columns}\n disableColumnFilter={true}\n disableColumnMenu={true}\n hideFooter={true}\n initialState={{ sorting: { sortModel } }}\n onRowClick={(r) => {\n onClickRow?.(r.row.category)\n onEvent(ANALYTICS_EVENTS.TRENDS_CLICK_TABLE_ROW)\n }}\n onSortModelChange={(newModel) => {\n setSortModel(newModel)\n onEvent(ANALYTICS_EVENTS.TRENDS_CLICK_TABLE_SORT)\n }}\n rows={rows}\n slotProps={{\n baseIconButton: { color: 'secondary', sx: { ml: 8 } },\n row: {\n onMouseEnter: onMouseEnterRow,\n onMouseLeave: () => onHoverRow?.(''),\n },\n }}\n sortModel={sortModel}\n sortingOrder={['asc', 'desc']}\n sx={{\n [`& .MuiDataGrid-row[data-id=\"${getRowIdByGuid(hoveredDebtGuid)}\"]`]: {\n backgroundColor: theme.palette.mode === 'light' ? '#f8f9fb' : '#1f2329',\n filter: 'brightness(98%)',\n },\n }}\n />\n </Box>\n )\n}\n","import { type Debt } from '../../common'\n\nconst transformDebtsChartData = (debts: Debt[]) => {\n return debts\n .filter((d) => d.balance > 0)\n .map((debt) => {\n // Generate example payoff data based on monthly payments\n const monthlyPayment = debt.monthly_payment\n const initialBalance = debt.current_amount\n const payoffData = []\n\n if (monthlyPayment > 0) {\n let remainingBalance = initialBalance\n const date = new Date()\n\n while (remainingBalance > 0) {\n payoffData.push({ x: new Date(date), y: remainingBalance })\n remainingBalance -= monthlyPayment\n date.setMonth(date.getMonth() + 1)\n }\n payoffData.push({ x: new Date(date), y: 0 }) // Ensure final data point is zero\n }\n\n return {\n guid: debt.guid,\n name: debt.name,\n dataset: payoffData,\n }\n })\n}\n\nexport { transformDebtsChartData }\n","import React from 'react'\nimport { observer } from 'mobx-react-lite'\nimport Stack from '@mui/material/Stack'\n\nimport {\n Loader,\n useAccountStore,\n useDebtStore,\n useGlobalUiStore,\n useGoalStore,\n useScreenSize,\n WidgetContainer,\n WidgetProps,\n} from '../common'\n\nimport SnowballCard from './components/SnowballCard'\nimport SnowballDrawer from './components/SnowballDrawer'\nimport { DebtsChart } from './components/DebtsChart'\nimport { DebtsTable } from './components/DebtsTable'\nimport { transformDebtsChartData } from './utils/DebtsWidget'\n\nconst copy = {\n title: 'Debts',\n}\n\nconst DebtsWidget: React.FC<WidgetProps> = ({ onBackClick, sx }) => {\n const [isWidgetInitialized, setIsWidgetInitialized] = React.useState(false)\n const [hoveredDebtGuid, setHoveredDebtGuid] = React.useState('')\n const [isDrawerOpen, setIsDrawerOpen] = React.useState(false)\n\n const { isInitialized, setSelectedAccounts } = useGlobalUiStore()\n const { isDesktop, isMobile } = useScreenSize()\n const { loadGoals } = useGoalStore()\n const { accounts } = useAccountStore()\n const { debts } = useDebtStore()\n\n React.useEffect(() => {\n if (isInitialized) {\n loadGoals()\n setSelectedAccounts(accounts)\n setIsWidgetInitialized(true)\n }\n }, [isInitialized])\n\n const debtsChartData = React.useMemo(() => transformDebtsChartData(debts), [debts])\n const debtsTableData = React.useMemo(() => debts, [debts])\n\n const onHoverDebt = (guid: string) => setHoveredDebtGuid(guid)\n const onAccountFilterClick = () => {}\n\n if (!isInitialized || !isWidgetInitialized) {\n return <Loader />\n }\n\n return (\n <WidgetContainer\n accountOptions={accounts}\n onAccountsFilterClick={onAccountFilterClick}\n onBackClick={onBackClick}\n sx={sx}\n title={copy.title}\n >\n <Stack sx={{ px: isDesktop ? '48px' : '24px' }}>\n <Stack\n alignItems={isMobile ? 'flex-start' : 'flex-end'}\n flexDirection={isMobile ? 'column' : 'row'}\n >\n <DebtsChart\n debts={debtsChartData}\n hoveredDebtGuid={hoveredDebtGuid}\n onHoverArea={onHoverDebt}\n sx={{ mr: isMobile ? '4px' : '-48px' }}\n />\n <SnowballCard\n onClickCta={() => setIsDrawerOpen(true)}\n sx={{ mb: isMobile ? '0px' : '64px' }}\n />\n </Stack>\n <DebtsTable\n debts={debtsTableData}\n hoveredDebtGuid={hoveredDebtGuid}\n onHoverRow={onHoverDebt}\n />\n </Stack>\n <SnowballDrawer isOpen={isDrawerOpen} onClose={() => setIsDrawerOpen(false)} />\n </WidgetContainer>\n )\n}\n\nexport default observer(DebtsWidget)\n","import Stack from '@mui/material/Stack'\n\nimport { Text } from '@kyper/mui'\n\ninterface TabTitleProps {\n title: string\n subtitle: string\n}\n\nexport function TabTitle({ title, subtitle }: TabTitleProps) {\n return (\n <Stack>\n <Text bold={true} variant=\"Body\">\n {title}\n </Text>\n <Text sx={{ fontWeight: 400 }} variant=\"Body\">\n {subtitle}\n </Text>\n </Stack>\n )\n}\n","import { fromUnixTime } from 'date-fns/fromUnixTime'\n\nimport {\n type Goal,\n type GoalsCopy,\n buildDynamicCopy,\n DATE_FORMATS_INTL,\n formatDate,\n formatPercentage,\n TrackType,\n} from '../../common'\n\nexport interface GoalStatusData {\n backgroundColor: string\n color: string\n percentage: number\n percentageText: string\n projectedText: string\n}\n\nexport function getGoalStatusData(copy: GoalsCopy, goal: Goal): GoalStatusData {\n let percentage = goal.current_amount / goal.amount\n if (percentage > 1) percentage = 1\n\n let backgroundColor = 'chart.chart1'\n let color = 'common.black'\n if (goal.track_type === TrackType.DEBT_TRACK) {\n color = 'common.white'\n backgroundColor = 'chart.chart5'\n } else if (goal.track_type === TrackType.RETIREMENT_TRACK) {\n backgroundColor = 'chart.chart6'\n }\n\n const percentageStyle = {\n style: 'percent',\n minimumFractionDigits: 0,\n maximumFractionDigits: 0,\n } as Intl.NumberFormatOptions\n\n const completionDate = goal.projected_to_complete_at\n ? fromUnixTime(goal.projected_to_complete_at)\n : new Date()\n\n const percentageText = buildDynamicCopy(\n copy.goal_percentage,\n formatPercentage(percentage, percentageStyle),\n ) as string\n\n const projectedText = buildDynamicCopy(\n copy.goal_projection,\n formatDate(completionDate, DATE_FORMATS_INTL.MONTH_SHORT_YEAR),\n ) as string\n\n return {\n backgroundColor,\n color,\n percentage,\n percentageText,\n projectedText,\n }\n}\n","import { observer } from 'mobx-react-lite'\n\nimport Card from '@mui/material/Card'\nimport CardContent from '@mui/material/CardContent'\nimport CardHeader from '@mui/material/CardHeader'\nimport Stack from '@mui/material/Stack'\n\nimport { H2, Text } from '@kyper/mui'\n\nimport {\n formatCurrency,\n type Goal,\n StatusBar,\n StatusBarData,\n useGlobalCopyStore,\n} from '../../common'\n\nimport { getGoalStatusData } from '../util/GoalsUtil'\nimport { CardActionArea } from '@mui/material'\nimport Avatar from '@mui/material/Avatar'\nimport { Payments } from '@mxenabled/mx-icons'\n\ninterface GoalStatusCardProps {\n goal: Goal\n onClick?: () => void\n}\n\nexport const GoalStatusCard = observer(({ goal, onClick }: GoalStatusCardProps) => {\n const { goals: copy } = useGlobalCopyStore()\n\n const {\n backgroundColor: bgcolor,\n color,\n percentage,\n percentageText,\n projectedText,\n } = getGoalStatusData(copy, goal)\n\n const data = [\n {\n color: bgcolor,\n percentage: `${percentage}`,\n },\n ] as StatusBarData[]\n\n return (\n <Card elevation={2} sx={{ borderRadius: 2 }}>\n <CardActionArea disabled={!onClick} onClick={onClick}>\n <CardHeader\n avatar={\n <Avatar sx={{ bgcolor, color, height: 48, width: 48 }} variant=\"rounded\">\n <Payments />\n </Avatar>\n }\n subheader={\n <Text variant=\"H2\">\n {`\n ${formatCurrency(goal.current_amount, '0,0.00')}/\n ${formatCurrency(goal.amount, '0,0.00')}\n `}\n </Text>\n }\n title={\n <H2 color=\"text.secondary\" fontWeight={400} variant=\"Body\">\n {goal.name}\n </H2>\n }\n />\n <CardContent sx={{ pt: 0 }}>\n <Stack gap={6}>\n <StatusBar data={data} height={24} />\n <Stack alignItems=\"center\" direction=\"row\" justifyContent=\"space-between\">\n <Text color=\"text.secondary\" variant=\"XSmall\">\n {percentageText}\n </Text>\n {goal.projected_to_complete_at && (\n <Text color=\"text.secondary\" variant=\"XSmall\">\n {projectedText}\n </Text>\n )}\n </Stack>\n </Stack>\n </CardContent>\n </CardActionArea>\n </Card>\n )\n})\n","import { observer } from 'mobx-react-lite'\n\nimport Button from '@mui/material/Button'\nimport Card from '@mui/material/Card'\nimport CardActionArea from '@mui/material/CardActionArea'\nimport CardContent from '@mui/material/CardContent'\nimport Grid from '@mui/material/Unstable_Grid2'\nimport Stack from '@mui/material/Stack'\n\nimport { Icon, Text } from '@kyper/mui'\n\nimport {\n formatCurrency,\n TrackType,\n useGlobalCopyStore,\n useGoalStore,\n useScreenSize,\n} from '../../common'\n\nimport { GoalStatusCard } from './GoalStatusCard'\n\ninterface GoalListProps {\n trackType: TrackType\n onManageClick: (trackType: TrackType) => void\n}\n\nexport const GoalList = observer(({ onManageClick, trackType }: GoalListProps) => {\n const { isMobile } = useScreenSize()\n const { goals: copy } = useGlobalCopyStore()\n const { goals: allGoals, setSelectedGoal } = useGoalStore()\n\n const goals = allGoals.filter((goal) => goal.track_type === trackType)\n const ongoing = goals.filter((goal) => !goal.is_complete)\n const complete = goals.filter((goal) => goal.is_complete)\n\n let manageButtonLabel = copy.manage_saving_goals\n if (trackType === TrackType.DEBT_TRACK) {\n manageButtonLabel = copy.manage_debt_goals\n } else if (trackType === TrackType.RETIREMENT_TRACK) {\n manageButtonLabel = copy.manage_retirement_goals\n }\n\n const zeroStateComplete =\n trackType === TrackType.DEBT_TRACK\n ? copy.zero_state_complete_debt\n : copy.zero_state_complete_savings\n\n return (\n <Stack mt={16} mx={isMobile ? 24 : 0}>\n <Stack alignItems=\"center\" direction=\"row\" justifyContent=\"space-between\" mb={8}>\n <Text color=\"text.secondary\" variant=\"Small\">\n {copy.ongoing_title}\n </Text>\n <Button endIcon={<Icon name=\"chevron_right\" />} onClick={() => onManageClick(trackType)}>\n {manageButtonLabel}\n </Button>\n </Stack>\n\n <Grid container={true} spacing={24}>\n {ongoing.map((goal, index, goals) => (\n // Goal should be full width in mobile or if it's the first goal (unless there are 2)\n <Grid key={index} xs={isMobile || (index === 0 && goals.length !== 2) ? 12 : 6}>\n <GoalStatusCard goal={goal} key={goal.guid} onClick={() => setSelectedGoal(goal)} />\n </Grid>\n ))}\n </Grid>\n\n {trackType !== TrackType.RETIREMENT_TRACK && (\n <Stack gap={16} mt={48}>\n <Text color=\"text.secondary\" variant=\"Small\">\n {copy.complete_title}\n </Text>\n {complete.length === 0 && (\n <Stack alignItems=\"center\" bgcolor=\"background.default\" borderRadius={2} py={18}>\n <Text variant=\"Small\">{zeroStateComplete}</Text>\n </Stack>\n )}\n {complete.map((goal) => (\n <Card elevation={2} key={goal.guid} sx={{ borderRadius: 2 }}>\n <CardActionArea onClick={() => setSelectedGoal(goal)}>\n <CardContent sx={{ ':last-child': { pb: 16 } }}>\n <Stack alignItems=\"center\" direction=\"row\" justifyContent=\"space-between\">\n <Stack alignItems=\"center\" direction=\"row\" gap={6}>\n <Icon color=\"success\" fill={true} name=\"check_circle\" size={20} />\n <Text color=\"text.secondary\" variant=\"Body\">\n {goal.name}\n </Text>\n </Stack>\n <Text bold={true} variant=\"Body\">\n {formatCurrency(goal.amount, '0,0.00')}\n </Text>\n </Stack>\n </CardContent>\n </CardActionArea>\n </Card>\n ))}\n </Stack>\n )}\n </Stack>\n )\n})\n","import React from 'react'\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 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 { ChevronRight, AddBox } from '@mxenabled/mx-icons'\n\nimport { InstitutionLogo, Text } from '@kyper/mui'\n\nimport {\n buildDynamicCopy,\n formatCurrency,\n formatPercentage,\n Goal,\n TrackType,\n useAccountStore,\n useGlobalCopyStore,\n} from '../../common'\n\nimport { GoalStatusCard } from './GoalStatusCard'\n\ninterface GoalDetailsProps {\n goal: Goal\n}\n\nexport const GoalDetails = ({ goal }: GoalDetailsProps) => {\n const { goals: copy } = useGlobalCopyStore()\n const { accounts } = useAccountStore()\n\n const account = React.useMemo(\n () => accounts.find((a) => a.guid === goal.account_guid),\n [accounts, goal],\n )\n\n let goalTitle = copy.details_save_title\n if (goal.track_type === TrackType.DEBT_TRACK) {\n goalTitle = copy.details_debt_title\n } else if (goal.track_type === TrackType.RETIREMENT_TRACK) {\n goalTitle = copy.details_retirement_title\n }\n\n return (\n <Stack>\n <Stack mx={24}>\n <Text color=\"text.secondary\" sx={{ mb: 4, mt: 24 }} variant=\"XSmall\">\n {goalTitle}\n </Text>\n <GoalStatusCard goal={goal} />\n\n <Text color=\"text.secondary\" sx={{ mb: 4, mt: 24 }} variant=\"XSmall\">\n {copy.details_title}\n </Text>\n </Stack>\n\n <List sx={{ bgcolor: 'background.paper' }}>\n {/* TODO Replace with action */}\n <ListItem>\n <ListItemButton>\n <ListItemText\n primary={copy.details_goal_name}\n primaryTypographyProps={{ fontSize: 11 }}\n secondary={goal.name}\n secondaryTypographyProps={{ fontSize: 15, fontWeight: 600 }}\n />\n <ChevronRight />\n </ListItemButton>\n </ListItem>\n <Divider variant=\"inset\" />\n\n {(goal.track_type === TrackType.SAVINGS_TRACK ||\n goal.track_type === TrackType.RETIREMENT_TRACK) && (\n // TODO Replace with action\n <>\n <ListItem>\n <ListItemButton>\n <ListItemText\n primary={copy.details_amount_to_save}\n primaryTypographyProps={{ fontSize: 11 }}\n secondary={formatCurrency(goal.amount, '0,0')}\n secondaryTypographyProps={{ fontSize: 15, fontWeight: 600 }}\n />\n <ChevronRight />\n </ListItemButton>\n </ListItem>\n <Divider\n variant={goal.track_type === TrackType.RETIREMENT_TRACK ? 'inset' : 'fullWidth'}\n />\n </>\n )}\n\n {goal.track_type === TrackType.DEBT_TRACK && (\n <>\n {/* TODO Replace with action */}\n <ListItem>\n <ListItemButton>\n <ListItemText\n primary={copy.details_monthly_payment}\n primaryTypographyProps={{ fontSize: 11 }}\n secondary={formatCurrency(goal.monthly_payment, '0,0')}\n secondaryTypographyProps={{ fontSize: 15, fontWeight: 600 }}\n />\n <ChevronRight />\n </ListItemButton>\n </ListItem>\n <Divider variant=\"inset\" />\n\n {/* TODO Replace with action */}\n <ListItem>\n <ListItemButton>\n <ListItemText\n primary={copy.details_interest_rate}\n primaryTypographyProps={{ fontSize: 11 }}\n secondary={formatPercentage(goal.interest_rate)}\n secondaryTypographyProps={{ fontSize: 15, fontWeight: 600 }}\n />\n <ChevronRight />\n </ListItemButton>\n </ListItem>\n <Divider variant=\"inset\" />\n\n {/* TODO Replace with action */}\n <ListItem>\n <ListItemButton>\n <ListItemText\n primary={copy.details_original_balance}\n primaryTypographyProps={{ fontSize: 11 }}\n secondary={formatCurrency(goal.initial_amount, '0,0')}\n secondaryTypographyProps={{ fontSize: 15, fontWeight: 600 }}\n />\n <ChevronRight />\n </ListItemButton>\n </ListItem>\n <Divider />\n </>\n )}\n\n {goal.track_type === TrackType.RETIREMENT_TRACK && (\n <>\n {/* TODO Replace with action */}\n <ListItem>\n <ListItemButton>\n <ListItemText\n primary={copy.details_retirement_age}\n primaryTypographyProps={{ fontSize: 11 }}\n secondary={65} // TODO Where do we get this value?\n secondaryTypographyProps={{ fontSize: 15, fontWeight: 600 }}\n />\n <ChevronRight />\n </ListItemButton>\n </ListItem>\n <Divider variant=\"inset\" />\n\n {/* TODO Replace with action */}\n <ListItem>\n <ListItemButton>\n <ListItemText\n primary={copy.details_birthday}\n primaryTypographyProps={{ fontSize: 11 }}\n secondary={'08/13/1985'} // TODO Where do we get this value?\n secondaryTypographyProps={{ fontSize: 15, fontWeight: 600 }}\n />\n <ChevronRight />\n </ListItemButton>\n </ListItem>\n <Divider />\n </>\n )}\n </List>\n\n <Text color=\"text.secondary\" sx={{ mb: 4, ml: 24, mt: 12 }} variant=\"XSmall\">\n {goal.track_type === TrackType.RETIREMENT_TRACK\n ? copy.details_accounts\n : copy.details_account}\n </Text>\n\n {account && (\n <>\n <ListItem sx={{ bgcolor: 'background.paper' }}>\n <ListItemButton>\n <ListItemAvatar>\n <InstitutionLogo\n alt={account.name || ''}\n institutionGuid={account.institution_guid || ''}\n />\n </ListItemAvatar>\n <ListItemText\n primary={account.name || account.feed_name}\n secondary={formatCurrency(account.balance, '0,0.00')}\n />\n <ChevronRight />\n </ListItemButton>\n </ListItem>\n <Divider />\n </>\n )}\n\n {goal.track_type === TrackType.RETIREMENT_TRACK && (\n <>\n <ListItem\n disableGutters={true}\n disablePadding={true}\n sx={{ bgcolor: 'background.paper' }}\n >\n <ListItemButton>\n <ListItemText>\n <Stack alignItems=\"center\" color=\"action.active\" direction=\"row\" gap={8}>\n <AddBox filled={true} />\n {copy.details_add_account}\n </Stack>\n </ListItemText>\n <ChevronRight color=\"primary\" />\n </ListItemButton>\n </ListItem>\n <Divider />\n </>\n )}\n\n {goal.track_type === TrackType.SAVINGS_TRACK && (\n <>\n <Button sx={{ mb: 8, mt: 24, mx: 24 }} variant=\"text\">\n {copy.details_change_account}\n </Button>\n <Text\n color=\"text.secondary\"\n sx={{ mx: 24, textAlign: 'center', whiteSpace: 'wrap' }}\n variant=\"Paragraph\"\n >\n {buildDynamicCopy(copy.details_change_account_description, goal.name) as string}\n </Text>\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 Tab from '@mui/material/Tab'\nimport Tabs from '@mui/material/Tabs'\n\nimport {\n ANALYTICS_EVENTS,\n buildDynamicCopy,\n Drawer,\n formatCurrency,\n Loader,\n TrackType,\n useAccountStore,\n useEvent,\n useGlobalCopyStore,\n useGlobalUiStore,\n useGoalStore,\n useScreenSize,\n WidgetContainer,\n WidgetProps,\n} from '../common'\n\nimport { TabTitle } from './components/TabTitle'\nimport { GoalList } from './components/GoalList'\nimport { GoalDetails } from './components/GoalDetails'\n\nexport const GoalsWidget = observer(({ onBackClick, sx }: WidgetProps) => {\n const { onEvent } = useEvent()\n const { isMobile } = useScreenSize()\n const { accounts } = useAccountStore()\n const { isInitialized, setSelectedAccounts } = useGlobalUiStore()\n const { goals: copy } = useGlobalCopyStore()\n const { loadGoals, selectedGoal, setSelectedGoal } = useGoalStore()\n\n const [selectedTab, setSelectedTab] = React.useState(0)\n\n // TODO: Replace with calculated values\n const savingTotal = 400\n const debtTotal = 205\n const retirementTotal = 624\n\n const savingsTabSubtitle = buildDynamicCopy(\n isMobile ? copy.tab_subtitle_mobile : copy.tab_subtitle,\n formatCurrency(savingTotal, '0,0'),\n ) as string\n\n const debtTabSubtitle = buildDynamicCopy(\n isMobile ? copy.tab_subtitle_mobile : copy.tab_subtitle,\n formatCurrency(debtTotal, '0,0'),\n ) as string\n\n const retireTabSubtitle = buildDynamicCopy(\n isMobile ? copy.tab_subtitle_mobile : copy.tab_subtitle,\n formatCurrency(retirementTotal, '0,0'),\n ) as string\n\n React.useEffect(() => {\n setSelectedAccounts(accounts)\n onEvent(ANALYTICS_EVENTS.GOALS_VIEW)\n }, [])\n\n React.useEffect(() => {\n if (isInitialized) {\n loadGoals().finally()\n }\n }, [isInitialized])\n\n const handleAccountFilterClick = () => {\n onEvent(ANALYTICS_EVENTS.GOALS_CLICK_FILTER)\n }\n\n const handleAddClick = () => {\n onEvent(ANALYTICS_EVENTS.GOALS_CLICK_ADD)\n }\n\n return (\n <WidgetContainer\n accountOptions={accounts}\n actions={[\n {\n iconName: 'add',\n label: copy.add_title,\n onClick: handleAddClick,\n },\n ]}\n onAccountsFilterClick={handleAccountFilterClick}\n onBackClick={onBackClick}\n sx={sx}\n title={copy.title}\n >\n {!isInitialized && <Loader />}\n {isInitialized && (\n <Stack mx={isMobile ? 0 : 48} my={24}>\n <Tabs\n onChange={(_, newValue) => setSelectedTab(newValue)}\n sx={{ bgcolor: 'background.paper' }}\n value={selectedTab}\n variant=\"fullWidth\"\n >\n <Tab label={<TabTitle subtitle={savingsTabSubtitle} title={copy.tab_saving_title} />} />\n <Tab label={<TabTitle subtitle={debtTabSubtitle} title={copy.tab_debt_title} />} />\n <Tab\n label={<TabTitle subtitle={retireTabSubtitle} title={copy.tab_retirement_title} />}\n />\n </Tabs>\n {selectedTab === 0 && (\n <GoalList onManageClick={() => {}} trackType={TrackType.SAVINGS_TRACK} />\n )}\n {selectedTab === 1 && (\n <GoalList onManageClick={() => {}} trackType={TrackType.DEBT_TRACK} />\n )}\n {selectedTab === 2 && (\n <GoalList onManageClick={() => {}} trackType={TrackType.RETIREMENT_TRACK} />\n )}\n </Stack>\n )}\n <Drawer\n isOpen={Boolean(selectedGoal)}\n onClose={() => setSelectedGoal(undefined)}\n title={copy.goal_details}\n >\n {selectedGoal && <GoalDetails goal={selectedGoal} />}\n </Drawer>\n </WidgetContainer>\n )\n})\n","import React from 'react'\nimport { observer } from 'mobx-react-lite'\nimport { useVirtualizer } from '@tanstack/react-virtual'\n\nimport Box from '@mui/material/Box'\nimport Divider from '@mui/material/Divider'\nimport List from '@mui/material/List'\nimport ListItem from '@mui/material/ListItem'\nimport ListItemAvatar from '@mui/material/ListItemAvatar'\nimport ListItemButton from '@mui/material/ListItemButton'\nimport ListItemText from '@mui/material/ListItemText'\nimport Paper from '@mui/material/Paper'\nimport Stack from '@mui/material/Stack'\n\nimport { MerchantLogo, Text } from '@kyper/mui'\n\nimport { Loader, SearchBox, useGlobalCopyStore, useMerchantStore } from '../../common'\n\nconst NAME_PATTERN = /^[ a-zA-ZÀ-ÿ0-9]+$/\nconst MAX_LENGTH = 50\nconst ROW_HEIGHT = 65 // List items have a minHeight of 64, so we add 1px for the borders so they don't disappear on hover\n\nexport interface MerchantLookupProps {\n height?: string | number\n onSelect: (guid: string) => void\n}\n\nconst MerchantLookup: React.FC<MerchantLookupProps> = ({\n height = 'calc(100dvh - 120px)',\n onSelect,\n}) => {\n const { isLoading, merchants, loadMerchants } = useMerchantStore()\n const { common: copy } = useGlobalCopyStore()\n\n const [searchValue, setSearchValue] = React.useState('')\n\n React.useEffect(() => {\n loadMerchants().finally()\n }, [loadMerchants])\n\n const handleSelected = (guid: string) => {\n onSelect(guid)\n }\n\n const handleSearch = async (value: string) => {\n if ((!value || NAME_PATTERN.test(value)) && value.length <= MAX_LENGTH) {\n setSearchValue(value)\n await loadMerchants(value)\n }\n }\n\n const parentRef = React.useRef<HTMLDivElement>(null)\n const rowVirtualizer = useVirtualizer({\n count: merchants.length,\n getScrollElement: () => parentRef.current,\n estimateSize: () => ROW_HEIGHT,\n overscan: 5,\n })\n\n React.useEffect(() => rowVirtualizer.measure(), [merchants])\n\n return (\n <Stack className=\"mx-mrt-lookup\">\n <SearchBox\n ariaLabel={copy.search_aria}\n cancelAriaLabel={copy.cancel_search_aria}\n onChange={handleSearch}\n placeholder={copy.search_placeholder}\n searchValue={searchValue}\n />\n\n <Paper sx={{ boxShadow: 'none' }}>\n <List>\n <Box height={height} overflow=\"auto\" ref={parentRef}>\n <Box height={rowVirtualizer.getTotalSize()} position=\"relative\">\n {isLoading && <Loader label=\"Loading...\" size={32} />}\n {!isLoading &&\n rowVirtualizer.getVirtualItems().length > 0 &&\n rowVirtualizer.getVirtualItems().map((row) => {\n const merchant = merchants[row.index]\n\n return (\n <Box\n height={ROW_HEIGHT}\n key={merchant.guid}\n position=\"absolute\"\n sx={{ transform: `translateY(${row.start}px)` }}\n width=\"100%\"\n >\n <ListItem disableGutters={true} disablePadding={true}>\n <ListItemButton onClick={() => handleSelected(merchant.guid)}>\n <ListItemAvatar>\n <MerchantLogo categoryGuid=\"\" merchantGuid={merchant.guid} />\n </ListItemAvatar>\n <ListItemText primary={merchant.name} />\n </ListItemButton>\n </ListItem>\n <Divider sx={{ ml: 24 }} />\n </Box>\n )\n })}\n </Box>\n {!merchants.length && (\n <Stack alignItems=\"center\" my={24}>\n <Text bold={true} color=\"secondary\" variant=\"Small\">\n {copy.search_zero_state}\n </Text>\n </Stack>\n )}\n </Box>\n </List>\n </Paper>\n </Stack>\n )\n}\n\nexport default observer(MerchantLookup)\n","import { format } from 'date-fns/format'\nimport { fromUnixTime } from 'date-fns/fromUnixTime'\nimport { startOfMonth } from 'date-fns/startOfMonth'\nimport { subMonths } from 'date-fns/subMonths'\n\nimport type { Account, Member, MonthlyAccountBalance } from '../../common/types'\nimport { AccountTypeName, AccountIcon, AccountIconVariants } from '../../common/types'\nimport { isAccountLiability } from '../../accounts/utils'\nimport { FinancialAccount, AccountGroup, NetWorth } from '../types/NetWorth'\n\nconst MAX_NUMBER_MONTHS = 13\n\nexport const filterAccounts = (accounts: Account[], members: Member[]) => {\n return accounts.filter((account) => {\n const { is_closed, is_deleted, is_hidden, is_manual } = account\n\n if (is_closed || is_deleted || is_hidden) return false\n if (is_manual || !account.guid) return true\n\n return members.some((member) => {\n return accounts.some((account) => {\n return member.guid === account.member_guid\n })\n })\n })\n}\n\nexport const flattenBalances = (balances: any, balance: any) => {\n return [...balances, ...balance]\n}\n\nexport const getLatestNetWorthData = (chartData: NetWorth[]) => {\n if (chartData && chartData.length > 0) {\n return chartData[chartData.length - 1]\n } else return undefined\n}\n\nexport const sortByYearMonthAscending = (a: MonthlyAccountBalance, b: MonthlyAccountBalance) =>\n a.year_month - b.year_month\n\nconst buildDateTicks = () => {\n return Array.from({ length: MAX_NUMBER_MONTHS }, (_, count) => {\n return Math.floor(startOfMonth(subMonths(new Date(), count)).getTime() / 1000)\n }).sort()\n}\n\nexport const buildChartData = (\n accounts: Account[],\n monthlyAccountBalances: MonthlyAccountBalance[],\n numberOfMonths: number,\n) => {\n if (!accounts.length || !monthlyAccountBalances.length) return []\n const dateTicks = buildDateTicks()\n return dateTicks\n .reduceRight((result: any, x) => {\n const balances = monthlyAccountBalances.filter(\n ({ year_month }) => year_month === parseInt(format(fromUnixTime(x), 'yyyyMM')),\n )\n const accountsWithBalances = accounts.map((account) => {\n const balance = balances.find((balance) => balance.account_guid === account.guid)\n\n const zeroBalance = {\n change: 0,\n guid: account.guid,\n name: account.name,\n type: account.account_type,\n balance: 0,\n }\n\n if (!balance && result.length === 0 && !account.balance) return zeroBalance\n\n // The servers return the monthly account balances in Utah time. Frontend starts all the date calculations\n // in UTC. We get into overlaps for a few hours depending on the timezone with no monthly account balances\n // for all accounts.\n if (!balance && result.length === 0) {\n return {\n ...zeroBalance,\n value: isAccountLiability(account) ? -(account.balance ?? 0) : (account.balance ?? 0),\n }\n }\n\n if (!balance) {\n const lastBalance = result[0].accounts.find((acc: Account) => acc.guid === account.guid)\n\n return lastBalance ? lastBalance : zeroBalance\n }\n\n return {\n change: balance.transaction_total,\n guid: account.guid,\n name: account.name,\n type: account.account_type,\n value: balance.balance,\n }\n })\n\n const { y, change } = accountsWithBalances.reduce(\n (acc, current) => {\n return {\n y: acc.y + (current.value || 0),\n change: acc.change + (current.change || 0),\n }\n },\n { y: 0, change: 0 },\n )\n\n return [\n {\n accounts: accountsWithBalances,\n x,\n y,\n change,\n },\n ...result,\n ]\n }, [])\n .slice(MAX_NUMBER_MONTHS - numberOfMonths)\n}\n\nexport const buildGainsLosses = (selectedData?: NetWorth) => {\n const gains: { accountName: string; gain: number }[] = []\n const losses: { accountName: string; loss: number }[] = []\n let totalGains = 0\n let totalLosses = 0\n\n selectedData?.accounts.forEach((account) => {\n if (account.change > 0) {\n gains.push({ accountName: account.name, gain: account.change })\n totalGains += account.change\n }\n if (account.change < 0) {\n losses.push({ accountName: account.name, loss: account.change })\n totalLosses += account.change\n }\n })\n\n return { netWorth: selectedData, gains, losses, totalGains, totalLosses }\n}\n\nexport const buildAssetsLiabilities = (accounts: Account[]) => {\n const assets: FinancialAccount[] = []\n const liabilities: FinancialAccount[] = []\n let totalAssets = 0\n let totalLiabilities = 0\n\n accounts.forEach((account) => {\n if (isAccountLiability(account)) {\n const balance = account.balance ?? 0\n liabilities.push({ accountName: account.name, accountType: account.account_type, balance })\n totalLiabilities += balance\n } else {\n const balance = account.balance ?? 0\n assets.push({ accountName: account.name, accountType: account.account_type, balance })\n totalAssets += balance\n }\n })\n\n return { assets, liabilities, totalAssets, totalLiabilities }\n}\n// groups accounts by account type\n// returns array of account groups, each with an icon, name, and the grouped accounts\nexport const groupAccounts = (accounts: FinancialAccount[]): AccountGroup[] => {\n const groupedAccounts = accounts.reduce<{ [key: number]: FinancialAccount[] }>((acc, account) => {\n const accountType = account.accountType\n if (!acc[accountType]) {\n acc[accountType] = []\n }\n acc[accountType].push(account)\n return acc\n }, {})\n\n return Object.entries(groupedAccounts).map(([accountType, accounts]) => ({\n icon: AccountIconVariants[+accountType] || AccountIcon[+accountType],\n name: AccountTypeName[+accountType],\n accounts,\n }))\n}\n","import { format } from 'date-fns/format'\nimport { fromUnixTime } from 'date-fns/fromUnixTime'\nimport { observer } from 'mobx-react-lite'\n\nimport { useTheme } from '@mui/material/styles'\n\nimport { LineChart, useScreenSize, useWidgetContainerProvider } from '../../common'\n\nimport { NetWorthProps } from '../types/NetWorth'\n\nconst NetWorthChart: React.FC<NetWorthProps> = ({\n chartData,\n hoveredData,\n onDataClick: onMarkClick,\n onMouseEnter,\n onMouseLeave,\n selectedData,\n}) => {\n const { isMobile } = useScreenSize()\n const { availableWidth } = useWidgetContainerProvider()\n const theme = useTheme()\n\n // on mobile, chart is same width as list; on desktop, chart takes up what the list does not\n const chartWidthNotMobile = availableWidth - 320\n\n const datasets = chartData.map((point) => {\n return {\n x: format(fromUnixTime(point.x), 'MMM'),\n y: point.y,\n }\n })\n\n const selectedMark = selectedData\n ? { index: chartData.findIndex((point) => point.x === selectedData.x) }\n : undefined\n\n const hoveredMark = hoveredData\n ? { index: chartData.findIndex((point) => point.x === hoveredData.x) }\n : undefined\n\n const getMarkStyles = (markIndex: number) => {\n const markStyles = {\n fill: markIndex === selectedMark?.index ? theme.palette.success.main : '',\n filter:\n markIndex === hoveredMark?.index\n ? `drop-shadow(0px 0px 10px ${theme.palette.success.main})`\n : 'none',\n stroke: theme.palette.success.main,\n }\n return markStyles\n }\n\n return (\n <LineChart\n baseline=\"min\" // causes the area below the line to be shaded\n colors={[theme.palette.success.main]}\n datasets={[datasets]}\n height={350}\n labels={[]}\n margin={{ right: 20 }}\n markHandlers={{ onMarkClick, onMouseEnter, onMouseLeave }}\n markStyles={getMarkStyles}\n showArea={true}\n useCustomMark={true}\n valueFormatterString=\"0,0a\" // formats to '109k' instead of '109,000'\n width={isMobile ? 320 : chartWidthNotMobile}\n />\n )\n}\n\nexport default observer(NetWorthChart)\n","import { observer } from 'mobx-react-lite'\nimport React from 'react'\n\nimport Divider from '@mui/material/Divider'\nimport ListItem from '@mui/material/ListItem'\nimport ListItemButton from '@mui/material/ListItemButton'\nimport ListItemText from '@mui/material/ListItemText'\nimport Stack from '@mui/material/Stack'\n\nimport { Text } from '@kyper/mui'\n\nimport { CurrencyText, fromTimestampToMonthYear } from '../../common/'\nimport { NetWorth } from '../types/NetWorth'\n\ninterface NetWorthListItemProps {\n item: NetWorth\n getStyles: (item: NetWorth) => { backgroundColor: string; borderBottom: string; color: string }\n isHovered: boolean\n isSelected: boolean\n onItemClick?: (event: React.MouseEvent<HTMLDivElement, MouseEvent>, dataIndex: number) => void\n onMouseEnter: (dataIndex: number) => void\n onMouseLeave: () => void\n}\n\nconst NetWorthListItem: React.FC<NetWorthListItemProps> = ({\n item: dataPoint,\n getStyles,\n isHovered = false,\n isSelected = false,\n onItemClick,\n onMouseEnter,\n onMouseLeave,\n}) => {\n const [listItemStyles, setListItemStyles] = React.useState({\n color: '',\n })\n\n React.useEffect(() => {\n setListItemStyles(getStyles(dataPoint))\n }, [isHovered, isSelected])\n\n return (\n <React.Fragment key={dataPoint.x}>\n <ListItem\n sx={{\n ...listItemStyles,\n minHeight: 44,\n '&:hover': { color: isSelected ? 'inherit' : listItemStyles.color },\n }}\n >\n <ListItemButton\n onClick={(event) => onItemClick?.(event, dataPoint.x)}\n onMouseEnter={() => onMouseEnter(dataPoint.x)}\n onMouseLeave={() => onMouseLeave()}\n sx={{ minHeight: 44 }}\n >\n <ListItemText\n primary={\n <Stack direction=\"row\" justifyContent=\"space-between\" sx={{ fontWeight: 400 }}>\n <Text variant=\"Body\">{fromTimestampToMonthYear(dataPoint.x)}</Text>\n <CurrencyText amount={dataPoint.y} sx={{ color: 'inherit' }} variant=\"Body\" />\n </Stack>\n }\n />\n </ListItemButton>\n </ListItem>\n <Divider />\n </React.Fragment>\n )\n}\n\nexport default observer(NetWorthListItem)\n","import { observer } from 'mobx-react-lite'\nimport React from 'react'\n\nimport Divider from '@mui/material/Divider'\nimport List from '@mui/material/List'\nimport ListSubheader from '@mui/material/ListSubheader'\nimport Stack from '@mui/material/Stack'\n\nimport { useTheme } from '@mui/material/styles'\n\nimport { Text } from '@kyper/mui'\n\nimport { useGlobalCopyStore } from '../../common'\n\nimport NetWorthListItem from './NetWorthListItem'\nimport { NetWorth, NetWorthProps } from '../types/NetWorth'\nimport { Button } from '@mui/material'\n\nconst NetWorthList: React.FC<NetWorthProps> = ({\n chartData,\n hoveredData,\n onDataClick: onListItemClick,\n onButtonClick,\n onMouseEnter,\n onMouseLeave,\n selectedData,\n}) => {\n const { net_worth: copy } = useGlobalCopyStore()\n const theme = useTheme()\n\n const buildStyles = (lineItem: NetWorth) => {\n const isHovered = lineItem.x === hoveredData?.x\n const isSelected = lineItem.x === selectedData?.x\n\n const listItemStyles = {\n backgroundColor: 'inherit',\n borderBottom: 'inherit',\n color: 'inherit',\n padding: '12px',\n }\n\n if (isHovered) {\n listItemStyles.color = isSelected ? 'inherit' : listItemStyles.color\n listItemStyles.backgroundColor = theme.palette.action.hover\n }\n\n if (isSelected) {\n listItemStyles.backgroundColor = theme.palette.primary.main\n listItemStyles.borderBottom = theme.palette.border.light\n listItemStyles.color = theme.palette.common.white\n }\n\n return listItemStyles\n }\n\n return (\n <Stack direction=\"column\" width={320}>\n <List>\n <ListSubheader sx={{ backgroundColor: 'transparent', mb: 8, mt: 12, mx: 8 }}>\n <Text bold={true} component=\"h2\" variant=\"Body\">\n {copy.monthly_totals}\n </Text>\n </ListSubheader>\n <Divider />\n {chartData.map((dataPoint: NetWorth, index: number) => {\n return (\n <NetWorthListItem\n getStyles={buildStyles}\n isHovered={dataPoint.x === hoveredData?.x}\n isSelected={dataPoint.x === selectedData?.x}\n item={dataPoint}\n key={dataPoint.x}\n onItemClick={(event) => onListItemClick(event, index)}\n onMouseEnter={() => onMouseEnter(index)}\n onMouseLeave={() => onMouseLeave()}\n />\n )\n })}\n </List>\n <Button\n onClick={() => onButtonClick()}\n sx={{ alignSelf: 'center', marginTop: 16, width: 'fit-content' }}\n variant=\"outlined\"\n >\n {copy.view_assets_and_liabilities}\n </Button>\n </Stack>\n )\n}\n\nexport default observer(NetWorthList)\n","import { observer } from 'mobx-react-lite'\n\nimport { Stack, Theme } from '@mui/material'\nimport { TypographyProps } from '@mui/material/Typography'\nimport { Icon, Text } from '@kyper/mui'\nimport { CurrencyText } from '../../common/components/CurrencyText'\nimport { NetWorth } from '../types/NetWorth'\n\ninterface NetWorthChangeProps {\n netWorth: NetWorth\n currencyVariant?: TypographyProps['variant']\n currencyLabel?: string\n iconSize?: number\n theme: Theme\n}\n\nconst NetWorthChange: React.FC<NetWorthChangeProps> = ({\n currencyLabel,\n currencyVariant = 'Small',\n iconSize,\n netWorth,\n theme,\n}) => {\n let iconColor = theme.palette.secondary.main\n let currencyTextColor = theme.palette.secondary.main\n let iconName = 'trending_flat'\n\n if (netWorth.change < 0) {\n iconName = 'trending_down'\n } else if (netWorth.change > 0) {\n iconColor = theme.palette.success.main\n currencyTextColor = theme.palette.success.main\n iconName = 'trending_up'\n }\n\n return (\n <Stack alignItems=\"center\" direction=\"row\" spacing={4}>\n <Icon\n name={iconName}\n size={iconSize}\n sx={{\n color: iconColor,\n }}\n />\n <CurrencyText amount={netWorth.change} color={currencyTextColor} variant={currencyVariant} />\n <Text variant=\"Small\">{currencyLabel}</Text>\n </Stack>\n )\n}\n\nexport default observer(NetWorthChange)\n","import { observer } from 'mobx-react-lite'\nimport { fromUnixTime, format } from 'date-fns'\n\nimport { useTheme } from '@mui/material/styles'\nimport Stack from '@mui/material/Stack'\n\nimport { Text } from '@kyper/mui'\n\nimport { CurrencyText, useGlobalCopyStore } from '../../common/'\nimport NetWorthChange from './NetWorthChange'\nimport { NetWorth } from '../types/NetWorth'\n\ninterface NetWorthSummaryProps {\n hoveredData?: NetWorth\n selectedData: NetWorth\n}\n\nconst NetWorthSummary: React.FC<NetWorthSummaryProps> = ({ hoveredData, selectedData }) => {\n const { net_worth: copy } = useGlobalCopyStore()\n const theme = useTheme()\n const summary = hoveredData ? hoveredData : selectedData\n\n const formattedMonth = format(fromUnixTime(summary.x), 'MMMM')\n\n return (\n <Stack alignItems=\"center\" direction=\"column\" m={24}>\n <Text color={theme.palette.secondary.main} variant=\"Small\">\n {`${formattedMonth} ${copy.net_worth}`}\n </Text>\n <CurrencyText amount={summary.y} variant=\"H2\" />\n <NetWorthChange currencyLabel={copy.this_month} netWorth={summary} theme={theme} />\n </Stack>\n )\n}\n\nexport default observer(NetWorthSummary)\n","import { observer } from 'mobx-react-lite'\nimport React from 'react'\n\nimport Box from '@mui/material/Box'\nimport Collapse from '@mui/material/Collapse'\nimport Divider from '@mui/material/Divider'\nimport List from '@mui/material/List'\nimport ListItem from '@mui/material/ListItem'\nimport ListItemButton from '@mui/material/ListItemButton'\nimport ListItemIcon from '@mui/material/ListItemIcon'\nimport ListItemText from '@mui/material/ListItemText'\nimport ListSubheader from '@mui/material/ListSubheader'\nimport Stack from '@mui/material/Stack'\nimport useTheme from '@mui/material/styles/useTheme'\n\nimport { Icon, Text } from '@kyper/mui'\n\nimport { CurrencyText, useGlobalCopyStore } from '../../common/'\nimport NetWorthChange from './NetWorthChange'\nimport { AccountGroup, AssetsLiabilities } from '../types/NetWorth'\nimport { groupAccounts } from '../utils/NetWorthUtils'\n\nconst Group: React.FC<AccountGroup> = ({ accounts, name, icon }) => {\n const [isOpen, setIsOpen] = React.useState(false)\n\n return (\n <>\n <ListItem sx={(theme) => ({ backgroundColor: theme.palette.background.paper })}>\n <ListItemButton onClick={() => setIsOpen(!isOpen)}>\n {icon && (\n <ListItemIcon>\n <Icon name={icon} size={24} sx={{ mr: 12 }} />\n </ListItemIcon>\n )}\n <ListItemText\n primary={\n <Text sx={{ fontWeight: 700 }} variant=\"Body\">\n {name}\n </Text>\n }\n />\n <ListItemIcon>\n {isOpen ? <Icon name=\"expand_less\" size={24} /> : <Icon name=\"expand_more\" size={24} />}\n </ListItemIcon>\n </ListItemButton>\n </ListItem>\n <Divider />\n <Collapse in={isOpen} timeout=\"auto\" unmountOnExit={true}>\n {accounts.map((account, index) => (\n <List key={account.accountName}>\n <ListItem sx={() => ({ py: 14 })}>\n <ListItemText\n primary={\n <Stack direction=\"row\" justifyContent=\"space-between\" sx={{ fontWeight: 400 }}>\n <Text variant=\"Body\">{account.accountName}</Text>\n <CurrencyText amount={account.balance} variant=\"Small\" />\n </Stack>\n }\n sx={{ pl: 72, pr: 16 }}\n />\n </ListItem>\n {index < accounts.length - 1 ? <Divider variant=\"inset\" /> : <Divider />}\n </List>\n ))}\n </Collapse>\n </>\n )\n}\n\nconst ListGroup: React.FC<{\n groupedAccounts: AccountGroup[]\n}> = ({ groupedAccounts }) => (\n <>\n {groupedAccounts.map(({ accounts, icon, name }) => (\n <Group accounts={accounts} icon={icon} key={name} name={name} />\n ))}\n </>\n)\n\nconst AssetsLiabilitiesDetail: React.FC<AssetsLiabilities> = ({\n netWorth,\n assets,\n liabilities,\n totalAssets,\n totalLiabilities,\n}) => {\n const { net_worth: copy } = useGlobalCopyStore()\n\n const theme = useTheme()\n\n return (\n <>\n <Box\n sx={{\n alignItems: 'center',\n display: 'flex',\n flexDirection: 'column',\n justifyContent: 'space-between',\n paddingTop: 24,\n marginBottom: 8,\n }}\n >\n <Text variant=\"Body\">{copy.current_net_worth}</Text>\n <CurrencyText amount={netWorth?.y ?? 0} variant=\"H1\" />\n {netWorth && (\n <NetWorthChange\n currencyLabel={copy.this_month}\n iconSize={20}\n netWorth={netWorth}\n theme={theme}\n />\n )}\n </Box>\n <List>\n <ListSubheader sx={{ mb: 8, mt: 12, mx: 8 }}>\n <ListItemText\n primary={\n <Stack direction=\"row\" justifyContent=\"space-between\">\n <Text sx={{ fontWeight: 700 }} variant=\"XSmall\">\n {copy.assets}\n </Text>\n <CurrencyText amount={totalAssets} sx={{ fontWeight: 400 }} variant=\"XSmall\" />\n </Stack>\n }\n />\n </ListSubheader>\n <ListGroup groupedAccounts={groupAccounts(assets)} />\n <ListSubheader sx={{ mb: 8, mt: 12, mx: 8 }}>\n <ListItemText\n primary={\n <Stack direction=\"row\" justifyContent=\"space-between\">\n <Text sx={{ fontWeight: 700 }} variant=\"XSmall\">\n {copy.liabilities}\n </Text>\n <CurrencyText amount={totalLiabilities} sx={{ fontWeight: 400 }} variant=\"XSmall\" />\n </Stack>\n }\n />\n </ListSubheader>\n <ListGroup groupedAccounts={groupAccounts(liabilities)} />\n </List>\n </>\n )\n}\n\nexport default observer(AssetsLiabilitiesDetail)\n","import { observer } from 'mobx-react-lite'\nimport React from 'react'\n\nimport Divider from '@mui/material/Divider'\nimport List from '@mui/material/List'\nimport ListItem from '@mui/material/ListItem'\nimport ListItemText from '@mui/material/ListItemText'\nimport ListSubheader from '@mui/material/ListSubheader'\nimport Stack from '@mui/material/Stack'\n\nimport useTheme from '@mui/material/styles/useTheme'\n\nimport { Text } from '@kyper/mui'\n\nimport { CurrencyText, fromTimestampToMonthYear, useGlobalCopyStore } from '../../common/'\n\nimport { GainsLosses } from '../types/NetWorth'\nimport NetWorthChange from './NetWorthChange'\n\nconst GainsLossesDetail: React.FC<GainsLosses> = ({\n netWorth,\n gains,\n losses,\n totalGains,\n totalLosses,\n}) => {\n const { net_worth: copy } = useGlobalCopyStore()\n\n const theme = useTheme()\n\n return (\n <>\n <Stack alignItems=\"center\" justifyContent=\"space-between\" mb={8} pt={24}>\n <Text variant=\"Small\">{fromTimestampToMonthYear(netWorth?.x)}</Text>\n <Text variant=\"Body\">{copy.total_change}</Text>\n {netWorth && (\n <NetWorthChange currencyVariant={'H1'} iconSize={32} netWorth={netWorth} theme={theme} />\n )}\n </Stack>\n <List>\n <ListSubheader sx={{ mb: 8, mt: 12, mx: 8 }}>\n <ListItemText\n primary={\n <Stack direction=\"row\" justifyContent=\"space-between\">\n <Text sx={{ fontWeight: 700 }} variant=\"XSmall\">\n {copy.gains}\n </Text>\n <CurrencyText amount={totalGains} sx={{ fontWeight: 400 }} variant=\"XSmall\" />\n </Stack>\n }\n />\n </ListSubheader>\n {gains?.map((gain) => (\n <React.Fragment key={gain.accountName}>\n <ListItem sx={{ backgroundColor: theme.palette.background.paper, py: 14 }}>\n <ListItemText\n primary={\n <Stack direction=\"row\" justifyContent=\"space-between\" sx={{ fontWeight: 400 }}>\n <Text variant=\"Body\">{gain.accountName}</Text>\n <CurrencyText\n amount={gain.gain}\n sx={{ color: theme.palette.success.main, fontWeight: 700 }}\n variant=\"Body\"\n />\n </Stack>\n }\n sx={{ px: 16 }}\n />\n </ListItem>\n <Divider />\n </React.Fragment>\n ))}\n\n <ListSubheader sx={{ mb: 8, mt: 12, mx: 8 }}>\n <ListItemText\n primary={\n <Stack direction=\"row\" justifyContent=\"space-between\">\n <Text sx={{ fontWeight: 700 }} variant=\"XSmall\">\n {copy.losses}\n </Text>\n <CurrencyText amount={totalLosses} sx={{ fontWeight: 400 }} variant=\"XSmall\" />\n </Stack>\n }\n />\n </ListSubheader>\n {losses?.map((loss) => (\n <>\n <ListItem\n key={loss.accountName}\n sx={{ backgroundColor: theme.palette.background.paper, py: 14 }}\n >\n <ListItemText\n primary={\n <Stack direction=\"row\" justifyContent=\"space-between\" sx={{ fontWeight: 400 }}>\n <Text variant=\"Body\">{loss.accountName}</Text>\n <CurrencyText amount={loss.loss} sx={{ fontWeight: 700 }} variant=\"Body\" />\n </Stack>\n }\n sx={{ px: 16 }}\n />\n </ListItem>\n <Divider />\n </>\n ))}\n </List>\n </>\n )\n}\n\nexport default observer(GainsLossesDetail)\n","import { differenceInMonths } from 'date-fns'\nimport { observer } from 'mobx-react-lite'\nimport React from 'react'\n\nimport Stack from '@mui/material/Stack'\n\nimport type { DateRange } from '@mui/x-date-pickers-pro'\n\nimport {\n ANALYTICS_EVENTS,\n Drawer,\n Loader,\n useAccountStore,\n useEvent,\n useGlobalCopyStore,\n useGlobalUiStore,\n useNetWorthStore,\n useScreenSize,\n WidgetContainer,\n WidgetProps,\n} from '../common'\n\nimport AssetsLiabilitiesDetail from './components/AssetsLiabilitiesDetail'\nimport GainsLossesDetail from './components/GainsLossesDetail'\nimport NetWorthChart from './components/NetWorthChart'\nimport NetWorthList from './components/NetWorthList'\nimport NetWorthSummary from './components/NetWorthSummary'\nimport { NetWorthProps } from './types/NetWorth'\n\nexport const NetWorthWidget: React.FC<WidgetProps> = observer(({ onBackClick }) => {\n const { isInitialized, selectedAccounts, setSelectedAccounts } = useGlobalUiStore()\n const { net_worth: copy } = useGlobalCopyStore()\n const { accounts } = useAccountStore()\n const {\n assetsLiabilities,\n gainsLosses,\n hoveredData,\n loadChartData,\n loadNetWorthData,\n netWorthChartData,\n selectedData,\n setHoveredData,\n setSelectedData,\n } = useNetWorthStore()\n const { isMobile } = useScreenSize()\n const { onEvent } = useEvent()\n\n const [isWidgetInitialized, setIsWidgetInitialized] = React.useState(false)\n const [timeframe, setTimeFrame] = React.useState(6) // default timeframe is 6 months\n const [isGlDrawerOpen, setIsGlDrawerOpen] = React.useState(false)\n const [isAlDrawerOpen, setIsAlDrawerOpen] = React.useState(false)\n\n const initalizeWidget = async () => {\n await loadNetWorthData(selectedAccounts)\n await loadChartData(timeframe)\n setIsWidgetInitialized(true)\n }\n\n React.useEffect(() => {\n onEvent(ANALYTICS_EVENTS.NET_WORTH_VIEW)\n setSelectedAccounts(accounts)\n }, [])\n\n React.useEffect(() => {\n if (isInitialized) {\n initalizeWidget()\n }\n }, [isInitialized, selectedAccounts])\n\n React.useEffect(() => {\n onEvent(ANALYTICS_EVENTS.NET_WORTH_WIDGET_CLICK_TIMEFRAME, { time_period: timeframe + 'M' })\n loadChartData(timeframe)\n }, [timeframe])\n\n const handleDataClick = (\n event: React.MouseEvent<SVGPathElement | HTMLDivElement, MouseEvent>,\n dataIndex: number,\n ) => {\n setSelectedData(dataIndex)\n if (event.currentTarget instanceof HTMLDivElement) {\n setIsGlDrawerOpen(true)\n }\n }\n\n const handleMouseEnter = (dataIndex: number) => {\n setHoveredData(dataIndex)\n }\n\n const handleMouseLeave = () => {\n setHoveredData(null)\n }\n\n const handleViewAssetsLiabilitiesClick = () => {\n onEvent(ANALYTICS_EVENTS.NET_WORTH_WIDGET_CLICK_ASSETS_LIABILITIES)\n setIsAlDrawerOpen(true)\n }\n\n const handleRangeChanged = async (range: DateRange<Date>) => {\n const startDate = range[0]\n const endDate = range[1]\n\n if (startDate && endDate) {\n setTimeFrame(differenceInMonths(endDate, startDate))\n }\n }\n\n const netWorthProps: NetWorthProps = {\n chartData: netWorthChartData,\n hoveredData: hoveredData,\n onButtonClick: handleViewAssetsLiabilitiesClick,\n onDataClick: handleDataClick,\n onMouseEnter: handleMouseEnter,\n onMouseLeave: handleMouseLeave,\n selectedData: selectedData,\n }\n\n if (!isWidgetInitialized) {\n return <Loader />\n }\n\n return (\n <WidgetContainer\n accountOptions={accounts}\n calendarActions={{\n onRangeChanged: handleRangeChanged,\n }}\n dateRangeVariant={isMobile ? 'timeframetabs' : 'timeframebuttons'}\n onAccountsFilterClick={() => onEvent(ANALYTICS_EVENTS.NET_WORTH_WIDGET_CLICK_FILTER)}\n onBackClick={onBackClick}\n showDividerAboveDateSelector={false}\n sx={{ p: isMobile ? 0 : 48 }}\n title={copy.net_worth}\n >\n {isWidgetInitialized && (\n <>\n {selectedData && (\n <NetWorthSummary hoveredData={hoveredData} selectedData={selectedData} />\n )}\n <Stack\n alignItems={isMobile ? 'center' : 'flex-start'}\n direction={isMobile ? 'column' : 'row'}\n spacing={isMobile ? 0 : 48}\n >\n <NetWorthChart {...netWorthProps} />\n <NetWorthList {...netWorthProps} />\n </Stack>\n <Drawer\n ariaLabelClose={'Close'}\n isOpen={isGlDrawerOpen}\n onClose={() => setIsGlDrawerOpen(false)}\n shouldShowHeaderBorders={false}\n shouldShowHeaderShadow={true}\n title={copy.gains_and_losses}\n >\n {gainsLosses && <GainsLossesDetail {...gainsLosses} />}\n </Drawer>\n <Drawer\n ariaLabelClose={'Close'}\n isOpen={isAlDrawerOpen}\n onClose={() => setIsAlDrawerOpen(false)}\n shouldShowHeaderBorders={false}\n shouldShowHeaderShadow={true}\n title={copy.assets_and_liabilities}\n >\n {assetsLiabilities && <AssetsLiabilitiesDetail {...assetsLiabilities} />}\n </Drawer>\n </>\n )}\n </WidgetContainer>\n )\n})\n","import { fromUnixTime, isSameDay } from 'date-fns'\n\nimport { Notification } from '../../common'\n\nexport const sortByDate = (a: Notification, b: Notification) => {\n return b.delivered_at - a.delivered_at\n}\n\nexport const shouldShowDate = (index: number, notifications: Notification[]) => {\n const currentDate = fromUnixTime(notifications[index].delivered_at)\n const previousDate = fromUnixTime(notifications[index - 1]?.delivered_at)\n\n return !isSameDay(currentDate, previousDate)\n}\n\nexport const hasInsetBorder = (index: number, notifications: Notification[]) => {\n const currentDate = fromUnixTime(notifications[index].delivered_at)\n const nextDate = fromUnixTime(notifications[index + 1]?.delivered_at)\n\n return isSameDay(currentDate, nextDate)\n}\n","import React from 'react'\nimport { observer } from 'mobx-react-lite'\n\nimport { InstitutionLogo, CategoryIcon } from '@kyper/mui'\n\nimport { useAccountStore, useBudgetsStore, useGlobalCopyStore } from '../../common'\nimport { type Notification } from '../../common/types'\n\ninterface NotificationBadgeProps {\n notification: Notification\n}\n\nconst NotificationBadge: React.FC<NotificationBadgeProps> = ({ notification }) => {\n const { accounts } = useAccountStore()\n const { budgets } = useBudgetsStore()\n const { accounts: accountsCopy } = useGlobalCopyStore()\n\n const account = accounts.find((account) => account.guid === notification.entity_guid)\n const budget = budgets.find((budget) => budget.guid === notification.entity_guid)\n const isGoal = notification.entity_guid.includes('GOL')\n\n const styles = {\n badge: {\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n borderRadius: 4,\n marginRight: 12,\n },\n }\n\n if (account || isGoal) {\n return (\n <div style={styles.badge}>\n <InstitutionLogo\n alt={account?.institutionName || accountsCopy.institution_logo_alt}\n institutionGuid={account?.institution_guid ?? ''}\n size={33}\n />\n </div>\n )\n } else {\n return (\n <div style={styles.badge}>\n <CategoryIcon categoryGuid={budget?.category_guid} size={36} />\n </div>\n )\n }\n}\n\nexport default observer(NotificationBadge)\n","import React from 'react'\nimport { Card, useTheme } from '@mui/material'\nimport { Text } from '@kyper/mui'\n\nimport { type Notification } from '../../common/types'\nimport { useNotificationStore } from '../../common'\nimport NotificationBadge from './NotificationBadge'\n\ninterface NotificationCardProps {\n notification: Notification\n onClick: (notification: Notification) => void\n}\n\nconst NotificationCard: React.FC<NotificationCardProps> = ({ notification, onClick }) => {\n const { updateNotification } = useNotificationStore()\n const theme = useTheme()\n\n const styles = {\n card: {\n alignItems: 'center',\n borderRadius: 2,\n cursor: 'pointer',\n display: 'flex',\n marginBottom: 12,\n paddingX: 24,\n paddingY: 12,\n '&:focus': {\n backgroundColor: theme.palette.background.default,\n },\n '&:hover': {\n backgroundColor: theme.palette.background.default,\n },\n },\n dot: {\n backgroundColor: theme.palette.primary.main,\n borderRadius: '100%',\n flex: '0 0 auto',\n marginLeft: -8,\n marginRight: 8,\n height: 8,\n width: 8,\n },\n }\n\n const handleOnClick = () => {\n onClick(notification)\n updateNotification({ ...notification, has_been_viewed: true }).finally()\n }\n\n return (\n <Card onClick={handleOnClick} sx={styles.card}>\n {!notification.has_been_viewed ? (\n <div data-testid=\"new-message-dot\" style={styles.dot} />\n ) : null}\n <NotificationBadge notification={notification} />\n <Text bold={!notification.has_been_viewed} truncate={false} variant={'Small'}>\n {notification.content}\n </Text>\n </Card>\n )\n}\n\nexport default NotificationCard\n","import React from 'react'\nimport Box from '@mui/material/Box'\nimport { Text } from '@kyper/mui'\n\nimport { fromUnixToDayOfWeekAndDate } from '../../common/utils/DateUtil'\n\ninterface DateRowProps {\n date: number\n}\n\nconst DateRow: React.FC<DateRowProps> = ({ date }) => {\n return (\n <Box sx={{ display: 'flex', justifyContent: 'center', mt: 12, py: 8 }}>\n <Text bold={true} variant=\"Small\">\n {fromUnixToDayOfWeekAndDate(date)}\n </Text>\n </Box>\n )\n}\n\nexport default DateRow\n","import React, { useEffect } from 'react'\nimport { observer } from 'mobx-react-lite'\n\nimport { Box, Divider, List } from '@mui/material'\nimport { Text } from '@kyper/mui'\n\nimport { shouldShowDate } from '../utils/NotificationUtils'\nimport { type Notification } from '../../common/types'\n\nimport { Loader, useGlobalCopyStore, useNotificationStore } from '../../common'\nimport NotificationCard from './NotificationCard'\nimport DateRow from './DateRow'\n\nexport interface NotificationListProps {\n onClick?: (notification: Notification) => void\n}\n\nconst NotificationList: React.FC<NotificationListProps> = ({ onClick }) => {\n const { isLoading, recentNotifications, markAllAsViewed } = useNotificationStore()\n const { notifications: notificationsCopy } = useGlobalCopyStore()\n\n const handleClick = (notification: Notification) => {\n onClick?.(notification)\n }\n\n useEffect(() => {\n return () => {\n markAllAsViewed().finally()\n }\n }, [])\n\n return (\n <List sx={{ p: 16 }}>\n {isLoading && <Loader label={notificationsCopy?.loading} size={40} />}\n {!isLoading && recentNotifications.length === 0 && (\n <Box sx={{ p: 16 }}>\n <Text fontStyle=\"italic\" sx={{ textAlign: 'center' }}>\n {notificationsCopy.no_notifications}\n </Text>\n </Box>\n )}\n {!isLoading &&\n recentNotifications\n .slice()\n .sort((a, b) => b.delivered_at - a.delivered_at)\n .map((notification, index) => {\n const showDate = shouldShowDate(index, recentNotifications)\n\n return (\n <Box key={notification.guid} sx={{ mb: 12 }}>\n {showDate && (\n <Box sx={{ mb: 12 }}>\n <DateRow date={notification.delivered_at} />\n <Divider />\n </Box>\n )}\n <NotificationCard notification={notification} onClick={handleClick} />\n </Box>\n )\n })}\n </List>\n )\n}\n\nexport default observer(NotificationList)\n","import Divider from '@mui/material/Divider'\nimport ListItem from '@mui/material/ListItem'\nimport ListItemButton from '@mui/material/ListItemButton'\nimport ListItemText from '@mui/material/ListItemText'\n\ninterface AccountActionsRowProps {\n onClick: () => void\n isLast?: boolean\n primaryText: string\n secondaryText: string\n}\n\nconst AccountActionsRow: React.FC<React.PropsWithChildren<AccountActionsRowProps>> = ({\n children,\n isLast = false,\n onClick,\n primaryText,\n secondaryText,\n}) => {\n return (\n <>\n <ListItem sx={{ backgroundColor: 'background.paper' }}>\n <ListItemButton onClick={onClick}>\n <ListItemText primary={primaryText} secondary={secondaryText} />\n {children}\n </ListItemButton>\n </ListItem>\n <Divider sx={{ ml: isLast ? 0 : 24 }} />\n </>\n )\n}\n\nexport default AccountActionsRow\n","import React from 'react'\nimport { GlobalDataContext, useAccountStore } from '../../common'\n\nexport const useAccountUiStore = () => {\n const context = React.useContext(GlobalDataContext)\n\n if (!context) {\n throw new Error('useCategoryUiStore() must be used within the GlobalDataContext')\n }\n\n return useAccountStore().uiStore\n}\n","import { useAccountStore } from '../../common'\nimport { useAccountUiStore } from './useUiStore'\n\nexport const useGetMergeableAccounts = () => {\n const { accounts } = useAccountStore()\n const { selectedAccount, selectedMember } = useAccountUiStore()\n return accounts.filter(\n (account) =>\n account.member_guid === selectedMember.guid &&\n selectedMember.successfully_aggregated_at &&\n account.guid !== selectedAccount.guid,\n )\n}\n","import React from 'react'\nimport { observer } from 'mobx-react-lite'\n\nimport Divider from '@mui/material/List'\nimport List from '@mui/material/List'\nimport ListSubheader from '@mui/material/ListSubheader'\nimport Switch from '@mui/material/Switch'\n\nimport { Icon, Text } from '@kyper/mui'\n\nimport AccountActionsRow from './AccountActionsRow'\n\nimport {\n ANALYTICS_EVENTS,\n Account,\n Dialog,\n Drawer,\n buildDynamicCopy,\n useAccountStore,\n useEvent,\n useGlobalCopyStore,\n} from '../../../../common'\nimport { useAccountUiStore } from '../../../hooks/useUiStore'\nimport { useGetMergeableAccounts } from '../../../hooks/useGetMergeableAccounts'\nimport AccountListItem from '../../AccountListItem'\n\ntype UpdatedValue = Pick<Account, 'is_closed'> | Pick<Account, 'is_hidden'>\n\nconst AccountActions = () => {\n const [shouldShowCloseAccountModal, setShouldShowCloseAccountModal] = React.useState(false)\n const [shouldShowAccountMergeDrawer, setShouldShowAccountMergeDrawer] = React.useState(false)\n const [shouldShowMergeConfirmModal, setShouldShowMergeConfirmModal] = React.useState(false)\n const [accountToMerge, setAccountToMerge] = React.useState({} as Account)\n\n const { selectedAccount: account } = useAccountUiStore()\n const { mergeAccounts, updateAccount } = useAccountStore()\n const { accounts: accountsCopy } = useGlobalCopyStore()\n const mergeableAccounts = useGetMergeableAccounts()\n const { onEvent } = useEvent()\n\n const handleUpdateAccount = (updatedValue: UpdatedValue) => {\n updateAccount({\n ...account,\n ...updatedValue,\n })\n }\n\n const handleMergeAccounts = () => {\n mergeAccounts([account.guid, accountToMerge.guid]).finally(() =>\n setShouldShowAccountMergeDrawer(false),\n )\n }\n\n return (\n <>\n <ListSubheader sx={{ backgroundColor: 'transparent', mb: 4, mt: 12, mx: 8 }}>\n <Text bold={true} component=\"h2\" variant=\"XSmall\">\n {accountsCopy.actions}\n </Text>\n </ListSubheader>\n\n <AccountActionsRow\n onClick={() => {\n handleUpdateAccount({ is_hidden: !account.is_hidden })\n onEvent(ANALYTICS_EVENTS.ACCOUNT_DETAILS_CLICK_HIDE, { account_guid: account.guid })\n }}\n primaryText={account.is_hidden ? accountsCopy.unhide_account : accountsCopy.hide_Account}\n secondaryText={\n account.is_hidden ? accountsCopy.include_this_account : accountsCopy.exclude_this_account\n }\n >\n <Switch checked={account.is_hidden} />\n </AccountActionsRow>\n\n <AccountActionsRow\n onClick={() => {\n setShouldShowCloseAccountModal(true)\n onEvent(ANALYTICS_EVENTS.ACCOUNT_DETAILS_CLICK_MARK_CLOSED, {\n account_guid: account.guid,\n })\n }}\n primaryText={account.is_closed ? accountsCopy.mark_as_open : accountsCopy.mark_as_closed}\n secondaryText={accountsCopy.this_will_set_the_account_balance_to_0}\n >\n <Icon name=\"chevron_right\" />\n </AccountActionsRow>\n\n {mergeableAccounts.length > 0 && (\n <AccountActionsRow\n isLast={true}\n onClick={() => {\n setShouldShowAccountMergeDrawer(true)\n onEvent(ANALYTICS_EVENTS.ACCOUNT_DETAILS_CLICK_MARK_DUPLICATE, {\n account_guid: account.guid,\n })\n }}\n primaryText={accountsCopy.mark_as_duplicate}\n secondaryText={accountsCopy.if_a_connected_account_is_showing_up_twice}\n >\n <Icon name=\"chevron_right\" />\n </AccountActionsRow>\n )}\n\n <Dialog\n copy={{\n close_aria: accountsCopy.close_modal,\n title: account.is_closed\n ? accountsCopy.confirm_mark_as_open\n : accountsCopy.confirm_mark_closed,\n }}\n isOpen={shouldShowCloseAccountModal}\n onClose={() => {\n setShouldShowCloseAccountModal(false)\n }}\n onPrimaryAction={() => handleUpdateAccount({ is_closed: !account.is_closed })}\n >\n {\n buildDynamicCopy(\n account.is_closed\n ? accountsCopy.this_will_resume_updating_the_balance\n : accountsCopy.this_will_set_the_balance_of_your_account,\n account.name,\n ) as string\n }\n </Dialog>\n\n <Drawer\n ariaLabelClose={accountsCopy.close_drawer}\n isOpen={shouldShowAccountMergeDrawer}\n onClose={() => setShouldShowAccountMergeDrawer(false)}\n title={accountsCopy.mark_as_duplicate}\n >\n <List>\n {mergeableAccounts.map((account: Account) => {\n const isLast = mergeableAccounts.indexOf(account) === mergeableAccounts.length - 1\n return (\n <React.Fragment key={account.guid}>\n <AccountListItem\n account={account}\n onRowClick={() => {\n setShouldShowMergeConfirmModal(true)\n setAccountToMerge(account)\n }}\n />\n <Divider sx={{ ml: isLast ? 0 : 24 }} />\n </React.Fragment>\n )\n })}\n </List>\n </Drawer>\n {shouldShowMergeConfirmModal && (\n <Dialog\n copy={{\n close_aria: accountsCopy.close_modal,\n title: accountsCopy.confirm_merge,\n }}\n isOpen={shouldShowMergeConfirmModal}\n onClose={() => setShouldShowMergeConfirmModal(false)}\n onPrimaryAction={handleMergeAccounts}\n >\n {\n buildDynamicCopy(\n accountsCopy.this_means_accounts_will_be_merged,\n account.name,\n accountToMerge.name,\n ) as string\n }\n <Text color=\"error\" sx={{ mt: 24 }}>\n {accountsCopy.this_action_cannot_be_undone}\n </Text>\n </Dialog>\n )}\n </>\n )\n}\n\nexport default observer(AccountActions)\n","import { fromUnixTime } from 'date-fns/fromUnixTime'\nimport { isToday } from 'date-fns/isToday'\nimport { isYesterday } from 'date-fns/isYesterday'\n\nimport {\n ConnectCopy,\n ConnectionStatusEnums,\n DATE_FORMATS_INTL,\n buildDynamicCopy,\n formatDate,\n type Member,\n} from '../../common'\n\nexport interface ConnectionMessageObject {\n cta?: string\n main: string\n statusName: string\n title: string\n}\n\nexport const getConnectionMessages: any = (member: Member, copy: ConnectCopy) => {\n const { connection_messages } = copy\n\n switch (member.connection_status) {\n case ConnectionStatusEnums.CHALLENGED: {\n return {\n cta: connection_messages.challenged_cta,\n main: buildDynamicCopy(\n connection_messages.challenged_connection_description,\n member.name,\n ) as string,\n statusName: copy.connection_statuses[member.connection_status],\n title: connection_messages.challenged_connection_title,\n }\n }\n case ConnectionStatusEnums.CLOSED: {\n return {\n main: connection_messages.closed_connection_description,\n statusName: copy.connection_statuses[member.connection_status],\n title: connection_messages.closed_connection_title,\n }\n }\n case ConnectionStatusEnums.DEGRADED: {\n return {\n main: connection_messages.degraded_connection_description,\n statusName: copy.connection_statuses[member.connection_status],\n title: connection_messages.degraded_connection_title,\n }\n }\n case ConnectionStatusEnums.DELAYED: {\n return {\n main: buildDynamicCopy(\n connection_messages.delayed_connection_description,\n member.name,\n ) as string,\n statusName: copy.connection_statuses[member.connection_status],\n title: connection_messages.delayed_connection_title,\n }\n }\n case ConnectionStatusEnums.DENIED: {\n return {\n cta: connection_messages.denied_cta,\n main: buildDynamicCopy(\n connection_messages.denied_connection_description,\n member.name,\n ) as string,\n statusName: copy.connection_statuses[member.connection_status],\n title: connection_messages.denied_connection_title,\n }\n }\n case ConnectionStatusEnums.DISABLED: {\n return {\n main: connection_messages.disabled_connection_description,\n statusName: copy.connection_statuses[member.connection_status],\n title: connection_messages.disabled_connection_title,\n }\n }\n case ConnectionStatusEnums.DISCONNECTED: {\n return {\n main: buildDynamicCopy(\n connection_messages.disconnected_connection_description,\n member.name,\n ) as string,\n statusName: copy.connection_statuses[member.connection_status],\n title: connection_messages.disconnected_connection_title,\n }\n }\n case ConnectionStatusEnums.DISCONTINUED: {\n return {\n main: connection_messages.discontinued_connection_description,\n statusName: copy.connection_statuses[member.connection_status],\n title: connection_messages.discontinued_connection_title,\n }\n }\n case ConnectionStatusEnums.EXPIRED: {\n return {\n cta: connection_messages.expired_cta,\n main: connection_messages.expired_connection_description,\n statusName: copy.connection_statuses[member.connection_status],\n title: connection_messages.expired_connection_title,\n }\n }\n case ConnectionStatusEnums.FAILED: {\n return {\n main: buildDynamicCopy(\n connection_messages.failed_connection_description,\n member.name,\n ) as string,\n statusName: copy.connection_statuses[member.connection_status],\n title: connection_messages.failed_connection_title,\n }\n }\n case ConnectionStatusEnums.IMPAIRED: {\n return {\n cta: connection_messages.impaired_cta,\n main: buildDynamicCopy(\n connection_messages.impaired_connection_description,\n member.name,\n ) as string,\n statusName: copy.connection_statuses[member.connection_status],\n title: connection_messages.impaired_connection_title,\n }\n }\n case ConnectionStatusEnums.IMPEDED: {\n return {\n main: buildDynamicCopy(\n connection_messages.impeded_connection_description,\n member.name,\n member.name,\n ) as string,\n statusName: copy.connection_statuses[member.connection_status],\n title: connection_messages.impeded_connection_title,\n }\n }\n case ConnectionStatusEnums.IMPORTED: {\n return {\n cta: connection_messages.imported_cta,\n main: buildDynamicCopy(\n connection_messages.imported_connection_description,\n member.name,\n ) as string,\n statusName: copy.connection_statuses[member.connection_status],\n title: connection_messages.imported_connection_title,\n }\n }\n case ConnectionStatusEnums.LOCKED: {\n return {\n cta: connection_messages.locked_cta,\n main: buildDynamicCopy(\n connection_messages.locked_connection_description,\n member.name,\n ) as string,\n statusName: copy.connection_statuses[member.connection_status],\n title: connection_messages.locked_connection_title,\n }\n }\n case ConnectionStatusEnums.PREVENTED: {\n return {\n cta: connection_messages.prevented_cta,\n main: connection_messages.prevented_connection_description,\n statusName: copy.connection_statuses[member.connection_status],\n title: connection_messages.prevented_connection_title,\n }\n }\n case ConnectionStatusEnums.REJECTED: {\n return {\n cta: connection_messages.rejected_cta,\n main: connection_messages.rejected_connection_description,\n statusName: copy.connection_statuses[member.connection_status],\n title: connection_messages.rejected_connection_title,\n }\n }\n default: {\n const lastUpdatedCopy = () => {\n const lastUpdated = member.successfully_aggregated_at\n ? fromUnixTime(member.successfully_aggregated_at)\n : undefined\n const lastUpdatedFormattedTime =\n lastUpdated && formatDate(lastUpdated, DATE_FORMATS_INTL.TIME_STAMP_HOUR_MINUTE)\n\n if (!lastUpdatedFormattedTime) return undefined\n if (isToday(lastUpdated))\n return buildDynamicCopy(copy.last_updated_at, copy.today, lastUpdatedFormattedTime)\n if (isYesterday(lastUpdated))\n return buildDynamicCopy(copy.last_updated_at, copy.yesterday, lastUpdatedFormattedTime)\n return buildDynamicCopy(\n copy.last_updated_at,\n formatDate(lastUpdated, DATE_FORMATS_INTL.MONTH_DAY_YEAR),\n lastUpdatedFormattedTime,\n )\n }\n return {\n statusName: copy.connection_statuses[6], // Connected\n title: lastUpdatedCopy(),\n }\n }\n }\n}\n","import React from 'react'\nimport { observer } from 'mobx-react-lite'\n\nimport CheckCircleRoundedIcon from '@mui/icons-material/CheckCircleRounded'\nimport Divider from '@mui/material/Divider'\nimport ErrorIcon from '@mui/icons-material/Error'\nimport LanguageRoundedIcon from '@mui/icons-material/LanguageRounded'\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 ListSubheader from '@mui/material/ListSubheader'\nimport Stack from '@mui/material/Stack'\nimport useTheme from '@mui/material/styles/useTheme'\n\nimport { Icon, THEMES, Text } from '@kyper/mui'\n\nimport ConnectDrawer from '../../../../common/components/ConnectDrawer'\nimport { IconBacking, NonConnectedStatuses, useGlobalCopyStore } from '../../../../common'\nimport { getConnectionMessages } from '../../../utils/getConnectionMessages'\nimport { useAccountUiStore } from '../../../hooks/useUiStore'\n\nconst iconStyle = {\n color: 'background.default',\n fontSize: 20,\n gridRow: 1,\n gridColumn: 1,\n zIndex: 2,\n}\n\nconst AccountConnection = () => {\n const [shouldShowConnectDrawer, setShouldShowConnectDrawer] = React.useState(false)\n const {\n palette: { mode },\n } = useTheme()\n const { selectedMember: member } = useAccountUiStore()\n const { accounts: accountsCopy, connect: connectCopy } = useGlobalCopyStore()\n\n const statusMessages = getConnectionMessages(member, connectCopy)\n\n const status = NonConnectedStatuses.includes(member.connection_status)\n ? {\n color: 'error.main',\n ctaCopy: statusMessages.cta ?? '',\n icon: <ErrorIcon sx={{ ...iconStyle }} />,\n mainMessage: statusMessages.statusName,\n secondaryMessage: `${statusMessages.title}.`,\n }\n : {\n color: 'success.main',\n icon: <CheckCircleRoundedIcon sx={{ ...iconStyle }} />,\n mainMessage: statusMessages.statusName,\n secondaryMessage: statusMessages.title,\n }\n\n return (\n <>\n <ListSubheader sx={{ mb: 4, mt: 12, mx: 8 }}>\n <Text bold={true} component=\"h2\" variant=\"XSmall\">\n {accountsCopy.connection_status}\n </Text>\n </ListSubheader>\n <ListItem sx={{ backgroundColor: 'background.paper' }}>\n {member.is_manual || !status.ctaCopy ? (\n <Stack alignItems=\"center\" direction=\"row\" px={24} py={12}>\n <ListItemAvatar>\n <IconBacking backingSx={{ backgroundColor: status.color, borderRadius: 1 }} size={32}>\n {status.icon}\n </IconBacking>\n </ListItemAvatar>\n <ListItemText primary={status.mainMessage} secondary={status.secondaryMessage} />\n </Stack>\n ) : (\n <ListItemButton onClick={() => setShouldShowConnectDrawer(true)}>\n <ListItemAvatar>\n <IconBacking backingSx={{ backgroundColor: status.color, borderRadius: 1 }} size={32}>\n {status.icon}\n </IconBacking>\n </ListItemAvatar>\n <ListItemText\n primary={status.mainMessage}\n secondary={\n status.secondaryMessage && (\n <>\n {status.secondaryMessage}{' '}\n <Text bold={true} sx={{ color: 'action.active' }} variant=\"XSmall\">\n {status.ctaCopy}\n </Text>\n </>\n )\n }\n />\n <Icon name=\"chevron_right\" />\n </ListItemButton>\n )}\n </ListItem>\n <Divider sx={{ ml: member.is_manual || !member.institution_url ? 0 : 24 }} />\n\n {!member.is_manual && member.institution_url && (\n <>\n <ListItem sx={{ backgroundColor: 'background.paper' }}>\n <ListItemButton component=\"a\" href={member.institution_url} target=\"_blank\">\n <ListItemAvatar>\n <IconBacking\n backingSx={{\n backgroundColor: mode === THEMES.LIGHT ? 'grey.300' : 'grey.700',\n borderRadius: 1,\n }}\n size={32}\n >\n <LanguageRoundedIcon\n sx={{\n ...iconStyle,\n color: mode === THEMES.LIGHT ? 'grey.900' : 'common.white',\n }}\n />\n </IconBacking>\n </ListItemAvatar>\n <ListItemText primary={member.name} secondary={member.institution_url} />\n <Icon name=\"launch\" />\n </ListItemButton>\n </ListItem>\n <Divider />\n </>\n )}\n\n {shouldShowConnectDrawer && (\n <ConnectDrawer\n loadWidgetProps={{ current_member_guid: member.guid }}\n onClose={() => setShouldShowConnectDrawer(false)}\n showConnectWidget={shouldShowConnectDrawer}\n title={accountsCopy.manage_connection}\n />\n )}\n </>\n )\n}\n\nexport default observer(AccountConnection)\n","import React from 'react'\nimport { observer } from 'mobx-react-lite'\n\nimport { addMonths } from 'date-fns/addMonths'\n\nimport { AdapterDateFns } from '@mui/x-date-pickers/AdapterDateFnsV3'\nimport { DateCalendar } from '@mui/x-date-pickers/DateCalendar'\nimport FormControl from '@mui/material/FormControl'\nimport InputLabel from '@mui/material/InputLabel'\nimport { LocalizationProvider } from '@mui/x-date-pickers-pro'\nimport MenuItem from '@mui/material/MenuItem'\nimport Select from '@mui/material/Select'\nimport TextField from '@mui/material/TextField'\n\nimport {\n CurrencyInput,\n Dialog,\n buildDynamicCopy,\n useAccountStore,\n useGlobalCopyStore,\n} from '../../../../common'\n\nimport { type AccountField } from '../../../utils/AccountFields'\nimport { useAccountUiStore } from '../../../hooks/useUiStore'\nimport { FieldType } from '../../../constants/Accounts'\n\ninterface AccountDetailEditProps {\n field: AccountField\n isOpen: boolean\n onClose: () => void\n}\n\nconst AccountDetailEdit: React.FC<AccountDetailEditProps> = ({ field, isOpen, onClose }) => {\n const { updateAccount } = useAccountStore()\n const { selectedAccount: account } = useAccountUiStore()\n const { accounts: accountsCopy } = useGlobalCopyStore()\n\n const [editedValue, setEditedValue] = React.useState<any>(account[field.name])\n const [errorMessage, setErrorMessage] = React.useState('')\n const [hasValidCurrencyInput, setHasValidCurrencyInput] = React.useState(true)\n\n const handleClose = () => {\n setEditedValue('')\n setErrorMessage('')\n onClose()\n }\n\n const getEditableField = () => {\n switch (field.type) {\n case FieldType.Select: {\n return (\n <FormControl fullWidth={true}>\n <InputLabel id={`${field.label}-select-label`}>{field.label}</InputLabel>\n <Select\n id={`${field.label}-select`}\n inputProps={{\n sx: {\n backgroundColor: 'background.paper',\n },\n }}\n label={field.label}\n labelId={`${field.label}-select-label`}\n onChange={(e) => setEditedValue(e.target.value)}\n placeholder={field.placeholder}\n value={editedValue}\n >\n {field.options?.map((option) => (\n <MenuItem key={option.value} value={option.value}>\n {option.label}\n </MenuItem>\n ))}\n </Select>\n </FormControl>\n )\n }\n\n case FieldType.Currency: {\n return (\n <CurrencyInput\n amount={(editedValue as string | number) || ''}\n fullWidth={true}\n label={field.label}\n placeholder={field.placeholder}\n setAmount={setEditedValue}\n setHasValidInput={setHasValidCurrencyInput}\n />\n )\n }\n\n case FieldType.Date: {\n return (\n <LocalizationProvider dateAdapter={AdapterDateFns}>\n <DateCalendar\n maxDate={addMonths(new Date(), 1)}\n minDate={new Date()}\n onChange={(date: Date) => {\n if (account[field.name] && Number(account[field.name]) <= 31) {\n // gets and sets the day of the month to editedValue\n setEditedValue(date.getDate())\n } else {\n // the day of the month was already passed, so we set it directly to state\n setEditedValue(date)\n }\n }}\n views={['day']}\n />\n </LocalizationProvider>\n )\n }\n\n default: {\n return (\n <TextField\n defaultValue={account[field.name]}\n error={!!errorMessage}\n fullWidth={true}\n helperText={errorMessage}\n onChange={updateField}\n placeholder={field.placeholder}\n />\n )\n }\n }\n }\n\n const saveField = () => {\n // prevents any unnecessary api calls\n if (account[field.name] !== editedValue) {\n updateAccount({\n ...account,\n [field.name]: editedValue,\n })\n }\n handleClose()\n }\n\n const updateField = (e: React.ChangeEvent<HTMLInputElement>) => {\n setEditedValue(e.target.value)\n\n if (field.validation) {\n setErrorMessage(field.validation(e.target.value))\n }\n }\n\n return (\n <Dialog\n copy={{\n close_aria: accountsCopy.close_aria,\n title: buildDynamicCopy(accountsCopy.edit_field, field.label) as string,\n }}\n disablePrimaryButton={!!errorMessage || !hasValidCurrencyInput}\n isOpen={isOpen}\n onClose={handleClose}\n onPrimaryAction={saveField}\n primaryText={accountsCopy.save}\n >\n {getEditableField()}\n </Dialog>\n )\n}\n\nexport default observer(AccountDetailEdit)\n","import React from 'react'\nimport { observer } from 'mobx-react-lite'\n\nimport Divider from '@mui/material/Divider'\nimport ListItem from '@mui/material/ListItem'\nimport ListItemButton from '@mui/material/ListItemButton'\nimport ListItemText from '@mui/material/ListItemText'\n\nimport { Icon, Text } from '@kyper/mui'\n\nimport AccountDetailEdit from './AccountDetailEdit'\n\nimport { getAccountDetailFields, type AccountField } from '../../../utils/AccountFields'\nimport { useAccountUiStore } from '../../../hooks/useUiStore'\nimport { useEvent, useGlobalCopyStore } from '../../../../common'\n\nconst AccountDetails = () => {\n const widgetProfile = window.app?.config\n\n const { onEvent } = useEvent()\n const { selectedAccount: account } = useAccountUiStore()\n const { accounts: accountsCopy } = useGlobalCopyStore()\n\n const fields = getAccountDetailFields(account, accountsCopy)\n const canEdit =\n account.member_is_managed_by_user ||\n (!account.member_is_managed_by_user && widgetProfile.enable_renaming_home_accounts)\n\n const [showEditDialog, setShowEditDialog] = React.useState(false)\n const [fieldToEdit, setFieldToEdit] = React.useState<AccountField>(fields[0])\n\n const displayableFields = fields.filter(\n (field) => canEdit || account[field.name] || account[field.name] === 0,\n )\n\n return (\n <>\n {displayableFields.map((field) => {\n const hasValue = account[field.name] || account[field.name] === 0\n const isLast = displayableFields.indexOf(field) === displayableFields.length - 1\n\n const content = (\n <ListItemText\n disableTypography={true}\n primary={<Text sx={{ fontSize: 11 }}>{field.label}</Text>}\n secondary={\n <Text bold={true} sx={{ fontSize: 15 }}>\n {hasValue\n ? (field.valueFormatter(account[field.name]) as string)\n : field.placeholder}\n </Text>\n }\n />\n )\n\n return (\n <React.Fragment key={field.name}>\n {canEdit ? (\n <>\n <ListItem sx={{ backgroundColor: 'background.paper', px: 0 }}>\n <ListItemButton\n onClick={() => {\n setFieldToEdit(field)\n setShowEditDialog(true)\n if (field?.event) onEvent(field.event, { account_guid: account.guid })\n }}\n >\n {content}\n <Icon name=\"chevron_right\" />\n </ListItemButton>\n </ListItem>\n <Divider sx={{ ml: isLast ? 0 : 24 }} />\n </>\n ) : (\n hasValue && (\n <>\n <ListItem sx={{ backgroundColor: 'background.paper', px: 24 }}>\n {content}\n </ListItem>\n <Divider sx={{ ml: isLast ? 0 : 24 }} />\n </>\n )\n )}\n </React.Fragment>\n )\n })}\n {showEditDialog && fieldToEdit && (\n <AccountDetailEdit\n field={fieldToEdit}\n isOpen={showEditDialog}\n onClose={() => setShowEditDialog(false)}\n />\n )}\n </>\n )\n}\n\nexport default observer(AccountDetails)\n","import React from 'react'\nimport { observer } from 'mobx-react-lite'\n\nimport List from '@mui/material/List'\n\nimport AccountActions from './AccountActions'\nimport AccountConnection from './AccountConnection'\nimport AccountDetails from './AccountDetails'\n\nimport { ANALYTICS_EVENTS, useEvent } from '../../../../common'\n\nconst AccountDetailsTab = () => {\n const { onEvent } = useEvent()\n React.useEffect(() => onEvent(ANALYTICS_EVENTS.ACCOUNT_DETAILS_VIEW), [])\n\n return (\n <List>\n <AccountDetails />\n <AccountConnection />\n <AccountActions />\n </List>\n )\n}\n\nexport default observer(AccountDetailsTab)\n","import React from 'react'\nimport { observer } from 'mobx-react-lite'\n\nimport Alert from '@mui/material/Alert'\nimport AlertTitle from '@mui/material/AlertTitle'\nimport ErrorIcon from '@mui/icons-material/Error'\nimport Link from '@mui/material/Link'\nimport Paper from '@mui/material/Paper'\n\nimport { Text } from '@kyper/mui'\n\nimport ConnectDrawer from '../../../../common/components/ConnectDrawer'\n\nimport {\n getConnectionMessages,\n ConnectionMessageObject,\n} from '../../../utils/getConnectionMessages'\nimport { NonConnectedStatuses, useGlobalCopyStore } from '../../../../common'\nimport { useAccountUiStore } from '../../../hooks/useUiStore'\n\ninterface ConnectionErrorMessageProps {\n setTabValue: (val: number) => void\n}\n\nconst ConnectionErrorMessage: React.FC<ConnectionErrorMessageProps> = ({ setTabValue }) => {\n const [shouldShowConnectDrawer, setShouldShowConnectDrawer] = React.useState(false)\n\n const { selectedMember: member } = useAccountUiStore()\n const { accounts: accountsCopy, connect: connectCopy } = useGlobalCopyStore()\n\n const hasError =\n member.connection_status && NonConnectedStatuses.includes(member.connection_status)\n\n React.useEffect(() => {\n if (hasError) {\n setTabValue(1)\n }\n }, [hasError])\n\n if (!hasError) return\n\n const statusMessages: ConnectionMessageObject = getConnectionMessages(member, connectCopy)\n\n // eslint-disable-next-line consistent-return\n return (\n <>\n <Paper\n sx={{\n mb: 16,\n mt: 24,\n mx: 24,\n }}\n >\n <Alert\n icon={<ErrorIcon />}\n severity=\"error\"\n sx={{\n borderLeft: 5,\n borderTopLeftRadius: 6,\n borderBottomLeftRadius: 6,\n borderColor: 'error.main',\n color: 'text.primary',\n '&.MuiPaper-root': {\n backgroundColor: 'background.paper',\n },\n }}\n >\n {statusMessages.title && (\n <AlertTitle sx={{ fontWeight: 600, marginTop: 2 }} variant=\"Body\">\n {statusMessages.title}\n </AlertTitle>\n )}\n <Text component=\"p\" sx={{ whiteSpace: 'wrap' }} variant=\"ParagraphSmall\">\n {statusMessages.main}\n </Text>\n {statusMessages.cta && (\n <Link\n onClick={() => setShouldShowConnectDrawer(true)}\n sx={{ fontSize: 15, fontWeight: 600, ml: 0 }}\n >\n {statusMessages.cta}\n </Link>\n )}\n </Alert>\n </Paper>\n\n {shouldShowConnectDrawer && (\n <ConnectDrawer\n loadWidgetProps={{ current_member_guid: member.guid }}\n onClose={() => setShouldShowConnectDrawer(false)}\n showConnectWidget={shouldShowConnectDrawer}\n title={accountsCopy.manage_connection}\n />\n )}\n </>\n )\n}\n\nexport default observer(ConnectionErrorMessage)\n","import React from 'react'\nimport { observer } from 'mobx-react-lite'\nimport { subDays, startOfToday, endOfToday } from 'date-fns'\n\nimport {\n ANALYTICS_EVENTS,\n Drawer,\n useEvent,\n useGlobalCopyStore,\n useTransactionStore,\n} from '../../../../common'\nimport { TransactionDetails, TransactionList } from '../../../../transactions'\nimport { useAccountUiStore } from '../../../hooks/useUiStore'\n\nconst TransactionsTab = () => {\n const [guid, setGuid] = React.useState('')\n\n const { onEvent } = useEvent()\n const { selectedAccount } = useAccountUiStore()\n const { accounts: accountsCopy } = useGlobalCopyStore()\n const { setFilter, sortedTransactions } = useTransactionStore()\n\n const transaction = React.useMemo(() => sortedTransactions.find((t) => t.guid === guid), [guid])\n\n React.useEffect(() => {\n setFilter({\n dateRange: { start: subDays(startOfToday(), 90), end: endOfToday() },\n accounts: [selectedAccount.guid],\n })\n }, [selectedAccount])\n\n React.useEffect(() => onEvent(ANALYTICS_EVENTS.ACCOUNT_DETAILS_VIEW_TRANSACTIONS), [])\n\n return (\n <>\n <TransactionList onClick={setGuid} />\n {transaction && (\n <Drawer\n ariaLabelClose={accountsCopy.close_drawer}\n isOpen={!!guid}\n onClose={() => setGuid('')}\n title={accountsCopy.transaction_drawer_title}\n >\n <TransactionDetails transaction={transaction} />\n </Drawer>\n )}\n </>\n )\n}\n\nexport default observer(TransactionsTab)\n","import React from 'react'\nimport { observer } from 'mobx-react-lite'\n\nimport Tab from '@mui/material/Tab'\nimport Tabs from '@mui/material/Tabs'\n\nimport { TabContentContainer, useGlobalCopyStore } from '../../../../common'\n\nimport AccountDetailsTab from './AccountDetailsTab'\nimport ConnectionErrorMessage from './ConnectionErrorMessage'\nimport TransactionsTab from '../Transactions/TransactionsTab'\n\nconst AccountDetailsContent = () => {\n const [tabValue, setTabValue] = React.useState(0)\n\n const { accounts: accountsCopy } = useGlobalCopyStore()\n\n return (\n <>\n <ConnectionErrorMessage setTabValue={setTabValue} />\n\n <Tabs\n aria-label={accountsCopy.transactions_and_details_aria}\n centered={true}\n onChange={(_, val) => setTabValue(val)}\n value={tabValue}\n variant=\"fullWidth\"\n >\n <Tab\n aria-controls=\"transaction-details-tabpanel-0\"\n id=\"transaction-details-tab-0\"\n label={accountsCopy.transactions}\n />\n <Tab\n aria-controls=\"account-details-tabpanel-1\"\n id=\"account-details-tab-1\"\n label={accountsCopy.account_details}\n />\n </Tabs>\n\n <TabContentContainer index={0} name=\"transaction-details\" value={tabValue}>\n <TransactionsTab />\n </TabContentContainer>\n\n <TabContentContainer index={1} name=\"account-details\" value={tabValue}>\n <AccountDetailsTab />\n </TabContentContainer>\n </>\n )\n}\n\nexport default observer(AccountDetailsContent)\n","import { CategoryGuids, MonthlyCategoryTotals, PaymentCategories } from '../../common'\nimport { StackedLineChartData } from './TrendsData'\n\ntype TotalsData = MonthlyCategoryTotals | StackedLineChartData\n\nexport const isIncome = (totals: TotalsData) => {\n return (\n totals.top_level_category_guid === CategoryGuids.INCOME ||\n totals.category_guid === CategoryGuids.INCOME\n )\n}\n\nexport const isExpense = (totals: TotalsData) => {\n return !isIncome(totals) && !isTransfer(totals)\n}\n\nexport const isPayment = (totals: TotalsData) => {\n return (\n PaymentCategories.includes(totals.top_level_category_guid) ||\n PaymentCategories.includes(totals.category_guid)\n )\n}\n\nexport const isTransfer = (totals: TotalsData) => {\n return (\n totals.top_level_category_guid === CategoryGuids.TRANSFER ||\n totals.category_guid === CategoryGuids.TRANSFER\n )\n}\n\nexport const isSpend = (totals: TotalsData) => {\n return !isIncome(totals) && !isPayment(totals) && !isTransfer(totals)\n}\n\nexport const getTopLevelCategoryTotals = (\n totals: (MonthlyCategoryTotals | StackedLineChartData)[],\n) => {\n return totals.filter((item) => item.category_guid === item.top_level_category_guid)\n}\n","import { addMonths } from 'date-fns/addMonths'\nimport { isBefore } from 'date-fns/isBefore'\nimport { startOfMonth } from 'date-fns/startOfMonth'\nimport { subMonths } from 'date-fns/subMonths'\nimport { endOfMonth } from 'date-fns/endOfMonth'\n\nimport { CategoryGuids, DATE_FORMATS_INTL, formatDate, MonthlyCategoryTotals } from '../../common'\nimport { isIncome, isPayment, isSpend } from './shared'\n\ntype DateRange = {\n start: Date\n end: Date\n}\n\nexport const getMonthlyTotals = (totals: MonthlyCategoryTotals[], range?: DateRange) => {\n const data: { x: string; y: number }[] = []\n let startDate = startOfMonth(range?.start ?? subMonths(new Date(), 5))\n const endDate = range?.end ?? new Date()\n\n while (isBefore(startDate, endDate)) {\n // Add total amount for each month\n data.push({\n x: formatDate(startDate, DATE_FORMATS_INTL.MONTH_SHORT),\n y: totals\n .filter((t) => t.year === startDate.getFullYear() && t.month === startDate.getMonth() + 1)\n .reduce((total, item) => total + item.total, 0),\n })\n startDate = addMonths(startDate, 1)\n }\n\n return data\n}\n\nexport const getIncomeTotals = (totals: MonthlyCategoryTotals[], range?: DateRange) => {\n const incomeTotals = totals.filter(isIncome)\n // Income totals are negative values, but we want to display them as positive\n return getMonthlyTotals(incomeTotals, range).map((t) => ({ ...t, y: Math.abs(t.y) }))\n}\n\nexport const getPaymentTotals = (totals: MonthlyCategoryTotals[], range?: DateRange) => {\n const paymentTotals = totals.filter(isPayment)\n // Payment totals are negative values, but we want to display them as positive\n return getMonthlyTotals(paymentTotals, range).map((t) => ({ ...t, y: Math.abs(t.y) }))\n}\n\nexport const getSpendingTotals = (totals: MonthlyCategoryTotals[], range?: DateRange) => {\n const spendingTotals = totals.filter(isSpend)\n return getMonthlyTotals(spendingTotals, range)\n}\n\nexport const getSpendingData = (totals: MonthlyCategoryTotals[]) => {\n const data: { x: string; y: number }[] = []\n\n // Filter out income and transfers\n const filteredTotals = totals.filter(\n (t) =>\n t.top_level_category_guid !== CategoryGuids.INCOME &&\n t.top_level_category_guid !== CategoryGuids.TRANSFER &&\n t.total > 0,\n )\n\n let startDate = startOfMonth(subMonths(new Date(), 5))\n const endDate = endOfMonth(new Date())\n while (isBefore(startDate, endDate)) {\n // Add total amount for each month\n data.push({\n x: formatDate(startDate, DATE_FORMATS_INTL.MONTH_SHORT),\n y: filteredTotals\n .filter((t) => t.year === startDate.getFullYear() && t.month === startDate.getMonth() + 1)\n .reduce((total, item) => total + item.total, 0),\n })\n startDate = addMonths(startDate, 1)\n }\n\n return data\n}\n","import { observer } from 'mobx-react-lite'\nimport { useTheme } from '@mui/material/styles'\n\nimport {\n AccountType,\n formatCurrency,\n LineChart,\n useCategoryStore,\n INCOME_ACCOUNT_TYPES,\n PAYMENT_ACCOUNT_TYPES,\n SPENDING_ACCOUNT_TYPES,\n useGlobalCopyStore,\n} from '../../common'\n\nimport type { MonthlyCategoryTotals, TrendsCopy } from '../../common'\nimport { useAccountUiStore } from '../../accounts/hooks/useUiStore'\nimport { getIncomeTotals, getPaymentTotals, getSpendingTotals } from '../utils/SpendingData'\n\nconst getDatasets = (totals: MonthlyCategoryTotals[], accountType: AccountType) => {\n const incomeData = INCOME_ACCOUNT_TYPES.includes(accountType) ? getIncomeTotals(totals) : []\n const paymentData = PAYMENT_ACCOUNT_TYPES.includes(accountType) ? getPaymentTotals(totals) : []\n const spendingData = SPENDING_ACCOUNT_TYPES.includes(accountType) ? getSpendingTotals(totals) : []\n\n // There should always be 1-2 datasets returned. No account type will have all three categories.\n return [incomeData, paymentData, spendingData].filter((data) => data.length > 0)\n}\n\nconst getLabels = (datasets: any[], accountType: AccountType, copy: TrendsCopy) => {\n const [dataA, dataB] = datasets\n const credits = dataA\n const debits = dataB ?? dataA\n const labels: string[] = []\n\n if (credits && debits && INCOME_ACCOUNT_TYPES.includes(accountType)) {\n const lastIncome = formatCurrency(credits[credits.length - 1].y, '0,0')\n labels.push(`${copy.income_label} ${lastIncome}`)\n } else if (PAYMENT_ACCOUNT_TYPES.includes(accountType)) {\n const lastPayment = formatCurrency(credits[credits.length - 1].y, '0,0')\n labels.push(`${copy.payments_label} ${lastPayment}`)\n }\n\n if (debits && SPENDING_ACCOUNT_TYPES.includes(accountType)) {\n const lastSpending = formatCurrency(debits[debits.length - 1].y, '0,0')\n labels.push(`${copy.spending_label} ${lastSpending}`)\n }\n\n return labels\n}\n\nconst TrendsChart = () => {\n const theme = useTheme()\n const { selectedAccount } = useAccountUiStore()\n const { monthlyCategoryTotals } = useCategoryStore()\n const { trends: trendsCopy } = useGlobalCopyStore()\n\n const colors = [theme.palette.chart?.chart1, theme.palette.chart?.chart2]\n const datasets = getDatasets(monthlyCategoryTotals, selectedAccount.account_type)\n const labels = getLabels(datasets, selectedAccount.account_type, trendsCopy)\n const isLoan = [AccountType.LOAN, AccountType.MORTGAGE].includes(selectedAccount.account_type)\n\n return (\n <div data-testid=\"TrendsChart\">\n <LineChart\n colors={colors}\n datasets={datasets}\n height={185}\n labels={labels}\n showAverage={isLoan}\n showBars={isLoan}\n />\n </div>\n )\n}\n\nexport default observer(TrendsChart)\n","import React from 'react'\nimport { observer } from 'mobx-react-lite'\n\nimport Card from '@mui/material/Card'\nimport CardContent from '@mui/material/CardContent'\nimport CardHeader from '@mui/material/CardHeader'\n\nimport { H3 } from '@kyper/mui'\n\nimport {\n formatDate,\n DATE_FORMATS_INTL,\n Loader,\n MiniWidgetProps,\n useCategoryStore,\n useGlobalStore,\n} from '../../../../common'\n\nimport TrendsChart from '../../../../trends/components/TrendsChart'\nimport { useAccountUiStore } from '../../../hooks/useUiStore'\n\nconst AccountDetailsChart: React.FC<MiniWidgetProps> = ({ sx }) => {\n const { loadMonthlyCategoryTotals } = useCategoryStore()\n const { isInitialized } = useGlobalStore()\n const { selectedAccount } = useAccountUiStore()\n\n const [isWidgetInitialized, setIsWidgetInitialized] = React.useState(false)\n\n React.useEffect(() => {\n if (isInitialized) {\n loadMonthlyCategoryTotals([selectedAccount]).finally(() => {\n setIsWidgetInitialized(true)\n })\n }\n }, [isInitialized, selectedAccount])\n\n if (!isInitialized || !isWidgetInitialized) {\n return <Loader />\n }\n\n return (\n <Card\n sx={{\n borderRadius: '8px',\n '& .MuiCardContent-root:last-child': {\n pb: 0,\n },\n ...sx,\n }}\n >\n <CardHeader\n sx={{ pb: 0 }}\n title={<H3 sx={{ pb: 4 }}>{formatDate(new Date(), DATE_FORMATS_INTL.MONTH_LONG)}</H3>}\n />\n\n <CardContent sx={{ p: 0 }}>\n <TrendsChart />\n </CardContent>\n </Card>\n )\n}\n\nexport default observer(AccountDetailsChart)\n","import { observer } from 'mobx-react-lite'\n\nimport Stack from '@mui/material/Stack'\n\nimport { H2, InstitutionLogo, Text } from '@kyper/mui'\n\nimport {\n formatCurrency,\n useAccountStore,\n INCOME_ACCOUNT_TYPES,\n PAYMENT_ACCOUNT_TYPES,\n SPENDING_ACCOUNT_TYPES,\n useGlobalCopyStore,\n} from '../../../../common'\nimport { getAccountBalanceDetails } from '../../../utils/AccountFields'\nimport { useAccountUiStore } from '../../../hooks/useUiStore'\n\nimport AccountDetailsChart from './AccountDetailsChart'\n\nconst AccountDetailsHeader = () => {\n const { institutions } = useAccountStore()\n const { selectedAccount: account } = useAccountUiStore()\n const { accounts: accountsCopy } = useGlobalCopyStore()\n const { firstSubtitle, firstValue, hasAvailableBalance, secondSubtitle, secondValue } =\n getAccountBalanceDetails(account, accountsCopy)\n\n const institution = institutions.find(\n (institution) => institution.guid === account?.institution_guid,\n )\n\n const showChart = [\n ...INCOME_ACCOUNT_TYPES,\n ...PAYMENT_ACCOUNT_TYPES,\n ...SPENDING_ACCOUNT_TYPES,\n ].includes(account.account_type)\n\n return (\n <Stack p={24}>\n <Stack gap={12}>\n <InstitutionLogo\n alt={accountsCopy.institution_logo_alt}\n institutionGuid={account.institution_guid || ''}\n size={64}\n />\n <Text variant=\"Small\">{institution?.name}</Text>\n </Stack>\n <Stack gap={8} mb={24} mt={4}>\n <H2>{account.name || account.feed_name}</H2>\n <Stack direction=\"row\" justifyContent=\"space-between\">\n <Text bold={hasAvailableBalance} variant=\"Body\">\n {firstSubtitle}\n </Text>\n <Text bold={true} variant=\"Body\">\n {formatCurrency(firstValue, '0,0.00')}\n </Text>\n </Stack>\n <Stack direction=\"row\" justifyContent=\"space-between\">\n <Text variant=\"Small\">{secondSubtitle}</Text>\n <Text variant=\"Small\">{secondValue}</Text>\n </Stack>\n </Stack>\n {showChart && (\n <Stack>\n <AccountDetailsChart />\n </Stack>\n )}\n </Stack>\n )\n}\n\nexport default observer(AccountDetailsHeader)\n","import React from 'react'\nimport { observer } from 'mobx-react-lite'\n\nimport Box from '@mui/material/Box'\nimport Divider from '@mui/material/Divider'\nimport List from '@mui/material/List'\nimport ListSubheader from '@mui/material/ListSubheader'\nimport Stack from '@mui/system/Stack'\n\nimport { Text } from '@kyper/mui'\n\nimport {\n ANALYTICS_EVENTS,\n Drawer,\n formatCurrency,\n useAccountStore,\n useEvent,\n useGlobalCopyStore,\n useGlobalUiStore,\n} from '../../common'\nimport type { Account, AccountType, Member } from '../../common'\n\nimport AccountDetailsContent from './detailsdrawer/Accounts/AccountDetailsContent'\nimport AccountDetailsHeader from './detailsdrawer/Accounts/AccountDetailsHeader'\nimport AccountListItem from './AccountListItem'\nimport { useAccountUiStore } from '../hooks/useUiStore'\n\nconst AccountsList = () => {\n const [selectedAccountGuid, setSelectedAccountGuid] = React.useState('')\n\n const { accounts: accountsCopy } = useGlobalCopyStore()\n const { selectedAccounts: accounts } = useGlobalUiStore()\n const { setSelectedAccount, setSelectedMember } = useAccountUiStore()\n const { members } = useAccountStore()\n const { onEvent } = useEvent()\n\n const accountTypes: AccountType[] = [...new Set(accounts.map((account) => account.account_type))]\n\n const account = accounts.find((account) => selectedAccountGuid === account.guid)\n\n React.useEffect(() => {\n if (account) {\n setSelectedAccount(account)\n const member =\n members.find((member: Member) => member.guid === account?.member_guid) || ({} as Member)\n if (member) {\n setSelectedMember(member)\n }\n }\n }, [account, selectedAccountGuid])\n\n return (\n <Box sx={{ pt: 24 }}>\n {accountTypes.map((type) => {\n const accountsOfType = accounts.filter((account) => account.account_type === type)\n const accountsOfTypeTotal = accountsOfType.reduce(\n (total, account) => (account.available_balance || account.balance || 0) + total,\n 0,\n )\n\n const onRowClick = (account: Account) => {\n setSelectedAccountGuid(account.guid)\n onEvent(ANALYTICS_EVENTS.ACCOUNTS_CLICK_ACCOUNT, {\n account_guid: account.guid,\n account_type: account.account_type,\n })\n }\n\n return (\n <List\n aria-label={accountsCopy.account_type_accounts[accountsOfType[0].account_type]}\n key={type}\n subheader={\n <ListSubheader component={'h2'} sx={{ backgroundColor: 'transparent', px: 24 }}>\n <Stack\n component=\"span\"\n direction=\"row\"\n sx={{ display: 'flex', justifyContent: 'space-between' }}\n >\n <Text bold={true} variant=\"Body\">\n {accountsCopy.account_types[type]}\n </Text>\n <Text bold={true} variant=\"Body\">\n {formatCurrency(accountsOfTypeTotal, '0,0.00')}\n </Text>\n </Stack>\n </ListSubheader>\n }\n >\n <Stack>\n {accountsOfType.map((account) => {\n const isVeryLastItem = accounts.indexOf(account) === accounts.length - 1\n const isLastAccountTypeItem =\n accountsOfType.indexOf(account) === accountsOfType.length - 1\n\n return (\n <React.Fragment key={account.guid}>\n <AccountListItem\n account={account}\n onRowClick={() => onRowClick(account)}\n shouldShowConnectionStatus={true}\n />\n {/* the margin bottom is to counteract Firefly's CSS reset and will ideally be removed at some point */}\n {!isVeryLastItem && (\n <Divider\n sx={{\n mb: isLastAccountTypeItem ? 24 : 4,\n ml: !isLastAccountTypeItem ? 68 : 24,\n }}\n />\n )}\n </React.Fragment>\n )\n })}\n </Stack>\n </List>\n )\n })}\n <Drawer\n ariaLabelClose={accountsCopy.close_account_details_aria}\n isOpen={!!selectedAccountGuid}\n onClose={() => setSelectedAccountGuid('')}\n title={accountsCopy.account_details}\n >\n <AccountDetailsHeader />\n\n <AccountDetailsContent />\n </Drawer>\n </Box>\n )\n}\n\nexport default observer(AccountsList)\n","import React from 'react'\nimport { observer } from 'mobx-react-lite'\n\nimport { useTheme } from '@mui/material/styles'\n\nimport { ConnectionsWidget } from '@mxenabled/web-widget-sdk'\n\nimport ConnectStatus from './ConnectStatus'\nimport { Drawer, useAccountStore, useGlobalCopyStore } from '../../common'\nimport { MemberConnectionStatus } from '../constants/Accounts'\nimport { CONNECTIONS_WIDGET_ID } from '../../common/constants/Connect'\nimport { useConnectStore } from '../../common/context/hooks'\n\ninterface ConnectionsDrawerProps {\n onClose: () => void\n showConnectionsWidget: boolean\n title: string\n}\n\nconst ConnectionsDrawer: React.FC<ConnectionsDrawerProps> = ({\n onClose,\n showConnectionsWidget,\n title,\n}) => {\n let connectionsWidget: ConnectionsWidget\n const { refreshAccounts } = useAccountStore()\n const { loadWidget } = useConnectStore()\n const { connect: connectCopy } = useGlobalCopyStore()\n const theme = useTheme()\n\n const [isLoading, setIsLoading] = React.useState(false)\n const [hasError, setHasError] = React.useState(false)\n\n React.useEffect(() => {\n if (showConnectionsWidget) {\n setIsLoading(true)\n loadWidget({ widget: 'connections_widget', mode: theme.palette.mode }).then((res) => {\n connectionsWidget = new ConnectionsWidget({\n container: `#${CONNECTIONS_WIDGET_ID}`,\n style: {\n height: 'calc(100% - 62px)',\n width: '100%',\n position: 'absolute',\n },\n url: res.url,\n onSsoUrlLoadError: () => {\n setIsLoading(false)\n setHasError(true)\n },\n onLoad: () => {\n setIsLoading(false)\n setHasError(false)\n },\n })\n })\n } else {\n setIsLoading(false)\n setHasError(false)\n }\n\n return () => {\n connectionsWidget?.unmount()\n }\n }, [showConnectionsWidget])\n\n return (\n <Drawer\n ariaLabelClose={connectCopy.close_connections_aria}\n isOpen={showConnectionsWidget}\n onClose={() => {\n onClose()\n refreshAccounts()\n }}\n title={title}\n >\n <div id={CONNECTIONS_WIDGET_ID}>\n {hasError && <ConnectStatus status={MemberConnectionStatus.Error} />}\n {isLoading && <ConnectStatus status={MemberConnectionStatus.Loading} />}\n </div>\n </Drawer>\n )\n}\n\nexport default observer(ConnectionsDrawer)\n","import React from 'react'\nimport { observer } from 'mobx-react-lite'\n\nimport Box from '@mui/material/Box'\n\nimport AccountsList from './components/AccountsList'\nimport ConnectionsDrawer from './components/ConnectionsDrawer'\n\nimport { Text } from '@kyper/mui'\n\nimport {\n ANALYTICS_EVENTS,\n Loader,\n WidgetContainer,\n useAccountStore,\n useEvent,\n useScreenSize,\n WidgetProps,\n useGlobalUiStore,\n useGlobalCopyStore,\n} from '../common'\n\nconst AccountsWidget: React.FC<WidgetProps> = ({ onBackClick, sx = {} }) => {\n const [showConnectionsWidget, setShowConnectionsWidget] = React.useState(false)\n const [isLoading, setIsLoading] = React.useState(false)\n\n const { accounts, refreshMembers } = useAccountStore()\n const { accounts: accountsCopy } = useGlobalCopyStore()\n const { setSelectedAccounts, selectedAccountGuids } = useGlobalUiStore()\n const { isDesktop } = useScreenSize()\n const { onEvent } = useEvent()\n\n React.useEffect(() => {\n setSelectedAccounts(accounts)\n }, [accounts])\n\n const handleSync = () => {\n setIsLoading(true)\n refreshMembers().finally(() => {\n setIsLoading(false)\n })\n onEvent(ANALYTICS_EVENTS.ACCOUNTS_CLICK_SYNC)\n }\n\n const handleManageConnections = () => {\n setShowConnectionsWidget(true)\n onEvent(ANALYTICS_EVENTS.ACCOUNTS_CLICK_CONNECT)\n }\n\n return (\n <WidgetContainer\n accountOptions={accounts}\n actions={[\n {\n iconName: 'settings',\n label: accountsCopy.manage_connections,\n onClick: handleManageConnections,\n },\n {\n iconName: 'sync',\n label: accountsCopy.sync_accounts,\n onClick: handleSync,\n },\n ]}\n onAccountsFilterClick={() => onEvent(ANALYTICS_EVENTS.ACCOUNTS_CLICK_FILTER)}\n onBackClick={onBackClick}\n sx={sx}\n title={accountsCopy.title}\n >\n {isLoading ? (\n <Loader />\n ) : (\n <>\n <Box sx={{ px: isDesktop ? 24 : 12 }}>\n {selectedAccountGuids.length < 1 && (\n <Text display=\"flex\" justifyContent=\"center\" my={24}>\n {accountsCopy.no_accounts}\n </Text>\n )}\n <AccountsList />\n </Box>\n <ConnectionsDrawer\n onClose={() => setShowConnectionsWidget(false)}\n showConnectionsWidget={showConnectionsWidget}\n title={accountsCopy.manage_connections}\n />\n </>\n )}\n </WidgetContainer>\n )\n}\n\nexport default observer(AccountsWidget)\n","import React from 'react'\nimport { observer } from 'mobx-react-lite'\n\nimport Divider from '@mui/material/Divider'\nimport List from '@mui/material/List'\nimport ListItem from '@mui/material/ListItem'\n\nimport {\n Account,\n MiniWidgetContainer,\n MiniWidgetProps,\n useAccountStore,\n useGlobalCopyStore,\n useGlobalUiStore,\n} from '../common'\nimport AccountListItem from './components/AccountListItem'\n\nconst fliterAccounts = (accounts: Account[], selectedAccountGuids: string[]) => {\n return accounts.filter((account) => selectedAccountGuids.includes(account.guid)).slice(0, 3)\n}\n\nconst AccountsMiniWidget: React.FC<MiniWidgetProps> = ({ onPrimaryCtaClick, sx }) => {\n const { accounts } = useAccountStore()\n const { accounts: accountsCopy } = useGlobalCopyStore()\n const { selectedAccountGuids } = useGlobalUiStore()\n const [visibleAccounts, setVisibleAccounts] = React.useState(accounts)\n\n React.useEffect(() => {\n setVisibleAccounts(fliterAccounts(accounts, selectedAccountGuids))\n }, [accounts, selectedAccountGuids])\n\n return (\n <MiniWidgetContainer\n className=\"mx-exp-accounts-miniwidget\"\n onPrimaryCtaClick={onPrimaryCtaClick}\n primaryCtaLabel={accountsCopy.primary_cta}\n sx={sx}\n title={accountsCopy.mini_title}\n >\n <List>\n {visibleAccounts.length < 1 && (\n <ListItem sx={{ justifyContent: 'center' }}>{accountsCopy.no_accounts}</ListItem>\n )}\n {visibleAccounts.map((account, i) => {\n const isLast = visibleAccounts.indexOf(account) === visibleAccounts.length - 1\n return (\n <React.Fragment key={`account-item${i}`}>\n <AccountListItem\n account={account}\n listItemProps={{ sx: { px: 24 } }}\n shouldShowConnectionStatus={true}\n />\n {!isLast && <Divider aria-hidden=\"true\" variant=\"inset\" />}\n </React.Fragment>\n )\n })}\n </List>\n </MiniWidgetContainer>\n )\n}\n\nexport default observer(AccountsMiniWidget)\n","const ConnectImage = () => {\n return (\n <svg\n fill=\"none\"\n style={{ maxWidth: 400 }}\n viewBox=\"0 0 272 66\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <g opacity=\"0.35\">\n <rect fill=\"#CD1141\" height=\"40.3437\" rx=\"2.81371\" width=\"39.6876\" x=\"19.6553\" />\n <path\n clipRule=\"evenodd\"\n d=\"M31.8226 13.6354C31.3503 13.6354 31.1918 13.8197 30.9968 14.3526L29.3583 18.8049H28.3261L27.0161 15.5731L25.7663 18.8049H24.6983L22.9884 14.4239C22.7933 13.9196 22.5042 13.6354 22.079 13.6354H21.9443V12.9824H24.8577V13.6354H24.5756C24.2499 13.6354 24.1033 13.7232 24.1152 13.9075C24.1152 13.9438 24.1033 14.0081 24.1391 14.0919C24.1391 14.0919 24.8058 15.6895 25.3334 17.2672C25.3889 17.2753 25.4127 17.2753 25.4127 17.2753L26.5557 14.3647C26.5081 13.8839 26.3494 13.6354 25.8533 13.6354H25.4646V12.9824H28.5325V13.6354H28.0483C27.7583 13.6354 27.6474 13.6996 27.6474 13.8718C27.6474 13.9438 27.6593 14.0317 27.6951 14.1161C27.6951 14.1161 28.3856 15.8096 28.8897 17.2837C28.9568 17.2837 28.9568 17.2874 28.9568 17.2874L30.0641 14.3401C30.1359 14.144 30.1359 13.996 30.1359 13.8954C30.1359 13.7111 29.9771 13.6354 29.6517 13.6354H29.2508V12.9824H32.0409V13.6354H31.8226ZM31.5757 18.8049V18.1523L31.9133 18.1402C32.4134 18.1402 32.6915 18.0921 32.6915 17.6074V14.1682C32.6915 13.6875 32.4134 13.6354 31.9133 13.6354H31.5757V12.9824H37.7633V15.241H37.1084C37.0727 13.8839 36.7592 13.6711 35.5923 13.6711H33.989V15.4009H34.4014C35.132 15.4009 35.2272 15.1532 35.2871 14.2759H35.9459V17.2272H35.2752C35.2272 16.2267 35.132 16.0895 34.4133 16.0895H33.989V18.1163H35.8344C36.8782 18.1163 37.1283 17.6157 37.2195 16.4582H37.8741V18.8049H31.5757ZM38.3799 18.8049V18.1523H38.709C39.2054 18.1523 39.4236 18.1042 39.4236 17.6074L39.4117 14.1803C39.4117 13.6875 39.1217 13.6354 38.6339 13.6354H38.3319V12.9824H41.7884V13.6354L41.3757 13.6475C40.82 13.6475 40.7211 13.6996 40.7211 14.1803V18.1163H42.1187C42.7971 18.1163 43.1979 18.0279 43.3805 17.6837C43.5508 17.3752 43.6223 17.0267 43.6223 16.4582H44.289V18.8049H38.3799ZM44.792 18.8049V18.1523H44.8793C45.3788 18.1523 45.597 18.1042 45.597 17.6074L45.5851 14.1803C45.5851 13.6875 45.3513 13.6354 44.8674 13.6354H44.5023V12.9824H47.963V13.6354L47.5506 13.6475C46.9901 13.6475 46.8957 13.6996 46.8957 14.1803V18.1163H48.2888C48.9708 18.1163 49.3713 18.0279 49.5539 17.6837C49.7209 17.3752 49.796 17.0267 49.796 16.4582H50.4627V18.8049H44.792Z\"\n fill=\"#FCB827\"\n fillRule=\"evenodd\"\n />\n <path\n clipRule=\"evenodd\"\n d=\"M56.3297 17.1039C56.3297 18.4374 55.2982 18.9175 53.7705 18.9175C52.85 18.9175 51.9638 18.3853 51.7693 18.201L51.5752 18.8095H50.9921V16.4674H51.6585C51.8411 17.5846 52.5793 18.0687 53.631 18.1175C54.5362 18.1575 55.1788 17.9123 55.2505 17.2761C55.3339 16.5391 54.5362 16.5875 53.8694 16.4634L52.8845 16.279C51.4164 16.019 50.9441 15.5861 50.9084 14.6135C50.869 13.5521 51.8173 12.8598 53.0921 12.8477C53.711 12.8477 54.5123 12.9476 55.1312 13.4525L55.4209 12.9715H55.9292V15.0054H55.2863C55.1467 13.877 54.052 13.5326 53.116 13.5562C52.4361 13.58 51.9876 13.9763 51.9876 14.4456C51.9876 14.8819 52.4123 14.9378 52.9523 15.0334L54.1545 15.2462C55.3818 15.4542 56.3297 15.7105 56.3297 17.0918V17.1039Z\"\n fill=\"#FCB827\"\n fillRule=\"evenodd\"\n />\n <path\n clipRule=\"evenodd\"\n d=\"M28.8464 23.9664C28.8464 23.5179 28.7749 23.1213 28.6162 22.8008C28.4217 22.4566 28.0248 22.4045 27.3419 22.4045H25.9092V24.1464H26.3616C27.0879 24.1464 27.1993 24.0108 27.1993 23.1092H27.7314V26.0205L27.1874 26.0084C27.1755 25.0349 27.076 24.835 26.3616 24.835H25.9092V26.3525C25.9092 26.8376 25.9849 26.8848 26.481 26.8848H27.1477V27.5383H23.6152V26.8848L23.9449 26.8733C24.441 26.8733 24.6117 26.8255 24.6117 26.3404V22.9013C24.6117 22.4209 24.441 22.3688 23.9449 22.3688H23.6152V21.7158H29.5052V23.9664H28.8464Z\"\n fill=\"#FCB827\"\n fillRule=\"evenodd\"\n />\n <path\n clipRule=\"evenodd\"\n d=\"M31.9262 22.7664L31.0653 25.0005H32.799L31.9262 22.7664ZM32.2397 27.5393V26.8858H32.8589C33.1886 26.8858 33.347 26.8501 33.347 26.6502C33.347 26.5779 33.307 26.478 33.2594 26.3694L33.0173 25.6894H30.7832L30.4935 26.4181C30.4456 26.5301 30.4217 26.6142 30.4217 26.6902C30.4217 26.8743 30.5768 26.8858 30.8821 26.8858H31.4777V27.5393H28.4893V26.8858H28.7512C29.1994 26.8858 29.3349 26.7259 29.5053 26.3172L31.4225 21.7168H32.8271L34.6607 26.3172C34.8277 26.7622 35.0136 26.8858 35.3393 26.8858H35.6171V27.5393H32.2397Z\"\n fill=\"#FCB827\"\n fillRule=\"evenodd\"\n />\n <path\n clipRule=\"evenodd\"\n d=\"M40.0656 23.2598C40.0656 22.5827 39.677 22.3828 38.8631 22.3828H37.6367V24.1483L38.8872 24.1362C39.6889 24.1362 40.0656 23.8761 40.0656 23.2719V23.2598ZM42.0885 26.1816C42.0885 27.2423 41.6043 27.6628 40.9137 27.6628C40.1243 27.6628 39.6129 27.4428 39.5769 26.6381L39.5531 25.961C39.5173 24.9846 39.2108 24.7882 38.2189 24.7882H37.6358V26.3538C37.6358 26.8386 37.7073 26.8861 38.207 26.8861H38.7269V27.5393H35.2305V26.8861H35.7385C36.0682 26.8861 36.3378 26.766 36.3378 26.3417V22.9026C36.3378 22.4219 36.2627 22.3697 35.7666 22.3697H35.2943V21.7168H39.2346C40.7074 21.7168 41.386 22.1618 41.386 23.0987C41.386 23.9388 40.7434 24.4558 39.6486 24.6039C40.6683 24.8524 40.8029 25.2202 40.8624 26.0094C40.8743 26.0857 40.8624 26.2458 40.8624 26.3694C40.8863 26.7138 41.0212 26.8743 41.1915 26.8622C41.5411 26.8386 41.5686 26.5779 41.5411 25.8852H42.0885C42.1004 25.9852 42.1004 26.0857 42.1004 26.1816H42.0885Z\"\n fill=\"#FCB827\"\n fillRule=\"evenodd\"\n />\n <path\n clipRule=\"evenodd\"\n d=\"M47.1941 23.583C46.92 22.7101 46.3451 22.3017 45.3969 22.3017C44.4633 22.3017 43.7215 23.0787 43.7334 24.56C43.7334 26.0657 44.3284 26.8791 45.3969 26.8906C46.1745 26.8906 46.865 26.4986 46.865 25.8293V25.5093C46.865 25.117 46.7695 25.117 46.2221 25.117H45.936V24.4486H48.5991V25.117H48.3808C47.968 25.117 47.9049 25.077 47.9049 25.5735V27.5234H47.4362L47.1346 27.0393C46.611 27.4598 45.8609 27.6556 45.1896 27.6556C44.4047 27.6556 43.7334 27.375 43.2016 26.8307C42.6423 26.2501 42.3165 25.4736 42.3284 24.56C42.3284 23.6594 42.6185 22.9428 43.1897 22.3659C43.6858 21.8697 44.4395 21.5894 45.218 21.6009C45.8609 21.6009 46.611 21.7732 47.0354 22.2303L47.3288 21.6251H47.7855V23.5793L47.1941 23.583Z\"\n fill=\"#FCB827\"\n fillRule=\"evenodd\"\n />\n <path\n clipRule=\"evenodd\"\n d=\"M54.3606 24.6277C54.3606 23.0983 53.5391 22.3008 52.4107 22.3008C51.2958 22.3008 50.4468 23.0983 50.4468 24.6277C50.4468 26.1533 51.2958 26.9704 52.4107 26.9704C53.5223 26.9704 54.3487 26.1533 54.3487 24.6277H54.3606ZM52.4355 27.6467C50.5311 27.6467 49.0547 26.4373 49.0547 24.6032C49.0547 22.7775 50.5311 21.584 52.4236 21.584C54.3258 21.584 55.7665 22.7775 55.7665 24.6153C55.7665 26.4373 54.3258 27.6467 52.4355 27.6467Z\"\n fill=\"#FCB827\"\n fillRule=\"evenodd\"\n />\n <rect fill=\"#E3E6E7\" height=\"40.3437\" rx=\"2.81371\" width=\"39.6876\" x=\"115.611\" />\n <path\n clipRule=\"evenodd\"\n d=\"M133.919 27.8109C134.985 28.9105 136.408 29.5155 137.925 29.5155C139.447 29.5155 140.874 28.9066 141.942 27.7999L142.108 27.6282C143.176 26.5226 143.764 25.0454 143.765 23.47C143.765 21.8941 143.177 20.4175 142.11 19.3124L138.767 16.1174L136.091 13.0798C135.024 11.9791 133.601 11.373 132.084 11.373C130.561 11.373 129.135 11.9824 128.066 13.0886L127.901 13.2603C125.689 15.5505 125.685 19.2738 127.889 21.5667L131.007 24.415L133.919 27.8109ZM137.924 30.3814C136.179 30.3814 134.543 29.6826 133.318 28.4141L133.301 28.3954L130.398 25.01L127.306 22.1887C126.081 20.9197 125.406 19.2256 125.406 17.4189C125.407 15.6117 126.082 13.9176 127.308 12.648L127.474 12.4764C128.7 11.2062 130.337 10.5068 132.083 10.5068C133.827 10.5068 135.462 11.2057 136.688 12.4741L136.701 12.4885L139.371 15.5201L142.688 18.6874C143.926 19.9686 144.6 21.6627 144.6 23.4699C144.6 25.2766 143.924 26.9712 142.698 28.2402L142.533 28.4119C141.306 29.6821 139.669 30.3814 137.924 30.3814Z\"\n fill=\"#F27762\"\n fillRule=\"evenodd\"\n />\n <path\n clipRule=\"evenodd\"\n d=\"M129.239 16.2603C126.255 17.2081 124.569 20.4924 125.48 23.5864L125.548 23.8182C126.269 26.2674 128.505 27.978 130.984 27.978C131.534 27.978 132.082 27.8936 132.612 27.728L136.506 26.2177L140.769 25.1529C143.752 24.204 145.437 20.9208 144.526 17.828L144.457 17.5956C143.737 15.1464 141.501 13.4357 139.022 13.4357C138.47 13.4357 137.921 13.5207 137.39 13.6874L133.086 15.2435L129.239 16.2603ZM130.984 28.8622C128.132 28.8622 125.56 26.8938 124.73 24.0759L124.662 23.8435C123.613 20.2798 125.559 16.4964 128.999 15.4107L129.018 15.4051L132.856 14.3906L137.132 12.8433C137.747 12.649 138.382 12.5508 139.022 12.5508C141.874 12.5508 144.445 14.5186 145.275 17.3371L145.343 17.569C146.392 21.1332 144.447 24.916 141.006 26.0024L140.982 26.009L136.731 27.071L132.873 28.5697C132.259 28.7634 131.623 28.8622 130.984 28.8622Z\"\n fill=\"#57A8B2\"\n fillRule=\"evenodd\"\n />\n <mask\n height=\"23\"\n id=\"mask0_6197_80303\"\n maskUnits=\"userSpaceOnUse\"\n style={{ maskType: 'luminance' }}\n width=\"22\"\n x=\"124\"\n y=\"9\"\n >\n <path\n clipRule=\"evenodd\"\n d=\"M124.378 9.40137H145.627V31.4884H124.378V9.40137Z\"\n fill=\"white\"\n fillRule=\"evenodd\"\n />\n </mask>\n <g mask=\"url(#mask0_6197_80303)\">\n <path\n clipRule=\"evenodd\"\n d=\"M128.324 23.1985C127.947 24.7049 128.16 26.2792 128.925 27.6327C129.693 28.9906 130.92 29.956 132.379 30.3512L132.605 30.4131C133.073 30.5395 133.553 30.6035 134.032 30.6035C136.612 30.6035 138.87 28.8051 139.525 26.2295L140.501 21.6192L141.682 17.694C142.061 16.187 141.847 14.6117 141.081 13.2571C140.314 11.8991 139.088 10.9337 137.629 10.5385L137.401 10.4772C136.934 10.3502 136.454 10.2862 135.974 10.2862C133.396 10.2862 131.139 12.0819 130.483 14.6553L129.683 18.8808L128.324 23.1985ZM134.032 31.4884C133.48 31.4884 132.927 31.4144 132.389 31.2687L132.162 31.2068C130.482 30.752 129.071 29.6414 128.189 28.0798C127.305 26.5182 127.061 24.701 127.5 22.9622L127.508 22.9368L128.863 18.6324L129.653 14.4449C130.404 11.4752 133.003 9.40137 135.974 9.40137C136.527 9.40137 137.08 9.47533 137.618 9.62106L137.844 9.68233C139.524 10.1377 140.935 11.2483 141.819 12.8099C142.701 14.3715 142.946 16.1887 142.506 17.9275L142.501 17.9474L141.322 21.8638L140.354 26.4448C139.603 29.4145 137.004 31.4884 134.032 31.4884Z\"\n fill=\"#008796\"\n fillRule=\"evenodd\"\n />\n </g>\n <rect fill=\"#0F375A\" height=\"40.3437\" rx=\"2.81371\" width=\"39.6876\" x=\"163.104\" />\n <path\n clipRule=\"evenodd\"\n d=\"M172.903 25.3916V29.0834C172.903 31.1461 174.153 31.487 175.199 31.487C176.746 31.487 177.462 30.4569 177.462 29.0624V25.3916H176.438V29.1869C176.438 29.6664 176.283 30.5619 175.199 30.5443C174.214 30.5269 174.031 29.6116 174.031 29.025V25.3916H172.903Z\"\n fill=\"white\"\n fillRule=\"evenodd\"\n />\n <path\n clipRule=\"evenodd\"\n d=\"M181.736 25.6341C181.736 25.6341 181.083 25.3057 180.341 25.3057C179.416 25.3057 178.254 25.786 178.254 27.0922C178.254 27.9996 178.915 28.4298 179.368 28.6508C179.607 28.7689 179.899 28.9007 180.138 29.0301C180.262 29.0976 180.753 29.2647 180.753 29.8026C180.753 30.3755 180.13 30.5722 179.85 30.5722C178.852 30.5722 178.173 30.114 178.173 30.114L178.277 31.2653C178.277 31.2653 178.684 31.4744 179.906 31.4753C181.07 31.472 181.91 30.7186 181.91 29.68C181.91 28.8806 181.369 28.4066 180.907 28.1811C180.543 27.9996 180.332 27.9038 180.016 27.7531C179.7 27.6036 179.374 27.344 179.374 26.9412C179.374 26.5108 179.764 26.2018 180.341 26.2018C181.188 26.2018 181.529 26.5875 181.736 26.7099V25.6341Z\"\n fill=\"white\"\n fillRule=\"evenodd\"\n />\n <path\n clipRule=\"evenodd\"\n d=\"M190.065 25.3818H188.836L189.032 25.8814L187.125 31.013L185.159 25.3818H183.93L184.126 25.8814L182.093 31.3527H183.203L183.558 30.3111H185.66L186.013 31.3527H188.109L188.465 30.3111H190.567L190.921 31.3527H192.15L190.065 25.3818ZM183.834 29.5023L184.65 27.1638L185.377 29.5023H183.834ZM188.742 29.5023L189.556 27.1638L190.285 29.5023H188.742Z\"\n fill=\"white\"\n fillRule=\"evenodd\"\n />\n <path\n clipRule=\"evenodd\"\n d=\"M172.841 18.6769L172.892 20.5423C172.892 20.5423 173.347 20.2041 173.854 20.2041C174.364 20.2041 174.938 20.5727 174.938 20.5727L179.489 23.2554L179.873 21.5693L174.938 18.6608C174.938 18.6608 174.366 18.2939 173.854 18.2939C173.344 18.2939 172.841 18.6769 172.841 18.6769Z\"\n fill=\"white\"\n fillRule=\"evenodd\"\n />\n <path\n clipRule=\"evenodd\"\n d=\"M172.841 16.2365L172.892 18.1025C172.892 18.1025 173.347 17.764 173.854 17.764C174.364 17.764 174.938 18.1326 174.938 18.1326L179.98 21.1039L180.364 19.4181L174.938 16.2206C174.938 16.2206 174.366 15.8535 173.854 15.8535C173.344 15.8535 172.841 16.2365 172.841 16.2365Z\"\n fill=\"white\"\n fillRule=\"evenodd\"\n />\n <path\n clipRule=\"evenodd\"\n d=\"M172.841 13.798L172.892 15.6634C172.892 15.6634 173.347 15.3255 173.854 15.3255C174.364 15.3255 174.938 15.6929 174.938 15.6929L180.471 18.9561L180.855 17.2691L174.938 13.7803C174.938 13.7803 174.366 13.415 173.854 13.415C173.344 13.415 172.841 13.798 172.841 13.798Z\"\n fill=\"white\"\n fillRule=\"evenodd\"\n />\n <path\n clipRule=\"evenodd\"\n d=\"M182.326 10.8286L182.833 13.0307L189.763 17.1136C189.763 17.1136 190.309 17.4801 190.843 17.4801C191.379 17.4801 191.859 17.0966 191.859 17.0966L191.807 15.2312C191.807 15.2312 191.372 15.57 190.843 15.57C190.316 15.57 189.763 15.202 189.763 15.202L184.401 12.0413L184.031 10.6249C184.031 10.5656 184.084 10.5373 184.103 10.5321L185.012 10.2457C185.133 10.2457 185.204 10.3516 185.204 10.4417L185.252 10.5424C185.285 10.5601 185.422 10.4925 185.432 10.487V9.92816C185.435 9.55861 185.142 9.22986 184.741 9.22986H183.834C183.834 9.22986 183.702 8.91602 183.316 8.91602H181.594C181.139 8.91602 181.029 9.34827 181.029 9.34827L179.833 14.2297L174.938 11.3433C174.938 11.3433 174.408 10.9756 173.854 10.9756C173.303 10.9756 172.841 11.3589 172.841 11.3589L172.892 13.2239C172.892 13.2239 173.301 12.8867 173.854 12.8867C174.408 12.8867 174.938 13.2553 174.938 13.2553L180.96 16.804L182.326 10.8286Z\"\n fill=\"white\"\n fillRule=\"evenodd\"\n />\n <path\n clipRule=\"evenodd\"\n d=\"M182.969 13.6348L183.474 15.846L189.764 19.5518C189.764 19.5518 190.327 19.9201 190.844 19.9201C191.36 19.9201 191.859 19.5353 191.859 19.5353L191.807 17.6703C191.807 17.6703 191.404 18.0078 190.844 18.0078C190.282 18.0078 189.764 17.641 189.764 17.641L182.969 13.6348Z\"\n fill=\"white\"\n fillRule=\"evenodd\"\n />\n <path\n clipRule=\"evenodd\"\n d=\"M183.613 16.4541L184.12 18.6659L189.763 21.9912C189.763 21.9912 190.328 22.3592 190.844 22.3592C191.361 22.3592 191.859 21.9754 191.859 21.9754L191.808 20.1097C191.808 20.1097 191.404 20.4467 190.844 20.4467C190.283 20.4467 189.763 20.0802 189.763 20.0802L183.613 16.4541Z\"\n fill=\"white\"\n fillRule=\"evenodd\"\n />\n <path\n clipRule=\"evenodd\"\n d=\"M184.258 19.2744L184.764 21.4832L189.762 24.4301C189.762 24.4301 190.326 24.7991 190.843 24.7991C191.36 24.7991 191.858 24.4125 191.858 24.4125L191.807 22.548C191.807 22.548 191.403 22.8868 190.843 22.8868C190.281 22.8868 189.762 22.5172 189.762 22.5172L184.258 19.2744Z\"\n fill=\"white\"\n fillRule=\"evenodd\"\n />\n <rect fill=\"#63215F\" height=\"40.3437\" rx=\"2.81371\" width=\"39.6876\" x=\"210.6\" />\n <path\n clipRule=\"evenodd\"\n d=\"M239.721 19.6979C239.721 15.1527 236.576 9.83984 230.029 9.83984C223.481 9.83984 220.336 15.1527 220.336 19.6979C220.336 24.0237 223.185 29.0459 229.106 29.5197L234.111 23.9305H230.128C227.849 23.9305 225.918 22.1459 225.918 19.6979C225.918 17.25 227.849 15.4654 230.128 15.4654C232.409 15.4654 234.339 17.25 234.339 19.6979V29.1864H239.721V19.6979Z\"\n fill=\"white\"\n fillRule=\"evenodd\"\n />\n <rect fill=\"#4C9C42\" height=\"40.3437\" rx=\"2.81371\" width=\"39.6876\" x=\"68.0742\" />\n <path\n clipRule=\"evenodd\"\n d=\"M87.3886 9.33496C81.8333 9.33496 77.3135 13.9232 77.3135 19.5633C77.3135 25.2031 81.8333 29.7914 87.3886 29.7914C92.944 29.7914 97.4638 25.2031 97.4638 19.5633C97.4638 13.9232 92.944 9.33496 87.3886 9.33496ZM87.3887 30.2718C81.5726 30.2718 76.8408 25.4683 76.8408 19.5637C76.8408 13.6592 81.5726 8.85547 87.3887 8.85547C93.2049 8.85547 97.9367 13.6592 97.9367 19.5637C97.9367 25.4683 93.2049 30.2718 87.3887 30.2718Z\"\n fill=\"white\"\n fillRule=\"evenodd\"\n />\n <path\n clipRule=\"evenodd\"\n d=\"M85.5645 21.2082H89.2207L86.9458 16.7266L85.5645 21.2082Z\"\n fill=\"white\"\n fillRule=\"evenodd\"\n />\n <path\n clipRule=\"evenodd\"\n d=\"M87.2797 16.5158L84.847 20.1764L85.2719 20.8966H84.4244L83.7935 22.0585L79.9922 24.2446L84.4582 20.2796L78.8241 20.8272L84.1948 19.0006L78.7783 17.2801L84.4119 17.7342L80.0718 13.9902L85.1801 16.595L82.5804 11.5263L86.1641 15.9554L85.8435 9.83984L87.5509 15.6298L89.3364 10.1073L88.7986 15.9086L92.5547 11.7119L89.7826 16.8624L94.9705 14.3975L90.4138 17.8274L96.311 17.7342L90.7219 18.9087L96.2304 21.14L90.0559 20.2538L94.7107 24.5453L91.1039 22.5482L93.7395 27.0644C93.7395 27.0644 91.2261 29.1735 88.4481 29.1735C85.6703 29.1735 83.6458 28.4084 83.6458 28.4084L85.7735 21.7179L90.4873 21.6878L89.5488 20.9858\"\n fill=\"white\"\n fillRule=\"evenodd\"\n />\n </g>\n <rect fill=\"#163F8E\" height=\"47.5848\" rx=\"3.31025\" width=\"46.8064\" x=\"57.1562\" y=\"18.1035\" />\n <path\n clipRule=\"evenodd\"\n d=\"M64.2012 29.4199L64.218 49.0359L80.5605 54.688L96.9025 49.0359V29.4199H64.2012Z\"\n fill=\"#D52942\"\n fillRule=\"evenodd\"\n />\n <path\n clipRule=\"evenodd\"\n d=\"M80.5347 48.419H75.539V46.664H75.4866C74.5173 48.0471 73.1319 48.7649 71.0654 48.7649C68.6337 48.7649 66.4092 47.2501 66.4092 44.0852V34.6182H71.5871V41.8493C71.5871 43.4469 71.7723 44.5637 73.2897 44.5637C74.1785 44.5637 75.355 44.1119 75.355 41.9045V34.6182H80.5347V48.419Z\"\n fill=\"#FEFEFE\"\n fillRule=\"evenodd\"\n />\n <path\n clipRule=\"evenodd\"\n d=\"M90.1891 38.6329C90.1634 38.1818 89.9281 37.8365 89.5856 37.595C89.2736 37.3309 88.8546 37.1976 88.4366 37.1976C87.7043 37.1976 86.8663 37.357 86.8663 38.2604C86.8663 38.6595 87.1819 38.845 87.4685 38.9782C88.3317 39.3518 90.2945 39.4566 92.0216 40.0423C93.7474 40.6012 95.2646 41.6386 95.2646 43.8987C95.2646 47.728 91.6527 48.7649 88.3579 48.7649C85.1667 48.7649 81.6615 47.4616 81.583 43.8987H86.5266C86.5541 44.3773 86.7614 44.7769 87.1535 45.1228C87.4159 45.362 87.9129 45.5206 88.5408 45.5206C89.2218 45.5206 90.2945 45.2559 90.2945 44.4572C90.2945 43.659 89.8484 43.4203 87.4419 42.9953C83.4935 42.303 81.8968 41.0269 81.8968 38.6595C81.8968 35.1761 85.5862 34.2725 88.3055 34.2725C91.2357 34.2725 94.7658 35.0968 94.8977 38.6329H90.1891Z\"\n fill=\"#FEFEFE\"\n fillRule=\"evenodd\"\n />\n <rect fill=\"white\" height=\"47.5848\" rx=\"3.31025\" width=\"46.8064\" x=\"113.168\" y=\"18.1035\" />\n <mask\n height=\"48\"\n id=\"mask1_6197_80303\"\n maskUnits=\"userSpaceOnUse\"\n style={{ maskType: 'luminance' }}\n width=\"47\"\n x=\"113\"\n y=\"18\"\n >\n <rect fill=\"white\" height=\"47.5848\" rx=\"3.31025\" width=\"46.8064\" x=\"113.168\" y=\"18.1035\" />\n </mask>\n <g mask=\"url(#mask1_6197_80303)\">\n <mask\n height=\"49\"\n id=\"mask2_6197_80303\"\n maskUnits=\"userSpaceOnUse\"\n style={{ maskType: 'luminance' }}\n width=\"48\"\n x=\"113\"\n y=\"18\"\n >\n <path\n clipRule=\"evenodd\"\n d=\"M113.168 18.1123H160.315V66.018H113.168V18.1123Z\"\n fill=\"white\"\n fillRule=\"evenodd\"\n />\n </mask>\n <g mask=\"url(#mask2_6197_80303)\">\n <path\n clipRule=\"evenodd\"\n d=\"M159.987 18.1123H113.168V38.2766L114.766 34.5609H118.188L118.659 35.4794V34.5609H122.655L123.557 36.5441L124.437 34.5609H137.182C137.776 34.5609 138.289 34.6654 138.678 34.9996V34.5609H142.181V34.9996C142.755 34.6654 143.514 34.5609 144.374 34.5609H149.435L149.906 35.4794V34.5609H153.635L154.189 35.4794V34.5609H157.835V42.3895H154.148L153.43 41.1989V42.3895H148.84L148.328 41.1156H147.201L146.689 42.3895H144.291C143.35 42.3895 142.652 42.1591 142.181 41.909V42.3895H136.485V40.5934C136.485 40.3433 136.444 40.3016 136.281 40.3016H136.096V42.3895H125.093V41.3869L124.703 42.3895H122.388L121.999 41.4286V42.3895H117.553L117.081 41.1156H115.955L115.442 42.3895H113.168V66.018H159.987V51.6778C159.495 51.9075 158.778 52.0325 158.081 52.0325H154.66V51.5527C154.27 51.8658 153.553 52.0325 152.897 52.0325H142.141V50.2379C142.141 49.9871 142.099 49.9871 141.894 49.9871H141.711V52.0325H138.166V49.9036C137.571 50.1955 136.915 50.1955 136.321 50.1955H135.932V52.0325H131.609L130.585 50.8222L129.457 52.0325H122.511V44.1842H129.58L130.585 45.3952L131.691 44.1842H136.444C136.998 44.1842 137.899 44.2675 138.289 44.6639V44.1842H142.53C142.96 44.1842 143.78 44.2675 144.333 44.6639V44.1842H150.725V44.6639C151.095 44.3509 151.75 44.1842 152.344 44.1842H155.909V44.6639C156.299 44.3932 156.852 44.1842 157.569 44.1842H159.987V18.1123ZM115.586 38.8399L116.509 36.627L117.409 38.8399H115.586ZM137.262 37.9434C137.058 38.0684 136.873 38.0684 136.606 38.0684H134.988V36.8369H136.606C136.833 36.8369 137.098 36.8369 137.262 36.9203C137.426 37.0249 137.508 37.1916 137.508 37.4417C137.508 37.6721 137.426 37.8805 137.262 37.9434ZM148.655 38.8399L147.754 36.627L146.853 38.8399H148.655ZM127.366 35.667H125.216L123.597 39.4661L121.876 35.667H119.766V40.9478L117.511 35.667H115.565L113.208 41.2614H114.622L115.114 40.03H117.88L118.372 41.2614H121.056V36.878L122.982 41.2614H124.109L126.035 36.878V41.2614H127.366V35.667ZM132.757 40.1133H129.683V38.9864H132.716V37.8382H129.683V36.8363H132.757V35.667H128.352V41.2614H132.757V40.1133ZM138.289 35.9178C137.858 35.667 137.388 35.667 136.711 35.667H133.699V41.2614H134.99V39.2365H136.403C136.875 39.2365 137.183 39.2782 137.388 39.4661C137.613 39.7587 137.572 40.2383 137.572 40.5514V41.2614H138.924V40.155C138.924 39.6752 138.882 39.4244 138.678 39.1531C138.555 38.9864 138.33 38.7984 138.043 38.6734C138.411 38.5059 138.986 38.0678 138.986 37.191C138.986 36.5438 138.719 36.1891 138.289 35.9178ZM141.076 35.667H139.745V41.2614H141.076V35.667ZM156.668 41.2614H154.783L152.303 37.066V41.2614H149.64L149.127 40.03H146.382L145.87 41.2614H144.333C143.698 41.2614 142.879 41.1152 142.407 40.6354C141.977 40.155 141.73 39.5078 141.73 38.5059C141.751 37.6714 141.854 36.9196 142.448 36.3142C142.838 35.8761 143.554 35.667 144.456 35.667H145.706V36.878H144.456C143.985 36.878 143.698 36.9614 143.431 37.191C143.186 37.4411 143.083 37.8799 143.083 38.4642C143.083 39.0697 143.186 39.5078 143.431 39.8003C143.616 39.9882 143.985 40.0716 144.333 40.0716H144.927L146.813 35.667H148.759L150.972 40.9478V35.667H153L155.316 39.5495V35.667H156.668V41.2614ZM128.229 49.7565H124.971V48.6288H127.88V47.5019H124.971V46.4795H128.27L129.725 48.1074L128.229 49.7565ZM131.424 48.1078L133.453 45.916V50.4245L131.424 48.1078ZM136.486 47.8989H134.744V46.4795H136.486C136.958 46.4795 137.264 46.6675 137.264 47.1473C137.264 47.6269 136.958 47.8989 136.486 47.8989ZM142.879 47.6269C142.673 47.711 142.489 47.711 142.243 47.711L140.646 47.7527V46.4795H142.243C142.489 46.4795 142.714 46.4795 142.879 46.5834C143.042 46.6675 143.145 46.8342 143.145 47.0638C143.145 47.3146 143.042 47.5019 142.879 47.6269ZM136.484 45.3115H132.284L130.584 47.1486L128.985 45.3115H123.678V50.906H128.903L130.584 49.0689L132.202 50.906H134.743V49.0273H136.402C137.529 49.0273 138.677 48.7143 138.677 47.1486C138.677 45.6245 137.509 45.3115 136.484 45.3115ZM143.943 45.5828C143.513 45.3532 143 45.3115 142.323 45.3115H139.312V50.906H140.644V48.8606H142.058C142.529 48.8606 142.795 48.9022 143 49.1107C143.226 49.382 143.226 49.8618 143.226 50.2383V50.906H144.537V49.82C144.537 49.3191 144.496 49.0689 144.332 48.7976C144.209 48.6302 143.984 48.4217 143.656 48.3172C144.024 48.1921 144.598 47.7123 144.598 46.8355C144.598 46.1884 144.373 45.8337 143.943 45.5828ZM149.742 49.7578H146.648V48.6302H149.681V47.5032H146.648V46.4808H149.742V45.3115H145.357V50.906H149.742V49.7578ZM154.783 47.942C154.455 47.6707 153.984 47.5032 153.247 47.5032H152.53C152.345 47.5032 152.181 47.4616 152.017 47.4199C151.874 47.3577 151.751 47.2319 151.751 47.0228C151.751 46.8355 151.792 46.7097 151.956 46.5848C152.058 46.5013 152.222 46.5013 152.468 46.5013H154.886V45.3115H152.263C150.849 45.3115 150.378 46.1884 150.378 46.9818C150.378 48.756 151.915 48.6726 153.124 48.7143C153.369 48.7143 153.513 48.756 153.595 48.8394C153.676 48.9022 153.759 49.0689 153.759 49.2357C153.759 49.382 153.676 49.5078 153.595 49.5911C153.471 49.6745 153.328 49.7162 153.083 49.7162H150.542V50.906H153.083C154.414 50.906 155.173 50.3421 155.173 49.1531C155.173 48.5892 155.008 48.2339 154.783 47.942ZM160.315 49.1531C160.315 50.3421 159.556 50.906 158.225 50.906H155.684V49.7162H158.225C158.47 49.7162 158.655 49.6745 158.737 49.5911C158.819 49.5078 158.9 49.382 158.9 49.2357C158.9 49.0689 158.819 48.9022 158.737 48.8394C158.655 48.756 158.511 48.7143 158.266 48.7143C157.057 48.6726 155.52 48.756 155.52 46.9818C155.52 46.1884 156.032 45.3115 157.405 45.3115H160.028V46.5013H157.61C157.364 46.5013 157.2 46.5013 157.098 46.5848C156.975 46.7097 156.893 46.8355 156.893 47.0228C156.893 47.2319 157.016 47.3577 157.159 47.4199C157.323 47.4616 157.488 47.5032 157.672 47.5032H158.388C159.126 47.5032 159.597 47.6707 159.926 47.942C160.151 48.2339 160.315 48.5892 160.315 49.1531Z\"\n fill=\"#0078A9\"\n fillRule=\"evenodd\"\n />\n </g>\n </g>\n <rect fill=\"#CC373B\" height=\"47.5848\" rx=\"3.31025\" width=\"46.8064\" x=\"169.182\" y=\"18.1035\" />\n <path\n clipRule=\"evenodd\"\n d=\"M188.11 37.584L191.61 39.0914C187.932 40.5994 184.433 42.4085 181.053 44.459L177.555 42.7102C180.934 40.7201 184.433 39.0311 188.11 37.584Z\"\n fill=\"#0071BA\"\n fillRule=\"evenodd\"\n />\n <path\n clipRule=\"evenodd\"\n d=\"M183.723 35.9551C179.928 37.1613 176.31 38.7291 172.811 40.7198L176.073 41.9859C179.453 39.9963 183.01 38.3067 186.748 36.92L183.723 35.9551Z\"\n fill=\"#0071BA\"\n fillRule=\"evenodd\"\n />\n <path\n clipRule=\"evenodd\"\n d=\"M196.058 37.3417C193.093 35.8951 190.008 34.6889 186.806 33.6631L183.426 34.7481C186.748 35.7745 189.948 36.9807 192.973 38.4887L196.058 37.3417Z\"\n fill=\"white\"\n fillRule=\"evenodd\"\n />\n <path\n clipRule=\"evenodd\"\n d=\"M200.979 35.9553C197.895 34.5681 194.753 33.4216 191.491 32.5176L188.408 33.2411C191.668 34.206 194.753 35.4123 197.776 36.9203L200.979 35.9553Z\"\n fill=\"white\"\n fillRule=\"evenodd\"\n />\n <path\n clipRule=\"evenodd\"\n d=\"M208.806 38.6094C201.038 41.3225 193.922 45.0017 187.398 49.706L192.143 52.9622C198.311 47.9572 205.071 43.9161 212.424 40.7202L208.806 38.6094Z\"\n fill=\"white\"\n fillRule=\"evenodd\"\n />\n <path\n clipRule=\"evenodd\"\n d=\"M203.53 36.0752C195.465 38.2469 188.052 41.6243 181.234 46.2673L185.739 48.7402C192.442 44.0358 199.676 40.4779 207.562 38.005L203.53 36.0752Z\"\n fill=\"white\"\n fillRule=\"evenodd\"\n />\n <rect fill=\"#3469C5\" height=\"47.5848\" rx=\"3.31025\" width=\"46.8064\" x=\"225.193\" y=\"18.1035\" />\n <path\n clipRule=\"evenodd\"\n d=\"M260.318 36.857H259.652C254.804 36.857 249.955 36.8461 245.107 36.8703C244.471 36.8735 244.25 36.7044 244.268 36.0348C244.311 34.355 244.28 32.6733 244.283 30.9925C244.284 30.049 244.556 29.757 245.462 29.7546C247.808 29.7484 250.154 29.7425 252.5 29.7655C252.785 29.7684 253.142 29.8689 253.342 30.0587C255.612 32.213 257.858 34.393 260.109 36.5681C260.168 36.625 260.208 36.7025 260.318 36.857Z\"\n fill=\"white\"\n fillRule=\"evenodd\"\n />\n <path\n clipRule=\"evenodd\"\n d=\"M254.264 54.3927C254.25 54.1047 254.232 53.9082 254.232 53.7119C254.23 48.7753 254.242 43.839 254.217 38.9028C254.213 38.2357 254.414 38.0471 255.055 38.0635C256.688 38.1051 258.322 38.0751 259.955 38.0783C260.901 38.08 261.124 38.2925 261.127 39.2231C261.132 41.6571 261.142 44.0914 261.112 46.525C261.109 46.8547 260.976 47.2613 260.759 47.4972C258.731 49.7102 256.671 51.8941 254.618 54.0844C254.533 54.1763 254.428 54.2508 254.264 54.3927Z\"\n fill=\"white\"\n fillRule=\"evenodd\"\n />\n <path\n clipRule=\"evenodd\"\n d=\"M237.063 48.2785H237.801C242.583 48.2785 247.365 48.2778 252.147 48.279C253.027 48.2792 253.028 48.2824 253.029 49.1898C253.03 50.8256 253.033 52.4612 253.027 54.0968C253.024 54.9902 252.737 55.2849 251.865 55.2866C249.474 55.2914 247.083 55.2969 244.692 55.2762C244.428 55.274 244.097 55.1783 243.912 55.0018C241.696 52.8879 239.501 50.7512 237.303 48.6183C237.242 48.5596 237.203 48.4786 237.063 48.2785Z\"\n fill=\"white\"\n fillRule=\"evenodd\"\n />\n <path\n clipRule=\"evenodd\"\n d=\"M242.954 30.7637C242.97 31.0715 242.991 31.2883 242.991 31.5051C242.993 36.3712 242.98 41.2375 243.006 46.1034C243.01 46.7919 242.82 47.0094 242.136 46.9899C240.482 46.9423 238.826 46.9794 237.171 46.9713C236.343 46.9674 236.104 46.7172 236.102 45.8612C236.098 43.4281 236.091 40.9949 236.113 38.5621C236.116 38.2727 236.212 37.9101 236.398 37.7078C238.46 35.4659 240.548 33.2487 242.631 31.0265C242.703 30.9503 242.793 30.8931 242.954 30.7637Z\"\n fill=\"white\"\n fillRule=\"evenodd\"\n />\n <rect fill=\"#624D9F\" height=\"47.5848\" rx=\"3.31025\" width=\"46.8064\" y=\"18.1035\" />\n <path\n clipRule=\"evenodd\"\n d=\"M27.7715 28.3135L20.123 41.8988L27.7715 55.9116L32.478 52.8357L28.2757 45.0605H37.0165V39.2502L28.2757 38.9938L32.394 31.5603L27.7715 28.3135Z\"\n fill=\"#98C93C\"\n fillRule=\"evenodd\"\n />\n <path\n clipRule=\"evenodd\"\n d=\"M18.8624 28.3135L14.2399 31.5603L18.358 38.9938L9.61719 39.2502V45.0605H18.358L14.1557 52.8357L18.8624 55.9116L26.5107 41.8988L18.8624 28.3135Z\"\n fill=\"white\"\n fillRule=\"evenodd\"\n />\n </svg>\n )\n}\n\nexport default ConnectImage\n","import React from 'react'\nimport { observer } from 'mobx-react-lite'\n\nimport Stack from '@mui/material/Stack'\n\nimport { Text } from '@kyper/mui'\n\nimport { MiniWidgetContainer, useGlobalCopyStore } from '../../common'\nimport ConnectImage from './ConnectImage'\n\nimport type { MiniWidgetProps } from '../../common'\n\nconst ConnectMiniWidgetCard: React.FC<MiniWidgetProps> = ({ onPrimaryCtaClick, sx = {} }) => {\n const { connect: connectCopy } = useGlobalCopyStore()\n\n return (\n <MiniWidgetContainer\n className=\"mx-exp-connect-miniwidget\"\n onPrimaryCtaClick={onPrimaryCtaClick}\n primaryCtaLabel={connectCopy.primary_cta}\n sx={sx}\n title={connectCopy.mini_title}\n >\n <Stack alignItems=\"center\" direction=\"column\" m={24}>\n <ConnectImage />\n <Text\n sx={{\n whiteSpace: 'wrap',\n mt: 16,\n textAlign: 'center',\n }}\n variant=\"Paragraph\"\n >\n {connectCopy.mini_widget_content}\n </Text>\n </Stack>\n </MiniWidgetContainer>\n )\n}\n\nexport default observer(ConnectMiniWidgetCard)\n","import React from 'react'\nimport { observer } from 'mobx-react-lite'\n\nimport Box from '@mui/material/Box'\nimport { type SxProps } from '@mui/material/styles'\n\n\nimport ConnectMiniWidgetCard from './components/ConnectMiniWidgetCard'\nimport { ConnectDrawer, useGlobalCopyStore } from '../common'\n\ninterface ConnectMiniWidgetProps {\n onPrimaryCtaClick?: () => void\n sx?: SxProps\n}\n\nconst ConnectMiniWidget: React.FC<ConnectMiniWidgetProps> = ({ onPrimaryCtaClick = () => {}, sx }) => {\n const { connect: connectCopy } = useGlobalCopyStore()\n const [showConnectWidget, setShowConnectWidget] = React.useState(false)\n const onCtaClick = () => {\n setShowConnectWidget(true)\n onPrimaryCtaClick()\n }\n\n return (\n <Box data-testid=\"ConnectMiniWidget\">\n <ConnectMiniWidgetCard onPrimaryCtaClick={onCtaClick} sx={sx} />\n {showConnectWidget &&\n <ConnectDrawer onClose={() => setShowConnectWidget(false)}\n showConnectWidget={showConnectWidget}\n title={connectCopy.mini_title} />\n }\n </Box>\n )\n}\n\nexport default observer(ConnectMiniWidget)\n"],"names":["ANALYTICS_EVENTS","ORDINAL_DATE_FORMAT","ORDINAL_MONTH_DAY_YEAR_FORMAT","DATE_FORMATS_INTL","formatDate","date","dFormat","intlFormat","getLocale","AccountType","AccountSubType","PropertyType","ConnectionStatusEnums","ProcessingStatuses","MfaStatuses","ErrorStatuses","NonConnectedStatuses","ConnectionStatus","StatusName","AccountTypeName","AccountIcon","AccountIconVariants","PropertyTypeName","PropertyIcon","INCOME_ACCOUNT_TYPES","PAYMENT_ACCOUNT_TYPES","SPENDING_ACCOUNT_TYPES","CategoryGuids","PaymentCategories","CategoryGuidToName","CategoryColors","CategoryIcon","MAX_MONEY_INPUT","CurrencyCodes","RecurrenceTypes","RECURRENCE_COPY","Sizes","TOUCH_TARGET","copyPattern","buildDynamicCopy","str","args","hasFormattedElement","arg","matches","acc","match","matchIndex","temp","groups","curlyIndex","variableName","index","React","element","clonedElement","buildPluralCopy","strOne","strMulti","count","formatCurrency","amount","formatting","roundingFunction","numeral","getCurrencyCodes","isValidNumber","value","defaultPercentStyle","formatPercentage","options","getPluralRules","formatOrdinal","number","copy","rule","getNextWeeklyDate","dayOfWeek","getDay","nextDate","nextDay","isBefore","startOfToday","addWeeks","getNextBiWeeklyDate","nextWeeklyday","getNextMonthlyDate","setDate","addMonths","getNextBiMonthlyDate","nextMonthlyDate","getNextQuarterlyDate","addQuarters","getNextBiQuarterlyDate","nextQuarterlyDate","getNextYearlyDate","addYears","fromUnixUTC","utcTime","fromUnixTime","fromUnixToDayOfWeekAndDate","fromTimestampToMonthYear","timestamp","setupMappedSelectedOptions","accounts","selectedAccountGuids","accumulator","account","setupMappedAccounts","accountType","newAccount","AccountFilterOptions","accountFilterButtonEl","onAccountClick","onAccountGroupClick","onCancelClick","onConnectAccountClick","onFilterClick","selectedOptions","setSelectedOptions","handleClose","showAccountNumbers","mappedAccounts","useMemo","shouldShowZeroState","isOpen","isAllChecked","jsx","Popover","jsxs","Stack","AccountsIcon","P","Button","List","ListItem","FormControlLabel","CheckBox","updatedOptions","key","groupedAccounts","allGroupedAccountsSelected","ListSubheader","ListItemButton","ListItemText","isSelected","label","useScreenSize","useMediaQuery","useTheme","AccountFilter","sx","variant","isMobile","setAccountFilterButtonEl","onClick","event","Box","Tooltip","IconButton","Icon","allSelected","selectedOptionsClone","guid","Header","onNextClick","onPreviousClick","tokens","useTokens","styles","getStyles","H2","KeyboardArrowLeftRoundedIcon","KeyboardArrowRightRoundedIcon","css","Day","beginDate","endDate","isInMonth","theme","isInRange","isWithinInterval","isSameDay","isRangeStart","isRangeEnd","isToday","Text","format","DATE_SIZE","CALENDAR_WIDTH","CalendarSelectionTypes","Calendar","beginDateProp","endDateProp","onDateSelected","onRangeSelected","selectionType","setBeginDate","setEndDate","weeks","weeksInInterval","eachWeekOfInterval","startOfMonth","endOfMonth","i","weekStart","days","eachDayOfInterval","addDays","week","j","handleSelection","handleTodayClick","today","handleNextMonthClick","handlePreviousMonthClick","subMonths","Paper","day","isSameMonth","CustomMark","props","showLabel","xNumber","yNumber","handleMarkClick","handleMouseEnter","handleMouseLeave","Fragment","CustomLine","CustomLegend","series","average","style","commonCopy","useGlobalCopyStore","s","CustomLegend$1","observer","LineChart","baseline","colors","datasets","height","labels","margin","markHandlers","markStyles","showBars","showArea","showAverage","showMarkLabel","useCustomMark","valueFormatterString","width","xData","item","yData","total","yMin","yMax","data","ResponsiveChartContainer","AreaPlot","LinePlot","MarkPlot","BarPlot","ChartsXAxis","ChartsYAxis","ChartsReferenceLine","ChartsLegend","GlobalDataContext","GlobalDataProvider","children","globalStore","onEvent","onPageView","WidgetContainerContext","WidgetContainerProvider","availableHeight","availableWidth","useGlobalDataContext","providerName","context","useAccountStore","useBudgetsStore","useCashflowStore","useCategoryStore","useConnectStore","useDebtStore","useGlobalStore","useGlobalUiStore","useGoalStore","useMerchantStore","useNetWorthStore","useNotificationStore","useRecurringActivityStore","useTransactionStore","useUserStore","useEvent","usePageView","useWidgetContainerContext","useWidgetContainerProvider","CategoryIconLabel","categoryGuid","topLevelCategoryGuid","getCategoryName","categoryName","CurrencyText","isIncome","bold","color","formatString","symbol","rest","CustomAreaTooltip","topLevelGuid","hoveredAreaData","cursorPosition","chartContainerRef","tooltipRef","useRef","adjustedPos","setAdjustedPos","useState","useEffect","tooltipEl","chartEl","tooltipRect","containerRect","newX","newY","seriesSum","sum","dataPoint","Card","CardContent","Divider","Grid","CustomAreaTooltip$1","StatusBar","borderRadius","Dialog","className","disablePrimaryButton","onClose","onPrimaryAction","primaryColor","primaryText","onSecondaryAction","secondaryColor","secondaryText","handlePrimaryAction","handleSecondaryAction","MuiDialog","DialogHeader","DialogContent","DialogFooter","DrawerHeader","ariaLabelClose","shouldShowBorders","shouldShowShadow","title","ArrowBackOutlinedIcon","Drawer","id","isPrimaryDisabled","shouldShowHeaderBorders","shouldShowHeaderShadow","KMuiDrawer","Footer","DateRangeSelector","calendarActions","range","endOfToday","shouldShrinkToIcon","toolTipContent","isDark","isDesktop","dateRange","setDateRange","shortcut","setShortcut","pickerDateRange","setPickerDateRange","isPickerOpen","setIsPickerOpen","isMonthFormat","setIsMonthFormat","timeframe","setTimeframe","timeframes","getTimeFrameDates","timeframeEndDate","handlePrevNextClick","direction","newRange","isPrev","subYears","startOfYear","endOfYear","numDays","differenceInCalendarDays","subDays","handleRangeChanged","handleTimeframeChanged","ButtonGroup","ToggleButtonGroup","ToggleButton","Tabs","_","newValue","Tab","DateRangePicker","useDebounce","func","delay","timeoutId","useDimensions","debounceDelay","dimensions","setDimensions","observerRef","previousDimensions","debouncedSetDimensions","customRef","node","entry","MiniWidgetContainer","onPrimaryCtaClick","primaryCtaLabel","subTitle","containerRef","CardHeader","H3","WidgetContainer","accountOptions","actions","dateRangeVariant","hasDivider","onBackClick","onAccountsFilterClick","showDividerAboveDateSelector","isTablet","displayedDateRange","setSelectedAccountGuids","handleBackClick","accountFilterCopy","dateRangeSelectorCopy","startDate","guids","selAcctGuids","action","H1","WidgetContainer$1","ConnectStatus","status","MemberConnectionStatus","connectCopy","CircularProgress","ConnectStatus$1","FieldType","CONNECT_WIDGET_ID","CONNECTIONS_WIDGET_ID","ConnectDrawer","loadWidgetProps","showConnectWidget","connectWidget","refreshAccounts","loadWidget","isLoading","setIsLoading","hasError","setHasError","mode","res","ConnectWidget","ConnectDrawer$1","CurrencyInput","allowDecimals","ariaLabel","amountIsRequired","customValidate","errorText","minAmount","setAmount","setHasValidInput","errorMsg","setErrorMsg","customCopy","numbersOnly","numbersWithComma","numbersWithDecimal","pattern","nameRef","uuidv4","handleValidation","TextField","e","Loader","size","SearchBox","cancelAriaLabel","onChange","placeholder","searchValue","cancelButton","InputAdornment","SearchBox$3","SelectionBox","checked","tooltip","greyColor","borderColor","Radio","TabContentContainer","name","IconBacking","backingSx","DataRow","iconName","rowContents","ListItemAvatar","Avatar","IconWeight","ListItemIcon","InformationTooltip","body","ListItemWrapper","clickEventName","useCashflowUiStore","RemainingCash","remaining","RemainingCash$1","CashflowWidgetContent","onAddIncomeClick","cashAccounts","cashBalance","userProfile","daysUntilNextIncome","expensesTilNextIncome","selectedCashAccounts","setNextIncome","setSelectedCashAccounts","setUpcomingExpenses","nextIncomeActivity","upcomingExpenses","filteredCashBalance","filteredExpenseTotal","expense","curr","availableToSpend","hasCompletedCashflowOnboarding","CashflowWidgetContent$1","CashflowMiniWidget","CashflowMiniWidget$1","TopActions","TopActions2","BottomActions","BottomActions2","DEFAULT_TOP_ACTIONS","DEFAULT_BOTTOM_ACTIONS","ON_CLICK_EVENTS","ANALYTICS_ACTIONS","ANALYTICS_CATEGORIES","ANALYTICS_LABELS","ActivityType","ActivityStatus","TrackType","TransactionType","TransactionStatus","DEFAULT_TRANSACTION","useTransactionsUiStore","exportTransactionsToCSV","transactions","tags","csvContent","structureCSVData","formatTransactions","uriEncodedData","link","transaction","getDescription","getTags","formattedTransactions","csvHeader","csvRows","description","tagGuid","t","TransactionRow","associatedBeats","showInsights","isCredit","beat","MerchantLogo","TransactionRow$1","SubheaderRow","bgcolor","ZeroState","showIcon","showSubtitle","ReceiptOutlinedIcon","ZeroState$1","shouldShowDate","currentDate","previousDate","hasInsetBorder","ROW_HEIGHT","DATE_ROW_HEIGHT","TransactionList","loader","showLoader","zeroState","setShowInsights","toggleSplit","handleClick","parentRef","rowVirtualizer","useVirtualizer","row","showDate","isInset","rowHeight","TransactionList$1","AccountCell","params","AmountCell","transaction_type","CategoryCell","isHover","setIsHover","CategoryCell$1","DateCell","FlagCell","transactionsCopy","is_flagged","is_hidden","has_been_viewed","parent_guid","hasNotBeenViewed","FlagCell$1","HeaderCell","PayeeCell","TransactionTable","onCategoryClick","onRowClick","sortedTransactions","columns","rows","DataGridPro","TransactionTable$1","useCategoryUiStore","CustomCategoryModalType","CustomCategoryModal","onSave","type","setName","setShouldDisableDrawerScroll","headingText","isDeleteType","CustomCategoryModal$1","AddSubcategory","parentCategory","showAdd","setShowAdd","addCategory","handleAdd","handleAdding","handleModalClose","AddSubcategory$1","RenameSubcategory","setShowRename","subCategory","showRename","updateCategory","handleRename","RenameSubcategory$1","DeleteSubcategory","showDelete","setShowDelete","removeCategory","handleDelete","DeleteSubcategory$1","SubcategoryRow","onSelect","selectedGuid","setSelectedGuid","showSelected","unselectable","unselectableText","isCustom","isSelectable","CheckCircleIcon","Chip","EditOutlinedIcon","DeleteOutlinedIcon","SubcategoryRow$1","SubcategoryList","categories","expandedGuid","isExpanded","isFiltered","Collapse","category","SubcategoryList$1","CategoryRow","subCategories","setExpandedGuid","handleExpanderClick","ExpandMoreIcon","ChevronRightIcon","CategoryRow$1","CategoryList","nestedCategories","filter","currCategory","nested","CategoryList$1","CategorySelector","initialSelected","loadCategories","setOnSelect","setSearchValue","setShowSelected","setUnselectable","setUnselectableText","CategorySelector$1","CategorySelectorDrawer","showDrawer","categorySelectorProps","CategorySelectorDrawer$1","CategoryAction","addOrUpdateTransactionRule","updateTransaction","updateManualTransaction","open","setOpen","handleCategoryChange","applyToAll","handleSelected","c","handleCloseDrawer","CategoryIconVariants","DateAction","handleDateSelected","getUnixTime","handleSave","DeleteAction","removeTransaction","DeleteAction$1","DeleteLogoAction","handleDeleteLogo","DeleteLogoAction$1","HideAction","isHidden","toggleHide","Switch","HideAction$1","TransactionAmountHeader","merchant_guid","payee","top_level_category_guid","MemoAction","memoText","setMemoText","MemoAction$1","SplitRow","onDeleteRow","onCategoryChanged","onUpdateAmount","split","categorySelectorOpen","setCategorySelectorOpen","isTopRow","handleChangeAmount","CancelIcon","SplitRow$1","SplitManager","onAddSplit","onDeleteSplit","splits","error","setError","SplitManager$1","SplitAction","splitTransaction","unSplitTransaction","INITIAL_SPLIT","EMPTY_SPLIT","isSplitDrawerOpen","setIsSplitDrawerOpen","isDeleteSplitOpen","setIsDeleteSplitOpen","setSplits","handleAddSplit","updatedSplits","handleDeleteSplit","handleUpdateAmount","handleCategoryChanged","handleCancel","handleUnSplit","hasCategoryError","hasAmountError","SplitAction$1","addTag","isAdding","setIsAdding","tagName","setTagName","tagNameError","setTagNameError","inputRef","handleAddTag","Header$1","onSearchValueChanged","HighlightOffIcon","SearchIcon","SearchBox$1","TagRow","onTagChecked","selectedTags","tag","removeTag","updateTag","editOpen","setEditOpen","deleteOpen","setDeleteOpen","handleSaveTag","handleDeleteTag","handleEditClick","handleDeleteClick","EditIcon","Checkbox","TagRow$1","TagManager","filteredTags","TagManager$1","TagsAction","updateTaggings","setSelectedTags","handleTagChecked","tagNames","TagsAction$1","Description","isEditing","setIsEditing","setDescription","FormGroup","Description$1","FlagTransaction","handleFlagTransaction","FlagOutlinedIcon","FlagTransaction$1","TransactionDetails","bottomActions","topActions","showFullNumber","TransactionDetails$1","AddAccountModal","modalCopy","AddAccountModal$1","ManualTransactionDetails","selectedAccounts","manualTransaction","setIsAmountValid","setPayee","manualAccounts","currencyCopy","handleAmountChanged","handleTransactionTypeChanged","_event","handlePayeeChanged","handleAccountChanged","RadioGroup","MenuItem","ManualTransactionDetails$1","EditCategoryAction","setCategoryGuid","EditCategoryAction$1","HEADER_HEIGHT","TransactionWidget","isAmountValid","addTransaction","loadAssociatedBeats","setFilter","isInitialized","setDisplayedDate","setSelectedAccounts","drawerOpen","setDrawerOpen","transactionGuid","setTransactionGuid","addManualAccountModalOpen","setAddManualAccountModalOpen","setShowConnectWidget","isWidgetInitialized","setIsWidgetInitialized","isTransactionValid","handleDateChanged","handleSearch","searchTerm","handleExportCsvClick","handleAddTransactionClick","handleAddTransaction","handleAddManualAccountClick","handleConnectWidgetClose","TransactionWidget$1","updateIncome","activity","sequence","updatedSequence","repeatDay","getDate","repeatMonth","getMonth","repeatWeekday","updateExpense","scheduledPayment","formatISO","FrequencyAction","recurringCopy","cashflowSequences","scheduledPayments","updateCashflowSequence","updateScheduledPayment","setIsOpen","frequencies","handleOnClick","recurrenceType","updatedActivity","payment","sp","cs","handleOpen","frequency","f","FrequencyAction$1","PaymentDateAction","selected","setSelected","LocalizationProvider","AdapterDateFns","DateCalendar","PaymentDateAction$1","ActivityDetails","onDeleted","deleteCashflowSequence","deleteScheduledPayment","paidActivities","showDeleteConfirm","setShowDeleteConfirm","transactionGuids","pa","handleDeleteActivity","handleDeleteButtonClick","ActivityDetails$1","iconStyle","offsetStyle","isOffset","UpcomingExpenseBadge","AccessTimeFilledIcon","IncomeBadge","MonetizationOnIcon","MissedBadge","PaidBadge","getRecurrence","isValid","getStatus","getStatusIcon","ActivityRow","isMini","onActivityClick","showOrdinal","openGuid","setOpenGuid","isPaid","isMissed","isUpcoming","InstitutionLogo","ActivityRow$1","buildNewCashflowSequence","cashflowSequence","buildNewCashflowEvent","buildNewScheduledPayment","SelectTransaction","onSearch","onSelected","SelectTransaction$1","AddActivityDetails","onFrequencyChange","onNextDateChange","transactionDate","handleFrequencyChange","DatePicker","AddActivityDetails$1","expenseFilter","expenseFilterSearch","incomeFilter","incomeFilterSearch","AddActivity","onAddActivity","addCashflowEvent","addCashflowSequence","addScheduledPayment","isSelectTransactionOpen","setIsSelectTransactionOpen","setFrequency","setNextDate","handleAddActivity","closeOnAdd","newSequence","AddActivity$1","buildExpenses","payments","a","parseISO","ManageExpenses","expenses","ManageExpenses$1","buildInstitutionName","getRecurrenceType","buildActivities","events","projected","sequences","paidIncome","upcomingIncome","actual","pastEvent","p","b","pastTransaction","occursOn","baseExpense","isAfter","subWeeks","exp","buildIncome","projectedEvents","expectedDate","ManageIncome","cashflowEvents","income","ManageIncome$1","ActivitySettings","selectedTab","setSelectedTab","ActivitySettings$1","totalReducer","dateFilter","ActivityDay","outsideCurrentMonth","other","activities","setSelectedDay","dayActivities","hasUpcoming","hasMissed","hasPaid","hasIncome","totalBadges","Badge","PickersDay","ActivityDay$1","Symbol","Legend","Legend$1","ActivityCalendar","selectedDay","calendarHeight","setCalendarHeight","getWeeksInMonth","handleMonthChange","calendar","ActivityCalendar$1","groupActivitiesByDate","groupedActivities","dateString","existingGroup","group","ActivityList","onResetClick","ActivityList$1","expected","paid","missed","onNewClick","ActivityStatus$1","RecurringActivity","isSmallTablet","missedActivities","selectedDayActivities","upcomingActivities","all","expenseExpected","expensePaid","expenseMissed","numExpenses","incomeExpected","incomePaid","numIncome","handleTabChange","onUpcomingActivityClick","onPaidActivityClick","RecurringActivity$1","RecurringActivityWidget","isSettingsOpen","setIsSettingsOpen","Skeleton","RecurringActivityWidget$1","MiniWidgetContent","filteredUpcomingActivities","isSmall","MiniWidgetContent$1","RecurringActivityMiniWidget","RecurringActivityMiniWidget$1","ErrorStatus","ErrorIcon","isAccountLiability","isManual","usesCreditLimitField","usesInterestRateField","usesOriginalBalanceField","getAccountDetailFields","fields","val","accountTypeOptions","option","propertyTypeOptions","fieldName","dateTimeStamp","getAccountBalanceDetails","firstSubtitle","firstValue","secondSubtitle","secondValue","hasAvailableBalance","AccountListItem","listItemProps","shouldShowConnectionStatus","accountsCopy","statusIcon","content","AccountListItem$1","DetailsFooter","ExpenseType","DetailsExpenseRow","DetailsExpenseRow$1","DetailsExpenseHeader","DetailsExpenseHeader$1","activityFilter","DetailsTab","upcomingIncomeByAccount","projectedExpensesByAccount","incomeTotal","expenseTotal","DetailsTab$1","SummaryTab","nickname","institution_guid","account_number","accountName","totalprojectedExpenses","totalProjectedIncome","SummaryTab$1","CashflowContent","setValue","handleChange","CashflowContent$1","CashflowAmountHeading","isTotal","activityAccountFilter","accountGuids","CashflowHeading","filteredExpenses","filteredIncome","totalUpcomingExpenses","totalUpcomingIncome","isSmallContainer","CashflowHeading$1","StepOne","handleNextStep","completeOnboarding","StepOne$1","stepTwoLoadingUrl","StepTwo","StepTwo$1","stepOneImageUrl","spin","keyframes","CashflowOnboarding","isDirty","addIncome","setAddIncome","isSubmitting","setIsSubmitting","step","setStep","selectedTransactions","setSelectedTransactions","canSubmit","handleGetTransactions","handleAddIncome","upcomingTransaction","showSelectIncome","updatedTransactions","CashflowOnboarding$1","CashflowWidget","shouldDisableNextDate","shouldDisablePrevDate","cashAccountGuids","selAccts","CashflowWidget$1","getPayoffProjection","debts","extraPayment","sortedDebts","d","totalSavings","monthlyExtra","debt","monthlyInterest","appliedPayment","duration","intervalToDuration","formatDuration","SnowballCard","onClickCta","payoffDate","payoffSavings","payoffDuration","SnowballCard$1","SnowballDrawer","readMore","setReadMore","SnowballDrawer$1","BASE_LINE_COLOR","adjustBrightness","factor","r","g","hex","newColor","DebtsChart","hoveredDebtGuid","onHoverArea","uniqueXValues","point","normalizedDatasets","datasetMap","lastY","normalizedDataset","x","y","initialTotalDebt","payoffLine","linearRate","brightnessFactor","seriesColor","getIndexByGuid","line","highlightedGuid","getColors","priority","PriorityCell","getPriority","priorityComparator","getWeight","DebtsTable","onHoverRow","onClickRow","sortModel","setSortModel","idx","onMouseEnterRow","debtIdx","hoveredDebt","getRowIdByGuid","newModel","transformDebtsChartData","monthlyPayment","initialBalance","payoffData","remainingBalance","DebtsWidget","setHoveredDebtGuid","isDrawerOpen","setIsDrawerOpen","loadGoals","debtsChartData","debtsTableData","onHoverDebt","onAccountFilterClick","DebtsWidget$1","TabTitle","subtitle","getGoalStatusData","goal","percentage","backgroundColor","percentageStyle","completionDate","percentageText","projectedText","GoalStatusCard","CardActionArea","Payments","GoalList","onManageClick","trackType","allGoals","setSelectedGoal","goals","ongoing","complete","manageButtonLabel","zeroStateComplete","GoalDetails","goalTitle","ChevronRight","AddBox","GoalsWidget","selectedGoal","savingTotal","debtTotal","retirementTotal","savingsTabSubtitle","debtTabSubtitle","retireTabSubtitle","handleAccountFilterClick","handleAddClick","NAME_PATTERN","MAX_LENGTH","MerchantLookup","merchants","loadMerchants","merchant","MerchantLookup$1","MAX_NUMBER_MONTHS","filterAccounts","members","is_closed","is_deleted","is_manual","member","flattenBalances","balances","balance","getLatestNetWorthData","chartData","sortByYearMonthAscending","buildDateTicks","buildChartData","monthlyAccountBalances","numberOfMonths","result","year_month","accountsWithBalances","zeroBalance","lastBalance","change","current","buildGainsLosses","selectedData","gains","losses","totalGains","totalLosses","buildAssetsLiabilities","assets","liabilities","totalAssets","totalLiabilities","groupAccounts","NetWorthChart","hoveredData","onMarkClick","onMouseEnter","onMouseLeave","chartWidthNotMobile","selectedMark","hoveredMark","getMarkStyles","markIndex","NetWorthChart$1","NetWorthListItem","isHovered","onItemClick","listItemStyles","setListItemStyles","NetWorthListItem$1","NetWorthList","onListItemClick","onButtonClick","buildStyles","lineItem","NetWorthList$1","NetWorthChange","currencyLabel","currencyVariant","iconSize","netWorth","iconColor","currencyTextColor","NetWorthChange$1","NetWorthSummary","summary","formattedMonth","NetWorthSummary$1","Group","icon","ListGroup","AssetsLiabilitiesDetail","AssetsLiabilitiesDetail$1","GainsLossesDetail","gain","loss","GainsLossesDetail$1","NetWorthWidget","assetsLiabilities","gainsLosses","loadChartData","loadNetWorthData","netWorthChartData","setHoveredData","setSelectedData","setTimeFrame","isGlDrawerOpen","setIsGlDrawerOpen","isAlDrawerOpen","setIsAlDrawerOpen","initalizeWidget","handleDataClick","dataIndex","handleViewAssetsLiabilitiesClick","differenceInMonths","netWorthProps","notifications","NotificationBadge","notification","budgets","budget","isGoal","NotificationBadge$1","NotificationCard","updateNotification","DateRow","NotificationList","recentNotifications","markAllAsViewed","notificationsCopy","NotificationList$1","AccountActionsRow","isLast","useAccountUiStore","useGetMergeableAccounts","selectedAccount","selectedMember","AccountActions","shouldShowCloseAccountModal","setShouldShowCloseAccountModal","shouldShowAccountMergeDrawer","setShouldShowAccountMergeDrawer","shouldShowMergeConfirmModal","setShouldShowMergeConfirmModal","accountToMerge","setAccountToMerge","mergeAccounts","updateAccount","mergeableAccounts","handleUpdateAccount","updatedValue","handleMergeAccounts","AccountActions$1","getConnectionMessages","connection_messages","lastUpdatedCopy","lastUpdated","lastUpdatedFormattedTime","isYesterday","AccountConnection","shouldShowConnectDrawer","setShouldShowConnectDrawer","statusMessages","CheckCircleRoundedIcon","THEMES","LanguageRoundedIcon","AccountConnection$1","AccountDetailEdit","field","editedValue","setEditedValue","errorMessage","setErrorMessage","hasValidCurrencyInput","setHasValidCurrencyInput","getEditableField","FormControl","InputLabel","Select","updateField","saveField","AccountDetailEdit$1","AccountDetails","widgetProfile","canEdit","showEditDialog","setShowEditDialog","fieldToEdit","setFieldToEdit","displayableFields","hasValue","AccountDetails$1","AccountDetailsTab","AccountDetailsTab$1","ConnectionErrorMessage","setTabValue","Alert","AlertTitle","Link","ConnectionErrorMessage$1","TransactionsTab","setGuid","TransactionsTab$1","AccountDetailsContent","tabValue","AccountDetailsContent$1","totals","isExpense","isTransfer","isPayment","isSpend","getTopLevelCategoryTotals","getMonthlyTotals","getIncomeTotals","incomeTotals","getPaymentTotals","paymentTotals","getSpendingTotals","spendingTotals","getSpendingData","filteredTotals","getDatasets","incomeData","paymentData","spendingData","getLabels","dataA","dataB","credits","debits","lastIncome","lastPayment","lastSpending","TrendsChart","monthlyCategoryTotals","trendsCopy","isLoan","TrendsChart$1","AccountDetailsChart","loadMonthlyCategoryTotals","AccountDetailsChart$1","AccountDetailsHeader","institutions","institution","showChart","AccountDetailsHeader$1","AccountsList","selectedAccountGuid","setSelectedAccountGuid","setSelectedAccount","setSelectedMember","accountTypes","accountsOfType","accountsOfTypeTotal","isVeryLastItem","isLastAccountTypeItem","AccountsList$1","ConnectionsDrawer","showConnectionsWidget","connectionsWidget","ConnectionsWidget","ConnectionsDrawer$1","AccountsWidget","setShowConnectionsWidget","refreshMembers","handleSync","handleManageConnections","AccountsWidget$1","fliterAccounts","AccountsMiniWidget","visibleAccounts","setVisibleAccounts","AccountsMiniWidget$1","ConnectImage","ConnectMiniWidgetCard","ConnectMiniWidgetCard$1","ConnectMiniWidget","ConnectMiniWidget$1"],"mappings":"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"}
|