@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
@@ -0,0 +1,299 @@
1
+ import { addDays as N } from "date-fns/addDays";
2
+ import { addMonths as l } from "date-fns/addMonths";
3
+ import { addQuarters as A } from "date-fns/addQuarters";
4
+ import { addWeeks as x } from "date-fns/addWeeks";
5
+ import { addYears as I } from "date-fns/addYears";
6
+ import { differenceInDays as $ } from "date-fns/differenceInDays";
7
+ import { formatISO as K } from "date-fns/formatISO";
8
+ import { fromUnixTime as C } from "date-fns/fromUnixTime";
9
+ import { getUnixTime as y } from "date-fns/getUnixTime";
10
+ import { isAfter as D } from "date-fns/isAfter";
11
+ import { isBefore as d } from "date-fns/isBefore";
12
+ import { isSameDay as H } from "date-fns/isSameDay";
13
+ import { lastDayOfMonth as j } from "date-fns/lastDayOfMonth";
14
+ import { nextDay as b } from "date-fns/nextDay";
15
+ import { parseISO as U } from "date-fns/parseISO";
16
+ import { setDate as k } from "date-fns/setDate";
17
+ import { setDay as z } from "date-fns/setDay";
18
+ import { setDayOfYear as B } from "date-fns/setDayOfYear";
19
+ import { startOfToday as E } from "date-fns/startOfToday";
20
+ import { subDays as Q } from "date-fns/subDays";
21
+ import { subMonths as J } from "date-fns/subMonths";
22
+ import { subQuarters as G } from "date-fns/subQuarters";
23
+ import { subWeeks as V } from "date-fns/subWeeks";
24
+ import { subYears as X } from "date-fns/subYears";
25
+ import { g as Z, a as q, b as F, c as R, d as T, e as ee, f as te, h as re, i as se } from "./DateUtil-CzBmbjmA.mjs";
26
+ import { b as Y } from "./NumberFormatting--XMeeBfr.mjs";
27
+ import { b as f } from "./Localization-DnoVyBNK.mjs";
28
+ import { f as M, D as O } from "./DateFormats-HudZ3Bjs.mjs";
29
+ var c = /* @__PURE__ */ ((e) => (e[e.Unknown = 0] = "Unknown", e[e.EveryWeek = 1] = "EveryWeek", e[e.EveryOtherWeek = 2] = "EveryOtherWeek", e[e.EveryMonth = 3] = "EveryMonth", e[e.EveryOtherMonth = 4] = "EveryOtherMonth", e[e.EveryQuarter = 5] = "EveryQuarter", e[e.EveryOtherQuarter = 6] = "EveryOtherQuarter", e[e.EveryYear = 7] = "EveryYear", e[e.TwiceAMonth = 8] = "TwiceAMonth", e))(c || {}), _ = /* @__PURE__ */ ((e) => (e[e.Paid = 0] = "Paid", e[e.Missed = 1] = "Missed", e[e.Upcoming = 2] = "Upcoming", e))(_ || {}), g = /* @__PURE__ */ ((e) => (e[e.Expense = 0] = "Expense", e[e.Income = 1] = "Income", e))(g || {}), P = /* @__PURE__ */ ((e) => (e[e.Unknown = 0] = "Unknown", e[e.Subscription = 1] = "Subscription", e[e.Bill = 2] = "Bill", e[e.Income = 3] = "Income", e[e.Transfer = 4] = "Transfer", e))(P || {});
30
+ const ae = (e) => {
31
+ if (!e) return "";
32
+ let a = e.user_name || e.feed_name || "";
33
+ return e.account_number && (a = `${a} *${e.account_number}`), a;
34
+ }, oe = (e, a) => {
35
+ const r = [], o = e.recurrence_type === c.EveryYear, t = e.transactions.find(
36
+ (m) => m.repeating_transaction_guid === e.guid
37
+ );
38
+ if (!o && !t) return [];
39
+ const s = U(e.predicted_occurs_on), i = {
40
+ accountGuid: e.account?.guid || "",
41
+ amount: e.amount,
42
+ categoryGuid: t?.category_guid || "",
43
+ expectedDate: s,
44
+ frequency: e.recurrence_type,
45
+ institutionGuid: e.account?.institution_guid || "",
46
+ institutionName: ae(e.account),
47
+ merchantGuid: e.merchant_guid,
48
+ name: e.description,
49
+ recurrenceDay: e.recurrence_day,
50
+ repeatingTransactionGuid: e.guid,
51
+ secondRecurrenceDay: e.second_recurrence_day,
52
+ status: _.Upcoming,
53
+ type: e.repeating_transaction_type === P.Income ? g.Income : g.Expense,
54
+ transaction: void 0
55
+ }, n = a.start, u = a.end;
56
+ switch (e.recurrence_type) {
57
+ case c.EveryWeek:
58
+ r.push(...ne(i, n, u));
59
+ break;
60
+ case c.EveryOtherWeek:
61
+ r.push(...ce(i, n, u));
62
+ break;
63
+ case c.TwiceAMonth:
64
+ r.push(...ie(i, n, u));
65
+ break;
66
+ case c.EveryMonth:
67
+ r.push(...de(i, n, u));
68
+ break;
69
+ case c.EveryOtherMonth:
70
+ r.push(...ue(i, n, u));
71
+ break;
72
+ case c.EveryQuarter:
73
+ r.push(...me(i, n, u));
74
+ break;
75
+ case c.EveryOtherQuarter:
76
+ r.push(...he(i, n, u));
77
+ break;
78
+ case c.EveryYear:
79
+ r.push(...le(i, n, u));
80
+ break;
81
+ }
82
+ const v = /* @__PURE__ */ new Set();
83
+ for (const m of r) {
84
+ const w = e.transactions.filter(
85
+ (h) => h.repeating_transaction_guid === e.guid && !v.has(h.guid)
86
+ ), p = w.find(
87
+ (h) => h.date > y(Q(m.expectedDate, 5)) && h.date < y(N(m.expectedDate, 5))
88
+ ) || (d(m.expectedDate, E()) ? w.reduce((h, W) => {
89
+ const S = Math.abs(W.date - y(m.expectedDate)), L = h ? Math.abs(h.date - y(m.expectedDate)) : 1 / 0;
90
+ return S < L ? W : h;
91
+ }, void 0) : void 0);
92
+ p ? (v.add(p.guid), m.transaction = p, m.status = _.Paid, m.occurredOnDate = C(p.date)) : d(m.expectedDate, Q(E(), 3)) && (m.status = _.Missed);
93
+ }
94
+ return r;
95
+ }, ne = (e, a, r) => {
96
+ const o = [];
97
+ let t = b(a, e.recurrenceDay);
98
+ for (; d(t, r); )
99
+ o.push({ ...e, expectedDate: t }), t = b(t, e.recurrenceDay);
100
+ return o;
101
+ }, ce = (e, a, r) => {
102
+ const o = [];
103
+ let t = e.expectedDate;
104
+ if (d(t, a))
105
+ for (; d(t, a); )
106
+ t = x(t, 2);
107
+ else {
108
+ for (; D(t, a) || H(t, a); )
109
+ t = V(t, 2);
110
+ t = x(t, 2);
111
+ }
112
+ for (; d(t, r); )
113
+ o.push({ ...e, expectedDate: t }), t = N(t, 14);
114
+ return o;
115
+ }, ie = (e, a, r) => {
116
+ const o = [];
117
+ let t = k(a, e.recurrenceDay);
118
+ for (; d(t, r); )
119
+ o.push({ ...e, expectedDate: t }), t = l(t, 1);
120
+ let s = e.secondRecurrenceDay && e.secondRecurrenceDay < 28 ? k(a, e.secondRecurrenceDay) : j(a);
121
+ for (; d(s, r); )
122
+ o.push({ ...e, expectedDate: s }), s = l(s, 1);
123
+ return o;
124
+ }, de = (e, a, r) => {
125
+ const o = [];
126
+ let t = k(a, e.recurrenceDay);
127
+ for (o.push({ ...e, expectedDate: t }), t = l(t, 1); d(t, r); )
128
+ o.push({ ...e, expectedDate: t }), t = l(t, 1);
129
+ return o;
130
+ }, ue = (e, a, r) => {
131
+ const o = [], t = e.expectedDate;
132
+ let s = d(t, r) ? t : J(t, 2);
133
+ for (; d(s, r); )
134
+ D(s, a) && o.push({ ...e, expectedDate: s }), s = l(s, 2);
135
+ return o;
136
+ }, me = (e, a, r) => {
137
+ const o = [], t = e.expectedDate;
138
+ let s = d(t, r) ? t : G(t, 1);
139
+ for (; d(s, r); )
140
+ D(s, a) && o.push({ ...e, expectedDate: s }), s = A(s, 1);
141
+ return o;
142
+ }, he = (e, a, r) => {
143
+ const o = [], t = e.expectedDate;
144
+ let s = d(t, r) ? t : G(t, 2);
145
+ for (; d(s, r); )
146
+ D(s, a) && o.push({ ...e, expectedDate: s }), s = A(s, 2);
147
+ return o;
148
+ }, le = (e, a, r) => {
149
+ const o = [], t = e.expectedDate;
150
+ let s = d(t, r) ? t : X(t, 1);
151
+ for (; d(s, r); )
152
+ D(s, a) && o.push({ ...e, expectedDate: s }), s = I(s, 1);
153
+ return o;
154
+ }, He = (e, a) => {
155
+ const r = [];
156
+ for (const o of e) {
157
+ const t = oe(o, a);
158
+ r.push(...t);
159
+ }
160
+ return r.sort(
161
+ (o, t) => y(o.occurredOnDate || o.expectedDate) - y(t.occurredOnDate || t.expectedDate)
162
+ );
163
+ }, je = (e, a, r) => {
164
+ const o = [];
165
+ for (const t of a) {
166
+ const s = r.filter(
167
+ (i) => i.repeating_transaction_guid === t.guid
168
+ );
169
+ r.length > 0 && o.push({
170
+ ...t,
171
+ account: e.find((i) => i.guid === t.account_guid),
172
+ transactions: s
173
+ });
174
+ }
175
+ return o;
176
+ }, ze = (e) => e.reduce((a, r) => {
177
+ const o = K(r.expectedDate, { representation: "date" }), t = a.find(
178
+ (s) => s.date.toString() === r.expectedDate.toString()
179
+ );
180
+ return t ? t.recurrences.push(r) : a.push({
181
+ date: r.expectedDate,
182
+ id: `date-${o}`,
183
+ recurrences: [r]
184
+ }), a;
185
+ }, []), Je = (e, a, r) => {
186
+ const o = b(E(), a.recurrence_day), t = B(E(), a.recurrence_day), s = Y(a.recurrence_day), i = a.second_recurrence_day ? Y(a.second_recurrence_day) : "";
187
+ let n = r ? f(e.monthly_ordinal, s) : e.monthly;
188
+ switch (a.recurrence_type) {
189
+ case c.EveryQuarter:
190
+ n = r ? f(e.quarterly_ordinal, s) : e.quarterly;
191
+ break;
192
+ case c.EveryWeek:
193
+ n = r ? f(
194
+ e.weekly_ordinal,
195
+ M(o, O.DAY_OF_WEEK)
196
+ ) : e.weekly;
197
+ break;
198
+ case c.EveryYear:
199
+ n = r ? f(
200
+ e.anually_ordinal,
201
+ M(t, O.MONTH_DAY)
202
+ ) : e.anually;
203
+ break;
204
+ case c.EveryOtherWeek:
205
+ n = r ? f(
206
+ e.every_other_week_ordinal,
207
+ M(o, O.DAY_OF_WEEK)
208
+ ) : e.every_other_week;
209
+ break;
210
+ case c.EveryOtherMonth:
211
+ n = r ? f(e.every_other_month_ordinal, s) : e.every_other_month;
212
+ break;
213
+ case c.EveryOtherQuarter:
214
+ n = r ? f(e.every_other_quarter_ordinal, s) : e.every_other_quarter;
215
+ break;
216
+ case c.TwiceAMonth:
217
+ n = r ? f(e.twice_a_month_ordinal, s, i) : e.twice_a_month;
218
+ break;
219
+ }
220
+ return n;
221
+ }, fe = (e, a, r, o) => {
222
+ let t = a;
223
+ r !== void 0 && (e === c.EveryWeek || e === c.EveryOtherWeek ? t = z(a, r) : e === c.EveryYear ? t = B(a, r) : t = k(a, r));
224
+ let s = t;
225
+ switch (e) {
226
+ case c.EveryWeek:
227
+ s = re(t);
228
+ break;
229
+ case c.EveryOtherWeek:
230
+ s = te(t);
231
+ break;
232
+ case c.TwiceAMonth:
233
+ s = ee(
234
+ r ?? t.getDate(),
235
+ o ?? 28
236
+ );
237
+ break;
238
+ case c.EveryMonth:
239
+ s = T(t);
240
+ break;
241
+ case c.EveryOtherMonth:
242
+ s = R(t);
243
+ break;
244
+ case c.EveryQuarter:
245
+ s = F(t);
246
+ break;
247
+ case c.EveryOtherQuarter:
248
+ s = q(t);
249
+ break;
250
+ case c.EveryYear:
251
+ s = Z(t);
252
+ break;
253
+ }
254
+ return s;
255
+ }, Ve = (e, a) => {
256
+ const r = a.find(
257
+ (n) => n.repeatingTransactionGuid === e.guid && n.status === _.Upcoming
258
+ );
259
+ if (r) return r.expectedDate;
260
+ const o = (n) => a.some(
261
+ (u) => u.repeatingTransactionGuid === e.guid && u.status === _.Paid && Math.abs($(u.expectedDate, n)) <= 5
262
+ ), t = {
263
+ [c.EveryWeek]: (n) => x(n, 1),
264
+ [c.EveryOtherWeek]: (n) => x(n, 2),
265
+ [c.TwiceAMonth]: (n) => {
266
+ const u = se(
267
+ e.recurrence_day,
268
+ e.second_recurrence_day ?? 28
269
+ );
270
+ return u.find((v) => D(v, n)) ?? u[u.length - 1];
271
+ },
272
+ [c.EveryMonth]: (n) => l(n, 1),
273
+ [c.EveryOtherMonth]: (n) => l(n, 2),
274
+ [c.EveryQuarter]: (n) => l(n, 3),
275
+ [c.EveryOtherQuarter]: (n) => l(n, 6),
276
+ [c.EveryYear]: (n) => I(n, 1)
277
+ }, s = fe(
278
+ e.recurrence_type,
279
+ U(e.predicted_occurs_on),
280
+ e.recurrence_day,
281
+ e.second_recurrence_day
282
+ );
283
+ if (!o(s)) return s;
284
+ const i = t[e.recurrence_type];
285
+ return i ? i(s) : s;
286
+ };
287
+ export {
288
+ c as F,
289
+ P as R,
290
+ _ as a,
291
+ g as b,
292
+ Ve as c,
293
+ fe as d,
294
+ ze as e,
295
+ je as f,
296
+ Je as g,
297
+ He as h
298
+ };
299
+ //# sourceMappingURL=RecurringTransactionsUtil-CHWmqvW5.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RecurringTransactionsUtil-CHWmqvW5.mjs","sources":["../src/core/types/RepeatingTransaction.ts","../src/core/utils/RecurringTransactionsUtil.ts"],"sourcesContent":["import { Account } from './Account'\nimport { Transaction, TransactionType } from './Transaction'\n\nexport enum Frequency {\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 TwiceAMonth = 8,\n}\n\nexport enum RecurrenceStatus {\n Paid = 0,\n Missed = 1,\n Upcoming = 2,\n}\n\nexport enum RecurrenceType {\n Expense = 0,\n Income = 1,\n}\n\nexport enum RepeatingType {\n Unknown = 0,\n Subscription = 1,\n Bill = 2,\n Income = 3,\n Transfer = 4,\n}\n\nexport interface RepeatingTransaction {\n // API fields\n guid: string\n account_guid: string\n created_by: number\n member_guid: string\n merchant_guid: string\n user_guid: string\n description: string\n amount: number\n predicted_occurs_on: string\n transaction_type: TransactionType\n recurrence_type: Frequency\n recurrence_day: number\n repeating_transaction_type: RepeatingType\n second_recurrence_day?: number\n\n // UI fields\n account?: Account\n transactions: Transaction[]\n}\n\nexport interface Recurrence {\n accountGuid: string\n amount: number\n categoryGuid: string\n expectedDate: Date\n frequency: Frequency\n institutionGuid: string\n institutionName: string\n merchantGuid: string\n name: string\n occurredOnDate?: Date\n recurrenceDay: number\n repeatingTransactionGuid: string\n secondRecurrenceDay?: number\n status: RecurrenceStatus\n type: RecurrenceType\n transaction?: Transaction\n}\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 { differenceInDays } from 'date-fns/differenceInDays'\nimport { formatISO } from 'date-fns/formatISO'\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 { isSameDay } from 'date-fns/isSameDay'\nimport { lastDayOfMonth } from 'date-fns/lastDayOfMonth'\nimport { nextDay } from 'date-fns/nextDay'\nimport { parseISO } from 'date-fns/parseISO'\nimport { setDate } from 'date-fns/setDate'\nimport { setDay } from 'date-fns/setDay'\nimport { setDayOfYear } from 'date-fns/setDayOfYear'\nimport { startOfToday } from 'date-fns/startOfToday'\nimport { subDays } from 'date-fns/subDays'\nimport { subMonths } from 'date-fns/subMonths'\nimport { subQuarters } from 'date-fns/subQuarters'\nimport { subWeeks } from 'date-fns/subWeeks'\nimport { subYears } from 'date-fns/subYears'\n\nimport type { Day } from 'date-fns/types'\n\nimport { DATE_FORMATS_INTL, formatDate } from '../constants'\nimport {\n type Account,\n type DateRange,\n type Recurrence,\n type RecurringCopy,\n type RepeatingTransaction,\n type Transaction,\n RecurrenceType,\n RecurrenceStatus,\n RepeatingType,\n Frequency,\n} from '../types'\n\nimport {\n getNextBiMonthlyDate,\n getNextBiQuarterlyDate,\n getNextBiWeeklyDate,\n getNextMonthlyDate,\n getNextQuarterlyDate,\n getNextTwiceMonthlyDate,\n getNextWeeklyDate,\n getNextYearlyDate,\n getTwiceMonthlyDates,\n} from './DateUtil'\nimport { formatOrdinal } from './NumberFormatting'\nimport { buildDynamicCopy } from './Localization'\n\nexport type GroupedRecurrence = {\n recurrences: Recurrence[]\n id: string\n date: Date\n}\n\nexport const buildInstitutionName = (account?: Account) => {\n if (!account) return ''\n\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\nconst buildRepeatingRecurrences = (\n repeatingTransaction: RepeatingTransaction,\n dateRange: DateRange,\n) => {\n const recurrences: Recurrence[] = []\n\n const isYearly = repeatingTransaction.recurrence_type === Frequency.EveryYear\n\n const pastTransaction = repeatingTransaction.transactions.find(\n (t) => t.repeating_transaction_guid === repeatingTransaction.guid,\n )\n\n /*\n Since past transactions for yearly recurrences can be outside the 90 day data range, we need to display them\n even if there is no past transaction to match to. This will display it without a category, but that's the\n tradeoff until we impove our transactions service to return past transactions for all recurring transactions.\n */\n if (!isYearly && !pastTransaction) return []\n\n const occursOn = parseISO(repeatingTransaction.predicted_occurs_on)\n const baseRecurrence: Recurrence = {\n accountGuid: repeatingTransaction.account?.guid || '',\n amount: repeatingTransaction.amount,\n categoryGuid: pastTransaction?.category_guid || '',\n expectedDate: occursOn,\n frequency: repeatingTransaction.recurrence_type,\n institutionGuid: repeatingTransaction.account?.institution_guid || '',\n institutionName: buildInstitutionName(repeatingTransaction.account),\n merchantGuid: repeatingTransaction.merchant_guid,\n name: repeatingTransaction.description,\n recurrenceDay: repeatingTransaction.recurrence_day,\n repeatingTransactionGuid: repeatingTransaction.guid,\n secondRecurrenceDay: repeatingTransaction.second_recurrence_day,\n status: RecurrenceStatus.Upcoming,\n type:\n repeatingTransaction.repeating_transaction_type === RepeatingType.Income\n ? RecurrenceType.Income\n : RecurrenceType.Expense,\n transaction: undefined,\n }\n\n const startDate = dateRange.start\n const endDate = dateRange.end\n\n switch (repeatingTransaction.recurrence_type) {\n case Frequency.EveryWeek:\n recurrences.push(...getWeeklyRecurrences(baseRecurrence, startDate, endDate))\n break\n case Frequency.EveryOtherWeek:\n recurrences.push(...getBiWeeklyRecurrences(baseRecurrence, startDate, endDate))\n break\n case Frequency.TwiceAMonth:\n recurrences.push(...getTwiceMonthlyRecurrences(baseRecurrence, startDate, endDate))\n break\n case Frequency.EveryMonth:\n recurrences.push(...getMonthlyRecurrences(baseRecurrence, startDate, endDate))\n break\n case Frequency.EveryOtherMonth:\n recurrences.push(...getBiMonthlyRecurrences(baseRecurrence, startDate, endDate))\n break\n case Frequency.EveryQuarter:\n recurrences.push(...getQuarterlyRecurrences(baseRecurrence, startDate, endDate))\n break\n case Frequency.EveryOtherQuarter:\n recurrences.push(...getBiQuarterlyRecurrences(baseRecurrence, startDate, endDate))\n break\n case Frequency.EveryYear:\n recurrences.push(...getYearlyRecurrences(baseRecurrence, startDate, endDate))\n break\n }\n\n // Track which transactions have already been matched to avoid double-counting\n const matchedTransactionGuids = new Set<string>()\n\n for (const recurrence of recurrences) {\n // First, try to find a manually linked transaction (any date)\n const linkedTransactions = repeatingTransaction.transactions.filter(\n (t) =>\n t.repeating_transaction_guid === repeatingTransaction.guid &&\n !matchedTransactionGuids.has(t.guid),\n )\n\n const transaction =\n linkedTransactions.find(\n (t) =>\n t.date > getUnixTime(subDays(recurrence.expectedDate, 5)) &&\n t.date < getUnixTime(addDays(recurrence.expectedDate, 5)),\n ) ||\n (isBefore(recurrence.expectedDate, startOfToday())\n ? linkedTransactions.reduce<Transaction | undefined>((closest, t) => {\n const dist = Math.abs(t.date - getUnixTime(recurrence.expectedDate))\n const closestDist = closest\n ? Math.abs(closest.date - getUnixTime(recurrence.expectedDate))\n : Infinity\n return dist < closestDist ? t : closest\n }, undefined)\n : undefined)\n\n if (transaction) {\n matchedTransactionGuids.add(transaction.guid)\n recurrence.transaction = transaction\n recurrence.status = RecurrenceStatus.Paid\n recurrence.occurredOnDate = fromUnixTime(transaction.date)\n } else if (isBefore(recurrence.expectedDate, subDays(startOfToday(), 3))) {\n recurrence.status = RecurrenceStatus.Missed\n }\n }\n\n return recurrences\n}\n\nconst getWeeklyRecurrences = (baseRecurrence: Recurrence, startDate: Date, endDate: Date) => {\n const activities: Recurrence[] = []\n\n // Add recurrence for each week for the current month and next month\n let nextDate = nextDay(startDate, baseRecurrence.recurrenceDay as Day)\n while (isBefore(nextDate, endDate)) {\n activities.push({ ...baseRecurrence, expectedDate: nextDate })\n nextDate = nextDay(nextDate, baseRecurrence.recurrenceDay as Day)\n }\n\n return activities\n}\n\nconst getBiWeeklyRecurrences = (baseRecurrence: Recurrence, startDate: Date, endDate: Date) => {\n const recurrences: Recurrence[] = []\n\n // Determine the first occurrence of the bi-weekly recurrence within the date range\n let nextDate = baseRecurrence.expectedDate\n if (isBefore(nextDate, startDate)) {\n while (isBefore(nextDate, startDate)) {\n nextDate = addWeeks(nextDate, 2)\n }\n } else {\n while (isAfter(nextDate, startDate) || isSameDay(nextDate, startDate)) {\n nextDate = subWeeks(nextDate, 2)\n }\n nextDate = addWeeks(nextDate, 2)\n }\n\n while (isBefore(nextDate, endDate)) {\n recurrences.push({ ...baseRecurrence, expectedDate: nextDate })\n nextDate = addDays(nextDate, 14)\n }\n\n return recurrences\n}\n\nconst getTwiceMonthlyRecurrences = (baseRecurrence: Recurrence, startDate: Date, endDate: Date) => {\n const recurrences: Recurrence[] = []\n\n let firstOccurrence = setDate(startDate, baseRecurrence.recurrenceDay)\n\n while (isBefore(firstOccurrence, endDate)) {\n recurrences.push({ ...baseRecurrence, expectedDate: firstOccurrence })\n firstOccurrence = addMonths(firstOccurrence, 1)\n }\n\n let secondOccurrence =\n baseRecurrence.secondRecurrenceDay && baseRecurrence.secondRecurrenceDay < 28\n ? setDate(startDate, baseRecurrence.secondRecurrenceDay)\n : lastDayOfMonth(startDate)\n\n while (isBefore(secondOccurrence, endDate)) {\n recurrences.push({ ...baseRecurrence, expectedDate: secondOccurrence })\n secondOccurrence = addMonths(secondOccurrence, 1)\n }\n\n return recurrences\n}\n\nconst getMonthlyRecurrences = (baseRecurrence: Recurrence, startDate: Date, endDate: Date) => {\n const recurrences: Recurrence[] = []\n\n let expectedDate = setDate(startDate, baseRecurrence.recurrenceDay)\n\n // Add current month's repeating transaction recurrence\n recurrences.push({ ...baseRecurrence, expectedDate })\n\n expectedDate = addMonths(expectedDate, 1)\n while (isBefore(expectedDate, endDate)) {\n recurrences.push({ ...baseRecurrence, expectedDate })\n expectedDate = addMonths(expectedDate, 1)\n }\n\n return recurrences\n}\n\nconst getBiMonthlyRecurrences = (baseRecurrence: Recurrence, startDate: Date, endDate: Date) => {\n const recurrences: Recurrence[] = []\n\n const occursOn = baseRecurrence.expectedDate\n let nextDate = isBefore(occursOn, endDate) ? occursOn : subMonths(occursOn, 2)\n while (isBefore(nextDate, endDate)) {\n if (isAfter(nextDate, startDate)) {\n recurrences.push({ ...baseRecurrence, expectedDate: nextDate })\n }\n nextDate = addMonths(nextDate, 2)\n }\n\n return recurrences\n}\n\nconst getQuarterlyRecurrences = (baseRecurrence: Recurrence, startDate: Date, endDate: Date) => {\n const recurrences: Recurrence[] = []\n\n const occursOn = baseRecurrence.expectedDate\n let nextDate = isBefore(occursOn, endDate) ? occursOn : subQuarters(occursOn, 1)\n while (isBefore(nextDate, endDate)) {\n if (isAfter(nextDate, startDate)) {\n recurrences.push({ ...baseRecurrence, expectedDate: nextDate })\n }\n nextDate = addQuarters(nextDate, 1)\n }\n\n return recurrences\n}\n\nconst getBiQuarterlyRecurrences = (baseRecurrence: Recurrence, startDate: Date, endDate: Date) => {\n const recurrences: Recurrence[] = []\n\n const occursOn = baseRecurrence.expectedDate\n let nextDate = isBefore(occursOn, endDate) ? occursOn : subQuarters(occursOn, 2)\n while (isBefore(nextDate, endDate)) {\n if (isAfter(nextDate, startDate)) {\n recurrences.push({ ...baseRecurrence, expectedDate: nextDate })\n }\n nextDate = addQuarters(nextDate, 2)\n }\n\n return recurrences\n}\n\nconst getYearlyRecurrences = (baseRecurrence: Recurrence, startDate: Date, endDate: Date) => {\n const recurrences: Recurrence[] = []\n\n const occursOn = baseRecurrence.expectedDate\n let nextDate = isBefore(occursOn, endDate) ? occursOn : subYears(occursOn, 1)\n while (isBefore(nextDate, endDate)) {\n if (isAfter(nextDate, startDate)) {\n recurrences.push({ ...baseRecurrence, expectedDate: nextDate })\n }\n nextDate = addYears(nextDate, 1)\n }\n\n return recurrences\n}\n\nexport const buildAllRecurrences = (\n repeatingTransactions: RepeatingTransaction[],\n dateRange: DateRange,\n) => {\n const recurrences: Recurrence[] = []\n\n for (const repeatingTransaction of repeatingTransactions) {\n const activity = buildRepeatingRecurrences(repeatingTransaction, dateRange)\n recurrences.push(...activity)\n }\n\n return recurrences.sort(\n (a, b) =>\n getUnixTime(a.occurredOnDate || a.expectedDate) -\n getUnixTime(b.occurredOnDate || b.expectedDate),\n )\n}\n\nexport const augmentRepeatingTransactions = (\n accounts: Account[],\n repeatingTransactions: RepeatingTransaction[],\n transactions: Transaction[],\n) => {\n const augmentedRepeatingTransactions: RepeatingTransaction[] = []\n\n for (const repeatingTransaction of repeatingTransactions) {\n const relatedTransactions = transactions.filter(\n (t) => t.repeating_transaction_guid === repeatingTransaction.guid,\n )\n\n if (transactions.length > 0) {\n augmentedRepeatingTransactions.push({\n ...repeatingTransaction,\n account: accounts.find((account) => account.guid === repeatingTransaction.account_guid),\n transactions: relatedTransactions,\n })\n }\n }\n\n return augmentedRepeatingTransactions\n}\n\nexport const groupRecurrencesByDate = (recurrences: Recurrence[]): GroupedRecurrence[] => {\n return recurrences.reduce((groupedRecurrences: GroupedRecurrence[], recurrence) => {\n const dateString = formatISO(recurrence.expectedDate, { representation: 'date' })\n const existingGroup = groupedRecurrences.find(\n (group) => group.date.toString() === recurrence.expectedDate.toString(),\n )\n\n if (existingGroup) {\n existingGroup.recurrences.push(recurrence)\n } else {\n groupedRecurrences.push({\n date: recurrence.expectedDate,\n id: `date-${dateString}`,\n recurrences: [recurrence],\n })\n }\n\n return groupedRecurrences\n }, [])\n}\n\nexport const getFrequencyLabel = (\n copy: RecurringCopy,\n repeatingTransaction: RepeatingTransaction,\n showOrdinal: boolean,\n) => {\n const nextWeekday = nextDay(startOfToday(), repeatingTransaction.recurrence_day as Day)\n const nextAnnualDate = setDayOfYear(startOfToday(), repeatingTransaction.recurrence_day)\n const firstDateOrdinal = formatOrdinal(repeatingTransaction.recurrence_day)\n const secondDateOrdinal = repeatingTransaction.second_recurrence_day\n ? formatOrdinal(repeatingTransaction.second_recurrence_day)\n : ''\n\n let frequencyLabel = showOrdinal\n ? buildDynamicCopy(copy.monthly_ordinal, firstDateOrdinal)\n : copy.monthly\n\n switch (repeatingTransaction.recurrence_type) {\n case Frequency.EveryQuarter:\n frequencyLabel = showOrdinal\n ? buildDynamicCopy(copy.quarterly_ordinal, firstDateOrdinal)\n : copy.quarterly\n break\n case Frequency.EveryWeek:\n frequencyLabel = showOrdinal\n ? buildDynamicCopy(\n copy.weekly_ordinal,\n formatDate(nextWeekday, DATE_FORMATS_INTL.DAY_OF_WEEK),\n )\n : copy.weekly\n break\n case Frequency.EveryYear:\n frequencyLabel = showOrdinal\n ? buildDynamicCopy(\n copy.anually_ordinal,\n formatDate(nextAnnualDate, DATE_FORMATS_INTL.MONTH_DAY),\n )\n : copy.anually\n break\n case Frequency.EveryOtherWeek:\n frequencyLabel = showOrdinal\n ? buildDynamicCopy(\n copy.every_other_week_ordinal,\n formatDate(nextWeekday, DATE_FORMATS_INTL.DAY_OF_WEEK),\n )\n : copy.every_other_week\n break\n case Frequency.EveryOtherMonth:\n frequencyLabel = showOrdinal\n ? buildDynamicCopy(copy.every_other_month_ordinal, firstDateOrdinal)\n : copy.every_other_month\n break\n case Frequency.EveryOtherQuarter:\n frequencyLabel = showOrdinal\n ? buildDynamicCopy(copy.every_other_quarter_ordinal, firstDateOrdinal)\n : copy.every_other_quarter\n break\n case Frequency.TwiceAMonth:\n frequencyLabel = showOrdinal\n ? buildDynamicCopy(copy.twice_a_month_ordinal, firstDateOrdinal, secondDateOrdinal)\n : copy.twice_a_month\n break\n }\n\n return frequencyLabel as string\n}\n\nexport const getNextPaymentDate = (\n frequency: Frequency,\n date: Date,\n recurrenceDay?: number,\n secondRecurrenceDay?: number,\n) => {\n let baseDate = date\n\n // Apply user selected recurrenceDay based on frequency type\n if (recurrenceDay !== undefined) {\n if (frequency === Frequency.EveryWeek || frequency === Frequency.EveryOtherWeek) {\n baseDate = setDay(date, recurrenceDay)\n } else if (frequency === Frequency.EveryYear) {\n baseDate = setDayOfYear(date, recurrenceDay)\n } else {\n baseDate = setDate(date, recurrenceDay)\n }\n }\n\n let nextDate = baseDate\n\n switch (frequency) {\n case Frequency.EveryWeek:\n nextDate = getNextWeeklyDate(baseDate)\n break\n case Frequency.EveryOtherWeek:\n nextDate = getNextBiWeeklyDate(baseDate)\n break\n case Frequency.TwiceAMonth:\n nextDate = getNextTwiceMonthlyDate(\n recurrenceDay ?? baseDate.getDate(),\n secondRecurrenceDay ?? 28,\n )\n break\n case Frequency.EveryMonth:\n nextDate = getNextMonthlyDate(baseDate)\n break\n case Frequency.EveryOtherMonth:\n nextDate = getNextBiMonthlyDate(baseDate)\n break\n case Frequency.EveryQuarter:\n nextDate = getNextQuarterlyDate(baseDate)\n break\n case Frequency.EveryOtherQuarter:\n nextDate = getNextBiQuarterlyDate(baseDate)\n break\n case Frequency.EveryYear:\n nextDate = getNextYearlyDate(baseDate)\n break\n }\n\n return nextDate\n}\n\nexport const getNextUpcomingDate = (\n recurringTransaction: RepeatingTransaction,\n recurrences: Recurrence[],\n): Date => {\n const nextUpcoming = recurrences.find(\n (r) =>\n r.repeatingTransactionGuid === recurringTransaction.guid &&\n r.status === RecurrenceStatus.Upcoming,\n )\n if (nextUpcoming) return nextUpcoming.expectedDate\n\n const isPaidNearDate = (date: Date) =>\n recurrences.some(\n (r) =>\n r.repeatingTransactionGuid === recurringTransaction.guid &&\n r.status === RecurrenceStatus.Paid &&\n Math.abs(differenceInDays(r.expectedDate, date)) <= 5,\n )\n\n const frequencyAdvancers: Partial<Record<Frequency, (d: Date) => Date>> = {\n [Frequency.EveryWeek]: (d) => addWeeks(d, 1),\n [Frequency.EveryOtherWeek]: (d) => addWeeks(d, 2),\n [Frequency.TwiceAMonth]: (d) => {\n const candidates = getTwiceMonthlyDates(\n recurringTransaction.recurrence_day,\n recurringTransaction.second_recurrence_day ?? 28,\n )\n return candidates.find((c) => isAfter(c, d)) ?? candidates[candidates.length - 1]\n },\n [Frequency.EveryMonth]: (d) => addMonths(d, 1),\n [Frequency.EveryOtherMonth]: (d) => addMonths(d, 2),\n [Frequency.EveryQuarter]: (d) => addMonths(d, 3),\n [Frequency.EveryOtherQuarter]: (d) => addMonths(d, 6),\n [Frequency.EveryYear]: (d) => addYears(d, 1),\n }\n\n const baseNext = getNextPaymentDate(\n recurringTransaction.recurrence_type,\n parseISO(recurringTransaction.predicted_occurs_on),\n recurringTransaction.recurrence_day,\n recurringTransaction.second_recurrence_day,\n )\n\n if (!isPaidNearDate(baseNext)) return baseNext\n\n const advance = frequencyAdvancers[recurringTransaction.recurrence_type]\n return advance ? advance(baseNext) : baseNext\n}\n"],"names":["Frequency","RecurrenceStatus","RecurrenceType","RepeatingType","buildInstitutionName","account","name","buildRepeatingRecurrences","repeatingTransaction","dateRange","recurrences","isYearly","pastTransaction","t","occursOn","parseISO","baseRecurrence","startDate","endDate","getWeeklyRecurrences","getBiWeeklyRecurrences","getTwiceMonthlyRecurrences","getMonthlyRecurrences","getBiMonthlyRecurrences","getQuarterlyRecurrences","getBiQuarterlyRecurrences","getYearlyRecurrences","matchedTransactionGuids","recurrence","linkedTransactions","transaction","getUnixTime","subDays","addDays","isBefore","startOfToday","closest","dist","closestDist","fromUnixTime","activities","nextDate","nextDay","addWeeks","isAfter","isSameDay","subWeeks","firstOccurrence","setDate","addMonths","secondOccurrence","lastDayOfMonth","expectedDate","subMonths","subQuarters","addQuarters","subYears","addYears","buildAllRecurrences","repeatingTransactions","activity","a","b","augmentRepeatingTransactions","accounts","transactions","augmentedRepeatingTransactions","relatedTransactions","groupRecurrencesByDate","groupedRecurrences","dateString","formatISO","existingGroup","group","getFrequencyLabel","copy","showOrdinal","nextWeekday","nextAnnualDate","setDayOfYear","firstDateOrdinal","formatOrdinal","secondDateOrdinal","frequencyLabel","buildDynamicCopy","formatDate","DATE_FORMATS_INTL","getNextPaymentDate","frequency","date","recurrenceDay","secondRecurrenceDay","baseDate","setDay","getNextWeeklyDate","getNextBiWeeklyDate","getNextTwiceMonthlyDate","getNextMonthlyDate","getNextBiMonthlyDate","getNextQuarterlyDate","getNextBiQuarterlyDate","getNextYearlyDate","getNextUpcomingDate","recurringTransaction","nextUpcoming","r","isPaidNearDate","differenceInDays","frequencyAdvancers","d","candidates","getTwiceMonthlyDates","c","baseNext","advance"],"mappings":"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"}
@@ -0,0 +1,46 @@
1
+ import { jsxs as m, jsx as t } from "react/jsx-runtime";
2
+ import p from "react";
3
+ import d from "@mui/material/Button";
4
+ import a from "@mui/material/IconButton";
5
+ import f from "@mui/material/Tooltip";
6
+ import { useTheme as c } from "@mui/material/styles";
7
+ const B = ({
8
+ icon: e,
9
+ label: i,
10
+ onClick: o,
11
+ placement: s = "bottom",
12
+ tooltipText: r,
13
+ variant: l = "text"
14
+ }) => {
15
+ const n = c();
16
+ return /* @__PURE__ */ m(p.Fragment, { children: [
17
+ /* @__PURE__ */ t(
18
+ d,
19
+ {
20
+ onClick: o,
21
+ startIcon: e,
22
+ sx: {
23
+ [n.breakpoints.down("lg")]: { display: "none" },
24
+ [n.breakpoints.up("lg")]: { display: "inline-flex" }
25
+ },
26
+ title: r,
27
+ variant: l,
28
+ children: i
29
+ }
30
+ ),
31
+ /* @__PURE__ */ t(
32
+ f,
33
+ {
34
+ describeChild: !0,
35
+ placement: s,
36
+ sx: { display: { xs: "inline-flex", lg: "none" } },
37
+ title: r,
38
+ children: /* @__PURE__ */ t(a, { onClick: o, children: e })
39
+ }
40
+ )
41
+ ] });
42
+ };
43
+ export {
44
+ B as R
45
+ };
46
+ //# sourceMappingURL=ResponsiveButton-CC9F_Ezk.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ResponsiveButton-CC9F_Ezk.mjs","sources":["../src/common/components/ResponsiveButton.tsx"],"sourcesContent":["import React from 'react'\n\nimport Button from '@mui/material/Button'\nimport IconButton from '@mui/material/IconButton'\nimport Tooltip from '@mui/material/Tooltip'\nimport { useTheme } from '@mui/material/styles'\n\ninterface ResponsiveButtonProps {\n icon: React.ReactElement\n label: string\n onClick?: () => void\n placement?:\n | 'bottom-end'\n | 'bottom-start'\n | 'bottom'\n | 'left-end'\n | 'left-start'\n | 'left'\n | 'right-end'\n | 'right-start'\n | 'right'\n | 'top-end'\n | 'top-start'\n | 'top'\n tooltipText: string\n variant?: 'contained' | 'outlined' | 'text'\n}\n\nconst ResponsiveButton: React.FC<ResponsiveButtonProps> = ({\n icon,\n label,\n onClick,\n placement = 'bottom',\n tooltipText,\n variant = 'text',\n}) => {\n const theme = useTheme()\n\n return (\n <React.Fragment>\n <Button\n onClick={onClick}\n startIcon={icon}\n sx={{\n [theme.breakpoints.down('lg')]: { display: 'none' },\n [theme.breakpoints.up('lg')]: { display: 'inline-flex' },\n }}\n title={tooltipText}\n variant={variant}\n >\n {label}\n </Button>\n <Tooltip\n describeChild={true}\n placement={placement}\n sx={{ display: { xs: 'inline-flex', lg: 'none' } }}\n title={tooltipText}\n >\n <IconButton onClick={onClick}>{icon}</IconButton>\n </Tooltip>\n </React.Fragment>\n )\n}\n\nexport default ResponsiveButton\n"],"names":["ResponsiveButton","icon","label","onClick","placement","tooltipText","variant","theme","useTheme","jsxs","React","jsx","Button","Tooltip","IconButton"],"mappings":";;;;;;AA4BA,MAAMA,IAAoD,CAAC;AAAA,EACzD,MAAAC;AAAA,EACA,OAAAC;AAAA,EACA,SAAAC;AAAA,EACA,WAAAC,IAAY;AAAA,EACZ,aAAAC;AAAA,EACA,SAAAC,IAAU;AACZ,MAAM;AACJ,QAAMC,IAAQC,EAAA;AAEd,SACE,gBAAAC,EAACC,EAAM,UAAN,EACC,UAAA;AAAA,IAAA,gBAAAC;AAAA,MAACC;AAAA,MAAA;AAAA,QACC,SAAAT;AAAA,QACA,WAAWF;AAAA,QACX,IAAI;AAAA,UACF,CAACM,EAAM,YAAY,KAAK,IAAI,CAAC,GAAG,EAAE,SAAS,OAAA;AAAA,UAC3C,CAACA,EAAM,YAAY,GAAG,IAAI,CAAC,GAAG,EAAE,SAAS,cAAA;AAAA,QAAc;AAAA,QAEzD,OAAOF;AAAA,QACP,SAAAC;AAAA,QAEC,UAAAJ;AAAA,MAAA;AAAA,IAAA;AAAA,IAEH,gBAAAS;AAAA,MAACE;AAAA,MAAA;AAAA,QACC,eAAe;AAAA,QACf,WAAAT;AAAA,QACA,IAAI,EAAE,SAAS,EAAE,IAAI,eAAe,IAAI,SAAO;AAAA,QAC/C,OAAOC;AAAA,QAEP,UAAA,gBAAAM,EAACG,GAAA,EAAW,SAAAX,GAAmB,UAAAF,EAAA,CAAK;AAAA,MAAA;AAAA,IAAA;AAAA,EACtC,GACF;AAEJ;"}
@@ -0,0 +1,51 @@
1
+ import { jsx as o } from "react/jsx-runtime";
2
+ import { observer as s } from "mobx-react-lite";
3
+ import m from "@mui/material/Box";
4
+ import p from "@mui/material/IconButton";
5
+ import t from "@mui/material/InputAdornment";
6
+ import { TextField as d, Icon as n } from "@mxenabled/mxui";
7
+ const x = ({
8
+ ariaLabel: c = "Search",
9
+ cancelAriaLabel: a = "Cancel Search",
10
+ onChange: e,
11
+ placeholder: i = "Search",
12
+ searchValue: r
13
+ }) => /* @__PURE__ */ o(m, { className: "mx-cmn-search-box", px: 24, py: 16, children: /* @__PURE__ */ o(
14
+ d,
15
+ {
16
+ "aria-label": c,
17
+ name: "search",
18
+ onChange: (l) => e(l.target.value),
19
+ placeholder: i,
20
+ slotProps: {
21
+ input: {
22
+ startAdornment: /* @__PURE__ */ o(t, { position: "start", children: /* @__PURE__ */ o(n, { name: "search", size: 26, sx: { color: "action.active" } }) }),
23
+ endAdornment: /* @__PURE__ */ o(t, { position: "end", sx: { p: 0 }, children: r ? /* @__PURE__ */ o(
24
+ p,
25
+ {
26
+ "aria-label": a,
27
+ className: "mx-cat-cancel-search-button",
28
+ color: "primary",
29
+ onClick: () => e(""),
30
+ children: /* @__PURE__ */ o(n, { name: "cancel", size: 24 })
31
+ }
32
+ ) : null }),
33
+ sx: {
34
+ "& .MuiOutlinedInput-notchedOutline": {
35
+ borderColor: "text.secondary",
36
+ opacity: 0.5
37
+ },
38
+ "& input::placeholder": { color: "text.secondary", opacity: 1 }
39
+ }
40
+ }
41
+ },
42
+ sx: {
43
+ width: "100%"
44
+ },
45
+ value: r
46
+ }
47
+ ) }), v = s(x);
48
+ export {
49
+ v as S
50
+ };
51
+ //# sourceMappingURL=SearchBox-Cpgu_gdO.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SearchBox-Cpgu_gdO.mjs","sources":["../src/common/components/SearchBox.tsx"],"sourcesContent":["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 } from '@mxenabled/mxui'\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 cancelButton = (\n <IconButton\n aria-label={cancelAriaLabel}\n className=\"mx-cat-cancel-search-button\"\n color=\"primary\"\n onClick={() => onChange('')}\n >\n <Icon name=\"cancel\" size={24} />\n </IconButton>\n )\n\n return (\n <Box className=\"mx-cmn-search-box\" px={24} py={16}>\n <TextField\n aria-label={ariaLabel}\n name=\"search\"\n onChange={(e: React.ChangeEvent<HTMLInputElement>) => onChange(e.target.value)}\n placeholder={placeholder}\n slotProps={{\n input: {\n startAdornment: (\n <InputAdornment position=\"start\">\n <Icon name=\"search\" size={26} sx={{ color: 'action.active' }} />\n </InputAdornment>\n ),\n endAdornment: (\n <InputAdornment position=\"end\" sx={{ p: 0 }}>\n {searchValue ? cancelButton : null}\n </InputAdornment>\n ),\n sx: {\n '& .MuiOutlinedInput-notchedOutline': {\n borderColor: 'text.secondary',\n opacity: 0.5,\n },\n '& input::placeholder': { color: 'text.secondary', opacity: 1 },\n },\n },\n }}\n sx={{\n width: '100%',\n }}\n value={searchValue}\n />\n </Box>\n )\n}\n\nexport default observer(SearchBox)\n"],"names":["SearchBox","ariaLabel","cancelAriaLabel","onChange","placeholder","searchValue","Box","jsx","TextField","e","InputAdornment","Icon","IconButton","SearchBox$1","observer"],"mappings":";;;;;;AAiBA,MAAMA,IAAsC,CAAC;AAAA,EAC3C,WAAAC,IAAY;AAAA,EACZ,iBAAAC,IAAkB;AAAA,EAClB,UAAAC;AAAA,EACA,aAAAC,IAAc;AAAA,EACd,aAAAC;AACF,wBAaKC,GAAA,EAAI,WAAU,qBAAoB,IAAI,IAAI,IAAI,IAC7C,UAAA,gBAAAC;AAAA,EAACC;AAAA,EAAA;AAAA,IACC,cAAYP;AAAA,IACZ,MAAK;AAAA,IACL,UAAU,CAACQ,MAA2CN,EAASM,EAAE,OAAO,KAAK;AAAA,IAC7E,aAAAL;AAAA,IACA,WAAW;AAAA,MACT,OAAO;AAAA,QACL,gBACE,gBAAAG,EAACG,GAAA,EAAe,UAAS,SACvB,4BAACC,GAAA,EAAK,MAAK,UAAS,MAAM,IAAI,IAAI,EAAE,OAAO,gBAAA,GAAmB,GAChE;AAAA,QAEF,cACE,gBAAAJ,EAACG,GAAA,EAAe,UAAS,OAAM,IAAI,EAAE,GAAG,EAAA,GACrC,UAAAL,IA1Bb,gBAAAE;AAAA,UAACK;AAAA,UAAA;AAAA,YACC,cAAYV;AAAA,YACZ,WAAU;AAAA,YACV,OAAM;AAAA,YACN,SAAS,MAAMC,EAAS,EAAE;AAAA,YAE1B,UAAA,gBAAAI,EAACI,GAAA,EAAK,MAAK,UAAS,MAAM,GAAA,CAAI;AAAA,UAAA;AAAA,QAAA,IAoBU,KAAA,CAChC;AAAA,QAEF,IAAI;AAAA,UACF,sCAAsC;AAAA,YACpC,aAAa;AAAA,YACb,SAAS;AAAA,UAAA;AAAA,UAEX,wBAAwB,EAAE,OAAO,kBAAkB,SAAS,EAAA;AAAA,QAAE;AAAA,MAChE;AAAA,IACF;AAAA,IAEF,IAAI;AAAA,MACF,OAAO;AAAA,IAAA;AAAA,IAET,OAAON;AAAA,EAAA;AAAA,GAEX,GAIJQ,IAAeC,EAASd,CAAS;"}
@@ -0,0 +1,62 @@
1
+ import { jsx as r, jsxs as l, Fragment as c } from "react/jsx-runtime";
2
+ import u from "@mui/material/Avatar";
3
+ import s from "@mui/material/ListItem";
4
+ import h from "@mui/material/ListItemAvatar";
5
+ import p from "@mui/material/ListItemButton";
6
+ import f from "@mui/material/ListItemIcon";
7
+ import g from "@mui/material/ListItemText";
8
+ import { Icon as d } from "@mxenabled/mxui";
9
+ import x from "@mui/material/MenuItem";
10
+ import b from "@mui/material/TextField";
11
+ import { ExpandMore as v } from "@mxenabled/mx-icons";
12
+ const G = ({
13
+ iconName: o,
14
+ label: a,
15
+ onClick: e,
16
+ showChevron: n = !0,
17
+ value: i
18
+ }) => {
19
+ const m = /* @__PURE__ */ l(c, { children: [
20
+ /* @__PURE__ */ r(h, { children: /* @__PURE__ */ r(u, { sx: { bgcolor: "neutral.light" }, variant: "rounded", children: /* @__PURE__ */ r(d, { name: o, sx: { color: "text.primary" } }) }) }),
21
+ /* @__PURE__ */ r(
22
+ g,
23
+ {
24
+ primary: a,
25
+ secondary: i,
26
+ slotProps: {
27
+ primary: { variant: "caption", fontWeight: "normal" },
28
+ secondary: { color: "text.default", variant: "body1", fontWeight: 600 }
29
+ }
30
+ }
31
+ )
32
+ ] });
33
+ return e ? /* @__PURE__ */ r(s, { disableGutters: !0, disablePadding: !0, children: /* @__PURE__ */ l(p, { onClick: e, children: [
34
+ m,
35
+ n && /* @__PURE__ */ r(f, { children: /* @__PURE__ */ r(d, { name: "chevron_right", size: 24 }) })
36
+ ] }) }) : /* @__PURE__ */ r(s, { disableGutters: !1, disablePadding: !1, children: m });
37
+ }, M = ({ label: o, onChange: a, options: e, value: n, ...i }) => /* @__PURE__ */ r(
38
+ b,
39
+ {
40
+ defaultValue: 0,
41
+ label: o,
42
+ onChange: (t) => {
43
+ a(Number(t.target.value));
44
+ },
45
+ select: !0,
46
+ slotProps: {
47
+ inputLabel: { shrink: !0 },
48
+ select: {
49
+ IconComponent: (t) => /* @__PURE__ */ r(v, { size: 20, sx: { mr: 4 }, ...t })
50
+ }
51
+ },
52
+ value: n,
53
+ variant: "outlined",
54
+ ...i,
55
+ children: e.map((t) => /* @__PURE__ */ r(x, { value: t.id, children: t.label }, t.id))
56
+ }
57
+ );
58
+ export {
59
+ G as D,
60
+ M as S
61
+ };
62
+ //# sourceMappingURL=Select-CSpkK5cR.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Select-CSpkK5cR.mjs","sources":["../src/common/components/DataRow.tsx","../src/common/components/Select.tsx"],"sourcesContent":["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 { Icon } from '@mxenabled/mxui'\n\ninterface DataRowProps {\n iconName: string\n label: string\n onClick?: () => void\n showChevron?: boolean\n value: string\n}\n\nconst DataRow: React.FC<DataRowProps> = ({\n iconName,\n label,\n onClick,\n showChevron = true,\n value,\n}) => {\n const rowContents = (\n <>\n <ListItemAvatar>\n <Avatar sx={{ bgcolor: 'neutral.light' }} variant=\"rounded\">\n <Icon name={iconName} sx={{ color: 'text.primary' }} />\n </Avatar>\n </ListItemAvatar>\n <ListItemText\n primary={label}\n secondary={value}\n slotProps={{\n primary: { variant: 'caption', fontWeight: 'normal' },\n secondary: { color: 'text.default', variant: 'body1', fontWeight: 600 },\n }}\n />\n </>\n )\n\n return onClick ? (\n <ListItem disableGutters={true} disablePadding={true}>\n <ListItemButton onClick={onClick}>\n {rowContents}\n {showChevron && (\n <ListItemIcon>\n <Icon name=\"chevron_right\" size={24} />\n </ListItemIcon>\n )}\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 MenuItem from '@mui/material/MenuItem'\nimport TextField from '@mui/material/TextField'\n\nimport { ExpandMore } from '@mxenabled/mx-icons'\n\nexport type SelectOption = {\n id: number\n label: string\n}\n\ninterface SelectProps extends Omit<React.ComponentProps<typeof TextField>, 'onChange'> {\n label: string\n onChange: (value: number) => void\n options: SelectOption[]\n value: number\n}\n\nexport const Select = ({ label, onChange, options, value, ...props }: SelectProps) => {\n const handleChange = (event: React.ChangeEvent<HTMLTextAreaElement>) => {\n onChange(Number(event.target.value))\n }\n\n return (\n <TextField\n defaultValue={0}\n label={label}\n onChange={handleChange}\n select={true}\n slotProps={{\n inputLabel: { shrink: true },\n select: {\n IconComponent: (props: React.ComponentProps<typeof ExpandMore>) => (\n <ExpandMore size={20} sx={{ mr: 4 }} {...props} />\n ),\n },\n }}\n value={value}\n variant=\"outlined\"\n {...props}\n >\n {options.map((option) => (\n <MenuItem key={option.id} value={option.id}>\n {option.label}\n </MenuItem>\n ))}\n </TextField>\n )\n}\n"],"names":["DataRow","iconName","label","onClick","showChevron","value","rowContents","jsxs","Fragment","jsx","ListItemAvatar","Avatar","Icon","ListItemText","ListItem","ListItemButton","ListItemIcon","Select","onChange","options","props","TextField","event","ExpandMore","option","MenuItem"],"mappings":";;;;;;;;;;;AAmBA,MAAMA,IAAkC,CAAC;AAAA,EACvC,UAAAC;AAAA,EACA,OAAAC;AAAA,EACA,SAAAC;AAAA,EACA,aAAAC,IAAc;AAAA,EACd,OAAAC;AACF,MAAM;AACJ,QAAMC,IACJ,gBAAAC,EAAAC,GAAA,EACE,UAAA;AAAA,IAAA,gBAAAC,EAACC,GAAA,EACC,4BAACC,GAAA,EAAO,IAAI,EAAE,SAAS,gBAAA,GAAmB,SAAQ,WAChD,4BAACC,GAAA,EAAK,MAAMX,GAAU,IAAI,EAAE,OAAO,eAAA,GAAkB,GACvD,EAAA,CACF;AAAA,IACA,gBAAAQ;AAAA,MAACI;AAAA,MAAA;AAAA,QACC,SAASX;AAAA,QACT,WAAWG;AAAA,QACX,WAAW;AAAA,UACT,SAAS,EAAE,SAAS,WAAW,YAAY,SAAA;AAAA,UAC3C,WAAW,EAAE,OAAO,gBAAgB,SAAS,SAAS,YAAY,IAAA;AAAA,QAAI;AAAA,MACxE;AAAA,IAAA;AAAA,EACF,GACF;AAGF,SAAOF,sBACJW,GAAA,EAAS,gBAAgB,IAAM,gBAAgB,IAC9C,UAAA,gBAAAP,EAACQ,GAAA,EAAe,SAAAZ,GACb,UAAA;AAAA,IAAAG;AAAA,IACAF,uBACEY,GAAA,EACC,UAAA,gBAAAP,EAACG,KAAK,MAAK,iBAAgB,MAAM,GAAA,CAAI,EAAA,CACvC;AAAA,EAAA,EAAA,CAEJ,EAAA,CACF,IAEA,gBAAAH,EAACK,GAAA,EAAS,gBAAgB,IAAO,gBAAgB,IAC9C,UAAAR,EAAA,CACH;AAEJ,GCzCaW,IAAS,CAAC,EAAE,OAAAf,GAAO,UAAAgB,GAAU,SAAAC,GAAS,OAAAd,GAAO,GAAGe,QAMzD,gBAAAX;AAAA,EAACY;AAAA,EAAA;AAAA,IACC,cAAc;AAAA,IACd,OAAAnB;AAAA,IACA,UARiB,CAACoB,MAAkD;AACtE,MAAAJ,EAAS,OAAOI,EAAM,OAAO,KAAK,CAAC;AAAA,IACrC;AAAA,IAOI,QAAQ;AAAA,IACR,WAAW;AAAA,MACT,YAAY,EAAE,QAAQ,GAAA;AAAA,MACtB,QAAQ;AAAA,QACN,eAAe,CAACF,MACd,gBAAAX,EAACc,GAAA,EAAW,MAAM,IAAI,IAAI,EAAE,IAAI,EAAA,GAAM,GAAGH,EAAAA,CAAO;AAAA,MAAA;AAAA,IAEpD;AAAA,IAEF,OAAAf;AAAA,IACA,SAAQ;AAAA,IACP,GAAGe;AAAA,IAEH,UAAAD,EAAQ,IAAI,CAACK,MACZ,gBAAAf,EAACgB,GAAA,EAAyB,OAAOD,EAAO,IACrC,UAAAA,EAAO,MAAA,GADKA,EAAO,EAEtB,CACD;AAAA,EAAA;AAAA;"}
@@ -0,0 +1,49 @@
1
+ import { jsx as e } from "react/jsx-runtime";
2
+ import c from "@mui/material/Box";
3
+ import n from "@mui/material/FormControlLabel";
4
+ import s from "@mui/material/Radio";
5
+ import { useTheme as d } from "@mui/material/styles";
6
+ import b from "@mui/material/Tooltip";
7
+ const C = ({
8
+ checked: r = !1,
9
+ label: t,
10
+ sx: l = {},
11
+ tooltip: i = "",
12
+ value: a
13
+ }) => {
14
+ const o = d(), p = o.palette.mode === "light" ? o.palette.grey[400] : o.palette.grey[700], m = r ? o.palette.action.active : p;
15
+ return /* @__PURE__ */ e(
16
+ c,
17
+ {
18
+ bgcolor: "background.paper",
19
+ border: `${r ? 3 : 1}px solid`,
20
+ borderColor: m,
21
+ borderRadius: 2,
22
+ mt: -2,
23
+ mx: 8,
24
+ pr: 8,
25
+ py: 4,
26
+ sx: { "&:hover": { borderColor: o.palette.action.active }, ...l },
27
+ children: /* @__PURE__ */ e(b, { title: i, children: /* @__PURE__ */ e(
28
+ n,
29
+ {
30
+ control: /* @__PURE__ */ e(
31
+ s,
32
+ {
33
+ disableRipple: !0,
34
+ sx: { "&.Mui-checked": { color: o.palette.action.active } }
35
+ }
36
+ ),
37
+ label: t,
38
+ labelPlacement: "start",
39
+ sx: { ml: 0, pl: 8 },
40
+ value: a
41
+ }
42
+ ) })
43
+ }
44
+ );
45
+ };
46
+ export {
47
+ C as S
48
+ };
49
+ //# sourceMappingURL=SelectionBox-B4xELRgp.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SelectionBox-B4xELRgp.mjs","sources":["../src/common/components/SelectionBox.tsx"],"sourcesContent":["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'\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"],"names":["SelectionBox","checked","label","sx","tooltip","value","theme","useTheme","greyColor","borderColor","jsx","Box","Tooltip","FormControlLabel","Radio"],"mappings":";;;;;;AAkBA,MAAMA,IAA4C,CAAC;AAAA,EACjD,SAAAC,IAAU;AAAA,EACV,OAAAC;AAAA,EACA,IAAAC,IAAK,CAAA;AAAA,EACL,SAAAC,IAAU;AAAA,EACV,OAAAC;AACF,MAAM;AACJ,QAAMC,IAAQC,EAAA,GAGRC,IACJF,EAAM,QAAQ,SAAS,UAAUA,EAAM,QAAQ,KAAK,GAAG,IAAIA,EAAM,QAAQ,KAAK,GAAG,GAC7EG,IAAcR,IAAUK,EAAM,QAAQ,OAAO,SAASE;AAG5D,SACE,gBAAAE;AAAA,IAACC;AAAA,IAAA;AAAA,MACC,SAAQ;AAAA,MACR,QAAQ,GALOV,IAAU,IAAI,CAKR;AAAA,MACrB,aAAAQ;AAAA,MACA,cAAc;AAAA,MACd,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,IAAI,EAAE,WAAW,EAAE,aAAaH,EAAM,QAAQ,OAAO,UAAU,GAAGH,EAAA;AAAA,MAElE,UAAA,gBAAAO,EAACE,GAAA,EAAQ,OAAOR,GACd,UAAA,gBAAAM;AAAA,QAACG;AAAA,QAAA;AAAA,UACC,SACE,gBAAAH;AAAA,YAACI;AAAA,YAAA;AAAA,cACC,eAAe;AAAA,cACf,IAAI,EAAE,iBAAiB,EAAE,OAAOR,EAAM,QAAQ,OAAO,OAAA,EAAO;AAAA,YAAE;AAAA,UAAA;AAAA,UAGlE,OAAAJ;AAAA,UACA,gBAAe;AAAA,UACf,IAAI,EAAE,IAAI,GAAG,IAAI,EAAA;AAAA,UACjB,OAAAG;AAAA,QAAA;AAAA,MAAA,EACF,CACF;AAAA,IAAA;AAAA,EAAA;AAGN;"}