@mx-cartographer/experiences 9.1.0-alpha.bb1 → 9.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (248) hide show
  1. package/CHANGELOG.md +80 -0
  2. package/README.md +10 -10
  3. package/dist/Account-DR7Plrqy.mjs +119 -0
  4. package/dist/Account-DR7Plrqy.mjs.map +1 -0
  5. package/dist/AccountDetailsDrawer-C1hhmlmI.mjs +922 -0
  6. package/dist/AccountDetailsDrawer-C1hhmlmI.mjs.map +1 -0
  7. package/dist/AccountDetailsHeader-BliEZhz7.mjs +230 -0
  8. package/dist/AccountDetailsHeader-BliEZhz7.mjs.map +1 -0
  9. package/dist/AccountUtils-Cbh8r9cP.mjs +29 -0
  10. package/dist/AccountUtils-Cbh8r9cP.mjs.map +1 -0
  11. package/dist/Analytics-CkYXKvco.mjs +54 -0
  12. package/dist/Analytics-CkYXKvco.mjs.map +1 -0
  13. package/dist/Analytics-WeZYytR0.mjs +140 -0
  14. package/dist/Analytics-WeZYytR0.mjs.map +1 -0
  15. package/dist/ApiEndpoints-DXwIYNUV.mjs +50 -0
  16. package/dist/ApiEndpoints-DXwIYNUV.mjs.map +1 -0
  17. package/dist/BeatMaterialIcon-1KOfRZrA.mjs +27 -0
  18. package/dist/BeatMaterialIcon-1KOfRZrA.mjs.map +1 -0
  19. package/dist/BudgetUtil-Bg2AQJpQ.mjs +75 -0
  20. package/dist/BudgetUtil-Bg2AQJpQ.mjs.map +1 -0
  21. package/dist/Category-DEKZGLYe.mjs +302 -0
  22. package/dist/Category-DEKZGLYe.mjs.map +1 -0
  23. package/dist/CategorySelectorDrawer-NJsFsKP1.mjs +431 -0
  24. package/dist/CategorySelectorDrawer-NJsFsKP1.mjs.map +1 -0
  25. package/dist/Connect-BH0Pt6zc.mjs +43 -0
  26. package/dist/Connect-BH0Pt6zc.mjs.map +1 -0
  27. package/dist/ConnectCard-D7uxoH5Y.mjs +55 -0
  28. package/dist/ConnectCard-D7uxoH5Y.mjs.map +1 -0
  29. package/dist/ConnectDrawer-CW4LA3H3.mjs +58 -0
  30. package/dist/ConnectDrawer-CW4LA3H3.mjs.map +1 -0
  31. package/dist/ConnectionsDrawer-CZU9ku-k.mjs +54 -0
  32. package/dist/ConnectionsDrawer-CZU9ku-k.mjs.map +1 -0
  33. package/dist/CurrencyDialog-DumQCTPO.mjs +374 -0
  34. package/dist/CurrencyDialog-DumQCTPO.mjs.map +1 -0
  35. package/dist/CurrencyInput-DaGEQaLW.mjs +88 -0
  36. package/dist/CurrencyInput-DaGEQaLW.mjs.map +1 -0
  37. package/dist/CurrencyText-CCbE6MmF.mjs +21 -0
  38. package/dist/CurrencyText-CCbE6MmF.mjs.map +1 -0
  39. package/dist/DateFormats-HudZ3Bjs.mjs +65 -0
  40. package/dist/DateFormats-HudZ3Bjs.mjs.map +1 -0
  41. package/dist/DateUtil-CzBmbjmA.mjs +75 -0
  42. package/dist/DateUtil-CzBmbjmA.mjs.map +1 -0
  43. package/dist/DebtUtils-i4pI2Uoe.mjs +154 -0
  44. package/dist/DebtUtils-i4pI2Uoe.mjs.map +1 -0
  45. package/dist/Dialog-Bvd2n8hz.mjs +67 -0
  46. package/dist/Dialog-Bvd2n8hz.mjs.map +1 -0
  47. package/dist/Donut-SzzfZDHF.mjs +89 -0
  48. package/dist/Donut-SzzfZDHF.mjs.map +1 -0
  49. package/dist/Drawer-DsnW2o0v.mjs +175 -0
  50. package/dist/Drawer-DsnW2o0v.mjs.map +1 -0
  51. package/dist/EmbeddedCard-DH8vQ3qN.mjs +859 -0
  52. package/dist/EmbeddedCard-DH8vQ3qN.mjs.map +1 -0
  53. package/dist/EmptyState-CJUDc3kD.mjs +85 -0
  54. package/dist/EmptyState-CJUDc3kD.mjs.map +1 -0
  55. package/dist/Error-Dtw6yxkf.mjs +85 -0
  56. package/dist/Error-Dtw6yxkf.mjs.map +1 -0
  57. package/dist/ErrorBoundary-CsdOcnJ9.mjs +24 -0
  58. package/dist/ErrorBoundary-CsdOcnJ9.mjs.map +1 -0
  59. package/dist/ExportCsvAction-C9KWH3Az.mjs +25 -0
  60. package/dist/ExportCsvAction-C9KWH3Az.mjs.map +1 -0
  61. package/dist/GlobalAccountFilter-BhzR5Vb1.mjs +230 -0
  62. package/dist/GlobalAccountFilter-BhzR5Vb1.mjs.map +1 -0
  63. package/dist/GlobalCopyApi-wcnDUzMV.mjs +129 -0
  64. package/dist/GlobalCopyApi-wcnDUzMV.mjs.map +1 -0
  65. package/dist/GoalsUtil-C9EnLWvC.mjs +108 -0
  66. package/dist/GoalsUtil-C9EnLWvC.mjs.map +1 -0
  67. package/dist/HeaderCell-P8w6CmfO.mjs +7 -0
  68. package/dist/HeaderCell-P8w6CmfO.mjs.map +1 -0
  69. package/dist/Help-CkQTjORd.mjs +300 -0
  70. package/dist/Help-CkQTjORd.mjs.map +1 -0
  71. package/dist/Help-aERwhajy.mjs +3210 -0
  72. package/dist/Help-aERwhajy.mjs.map +1 -0
  73. package/dist/IconBacking-DgT8DCeh.mjs +40 -0
  74. package/dist/IconBacking-DgT8DCeh.mjs.map +1 -0
  75. package/dist/InformationTooltip-4su8bn1e.mjs +42 -0
  76. package/dist/InformationTooltip-4su8bn1e.mjs.map +1 -0
  77. package/dist/InvestmentUtil-BItV7uEs.mjs +135 -0
  78. package/dist/InvestmentUtil-BItV7uEs.mjs.map +1 -0
  79. package/dist/LineChart-CUfiH86G.mjs +613 -0
  80. package/dist/LineChart-CUfiH86G.mjs.map +1 -0
  81. package/dist/ListItemAction-BqUCLj_w.mjs +70 -0
  82. package/dist/ListItemAction-BqUCLj_w.mjs.map +1 -0
  83. package/dist/ListItemRow-kH1rn8Xu.mjs +68 -0
  84. package/dist/ListItemRow-kH1rn8Xu.mjs.map +1 -0
  85. package/dist/ListItemWrapper-DRse79Iu.mjs +44 -0
  86. package/dist/ListItemWrapper-DRse79Iu.mjs.map +1 -0
  87. package/dist/Loader-CxeBwuPG.mjs +22 -0
  88. package/dist/Loader-CxeBwuPG.mjs.map +1 -0
  89. package/dist/Localization-DnoVyBNK.mjs +39 -0
  90. package/dist/Localization-DnoVyBNK.mjs.map +1 -0
  91. package/dist/ManageIncome-Be9WHv-s.mjs +906 -0
  92. package/dist/ManageIncome-Be9WHv-s.mjs.map +1 -0
  93. package/dist/MicroWidgetContainer-B2NnKBgW.mjs +46 -0
  94. package/dist/MicroWidgetContainer-B2NnKBgW.mjs.map +1 -0
  95. package/dist/MiniWidgetContainer-Bmv_WeUd.mjs +67 -0
  96. package/dist/MiniWidgetContainer-Bmv_WeUd.mjs.map +1 -0
  97. package/dist/NetWorthUtils-Dj7CgAg2.mjs +96 -0
  98. package/dist/NetWorthUtils-Dj7CgAg2.mjs.map +1 -0
  99. package/dist/Notification-DTNYSd8P.mjs +8 -0
  100. package/dist/Notification-DTNYSd8P.mjs.map +1 -0
  101. package/dist/NotificationSettings-CW7okUrk.mjs +678 -0
  102. package/dist/NotificationSettings-CW7okUrk.mjs.map +1 -0
  103. package/dist/NotificationUtils-BRGFTePr.mjs +24 -0
  104. package/dist/NotificationUtils-BRGFTePr.mjs.map +1 -0
  105. package/dist/NumberFormatting--XMeeBfr.mjs +50 -0
  106. package/dist/NumberFormatting--XMeeBfr.mjs.map +1 -0
  107. package/dist/OriginalBalanceAction-YrvxBYAl.mjs +115 -0
  108. package/dist/OriginalBalanceAction-YrvxBYAl.mjs.map +1 -0
  109. package/dist/RecurringSettings-kRqAViNn.mjs +89 -0
  110. package/dist/RecurringSettings-kRqAViNn.mjs.map +1 -0
  111. package/dist/RecurringTransactionsUtil-CHWmqvW5.mjs +299 -0
  112. package/dist/RecurringTransactionsUtil-CHWmqvW5.mjs.map +1 -0
  113. package/dist/ResponsiveButton-CC9F_Ezk.mjs +46 -0
  114. package/dist/ResponsiveButton-CC9F_Ezk.mjs.map +1 -0
  115. package/dist/SearchBox-Cpgu_gdO.mjs +51 -0
  116. package/dist/SearchBox-Cpgu_gdO.mjs.map +1 -0
  117. package/dist/Select-CSpkK5cR.mjs +62 -0
  118. package/dist/Select-CSpkK5cR.mjs.map +1 -0
  119. package/dist/SelectionBox-B4xELRgp.mjs +49 -0
  120. package/dist/SelectionBox-B4xELRgp.mjs.map +1 -0
  121. package/dist/SingleSegmentDonut-7Uy6VEld.mjs +70 -0
  122. package/dist/SingleSegmentDonut-7Uy6VEld.mjs.map +1 -0
  123. package/dist/Sizes-DISGrlUg.mjs +7 -0
  124. package/dist/Sizes-DISGrlUg.mjs.map +1 -0
  125. package/dist/SkeletonLoader-BaNboJjD.mjs +39 -0
  126. package/dist/SkeletonLoader-BaNboJjD.mjs.map +1 -0
  127. package/dist/SpendingData-Fii_xATx.mjs +54 -0
  128. package/dist/SpendingData-Fii_xATx.mjs.map +1 -0
  129. package/dist/SpendingLegend-CxvNOg3c.mjs +204 -0
  130. package/dist/SpendingLegend-CxvNOg3c.mjs.map +1 -0
  131. package/dist/StatusBar-CPfSXe80.mjs +31 -0
  132. package/dist/StatusBar-CPfSXe80.mjs.map +1 -0
  133. package/dist/TabContentContainer-B0eYJP5p.mjs +49 -0
  134. package/dist/TabContentContainer-B0eYJP5p.mjs.map +1 -0
  135. package/dist/ToggleListItem-Dl1lXNwj.mjs +92 -0
  136. package/dist/ToggleListItem-Dl1lXNwj.mjs.map +1 -0
  137. package/dist/TransactionDetails-roZ5xLq8.mjs +1708 -0
  138. package/dist/TransactionDetails-roZ5xLq8.mjs.map +1 -0
  139. package/dist/TransactionUtils-BphBJBbU.mjs +235 -0
  140. package/dist/TransactionUtils-BphBJBbU.mjs.map +1 -0
  141. package/dist/TrendsUtil-D9z3kIj_.mjs +70 -0
  142. package/dist/TrendsUtil-D9z3kIj_.mjs.map +1 -0
  143. package/dist/UserStore-BjnNCO5a.mjs +3121 -0
  144. package/dist/UserStore-BjnNCO5a.mjs.map +1 -0
  145. package/dist/ViewMoreMicroCard-fnwE0hqd.mjs +1280 -0
  146. package/dist/ViewMoreMicroCard-fnwE0hqd.mjs.map +1 -0
  147. package/dist/WidgetContainer-DJnp6t6c.mjs +483 -0
  148. package/dist/WidgetContainer-DJnp6t6c.mjs.map +1 -0
  149. package/dist/accounts/components/detailsdrawer/Accounts/AccountDetailsDrawer.d.ts +6 -0
  150. package/dist/accounts/index.d.ts +1 -0
  151. package/dist/accounts/index.es.js +784 -12
  152. package/dist/accounts/index.es.js.map +1 -0
  153. package/dist/analytics/index.es.js +140 -155
  154. package/dist/analytics/index.es.js.map +1 -0
  155. package/dist/budgets/index.es.js +1267 -1317
  156. package/dist/budgets/index.es.js.map +1 -0
  157. package/dist/cashflow/context/hooks.d.ts +7 -6
  158. package/dist/cashflow/index.es.js +944 -1076
  159. package/dist/cashflow/index.es.js.map +1 -0
  160. package/dist/categories/index.es.js +5 -4
  161. package/dist/categories/index.es.js.map +1 -0
  162. package/dist/common/components/DataRow.d.ts +1 -0
  163. package/dist/common/components/ListItemWrapper.d.ts +2 -1
  164. package/dist/common/constants/Analytics.d.ts +3 -0
  165. package/dist/common/index.es.js +310 -101
  166. package/dist/common/index.es.js.map +1 -0
  167. package/dist/core/index.es.js +105 -80
  168. package/dist/core/index.es.js.map +1 -0
  169. package/dist/core/stores/CashflowStore.d.ts +8 -7
  170. package/dist/core/stores/RecurringTransactionsStore.d.ts +53 -1
  171. package/dist/core/stores/TransactionStore.d.ts +1 -0
  172. package/dist/core/types/localization/RecurringCopy.d.ts +14 -1
  173. package/dist/core/types/localization/SpendingCopy.d.ts +1 -0
  174. package/dist/core/utils/AccountUtils.d.ts +8 -0
  175. package/dist/core/utils/DateUtil.d.ts +2 -0
  176. package/dist/core/utils/RecurringTransactionsUtil.d.ts +2 -1
  177. package/dist/dashboard/index.es.js +142 -185
  178. package/dist/dashboard/index.es.js.map +1 -0
  179. package/dist/debts/index.es.js +1273 -1384
  180. package/dist/debts/index.es.js.map +1 -0
  181. package/dist/finstrong/index.es.js +3473 -3367
  182. package/dist/finstrong/index.es.js.map +1 -0
  183. package/dist/goals/index.es.js +984 -1103
  184. package/dist/goals/index.es.js.map +1 -0
  185. package/dist/help/index.es.js +26 -3
  186. package/dist/help/index.es.js.map +1 -0
  187. package/dist/hooks-97sNJ_lf.mjs +78 -0
  188. package/dist/hooks-97sNJ_lf.mjs.map +1 -0
  189. package/dist/insights/components/insights/WeeklyNoSpendDays/BubbleWeek.d.ts +4 -1
  190. package/dist/insights/components/insights/WeeklyNoSpendDays/WeeklyNoSpendDays.d.ts +4 -2
  191. package/dist/insights/index.es.js +4871 -93
  192. package/dist/insights/index.es.js.map +1 -0
  193. package/dist/investments/index.es.js +1523 -1533
  194. package/dist/investments/index.es.js.map +1 -0
  195. package/dist/merchants/index.es.js +65 -75
  196. package/dist/merchants/index.es.js.map +1 -0
  197. package/dist/microinsights/index.es.js +826 -15
  198. package/dist/microinsights/index.es.js.map +1 -0
  199. package/dist/networth/index.es.js +504 -550
  200. package/dist/networth/index.es.js.map +1 -0
  201. package/dist/notifications/index.es.js +162 -169
  202. package/dist/notifications/index.es.js.map +1 -0
  203. package/dist/recurringtransactions/components/RecurringTransactionDetails.d.ts +3 -2
  204. package/dist/recurringtransactions/components/RecurringTransactionDetailsDrawer.d.ts +3 -0
  205. package/dist/recurringtransactions/components/RecurringTransactionList.d.ts +11 -0
  206. package/dist/recurringtransactions/components/UpcomingRecurrenceCard.d.ts +8 -0
  207. package/dist/recurringtransactions/components/actions/LinkTransactionDrawer.d.ts +10 -0
  208. package/dist/recurringtransactions/components/actions/MarkAsPaidDialog.d.ts +7 -0
  209. package/dist/recurringtransactions/components/actions/MarkAsUnpaidDialog.d.ts +7 -0
  210. package/dist/recurringtransactions/index.es.js +1012 -10
  211. package/dist/recurringtransactions/index.es.js.map +1 -0
  212. package/dist/settings/index.es.js +892 -13
  213. package/dist/settings/index.es.js.map +1 -0
  214. package/dist/spending/index.es.js +457 -400
  215. package/dist/spending/index.es.js.map +1 -0
  216. package/dist/transactions/components/shared/transactionlist/TransactionRow.d.ts +1 -0
  217. package/dist/transactions/index.es.js +604 -10
  218. package/dist/transactions/index.es.js.map +1 -0
  219. package/dist/trends/index.es.js +1408 -1268
  220. package/dist/trends/index.es.js.map +1 -0
  221. package/dist/useAccountDisplayName-BsiXA0qf.mjs +24 -0
  222. package/dist/useAccountDisplayName-BsiXA0qf.mjs.map +1 -0
  223. package/dist/useAriaLive-MkYebyUR.mjs +36 -0
  224. package/dist/useAriaLive-MkYebyUR.mjs.map +1 -0
  225. package/dist/useDimensions-CeDR9V8N.mjs +37 -0
  226. package/dist/useDimensions-CeDR9V8N.mjs.map +1 -0
  227. package/dist/useInsightsEnabled-D5Sdm0TJ.mjs +12 -0
  228. package/dist/useInsightsEnabled-D5Sdm0TJ.mjs.map +1 -0
  229. package/dist/useScreenSize-mWpmnh5w.mjs +37 -0
  230. package/dist/useScreenSize-mWpmnh5w.mjs.map +1 -0
  231. package/dist/useWidgetLoadTimer-B0tB-yzL.mjs +20 -0
  232. package/dist/useWidgetLoadTimer-B0tB-yzL.mjs.map +1 -0
  233. package/package.json +30 -30
  234. package/dist/Analytics-BKzTPees.mjs +0 -61
  235. package/dist/GlobalCopyApi-BeXzaDH9.mjs +0 -487
  236. package/dist/HeaderCell-EhCUSjvj.mjs +0 -10
  237. package/dist/Loader-BlVzRtUd.mjs +0 -73
  238. package/dist/MiniWidgetContainer-COwnjfy7.mjs +0 -110
  239. package/dist/OriginalBalanceAction-sbiqaxok.mjs +0 -110
  240. package/dist/SpendingLegend-D15ixlQ1.mjs +0 -222
  241. package/dist/accounts-DkyAiLpg.mjs +0 -15632
  242. package/dist/core-BexP5oiV.mjs +0 -4047
  243. package/dist/help-CctDYrAH.mjs +0 -2308
  244. package/dist/insights/components/insights/P2pCategorization/_tests_/P2pCategorizationMultipleTransaction.test.d.ts +0 -0
  245. package/dist/insights/components/insights/P2pCategorization/_tests_/P2pCategorizationSingleTransaction.test.d.ts +0 -0
  246. package/dist/microinsights-CRf3ChsJ.mjs +0 -1814
  247. package/dist/recurringtransactions-gbJ_NA8u.mjs +0 -1564
  248. package/dist/settings-ZMHe439l.mjs +0 -1526
@@ -7,19 +7,20 @@ export declare class CashflowStore {
7
7
  completeOnboarding: () => Promise<void>;
8
8
  }
9
9
  declare class UiStore {
10
+ globalStore: GlobalStore;
10
11
  dateRange: {
11
12
  start: Date;
12
13
  end: Date;
13
14
  };
14
15
  isDirty: boolean;
15
- nextIncome: Recurrence | undefined;
16
- upcomingExpenses: Recurrence[];
17
- selectedCashAccounts: Account[];
18
- constructor();
16
+ constructor(globalStore: GlobalStore);
17
+ get income(): Recurrence[];
18
+ get upcomingIncome(): Recurrence[];
19
+ get upcomingExpenses(): Recurrence[];
20
+ get nextIncome(): Recurrence | undefined;
21
+ get selectedCashAccounts(): Account[];
22
+ get selectedCashBalance(): number;
19
23
  get daysUntilNextIncome(): number;
20
24
  get expensesTilNextIncome(): Recurrence[];
21
- setNextIncome: (nextIncome: Recurrence) => void;
22
- setUpcomingExpenses: (expenses: Recurrence[]) => void;
23
- setSelectedCashAccounts: (accounts: Account[]) => Account[];
24
25
  }
25
26
  export {};
@@ -1,6 +1,11 @@
1
+ import { AlertProps } from '@mui/material';
1
2
  import { RepeatingTransactionsApi } from '../api';
2
- import { Recurrence, RepeatingTransaction, Transaction, DateRange } from '../types';
3
+ import { Recurrence, RecurringCopy, RepeatingTransaction, Transaction, DateRange } from '../types';
3
4
  import { GlobalStore } from './GlobalStore';
5
+ interface RecurringAlertProps {
6
+ message: string;
7
+ severity: AlertProps['severity'];
8
+ }
4
9
  export declare class RecurringTransactionsStore {
5
10
  globalStore: GlobalStore;
6
11
  api: RepeatingTransactionsApi;
@@ -8,8 +13,36 @@ export declare class RecurringTransactionsStore {
8
13
  isDataLoaded: boolean;
9
14
  selectedDay: Date | undefined;
10
15
  dateRange: DateRange;
16
+ selectedRepeatingTransactionGuid: string | null;
17
+ selectedRecurrence: Recurrence | null;
18
+ alert: RecurringAlertProps;
11
19
  constructor(globalStore: GlobalStore);
20
+ get copy(): RecurringCopy;
12
21
  get detailedRepeatingTransactions(): RepeatingTransaction[];
22
+ /**
23
+ * Returns all recurrences built from repeating transactions and filtered by
24
+ * accounts, scoped to the supplied date range. This is the range-parameterized
25
+ * core used by both the shared getters (which pass this.dateRange) and by
26
+ * consumers such as Cash Flow that need their own independent window without
27
+ * mutating the shared dateRange.
28
+ */
29
+ recurrencesForRange: (dateRange: DateRange) => Recurrence[];
30
+ /**
31
+ * Returns the upcoming expense recurrences scoped to the supplied date range.
32
+ */
33
+ upcomingExpensesForRange: (dateRange: DateRange) => Recurrence[];
34
+ /**
35
+ * Returns the income recurrences scoped to the supplied date range.
36
+ */
37
+ incomeForRange: (dateRange: DateRange) => Recurrence[];
38
+ /**
39
+ * Returns the upcoming income recurrences scoped to the supplied date range.
40
+ */
41
+ upcomingIncomeForRange: (dateRange: DateRange) => Recurrence[];
42
+ /**
43
+ * Returns the next upcoming income recurrence scoped to the supplied range.
44
+ */
45
+ nextIncomeForRange: (dateRange: DateRange) => Recurrence | undefined;
13
46
  /**
14
47
  * Returns all recurrences built from repeating transactions and filtered by accounts.
15
48
  */
@@ -80,6 +113,9 @@ export declare class RecurringTransactionsStore {
80
113
  * Get the recurrences for the currently selected day.
81
114
  */
82
115
  get selectedDayRecurrences(): Recurrence[] | undefined;
116
+ get selectedRepeatingTransaction(): RepeatingTransaction | undefined;
117
+ setSelectedRepeatingTransactionGuid: (guid: string | null) => string | null;
118
+ setSelectedRecurrence: (recurrence: Recurrence | null) => Recurrence | null;
83
119
  setRepeatingTransactions: (repeating: RepeatingTransaction[]) => void;
84
120
  /**
85
121
  * Set the date range for filtering recurrences.
@@ -112,4 +148,20 @@ export declare class RecurringTransactionsStore {
112
148
  * @param transaction - The repeating transaction to update.
113
149
  */
114
150
  updateRepeatingTransaction: (transaction: RepeatingTransaction) => Promise<void>;
151
+ /**
152
+ * Mark a recurrence as paid by linking a transaction to the repeating transaction.
153
+ * @param repeatingTransactionGuid - The GUID of the repeating transaction.
154
+ * @param transaction - The transaction to link.
155
+ */
156
+ markRecurrenceAsPaid: (repeatingTransactionGuid: string, transaction: Transaction) => Promise<void>;
157
+ /**
158
+ * Mark a recurrence as unpaid by unlinking the associated transaction from the repeating transaction.
159
+ * @param transaction - The transaction to unlink.
160
+ */
161
+ markRecurrenceAsUnpaid: (transaction: Transaction) => Promise<void>;
162
+ setAlert: (message: string, severity?: RecurringAlertProps["severity"]) => {
163
+ message: string;
164
+ severity: import('@mui/types').OverridableStringUnion<import('@mui/material').AlertColor, import('@mui/material').AlertPropsColorOverrides> | undefined;
165
+ };
115
166
  }
167
+ export {};
@@ -31,6 +31,7 @@ export declare class TransactionStore {
31
31
  transactionRules: TransactionRule[];
32
32
  transactionRulesLoaded: boolean;
33
33
  transactionRulesLoading: boolean;
34
+ transactionSplitting: boolean;
34
35
  cachedStartDate: Date;
35
36
  filter: TransactionFilter;
36
37
  isLoading: boolean;
@@ -50,8 +50,17 @@ export interface RecurringCopy {
50
50
  income_details: string;
51
51
  income_schedule: string;
52
52
  last_day_of_month: string;
53
+ link_transaction_button: string;
54
+ link_transaction_description: string;
55
+ link_transaction_error: string;
56
+ link_transaction_success: string;
53
57
  manage_expenses: string;
58
+ more_menu_aria: string;
54
59
  manage_income: string;
60
+ mark_as_paid_cta: string;
61
+ mark_as_paid_dialog_title: string;
62
+ mark_as_unpaid_cta: string;
63
+ mark_as_unpaid_dialog_title: string;
55
64
  mini_title: string;
56
65
  missed: string;
57
66
  missed_on: string;
@@ -63,8 +72,8 @@ export interface RecurringCopy {
63
72
  paid: string;
64
73
  paid_activity: string;
65
74
  paid_on: string;
66
- paid_transactions: string;
67
75
  past: string;
76
+ past_activity: string;
68
77
  past_transactions: string;
69
78
  payment_schedule: string;
70
79
  primary_cta: string;
@@ -93,6 +102,10 @@ export interface RecurringCopy {
93
102
  twice_a_month_ordinal: string;
94
103
  transaction_details_drawer_title: string;
95
104
  upcoming: string;
105
+ unlink_transaction_button: string;
106
+ unlink_transaction_description: string;
107
+ unlink_transaction_error: string;
108
+ unlink_transaction_success: string;
96
109
  upcoming_activity: string;
97
110
  upcoming_on: string;
98
111
  unknown: string;
@@ -1,5 +1,6 @@
1
1
  export interface SpendingCopy {
2
2
  by_category: string;
3
+ chart_description: string;
3
4
  close_drawer_aria: string;
4
5
  income_tab_title: string;
5
6
  mini_title: string;
@@ -1,5 +1,13 @@
1
1
  import { Account, DetailedAccount, Institution, Member } from '../';
2
2
  export declare const isAccountLiability: (account: Account) => boolean;
3
+ /**
4
+ * Returns the balance to use as an account's spendable / starting balance.
5
+ * For checking/savings accounts it uses available_balance when present and
6
+ * enabled via config, otherwise the current balance. All other account types
7
+ * use the current balance. Single source of truth shared by the Accounts,
8
+ * Financial Strength, and Cash Flow experiences.
9
+ */
10
+ export declare const getAccountStartingBalance: (account: Account, showAvailableBalance: boolean) => number;
3
11
  export declare const isManual: (account: Account) => boolean;
4
12
  export declare const usesCreditLimitField: (account: Account) => boolean;
5
13
  export declare const usesInterestRateField: (account: Account) => boolean;
@@ -1,5 +1,7 @@
1
1
  export declare const getNextWeeklyDate: (date: Date) => Date;
2
2
  export declare const getNextBiWeeklyDate: (date: Date) => Date;
3
+ export declare const getTwiceMonthlyDates: (day1: number, day2: number) => Date[];
4
+ export declare const getNextTwiceMonthlyDate: (day1: number, day2: number) => Date;
3
5
  export declare const getNextMonthlyDate: (date: Date) => Date;
4
6
  export declare const getNextBiMonthlyDate: (date: Date) => Date;
5
7
  export declare const getNextQuarterlyDate: (date: Date) => Date;
@@ -9,4 +9,5 @@ export declare const buildAllRecurrences: (repeatingTransactions: RepeatingTrans
9
9
  export declare const augmentRepeatingTransactions: (accounts: Account[], repeatingTransactions: RepeatingTransaction[], transactions: Transaction[]) => RepeatingTransaction[];
10
10
  export declare const groupRecurrencesByDate: (recurrences: Recurrence[]) => GroupedRecurrence[];
11
11
  export declare const getFrequencyLabel: (copy: RecurringCopy, repeatingTransaction: RepeatingTransaction, showOrdinal: boolean) => string;
12
- export declare const getNextPaymentDate: (frequency: Frequency, date: Date, recurrenceDay?: number) => Date;
12
+ export declare const getNextPaymentDate: (frequency: Frequency, date: Date, recurrenceDay?: number, secondRecurrenceDay?: number) => Date;
13
+ export declare const getNextUpcomingDate: (recurringTransaction: RepeatingTransaction, recurrences: Recurrence[]) => Date;
@@ -1,198 +1,155 @@
1
- import { Hn as y, Kn as S, mr as x } from "../accounts-DkyAiLpg.mjs";
2
- import { n as M } from "../Analytics-BKzTPees.mjs";
3
- import { i as C, m as v, p as b } from "../Loader-BlVzRtUd.mjs";
4
- import i from "react";
5
- import { observer as u } from "mobx-react-lite";
6
- import a from "@mui/material/Stack";
7
- import { H2 as D, Icon as _, P as z } from "@mxenabled/mxui";
8
- import G from "@mui/material/Button";
9
- import W from "@mui/material/Paper";
10
1
  import { jsx as e, jsxs as c } from "react/jsx-runtime";
11
- import { useTheme as k } from "@mui/material/styles";
12
- import A from "@mui/material/Box";
2
+ import o from "react";
3
+ import { observer as p } from "mobx-react-lite";
4
+ import u from "@mui/material/Grid";
5
+ import m from "@mui/material/Skeleton";
6
+ import s from "@mui/material/Stack";
7
+ import { useTheme as S } from "@mui/material/styles";
8
+ import { e as w, u as b, i as v } from "../hooks-97sNJ_lf.mjs";
9
+ import C from "@mui/material/Paper";
10
+ import { Icon as _, H2 as M, P as D } from "@mxenabled/mxui";
11
+ import { useMediaQuery as G } from "@mui/system";
12
+ import z from "@mui/material/Box";
13
+ import W from "@mui/material/Button";
14
+ import k from "@mui/material/IconButton";
15
+ import A from "@mui/material/Tooltip";
13
16
  import I from "@mui/material/useMediaQuery";
14
- import B from "@mui/material/IconButton";
15
- import F from "@mui/material/Tooltip";
16
- import l from "@mui/material/Skeleton";
17
- import { useMediaQuery as R } from "@mui/system";
18
- import m from "@mui/material/Grid";
19
- var j = u(() => {
20
- const t = k(), { appDataStore: { banner: n, loadBanner: s, user: o } } = v();
21
- return i.useEffect(() => {
22
- s().finally();
23
- }, [o]), n?.image_url ? /* @__PURE__ */ e(a, {
24
- sx: {
25
- alignItems: "center",
26
- width: "100%",
27
- mb: 24
28
- },
29
- children: /* @__PURE__ */ e("a", {
30
- href: n?.redirect_url,
31
- rel: "noreferrer",
32
- style: { width: "100%" },
33
- target: "_blank",
34
- children: /* @__PURE__ */ e("img", {
35
- alt: "",
36
- src: n.image_url,
37
- style: {
38
- width: "100%",
39
- height: "auto",
40
- border: `1px solid ${t.palette.grey[300]}`
17
+ import { G as B } from "../GlobalAccountFilter-BhzR5Vb1.mjs";
18
+ import { u as y } from "../useScreenSize-mWpmnh5w.mjs";
19
+ import { C as F } from "../ConnectDrawer-CW4LA3H3.mjs";
20
+ import { u as R } from "../useWidgetLoadTimer-B0tB-yzL.mjs";
21
+ const T = p(() => {
22
+ const t = S(), {
23
+ appDataStore: { banner: r, loadBanner: i, user: a }
24
+ } = w();
25
+ return o.useEffect(() => {
26
+ i().finally();
27
+ }, [a]), r?.image_url ? /* @__PURE__ */ e(
28
+ s,
29
+ {
30
+ sx: {
31
+ alignItems: "center",
32
+ width: "100%",
33
+ mb: 24
34
+ },
35
+ children: /* @__PURE__ */ e(
36
+ "a",
37
+ {
38
+ href: r?.redirect_url,
39
+ rel: "noreferrer",
40
+ style: {
41
+ width: "100%"
42
+ },
43
+ target: "_blank",
44
+ children: /* @__PURE__ */ e(
45
+ "img",
46
+ {
47
+ alt: "",
48
+ src: r.image_url,
49
+ style: {
50
+ width: "100%",
51
+ height: "auto",
52
+ border: `1px solid ${t.palette.grey[300]}`
53
+ }
54
+ }
55
+ )
41
56
  }
42
- })
43
- })
44
- }) : null;
45
- }), H = ({ handleConnectClick: t }) => {
46
- const { common: n } = b();
47
- return /* @__PURE__ */ e(A, { children: I("(max-width: 700px)") ? /* @__PURE__ */ e(F, {
48
- id: "add-accounts",
49
- placement: "bottom",
50
- title: n.add_accounts,
51
- children: /* @__PURE__ */ e(B, {
57
+ )
58
+ }
59
+ ) : null;
60
+ }), $ = ({ handleConnectClick: t }) => {
61
+ const { common: r } = b(), i = I("(max-width: 700px)");
62
+ return /* @__PURE__ */ e(z, { children: i ? /* @__PURE__ */ e(A, { id: "add-accounts", placement: "bottom", title: r.add_accounts, children: /* @__PURE__ */ e(
63
+ k,
64
+ {
52
65
  "aria-controls": "add_accounts",
53
66
  "aria-describedby": "add-accounts",
54
67
  "aria-haspopup": !0,
55
- "aria-label": n.add_accounts,
68
+ "aria-label": r.add_accounts,
56
69
  color: "primary",
57
70
  onClick: t,
58
- children: /* @__PURE__ */ e(_, {
59
- name: "add",
60
- size: 24
61
- })
62
- })
63
- }) : /* @__PURE__ */ e(G, {
64
- "aria-controls": "add_accounts",
65
- "aria-haspopup": !0,
66
- "aria-label": n.add_accounts,
67
- onClick: t,
68
- startIcon: /* @__PURE__ */ e(_, {
69
- name: "add",
70
- size: 24
71
- }),
72
- sx: {
73
- p: 12,
74
- whiteSpace: "nowrap",
75
- minWidth: "max-content"
76
- },
77
- variant: "text",
78
- children: n.add_accounts
79
- }) });
80
- }, Q = u(H), T = () => {
81
- const [t, n] = i.useState(!1), s = R("(max-width:320px)"), { common: o, connect: h } = b(), { config: d } = C(), { isMobile: p } = x(), g = () => {
82
- const r = (/* @__PURE__ */ new Date()).getHours();
83
- return r > 1 && r < 12 ? o.good_morning : r >= 12 && r < 18 ? o.good_afternoon : o.good_evening;
71
+ children: /* @__PURE__ */ e(_, { name: "add", size: 24 })
72
+ }
73
+ ) }) : /* @__PURE__ */ e(
74
+ W,
75
+ {
76
+ "aria-controls": "add_accounts",
77
+ "aria-haspopup": !0,
78
+ "aria-label": r.add_accounts,
79
+ onClick: t,
80
+ startIcon: /* @__PURE__ */ e(_, { name: "add", size: 24 }),
81
+ sx: {
82
+ p: 12,
83
+ whiteSpace: "nowrap",
84
+ minWidth: "max-content"
85
+ },
86
+ variant: "text",
87
+ children: r.add_accounts
88
+ }
89
+ ) });
90
+ }, j = p($), Q = () => {
91
+ const [t, r] = o.useState(!1), i = G("(max-width:320px)"), { common: a, connect: g } = b(), { config: d } = v(), { isMobile: f } = y(), x = () => {
92
+ const l = (/* @__PURE__ */ new Date()).getHours();
93
+ return l > 1 && l < 12 ? a.good_morning : l >= 12 && l < 18 ? a.good_afternoon : a.good_evening;
84
94
  };
85
- return /* @__PURE__ */ c(i.Fragment, { children: [/* @__PURE__ */ e(W, {
86
- sx: {
87
- gap: 12,
88
- mb: p ? 24 : 0,
89
- p: 24
90
- },
91
- children: /* @__PURE__ */ c(a, {
92
- alignItems: "center",
93
- flexDirection: "row",
94
- justifyContent: "space-between",
95
- children: [/* @__PURE__ */ c(a, { children: [/* @__PURE__ */ e(D, {
96
- variant: s ? "h2" : "h1",
97
- children: g()
98
- }), /* @__PURE__ */ e(z, {
99
- color: "text.secondary",
100
- children: o.heres_your_spending_overview
101
- })] }), /* @__PURE__ */ c(a, {
102
- flexDirection: "row",
103
- children: [d.show_connections_widget_in_master && /* @__PURE__ */ e(Q, { handleConnectClick: () => n(!0) }), /* @__PURE__ */ e(S, {})]
104
- })]
105
- })
106
- }), t && /* @__PURE__ */ e(y, {
107
- onClose: () => n(!1),
108
- showConnectWidget: t,
109
- title: h.mini_title
110
- })] });
111
- }, P = u(T), f = /* @__PURE__ */ (function(t) {
112
- return t[t.Main = 0] = "Main", t[t.RightSide = 1] = "RightSide", t[t.Disabled = 2] = "Disabled", t;
113
- })({}), $ = ({ widgets: t, isLoading: n }) => {
114
- const { isDesktop: s, isMobile: o } = x(), { copyStore: h } = v();
115
- M({
95
+ return /* @__PURE__ */ c(o.Fragment, { children: [
96
+ /* @__PURE__ */ e(C, { sx: { gap: 12, mb: f ? 24 : 0, p: 24 }, children: /* @__PURE__ */ c(s, { alignItems: "center", flexDirection: "row", justifyContent: "space-between", children: [
97
+ /* @__PURE__ */ c(s, { children: [
98
+ /* @__PURE__ */ e(M, { variant: i ? "h2" : "h1", children: x() }),
99
+ /* @__PURE__ */ e(D, { color: "text.secondary", children: a.heres_your_spending_overview })
100
+ ] }),
101
+ /* @__PURE__ */ c(s, { flexDirection: "row", children: [
102
+ d.show_connections_widget_in_master && /* @__PURE__ */ e(j, { handleConnectClick: () => r(!0) }),
103
+ /* @__PURE__ */ e(B, {})
104
+ ] })
105
+ ] }) }),
106
+ t && /* @__PURE__ */ e(
107
+ F,
108
+ {
109
+ onClose: () => r(!1),
110
+ showConnectWidget: t,
111
+ title: g.mini_title
112
+ }
113
+ )
114
+ ] });
115
+ }, H = p(Q);
116
+ var h = /* @__PURE__ */ ((t) => (t[t.Main = 0] = "Main", t[t.RightSide = 1] = "RightSide", t[t.Disabled = 2] = "Disabled", t))(h || {});
117
+ const P = ({ widgets: t, isLoading: r }) => {
118
+ const { isDesktop: i, isMobile: a } = y(), { copyStore: g } = w();
119
+ R({
116
120
  widgetName: "Dashboard",
117
- isLoaded: !n
118
- });
119
- const d = i.useMemo(() => t.filter((r) => r.location !== f.Disabled).sort((r, w) => r.index - w.index), [t]), p = i.useMemo(() => d.filter((r) => r.location === f.Main), [d]), g = i.useMemo(() => d.filter((r) => r.location === f.RightSide), [d]);
120
- return /* @__PURE__ */ c(m, {
121
- container: !0,
122
- spacing: o ? 0 : 24,
123
- children: [
124
- /* @__PURE__ */ e(m, {
125
- size: 12,
126
- sx: { pt: 16 },
127
- children: h.isInitialized && /* @__PURE__ */ e(P, {})
128
- }),
129
- /* @__PURE__ */ c(m, {
130
- size: {
131
- xs: 12,
132
- lg: 8
133
- },
134
- children: [
135
- /* @__PURE__ */ e(j, {}),
136
- n && /* @__PURE__ */ c(a, {
137
- direction: "column",
138
- spacing: 24,
139
- children: [
140
- /* @__PURE__ */ e(l, {
141
- height: 100,
142
- variant: "rounded",
143
- width: "100%"
144
- }),
145
- /* @__PURE__ */ e(l, {
146
- height: 300,
147
- variant: "rounded",
148
- width: "100%"
149
- }),
150
- /* @__PURE__ */ e(l, {
151
- height: 300,
152
- variant: "rounded",
153
- width: "100%"
154
- })
155
- ]
156
- }),
157
- !n && /* @__PURE__ */ e(a, {
158
- direction: "column",
159
- spacing: 24,
160
- children: s ? p.map((r) => /* @__PURE__ */ e(i.Fragment, { children: r.component }, r.index)) : d.map((r) => /* @__PURE__ */ e(i.Fragment, { children: r.component }, r.index))
161
- })
162
- ]
163
- }),
164
- s && /* @__PURE__ */ e(m, {
165
- size: { lg: 4 },
166
- children: n ? /* @__PURE__ */ c(a, {
167
- direction: "column",
168
- spacing: 24,
169
- children: [
170
- /* @__PURE__ */ e(l, {
171
- height: 200,
172
- variant: "rounded",
173
- width: "100%"
174
- }),
175
- /* @__PURE__ */ e(l, {
176
- height: 100,
177
- variant: "rounded",
178
- width: "100%"
179
- }),
180
- /* @__PURE__ */ e(l, {
181
- height: 300,
182
- variant: "rounded",
183
- width: "100%"
184
- })
185
- ]
186
- }) : /* @__PURE__ */ e(a, {
187
- direction: "column",
188
- spacing: 24,
189
- children: g.map((r) => /* @__PURE__ */ e(i.Fragment, { children: r.component }, r.index))
190
- })
191
- })
192
- ]
121
+ isLoaded: !r
193
122
  });
194
- }, ae = u($);
123
+ const d = o.useMemo(
124
+ () => t.filter((n) => n.location !== h.Disabled).sort((n, l) => n.index - l.index),
125
+ [t]
126
+ ), f = o.useMemo(
127
+ () => d.filter((n) => n.location === h.Main),
128
+ [d]
129
+ ), x = o.useMemo(
130
+ () => d.filter((n) => n.location === h.RightSide),
131
+ [d]
132
+ );
133
+ return /* @__PURE__ */ c(u, { container: !0, spacing: a ? 0 : 24, children: [
134
+ /* @__PURE__ */ e(u, { size: 12, sx: { pt: 16 }, children: g.isInitialized && /* @__PURE__ */ e(H, {}) }),
135
+ /* @__PURE__ */ c(u, { size: { xs: 12, lg: 8 }, children: [
136
+ /* @__PURE__ */ e(T, {}),
137
+ r && /* @__PURE__ */ c(s, { direction: "column", spacing: 24, children: [
138
+ /* @__PURE__ */ e(m, { height: 100, variant: "rounded", width: "100%" }),
139
+ /* @__PURE__ */ e(m, { height: 300, variant: "rounded", width: "100%" }),
140
+ /* @__PURE__ */ e(m, { height: 300, variant: "rounded", width: "100%" })
141
+ ] }),
142
+ !r && /* @__PURE__ */ e(s, { direction: "column", spacing: 24, children: i ? f.map((n) => /* @__PURE__ */ e(o.Fragment, { children: n.component }, n.index)) : d.map((n) => /* @__PURE__ */ e(o.Fragment, { children: n.component }, n.index)) })
143
+ ] }),
144
+ i && /* @__PURE__ */ e(u, { size: { lg: 4 }, children: r ? /* @__PURE__ */ c(s, { direction: "column", spacing: 24, children: [
145
+ /* @__PURE__ */ e(m, { height: 200, variant: "rounded", width: "100%" }),
146
+ /* @__PURE__ */ e(m, { height: 100, variant: "rounded", width: "100%" }),
147
+ /* @__PURE__ */ e(m, { height: 300, variant: "rounded", width: "100%" })
148
+ ] }) : /* @__PURE__ */ e(s, { direction: "column", spacing: 24, children: x.map((n) => /* @__PURE__ */ e(o.Fragment, { children: n.component }, n.index)) }) })
149
+ ] });
150
+ }, se = p(P);
195
151
  export {
196
- ae as Dashboard,
197
- f as DashboardLocation
152
+ se as Dashboard,
153
+ h as DashboardLocation
198
154
  };
155
+ //# sourceMappingURL=index.es.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.es.js","sources":["../../src/common/components/Banner.tsx","../../src/common/components/addaccounts/AddAccounts.tsx","../../src/dashboard/Greeting.tsx","../../src/dashboard/constants/Dashboard.ts","../../src/dashboard/Dashboard.tsx"],"sourcesContent":["import React from 'react'\nimport { observer } from 'mobx-react-lite'\n\nimport { useTheme } from '@mui/material/styles'\nimport Stack from '@mui/material/Stack'\n\nimport { useGlobalStore } from '..'\n\nexport const Banner = observer(() => {\n const theme = useTheme()\n const {\n appDataStore: { banner, loadBanner, user },\n } = useGlobalStore()\n\n React.useEffect(() => {\n loadBanner().finally()\n }, [user])\n\n if (!banner?.image_url) {\n return null\n }\n\n return (\n <Stack\n sx={{\n alignItems: 'center',\n width: '100%',\n mb: 24,\n }}\n >\n <a\n href={banner?.redirect_url}\n rel=\"noreferrer\"\n style={{\n width: '100%',\n }}\n target=\"_blank\"\n >\n <img\n alt=\"\"\n src={banner.image_url}\n style={{\n width: '100%',\n height: 'auto',\n border: `1px solid ${theme.palette.grey['300']}`,\n }}\n />\n </a>\n </Stack>\n )\n})\n","import { observer } from 'mobx-react-lite'\n\nimport Box from '@mui/material/Box'\nimport Button from '@mui/material/Button'\nimport IconButton from '@mui/material/IconButton'\nimport Tooltip from '@mui/material/Tooltip'\nimport useMediaQuery from '@mui/material/useMediaQuery'\n\nimport { Icon } from '@mxenabled/mxui'\n\nimport { useGlobalCopyStore } from '../../../common'\n\ninterface AddAccountsProps {\n handleConnectClick: () => void\n}\n\nconst AddAccounts = ({ handleConnectClick }: AddAccountsProps) => {\n const { common: copy } = useGlobalCopyStore()\n const isSmallerThan700 = useMediaQuery('(max-width: 700px)')\n\n return (\n <Box>\n {isSmallerThan700 ? (\n <Tooltip id=\"add-accounts\" placement=\"bottom\" title={copy.add_accounts}>\n <IconButton\n aria-controls=\"add_accounts\"\n aria-describedby=\"add-accounts\"\n aria-haspopup={true}\n aria-label={copy.add_accounts}\n color=\"primary\"\n onClick={handleConnectClick}\n >\n <Icon name=\"add\" size={24} />\n </IconButton>\n </Tooltip>\n ) : (\n <Button\n aria-controls=\"add_accounts\"\n aria-haspopup={true}\n aria-label={copy.add_accounts}\n onClick={handleConnectClick}\n startIcon={<Icon name=\"add\" size={24} />}\n sx={{\n p: 12,\n whiteSpace: 'nowrap',\n minWidth: 'max-content',\n }}\n variant=\"text\"\n >\n {copy.add_accounts}\n </Button>\n )}\n </Box>\n )\n}\n\nexport default observer(AddAccounts)\n","import React from 'react'\nimport { observer } from 'mobx-react-lite'\n\nimport Stack from '@mui/material/Stack'\nimport Paper from '@mui/material/Paper'\n\nimport { H2, P } from '@mxenabled/mxui'\nimport { useMediaQuery } from '@mui/system'\n\nimport { ConnectDrawer, useAppConfig, useGlobalCopyStore, useScreenSize } from '../common'\n\nimport AddAccounts from '../common/components/addaccounts/AddAccounts'\nimport { GlobalAccountFilter } from '../common/components/GlobalAccountFilter'\n\nconst Greeting = () => {\n const [showConnectWidget, setShowConnectWidget] = React.useState(false)\n\n const isSmallMobileDevice = useMediaQuery('(max-width:320px)')\n\n const { common: commonCopy, connect: connectCopy } = useGlobalCopyStore()\n const { config } = useAppConfig()\n const { isMobile } = useScreenSize()\n\n const getGreeting = () => {\n const now = new Date()\n const hour = now.getHours()\n\n if (hour > 1 && hour < 12) {\n return commonCopy.good_morning\n } else if (hour >= 12 && hour < 18) {\n return commonCopy.good_afternoon\n } else {\n return commonCopy.good_evening\n }\n }\n\n return (\n <React.Fragment>\n <Paper sx={{ gap: 12, mb: isMobile ? 24 : 0, p: 24 }}>\n <Stack alignItems=\"center\" flexDirection=\"row\" justifyContent=\"space-between\">\n <Stack>\n <H2 variant={isSmallMobileDevice ? 'h2' : 'h1'}>{getGreeting()}</H2>\n <P color=\"text.secondary\">{commonCopy.heres_your_spending_overview}</P>\n </Stack>\n <Stack flexDirection=\"row\">\n {config.show_connections_widget_in_master && (\n <AddAccounts handleConnectClick={() => setShowConnectWidget(true)} />\n )}\n <GlobalAccountFilter />\n </Stack>\n </Stack>\n </Paper>\n {showConnectWidget && (\n <ConnectDrawer\n onClose={() => setShowConnectWidget(false)}\n showConnectWidget={showConnectWidget}\n title={connectCopy.mini_title}\n />\n )}\n </React.Fragment>\n )\n}\n\nexport default observer(Greeting)\n","export enum DashboardLocation {\n Main = 0,\n RightSide = 1,\n Disabled = 2,\n}\n","import React from 'react'\nimport { observer } from 'mobx-react-lite'\n\nimport Grid from '@mui/material/Grid'\nimport Skeleton from '@mui/material/Skeleton'\nimport Stack from '@mui/material/Stack'\n\nimport { useGlobalStore, useScreenSize, useWidgetLoadTimer } from '../common'\n\nimport { Banner } from '../common/components/Banner'\n\nimport Greeting from './Greeting'\nimport { DashboardLocation } from './constants/Dashboard'\nimport type { DashboardWidget } from './types/DashboardTypes'\n\nexport interface DashboardProps {\n widgets: DashboardWidget[]\n isLoading: boolean\n}\n\nconst Dashboard: React.FC<DashboardProps> = ({ widgets, isLoading }) => {\n const { isDesktop, isMobile } = useScreenSize()\n const { copyStore } = useGlobalStore()\n\n useWidgetLoadTimer({\n widgetName: 'Dashboard',\n isLoaded: !isLoading,\n })\n\n const sortedWidgets = React.useMemo(\n () =>\n widgets\n .filter((widget) => widget.location !== DashboardLocation.Disabled)\n .sort((w1, w2) => w1.index - w2.index),\n [widgets],\n )\n\n const mainWidgets = React.useMemo(\n () => sortedWidgets.filter((widget) => widget.location === DashboardLocation.Main),\n [sortedWidgets],\n )\n\n const sideWidgets = React.useMemo(\n () => sortedWidgets.filter((widget) => widget.location === DashboardLocation.RightSide),\n [sortedWidgets],\n )\n\n return (\n <Grid container={true} spacing={isMobile ? 0 : 24}>\n <Grid size={12} sx={{ pt: 16 }}>\n {copyStore.isInitialized && <Greeting />}\n </Grid>\n\n {/* Main Column */}\n <Grid size={{ xs: 12, lg: 8 }}>\n <Banner />\n {isLoading && (\n <Stack direction=\"column\" spacing={24}>\n <Skeleton height={100} variant=\"rounded\" width=\"100%\" />\n <Skeleton height={300} variant=\"rounded\" width=\"100%\" />\n <Skeleton height={300} variant=\"rounded\" width=\"100%\" />\n </Stack>\n )}\n {!isLoading && (\n <Stack direction=\"column\" spacing={24}>\n {isDesktop\n ? mainWidgets.map((widget) => (\n <React.Fragment key={widget.index}>{widget.component}</React.Fragment>\n ))\n : sortedWidgets.map((widget) => (\n <React.Fragment key={widget.index}>{widget.component}</React.Fragment>\n ))}\n </Stack>\n )}\n </Grid>\n\n {/* Right Column */}\n {isDesktop && (\n <Grid size={{ lg: 4 }}>\n {isLoading ? (\n <Stack direction=\"column\" spacing={24}>\n <Skeleton height={200} variant=\"rounded\" width=\"100%\" />\n <Skeleton height={100} variant=\"rounded\" width=\"100%\" />\n <Skeleton height={300} variant=\"rounded\" width=\"100%\" />\n </Stack>\n ) : (\n <Stack direction=\"column\" spacing={24}>\n {sideWidgets.map((widget) => (\n <React.Fragment key={widget.index}>{widget.component}</React.Fragment>\n ))}\n </Stack>\n )}\n </Grid>\n )}\n </Grid>\n )\n}\n\nexport default observer(Dashboard)\n"],"names":["Banner","observer","theme","useTheme","banner","loadBanner","user","useGlobalStore","React","jsx","Stack","AddAccounts","handleConnectClick","copy","useGlobalCopyStore","isSmallerThan700","useMediaQuery","Box","Tooltip","IconButton","Icon","Button","AddAccounts$1","Greeting","showConnectWidget","setShowConnectWidget","isSmallMobileDevice","commonCopy","connectCopy","config","useAppConfig","isMobile","useScreenSize","getGreeting","hour","jsxs","Paper","H2","P","GlobalAccountFilter","ConnectDrawer","Greeting$1","DashboardLocation","Dashboard","widgets","isLoading","isDesktop","copyStore","useWidgetLoadTimer","sortedWidgets","widget","w1","w2","mainWidgets","sideWidgets","Grid","Skeleton","Dashboard_default"],"mappings":"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"}