@mx-cartographer/experiences 9.0.16 → 9.0.17-alpha

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 (213) hide show
  1. package/CHANGELOG.md +4 -5
  2. package/dist/Account-DR7Plrqy.mjs +1 -0
  3. package/dist/Account-DR7Plrqy.mjs.map +1 -0
  4. package/dist/{AccountDetailsDrawer-BuxLfuIm.mjs → AccountDetailsDrawer-CZPeLsCq.mjs} +4 -3
  5. package/dist/AccountDetailsDrawer-CZPeLsCq.mjs.map +1 -0
  6. package/dist/{AccountDetailsHeader-ByGNPZpO.mjs → AccountDetailsHeader-BvbCUQSS.mjs} +3 -0
  7. package/dist/AccountDetailsHeader-BvbCUQSS.mjs.map +1 -0
  8. package/dist/AccountUtils-B8ZzWI-d.mjs +1 -0
  9. package/dist/AccountUtils-B8ZzWI-d.mjs.map +1 -0
  10. package/dist/Analytics-CkYXKvco.mjs +1 -0
  11. package/dist/Analytics-CkYXKvco.mjs.map +1 -0
  12. package/dist/Analytics-WeZYytR0.mjs +1 -0
  13. package/dist/Analytics-WeZYytR0.mjs.map +1 -0
  14. package/dist/ApiEndpoints-DXwIYNUV.mjs +1 -0
  15. package/dist/ApiEndpoints-DXwIYNUV.mjs.map +1 -0
  16. package/dist/BeatMaterialIcon-1KOfRZrA.mjs +1 -0
  17. package/dist/BeatMaterialIcon-1KOfRZrA.mjs.map +1 -0
  18. package/dist/BudgetUtil-Bg2AQJpQ.mjs +1 -0
  19. package/dist/BudgetUtil-Bg2AQJpQ.mjs.map +1 -0
  20. package/dist/Category-DEKZGLYe.mjs +1 -0
  21. package/dist/Category-DEKZGLYe.mjs.map +1 -0
  22. package/dist/CategorySelectorDrawer-NJsFsKP1.mjs +1 -0
  23. package/dist/CategorySelectorDrawer-NJsFsKP1.mjs.map +1 -0
  24. package/dist/Connect-BH0Pt6zc.mjs +1 -0
  25. package/dist/Connect-BH0Pt6zc.mjs.map +1 -0
  26. package/dist/ConnectCard-D7uxoH5Y.mjs +1 -0
  27. package/dist/ConnectCard-D7uxoH5Y.mjs.map +1 -0
  28. package/dist/ConnectDrawer-CW4LA3H3.mjs +1 -0
  29. package/dist/ConnectDrawer-CW4LA3H3.mjs.map +1 -0
  30. package/dist/ConnectionsDrawer-CZU9ku-k.mjs +1 -0
  31. package/dist/ConnectionsDrawer-CZU9ku-k.mjs.map +1 -0
  32. package/dist/CurrencyDialog-DumQCTPO.mjs +1 -0
  33. package/dist/CurrencyDialog-DumQCTPO.mjs.map +1 -0
  34. package/dist/CurrencyInput-DaGEQaLW.mjs +1 -0
  35. package/dist/CurrencyInput-DaGEQaLW.mjs.map +1 -0
  36. package/dist/CurrencyText-CCbE6MmF.mjs +1 -0
  37. package/dist/CurrencyText-CCbE6MmF.mjs.map +1 -0
  38. package/dist/DateFormats-HudZ3Bjs.mjs +1 -0
  39. package/dist/DateFormats-HudZ3Bjs.mjs.map +1 -0
  40. package/dist/DateUtil-CzBmbjmA.mjs +1 -0
  41. package/dist/DateUtil-CzBmbjmA.mjs.map +1 -0
  42. package/dist/DebtUtils-i4pI2Uoe.mjs +1 -0
  43. package/dist/DebtUtils-i4pI2Uoe.mjs.map +1 -0
  44. package/dist/Dialog-Bvd2n8hz.mjs +1 -0
  45. package/dist/Dialog-Bvd2n8hz.mjs.map +1 -0
  46. package/dist/Donut-SzzfZDHF.mjs +1 -0
  47. package/dist/Donut-SzzfZDHF.mjs.map +1 -0
  48. package/dist/Drawer-DsnW2o0v.mjs +1 -0
  49. package/dist/Drawer-DsnW2o0v.mjs.map +1 -0
  50. package/dist/{EmbeddedCard-BxgB26dd.mjs → EmbeddedCard-DH8vQ3qN.mjs} +184 -181
  51. package/dist/EmbeddedCard-DH8vQ3qN.mjs.map +1 -0
  52. package/dist/EmptyState-CJUDc3kD.mjs +1 -0
  53. package/dist/EmptyState-CJUDc3kD.mjs.map +1 -0
  54. package/dist/Error-Dtw6yxkf.mjs +1 -0
  55. package/dist/Error-Dtw6yxkf.mjs.map +1 -0
  56. package/dist/ErrorBoundary-CsdOcnJ9.mjs +1 -0
  57. package/dist/ErrorBoundary-CsdOcnJ9.mjs.map +1 -0
  58. package/dist/{ExportCsvAction-BV69DnpC.mjs → ExportCsvAction-C9KWH3Az.mjs} +2 -1
  59. package/dist/ExportCsvAction-C9KWH3Az.mjs.map +1 -0
  60. package/dist/GlobalAccountFilter-BhzR5Vb1.mjs +1 -0
  61. package/dist/GlobalAccountFilter-BhzR5Vb1.mjs.map +1 -0
  62. package/dist/GlobalCopyApi-wcnDUzMV.mjs +1 -0
  63. package/dist/GlobalCopyApi-wcnDUzMV.mjs.map +1 -0
  64. package/dist/GoalsUtil-C9EnLWvC.mjs +1 -0
  65. package/dist/GoalsUtil-C9EnLWvC.mjs.map +1 -0
  66. package/dist/HeaderCell-P8w6CmfO.mjs +1 -0
  67. package/dist/HeaderCell-P8w6CmfO.mjs.map +1 -0
  68. package/dist/Help-CkQTjORd.mjs +1 -0
  69. package/dist/Help-CkQTjORd.mjs.map +1 -0
  70. package/dist/{Help-BMCejaQr.mjs → Help-aERwhajy.mjs} +3 -2
  71. package/dist/Help-aERwhajy.mjs.map +1 -0
  72. package/dist/IconBacking-DgT8DCeh.mjs +1 -0
  73. package/dist/IconBacking-DgT8DCeh.mjs.map +1 -0
  74. package/dist/InformationTooltip-4su8bn1e.mjs +1 -0
  75. package/dist/InformationTooltip-4su8bn1e.mjs.map +1 -0
  76. package/dist/InvestmentUtil-BItV7uEs.mjs +1 -0
  77. package/dist/InvestmentUtil-BItV7uEs.mjs.map +1 -0
  78. package/dist/LineChart-CUfiH86G.mjs +1 -0
  79. package/dist/LineChart-CUfiH86G.mjs.map +1 -0
  80. package/dist/ListItemAction-BqUCLj_w.mjs +1 -0
  81. package/dist/ListItemAction-BqUCLj_w.mjs.map +1 -0
  82. package/dist/ListItemRow-kH1rn8Xu.mjs +1 -0
  83. package/dist/ListItemRow-kH1rn8Xu.mjs.map +1 -0
  84. package/dist/ListItemWrapper-DRse79Iu.mjs +44 -0
  85. package/dist/ListItemWrapper-DRse79Iu.mjs.map +1 -0
  86. package/dist/Loader-CxeBwuPG.mjs +1 -0
  87. package/dist/Loader-CxeBwuPG.mjs.map +1 -0
  88. package/dist/Localization-DnoVyBNK.mjs +1 -0
  89. package/dist/Localization-DnoVyBNK.mjs.map +1 -0
  90. package/dist/{ManageIncome-BadwsHRL.mjs → ManageIncome-Dcsnnz86.mjs} +9 -8
  91. package/dist/ManageIncome-Dcsnnz86.mjs.map +1 -0
  92. package/dist/MicroWidgetContainer-B2NnKBgW.mjs +1 -0
  93. package/dist/MicroWidgetContainer-B2NnKBgW.mjs.map +1 -0
  94. package/dist/MiniWidgetContainer-Bmv_WeUd.mjs +1 -0
  95. package/dist/MiniWidgetContainer-Bmv_WeUd.mjs.map +1 -0
  96. package/dist/NetWorthUtils-DfSH3z70.mjs +1 -0
  97. package/dist/NetWorthUtils-DfSH3z70.mjs.map +1 -0
  98. package/dist/Notification-DTNYSd8P.mjs +1 -0
  99. package/dist/Notification-DTNYSd8P.mjs.map +1 -0
  100. package/dist/NotificationSettings-CW7okUrk.mjs +1 -0
  101. package/dist/NotificationSettings-CW7okUrk.mjs.map +1 -0
  102. package/dist/NotificationUtils-BRGFTePr.mjs +1 -0
  103. package/dist/NotificationUtils-BRGFTePr.mjs.map +1 -0
  104. package/dist/NumberFormatting--XMeeBfr.mjs +1 -0
  105. package/dist/NumberFormatting--XMeeBfr.mjs.map +1 -0
  106. package/dist/OriginalBalanceAction-YrvxBYAl.mjs +1 -0
  107. package/dist/OriginalBalanceAction-YrvxBYAl.mjs.map +1 -0
  108. package/dist/{RecurringSettings-CGZiV-Ie.mjs → RecurringSettings-D8hBbXV_.mjs} +2 -1
  109. package/dist/RecurringSettings-D8hBbXV_.mjs.map +1 -0
  110. package/dist/RecurringTransactionsUtil-CHWmqvW5.mjs +1 -0
  111. package/dist/RecurringTransactionsUtil-CHWmqvW5.mjs.map +1 -0
  112. package/dist/ResponsiveButton-CC9F_Ezk.mjs +1 -0
  113. package/dist/ResponsiveButton-CC9F_Ezk.mjs.map +1 -0
  114. package/dist/SearchBox-Cpgu_gdO.mjs +1 -0
  115. package/dist/SearchBox-Cpgu_gdO.mjs.map +1 -0
  116. package/dist/Select-CSpkK5cR.mjs +1 -0
  117. package/dist/Select-CSpkK5cR.mjs.map +1 -0
  118. package/dist/SelectionBox-B4xELRgp.mjs +1 -0
  119. package/dist/SelectionBox-B4xELRgp.mjs.map +1 -0
  120. package/dist/SingleSegmentDonut-7Uy6VEld.mjs +1 -0
  121. package/dist/SingleSegmentDonut-7Uy6VEld.mjs.map +1 -0
  122. package/dist/Sizes-DISGrlUg.mjs +1 -0
  123. package/dist/Sizes-DISGrlUg.mjs.map +1 -0
  124. package/dist/SkeletonLoader-BaNboJjD.mjs +1 -0
  125. package/dist/SkeletonLoader-BaNboJjD.mjs.map +1 -0
  126. package/dist/SpendingData-Fii_xATx.mjs +1 -0
  127. package/dist/SpendingData-Fii_xATx.mjs.map +1 -0
  128. package/dist/SpendingLegend-CxvNOg3c.mjs +1 -0
  129. package/dist/SpendingLegend-CxvNOg3c.mjs.map +1 -0
  130. package/dist/StatusBar-CPfSXe80.mjs +1 -0
  131. package/dist/StatusBar-CPfSXe80.mjs.map +1 -0
  132. package/dist/TabContentContainer-B0eYJP5p.mjs +1 -0
  133. package/dist/TabContentContainer-B0eYJP5p.mjs.map +1 -0
  134. package/dist/ToggleListItem-Dl1lXNwj.mjs +1 -0
  135. package/dist/ToggleListItem-Dl1lXNwj.mjs.map +1 -0
  136. package/dist/{TransactionDetails-DQ_eE7M4.mjs → TransactionDetails-roZ5xLq8.mjs} +2 -1
  137. package/dist/TransactionDetails-roZ5xLq8.mjs.map +1 -0
  138. package/dist/TransactionUtils-BphBJBbU.mjs +1 -0
  139. package/dist/TransactionUtils-BphBJBbU.mjs.map +1 -0
  140. package/dist/TrendsUtil-D9z3kIj_.mjs +1 -0
  141. package/dist/TrendsUtil-D9z3kIj_.mjs.map +1 -0
  142. package/dist/UserStore-C1fdL3Iu.mjs +1 -0
  143. package/dist/UserStore-C1fdL3Iu.mjs.map +1 -0
  144. package/dist/{ViewMoreMicroCard-fnwE0hqd.mjs → ViewMoreMicroCard-Dxghxphh.mjs} +352 -355
  145. package/dist/ViewMoreMicroCard-Dxghxphh.mjs.map +1 -0
  146. package/dist/WidgetContainer-DJnp6t6c.mjs +1 -0
  147. package/dist/WidgetContainer-DJnp6t6c.mjs.map +1 -0
  148. package/dist/accounts/index.es.js +5 -4
  149. package/dist/accounts/index.es.js.map +1 -0
  150. package/dist/analytics/index.es.js +1 -0
  151. package/dist/analytics/index.es.js.map +1 -0
  152. package/dist/budgets/index.es.js +4 -3
  153. package/dist/budgets/index.es.js.map +1 -0
  154. package/dist/cashflow/index.es.js +5 -4
  155. package/dist/cashflow/index.es.js.map +1 -0
  156. package/dist/categories/index.es.js +1 -0
  157. package/dist/categories/index.es.js.map +1 -0
  158. package/dist/common/components/ListItemWrapper.d.ts +2 -1
  159. package/dist/common/index.es.js +2 -1
  160. package/dist/common/index.es.js.map +1 -0
  161. package/dist/core/index.es.js +1 -0
  162. package/dist/core/index.es.js.map +1 -0
  163. package/dist/dashboard/index.es.js +1 -0
  164. package/dist/dashboard/index.es.js.map +1 -0
  165. package/dist/debts/index.es.js +64 -63
  166. package/dist/debts/index.es.js.map +1 -0
  167. package/dist/finstrong/index.es.js +6 -5
  168. package/dist/finstrong/index.es.js.map +1 -0
  169. package/dist/goals/index.es.js +1 -0
  170. package/dist/goals/index.es.js.map +1 -0
  171. package/dist/help/index.es.js +2 -1
  172. package/dist/help/index.es.js.map +1 -0
  173. package/dist/hooks-97sNJ_lf.mjs +1 -0
  174. package/dist/hooks-97sNJ_lf.mjs.map +1 -0
  175. package/dist/insights/index.es.js +3 -2
  176. package/dist/insights/index.es.js.map +1 -0
  177. package/dist/investments/index.es.js +1 -0
  178. package/dist/investments/index.es.js.map +1 -0
  179. package/dist/merchants/index.es.js +1 -0
  180. package/dist/merchants/index.es.js.map +1 -0
  181. package/dist/microinsights/index.es.js +2 -1
  182. package/dist/microinsights/index.es.js.map +1 -0
  183. package/dist/networth/index.es.js +1 -0
  184. package/dist/networth/index.es.js.map +1 -0
  185. package/dist/notifications/index.es.js +1 -0
  186. package/dist/notifications/index.es.js.map +1 -0
  187. package/dist/recurringtransactions/index.es.js +152 -138
  188. package/dist/recurringtransactions/index.es.js.map +1 -0
  189. package/dist/settings/index.es.js +2 -1
  190. package/dist/settings/index.es.js.map +1 -0
  191. package/dist/spending/index.es.js +3 -2
  192. package/dist/spending/index.es.js.map +1 -0
  193. package/dist/transactions/components/shared/transactionlist/TransactionRow.d.ts +1 -0
  194. package/dist/transactions/index.es.js +6 -5
  195. package/dist/transactions/index.es.js.map +1 -0
  196. package/dist/trends/index.es.js +5 -4
  197. package/dist/trends/index.es.js.map +1 -0
  198. package/dist/useAccountDisplayName-BsiXA0qf.mjs +1 -0
  199. package/dist/useAccountDisplayName-BsiXA0qf.mjs.map +1 -0
  200. package/dist/useAriaLive-MkYebyUR.mjs +1 -0
  201. package/dist/useAriaLive-MkYebyUR.mjs.map +1 -0
  202. package/dist/useDimensions-CeDR9V8N.mjs +1 -0
  203. package/dist/useDimensions-CeDR9V8N.mjs.map +1 -0
  204. package/dist/useInsightsEnabled-D5Sdm0TJ.mjs +1 -0
  205. package/dist/useInsightsEnabled-D5Sdm0TJ.mjs.map +1 -0
  206. package/dist/useScreenSize-mWpmnh5w.mjs +1 -0
  207. package/dist/useScreenSize-mWpmnh5w.mjs.map +1 -0
  208. package/dist/useWidgetLoadTimer-B0tB-yzL.mjs +1 -0
  209. package/dist/useWidgetLoadTimer-B0tB-yzL.mjs.map +1 -0
  210. package/package.json +6 -6
  211. package/dist/ListItemWrapper-BHIbqx7E.mjs +0 -42
  212. package/dist/insights/components/insights/P2pCategorization/_tests_/P2pCategorizationMultipleTransaction.test.d.ts +0 -0
  213. package/dist/insights/components/insights/P2pCategorization/_tests_/P2pCategorizationSingleTransaction.test.d.ts +0 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"InvestmentUtil-BItV7uEs.mjs","sources":["../src/core/constants/Investments.ts","../src/core/utils/InvestmentUtil.ts"],"sourcesContent":["export enum AnalysisType {\n Stocks = 'stocks',\n Bonds = 'bonds',\n}\n\nexport const EquityClassificationTypes = {\n UNKNOWN: 0,\n LARGE_VALUE: 1,\n LARGE_CORE: 2,\n LARGE_GROWTH: 3,\n MID_VALUE: 4,\n MID_CORE: 5,\n MID_GROWTH: 6,\n SMALL_VALUE: 7,\n SMALL_CORE: 8,\n SMALL_GROWTH: 9,\n}\n\nexport const EquityClassificationValues = {\n 0: 'UNKNOWN',\n 1: 'LARGE_VALUE',\n 2: 'LARGE_CORE',\n 3: 'LARGE_GROWTH',\n 4: 'MID_VALUE',\n 5: 'MID_CORE',\n 6: 'MID_GROWTH',\n 7: 'SMALL_VALUE',\n 8: 'SMALL_CORE',\n 9: 'SMALL_GROWTH',\n}\n\nexport const FixedIncomeClassificationTypes = {\n UNKNOWN: 0,\n HIGH_LIMITED: 1,\n HIGH_MODERATE: 2,\n HIGH_EXTENSIVE: 3,\n MEDIUM_LIMITED: 4,\n MEDIUM_MODERATE: 5,\n MEDIUM_EXTENSIVE: 6,\n LOW_LIMITED: 7,\n LOW_MODERATE: 8,\n LOW_EXTENSIVE: 9,\n}\n\nexport const FixedIncomeClassificationValues = {\n 0: 'UNKNOWN',\n 1: 'HIGH_LIMITED',\n 2: 'HIGH_MODERATE',\n 3: 'HIGH_EXTENSIVE',\n 4: 'MEDIUM_LIMITED',\n 5: 'MEDIUM_MODERATE',\n 6: 'MEDIUM_EXTENSIVE',\n 7: 'LOW_LIMITED',\n 8: 'LOW_MODERATE',\n 9: 'LOW_EXTENSIVE',\n}\n","import numeral from 'numeral'\n\nimport type { Holding } from '../types'\n\nimport {\n AnalysisType,\n EquityClassificationTypes,\n EquityClassificationValues,\n FixedIncomeClassificationTypes,\n FixedIncomeClassificationValues,\n} from '../constants/Investments'\n\ntype WeightMap = Record<string, number>\n\nexport const createGroups = (classificationObj: Record<number, string>, groupSize = 3) => {\n const keys = Object.keys(classificationObj)\n .map(Number)\n .filter((k) => k !== 0)\n .sort((a, b) => a - b)\n\n const groups = []\n for (let i = 0; i < keys.length; i += groupSize) {\n groups.push(keys.slice(i, i + groupSize).map((key) => classificationObj[key]))\n }\n return groups\n}\n\nexport const bondGroups = createGroups(FixedIncomeClassificationValues)\nexport const stockGroups = createGroups(EquityClassificationValues)\n\nexport const analysisChartData = (holdings: Holding[]) => {\n const stocks = getValidHoldings(holdings, extractStockWeight)\n const bonds = getValidHoldings(holdings, extractBondWeight)\n\n const processGroupData = (group: Holding[], extractValueFn: (holding: Holding) => WeightMap) => {\n const totalValue = group.reduce((acc, holding) => acc + getHoldingValue(holding), 0)\n const groupValues = group.reduce((acc, holding) => {\n const value = extractValueFn(holding)\n Object.keys(value).forEach((key) => (acc[key] = (acc[key] || 0) + value[key]))\n return acc\n }, {} as WeightMap)\n\n return Object.fromEntries(\n Object.entries(groupValues).map(([key, value]) => [key, (value / totalValue) * 100]),\n )\n }\n\n const data = {\n stocks: processGroupData(stocks, extractStockValueFromWeight),\n bonds: processGroupData(bonds, extractBondValueFromWeight),\n }\n\n return data\n}\n\nexport const analysisDetailsData = (holdings: Holding[]) => {\n const stocks = holdings.filter((holding) => !isNaN(holding.equity_classification))\n const bonds = holdings.filter((holding) => !isNaN(holding.fixed_income_classification))\n\n const aggregateValues = (\n holdings: Holding[],\n extractValueFn: (holding: Holding) => WeightMap,\n classificationTypes: Record<string, number>,\n ) => {\n return holdings.reduce((acc, holding) => {\n const values = extractValueFn(holding)\n Object.keys(classificationTypes).forEach((sector) => {\n acc[sector] = (acc[sector] || 0) + (values[sector] || 0)\n })\n return acc\n }, {} as WeightMap)\n }\n\n return {\n stocks: aggregateValues(stocks, extractStockValueFromWeight, EquityClassificationTypes),\n bonds: aggregateValues(bonds, extractBondValueFromWeight, FixedIncomeClassificationTypes),\n }\n}\n\nexport const calculateWeightedValue = (weights: WeightMap, value: number): WeightMap => {\n return Object.fromEntries(\n Object.entries(weights).map(([key, weight]) => [key, (weight * value) / 100]),\n )\n}\n\nconst extractBondValueFromWeight = (bond: Holding) =>\n extractValueFromWeight(bond, extractBondWeight, FixedIncomeClassificationValues)\n\nexport const extractBondWeight = (bond: Holding): WeightMap => {\n const classificationKey = bond.fixed_income_classification\n return {\n [FixedIncomeClassificationValues[\n classificationKey as keyof typeof FixedIncomeClassificationValues\n ]]: 100,\n }\n}\n\nconst extractStockValueFromWeight = (stock: Holding) =>\n extractValueFromWeight(stock, extractStockWeight, EquityClassificationValues)\n\nexport const extractStockWeight = (stock: Holding): WeightMap => {\n const {\n large_core_weight,\n large_growth_weight,\n large_value_weight,\n mid_core_weight,\n mid_growth_weight,\n mid_value_weight,\n small_core_weight,\n small_growth_weight,\n small_value_weight,\n unknown_weight,\n equity_classification,\n } = stock\n\n const data: WeightMap = {\n LARGE_CORE: large_core_weight ?? 0,\n LARGE_GROWTH: large_growth_weight ?? 0,\n LARGE_VALUE: large_value_weight ?? 0,\n MID_CORE: mid_core_weight ?? 0,\n MID_GROWTH: mid_growth_weight ?? 0,\n MID_VALUE: mid_value_weight ?? 0,\n SMALL_CORE: small_core_weight ?? 0,\n SMALL_GROWTH: small_growth_weight ?? 0,\n SMALL_VALUE: small_value_weight ?? 0,\n UNKNOWN: unknown_weight ?? 0,\n }\n\n if (sumValues(data) === 0 && equity_classification !== undefined) {\n const key =\n EquityClassificationValues[equity_classification as keyof typeof EquityClassificationValues]\n return { [key]: 100 }\n }\n\n return data\n}\n\nexport const extractValueFromWeight = (\n holding: Holding,\n extractWeightFn: (h: Holding) => WeightMap,\n classificationValues: Record<string, string>,\n): WeightMap => {\n const weights = extractWeightFn(holding)\n const value = getHoldingValue(holding)\n const weightedValues = calculateWeightedValue(weights, value)\n\n if (sumValues(weightedValues) === 0) {\n const classificationKey = String(\n holding.equity_classification ?? holding.fixed_income_classification,\n )\n\n if (classificationKey in classificationValues) {\n return { [classificationValues[classificationKey]]: value }\n } else {\n console.error(`Invalid classification key: ${classificationKey}`)\n }\n }\n\n return weightedValues\n}\n\nexport const formatKey = (key: string): string =>\n key\n .split('_')\n .map((word) => word.charAt(0).toUpperCase() + word.slice(1).toLowerCase())\n .join(' ')\n\nexport const formatPercent = (value: number): string =>\n value >= 1 ? `${numeral(value).format('0')}%` : '< 1%'\n\nexport const getHoldingValue = (holding: Holding): number =>\n holding.calculated_market_value ?? holding.market_value\n\nexport const getValidHoldings = (\n holdings: Holding[],\n extractWeightFn: (holding: Holding) => WeightMap,\n): Holding[] => {\n return holdings.filter((holding) => {\n const weight = extractWeightFn(holding)\n const total = sumValues(weight)\n return total > 80 && total < 120\n })\n}\n\nexport const mapDataToPercentageGrid = (\n data: Record<AnalysisType, Record<string, number>>,\n analysisType: AnalysisType,\n): string[][] => {\n const groups = analysisType === AnalysisType.Stocks ? stockGroups : bondGroups\n\n const selected = data[analysisType]\n if (!selected || !selected || Object.keys(selected).length === 0)\n return groups.map((group) => group.map(() => '0%'))\n\n return groups.map((group) => group.map((key) => formatPercent(selected[key] ?? 0)))\n}\n\nexport const sumValues = (obj: WeightMap): number =>\n Object.values(obj).reduce((acc, val) => acc + val, 0)\n"],"names":["AnalysisType","EquityClassificationTypes","EquityClassificationValues","FixedIncomeClassificationTypes","FixedIncomeClassificationValues","createGroups","classificationObj","groupSize","keys","k","a","b","groups","i","key","bondGroups","stockGroups","analysisChartData","holdings","stocks","getValidHoldings","extractStockWeight","bonds","extractBondWeight","processGroupData","group","extractValueFn","totalValue","acc","holding","getHoldingValue","groupValues","value","extractStockValueFromWeight","extractBondValueFromWeight","analysisDetailsData","aggregateValues","classificationTypes","values","sector","calculateWeightedValue","weights","weight","bond","extractValueFromWeight","classificationKey","stock","large_core_weight","large_growth_weight","large_value_weight","mid_core_weight","mid_growth_weight","mid_value_weight","small_core_weight","small_growth_weight","small_value_weight","unknown_weight","equity_classification","data","sumValues","extractWeightFn","classificationValues","weightedValues","formatKey","word","formatPercent","numeral","total","mapDataToPercentageGrid","analysisType","selected","obj","val"],"mappings":";AAAO,IAAKA,sBAAAA,OACVA,EAAA,SAAS,UACTA,EAAA,QAAQ,SAFEA,IAAAA,KAAA,CAAA,CAAA;AAKL,MAAMC,IAA4B;AAAA,EACvC,SAAS;AAAA,EACT,aAAa;AAAA,EACb,YAAY;AAAA,EACZ,cAAc;AAAA,EACd,WAAW;AAAA,EACX,UAAU;AAAA,EACV,YAAY;AAAA,EACZ,aAAa;AAAA,EACb,YAAY;AAAA,EACZ,cAAc;AAChB,GAEaC,IAA6B;AAAA,EACxC,GAAG;AAAA,EACH,GAAG;AAAA,EACH,GAAG;AAAA,EACH,GAAG;AAAA,EACH,GAAG;AAAA,EACH,GAAG;AAAA,EACH,GAAG;AAAA,EACH,GAAG;AAAA,EACH,GAAG;AAAA,EACH,GAAG;AACL,GAEaC,IAAiC;AAAA,EAC5C,SAAS;AAAA,EACT,cAAc;AAAA,EACd,eAAe;AAAA,EACf,gBAAgB;AAAA,EAChB,gBAAgB;AAAA,EAChB,iBAAiB;AAAA,EACjB,kBAAkB;AAAA,EAClB,aAAa;AAAA,EACb,cAAc;AAAA,EACd,eAAe;AACjB,GAEaC,IAAkC;AAAA,EAC7C,GAAG;AAAA,EACH,GAAG;AAAA,EACH,GAAG;AAAA,EACH,GAAG;AAAA,EACH,GAAG;AAAA,EACH,GAAG;AAAA,EACH,GAAG;AAAA,EACH,GAAG;AAAA,EACH,GAAG;AAAA,EACH,GAAG;AACL,GCzCaC,IAAe,CAACC,GAA2CC,IAAY,MAAM;AACxF,QAAMC,IAAO,OAAO,KAAKF,CAAiB,EACvC,IAAI,MAAM,EACV,OAAO,CAACG,MAAMA,MAAM,CAAC,EACrB,KAAK,CAACC,GAAGC,MAAMD,IAAIC,CAAC,GAEjBC,IAAS,CAAA;AACf,WAASC,IAAI,GAAGA,IAAIL,EAAK,QAAQK,KAAKN;AACpC,IAAAK,EAAO,KAAKJ,EAAK,MAAMK,GAAGA,IAAIN,CAAS,EAAE,IAAI,CAACO,MAAQR,EAAkBQ,CAAG,CAAC,CAAC;AAE/E,SAAOF;AACT,GAEaG,IAAaV,EAAaD,CAA+B,GACzDY,IAAcX,EAAaH,CAA0B,GAErDe,IAAoB,CAACC,MAAwB;AACxD,QAAMC,IAASC,EAAiBF,GAAUG,CAAkB,GACtDC,IAAQF,EAAiBF,GAAUK,CAAiB,GAEpDC,IAAmB,CAACC,GAAkBC,MAAoD;AAC9F,UAAMC,IAAaF,EAAM,OAAO,CAACG,GAAKC,MAAYD,IAAME,EAAgBD,CAAO,GAAG,CAAC,GAC7EE,IAAcN,EAAM,OAAO,CAACG,GAAKC,MAAY;AACjD,YAAMG,IAAQN,EAAeG,CAAO;AACpC,oBAAO,KAAKG,CAAK,EAAE,QAAQ,CAAClB,MAASc,EAAId,CAAG,KAAKc,EAAId,CAAG,KAAK,KAAKkB,EAAMlB,CAAG,CAAE,GACtEc;AAAA,IACT,GAAG,CAAA,CAAe;AAElB,WAAO,OAAO;AAAA,MACZ,OAAO,QAAQG,CAAW,EAAE,IAAI,CAAC,CAACjB,GAAKkB,CAAK,MAAM,CAAClB,GAAMkB,IAAQL,IAAc,GAAG,CAAC;AAAA,IAAA;AAAA,EAEvF;AAOA,SALa;AAAA,IACX,QAAQH,EAAiBL,GAAQc,CAA2B;AAAA,IAC5D,OAAOT,EAAiBF,GAAOY,CAA0B;AAAA,EAAA;AAI7D,GAEaC,IAAsB,CAACjB,MAAwB;AAC1D,QAAMC,IAASD,EAAS,OAAO,CAACW,MAAY,CAAC,MAAMA,EAAQ,qBAAqB,CAAC,GAC3EP,IAAQJ,EAAS,OAAO,CAACW,MAAY,CAAC,MAAMA,EAAQ,2BAA2B,CAAC,GAEhFO,IAAkB,CACtBlB,GACAQ,GACAW,MAEOnB,EAAS,OAAO,CAACU,GAAKC,MAAY;AACvC,UAAMS,IAASZ,EAAeG,CAAO;AACrC,kBAAO,KAAKQ,CAAmB,EAAE,QAAQ,CAACE,MAAW;AACnD,MAAAX,EAAIW,CAAM,KAAKX,EAAIW,CAAM,KAAK,MAAMD,EAAOC,CAAM,KAAK;AAAA,IACxD,CAAC,GACMX;AAAA,EACT,GAAG,CAAA,CAAe;AAGpB,SAAO;AAAA,IACL,QAAQQ,EAAgBjB,GAAQc,GAA6BhC,CAAyB;AAAA,IACtF,OAAOmC,EAAgBd,GAAOY,GAA4B/B,CAA8B;AAAA,EAAA;AAE5F,GAEaqC,IAAyB,CAACC,GAAoBT,MAClD,OAAO;AAAA,EACZ,OAAO,QAAQS,CAAO,EAAE,IAAI,CAAC,CAAC3B,GAAK4B,CAAM,MAAM,CAAC5B,GAAM4B,IAASV,IAAS,GAAG,CAAC;AAAA,GAI1EE,IAA6B,CAACS,MAClCC,EAAuBD,GAAMpB,GAAmBnB,CAA+B,GAEpEmB,IAAoB,CAACoB,MAA6B;AAC7D,QAAME,IAAoBF,EAAK;AAC/B,SAAO;AAAA,IACL,CAACvC,EACCyC,CACF,CAAC,GAAG;AAAA,EAAA;AAER,GAEMZ,IAA8B,CAACa,MACnCF,EAAuBE,GAAOzB,GAAoBnB,CAA0B,GAEjEmB,IAAqB,CAACyB,MAA8B;AAC/D,QAAM;AAAA,IACJ,mBAAAC;AAAA,IACA,qBAAAC;AAAA,IACA,oBAAAC;AAAA,IACA,iBAAAC;AAAA,IACA,mBAAAC;AAAA,IACA,kBAAAC;AAAA,IACA,mBAAAC;AAAA,IACA,qBAAAC;AAAA,IACA,oBAAAC;AAAA,IACA,gBAAAC;AAAA,IACA,uBAAAC;AAAA,EAAA,IACEX,GAEEY,IAAkB;AAAA,IACtB,YAAYX,KAAqB;AAAA,IACjC,cAAcC,KAAuB;AAAA,IACrC,aAAaC,KAAsB;AAAA,IACnC,UAAUC,KAAmB;AAAA,IAC7B,YAAYC,KAAqB;AAAA,IACjC,WAAWC,KAAoB;AAAA,IAC/B,YAAYC,KAAqB;AAAA,IACjC,cAAcC,KAAuB;AAAA,IACrC,aAAaC,KAAsB;AAAA,IACnC,SAASC,KAAkB;AAAA,EAAA;AAG7B,SAAIG,EAAUD,CAAI,MAAM,KAAKD,MAA0B,SAG9C,EAAE,CADPvD,EAA2BuD,CAAgE,CAChF,GAAG,IAAA,IAGXC;AACT,GAEad,IAAyB,CACpCf,GACA+B,GACAC,MACc;AACd,QAAMpB,IAAUmB,EAAgB/B,CAAO,GACjCG,IAAQF,EAAgBD,CAAO,GAC/BiC,IAAiBtB,EAAuBC,GAAST,CAAK;AAE5D,MAAI2B,EAAUG,CAAc,MAAM,GAAG;AACnC,UAAMjB,IAAoB;AAAA,MACxBhB,EAAQ,yBAAyBA,EAAQ;AAAA,IAAA;AAG3C,QAAIgB,KAAqBgB;AACvB,aAAO,EAAE,CAACA,EAAqBhB,CAAiB,CAAC,GAAGb,EAAA;AAEpD,YAAQ,MAAM,+BAA+Ba,CAAiB,EAAE;AAAA,EAEpE;AAEA,SAAOiB;AACT,GAEaC,IAAY,CAACjD,MACxBA,EACG,MAAM,GAAG,EACT,IAAI,CAACkD,MAASA,EAAK,OAAO,CAAC,EAAE,gBAAgBA,EAAK,MAAM,CAAC,EAAE,YAAA,CAAa,EACxE,KAAK,GAAG,GAEAC,IAAgB,CAACjC,MAC5BA,KAAS,IAAI,GAAGkC,EAAQlC,CAAK,EAAE,OAAO,GAAG,CAAC,MAAM,QAErCF,IAAkB,CAACD,MAC9BA,EAAQ,2BAA2BA,EAAQ,cAEhCT,IAAmB,CAC9BF,GACA0C,MAEO1C,EAAS,OAAO,CAACW,MAAY;AAClC,QAAMa,IAASkB,EAAgB/B,CAAO,GAChCsC,IAAQR,EAAUjB,CAAM;AAC9B,SAAOyB,IAAQ,MAAMA,IAAQ;AAC/B,CAAC,GAGUC,IAA0B,CACrCV,GACAW,MACe;AACf,QAAMzD,IAASyD,MAAiBrE,EAAa,SAASgB,IAAcD,GAE9DuD,IAAWZ,EAAKW,CAAY;AAClC,SAAI,CAACC,KAAY,CAACA,KAAY,OAAO,KAAKA,CAAQ,EAAE,WAAW,IACtD1D,EAAO,IAAI,CAACa,MAAUA,EAAM,IAAI,MAAM,IAAI,CAAC,IAE7Cb,EAAO,IAAI,CAACa,MAAUA,EAAM,IAAI,CAACX,MAAQmD,EAAcK,EAASxD,CAAG,KAAK,CAAC,CAAC,CAAC;AACpF,GAEa6C,IAAY,CAACY,MACxB,OAAO,OAAOA,CAAG,EAAE,OAAO,CAAC3C,GAAK4C,MAAQ5C,IAAM4C,GAAK,CAAC;"}
@@ -610,3 +610,4 @@ const ne = ({
610
610
  export {
611
611
  ne as L
612
612
  };
613
+ //# sourceMappingURL=LineChart-CUfiH86G.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"LineChart-CUfiH86G.mjs","sources":["../src/common/components/charts/linechart/utils/markerShapes.ts","../src/common/components/charts/linechart/CustomLegend.tsx","../src/common/components/charts/linechart/CustomLine.tsx","../src/common/components/charts/linechart/CustomMark.tsx","../src/common/components/charts/linechart/CustomTooltip.tsx","../src/common/components/charts/LineChart.tsx"],"sourcesContent":["export type MarkerShape = 'circle' | 'square' | 'wye' | 'star' | 'cross' | 'triangle' | 'diamond'\n\n// SVG path data for each shape, centered at origin, sized to match current ~9px circle\nexport const MARKER_SHAPE_PATHS: Record<MarkerShape, string> = {\n circle: 'M4.514,0A4.514,4.514,0,1,1,-4.514,0A4.514,4.514,0,1,1,4.514,0',\n square: 'M-4,-4L4,-4L4,4L-4,4Z',\n wye: 'M0.6,0.6L0.6,4.5L-0.6,4.5L-0.6,0.6L-4,2.6L-3.4,1.5L-0.6,-0.1L-3.4,-1.5L-4,-2.6L-0.6,-0.6L-0.6,-4.5L0.6,-4.5L0.6,-0.6L4,-2.6L3.4,-1.5L0.6,-0.1L3.4,1.5L4,2.6L0.6,0.6Z',\n star: 'M0,-5L1.1,-1.5L4.8,-1.5L1.8,0.9L2.9,4.5L0,2.2L-2.9,4.5L-1.8,0.9L-4.8,-1.5L-1.1,-1.5Z',\n cross:\n 'M-1.5,-5L1.5,-5L1.5,-1.5L5,-1.5L5,1.5L1.5,1.5L1.5,5L-1.5,5L-1.5,1.5L-5,1.5L-5,-1.5L-1.5,-1.5Z',\n triangle: 'M0,-5L4.33,3.5L-4.33,3.5Z',\n diamond: 'M0,-5.5L3.9,0L0,5.5L-3.9,0Z',\n}\n\n// Default shape sequence assigned to series by index\nconst DEFAULT_SHAPES: MarkerShape[] = [\n 'circle',\n 'square',\n 'wye',\n 'star',\n 'cross',\n 'triangle',\n 'diamond',\n]\n\nexport function getMarkerShape(seriesIndex: number): MarkerShape {\n return DEFAULT_SHAPES[seriesIndex % DEFAULT_SHAPES.length]\n}\n","import { observer } from 'mobx-react-lite'\n\nimport Box from '@mui/material/Box'\nimport Stack from '@mui/material/Stack'\nimport { type SxProps } from '@mui/material/styles'\nimport { Text } from '@mxenabled/mxui'\n\nimport { useGlobalCopyStore } from '../../../../common'\nimport { LineChartLabel } from '../LineChart'\nimport { getMarkerShape, MARKER_SHAPE_PATHS } from './utils/markerShapes'\nimport { formatCurrency } from '../../../../core/utils/NumberFormatting'\n\nexport const CustomLegendLabel = ({\n label,\n customLegendVariant,\n}: {\n label: LineChartLabel\n customLegendVariant?: string\n}) => {\n const variant = (customLegendVariant as any) || 'body2'\n\n if (typeof label === 'string') {\n return <Text variant={variant}>{label}</Text>\n }\n if (typeof label === 'object' && label.amount !== undefined && label.label) {\n return (\n <>\n <Text variant={variant}>{label.label}</Text>\n <Text bold={true} sx={{ marginLeft: 8 }} variant={variant}>\n {formatCurrency(label.amount, '0,0')}\n </Text>\n </>\n )\n }\n return null\n}\n\nconst CustomLegend = ({\n average,\n customLegendVariant,\n customLegendBoxSx,\n labels = [],\n series,\n style,\n title,\n valueFormatterString,\n}: {\n average?: number\n customLegendVariant?: string\n customLegendBoxSx?: SxProps\n labels?: LineChartLabel[]\n series: any[]\n title?: string\n style: any\n valueFormatterString?: string\n}) => {\n const { common: commonCopy } = useGlobalCopyStore()\n const variant = (customLegendVariant as any) || 'body2'\n\n return (\n <Stack style={{ flexDirection: 'row', gap: 24, ...style }}>\n {series.map((s, index) => {\n const label = labels[index]\n // Skip series without a label\n return label ? (\n <Stack\n key={index}\n style={{ alignItems: 'center', flexDirection: 'row', flexWrap: 'wrap' }}\n >\n {customLegendBoxSx !== undefined ? (\n <Box\n sx={{\n width: 10,\n height: 10,\n backgroundColor: s.color,\n marginRight: 8,\n ...customLegendBoxSx,\n }}\n />\n ) : (\n <svg\n aria-hidden=\"true\"\n height={14}\n style={{ marginRight: 8, flexShrink: 0 }}\n viewBox=\"-6 -6 12 12\"\n width={14}\n >\n <path\n d={MARKER_SHAPE_PATHS[getMarkerShape(index)]}\n fill={s.color}\n stroke={s.color}\n strokeWidth={1}\n />\n </svg>\n )}\n <CustomLegendLabel customLegendVariant={customLegendVariant} label={label} />\n </Stack>\n ) : null\n })}\n {average !== undefined && (\n <Stack sx={{ alignItems: 'center', flexDirection: 'row' }}>\n <Text bold={true} sx={{ marginRight: 8 }} variant={variant}>\n – –\n </Text>\n <Text variant={variant}>{title ? title : commonCopy.average}&nbsp;&nbsp;</Text>\n <Text bold={true} variant={variant}>\n {valueFormatterString ? formatCurrency(average, valueFormatterString) : average}\n </Text>\n </Stack>\n )}\n </Stack>\n )\n}\n\nexport default observer(CustomLegend)\n","import React from 'react'\n\nimport type { AnimatedLineProps } from '@mui/x-charts'\n\ninterface CustomLineProps extends AnimatedLineProps {\n lineColor?: string\n}\n\nexport const CustomLine: React.FC<CustomLineProps> = (props) => {\n return (\n <>\n <clipPath id={props.id}>\n <rect height={props.height} width={props.width} x=\"0\" y=\"0\" />\n </clipPath>\n <g>\n <path\n cursor=\"unset\"\n d={props.d}\n style={{\n strokeWidth: 2,\n strokeLinejoin: 'round',\n fill: 'none',\n stroke: props.lineColor ? props.lineColor : props.stroke,\n transition: 'opacity 0.2s ease-in, stroke 0.2s ease-in',\n opacity: 1,\n }}\n />\n </g>\n </>\n )\n}\n","import React from 'react'\n\nimport { useTheme } from '@mui/material/styles'\nimport useMediaQuery from '@mui/material/useMediaQuery'\n\nimport type { MarkElementProps } from '@mui/x-charts'\n\nimport { MARKER_SHAPE_PATHS } from './utils/markerShapes'\nimport { formatCurrency } from '../../../../core/utils/NumberFormatting'\n\nexport type MarkHandlers = {\n onMarkClick?: (event: React.MouseEvent<SVGPathElement, MouseEvent>, dataIndex: number) => void\n onMouseEnter?: (dataIndex: number) => void\n onMouseLeave?: () => void\n}\n\ninterface CustomMarkProps extends MarkElementProps {\n handlers?: MarkHandlers\n showLabel: boolean\n showMark?: boolean\n yData: number[]\n style?: React.CSSProperties & {\n markLabelStyles?: React.CSSProperties\n }\n labelBackgroundColor?: string\n labelFontColor?: string\n labelFontSize?: number\n valueFormatterString?: string\n}\n\nexport const CustomMark: React.FC<CustomMarkProps> = (props) => {\n const theme = useTheme()\n const showLabel = props.showLabel\n const styles = props.style\n const markLabelStyles = styles?.markLabelStyles\n const xNumber = Number(props.x)\n const yNumber = Number(props.y)\n\n const handleMarkClick = props.handlers?.onMarkClick\n const handleMouseEnter = props.handlers?.onMouseEnter\n const handleMouseLeave = props.handlers?.onMouseLeave\n\n const isSmallScreenUp = useMediaQuery(theme.breakpoints.up('sm'))\n\n // Calculate text dimensions for proper background sizing\n const formattedValue = props.valueFormatterString\n ? formatCurrency(props.yData[props.dataIndex], props.valueFormatterString)\n : String(props.yData[props.dataIndex])\n const fontSize = isSmallScreenUp\n ? theme.typography.body2?.fontSize\n : theme.typography.caption?.fontSize\n const rectWidth = 30\n const rectHeight = 24\n\n // Center the rectangle around the text\n const rectX = xNumber - rectWidth / 2\n const rectY = yNumber - 30\n return (\n <>\n {showLabel && (\n <>\n {props.labelBackgroundColor && (\n <rect\n fill={props.labelBackgroundColor}\n height={rectHeight}\n rx=\"3\"\n width={rectWidth}\n x={rectX}\n y={rectY}\n />\n )}\n\n <text\n className=\"MuiLineChart-markLabel\"\n dominantBaseline=\"middle\"\n fill={props.labelFontColor ? props.labelFontColor : theme.palette.text.primary}\n style={{\n fontSize: props.labelFontSize ? props.labelFontSize : fontSize,\n ...markLabelStyles,\n }}\n textAnchor=\"middle\"\n x={xNumber}\n y={yNumber - 28 + rectHeight / 2}\n >\n {formattedValue}\n </text>\n </>\n )}\n {props.showMark && (\n <path\n cursor={handleMarkClick ? 'pointer' : 'unset'}\n d={MARKER_SHAPE_PATHS[props.shape ?? 'circle']}\n height=\"20px\"\n onClick={(event) => {\n handleMarkClick?.(event, props.dataIndex)\n }}\n onMouseEnter={() => {\n handleMouseEnter?.(props.dataIndex)\n }}\n onMouseLeave={() => {\n handleMouseLeave?.()\n }}\n style={{\n fill: styles?.fill ? styles.fill : theme.palette.background.paper,\n stroke: styles?.stroke ? styles.stroke : theme.palette.primary.main,\n strokeWidth: 2,\n transform: `translate(${props.x}px, ${props.y}px)`,\n transformOrigin: `${props.x}px, ${props.y}px`,\n filter: styles?.filter ? styles.filter : 'none',\n }}\n width=\"20px\"\n />\n )}\n </>\n )\n}\n","import { Box, Stack } from '@mui/material'\nimport { useTheme } from '@mui/material/styles'\n\nimport { useAxesTooltip } from '@mui/x-charts/ChartsTooltip'\n\nimport { Text } from '@mxenabled/mxui'\n\nimport { LineChartLabel, TooltipLabel } from '../LineChart'\nimport { getMarkerShape, MARKER_SHAPE_PATHS } from './utils/markerShapes'\nimport { formatCurrency } from '../../../../core/utils/NumberFormatting'\n\ninterface CustomTooltipProps {\n customLabels?: TooltipLabel[][]\n isCurrency?: boolean\n labels?: LineChartLabel[]\n series: Array<{ id?: string; data: number[]; color?: string }>\n valueFormatterString?: string\n}\n\nexport function CustomTooltip({\n customLabels,\n isCurrency = true,\n labels = [],\n series,\n valueFormatterString = '0,0',\n}: CustomTooltipProps) {\n const tooltipData = useAxesTooltip()\n const theme = useTheme()\n\n const firstAxisData = tooltipData?.[0]\n\n if (!firstAxisData) return null\n\n const { axisValue, dataIndex = 0 } = firstAxisData\n\n if (customLabels) {\n const headerText = customLabels[dataIndex]?.[0]?.header || String(axisValue)\n\n return (\n <Stack\n sx={{\n backgroundColor: theme.palette.background.paper,\n boxShadow: '0 2px 8px 0 rgba(0, 0, 0, 0.12)',\n flexDirection: 'column',\n alignItems: 'flex-start',\n borderRadius: '4px',\n width: 250,\n gap: 8,\n px: 16,\n py: 12,\n }}\n >\n <Stack\n sx={{\n flexDirection: 'row',\n justifyContent: 'space-between',\n alignItems: 'center',\n alignSelf: 'stretch',\n gap: 8,\n marginTop: 4,\n }}\n >\n <Text variant=\"h3\">{headerText}</Text>\n <Text bold={true} variant=\"h3\">\n {formatCurrency(series[0]?.data[dataIndex] as number, valueFormatterString)}\n </Text>\n </Stack>\n {customLabels[dataIndex]?.some((labelItem) => {\n const amount = typeof labelItem === 'string' ? 0 : labelItem.amount\n return amount !== 0\n }) ? (\n customLabels[dataIndex]?.map((labelItem) => {\n const label = typeof labelItem === 'string' ? labelItem : labelItem.label\n const amount = typeof labelItem === 'string' ? 0 : labelItem.amount\n\n if (amount === 0) return null\n return (\n <Stack\n key={label}\n sx={{\n flexDirection: 'row',\n justifyContent: 'space-between',\n alignItems: 'center',\n alignSelf: 'stretch',\n gap: 8,\n marginTop: 4,\n }}\n >\n <Stack\n sx={{\n flexDirection: 'row',\n alignItems: 'center',\n gap: 8,\n flex: 1,\n minWidth: 0,\n }}\n >\n <Box\n sx={{\n width: '12px',\n height: '12px',\n backgroundColor: series[0]?.color,\n borderRadius: '4px',\n }}\n />\n <Text variant=\"body1\">{label}</Text>\n </Stack>\n <Text bold={true} variant=\"body1\">\n {formatCurrency(Math.abs(amount), valueFormatterString)}\n </Text>\n </Stack>\n )\n })\n ) : (\n <Text variant=\"body1\">No data</Text> //TODO: localize\n )}\n </Stack>\n )\n }\n return (\n <Stack\n sx={{\n backgroundColor: theme.palette.background.paper,\n boxShadow: '0 2px 8px 0 rgba(0, 0, 0, 0.12)',\n flexDirection: 'column',\n alignItems: 'flex-start',\n borderRadius: '4px',\n width: 225,\n gap: 8,\n px: 16,\n py: 12,\n }}\n >\n <Text variant=\"h3\">{String(axisValue)}</Text>\n {series.map((s, sIndex) => (\n <Stack\n key={`${s.id}-${sIndex}`}\n sx={{\n flexDirection: 'row',\n justifyContent: 'space-between',\n alignItems: 'center',\n alignSelf: 'stretch',\n gap: 8,\n marginTop: 4,\n }}\n >\n <Stack sx={{ flexDirection: 'row', alignItems: 'center', gap: 8 }}>\n <svg aria-hidden=\"true\" height={12} viewBox=\"-6 -6 12 12\" width={12}>\n <path d={MARKER_SHAPE_PATHS[getMarkerShape(sIndex)]} fill={s.color} />\n </svg>\n <Text variant=\"body1\">\n {typeof labels[sIndex] === 'string' ? labels[sIndex] : labels[sIndex]?.label}\n </Text>\n </Stack>\n <Text bold={true} variant=\"body1\">\n {isCurrency\n ? formatCurrency(s.data[dataIndex] as number, valueFormatterString)\n : s.data[dataIndex]}\n </Text>\n </Stack>\n ))}\n </Stack>\n )\n}\n","import React from 'react'\n\nimport Box from '@mui/material/Box'\nimport type { SxProps } from '@mui/material/styles'\nimport { useTheme } from '@mui/material/styles'\n\nimport type { AllSeriesType } from '@mui/x-charts'\nimport { BarPlot } from '@mui/x-charts/BarChart'\nimport { ChartContainer as ResponsiveChartContainer } from '@mui/x-charts/ChartContainer'\nimport { ChartsAxisHighlight } from '@mui/x-charts/ChartsAxisHighlight'\nimport { ChartsReferenceLine } from '@mui/x-charts/ChartsReferenceLine'\nimport { ChartsTooltipContainer } from '@mui/x-charts/ChartsTooltip'\nimport { ChartsXAxis } from '@mui/x-charts/ChartsXAxis'\nimport { ChartsYAxis } from '@mui/x-charts/ChartsYAxis'\nimport { AreaPlot, LinePlot, MarkPlot } from '@mui/x-charts/LineChart'\n\nimport CustomLegend from './linechart/CustomLegend'\nimport { getMarkerShape } from './linechart/utils/markerShapes'\nimport { CustomLine } from './linechart/CustomLine'\nimport { CustomMark, MarkHandlers } from './linechart/CustomMark'\nimport { CustomTooltip } from './linechart/CustomTooltip'\nimport { formatCurrency } from '../../../core/utils/NumberFormatting'\nimport { generateEqualIntervals } from '../../../core/utils/NumberFormatting'\n\nexport type LineChartDataset = { x: string; y: number }[]\nexport type LineChartLabel = string | { label: string; amount: number }\nexport type TooltipLabel = LineChartLabel & { header?: string }\n\ntype LineChartCurve =\n | 'catmullRom'\n | 'linear'\n | 'monotoneX'\n | 'monotoneY'\n | 'natural'\n | 'step'\n | 'stepBefore'\n | 'stepAfter'\n | 'bump'\n | 'bumpX'\n | 'bumpY'\n\ninterface LineChartProps {\n areaColor?: string\n axisColor?: string\n baseline?: string\n chartFor?: string\n chartXaxisSx?: SxProps\n chartYaxisSx?: SxProps\n // Because theme chart colors are typed string|undefined\n colors: (string | undefined)[]\n curveType?: LineChartCurve\n customLegendVariant?: string\n customLegendSx?: SxProps\n customLegendBoxSx?: SxProps\n customTooltipLabels?: TooltipLabel[][]\n datasets: LineChartDataset[]\n height?: number\n isCurrency?: boolean\n isGraphClippingXAxis?: boolean\n labels: LineChartLabel[]\n labelBackgroundColor?: string\n labelFontColor?: string\n labelFontSize?: number\n margin?: { top?: number; right?: number; bottom?: number; left?: number }\n markHandlers?: MarkHandlers\n markStyles?: (markIndex: number) => React.CSSProperties & {\n markLabelStyles?: React.CSSProperties\n }\n minRange?: number\n maxRange?: number\n onItemClick?: () => void\n peerAverage?: number\n showArea?: boolean\n showAverage?: boolean\n showAxisHighlight?: boolean\n showBars?: boolean\n showLegend?: boolean\n showMark?: boolean\n showMarkLabel?: boolean\n showTooltip?: boolean\n showXAxis?: boolean\n showXAxisTicks?: boolean\n showYAxis?: boolean\n showYAxisTicks?: boolean\n tickIntervals?: any[] | 'auto' | ((value: any, index: number) => boolean) | undefined\n title?: string\n useCustomMark?: boolean\n valueFormatterString?: string\n width?: number\n xAxisScaleType?: 'band' | 'point'\n}\n\n// TODO: Remove negative values and use a proper layout to support X-Charts v8\n\nexport const LineChart: React.FC<LineChartProps> = ({\n areaColor,\n axisColor,\n baseline = 'max',\n chartFor,\n chartXaxisSx,\n chartYaxisSx,\n colors,\n curveType = 'linear',\n customLegendVariant,\n customLegendSx,\n customLegendBoxSx,\n customTooltipLabels,\n datasets,\n height,\n isCurrency,\n isGraphClippingXAxis = false,\n labels,\n labelBackgroundColor,\n labelFontColor,\n labelFontSize,\n margin,\n markHandlers,\n markStyles,\n minRange,\n maxRange,\n onItemClick,\n peerAverage,\n showArea = false,\n showAverage = false,\n showAxisHighlight = false,\n showBars = false,\n showLegend = false,\n showMark = true,\n showMarkLabel = false,\n showTooltip = false,\n showXAxis = false,\n showXAxisTicks = false,\n showYAxis = false,\n showYAxisTicks = false,\n title,\n useCustomMark = false,\n valueFormatterString,\n width,\n xAxisScaleType,\n}) => {\n const theme = useTheme()\n\n // Data for the X axis\n const xData = datasets.flat().map((item) => item.x)\n const yData = datasets.flat().map((item) => item.y)\n\n const average = peerAverage\n ? peerAverage\n : Math.round(yData.reduce((value, total) => total + value, 0) / yData.length)\n\n // Used for the min and max Y axis values\n const yMin = Math.floor(Math.min(...yData) / 100) * 100\n const yMax = Math.ceil(Math.max(...yData) / 100) * 100\n\n const series = datasets.map((data, index) => {\n return {\n type: showBars ? 'bar' : 'line',\n curve: curveType,\n color: showBars ? theme.palette.chart?.chart6 : (colors[index] ?? theme.palette.primary.main),\n data: data.map((item) => item.y),\n area: showArea,\n baseline: baseline,\n showMark: true,\n shape: getMarkerShape(index),\n valueFormatter: (value: number) =>\n valueFormatterString ? formatCurrency(value || 0, valueFormatterString) : String(value),\n }\n })\n\n const defaultMargin = {\n top: 60,\n right: 35,\n bottom: 25,\n left: -10,\n }\n\n // Merge default margin with any provided custom margin\n const chartMargin = {\n ...defaultMargin,\n ...margin,\n }\n\n let rangeMin = minRange ?? yMin\n let rangeMax = maxRange ?? yMax\n if (chartFor === 'networthChart') {\n const valueRange = yMax - yMin\n\n const paddingRatio = valueRange < yMax * 0.05 ? 0.25 : 0.2\n const padding = Math.max(valueRange * paddingRatio, yMax * 0.015)\n rangeMin = yMin - padding < 0 ? yMin : yMin - padding\n rangeMax = yMax + padding\n }\n\n const getTickInterval = () => {\n if (chartFor === 'creditOverTime') {\n return generateEqualIntervals(rangeMin, 850, 5)\n } else if (chartFor === 'networthChart') {\n return generateEqualIntervals(rangeMin, rangeMax, 5)\n }\n return undefined\n }\n return (\n <Box\n sx={{\n position: 'relative',\n touchAction: 'pan-y', // Allow vertical scrolling\n '& svg': {\n touchAction: 'pan-y', // Allow vertical scrolling on SVG\n userSelect: 'none', // Prevent text selection\n },\n '& .recharts-wrapper': {\n touchAction: 'pan-y', // For Recharts library specifically\n },\n }}\n >\n <ResponsiveChartContainer\n height={height}\n margin={chartMargin}\n series={series as AllSeriesType[]}\n sx={{\n '& .MuiBarLabel-root': {\n fontSize: 10,\n fontWeight: 600,\n },\n '& .MuiAreaElement-root': {\n opacity: 0.15,\n },\n '& .MuiChartsAxis-tickLabel > tspan': {\n fontFamily: theme.typography.body2.fontFamily,\n },\n '& .MuiLineChart-markLabel': {\n fontFamily: theme.typography.body2.fontFamily,\n },\n }}\n width={width}\n xAxis={[{ data: xData, scaleType: xAxisScaleType || (showBars ? 'band' : 'point') }]}\n yAxis={[\n {\n tickInterval: getTickInterval(),\n min: isGraphClippingXAxis ? -22 : rangeMin,\n max: rangeMax || 100,\n colorMap:\n showArea && series.length < 2\n ? {\n type: 'continuous',\n min: rangeMin,\n max: rangeMax,\n color: [\n theme.palette.background.paper,\n colors[0] ?? theme.palette.primary.main,\n ],\n }\n : undefined,\n valueFormatter: (value: number) =>\n valueFormatterString ? formatCurrency(value, valueFormatterString) : String(value),\n width: 62,\n },\n ]}\n >\n {/** Provides the average line - positioned first to be behind other elements **/}\n {showAverage && (\n <ChartsReferenceLine\n lineStyle={{\n stroke: labelBackgroundColor\n ? theme.palette.neutral.main\n : theme.palette.neutral.dark,\n strokeDasharray: '10, 8',\n strokeWidth: 2,\n }}\n y={average}\n />\n )}\n\n {/** Area plot provides gradiant below the line **/}\n {/* Note: Must be above the LinePlot for some style rules to work */}\n <AreaPlot\n onItemClick={onItemClick}\n {...(areaColor && {\n slots: {\n area: (props) => {\n return (\n <g>\n <defs>\n <linearGradient id=\"customGradient\" x1=\"0\" x2=\"0\" y1=\"0\" y2=\"1\">\n <stop offset=\"0%\" stopColor={areaColor} />\n <stop offset=\"100%\" stopColor={areaColor} stopOpacity={0.02} />\n </linearGradient>\n </defs>\n <path {...props} fill={`url(#customGradient)`} />\n </g>\n )\n },\n },\n })}\n />\n\n {/** Line plot provides the data line **/}\n <LinePlot\n onItemClick={onItemClick}\n slots={{\n line: (props) => (\n <CustomLine\n {...props}\n lineColor={areaColor ?? props.ownerState.color ?? theme.palette.primary.main}\n />\n ),\n }}\n />\n\n {/** Mark plot provides the circles **/}\n <MarkPlot\n onItemClick={onItemClick}\n slots={\n useCustomMark\n ? {\n mark: (props) => {\n return (\n <CustomMark\n handlers={markHandlers}\n labelBackgroundColor={labelBackgroundColor}\n labelFontColor={labelFontColor}\n labelFontSize={labelFontSize}\n showLabel={showMarkLabel}\n showMark={showMark || props.dataIndex === datasets[0].length - 1}\n style={markStyles?.(props.dataIndex) ?? {}}\n valueFormatterString={valueFormatterString}\n yData={yData}\n {...props}\n />\n )\n },\n }\n : undefined\n }\n />\n\n <BarPlot\n barLabel={(item) => (Number(item.value) > 0 ? `$${item.value}` : null)}\n borderRadius={10}\n />\n\n {/** Provides the X axis line and values **/}\n <ChartsXAxis\n disableLine={!showXAxis}\n disableTicks={!showXAxisTicks}\n slotProps={\n axisColor\n ? {\n axisLine: {\n style: {\n stroke: axisColor,\n },\n },\n axisTick: {\n style: {\n stroke: axisColor,\n },\n },\n }\n : {}\n }\n sx={{ ...chartXaxisSx }}\n />\n\n {/** Provides the Y axis values **/}\n <ChartsYAxis\n disableLine={!showYAxis}\n disableTicks={!showYAxisTicks}\n slotProps={\n axisColor\n ? {\n axisLine: {\n style: {\n stroke: axisColor,\n },\n },\n axisTick: {\n style: {\n stroke: axisColor,\n },\n },\n }\n : {}\n }\n sx={{ ...chartYaxisSx }}\n />\n\n {/* Add vertical crosshair on hover */}\n {showAxisHighlight && <ChartsAxisHighlight x=\"line\" />}\n\n {showTooltip && (\n <ChartsTooltipContainer trigger=\"axis\">\n <CustomTooltip\n customLabels={customTooltipLabels}\n isCurrency={isCurrency}\n labels={labels}\n series={series}\n valueFormatterString={valueFormatterString}\n />\n </ChartsTooltipContainer>\n )}\n </ResponsiveChartContainer>\n\n {showLegend && (\n <CustomLegend\n average={showAverage ? average : undefined}\n customLegendBoxSx={customLegendBoxSx}\n customLegendVariant={customLegendVariant}\n labels={labels}\n series={series}\n style={{\n position: 'absolute',\n top: 16,\n left: 16,\n ...customLegendSx,\n }}\n title={title}\n valueFormatterString={valueFormatterString}\n />\n )}\n </Box>\n )\n}\n"],"names":["MARKER_SHAPE_PATHS","DEFAULT_SHAPES","getMarkerShape","seriesIndex","CustomLegendLabel","label","customLegendVariant","variant","jsx","Text","jsxs","Fragment","formatCurrency","CustomLegend","average","customLegendBoxSx","labels","series","style","title","valueFormatterString","commonCopy","useGlobalCopyStore","Stack","s","index","Box","CustomLegend$1","observer","CustomLine","props","CustomMark","theme","useTheme","showLabel","styles","markLabelStyles","xNumber","yNumber","handleMarkClick","handleMouseEnter","handleMouseLeave","isSmallScreenUp","useMediaQuery","formattedValue","fontSize","rectWidth","rectHeight","rectX","rectY","event","CustomTooltip","customLabels","isCurrency","tooltipData","useAxesTooltip","firstAxisData","axisValue","dataIndex","headerText","labelItem","amount","sIndex","LineChart","areaColor","axisColor","baseline","chartFor","chartXaxisSx","chartYaxisSx","colors","curveType","customLegendSx","customTooltipLabels","datasets","height","isGraphClippingXAxis","labelBackgroundColor","labelFontColor","labelFontSize","margin","markHandlers","markStyles","minRange","maxRange","onItemClick","peerAverage","showArea","showAverage","showAxisHighlight","showBars","showLegend","showMark","showMarkLabel","showTooltip","showXAxis","showXAxisTicks","showYAxis","showYAxisTicks","useCustomMark","width","xAxisScaleType","xData","item","yData","value","total","yMin","yMax","data","chartMargin","rangeMin","rangeMax","valueRange","paddingRatio","padding","getTickInterval","generateEqualIntervals","ResponsiveChartContainer","ChartsReferenceLine","AreaPlot","LinePlot","MarkPlot","BarPlot","ChartsXAxis","ChartsYAxis","ChartsAxisHighlight","ChartsTooltipContainer"],"mappings":"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"}
@@ -67,3 +67,4 @@ const q = v(
67
67
  export {
68
68
  q as L
69
69
  };
70
+ //# sourceMappingURL=ListItemAction-BqUCLj_w.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ListItemAction-BqUCLj_w.mjs","sources":["../src/common/components/ListItemAction.tsx"],"sourcesContent":["import React from 'react'\nimport { observer } from 'mobx-react-lite'\n\nimport ListItem from '@mui/material/ListItem'\nimport ListItemButton from '@mui/material/ListItemButton'\nimport ListItemText from '@mui/material/ListItemText'\nimport Stack from '@mui/material/Stack'\n\nimport { ChevronRight } from '@mxenabled/mx-icons'\n\nimport { Text } from '@mxenabled/mxui'\n\nimport { Dialog, useGlobalCopyStore } from '../'\n\ninterface ListItemActionProps {\n children?: React.ReactNode\n isDisabled?: boolean\n isSaveDisabled?: boolean\n label: string\n onCancel?: () => void\n onSave: () => void\n primaryText: string\n secondaryText: string\n zeroStateText?: string\n}\n\nexport const ListItemAction = observer(\n ({\n children,\n isDisabled = false,\n isSaveDisabled = false,\n label,\n onCancel,\n onSave,\n primaryText,\n secondaryText,\n zeroStateText,\n }: ListItemActionProps) => {\n const { common: copy } = useGlobalCopyStore()\n\n const [isOpen, setIsOpen] = React.useState(false)\n\n const handleCancel = () => {\n setIsOpen(false)\n onCancel?.()\n }\n\n const handleSave = () => {\n setIsOpen(false)\n onSave()\n }\n\n return (\n <ListItem>\n <ListItemButton onClick={() => setIsOpen(!isDisabled)}>\n <ListItemText\n primary={\n <Stack alignItems=\"center\" direction=\"row\" justifyContent=\"space-between\">\n <Text variant=\"body1\">{primaryText}</Text>\n <Text\n bold={true}\n color={zeroStateText ? 'primary.main' : 'text.primary'}\n sx={{ mr: 4 }}\n variant=\"body1\"\n >\n {zeroStateText || secondaryText}\n </Text>\n </Stack>\n }\n slotProps={{ primary: { variant: 'body1' } }}\n />\n {!isDisabled && !zeroStateText && <ChevronRight />}\n </ListItemButton>\n <Dialog\n copy={{ title: label, close_aria: copy.close_aria }}\n disablePrimaryButton={isSaveDisabled}\n isOpen={isOpen}\n onClose={handleCancel}\n onPrimaryAction={handleSave}\n primaryText={copy.save_button}\n >\n {children}\n </Dialog>\n </ListItem>\n )\n },\n)\n"],"names":["ListItemAction","observer","children","isDisabled","isSaveDisabled","label","onCancel","onSave","primaryText","secondaryText","zeroStateText","copy","useGlobalCopyStore","isOpen","setIsOpen","React","handleCancel","handleSave","ListItem","jsxs","ListItemButton","jsx","ListItemText","Stack","Text","ChevronRight","Dialog"],"mappings":";;;;;;;;;;;AA0BO,MAAMA,IAAiBC;AAAA,EAC5B,CAAC;AAAA,IACC,UAAAC;AAAA,IACA,YAAAC,IAAa;AAAA,IACb,gBAAAC,IAAiB;AAAA,IACjB,OAAAC;AAAA,IACA,UAAAC;AAAA,IACA,QAAAC;AAAA,IACA,aAAAC;AAAA,IACA,eAAAC;AAAA,IACA,eAAAC;AAAA,EAAA,MACyB;AACzB,UAAM,EAAE,QAAQC,EAAA,IAASC,EAAA,GAEnB,CAACC,GAAQC,CAAS,IAAIC,EAAM,SAAS,EAAK,GAE1CC,IAAe,MAAM;AACzB,MAAAF,EAAU,EAAK,GACfR,IAAA;AAAA,IACF,GAEMW,IAAa,MAAM;AACvB,MAAAH,EAAU,EAAK,GACfP,EAAA;AAAA,IACF;AAEA,6BACGW,GAAA,EACC,UAAA;AAAA,MAAA,gBAAAC,EAACC,KAAe,SAAS,MAAMN,EAAU,CAACX,CAAU,GAClD,UAAA;AAAA,QAAA,gBAAAkB;AAAA,UAACC;AAAA,UAAA;AAAA,YACC,2BACGC,GAAA,EAAM,YAAW,UAAS,WAAU,OAAM,gBAAe,iBACxD,UAAA;AAAA,cAAA,gBAAAF,EAACG,GAAA,EAAK,SAAQ,SAAS,UAAAhB,GAAY;AAAA,cACnC,gBAAAa;AAAA,gBAACG;AAAA,gBAAA;AAAA,kBACC,MAAM;AAAA,kBACN,OAAOd,IAAgB,iBAAiB;AAAA,kBACxC,IAAI,EAAE,IAAI,EAAA;AAAA,kBACV,SAAQ;AAAA,kBAEP,UAAAA,KAAiBD;AAAA,gBAAA;AAAA,cAAA;AAAA,YACpB,GACF;AAAA,YAEF,WAAW,EAAE,SAAS,EAAE,SAAS,UAAQ;AAAA,UAAE;AAAA,QAAA;AAAA,QAE5C,CAACN,KAAc,CAACO,uBAAkBe,GAAA,CAAA,CAAa;AAAA,MAAA,GAClD;AAAA,MACA,gBAAAJ;AAAA,QAACK;AAAA,QAAA;AAAA,UACC,MAAM,EAAE,OAAOrB,GAAO,YAAYM,EAAK,WAAA;AAAA,UACvC,sBAAsBP;AAAA,UACtB,QAAAS;AAAA,UACA,SAASG;AAAA,UACT,iBAAiBC;AAAA,UACjB,aAAaN,EAAK;AAAA,UAEjB,UAAAT;AAAA,QAAA;AAAA,MAAA;AAAA,IACH,GACF;AAAA,EAEJ;AACF;"}
@@ -65,3 +65,4 @@ const R = ({
65
65
  export {
66
66
  R as L
67
67
  };
68
+ //# sourceMappingURL=ListItemRow-kH1rn8Xu.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ListItemRow-kH1rn8Xu.mjs","sources":["../src/common/components/ListItemRow.tsx"],"sourcesContent":["import React from 'react'\n\nimport ListItem from '@mui/material/ListItem'\nimport ListItemButton from '@mui/material/ListItemButton'\nimport ListItemIcon from '@mui/material/ListItemIcon'\nimport ListItemText from '@mui/material/ListItemText'\nimport Stack from '@mui/material/Stack'\n\nimport { Text } from '@mxenabled/mxui'\n\ninterface ListItemRowProps {\n onClick?: () => void\n leftIcon?: React.ReactNode\n rightIcon?: React.ReactNode\n title?: string\n subtitle?: string\n rightContent?: React.ReactNode\n titleBold?: boolean\n rightContentBold?: boolean\n}\n\nexport const ListItemRow: React.FC<ListItemRowProps> = ({\n onClick,\n leftIcon,\n rightIcon,\n title,\n subtitle,\n rightContent,\n titleBold = true,\n rightContentBold = true,\n}) => {\n const content = (\n <React.Fragment>\n {leftIcon && <ListItemIcon sx={{ ml: 0 }}>{leftIcon}</ListItemIcon>}\n <ListItemText>\n <Stack\n sx={{\n alignItems: 'center',\n flexDirection: 'row',\n marginLeft: 12,\n }}\n >\n <Stack sx={{ flex: 1, minWidth: 0 }}>\n <Text bold={titleBold} variant=\"body1\">\n {title}\n </Text>\n {subtitle && <Text variant=\"caption\">{subtitle}</Text>}\n </Stack>\n <Stack sx={{ flexDirection: 'row', alignItems: 'center', gap: 1 }}>\n {rightContent && (\n <Text bold={rightContentBold} display=\"flex\" variant=\"body1\">\n {rightContent}\n </Text>\n )}\n {rightIcon && <ListItemIcon>{rightIcon}</ListItemIcon>}\n </Stack>\n </Stack>\n </ListItemText>\n </React.Fragment>\n )\n\n return (\n <ListItem>\n {onClick ? (\n <ListItemButton\n onClick={onClick}\n sx={{\n py: 14,\n }}\n >\n {content}\n </ListItemButton>\n ) : (\n <Stack\n sx={{\n py: 14,\n px: 24,\n width: '100%',\n flexDirection: 'row',\n alignItems: 'center',\n }}\n >\n {content}\n </Stack>\n )}\n </ListItem>\n )\n}\n"],"names":["ListItemRow","onClick","leftIcon","rightIcon","title","subtitle","rightContent","titleBold","rightContentBold","content","jsxs","React","ListItemIcon","ListItemText","Stack","jsx","Text","ListItem","ListItemButton"],"mappings":";;;;;;;;AAqBO,MAAMA,IAA0C,CAAC;AAAA,EACtD,SAAAC;AAAA,EACA,UAAAC;AAAA,EACA,WAAAC;AAAA,EACA,OAAAC;AAAA,EACA,UAAAC;AAAA,EACA,cAAAC;AAAA,EACA,WAAAC,IAAY;AAAA,EACZ,kBAAAC,IAAmB;AACrB,MAAM;AACJ,QAAMC,IACJ,gBAAAC,EAACC,EAAM,UAAN,EACE,UAAA;AAAA,IAAAT,uBAAaU,GAAA,EAAa,IAAI,EAAE,IAAI,EAAA,GAAM,UAAAV,GAAS;AAAA,sBACnDW,GAAA,EACC,UAAA,gBAAAH;AAAA,MAACI;AAAA,MAAA;AAAA,QACC,IAAI;AAAA,UACF,YAAY;AAAA,UACZ,eAAe;AAAA,UACf,YAAY;AAAA,QAAA;AAAA,QAGd,UAAA;AAAA,UAAA,gBAAAJ,EAACI,KAAM,IAAI,EAAE,MAAM,GAAG,UAAU,KAC9B,UAAA;AAAA,YAAA,gBAAAC,EAACC,GAAA,EAAK,MAAMT,GAAW,SAAQ,SAC5B,UAAAH,GACH;AAAA,YACCC,KAAY,gBAAAU,EAACC,GAAA,EAAK,SAAQ,WAAW,UAAAX,EAAA,CAAS;AAAA,UAAA,GACjD;AAAA,UACA,gBAAAK,EAACI,GAAA,EAAM,IAAI,EAAE,eAAe,OAAO,YAAY,UAAU,KAAK,EAAA,GAC3D,UAAA;AAAA,YAAAR,KACC,gBAAAS,EAACC,KAAK,MAAMR,GAAkB,SAAQ,QAAO,SAAQ,SAClD,UAAAF,EAAA,CACH;AAAA,YAEDH,KAAa,gBAAAY,EAACH,GAAA,EAAc,UAAAT,EAAA,CAAU;AAAA,UAAA,EAAA,CACzC;AAAA,QAAA;AAAA,MAAA;AAAA,IAAA,EACF,CACF;AAAA,EAAA,GACF;AAGF,SACE,gBAAAY,EAACE,KACE,UAAAhB,IACC,gBAAAc;AAAA,IAACG;AAAA,IAAA;AAAA,MACC,SAAAjB;AAAA,MACA,IAAI;AAAA,QACF,IAAI;AAAA,MAAA;AAAA,MAGL,UAAAQ;AAAA,IAAA;AAAA,EAAA,IAGH,gBAAAM;AAAA,IAACD;AAAA,IAAA;AAAA,MACC,IAAI;AAAA,QACF,IAAI;AAAA,QACJ,IAAI;AAAA,QACJ,OAAO;AAAA,QACP,eAAe;AAAA,QACf,YAAY;AAAA,MAAA;AAAA,MAGb,UAAAL;AAAA,IAAA;AAAA,EAAA,GAGP;AAEJ;"}
@@ -0,0 +1,44 @@
1
+ import { jsx as s } from "react/jsx-runtime";
2
+ import o from "@mui/material/ListItem";
3
+ import l from "@mui/material/ListItemButton";
4
+ import { f } from "./hooks-97sNJ_lf.mjs";
5
+ const g = ({
6
+ children: t,
7
+ clickEventName: e,
8
+ component: r,
9
+ onClick: a,
10
+ sx: i = {}
11
+ }) => {
12
+ const { onEvent: p } = f();
13
+ return a ? /* @__PURE__ */ s(
14
+ o,
15
+ {
16
+ className: "list-wrapper",
17
+ ...r && { component: r },
18
+ sx: { bgcolor: "background.paper", ...i },
19
+ children: /* @__PURE__ */ s(
20
+ l,
21
+ {
22
+ onClick: () => {
23
+ e && p(e), a();
24
+ },
25
+ children: t
26
+ }
27
+ )
28
+ }
29
+ ) : /* @__PURE__ */ s(
30
+ o,
31
+ {
32
+ className: "list-wrapper",
33
+ ...r && { component: r },
34
+ disableGutters: !1,
35
+ disablePadding: !1,
36
+ sx: { bgcolor: "background.paper", ...i },
37
+ children: t
38
+ }
39
+ );
40
+ };
41
+ export {
42
+ g as L
43
+ };
44
+ //# sourceMappingURL=ListItemWrapper-DRse79Iu.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ListItemWrapper-DRse79Iu.mjs","sources":["../src/common/components/ListItemWrapper.tsx"],"sourcesContent":["import React, { ElementType } from 'react'\n\nimport ListItem from '@mui/material/ListItem'\nimport ListItemButton from '@mui/material/ListItemButton'\nimport { SxProps } from '@mui/material/styles'\n\nimport { useEvent } from '../context'\n\ninterface ListItemWrapperProps {\n clickEventName?: string\n component?: ElementType\n onClick?: () => void\n sx?: SxProps\n}\n\nexport const ListItemWrapper: React.FC<React.PropsWithChildren<ListItemWrapperProps>> = ({\n children,\n clickEventName,\n component,\n onClick,\n sx = {},\n}) => {\n const { onEvent } = useEvent()\n\n if (onClick) {\n return (\n <ListItem\n className=\"list-wrapper\"\n {...(component && { component })}\n sx={{ bgcolor: 'background.paper', ...sx }}\n >\n <ListItemButton\n onClick={() => {\n if (clickEventName) {\n onEvent(clickEventName)\n }\n onClick()\n }}\n >\n {children}\n </ListItemButton>\n </ListItem>\n )\n } else {\n return (\n <ListItem\n className=\"list-wrapper\"\n {...(component && { component })}\n disableGutters={false}\n disablePadding={false}\n sx={{ bgcolor: 'background.paper', ...sx }}\n >\n {children}\n </ListItem>\n )\n }\n}\n"],"names":["ListItemWrapper","children","clickEventName","component","onClick","sx","onEvent","useEvent","jsx","ListItem","ListItemButton"],"mappings":";;;;AAeO,MAAMA,IAA2E,CAAC;AAAA,EACvF,UAAAC;AAAA,EACA,gBAAAC;AAAA,EACA,WAAAC;AAAA,EACA,SAAAC;AAAA,EACA,IAAAC,IAAK,CAAA;AACP,MAAM;AACJ,QAAM,EAAE,SAAAC,EAAA,IAAYC,EAAA;AAEpB,SAAIH,IAEA,gBAAAI;AAAA,IAACC;AAAA,IAAA;AAAA,MACC,WAAU;AAAA,MACT,GAAIN,KAAa,EAAE,WAAAA,EAAA;AAAA,MACpB,IAAI,EAAE,SAAS,oBAAoB,GAAGE,EAAA;AAAA,MAEtC,UAAA,gBAAAG;AAAA,QAACE;AAAA,QAAA;AAAA,UACC,SAAS,MAAM;AACb,YAAIR,KACFI,EAAQJ,CAAc,GAExBE,EAAA;AAAA,UACF;AAAA,UAEC,UAAAH;AAAA,QAAA;AAAA,MAAA;AAAA,IACH;AAAA,EAAA,IAKF,gBAAAO;AAAA,IAACC;AAAA,IAAA;AAAA,MACC,WAAU;AAAA,MACT,GAAIN,KAAa,EAAE,WAAAA,EAAA;AAAA,MACpB,gBAAgB;AAAA,MAChB,gBAAgB;AAAA,MAChB,IAAI,EAAE,SAAS,oBAAoB,GAAGE,EAAA;AAAA,MAErC,UAAAJ;AAAA,IAAA;AAAA,EAAA;AAIT;"}
@@ -19,3 +19,4 @@ const p = ({ height: t = 250, label: r = "", size: e = 32 }) => /* @__PURE__ */
19
19
  export {
20
20
  p as L
21
21
  };
22
+ //# sourceMappingURL=Loader-CxeBwuPG.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Loader-CxeBwuPG.mjs","sources":["../src/common/components/Loader.tsx"],"sourcesContent":["import CircularProgress from '@mui/material/CircularProgress'\nimport Stack from '@mui/material/Stack'\n\nimport { Text } from '@mxenabled/mxui'\n\ninterface LoaderProps {\n height?: number\n label?: string\n size?: number\n}\n\nconst Loader = ({ height = 250, label = '', size = 32 }: LoaderProps) => (\n <Stack\n alignItems=\"center\"\n gap={32}\n height={height}\n justifyContent=\"center\"\n sx={{ backgroundColor: 'background.default' }}\n >\n <CircularProgress size={size} />\n {label && <Text>{label}</Text>}\n </Stack>\n)\n\nexport default Loader\n"],"names":["Loader","height","label","size","jsxs","Stack","jsx","CircularProgress","Text"],"mappings":";;;;AAWA,MAAMA,IAAS,CAAC,EAAE,QAAAC,IAAS,KAAK,OAAAC,IAAQ,IAAI,MAAAC,IAAO,GAAA,MACjD,gBAAAC;AAAA,EAACC;AAAA,EAAA;AAAA,IACC,YAAW;AAAA,IACX,KAAK;AAAA,IACL,QAAAJ;AAAA,IACA,gBAAe;AAAA,IACf,IAAI,EAAE,iBAAiB,qBAAA;AAAA,IAEvB,UAAA;AAAA,MAAA,gBAAAK,EAACC,KAAiB,MAAAJ,GAAY;AAAA,MAC7BD,KAAS,gBAAAI,EAACE,GAAA,EAAM,UAAAN,EAAA,CAAM;AAAA,IAAA;AAAA,EAAA;AACzB;"}
@@ -36,3 +36,4 @@ export {
36
36
  b,
37
37
  w as g
38
38
  };
39
+ //# sourceMappingURL=Localization-DnoVyBNK.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Localization-DnoVyBNK.mjs","sources":["../src/core/utils/Localization.ts"],"sourcesContent":["import React from 'react'\n\nimport type { DynamicCopyElement } from '../types'\n\nexport const LOCALES = {\n EN_US: 'en-us',\n EN_CA: 'en-ca',\n FR: 'fr',\n FR_CA: 'fr-ca',\n ES: 'es',\n}\n\nexport const VALID_LOCALES = Object.values(LOCALES)\n\nexport const getLocale = () => {\n const localeDefault = LOCALES.EN_US\n\n const localeParam = (window as any)?.app?.options?.language?.toLowerCase() ?? ''\n const localeBrowser = window.navigator.language.toLowerCase()\n\n if (localeParam === 'browser' && VALID_LOCALES.includes(localeBrowser)) {\n return localeBrowser\n } else if (VALID_LOCALES.includes(localeParam)) {\n return localeParam\n } else {\n return localeDefault\n }\n}\n\n// matches a pattern like \"static text _1{category_name} and _2{amount} more static text\"\nconst copyPattern = /(?<static>.*?)(?<dynamic>(?:_\\d+{(?:.*?)}))|(?<staticEnd>.+)/g\n\nexport const buildDynamicCopy = (str: string, ...args: DynamicCopyElement[]) => {\n if (!str) return ''\n\n const hasFormattedElement = args.some((arg) => typeof arg !== 'string')\n\n // finds all instances of matching pattern in given string\n const regexMatches = [...str.matchAll(copyPattern)]\n const matches = regexMatches.reduce(\n (acc: DynamicCopyElement[], match: RegExpMatchArray, matchIndex) => {\n const temp = [...acc]\n const groups = match.groups\n if (groups?.static) {\n temp.push(groups.static)\n }\n\n if (groups?.dynamic) {\n const curlyIndex = groups.dynamic.indexOf('{')\n const variableName = groups.dynamic.substring(curlyIndex + 1, groups.dynamic.length - 1)\n const index = Number(groups.dynamic.substring(1, curlyIndex))\n if (React.isValidElement(args[index - 1])) {\n const element = args[index - 1] as React.ReactElement\n const clonedElement = React.cloneElement(element, {\n key: `${variableName}-${matchIndex}`,\n })\n temp.push(clonedElement)\n } else {\n temp.push(args[index - 1])\n }\n }\n\n if (groups?.staticEnd) {\n temp.push(groups.staticEnd)\n }\n\n return temp\n },\n [],\n )\n\n return hasFormattedElement ? (matches as DynamicCopyElement[]) : (matches.join('') as string)\n}\n\nexport const buildPluralCopy = (\n strOne: string,\n strMulti: string,\n count: number,\n ...args: DynamicCopyElement[]\n) => {\n if (!strOne || !strMulti) return ''\n const str = count === 1 ? strOne : strMulti\n\n return buildDynamicCopy(str, ...args)\n}\n"],"names":["LOCALES","VALID_LOCALES","getLocale","localeDefault","localeParam","localeBrowser","copyPattern","buildDynamicCopy","str","args","hasFormattedElement","arg","matches","acc","match","matchIndex","temp","groups","curlyIndex","variableName","index","React","element","clonedElement","buildPluralCopy","strOne","strMulti","count"],"mappings":";AAIO,MAAMA,IAAU;AAAA,EACrB,OAAO;AAAA,EACP,OAAO;AAAA,EACP,IAAI;AAAA,EACJ,OAAO;AAAA,EACP,IAAI;AACN,GAEaC,IAAgB,OAAO,OAAOD,CAAO,GAErCE,IAAY,MAAM;AAC7B,QAAMC,IAAgBH,EAAQ,OAExBI,IAAe,QAAgB,KAAK,SAAS,UAAU,iBAAiB,IACxEC,IAAgB,OAAO,UAAU,SAAS,YAAA;AAEhD,SAAID,MAAgB,aAAaH,EAAc,SAASI,CAAa,IAC5DA,IACEJ,EAAc,SAASG,CAAW,IACpCA,IAEAD;AAEX,GAGMG,IAAc,iEAEPC,IAAmB,CAACC,MAAgBC,MAA+B;AAC9E,MAAI,CAACD,EAAK,QAAO;AAEjB,QAAME,IAAsBD,EAAK,KAAK,CAACE,MAAQ,OAAOA,KAAQ,QAAQ,GAIhEC,IADe,CAAC,GAAGJ,EAAI,SAASF,CAAW,CAAC,EACrB;AAAA,IAC3B,CAACO,GAA2BC,GAAyBC,MAAe;AAClE,YAAMC,IAAO,CAAC,GAAGH,CAAG,GACdI,IAASH,EAAM;AAKrB,UAJIG,GAAQ,UACVD,EAAK,KAAKC,EAAO,MAAM,GAGrBA,GAAQ,SAAS;AACnB,cAAMC,IAAaD,EAAO,QAAQ,QAAQ,GAAG,GACvCE,IAAeF,EAAO,QAAQ,UAAUC,IAAa,GAAGD,EAAO,QAAQ,SAAS,CAAC,GACjFG,IAAQ,OAAOH,EAAO,QAAQ,UAAU,GAAGC,CAAU,CAAC;AAC5D,YAAIG,EAAM,eAAeZ,EAAKW,IAAQ,CAAC,CAAC,GAAG;AACzC,gBAAME,IAAUb,EAAKW,IAAQ,CAAC,GACxBG,IAAgBF,EAAM,aAAaC,GAAS;AAAA,YAChD,KAAK,GAAGH,CAAY,IAAIJ,CAAU;AAAA,UAAA,CACnC;AACD,UAAAC,EAAK,KAAKO,CAAa;AAAA,QACzB;AACE,UAAAP,EAAK,KAAKP,EAAKW,IAAQ,CAAC,CAAC;AAAA,MAE7B;AAEA,aAAIH,GAAQ,aACVD,EAAK,KAAKC,EAAO,SAAS,GAGrBD;AAAA,IACT;AAAA,IACA,CAAA;AAAA,EAAC;AAGH,SAAON,IAAuBE,IAAoCA,EAAQ,KAAK,EAAE;AACnF,GAEaY,IAAkB,CAC7BC,GACAC,GACAC,MACGlB,MAEC,CAACgB,KAAU,CAACC,IAAiB,KAG1BnB,EAFKoB,MAAU,IAAIF,IAASC,GAEN,GAAGjB,CAAI;"}
@@ -17,12 +17,12 @@ import { startOfToday as U } from "date-fns/startOfToday";
17
17
  import { endOfMonth as We } from "date-fns/endOfMonth";
18
18
  import fe from "@mui/material/Button";
19
19
  import { CheckCircle as Ke, Cancel as qe, Icon as je, ChevronRight as He, Delete as Qe, Add as $e, ReceiptLong as Xe } from "@mxenabled/mx-icons";
20
- import { T as Ze } from "./TransactionDetails-DQ_eE7M4.mjs";
21
- import { a as Je } from "./AccountDetailsDrawer-BuxLfuIm.mjs";
22
- import { u as Ve } from "./AccountDetailsHeader-ByGNPZpO.mjs";
20
+ import { T as Ze } from "./TransactionDetails-roZ5xLq8.mjs";
21
+ import { a as Je } from "./AccountDetailsDrawer-CZPeLsCq.mjs";
22
+ import { u as Ve } from "./AccountDetailsHeader-BvbCUQSS.mjs";
23
23
  import { C as ee } from "./Category-DEKZGLYe.mjs";
24
24
  import { T as ge } from "./TransactionUtils-BphBJBbU.mjs";
25
- import { u as Ce, T as et, S as tt, a as nt } from "./EmbeddedCard-BxgB26dd.mjs";
25
+ import { u as Ce, T as et, S as tt, a as nt } from "./EmbeddedCard-DH8vQ3qN.mjs";
26
26
  import { u as x, h as Y, g as re, f as K, a as at, c as ot, C as rt } from "./hooks-97sNJ_lf.mjs";
27
27
  import { S as it } from "./SearchBox-Cpgu_gdO.mjs";
28
28
  import { D as z } from "./Drawer-DsnW2o0v.mjs";
@@ -40,7 +40,7 @@ import { getUnixTime as mt } from "date-fns/getUnixTime";
40
40
  import _t from "@mui/material/IconButton";
41
41
  import pt from "@mui/material/Menu";
42
42
  import ht from "@mui/material/MenuItem";
43
- import { L as yt } from "./ListItemWrapper-BHIbqx7E.mjs";
43
+ import { L as yt } from "./ListItemWrapper-DRse79Iu.mjs";
44
44
  import { f as Se, D as xe } from "./DateFormats-HudZ3Bjs.mjs";
45
45
  import ft from "@mui/material/Card";
46
46
  import gt from "@mui/material/CardActionArea";
@@ -334,8 +334,8 @@ const Q = (n) => n.top_level_category_guid !== ee.INCOME && n.transaction_type =
334
334
  m && (m.status === R.Missed ? i() : m.transactionGuid && t(m.transactionGuid), k());
335
335
  };
336
336
  return /* @__PURE__ */ l(p, { direction: "column", sx: { minHeight: "30dvh" }, children: [
337
- /* @__PURE__ */ e(y, { bold: !0, sx: { ml: 24, mt: 16, mb: 8 }, variant: "body1", children: r.past_activity }),
338
- /* @__PURE__ */ e(ne, { sx: { flex: 1, overflow: "auto" }, children: v.map((c, E) => {
337
+ /* @__PURE__ */ e(y, { bold: !0, id: "past-activity", sx: { ml: 24, mt: 16, mb: 8 }, variant: "body1", children: r.past_activity }),
338
+ /* @__PURE__ */ e(ne, { "aria-labelledby": "past-activity", sx: { flex: 1, overflow: "auto" }, children: v.map((c, E) => {
339
339
  const T = c.status === R.Paid, N = c.status === R.Missed, g = E === v.length - 1;
340
340
  return /* @__PURE__ */ l(u.Fragment, { children: [
341
341
  /* @__PURE__ */ l(
@@ -713,7 +713,7 @@ const Q = (n) => n.top_level_category_guid !== ee.INCOME && n.transaction_type =
713
713
  return /* @__PURE__ */ l(p, { bgcolor: n, gap: 24, height: "100%", children: [
714
714
  /* @__PURE__ */ l(p, { children: [
715
715
  /* @__PURE__ */ e(tt, { bgcolor: n, children: kt(d.date) }),
716
- /* @__PURE__ */ e(nt, { transaction: d })
716
+ /* @__PURE__ */ e(nt, { component: "div", transaction: d })
717
717
  ] }),
718
718
  /* @__PURE__ */ l(j, { children: [
719
719
  /* @__PURE__ */ e(y, { bold: !0, sx: { mx: 24 }, variant: "body1", children: h.payment_schedule }),
@@ -903,3 +903,4 @@ export {
903
903
  Tt as d,
904
904
  Ae as i
905
905
  };
906
+ //# sourceMappingURL=ManageIncome-Dcsnnz86.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ManageIncome-Dcsnnz86.mjs","sources":["../src/transactions/utils/Filters.ts","../src/recurringtransactions/components/shared/recurringsettings/SelectTransaction.tsx","../src/recurringtransactions/components/actions/LinkTransactionDrawer.tsx","../src/recurringtransactions/components/actions/MarkAsPaidDialog.tsx","../src/recurringtransactions/components/actions/MarkAsUnpaidDialog.tsx","../src/recurringtransactions/components/PaymentSchedule.tsx","../src/recurringtransactions/components/actions/PaymentScheduleAction.tsx","../src/recurringtransactions/components/RecurringTransactionList.tsx","../src/recurringtransactions/components/UpcomingRecurrenceCard.tsx","../src/recurringtransactions/components/RecurringTransactionDetails.tsx","../src/recurringtransactions/components/shared/recurringsettings/RecurringRow.tsx","../src/recurringtransactions/components/shared/recurringsettings/AddRecurringTransactionDetails.tsx","../src/recurringtransactions/components/shared/recurringsettings/AddRecurringTransaction.tsx","../src/recurringtransactions/components/shared/recurringsettings/RecurringSettingsZeroState.tsx","../src/recurringtransactions/components/shared/recurringsettings/ManageIncome.tsx"],"sourcesContent":["import { CategoryGuids } from '../../core/constants'\nimport { type Transaction, TransactionType } from '../../core'\n\n// Returns true if the transaction is not income\nexport const expenseFilter = (t: Transaction) =>\n t.top_level_category_guid !== CategoryGuids.INCOME && t.transaction_type === TransactionType.DEBIT\n\n// Returns true if the transaction is an expense and it matches the search string\nexport const expenseFilterSearch = (t: Transaction, searchValue: string) => {\n if (expenseFilter(t)) {\n return (\n t.payee?.toLowerCase().includes(searchValue.toLowerCase()) ||\n t.description.toLowerCase().includes(searchValue.toLowerCase()) ||\n t.feed_description.toLowerCase().includes(searchValue.toLowerCase())\n )\n }\n return false\n}\n\n// Returns true if the transaction is income\nexport const incomeFilter = (t: Transaction) =>\n t.top_level_category_guid === CategoryGuids.INCOME ||\n (t.top_level_category_guid === CategoryGuids.TRANSFER &&\n t.transaction_type === TransactionType.CREDIT)\n\n// Returns true if the transaction is income and it matches the search string\nexport const incomeFilterSearch = (t: Transaction, searchValue: string) => {\n if (incomeFilter(t)) {\n return (\n t.payee?.toLowerCase().includes(searchValue.toLowerCase()) ||\n t.description?.toLowerCase().includes(searchValue.toLowerCase()) ||\n t.feed_description?.toLowerCase().includes(searchValue.toLowerCase())\n )\n }\n return false\n}\n","import { observer } from 'mobx-react-lite'\n\nimport Stack from '@mui/material/Stack'\n\nimport { P } from '@mxenabled/mxui'\n\nimport { SearchBox, useGlobalCopyStore } from '../../../../common'\nimport { TransactionList, useTransactionsUiStore } from '../../../../transactions'\n\ninterface SelectTransactionProps {\n bgcolor?: string\n description?: string\n onSearch: (value: string) => void\n onSelected: (guid: string) => void\n}\n\nexport const SelectTransaction = observer(\n ({\n bgcolor = 'background.default',\n description,\n onSearch,\n onSelected,\n }: SelectTransactionProps) => {\n const { recurring: recurringCopy } = useGlobalCopyStore()\n const { searchValue, setSearchValue } = useTransactionsUiStore()\n\n return (\n <Stack sx={{ bgcolor, gap: 16, pt: 8 }}>\n {description && <P sx={{ mx: 24 }}>{description}</P>}\n <SearchBox\n ariaLabel={recurringCopy.select_transaction_search_aria}\n cancelAriaLabel={recurringCopy.select_transaction_search_cancel_aria}\n onChange={(value) => {\n setSearchValue(value)\n onSearch(value)\n }}\n placeholder={recurringCopy.select_transaction_search_placeholder}\n searchValue={searchValue}\n />\n <TransactionList\n bgcolor={bgcolor}\n filter={(t) => !!t.merchant_guid}\n height=\"auto\"\n onClick={onSelected}\n showLoader={false}\n />\n </Stack>\n )\n },\n)\n","import React from 'react'\nimport { observer } from 'mobx-react-lite'\n\nimport {\n Drawer,\n useGlobalCopyStore,\n useRecurringTransactionsStore,\n useTransactionStore,\n} from '../../../common'\nimport { type RepeatingTransaction, type Transaction, RepeatingType } from '../../../core'\n\nimport {\n expenseFilter,\n expenseFilterSearch,\n incomeFilter,\n incomeFilterSearch,\n} from '../../../transactions/utils/Filters'\n\nimport { SelectTransaction } from '../shared/recurringsettings/SelectTransaction'\nimport { useTransactionsUiStore } from '../../../transactions'\n\ninterface LinkTransactionDrawerProps {\n isOpen: boolean\n onClose: () => void\n recurringTransaction: RepeatingTransaction\n}\n\nconst buildFilter =\n (recurringTransaction: RepeatingTransaction, searchValue?: string) => (t: Transaction) => {\n if (t.repeating_transaction_guid) return false\n\n const isIncome = recurringTransaction.repeating_transaction_type === RepeatingType.Income\n\n if (searchValue) {\n return isIncome ? incomeFilterSearch(t, searchValue) : expenseFilterSearch(t, searchValue)\n }\n\n return isIncome ? incomeFilter(t) : expenseFilter(t)\n }\n\nexport const LinkTransactionDrawer = observer(\n ({ isOpen, onClose, recurringTransaction }: LinkTransactionDrawerProps) => {\n const { recurring: copy } = useGlobalCopyStore()\n const { markRecurrenceAsPaid } = useRecurringTransactionsStore()\n const { filter, setFilter, transactions } = useTransactionStore()\n\n const { setSearchValue } = useTransactionsUiStore()\n\n React.useEffect(() => {\n if (isOpen) {\n setFilter({ ...filter, custom: buildFilter(recurringTransaction) })\n } else {\n setSearchValue('')\n }\n }, [isOpen, recurringTransaction])\n\n const handleSearch = (searchValue: string) => {\n setFilter({ ...filter, custom: buildFilter(recurringTransaction, searchValue) })\n }\n\n const handleSelected = async (guid: string) => {\n const transaction = transactions.find((t) => t.guid === guid)\n if (transaction) {\n await markRecurrenceAsPaid(recurringTransaction.guid, transaction)\n onClose()\n }\n }\n\n return (\n <Drawer\n ariaLabelClose={copy.close_drawer_aria}\n isOpen={isOpen}\n onClose={onClose}\n title={copy.link_transaction_button}\n >\n <SelectTransaction onSearch={handleSearch} onSelected={handleSelected} />\n </Drawer>\n )\n },\n)\n","import { Text } from '@mxenabled/mxui'\n\nimport { Dialog, useGlobalCopyStore } from '../../../common'\n\ninterface MarkAsPaidDialogProps {\n isOpen: boolean\n onClose: () => void\n onLinkTransaction: () => void\n}\n\nexport const MarkAsPaidDialog = ({ isOpen, onClose, onLinkTransaction }: MarkAsPaidDialogProps) => {\n const { recurring: copy } = useGlobalCopyStore()\n\n return (\n <Dialog\n copy={{\n title: copy.mark_as_paid_dialog_title,\n close_aria: copy.close_drawer_aria,\n }}\n isOpen={isOpen}\n maxWidth=\"xs\"\n onClose={onClose}\n onPrimaryAction={onLinkTransaction}\n primaryText={copy.link_transaction_button}\n sx={{\n '& .MuiStack-root, & .MuiDialogContent-root': {\n backgroundColor: 'background.paper',\n },\n }}\n >\n <Text truncate={false}>{copy.link_transaction_description}</Text>\n </Dialog>\n )\n}\n","import { Text } from '@mxenabled/mxui'\n\nimport { Dialog, useGlobalCopyStore } from '../../../common'\n\ninterface MarkAsUnpaidDialogProps {\n isOpen: boolean\n onClose: () => void\n onUnlinkTransaction: () => void\n}\n\nexport const MarkAsUnpaidDialog = ({\n isOpen,\n onClose,\n onUnlinkTransaction,\n}: MarkAsUnpaidDialogProps) => {\n const { recurring: copy } = useGlobalCopyStore()\n\n return (\n <Dialog\n copy={{\n title: copy.mark_as_unpaid_dialog_title,\n close_aria: copy.close_drawer_aria,\n }}\n isOpen={isOpen}\n maxWidth=\"xs\"\n onClose={onClose}\n onPrimaryAction={onUnlinkTransaction}\n primaryText={copy.unlink_transaction_button}\n sx={{\n '& .MuiStack-root, & .MuiDialogContent-root': {\n backgroundColor: 'background.paper',\n },\n }}\n >\n <Text truncate={false}>{copy.unlink_transaction_description}</Text>\n </Dialog>\n )\n}\n","import React from 'react'\nimport { addYears } from 'date-fns/addYears'\nimport { getDayOfYear } from 'date-fns/getDayOfYear'\nimport { setDayOfYear } from 'date-fns/setDayOfYear'\nimport { startOfToday } from 'date-fns/startOfToday'\nimport { subDays } from 'date-fns/subDays'\n\nimport Stack from '@mui/material/Stack'\nimport { AdapterDateFns } from '@mui/x-date-pickers/AdapterDateFnsV3'\nimport { DatePicker } from '@mui/x-date-pickers'\nimport { LocalizationProvider } from '@mui/x-date-pickers/LocalizationProvider'\n\nimport { Select, useGlobalCopyStore } from '../../common'\nimport { Frequency } from '../../core'\nimport { formatOrdinal } from '../../core/utils/NumberFormatting'\n\ninterface PaymentScheduleProps {\n frequency: Frequency\n firstDay: number\n secondDay?: number\n onFrequencyChange: (frequency: Frequency) => void\n onFirstDayChange: (day: number) => void\n onSecondDayChange: (day: number) => void\n}\n\nexport const PaymentSchedule = ({\n frequency,\n firstDay,\n secondDay,\n onFrequencyChange,\n onFirstDayChange,\n onSecondDayChange,\n}: PaymentScheduleProps) => {\n const { recurring: copy } = useGlobalCopyStore()\n\n const frequencies = React.useMemo(\n () => [\n { id: Frequency.EveryWeek, label: copy.frequency_every_week },\n { id: Frequency.EveryOtherWeek, label: copy.frequency_every_other_week },\n { id: Frequency.TwiceAMonth, label: copy.frequency_twice_a_month },\n { id: Frequency.EveryMonth, label: copy.frequency_every_month },\n { id: Frequency.EveryOtherMonth, label: copy.frequency_every_other_month },\n { id: Frequency.EveryQuarter, label: copy.frequency_every_quarter },\n { id: Frequency.EveryOtherQuarter, label: copy.frequency_every_other_quarter },\n { id: Frequency.EveryYear, label: copy.frequency_every_year },\n ],\n [copy],\n )\n\n const daysOfWeek = [\n { id: 0, label: copy.weekday_sunday },\n { id: 1, label: copy.weekday_monday },\n { id: 2, label: copy.weekday_tuesday },\n { id: 3, label: copy.weekday_wednesday },\n { id: 4, label: copy.weekday_thursday },\n { id: 5, label: copy.weekday_friday },\n { id: 6, label: copy.weekday_saturday },\n ]\n\n const daysOfMonth = [...Array(31).keys()].map((day) => ({\n id: day + 1,\n label: formatOrdinal(day + 1),\n }))\n daysOfMonth[30].label += ` (${copy.last_day_of_month})`\n\n const beginDaysOfMonth = daysOfMonth.slice(0, 15)\n const endDaysOfMonth = daysOfMonth.slice(14)\n\n const weeklyType = frequency === Frequency.EveryWeek || frequency === Frequency.EveryOtherWeek\n const monthlyType =\n frequency === Frequency.TwiceAMonth ||\n frequency === Frequency.EveryMonth ||\n frequency === Frequency.EveryOtherMonth ||\n frequency === Frequency.EveryQuarter ||\n frequency === Frequency.EveryOtherQuarter\n\n const tempDayOfYear = setDayOfYear(startOfToday(), firstDay)\n const dayOfYear = tempDayOfYear < startOfToday() ? addYears(tempDayOfYear, 1) : tempDayOfYear\n\n const handleYearlyChange = (date: Date | null) => {\n if (date) {\n onFirstDayChange(getDayOfYear(date))\n }\n }\n\n return (\n <Stack gap={24} sx={{ m: 24 }}>\n <Select\n label={copy.frequency}\n onChange={onFrequencyChange}\n options={frequencies}\n value={frequency}\n />\n {weeklyType && (\n <Select\n label={copy.day_of_the_week}\n onChange={onFirstDayChange}\n options={daysOfWeek}\n value={firstDay}\n />\n )}\n {monthlyType && (\n <Select\n label={\n frequency === Frequency.TwiceAMonth\n ? copy.first_day_of_the_month\n : copy.day_of_the_month\n }\n onChange={onFirstDayChange}\n options={frequency === Frequency.TwiceAMonth ? beginDaysOfMonth : daysOfMonth}\n value={firstDay}\n />\n )}\n {frequency === Frequency.TwiceAMonth && (\n <Select\n label={copy.second_day_of_the_month}\n onChange={onSecondDayChange}\n options={endDaysOfMonth}\n value={secondDay || 0}\n />\n )}\n {frequency === Frequency.EveryYear && (\n <LocalizationProvider dateAdapter={AdapterDateFns}>\n <DatePicker\n disablePast={true}\n label={copy.next_payment_date}\n maxDate={subDays(addYears(startOfToday(), 1), 1)}\n minDate={startOfToday()}\n onChange={handleYearlyChange}\n value={dayOfYear}\n />\n </LocalizationProvider>\n )}\n </Stack>\n )\n}\n","import React from 'react'\nimport { observer } from 'mobx-react-lite'\n\nimport {\n ANALYTICS_EVENTS,\n DataRow,\n Drawer,\n useEvent,\n useGlobalCopyStore,\n useRecurringTransactionsStore,\n} from '../../../common'\nimport { type RepeatingTransaction, Frequency } from '../../../core'\n\nimport { getFrequencyLabel } from '../../../core/utils/RecurringTransactionsUtil'\n\nimport { PaymentSchedule } from '../PaymentSchedule'\n\ninterface FrequencyActionProps {\n repeatingTransaction: RepeatingTransaction\n}\n\nexport const PaymentScheduleAction = observer(({ repeatingTransaction }: FrequencyActionProps) => {\n const { recurring: copy } = useGlobalCopyStore()\n const { updateRepeatingTransaction } = useRecurringTransactionsStore()\n\n const { onEvent } = useEvent()\n const [isOpen, setIsOpen] = React.useState(false)\n const [frequency, setFrequency] = React.useState<Frequency>(repeatingTransaction.recurrence_type)\n const [firstDay, setFirstDay] = React.useState(repeatingTransaction.recurrence_day)\n const [secondDay, setSecondDay] = React.useState(repeatingTransaction.second_recurrence_day)\n\n const handleSave = async () => {\n await updateRepeatingTransaction({\n ...repeatingTransaction,\n recurrence_type: frequency,\n recurrence_day: firstDay,\n second_recurrence_day: secondDay,\n })\n\n setIsOpen(false)\n }\n\n const handleOpen = () => {\n setIsOpen(true)\n onEvent(ANALYTICS_EVENTS.RECURRING_TRANSACTIONS_DETAILS_CLICK_PAYMENT_SCHEDULE)\n }\n\n return (\n <>\n <DataRow\n iconName=\"sync\"\n label={copy.activity_schedule}\n onClick={handleOpen}\n showChevron={false}\n value={`${getFrequencyLabel(copy, repeatingTransaction, true)}`}\n />\n <Drawer\n ariaLabelClose={copy.close_drawer_aria}\n isOpen={isOpen}\n onClose={() => setIsOpen(false)}\n onPrimaryAction={handleSave}\n title={copy.payment_schedule}\n >\n <PaymentSchedule\n firstDay={firstDay}\n frequency={frequency}\n onFirstDayChange={setFirstDay}\n onFrequencyChange={setFrequency}\n onSecondDayChange={setSecondDay}\n secondDay={secondDay}\n />\n </Drawer>\n </>\n )\n})\n","import React from 'react'\n\nimport { fromUnixTime } from 'date-fns/fromUnixTime'\nimport { getUnixTime } from 'date-fns/getUnixTime'\n\nimport Divider from '@mui/material/Divider'\nimport IconButton from '@mui/material/IconButton'\nimport List from '@mui/material/List'\nimport ListItemAvatar from '@mui/material/ListItemAvatar'\nimport ListItemText from '@mui/material/ListItemText'\nimport Menu from '@mui/material/Menu'\nimport MenuItem from '@mui/material/MenuItem'\nimport Stack from '@mui/material/Stack'\n\nimport { Cancel, CheckCircle, Icon } from '@mxenabled/mx-icons'\nimport { MerchantLogo, Text } from '@mxenabled/mxui'\n\nimport {\n ANALYTICS_EVENTS,\n formatCurrency,\n ListItemWrapper,\n useEvent,\n useGlobalCopyStore,\n useRecurringTransactionsStore,\n} from '../../common'\nimport { DATE_FORMATS_INTL, formatDate } from '../../core/constants'\n\nimport {\n type Recurrence,\n type Transaction,\n RecurrenceStatus,\n RepeatingTransaction,\n} from '../../core'\n\ntype RecurringTransactionRow = {\n key: string\n name: string\n amount: number\n date: number\n merchantGuid: string\n categoryGuid: string\n category: string\n status: RecurrenceStatus.Paid | RecurrenceStatus.Missed\n transactionGuid?: string\n}\n\nconst buildRows = (\n transactions: Transaction[],\n missedRecurrences: Recurrence[],\n): RecurringTransactionRow[] => {\n const paidRows: RecurringTransactionRow[] = transactions.map((t) => ({\n key: t.guid,\n name: t.payee || t.description || t.feed_description,\n amount: t.amount,\n date: t.date,\n merchantGuid: t.merchant_guid || '',\n categoryGuid: t.top_level_category_guid || '',\n category: t.category || '',\n status: RecurrenceStatus.Paid,\n transactionGuid: t.guid,\n }))\n\n const missedRows: RecurringTransactionRow[] = missedRecurrences.map((r) => ({\n key: `missed-${r.expectedDate.getTime()}`,\n name: r.name,\n amount: r.amount,\n date: getUnixTime(r.expectedDate),\n merchantGuid: r.merchantGuid,\n categoryGuid: r.categoryGuid,\n category: '',\n status: RecurrenceStatus.Missed,\n }))\n\n return [...paidRows, ...missedRows].sort((a, b) => b.date - a.date)\n}\n\ninterface RecurringTransactionListProps {\n isIncome?: boolean\n onMarkAsPaidClick: () => void\n onMarkAsUnpaidClick: (transactionGuid: string) => void\n onTransactionClick: (guid: string) => void\n recurringTransaction: RepeatingTransaction\n transactions: Transaction[]\n}\n\nexport const RecurringTransactionList = ({\n isIncome = false,\n onMarkAsUnpaidClick,\n onMarkAsPaidClick,\n onTransactionClick,\n recurringTransaction,\n transactions,\n}: RecurringTransactionListProps) => {\n const { recurring: copy } = useGlobalCopyStore()\n const { onEvent } = useEvent()\n const { recurrences } = useRecurringTransactionsStore()\n\n const [menuAnchorEl, setMenuAnchorEl] = React.useState<HTMLElement | null>(null)\n const [menuRow, setMenuRow] = React.useState<RecurringTransactionRow | null>(null)\n\n const missedRecurrences = React.useMemo(\n () =>\n recurrences.filter(\n (r) =>\n r.repeatingTransactionGuid === recurringTransaction.guid &&\n r.status === RecurrenceStatus.Missed,\n ),\n [recurrences, recurringTransaction.guid],\n )\n\n const rows = React.useMemo(\n () => buildRows(transactions, missedRecurrences),\n [transactions, missedRecurrences],\n )\n\n const handleClick = (row: RecurringTransactionRow) => {\n if (row.transactionGuid) {\n onTransactionClick(row.transactionGuid)\n }\n }\n\n const handleMenuOpen = (e: React.MouseEvent<HTMLElement>, row: RecurringTransactionRow) => {\n e.stopPropagation()\n setMenuAnchorEl(e.currentTarget)\n setMenuRow(row)\n onEvent(ANALYTICS_EVENTS.RECURRING_TRANSACTIONS_LIST_CLICK_MORE_MENU)\n }\n\n const handleMenuClose = () => {\n setMenuAnchorEl(null)\n setMenuRow(null)\n }\n\n const handleMenuAction = () => {\n if (!menuRow) return\n\n if (menuRow.status === RecurrenceStatus.Missed) {\n onMarkAsPaidClick()\n } else if (menuRow.transactionGuid) {\n onMarkAsUnpaidClick(menuRow.transactionGuid)\n }\n handleMenuClose()\n }\n\n return (\n <Stack direction=\"column\" sx={{ minHeight: '30dvh' }}>\n <Text bold={true} id=\"past-activity\" sx={{ ml: 24, mt: 16, mb: 8 }} variant=\"body1\">\n {copy.past_activity}\n </Text>\n <List aria-labelledby=\"past-activity\" sx={{ flex: 1, overflow: 'auto' }}>\n {rows.map((row, index) => {\n const isPaid = row.status === RecurrenceStatus.Paid\n const isMissed = row.status === RecurrenceStatus.Missed\n const isLast = index === rows.length - 1\n\n return (\n <React.Fragment key={row.key}>\n <ListItemWrapper\n onClick={isPaid ? () => handleClick(row) : undefined}\n sx={{ '& .MuiListItemButton-root': { pr: 10 } }}\n >\n <ListItemAvatar>\n <MerchantLogo categoryGuid={row.categoryGuid} merchantGuid={row.merchantGuid} />\n </ListItemAvatar>\n <ListItemText\n disableTypography={true}\n secondary={\n <Stack direction=\"row\" justifyContent=\"space-between\">\n <Text variant=\"caption\">\n {formatDate(fromUnixTime(row.date), DATE_FORMATS_INTL.MONTH_DAY_YEAR)}\n </Text>\n <Stack\n alignItems=\"center\"\n direction=\"row\"\n gap={6}\n sx={{ textTransform: 'uppercase' }}\n >\n {isPaid && <CheckCircle color=\"success\" filled={true} size={12} />}\n {isMissed && <Cancel color=\"error\" filled={true} size={12} />}\n <Text bold={true} color=\"text.secondary\" variant=\"caption\">\n {isPaid ? copy.paid?.toLowerCase() : copy.missed?.toLowerCase()}\n </Text>\n </Stack>\n </Stack>\n }\n >\n <Stack direction=\"row\" justifyContent=\"space-between\" sx={{ gap: 8 }}>\n <Text bold={true} variant=\"body1\">\n {row.name}\n </Text>\n <Text\n bold={true}\n color={isIncome ? 'success.main' : 'text.primary'}\n sx={{ flexShrink: 0 }}\n variant=\"body1\"\n >\n {isIncome ? '+' : ''}\n {formatCurrency(row.amount, '0,0.00')}\n </Text>\n </Stack>\n </ListItemText>\n <IconButton\n aria-label={copy.more_menu_aria}\n onClick={(e) => handleMenuOpen(e, row)}\n size=\"small\"\n sx={{ alignSelf: 'center', ml: 4 }}\n >\n <Icon name=\"more_vert\" size={20} sx={{ color: 'text.secondary' }} />\n </IconButton>\n </ListItemWrapper>\n <Divider variant={isLast ? 'fullWidth' : 'inset'} />\n </React.Fragment>\n )\n })}\n </List>\n\n <Menu\n anchorEl={menuAnchorEl}\n anchorOrigin={{ horizontal: 'right', vertical: 'bottom' }}\n disableScrollLock={true}\n onClose={handleMenuClose}\n open={Boolean(menuAnchorEl)}\n transformOrigin={{ horizontal: 'right', vertical: 'top' }}\n >\n <MenuItem onClick={handleMenuAction} sx={{ p: 12 }}>\n <Text variant=\"body1\">\n {menuRow?.status === RecurrenceStatus.Missed\n ? copy.mark_as_paid_cta\n : copy.mark_as_unpaid_cta}\n </Text>\n </MenuItem>\n </Menu>\n </Stack>\n )\n}\n","import Card from '@mui/material/Card'\nimport CardActionArea from '@mui/material/CardActionArea'\nimport Stack from '@mui/material/Stack'\nimport { alpha, useTheme } from '@mui/material'\n\nimport { ChevronRight } from '@mxenabled/mx-icons'\nimport { Text } from '@mxenabled/mxui'\n\nimport { useGlobalCopyStore } from '../../common'\nimport { DATE_FORMATS_INTL, formatDate } from '../../core/constants'\nimport { RecurrenceStatus } from '../../core'\nimport { BeatMaterialIcon } from '../../microinsights'\n\ninterface UpcomingRecurrenceCardProps {\n expectedDate: Date\n onMarkAsPaidClick: () => void\n status?: RecurrenceStatus\n}\n\nexport const UpcomingRecurrenceCard = ({\n expectedDate,\n onMarkAsPaidClick,\n status,\n}: UpcomingRecurrenceCardProps) => {\n const theme = useTheme()\n const { recurring: copy } = useGlobalCopyStore()\n\n const isPaid = status === RecurrenceStatus.Paid\n\n return (\n <Card variant=\"elevation\">\n <CardActionArea onClick={onMarkAsPaidClick}>\n <Stack\n alignItems=\"center\"\n direction=\"row\"\n justifyContent=\"space-between\"\n sx={{ px: 16, py: 14 }}\n >\n <Stack alignItems=\"center\" direction=\"row\" gap={12}>\n <BeatMaterialIcon\n bgColor={alpha(theme.palette.primary.main, 0.15)}\n name={isPaid ? 'check_circle' : 'calendar_clock'}\n />\n <Stack direction=\"column\">\n <Text fontSize={11} variant=\"body1\">\n {isPaid ? copy.paid : copy.upcoming}\n </Text>\n <Text bold={true} variant=\"body1\">\n {formatDate(expectedDate, DATE_FORMATS_INTL.MONTH_DAY_YEAR)}\n </Text>\n </Stack>\n </Stack>\n\n <Stack alignItems=\"center\" direction=\"row\" gap={4}>\n <Text bold={true} variant=\"body1\">\n {isPaid ? copy.mark_as_unpaid_cta : copy.mark_as_paid_cta}\n </Text>\n <ChevronRight size={20} />\n </Stack>\n </Stack>\n </CardActionArea>\n </Card>\n )\n}\n","import React from 'react'\nimport { observer } from 'mobx-react-lite'\nimport { subDays } from 'date-fns/subDays'\nimport { startOfToday } from 'date-fns/startOfToday'\nimport { endOfMonth } from 'date-fns/endOfMonth'\n\nimport Button from '@mui/material/Button'\nimport Divider from '@mui/material/Divider'\nimport List from '@mui/material/List'\nimport Stack from '@mui/material/Stack'\n\nimport { Delete } from '@mxenabled/mx-icons'\n\nimport { MerchantLogo, P, Text } from '@mxenabled/mxui'\n\nimport {\n ANALYTICS_EVENTS,\n DataRow,\n Dialog,\n Drawer,\n useAccountStore,\n useEvent,\n useGlobalCopyStore,\n useGlobalUiStore,\n useRecurringTransactionsStore,\n useTransactionStore,\n} from '../../common'\nimport {\n type Member,\n type Recurrence,\n type RepeatingTransaction,\n type Transaction,\n RecurrenceStatus,\n RepeatingType,\n} from '../../core'\n\nimport { TransactionDetails } from '../../transactions'\nimport { AccountDetailsDrawer, useAccountUiStore } from '../../accounts'\n\nimport { formatCurrency } from '../../core/utils/NumberFormatting'\nimport { getNextUpcomingDate } from '../../core/utils/RecurringTransactionsUtil'\nimport { LinkTransactionDrawer } from './actions/LinkTransactionDrawer'\nimport { MarkAsPaidDialog } from './actions/MarkAsPaidDialog'\nimport { MarkAsUnpaidDialog } from './actions/MarkAsUnpaidDialog'\nimport { PaymentScheduleAction } from './actions/PaymentScheduleAction'\nimport { RecurringTransactionList } from './RecurringTransactionList'\nimport { UpcomingRecurrenceCard } from './UpcomingRecurrenceCard'\n\ninterface RecurringTransactionDetailsProps {\n onDeleted: () => void\n recurringTransaction: RepeatingTransaction\n selectedRecurrence: Recurrence | null\n}\n\nexport const RecurringTransactionDetails = observer(\n ({ onDeleted, recurringTransaction, selectedRecurrence }: RecurringTransactionDetailsProps) => {\n const { recurring: copy } = useGlobalCopyStore()\n const { selectedAccountGuids } = useGlobalUiStore()\n const { onEvent } = useEvent()\n const { deleteRepeatingTransaction, markRecurrenceAsUnpaid, recurrences } =\n useRecurringTransactionsStore()\n const { detailedTransactions, setFilter, transactions } = useTransactionStore()\n const { setSelectedAccount, setSelectedMember } = useAccountUiStore()\n const { members } = useAccountStore()\n const { amount, description, merchant_guid } = recurringTransaction\n\n const [showAccountDetails, setShowAccountDetails] = React.useState(false)\n const [showDeleteConfirm, setShowDeleteConfirm] = React.useState(false)\n const [showMarkAsPaid, setShowMarkAsPaid] = React.useState(false)\n const [showMarkAsUnpaid, setShowMarkAsUnpaid] = React.useState(false)\n const [unlinkTransactionGuid, setUnlinkTransactionGuid] = React.useState('')\n const [showLinkTransaction, setShowLinkTransaction] = React.useState(false)\n const [transactionGuid, setTransactionGuid] = React.useState('')\n\n React.useEffect(() => {\n setFilter({\n accounts: selectedAccountGuids,\n dateRange: { start: subDays(startOfToday(), 90), end: endOfMonth(startOfToday()) },\n custom: (t: Transaction) => t.repeating_transaction_guid === recurringTransaction.guid,\n })\n }, [recurringTransaction.guid])\n\n const transaction = React.useMemo(\n () => detailedTransactions.find((t) => t.guid === transactionGuid),\n [transactionGuid, detailedTransactions],\n )\n\n const isIncome = recurringTransaction.repeating_transaction_type === RepeatingType.Income\n\n const filteredTransactions = React.useMemo(\n () => transactions.filter((t) => t.repeating_transaction_guid === recurringTransaction.guid),\n [transactions, recurringTransaction.guid],\n )\n\n const nextUpcomingDate = getNextUpcomingDate(recurringTransaction, recurrences)\n\n const handleAccountClick = () => {\n if (recurringTransaction.account) {\n setSelectedAccount(recurringTransaction.account)\n const member =\n members.find((m: Member) => m.guid === recurringTransaction.account?.member_guid) ||\n ({} as Member)\n if (member) {\n setSelectedMember(member)\n }\n setShowAccountDetails(true)\n }\n }\n\n const handleDeleteRecurringTransaction = async () => {\n await deleteRepeatingTransaction(recurringTransaction.guid)\n onDeleted()\n }\n\n const handleDeleteButtonClick = () => {\n setShowDeleteConfirm(true)\n\n onEvent(ANALYTICS_EVENTS.RECURRING_TRANSACTIONS_DETAILS_CLICK_DELETE)\n }\n\n const handleMarkAsPaidClick = () => {\n setShowMarkAsPaid(true)\n onEvent(ANALYTICS_EVENTS.RECURRING_TRANSACTIONS_LIST_CLICK_MARK_AS_PAID)\n }\n\n const handleLinkTransaction = () => {\n setShowMarkAsPaid(false)\n setShowLinkTransaction(true)\n }\n\n const handleMarkAsUnpaidClick = (transactionGuid: string) => {\n setUnlinkTransactionGuid(transactionGuid)\n setShowMarkAsUnpaid(true)\n onEvent(ANALYTICS_EVENTS.RECURRING_TRANSACTIONS_LIST_CLICK_MARK_AS_UNPAID)\n }\n\n const handleUnlinkTransaction = async () => {\n const txn = transactions.find((t) => t.guid === unlinkTransactionGuid)\n if (txn) await markRecurrenceAsUnpaid(txn)\n\n setShowMarkAsUnpaid(false)\n setUnlinkTransactionGuid('')\n }\n\n return (\n <Stack bgcolor=\"background.default\" direction=\"column\" height=\"100%\">\n <Stack direction=\"column\" m={24}>\n <MerchantLogo\n categoryGuid={transaction?.category_guid || ''}\n merchantGuid={merchant_guid}\n size={64}\n sx={{ mb: 12 }}\n />\n <Text bold={true} variant=\"body1\">\n {description}\n </Text>\n <P color={isIncome ? 'success.main' : 'text.primary'} sx={{ mt: 4, mb: 16 }} variant=\"h1\">\n {isIncome ? '+' : ''}\n {formatCurrency(amount, '0,0.00')}\n </P>\n <UpcomingRecurrenceCard\n expectedDate={\n selectedRecurrence?.occurredOnDate ||\n selectedRecurrence?.expectedDate ||\n nextUpcomingDate\n }\n onMarkAsPaidClick={\n selectedRecurrence?.status === RecurrenceStatus.Paid &&\n selectedRecurrence.transaction?.guid\n ? () => handleMarkAsUnpaidClick(selectedRecurrence.transaction!.guid)\n : handleMarkAsPaidClick\n }\n status={selectedRecurrence?.status}\n />\n </Stack>\n <List sx={{ bgcolor: 'background.paper' }}>\n {recurringTransaction.account && (\n <>\n <DataRow\n iconName=\"checkbook\"\n label={copy.account}\n onClick={handleAccountClick}\n showChevron={false}\n value={recurringTransaction.account.displayName || ''}\n />\n <Divider variant=\"inset\" />\n </>\n )}\n\n {transaction?.category && (\n <>\n <DataRow\n iconName=\"monetization_on\"\n label={copy.category}\n value={transaction.category}\n />\n <Divider variant=\"inset\" />\n </>\n )}\n\n <PaymentScheduleAction repeatingTransaction={recurringTransaction} />\n <Divider />\n </List>\n\n <Button\n color=\"error\"\n onClick={handleDeleteButtonClick}\n startIcon={<Delete />}\n sx={{ mx: 24, my: 16 }}\n variant=\"text\"\n >\n {isIncome ? copy.delete_income_title : copy.delete_expense_title}\n </Button>\n\n <RecurringTransactionList\n isIncome={isIncome}\n onMarkAsPaidClick={handleMarkAsPaidClick}\n onMarkAsUnpaidClick={handleMarkAsUnpaidClick}\n onTransactionClick={setTransactionGuid}\n recurringTransaction={recurringTransaction}\n transactions={filteredTransactions}\n />\n\n <Drawer\n ariaLabelClose={copy.close_drawer_aria}\n isOpen={!!transactionGuid && Boolean(transaction)}\n onClose={() => setTransactionGuid('')}\n title={copy.transaction_details_drawer_title}\n >\n {transaction && <TransactionDetails transaction={transaction} />}\n </Drawer>\n\n <Dialog\n copy={{\n title: isIncome ? copy.delete_income_title : copy.delete_expense_title,\n close_aria: copy.close_drawer_aria,\n }}\n isOpen={showDeleteConfirm}\n onClose={() => setShowDeleteConfirm(false)}\n onPrimaryAction={handleDeleteRecurringTransaction}\n >\n <Text>{isIncome ? copy.delete_income_description : copy.delete_expense_description}</Text>\n </Dialog>\n\n <MarkAsPaidDialog\n isOpen={showMarkAsPaid}\n onClose={() => setShowMarkAsPaid(false)}\n onLinkTransaction={handleLinkTransaction}\n />\n\n <MarkAsUnpaidDialog\n isOpen={showMarkAsUnpaid}\n onClose={() => {\n setShowMarkAsUnpaid(false)\n setUnlinkTransactionGuid('')\n }}\n onUnlinkTransaction={handleUnlinkTransaction}\n />\n\n <LinkTransactionDrawer\n isOpen={showLinkTransaction}\n onClose={() => setShowLinkTransaction(false)}\n recurringTransaction={recurringTransaction}\n />\n\n <AccountDetailsDrawer\n isOpen={showAccountDetails}\n onClose={() => setShowAccountDetails(false)}\n />\n </Stack>\n )\n },\n)\n","import React from 'react'\nimport { observer } from 'mobx-react-lite'\n\nimport ListItem from '@mui/material/ListItem'\nimport ListItemAvatar from '@mui/material/ListItemAvatar'\nimport ListItemButton from '@mui/material/ListItemButton'\nimport ListItemText from '@mui/material/ListItemText'\nimport Stack from '@mui/material/Stack'\n\nimport { InstitutionLogo, MerchantLogo, Text } from '@mxenabled/mxui'\n\nimport { Drawer, useGlobalCopyStore } from '../../../../common'\nimport { type RepeatingTransaction, RepeatingType } from '../../../../core'\n\nimport { getFrequencyLabel } from '../../../../core/utils/RecurringTransactionsUtil'\nimport { RecurringTransactionDetails } from '../../RecurringTransactionDetails'\nimport { formatCurrency } from '../../../../core/utils/NumberFormatting'\n\ninterface RecurringRowProps {\n onClick?: (repeatingTransaction: RepeatingTransaction) => void\n repeatingTransaction: RepeatingTransaction\n}\n\nexport const RecurringRow = observer(\n ({ onClick = () => {}, repeatingTransaction }: RecurringRowProps) => {\n const { recurring: copy } = useGlobalCopyStore()\n\n const [isDetialsOpen, setIsDetailsOpen] = React.useState(false)\n\n const categoryGuid = React.useMemo(\n () =>\n repeatingTransaction.transactions.length === 0\n ? ''\n : repeatingTransaction.transactions[0].category_guid || '',\n [repeatingTransaction],\n )\n\n const institutionName = repeatingTransaction.account?.displayName || ''\n\n const isCredit = repeatingTransaction.repeating_transaction_type === RepeatingType.Income\n const statusLabel = getFrequencyLabel(copy, repeatingTransaction, true)\n\n const onItemClick = () => {\n onClick(repeatingTransaction)\n setIsDetailsOpen(true)\n }\n\n return (\n <ListItem disableGutters={true} disablePadding={true}>\n <ListItemButton onClick={onItemClick}>\n <ListItemAvatar>\n <MerchantLogo\n categoryGuid={categoryGuid}\n merchantGuid={repeatingTransaction.merchant_guid}\n />\n </ListItemAvatar>\n <ListItemText>\n <Stack direction=\"row\" gap={4} sx={{ justifyContent: 'space-between' }}>\n <Stack direction=\"column\" sx={{ width: '50%' }}>\n <Text bold={true} variant=\"body1\">\n {repeatingTransaction.description}\n </Text>\n <Stack alignItems=\"center\" direction=\"row\" gap={6}>\n {repeatingTransaction.account?.institution_guid && (\n <InstitutionLogo\n alt={institutionName}\n institutionGuid={repeatingTransaction.account?.institution_guid}\n size={12}\n />\n )}\n <Text variant=\"caption\">{institutionName}</Text>\n </Stack>\n </Stack>\n\n <Stack alignItems=\"flex-end\" sx={{ width: '50%' }}>\n <Text\n bold={true}\n color={isCredit ? 'success.main' : 'text.primary'}\n variant=\"body1\"\n >\n {isCredit ? '+' : ''}\n {formatCurrency(repeatingTransaction.amount, '0,0.00')}\n </Text>\n <Stack\n direction=\"row\"\n sx={{\n alignItems: 'center',\n gap: 6,\n justifyContent: 'flex-end',\n textTransform: 'uppercase',\n width: '100%',\n }}\n >\n <Text bold={true} color=\"text.secondary\" variant=\"caption\">\n {statusLabel}\n </Text>\n </Stack>\n </Stack>\n </Stack>\n </ListItemText>\n </ListItemButton>\n\n <Drawer\n ariaLabelClose={copy.close_drawer_aria}\n isOpen={isDetialsOpen}\n onClose={() => setIsDetailsOpen(false)}\n title={\n repeatingTransaction.repeating_transaction_type === RepeatingType.Income\n ? copy.income_details\n : copy.expense_details\n }\n >\n <RecurringTransactionDetails\n onDeleted={() => setIsDetailsOpen(false)}\n recurringTransaction={repeatingTransaction}\n selectedRecurrence={null}\n />\n </Drawer>\n </ListItem>\n )\n },\n)\n","import { observer } from 'mobx-react-lite'\n\nimport Box from '@mui/material/Box'\nimport Stack from '@mui/material/Stack'\n\nimport { Text } from '@mxenabled/mxui'\n\nimport { useGlobalCopyStore } from '../../../../common'\nimport { type Transaction, Frequency } from '../../../../core'\nimport SubheaderRow from '../../../../common/components/SubheaderRow'\n\nimport { TransactionRow } from '../../../../transactions'\n\nimport { fromUnixToDayOfWeekAndDate } from '../../../../core/utils/DateUtil'\nimport { PaymentSchedule } from '../../PaymentSchedule'\n\ninterface AddRecurringTransactionDetailsProps {\n bgcolor?: string\n firstDay: number\n secondDay?: number\n frequency: Frequency\n onFrequencyChange: (frequency: Frequency) => void\n onFirstDayChange: (day: number) => void\n onSecondDayChange: (day: number) => void\n transaction: Transaction\n}\n\nexport const AddRecurringTransactionDetails = observer(\n ({\n bgcolor = 'background.default',\n firstDay,\n secondDay,\n frequency,\n onFrequencyChange,\n onFirstDayChange,\n onSecondDayChange,\n transaction,\n }: AddRecurringTransactionDetailsProps) => {\n const { recurring: copy } = useGlobalCopyStore()\n\n return (\n <Stack bgcolor={bgcolor} gap={24} height=\"100%\">\n <Stack>\n <SubheaderRow bgcolor={bgcolor}>\n {fromUnixToDayOfWeekAndDate(transaction.date)}\n </SubheaderRow>\n <TransactionRow component=\"div\" transaction={transaction} />\n </Stack>\n\n <Box>\n <Text bold={true} sx={{ mx: 24 }} variant=\"body1\">\n {copy.payment_schedule}\n </Text>\n\n <PaymentSchedule\n firstDay={firstDay}\n frequency={frequency}\n onFirstDayChange={onFirstDayChange}\n onFrequencyChange={onFrequencyChange}\n onSecondDayChange={onSecondDayChange}\n secondDay={secondDay}\n />\n </Box>\n </Stack>\n )\n },\n)\n","import React from 'react'\nimport { observer } from 'mobx-react-lite'\nimport { formatISO } from 'date-fns/formatISO'\nimport { fromUnixTime } from 'date-fns/fromUnixTime'\n\nimport Button from '@mui/material/Button'\n\nimport { Add } from '@mxenabled/mx-icons'\n\nimport {\n Drawer,\n useGlobalCopyStore,\n useRecurringTransactionsStore,\n useTransactionStore,\n useUserStore,\n} from '../../../../common'\nimport {\n type RepeatingTransaction,\n type Transaction,\n Frequency,\n RepeatingType,\n} from '../../../../core'\n\nimport { SelectTransaction } from './SelectTransaction'\nimport { AddRecurringTransactionDetails } from './AddRecurringTransactionDetails'\n\nimport {\n expenseFilter,\n expenseFilterSearch,\n incomeFilter,\n incomeFilterSearch,\n} from '../../../../transactions/utils/Filters'\n\nimport { getNextPaymentDate } from '../../../../core/utils/RecurringTransactionsUtil'\n\ninterface AddRecurringTransactionProps {\n isIncome?: boolean\n label: string\n onAddRecurringTransaction?: () => void\n}\n\nexport const AddRecurringTransaction = observer(\n ({\n isIncome = false,\n label,\n onAddRecurringTransaction = () => null,\n }: AddRecurringTransactionProps) => {\n const { recurring: copy } = useGlobalCopyStore()\n const { filter, setFilter, transactions } = useTransactionStore()\n const { addRepeatingTransaction } = useRecurringTransactionsStore()\n const { user } = useUserStore()\n\n const [isSelectTransactionOpen, setIsSelectTransactionOpen] = React.useState(false)\n const [transactionGuid, setTransactionGuid] = React.useState('')\n const [frequency, setFrequency] = React.useState(Frequency.EveryMonth)\n const [firstDay, setFirstDay] = React.useState(1)\n const [secondDay, setSecondDay] = React.useState(15)\n\n const transaction = React.useMemo(\n () => transactions.find((t) => t.guid === transactionGuid),\n [transactionGuid, transactions],\n )\n\n const handleOpen = () => {\n setIsSelectTransactionOpen(true)\n\n if (isIncome) {\n setFilter({ ...filter, custom: incomeFilter })\n } else {\n setFilter({ ...filter, custom: expenseFilter })\n }\n }\n\n const handleAddRecurringTransaction = async () => {\n if (!transaction) {\n closeOnAdd()\n return\n }\n onAddRecurringTransaction()\n\n const nextDate = getNextPaymentDate(frequency, fromUnixTime(transaction.date), firstDay)\n\n const repeatingTransaction = {\n account_guid: transaction.account_guid,\n amount: transaction.amount,\n created_by: 0, // User\n merchant_guid: transaction.merchant_guid,\n description: transaction.payee || transaction.description || transaction.feed_description,\n predicted_occurs_on: formatISO(nextDate, { representation: 'date' }),\n recurrence_day: firstDay,\n recurrence_type: frequency,\n repeating_transaction_type: isIncome ? RepeatingType.Income : RepeatingType.Bill,\n second_recurrence_day: secondDay,\n transaction_type: transaction.transaction_type,\n user_guid: user.guid,\n } as RepeatingTransaction\n\n await addRepeatingTransaction(repeatingTransaction, transaction)\n\n closeOnAdd()\n }\n\n const closeOnAdd = () => {\n setTransactionGuid('')\n setIsSelectTransactionOpen(false)\n }\n\n return (\n <>\n <Button onClick={handleOpen} startIcon={<Add size={24} />} variant=\"contained\">\n {label}\n </Button>\n\n <Drawer\n ariaLabelClose={copy.close_drawer_aria}\n isOpen={isSelectTransactionOpen}\n onClose={() => setIsSelectTransactionOpen(false)}\n title={label}\n >\n <SelectTransaction\n description={isIncome ? copy.add_income_description : copy.add_expense_description}\n onSearch={(searchValue) => {\n setFilter({\n ...filter,\n custom: (transaction: Transaction) => {\n if (isIncome) {\n return searchValue\n ? incomeFilterSearch(transaction, searchValue)\n : incomeFilter(transaction)\n } else {\n return searchValue\n ? expenseFilterSearch(transaction, searchValue)\n : expenseFilter(transaction)\n }\n },\n })\n }}\n onSelected={(guid) => setTransactionGuid(guid)}\n />\n </Drawer>\n\n <Drawer\n ariaLabelClose={copy.close_drawer_aria}\n isOpen={Boolean(transactionGuid)}\n onClose={() => setTransactionGuid('')}\n onPrimaryAction={handleAddRecurringTransaction}\n title={isIncome ? copy.income_details : copy.expense_details}\n >\n {transaction && (\n <AddRecurringTransactionDetails\n firstDay={firstDay}\n frequency={frequency}\n onFirstDayChange={setFirstDay}\n onFrequencyChange={setFrequency}\n onSecondDayChange={setSecondDay}\n secondDay={secondDay}\n transaction={transaction}\n />\n )}\n </Drawer>\n </>\n )\n },\n)\n","import { observer } from 'mobx-react-lite'\n\nimport Stack from '@mui/material/Stack'\n\nimport { ReceiptLong } from '@mxenabled/mx-icons'\n\nimport { P } from '@mxenabled/mxui'\n\nimport { ANALYTICS_EVENTS, useEvent, useGlobalCopyStore } from '../../../../common'\n\nimport { AddRecurringTransaction } from './AddRecurringTransaction'\n\ninterface RecurringSettingsZeroStateProps {\n zeroStateFor: 'expenses' | 'income'\n}\n\nexport const RecurringSettingsZeroState = observer(\n ({ zeroStateFor }: RecurringSettingsZeroStateProps) => {\n const { recurring: copy } = useGlobalCopyStore()\n const { onEvent } = useEvent()\n\n const isIncome = zeroStateFor === 'income'\n const title = isIncome\n ? copy.recurring_setting_zero_state_income_title\n : copy.recurring_setting_zero_state_expenses_title\n const description = isIncome\n ? copy.recurring_setting_zero_state_income_description\n : copy.recurring_setting_zero_state_expenses_description\n const label = isIncome ? copy.add_income : copy.add_expense\n\n const onAdd = () => {\n onEvent(\n isIncome\n ? ANALYTICS_EVENTS.RECURRING_TRANSACTIONS_CLICK_ADD_INCOME\n : ANALYTICS_EVENTS.RECURRING_ACTIVITY_CLICK_ADD_EXPENSE,\n )\n }\n\n return (\n <Stack sx={{ alignItems: 'center', p: 24, pt: 48 }}>\n <ReceiptLong size={48} />\n <P sx={{ my: 8, fontWeight: 600 }} variant=\"body1\">\n {title}\n </P>\n <P color=\"text.secondary\" sx={{ mb: 32 }} variant=\"subtitle2\">\n {description}\n </P>\n <AddRecurringTransaction\n isIncome={isIncome}\n label={label}\n onAddRecurringTransaction={onAdd}\n />\n </Stack>\n )\n },\n)\n","import React from 'react'\nimport { observer } from 'mobx-react-lite'\n\nimport Box from '@mui/material/Box'\nimport Divider from '@mui/material/Divider'\nimport List from '@mui/material/List'\nimport Stack from '@mui/material/Stack'\n\nimport { Text } from '@mxenabled/mxui'\n\nimport {\n ANALYTICS_EVENTS,\n useEvent,\n useGlobalCopyStore,\n useRecurringTransactionsStore,\n} from '../../../../common'\nimport { type RepeatingTransaction, Frequency, RepeatingType } from '../../../../core'\n\nimport { RecurringRow } from './RecurringRow'\nimport { AddRecurringTransaction } from './AddRecurringTransaction'\nimport { RecurringSettingsZeroState } from './RecurringSettingsZeroState'\n\ninterface ManageIncomeProps {\n forOverview?: boolean\n}\n\nexport const ManageIncome = observer(({ forOverview = false }: ManageIncomeProps) => {\n const { recurring: copy } = useGlobalCopyStore()\n const { detailedRepeatingTransactions } = useRecurringTransactionsStore()\n const { onEvent } = useEvent()\n\n const onClick = (repeatingTransaction: RepeatingTransaction) => {\n onEvent(ANALYTICS_EVENTS.RECURRING_TRANSACTIONS_CLICK_INCOME, {\n repeating_transaction_guid: repeatingTransaction.guid,\n })\n }\n\n const onAdd = () => {\n onEvent(ANALYTICS_EVENTS.RECURRING_TRANSACTIONS_CLICK_ADD_INCOME)\n }\n\n const filteredTransactions = detailedRepeatingTransactions.filter(\n (rt) =>\n rt.repeating_transaction_type === RepeatingType.Income &&\n (rt.transactions.length > 0 || rt.recurrence_type === Frequency.EveryYear),\n )\n\n return (\n <>\n {filteredTransactions.length !== 0 ? (\n <Stack\n sx={{\n height: forOverview ? 'calc(100vh - 62px)' : 'calc(100vh - 109px)',\n maxHeight: forOverview ? 'calc(100vh - 62px)' : 'calc(100vh - 109px)',\n }}\n >\n {forOverview && (\n <Text bold={true} sx={{ mb: 4, mt: 12, mx: 24 }} variant=\"body2\">\n {copy.income}\n </Text>\n )}\n <Box sx={{ flex: 1, overflow: 'auto' }}>\n <List sx={{ bgcolor: 'background.paper' }}>\n {filteredTransactions.map((rt, index) => (\n <React.Fragment key={rt.guid}>\n <RecurringRow onClick={onClick} repeatingTransaction={rt} />\n <Divider\n variant={index < filteredTransactions.length - 1 ? 'inset' : 'fullWidth'}\n />\n </React.Fragment>\n ))}\n </List>\n </Box>\n <Box>\n <Divider />\n <Box\n sx={{\n alignContent: 'center',\n bgcolor: 'background.paper',\n justifyContent: 'flex-end',\n px: 24,\n py: 12,\n textAlign: 'right',\n }}\n >\n <AddRecurringTransaction\n isIncome={true}\n label={copy.add_income}\n onAddRecurringTransaction={onAdd}\n />\n </Box>\n </Box>\n </Stack>\n ) : (\n <RecurringSettingsZeroState zeroStateFor=\"income\" />\n )}\n </>\n )\n})\n"],"names":["expenseFilter","t","CategoryGuids","TransactionType","expenseFilterSearch","searchValue","incomeFilter","incomeFilterSearch","SelectTransaction","observer","bgcolor","description","onSearch","onSelected","recurringCopy","useGlobalCopyStore","setSearchValue","useTransactionsUiStore","jsxs","Stack","P","jsx","SearchBox","value","TransactionList","buildFilter","recurringTransaction","isIncome","RepeatingType","LinkTransactionDrawer","isOpen","onClose","copy","markRecurrenceAsPaid","useRecurringTransactionsStore","filter","setFilter","transactions","useTransactionStore","React","handleSearch","handleSelected","guid","transaction","Drawer","MarkAsPaidDialog","onLinkTransaction","Dialog","Text","MarkAsUnpaidDialog","onUnlinkTransaction","PaymentSchedule","frequency","firstDay","secondDay","onFrequencyChange","onFirstDayChange","onSecondDayChange","frequencies","Frequency","daysOfWeek","daysOfMonth","day","formatOrdinal","beginDaysOfMonth","endDaysOfMonth","weeklyType","monthlyType","tempDayOfYear","setDayOfYear","startOfToday","dayOfYear","addYears","handleYearlyChange","date","getDayOfYear","Select","LocalizationProvider","AdapterDateFns","DatePicker","subDays","PaymentScheduleAction","repeatingTransaction","updateRepeatingTransaction","onEvent","useEvent","setIsOpen","setFrequency","setFirstDay","setSecondDay","handleSave","handleOpen","ANALYTICS_EVENTS","Fragment","DataRow","getFrequencyLabel","buildRows","missedRecurrences","paidRows","RecurrenceStatus","missedRows","r","getUnixTime","a","b","RecurringTransactionList","onMarkAsUnpaidClick","onMarkAsPaidClick","onTransactionClick","recurrences","menuAnchorEl","setMenuAnchorEl","menuRow","setMenuRow","rows","handleClick","row","handleMenuOpen","e","handleMenuClose","handleMenuAction","List","index","isPaid","isMissed","isLast","ListItemWrapper","ListItemAvatar","MerchantLogo","ListItemText","formatDate","fromUnixTime","DATE_FORMATS_INTL","CheckCircle","Cancel","formatCurrency","IconButton","Icon","Divider","Menu","MenuItem","UpcomingRecurrenceCard","expectedDate","status","theme","useTheme","Card","CardActionArea","BeatMaterialIcon","alpha","ChevronRight","RecurringTransactionDetails","onDeleted","selectedRecurrence","selectedAccountGuids","useGlobalUiStore","deleteRepeatingTransaction","markRecurrenceAsUnpaid","detailedTransactions","setSelectedAccount","setSelectedMember","useAccountUiStore","members","useAccountStore","amount","merchant_guid","showAccountDetails","setShowAccountDetails","showDeleteConfirm","setShowDeleteConfirm","showMarkAsPaid","setShowMarkAsPaid","showMarkAsUnpaid","setShowMarkAsUnpaid","unlinkTransactionGuid","setUnlinkTransactionGuid","showLinkTransaction","setShowLinkTransaction","transactionGuid","setTransactionGuid","endOfMonth","filteredTransactions","nextUpcomingDate","getNextUpcomingDate","handleAccountClick","member","m","handleDeleteRecurringTransaction","handleDeleteButtonClick","handleMarkAsPaidClick","handleLinkTransaction","handleMarkAsUnpaidClick","handleUnlinkTransaction","txn","Button","Delete","TransactionDetails","AccountDetailsDrawer","RecurringRow","onClick","isDetialsOpen","setIsDetailsOpen","categoryGuid","institutionName","isCredit","statusLabel","ListItem","ListItemButton","InstitutionLogo","AddRecurringTransactionDetails","SubheaderRow","fromUnixToDayOfWeekAndDate","TransactionRow","Box","AddRecurringTransaction","label","onAddRecurringTransaction","addRepeatingTransaction","user","useUserStore","isSelectTransactionOpen","setIsSelectTransactionOpen","handleAddRecurringTransaction","closeOnAdd","nextDate","getNextPaymentDate","formatISO","Add","RecurringSettingsZeroState","zeroStateFor","title","ReceiptLong","ManageIncome","forOverview","detailedRepeatingTransactions","onAdd","rt"],"mappings":"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"}
@@ -43,3 +43,4 @@ const D = ({
43
43
  export {
44
44
  D as M
45
45
  };
46
+ //# sourceMappingURL=MicroWidgetContainer-B2NnKBgW.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MicroWidgetContainer-B2NnKBgW.mjs","sources":["../src/common/components/MicroWidgetContainer.tsx"],"sourcesContent":["import Button from '@mui/material/Button'\nimport Card from '@mui/material/Card'\nimport CardContent from '@mui/material/CardContent'\nimport CardHeader from '@mui/material/CardHeader'\nimport type { SxProps } from '@mui/material/styles'\n\nimport { H3, P } from '@mxenabled/mxui'\nimport { ChevronRight } from '@mxenabled/mx-icons'\n\nimport { WidgetContainerProvider } from '../context'\nimport { useDimensions } from '../hooks/useDimensions'\n\ninterface MicroWidgetContainerProps {\n className?: string\n ctaLabel: string\n onCTAClick: () => void\n subHeader?: string\n sx?: SxProps\n title: string\n variant?: 'borderless' | 'card'\n}\n\nconst MicroWidgetContainer: React.FC<React.PropsWithChildren<MicroWidgetContainerProps>> = ({\n children,\n className,\n ctaLabel,\n onCTAClick,\n subHeader,\n sx,\n title,\n variant = 'borderless',\n}) => {\n const [containerRef, { height, width }] = useDimensions()\n\n const content = (\n <>\n <CardHeader\n action={\n <Button\n endIcon={<ChevronRight size={20} />}\n onClick={onCTAClick}\n size=\"small\"\n variant=\"text\"\n >\n {ctaLabel}\n </Button>\n }\n subheader={\n subHeader && (\n <P sx={{ color: 'text.secondary' }} variant=\"body2\">\n {subHeader}\n </P>\n )\n }\n sx={{ p: 0, pb: 8, width: 'calc(100% - 8px)', '& .MuiCardHeader-action': { mt: 0 } }}\n title={<H3 sx={{ width: 'calc(100% - 10px)' }}>{title}</H3>}\n />\n\n <CardContent ref={containerRef} sx={{ p: 0, ':last-child': { pb: 0 } }}>\n <WidgetContainerProvider availableHeight={height} availableWidth={width}>\n {children}\n </WidgetContainerProvider>\n </CardContent>\n </>\n )\n\n if (variant === 'borderless') return content\n\n return (\n <Card className={className} sx={{ alignItems: 'center', p: 16, ...sx }}>\n {content}\n </Card>\n )\n}\n\nexport default MicroWidgetContainer\n"],"names":["MicroWidgetContainer","children","className","ctaLabel","onCTAClick","subHeader","sx","title","variant","containerRef","height","width","useDimensions","content","jsxs","Fragment","jsx","CardHeader","Button","ChevronRight","P","H3","CardContent","WidgetContainerProvider","Card"],"mappings":";;;;;;;;;AAsBA,MAAMA,IAAqF,CAAC;AAAA,EAC1F,UAAAC;AAAA,EACA,WAAAC;AAAA,EACA,UAAAC;AAAA,EACA,YAAAC;AAAA,EACA,WAAAC;AAAA,EACA,IAAAC;AAAA,EACA,OAAAC;AAAA,EACA,SAAAC,IAAU;AACZ,MAAM;AACJ,QAAM,CAACC,GAAc,EAAE,QAAAC,GAAQ,OAAAC,EAAA,CAAO,IAAIC,EAAA,GAEpCC,IACJ,gBAAAC,EAAAC,GAAA,EACE,UAAA;AAAA,IAAA,gBAAAC;AAAA,MAACC;AAAA,MAAA;AAAA,QACC,QACE,gBAAAD;AAAA,UAACE;AAAA,UAAA;AAAA,YACC,SAAS,gBAAAF,EAACG,GAAA,EAAa,MAAM,GAAA,CAAI;AAAA,YACjC,SAASf;AAAA,YACT,MAAK;AAAA,YACL,SAAQ;AAAA,YAEP,UAAAD;AAAA,UAAA;AAAA,QAAA;AAAA,QAGL,WACEE,KACE,gBAAAW,EAACI,GAAA,EAAE,IAAI,EAAE,OAAO,iBAAA,GAAoB,SAAQ,SACzC,UAAAf,EAAA,CACH;AAAA,QAGJ,IAAI,EAAE,GAAG,GAAG,IAAI,GAAG,OAAO,oBAAoB,2BAA2B,EAAE,IAAI,EAAA,EAAE;AAAA,QACjF,yBAAQgB,GAAA,EAAG,IAAI,EAAE,OAAO,oBAAA,GAAwB,UAAAd,EAAA,CAAM;AAAA,MAAA;AAAA,IAAA;AAAA,IAGxD,gBAAAS,EAACM,KAAY,KAAKb,GAAc,IAAI,EAAE,GAAG,GAAG,eAAe,EAAE,IAAI,EAAA,EAAE,GACjE,UAAA,gBAAAO,EAACO,GAAA,EAAwB,iBAAiBb,GAAQ,gBAAgBC,GAC/D,UAAAV,EAAA,CACH,EAAA,CACF;AAAA,EAAA,GACF;AAGF,SAAIO,MAAY,eAAqBK,IAGnC,gBAAAG,EAACQ,GAAA,EAAK,WAAAtB,GAAsB,IAAI,EAAE,YAAY,UAAU,GAAG,IAAI,GAAGI,EAAA,GAC/D,UAAAO,EAAA,CACH;AAEJ;"}
@@ -64,3 +64,4 @@ const J = ({
64
64
  export {
65
65
  J as M
66
66
  };
67
+ //# sourceMappingURL=MiniWidgetContainer-Bmv_WeUd.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MiniWidgetContainer-Bmv_WeUd.mjs","sources":["../src/common/components/MiniWidgetContainer.tsx"],"sourcesContent":["import React from 'react'\n\nimport Box from '@mui/material/Box'\nimport Button from '@mui/material/Button'\nimport Card from '@mui/material/Card'\nimport CardHeader from '@mui/material/CardHeader'\nimport CardContent from '@mui/material/CardContent'\nimport IconButton from '@mui/material/IconButton'\nimport type { SxProps } from '@mui/material/styles'\n\nimport { Icon } from '@mxenabled/mx-icons'\nimport { ChevronRight } from '@mxenabled/mx-icons'\n\nimport { H3, P, Text } from '@mxenabled/mxui'\n\nimport { WidgetContainerProvider } from '../context'\nimport { useDimensions } from '../hooks/useDimensions'\n\ninterface CardContainerProps {\n className?: string\n closeLabel?: string\n contentStyles?: SxProps\n onClose?: () => void\n onPrimaryCtaClick?: () => void\n primaryCtaLabel?: string\n primaryCtaLabelAria?: string\n subTitle?: string\n sx?: SxProps\n title?: string\n}\n\nconst MiniWidgetContainer: React.FC<React.PropsWithChildren<CardContainerProps>> = ({\n children,\n className = 'mx-cmn-mini-widget',\n closeLabel,\n contentStyles,\n onClose,\n onPrimaryCtaClick,\n primaryCtaLabel = '',\n primaryCtaLabelAria = '',\n subTitle = '',\n sx = {},\n title = '',\n}) => {\n const [containerRef, { height, width }] = useDimensions()\n\n return (\n <Card className={className} sx={{ touchAction: 'manipulation', ...sx }}>\n <CardHeader\n sx={{ pb: 8 }}\n title={\n <>\n <Box\n sx={{\n alignItems: 'center',\n display: 'grid',\n gap: 2,\n gridTemplateColumns: '1fr auto',\n pb: 4,\n }}\n >\n {title && <H3>{title}</H3>}\n\n {onClose ? (\n <IconButton aria-label={closeLabel} onClick={onClose} size=\"small\">\n <Icon name=\"close\" size={24} />\n </IconButton>\n ) : (\n onPrimaryCtaClick && (\n <Button\n aria-label={primaryCtaLabelAria}\n endIcon={<ChevronRight />}\n onClick={onPrimaryCtaClick}\n size=\"small\"\n >\n <Text bold={true} variant=\"body2\">\n {primaryCtaLabel}\n </Text>\n </Button>\n )\n )}\n </Box>\n\n {subTitle && (\n <P color=\"text.secondary\" sx={{ fontSize: 15, lineHeight: '20px' }} variant=\"body2\">\n {subTitle}\n </P>\n )}\n </>\n }\n />\n\n <CardContent ref={containerRef} sx={{ p: 0, ...contentStyles }}>\n <WidgetContainerProvider availableHeight={height} availableWidth={width}>\n {children}\n </WidgetContainerProvider>\n </CardContent>\n </Card>\n )\n}\n\nexport default MiniWidgetContainer\n"],"names":["MiniWidgetContainer","children","className","closeLabel","contentStyles","onClose","onPrimaryCtaClick","primaryCtaLabel","primaryCtaLabelAria","subTitle","sx","title","containerRef","height","width","useDimensions","jsxs","Card","jsx","CardHeader","Fragment","Box","H3","IconButton","Icon","Button","ChevronRight","Text","P","CardContent","WidgetContainerProvider"],"mappings":";;;;;;;;;;;AA+BA,MAAMA,IAA6E,CAAC;AAAA,EAClF,UAAAC;AAAA,EACA,WAAAC,IAAY;AAAA,EACZ,YAAAC;AAAA,EACA,eAAAC;AAAA,EACA,SAAAC;AAAA,EACA,mBAAAC;AAAA,EACA,iBAAAC,IAAkB;AAAA,EAClB,qBAAAC,IAAsB;AAAA,EACtB,UAAAC,IAAW;AAAA,EACX,IAAAC,IAAK,CAAA;AAAA,EACL,OAAAC,IAAQ;AACV,MAAM;AACJ,QAAM,CAACC,GAAc,EAAE,QAAAC,GAAQ,OAAAC,EAAA,CAAO,IAAIC,EAAA;AAE1C,SACE,gBAAAC,EAACC,KAAK,WAAAf,GAAsB,IAAI,EAAE,aAAa,gBAAgB,GAAGQ,EAAA,GAChE,UAAA;AAAA,IAAA,gBAAAQ;AAAA,MAACC;AAAA,MAAA;AAAA,QACC,IAAI,EAAE,IAAI,EAAA;AAAA,QACV,OACE,gBAAAH,EAAAI,GAAA,EACE,UAAA;AAAA,UAAA,gBAAAJ;AAAA,YAACK;AAAA,YAAA;AAAA,cACC,IAAI;AAAA,gBACF,YAAY;AAAA,gBACZ,SAAS;AAAA,gBACT,KAAK;AAAA,gBACL,qBAAqB;AAAA,gBACrB,IAAI;AAAA,cAAA;AAAA,cAGL,UAAA;AAAA,gBAAAV,KAAS,gBAAAO,EAACI,KAAI,UAAAX,EAAA,CAAM;AAAA,gBAEpBN,IACC,gBAAAa,EAACK,GAAA,EAAW,cAAYpB,GAAY,SAASE,GAAS,MAAK,SACzD,UAAA,gBAAAa,EAACM,KAAK,MAAK,SAAQ,MAAM,IAAI,EAAA,CAC/B,IAEAlB,KACE,gBAAAY;AAAA,kBAACO;AAAA,kBAAA;AAAA,oBACC,cAAYjB;AAAA,oBACZ,2BAAUkB,GAAA,EAAa;AAAA,oBACvB,SAASpB;AAAA,oBACT,MAAK;AAAA,oBAEL,4BAACqB,GAAA,EAAK,MAAM,IAAM,SAAQ,SACvB,UAAApB,EAAA,CACH;AAAA,kBAAA;AAAA,gBAAA;AAAA,cACF;AAAA,YAAA;AAAA,UAAA;AAAA,UAKLE,KACC,gBAAAS,EAACU,GAAA,EAAE,OAAM,kBAAiB,IAAI,EAAE,UAAU,IAAI,YAAY,OAAA,GAAU,SAAQ,SACzE,UAAAnB,EAAA,CACH;AAAA,QAAA,EAAA,CAEJ;AAAA,MAAA;AAAA,IAAA;AAAA,sBAIHoB,GAAA,EAAY,KAAKjB,GAAc,IAAI,EAAE,GAAG,GAAG,GAAGR,EAAA,GAC7C,4BAAC0B,GAAA,EAAwB,iBAAiBjB,GAAQ,gBAAgBC,GAC/D,UAAAb,GACH,EAAA,CACF;AAAA,EAAA,GACF;AAEJ;"}
@@ -93,3 +93,4 @@ export {
93
93
  z as g,
94
94
  U as s
95
95
  };
96
+ //# sourceMappingURL=NetWorthUtils-DfSH3z70.mjs.map