@mx-cartographer/experiences 9.3.5 → 9.3.7-alpha.al0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +8 -0
- package/dist/core/stores/BudgetsStore.es.js +30 -26
- package/dist/core/stores/BudgetsStore.es.js.map +1 -1
- package/dist/insights/components/insights/TransparentOverdraftV2/TransparentOverdraftV2.d.ts +8 -0
- package/dist/insights/components/insights/TransparentOverdraftV2/TransparentOverdraftV2.es.js +50 -0
- package/dist/insights/components/insights/TransparentOverdraftV2/TransparentOverdraftV2.es.js.map +1 -0
- package/dist/insights/components/insights/TransparentOverdraftV2/TransparentOverdraftV2Body.d.ts +8 -0
- package/dist/insights/components/insights/TransparentOverdraftV2/TransparentOverdraftV2Body.es.js +68 -0
- package/dist/insights/components/insights/TransparentOverdraftV2/TransparentOverdraftV2Body.es.js.map +1 -0
- package/dist/insights/components/insights/TransparentOverdraftV2/index.d.ts +1 -0
- package/dist/insights/components/insights/index.d.ts +1 -0
- package/dist/insights/index.es.js +25 -23
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,3 +1,11 @@
|
|
|
1
|
+
## [9.3.7] - 08-19-2026
|
|
2
|
+
|
|
3
|
+
- **FIXED** - Duplicate budget bubbles rendered when creating a budget due to a race condition between the HTTP POST response and the concurrent WebSocket creation event; `BudgetsStore` now performs idempotent upserts and deduplicates budgets and merchant budgets by GUID
|
|
4
|
+
|
|
5
|
+
## [9.3.6] - 08-12-2026
|
|
6
|
+
|
|
7
|
+
- **ADDED** - Creating the new TransparentOverdraftV2 insight
|
|
8
|
+
|
|
1
9
|
## [9.3.5] - 08-12-2026
|
|
2
10
|
|
|
3
11
|
- **FIXED** - Transaction detail view showed transfer/credit amounts (e.g. an account-to-account transfer deposit) as an unsigned, default-colored amount because the header keyed off `isIncome` (true only for the Income category) while the list keyed off `transaction_type`; the detail view now uses `transaction_type === CREDIT` so credits render as `+$Amount` in success green, consistent with the transactions list (MEW-3703)
|
|
@@ -1,17 +1,17 @@
|
|
|
1
|
-
import { CategoryGuids as
|
|
1
|
+
import { CategoryGuids as a } from "../constants/Category.es.js";
|
|
2
2
|
import { BudgetsApi as o } from "../api/BudgetsApi.es.js";
|
|
3
|
-
import { augmentBudgets as
|
|
3
|
+
import { augmentBudgets as g, findBudget as c, findSubBudget as h } from "../utils/BudgetUtil.es.js";
|
|
4
4
|
import { endOfMonth as l } from "date-fns/endOfMonth";
|
|
5
|
-
import { startOfMonth as
|
|
6
|
-
import { startOfToday as
|
|
7
|
-
import { makeAutoObservable as
|
|
8
|
-
var
|
|
5
|
+
import { startOfMonth as B } from "date-fns/startOfMonth";
|
|
6
|
+
import { startOfToday as n } from "date-fns/startOfToday";
|
|
7
|
+
import { makeAutoObservable as p, reaction as f, runInAction as i } from "mobx";
|
|
8
|
+
var M = class {
|
|
9
9
|
api = new o("/", "");
|
|
10
10
|
globalStore;
|
|
11
11
|
alert = "";
|
|
12
12
|
dateRange = {
|
|
13
|
-
start:
|
|
14
|
-
end: l(
|
|
13
|
+
start: B(n()),
|
|
14
|
+
end: l(n())
|
|
15
15
|
};
|
|
16
16
|
budgets = [];
|
|
17
17
|
selectedBudget;
|
|
@@ -20,10 +20,10 @@ var x = class {
|
|
|
20
20
|
theme = {};
|
|
21
21
|
merchantBudgets = [];
|
|
22
22
|
constructor(t) {
|
|
23
|
-
this.globalStore = t, this.api = new o(t.endpoint, t.sessionToken, t.onError),
|
|
23
|
+
this.globalStore = t, this.api = new o(t.endpoint, t.sessionToken, t.onError), p(this);
|
|
24
24
|
}
|
|
25
25
|
loadBudgetData = async () => {
|
|
26
|
-
this.globalStore.recurringTransactionsStore.isDataLoaded || await this.globalStore.recurringTransactionsStore.loadRepeatingTransactionData(), await this.loadBudgets(),
|
|
26
|
+
this.globalStore.recurringTransactionsStore.isDataLoaded || await this.globalStore.recurringTransactionsStore.loadRepeatingTransactionData(), await this.loadBudgets(), f(() => this.detailedBudgets, (t) => {
|
|
27
27
|
if (t) {
|
|
28
28
|
const e = this.selectedBudget;
|
|
29
29
|
e && (this.selectedBudget = c(t, e.guid));
|
|
@@ -33,10 +33,10 @@ var x = class {
|
|
|
33
33
|
});
|
|
34
34
|
};
|
|
35
35
|
get detailedBudgets() {
|
|
36
|
-
return
|
|
36
|
+
return g(this.budgets.filter((t) => t.category_guid !== a.INCOME && t.category_guid !== a.TRANSFER && t.category_guid !== a.INVESTMENTS), this.globalStore.categoryStore.detailedCategories, this.globalStore.copyStore.copy.budgets, this.theme).sort((t, e) => t.percentage > e.percentage ? -1 : t.percentage < e.percentage ? 1 : 0);
|
|
37
37
|
}
|
|
38
38
|
get incomeBudget() {
|
|
39
|
-
return
|
|
39
|
+
return g(this.budgets.filter((t) => !t.parent_guid), this.globalStore.categoryStore.detailedCategories, this.globalStore.copyStore.copy.budgets, this.theme).reduce((t, e) => e.category_guid !== a.INCOME ? t : !t || e.percentage > t.percentage ? e : t, void 0)?.amount;
|
|
40
40
|
}
|
|
41
41
|
get unbudgetedCategories() {
|
|
42
42
|
return this.globalStore.categoryStore.spendCategories.filter((t) => !this.detailedBudgets.find((e) => e.category_guid === t.guid));
|
|
@@ -47,8 +47,9 @@ var x = class {
|
|
|
47
47
|
addBudget = async (t, e, r = null) => {
|
|
48
48
|
try {
|
|
49
49
|
const s = await this.api.addBudget(t, e, r);
|
|
50
|
-
|
|
51
|
-
this.budgets.
|
|
50
|
+
i(() => {
|
|
51
|
+
const d = this.budgets.findIndex((u) => u.guid === s.guid);
|
|
52
|
+
d >= 0 ? this.budgets[d] = s : this.budgets.push(s);
|
|
52
53
|
});
|
|
53
54
|
} catch (s) {
|
|
54
55
|
console.error("Error adding budget:", s), this.globalStore.captureException(s, { store: "BudgetsStore" });
|
|
@@ -56,7 +57,7 @@ var x = class {
|
|
|
56
57
|
};
|
|
57
58
|
deleteBudget = async (t) => {
|
|
58
59
|
try {
|
|
59
|
-
await this.api.deleteBudget(t),
|
|
60
|
+
await this.api.deleteBudget(t), i(() => {
|
|
60
61
|
const e = this.budgets.findIndex((r) => r.guid === t);
|
|
61
62
|
e >= 0 && this.budgets.splice(e, 1);
|
|
62
63
|
});
|
|
@@ -74,7 +75,8 @@ var x = class {
|
|
|
74
75
|
};
|
|
75
76
|
setAlert = (t) => this.alert = t;
|
|
76
77
|
setBudgets = (t) => {
|
|
77
|
-
|
|
78
|
+
const e = /* @__PURE__ */ new Set();
|
|
79
|
+
this.budgets = t.filter((r) => !r.guid || !e.has(r.guid) ? (r.guid && e.add(r.guid), !0) : !1), this.isDataLoaded = !0;
|
|
78
80
|
};
|
|
79
81
|
setDateRange = (t) => this.dateRange = t;
|
|
80
82
|
setSelectedBudget = (t) => this.selectedBudget = t;
|
|
@@ -83,7 +85,7 @@ var x = class {
|
|
|
83
85
|
recalculateBudgets = async (t) => {
|
|
84
86
|
try {
|
|
85
87
|
for (const r of t) {
|
|
86
|
-
const s = this.budgets.find((
|
|
88
|
+
const s = this.budgets.find((d) => d.category_guid === r.guid);
|
|
87
89
|
s ? await this.api.updateBudget({
|
|
88
90
|
...s,
|
|
89
91
|
amount: r.totalAverageAmount
|
|
@@ -105,7 +107,7 @@ var x = class {
|
|
|
105
107
|
updateBudget = async (t) => {
|
|
106
108
|
try {
|
|
107
109
|
const e = await this.api.updateBudget(t);
|
|
108
|
-
|
|
110
|
+
i(() => {
|
|
109
111
|
const r = this.budgets.findIndex((s) => s.guid === t.guid);
|
|
110
112
|
r >= 0 && (this.budgets[r] = e);
|
|
111
113
|
});
|
|
@@ -115,13 +117,15 @@ var x = class {
|
|
|
115
117
|
};
|
|
116
118
|
getMerchantBudgetByMerchantGuid = (t) => this.merchantBudgets.find((e) => e?.merchant_guid === t);
|
|
117
119
|
setMerchantBudgets = (t) => {
|
|
118
|
-
|
|
120
|
+
const e = /* @__PURE__ */ new Set();
|
|
121
|
+
this.merchantBudgets = t.filter((r) => !r.guid || !e.has(r.guid) ? (r.guid && e.add(r.guid), !0) : !1);
|
|
119
122
|
};
|
|
120
123
|
addMerchantBudget = async (t, e) => {
|
|
121
124
|
try {
|
|
122
125
|
const r = await this.api.addMerchantBudget(t, e);
|
|
123
|
-
return
|
|
124
|
-
this.merchantBudgets.
|
|
126
|
+
return i(() => {
|
|
127
|
+
const s = this.merchantBudgets.findIndex((d) => d.guid === r.guid);
|
|
128
|
+
s >= 0 ? this.merchantBudgets[s] = r : this.merchantBudgets.push(r);
|
|
125
129
|
}), { isSuccess: !0 };
|
|
126
130
|
} catch (r) {
|
|
127
131
|
return console.error("Error adding merchant budget:", r), this.globalStore.captureException(r, { store: "BudgetsStore" }), { isSuccess: !1 };
|
|
@@ -130,9 +134,9 @@ var x = class {
|
|
|
130
134
|
updateMerchantBudget = async (t) => {
|
|
131
135
|
try {
|
|
132
136
|
const { guid: e, amount: r } = t, s = await this.api.updateMerchantBudget(e, r);
|
|
133
|
-
return
|
|
134
|
-
const
|
|
135
|
-
|
|
137
|
+
return i(() => {
|
|
138
|
+
const d = this.merchantBudgets.findIndex((u) => u.guid === t.guid);
|
|
139
|
+
d >= 0 && (this.merchantBudgets[d] = s);
|
|
136
140
|
}), { isSuccess: !0 };
|
|
137
141
|
} catch (e) {
|
|
138
142
|
return console.error("Error updating merchant budget:", e), this.globalStore.captureException(e, { store: "BudgetsStore" }), { isSuccess: !1 };
|
|
@@ -140,7 +144,7 @@ var x = class {
|
|
|
140
144
|
};
|
|
141
145
|
deleteMerchantBudget = async (t) => {
|
|
142
146
|
try {
|
|
143
|
-
return await this.api.deleteMerchantBudget(t),
|
|
147
|
+
return await this.api.deleteMerchantBudget(t), i(() => {
|
|
144
148
|
this.merchantBudgets = this.merchantBudgets.filter((e) => e.guid !== t);
|
|
145
149
|
}), { isSuccess: !0 };
|
|
146
150
|
} catch (e) {
|
|
@@ -149,7 +153,7 @@ var x = class {
|
|
|
149
153
|
};
|
|
150
154
|
};
|
|
151
155
|
export {
|
|
152
|
-
|
|
156
|
+
M as BudgetsStore
|
|
153
157
|
};
|
|
154
158
|
|
|
155
159
|
//# sourceMappingURL=BudgetsStore.es.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"BudgetsStore.es.js","names":[],"sources":["../../../src/core/stores/BudgetsStore.ts"],"sourcesContent":["import { makeAutoObservable, reaction, runInAction } from 'mobx'\n\nimport { endOfMonth } from 'date-fns/endOfMonth'\nimport { startOfMonth } from 'date-fns/startOfMonth'\nimport { startOfToday } from 'date-fns/startOfToday'\n\nimport { Theme } from '@mui/system'\n\nimport { BudgetsApi } from '../api'\nimport { CategoryGuids } from '../constants'\nimport { augmentBudgets, findBudget, findSubBudget } from '../utils/BudgetUtil'\n\nimport { GlobalStore } from './GlobalStore'\n\nimport type {\n Budget,\n Category,\n DateRange,\n DetailedBudget,\n DetailedCategory,\n MerchantBudget,\n} from '../types'\n\nexport class BudgetsStore {\n api: BudgetsApi = new BudgetsApi('/', '')\n\n globalStore: GlobalStore\n\n alert: string = ''\n dateRange: DateRange = { start: startOfMonth(startOfToday()), end: endOfMonth(startOfToday()) }\n budgets: Budget[] = []\n selectedBudget: DetailedBudget | undefined\n selectedSubBudget: DetailedBudget | undefined\n isDataLoaded = false\n theme = {} as Theme\n merchantBudgets: MerchantBudget[] = []\n\n constructor(globalStore: GlobalStore) {\n this.globalStore = globalStore\n this.api = new BudgetsApi(globalStore.endpoint, globalStore.sessionToken, globalStore.onError)\n\n makeAutoObservable(this)\n }\n\n loadBudgetData = async () => {\n if (!this.globalStore.recurringTransactionsStore.isDataLoaded) {\n await this.globalStore.recurringTransactionsStore.loadRepeatingTransactionData()\n }\n await this.loadBudgets()\n\n /** Reaction to update the selected budget/sub-budget if detailedBudgets is updated **/\n reaction(\n () => this.detailedBudgets,\n (detailedBudgets) => {\n if (detailedBudgets) {\n const budget = this.selectedBudget\n if (budget) {\n this.selectedBudget = findBudget(detailedBudgets, budget.guid)\n }\n\n const subBudget = this.selectedSubBudget\n if (subBudget && subBudget.parent_guid) {\n this.selectedSubBudget = findSubBudget(\n detailedBudgets,\n subBudget.guid,\n subBudget.parent_guid,\n )\n }\n }\n },\n )\n }\n\n get detailedBudgets(): DetailedBudget[] {\n return augmentBudgets(\n this.budgets.filter(\n (budget: Budget) =>\n budget.category_guid !== CategoryGuids.INCOME &&\n budget.category_guid !== CategoryGuids.TRANSFER &&\n budget.category_guid !== CategoryGuids.INVESTMENTS,\n ),\n this.globalStore.categoryStore.detailedCategories,\n this.globalStore.copyStore.copy.budgets,\n this.theme,\n ).sort((a, b) => {\n if (a.percentage > b.percentage) return -1\n if (a.percentage < b.percentage) return 1\n return 0\n })\n }\n\n // TODO: Replace this with income from recurring transactions. Income budgets are deprecated.\n get incomeBudget(): number | undefined {\n const filteredBudgets = augmentBudgets(\n this.budgets.filter((budget: Budget) => !budget.parent_guid),\n this.globalStore.categoryStore.detailedCategories,\n this.globalStore.copyStore.copy.budgets,\n this.theme,\n )\n\n const incomeBudget = filteredBudgets.reduce(\n (acc, curr) => {\n if (curr.category_guid !== CategoryGuids.INCOME) return acc\n if (!acc || curr.percentage > acc.percentage) return curr\n return acc\n },\n undefined as DetailedBudget | undefined,\n )\n\n return incomeBudget?.amount\n }\n\n get unbudgetedCategories(): DetailedCategory[] {\n return this.globalStore.categoryStore.spendCategories.filter(\n (category) => !this.detailedBudgets.find((budget) => budget.category_guid === category.guid),\n )\n }\n\n get totalBudgeted(): number {\n return this.detailedBudgets.reduce((total, budget) => total + budget.amount, 0)\n }\n\n addBudget = async (category: Category, amount: number, parentGuid: string | null = null) => {\n try {\n const budget = await this.api.addBudget(category, amount, parentGuid)\n runInAction(() => {\n this.budgets.push(budget)\n })\n } catch (error) {\n console.error('Error adding budget:', error)\n this.globalStore.captureException(error, { store: 'BudgetsStore' })\n }\n }\n\n deleteBudget = async (guid: string) => {\n try {\n await this.api.deleteBudget(guid)\n\n runInAction(() => {\n const index = this.budgets.findIndex((budget) => budget.guid === guid)\n if (index >= 0) {\n this.budgets.splice(index, 1)\n }\n })\n } catch (error) {\n console.error('Error deleting budget:', error)\n this.globalStore.captureException(error, { store: 'BudgetsStore' })\n }\n }\n\n loadBudgets = async () => {\n try {\n const budgets = await this.api.getBudgets()\n this.setBudgets(budgets)\n } catch (error) {\n console.error('Error occurred while loading budgets:', error)\n this.globalStore.captureException(error, { store: 'BudgetsStore' })\n throw error\n }\n }\n\n setAlert = (alert: string) => (this.alert = alert)\n\n setBudgets = (budgets: Budget[]) => {\n this.budgets = budgets\n this.isDataLoaded = true\n }\n\n setDateRange = (dateRange: DateRange) => (this.dateRange = dateRange)\n\n setSelectedBudget = (budget: DetailedBudget | undefined) => (this.selectedBudget = budget)\n\n setSelectedSubBudget = (budget: DetailedBudget | undefined) => (this.selectedSubBudget = budget)\n\n setTheme = (theme: Theme) => (this.theme = theme)\n\n /**\n * Recalculate budget by using the average amount from top-level categories\n * @param categories Detailed categories\n */\n recalculateBudgets = async (categories: DetailedCategory[]) => {\n try {\n for (const category of categories) {\n const budget = this.budgets.find((budget) => budget.category_guid === category.guid)\n if (budget) {\n await this.api.updateBudget({\n ...budget,\n amount: category.totalAverageAmount,\n })\n } else {\n await this.api.addBudget(category, category.totalAverageAmount)\n }\n }\n const budgetsToDelete = this.budgets.filter(\n (budget) => !categories.find((c) => c.guid === budget.category_guid),\n )\n\n for (const budgetToDelete of budgetsToDelete) {\n await this.api.deleteBudget(budgetToDelete.guid)\n }\n\n await this.loadBudgets()\n\n return { data: this.budgets, isSuccess: true }\n } catch (error) {\n console.error('Error recalculating budgets:', error)\n this.globalStore.captureException(error, { store: 'BudgetsStore' })\n return { data: [], isSuccess: false }\n }\n }\n\n updateBudget = async (budget: Budget) => {\n try {\n const updatedBudget = await this.api.updateBudget(budget)\n\n runInAction(() => {\n const index = this.budgets.findIndex((b) => b.guid === budget.guid)\n if (index >= 0) {\n this.budgets[index] = updatedBudget\n }\n })\n } catch (error) {\n console.error('Error updating budget:', error)\n this.globalStore.captureException(error, { store: 'BudgetsStore' })\n }\n }\n\n getMerchantBudgetByMerchantGuid = (merchantGuid: string): MerchantBudget | undefined => {\n return this.merchantBudgets.find(\n (eachMerchantBudget) => eachMerchantBudget?.merchant_guid === merchantGuid,\n )\n }\n\n setMerchantBudgets = (merchantBudgets: MerchantBudget[]) => {\n this.merchantBudgets = merchantBudgets\n }\n\n addMerchantBudget = async (merchantGuid: string, amount: number) => {\n try {\n const newMerchantBudget = await this.api.addMerchantBudget(merchantGuid, amount)\n\n runInAction(() => {\n this.merchantBudgets.push(newMerchantBudget)\n })\n return { isSuccess: true }\n } catch (error) {\n console.error('Error adding merchant budget:', error)\n this.globalStore.captureException(error, { store: 'BudgetsStore' })\n return { isSuccess: false }\n }\n }\n\n updateMerchantBudget = async (merchantBudget: MerchantBudget) => {\n try {\n const { guid: merchantBudgetGuid, amount } = merchantBudget\n const updatedMerchantBudget = await this.api.updateMerchantBudget(merchantBudgetGuid, amount)\n\n runInAction(() => {\n const index = this.merchantBudgets.findIndex((b) => b.guid === merchantBudget.guid)\n if (index >= 0) {\n this.merchantBudgets[index] = updatedMerchantBudget\n }\n })\n return { isSuccess: true }\n } catch (error) {\n console.error('Error updating merchant budget:', error)\n this.globalStore.captureException(error, { store: 'BudgetsStore' })\n return { isSuccess: false }\n }\n }\n\n deleteMerchantBudget = async (merchantBudgetGuid: string) => {\n try {\n await this.api.deleteMerchantBudget(merchantBudgetGuid)\n\n runInAction(() => {\n this.merchantBudgets = this.merchantBudgets.filter((b) => b.guid !== merchantBudgetGuid)\n })\n return { isSuccess: true }\n } catch (error) {\n console.error('Error deleting merchant budget:', error)\n this.globalStore.captureException(error, { store: 'BudgetsStore' })\n return { isSuccess: false }\n }\n }\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"BudgetsStore.es.js","names":[],"sources":["../../../src/core/stores/BudgetsStore.ts"],"sourcesContent":["import { makeAutoObservable, reaction, runInAction } from 'mobx'\n\nimport { endOfMonth } from 'date-fns/endOfMonth'\nimport { startOfMonth } from 'date-fns/startOfMonth'\nimport { startOfToday } from 'date-fns/startOfToday'\n\nimport { Theme } from '@mui/system'\n\nimport { BudgetsApi } from '../api'\nimport { CategoryGuids } from '../constants'\nimport { augmentBudgets, findBudget, findSubBudget } from '../utils/BudgetUtil'\n\nimport { GlobalStore } from './GlobalStore'\n\nimport type {\n Budget,\n Category,\n DateRange,\n DetailedBudget,\n DetailedCategory,\n MerchantBudget,\n} from '../types'\n\nexport class BudgetsStore {\n api: BudgetsApi = new BudgetsApi('/', '')\n\n globalStore: GlobalStore\n\n alert: string = ''\n dateRange: DateRange = { start: startOfMonth(startOfToday()), end: endOfMonth(startOfToday()) }\n budgets: Budget[] = []\n selectedBudget: DetailedBudget | undefined\n selectedSubBudget: DetailedBudget | undefined\n isDataLoaded = false\n theme = {} as Theme\n merchantBudgets: MerchantBudget[] = []\n\n constructor(globalStore: GlobalStore) {\n this.globalStore = globalStore\n this.api = new BudgetsApi(globalStore.endpoint, globalStore.sessionToken, globalStore.onError)\n\n makeAutoObservable(this)\n }\n\n loadBudgetData = async () => {\n if (!this.globalStore.recurringTransactionsStore.isDataLoaded) {\n await this.globalStore.recurringTransactionsStore.loadRepeatingTransactionData()\n }\n await this.loadBudgets()\n\n /** Reaction to update the selected budget/sub-budget if detailedBudgets is updated **/\n reaction(\n () => this.detailedBudgets,\n (detailedBudgets) => {\n if (detailedBudgets) {\n const budget = this.selectedBudget\n if (budget) {\n this.selectedBudget = findBudget(detailedBudgets, budget.guid)\n }\n\n const subBudget = this.selectedSubBudget\n if (subBudget && subBudget.parent_guid) {\n this.selectedSubBudget = findSubBudget(\n detailedBudgets,\n subBudget.guid,\n subBudget.parent_guid,\n )\n }\n }\n },\n )\n }\n\n get detailedBudgets(): DetailedBudget[] {\n return augmentBudgets(\n this.budgets.filter(\n (budget: Budget) =>\n budget.category_guid !== CategoryGuids.INCOME &&\n budget.category_guid !== CategoryGuids.TRANSFER &&\n budget.category_guid !== CategoryGuids.INVESTMENTS,\n ),\n this.globalStore.categoryStore.detailedCategories,\n this.globalStore.copyStore.copy.budgets,\n this.theme,\n ).sort((a, b) => {\n if (a.percentage > b.percentage) return -1\n if (a.percentage < b.percentage) return 1\n return 0\n })\n }\n\n // TODO: Replace this with income from recurring transactions. Income budgets are deprecated.\n get incomeBudget(): number | undefined {\n const filteredBudgets = augmentBudgets(\n this.budgets.filter((budget: Budget) => !budget.parent_guid),\n this.globalStore.categoryStore.detailedCategories,\n this.globalStore.copyStore.copy.budgets,\n this.theme,\n )\n\n const incomeBudget = filteredBudgets.reduce(\n (acc, curr) => {\n if (curr.category_guid !== CategoryGuids.INCOME) return acc\n if (!acc || curr.percentage > acc.percentage) return curr\n return acc\n },\n undefined as DetailedBudget | undefined,\n )\n\n return incomeBudget?.amount\n }\n\n get unbudgetedCategories(): DetailedCategory[] {\n return this.globalStore.categoryStore.spendCategories.filter(\n (category) => !this.detailedBudgets.find((budget) => budget.category_guid === category.guid),\n )\n }\n\n get totalBudgeted(): number {\n return this.detailedBudgets.reduce((total, budget) => total + budget.amount, 0)\n }\n\n addBudget = async (category: Category, amount: number, parentGuid: string | null = null) => {\n try {\n const budget = await this.api.addBudget(category, amount, parentGuid)\n runInAction(() => {\n const index = this.budgets.findIndex((b) => b.guid === budget.guid)\n if (index >= 0) {\n this.budgets[index] = budget\n } else {\n this.budgets.push(budget)\n }\n })\n } catch (error) {\n console.error('Error adding budget:', error)\n this.globalStore.captureException(error, { store: 'BudgetsStore' })\n }\n }\n\n deleteBudget = async (guid: string) => {\n try {\n await this.api.deleteBudget(guid)\n\n runInAction(() => {\n const index = this.budgets.findIndex((budget) => budget.guid === guid)\n if (index >= 0) {\n this.budgets.splice(index, 1)\n }\n })\n } catch (error) {\n console.error('Error deleting budget:', error)\n this.globalStore.captureException(error, { store: 'BudgetsStore' })\n }\n }\n\n loadBudgets = async () => {\n try {\n const budgets = await this.api.getBudgets()\n this.setBudgets(budgets)\n } catch (error) {\n console.error('Error occurred while loading budgets:', error)\n this.globalStore.captureException(error, { store: 'BudgetsStore' })\n throw error\n }\n }\n\n setAlert = (alert: string) => (this.alert = alert)\n\n setBudgets = (budgets: Budget[]) => {\n const seen = new Set<string>()\n this.budgets = budgets.filter((budget) => {\n if (!budget.guid || !seen.has(budget.guid)) {\n if (budget.guid) seen.add(budget.guid)\n return true\n }\n return false\n })\n this.isDataLoaded = true\n }\n\n setDateRange = (dateRange: DateRange) => (this.dateRange = dateRange)\n\n setSelectedBudget = (budget: DetailedBudget | undefined) => (this.selectedBudget = budget)\n\n setSelectedSubBudget = (budget: DetailedBudget | undefined) => (this.selectedSubBudget = budget)\n\n setTheme = (theme: Theme) => (this.theme = theme)\n\n /**\n * Recalculate budget by using the average amount from top-level categories\n * @param categories Detailed categories\n */\n recalculateBudgets = async (categories: DetailedCategory[]) => {\n try {\n for (const category of categories) {\n const budget = this.budgets.find((budget) => budget.category_guid === category.guid)\n if (budget) {\n await this.api.updateBudget({\n ...budget,\n amount: category.totalAverageAmount,\n })\n } else {\n await this.api.addBudget(category, category.totalAverageAmount)\n }\n }\n const budgetsToDelete = this.budgets.filter(\n (budget) => !categories.find((c) => c.guid === budget.category_guid),\n )\n\n for (const budgetToDelete of budgetsToDelete) {\n await this.api.deleteBudget(budgetToDelete.guid)\n }\n\n await this.loadBudgets()\n\n return { data: this.budgets, isSuccess: true }\n } catch (error) {\n console.error('Error recalculating budgets:', error)\n this.globalStore.captureException(error, { store: 'BudgetsStore' })\n return { data: [], isSuccess: false }\n }\n }\n\n updateBudget = async (budget: Budget) => {\n try {\n const updatedBudget = await this.api.updateBudget(budget)\n\n runInAction(() => {\n const index = this.budgets.findIndex((b) => b.guid === budget.guid)\n if (index >= 0) {\n this.budgets[index] = updatedBudget\n }\n })\n } catch (error) {\n console.error('Error updating budget:', error)\n this.globalStore.captureException(error, { store: 'BudgetsStore' })\n }\n }\n\n getMerchantBudgetByMerchantGuid = (merchantGuid: string): MerchantBudget | undefined => {\n return this.merchantBudgets.find(\n (eachMerchantBudget) => eachMerchantBudget?.merchant_guid === merchantGuid,\n )\n }\n\n setMerchantBudgets = (merchantBudgets: MerchantBudget[]) => {\n const seen = new Set<string>()\n this.merchantBudgets = merchantBudgets.filter((mb) => {\n if (!mb.guid || !seen.has(mb.guid)) {\n if (mb.guid) seen.add(mb.guid)\n return true\n }\n return false\n })\n }\n\n addMerchantBudget = async (merchantGuid: string, amount: number) => {\n try {\n const newMerchantBudget = await this.api.addMerchantBudget(merchantGuid, amount)\n\n runInAction(() => {\n const index = this.merchantBudgets.findIndex((b) => b.guid === newMerchantBudget.guid)\n if (index >= 0) {\n this.merchantBudgets[index] = newMerchantBudget\n } else {\n this.merchantBudgets.push(newMerchantBudget)\n }\n })\n return { isSuccess: true }\n } catch (error) {\n console.error('Error adding merchant budget:', error)\n this.globalStore.captureException(error, { store: 'BudgetsStore' })\n return { isSuccess: false }\n }\n }\n\n updateMerchantBudget = async (merchantBudget: MerchantBudget) => {\n try {\n const { guid: merchantBudgetGuid, amount } = merchantBudget\n const updatedMerchantBudget = await this.api.updateMerchantBudget(merchantBudgetGuid, amount)\n\n runInAction(() => {\n const index = this.merchantBudgets.findIndex((b) => b.guid === merchantBudget.guid)\n if (index >= 0) {\n this.merchantBudgets[index] = updatedMerchantBudget\n }\n })\n return { isSuccess: true }\n } catch (error) {\n console.error('Error updating merchant budget:', error)\n this.globalStore.captureException(error, { store: 'BudgetsStore' })\n return { isSuccess: false }\n }\n }\n\n deleteMerchantBudget = async (merchantBudgetGuid: string) => {\n try {\n await this.api.deleteMerchantBudget(merchantBudgetGuid)\n\n runInAction(() => {\n this.merchantBudgets = this.merchantBudgets.filter((b) => b.guid !== merchantBudgetGuid)\n })\n return { isSuccess: true }\n } catch (error) {\n console.error('Error deleting merchant budget:', error)\n this.globalStore.captureException(error, { store: 'BudgetsStore' })\n return { isSuccess: false }\n }\n }\n}\n"],"mappings":"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"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { default as React } from 'react';
|
|
2
|
+
import { CommonBeatProps } from '../../../types/CommonBeat';
|
|
3
|
+
export interface TransparentOverdraftV2Props extends CommonBeatProps {
|
|
4
|
+
accountName: string;
|
|
5
|
+
formattedProjectedBalance: string;
|
|
6
|
+
projectedBalanceLabel: string;
|
|
7
|
+
}
|
|
8
|
+
export declare const TransparentOverdraftV2: React.FC<TransparentOverdraftV2Props>;
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
import { InsightButton as i } from "../../shared/InsightsCard/InsightButton.es.js";
|
|
2
|
+
import { BeatCardMUI as s } from "../../shared/InsightsCard/BeatCardMUI.es.js";
|
|
3
|
+
import { TransparentOverdraftV2Body as c } from "./TransparentOverdraftV2Body.es.js";
|
|
4
|
+
import "react";
|
|
5
|
+
import n from "@mui/material/Stack";
|
|
6
|
+
import { Text as f } from "@mxenabled/mxui";
|
|
7
|
+
import { jsx as r, jsxs as h } from "react/jsx-runtime";
|
|
8
|
+
var T = ({ accountName: m, beat: t, buttonProps: e, formattedProjectedBalance: d, isMini: o, projectedBalanceLabel: p, ...a }) => /* @__PURE__ */ r(s, {
|
|
9
|
+
...a,
|
|
10
|
+
beat: t,
|
|
11
|
+
button: /* @__PURE__ */ h(n, {
|
|
12
|
+
sx: { gap: 8 },
|
|
13
|
+
children: [/* @__PURE__ */ r(i, {
|
|
14
|
+
...e,
|
|
15
|
+
beat: t
|
|
16
|
+
}), /* @__PURE__ */ r(i, {
|
|
17
|
+
...e,
|
|
18
|
+
beat: t,
|
|
19
|
+
hide: !t.supporting_action,
|
|
20
|
+
primary: !1
|
|
21
|
+
})]
|
|
22
|
+
}),
|
|
23
|
+
header: {
|
|
24
|
+
...a.header,
|
|
25
|
+
subHeader: /* @__PURE__ */ r(n, {
|
|
26
|
+
alignItems: "center",
|
|
27
|
+
direction: "row",
|
|
28
|
+
sx: {
|
|
29
|
+
gap: 4,
|
|
30
|
+
mt: 4
|
|
31
|
+
},
|
|
32
|
+
children: /* @__PURE__ */ r(f, {
|
|
33
|
+
sx: { color: "text.secondary" },
|
|
34
|
+
variant: "body2",
|
|
35
|
+
children: m
|
|
36
|
+
})
|
|
37
|
+
})
|
|
38
|
+
},
|
|
39
|
+
isMini: o,
|
|
40
|
+
children: /* @__PURE__ */ r(c, {
|
|
41
|
+
formattedProjectedBalance: d,
|
|
42
|
+
isMini: o ?? !1,
|
|
43
|
+
projectedBalanceLabel: p
|
|
44
|
+
})
|
|
45
|
+
});
|
|
46
|
+
export {
|
|
47
|
+
T as TransparentOverdraftV2
|
|
48
|
+
};
|
|
49
|
+
|
|
50
|
+
//# sourceMappingURL=TransparentOverdraftV2.es.js.map
|
package/dist/insights/components/insights/TransparentOverdraftV2/TransparentOverdraftV2.es.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TransparentOverdraftV2.es.js","names":[],"sources":["../../../../../src/insights/components/insights/TransparentOverdraftV2/TransparentOverdraftV2.tsx"],"sourcesContent":["import React from 'react'\n\nimport { Text } from '@mxenabled/mxui'\n\nimport Stack from '@mui/material/Stack'\n\nimport { CommonBeatProps } from '../../../types/CommonBeat'\nimport { BeatCardMUI } from '../../shared/InsightsCard/BeatCardMUI'\nimport { InsightButton } from '../../shared/InsightsCard/InsightButton'\n\nimport { TransparentOverdraftV2Body } from './TransparentOverdraftV2Body'\n\nexport interface TransparentOverdraftV2Props extends CommonBeatProps {\n accountName: string\n formattedProjectedBalance: string\n projectedBalanceLabel: string\n}\n\nexport const TransparentOverdraftV2: React.FC<TransparentOverdraftV2Props> = ({\n accountName,\n beat,\n buttonProps,\n formattedProjectedBalance,\n isMini,\n projectedBalanceLabel,\n ...restProps\n}) => {\n return (\n <BeatCardMUI\n {...restProps}\n beat={beat}\n button={\n <Stack sx={{ gap: 8 }}>\n <InsightButton {...buttonProps} beat={beat} />\n <InsightButton\n {...buttonProps}\n beat={beat}\n hide={!beat.supporting_action}\n primary={false}\n />\n </Stack>\n }\n header={{\n ...restProps.header,\n subHeader: (\n <Stack alignItems=\"center\" direction=\"row\" sx={{ gap: 4, mt: 4 }}>\n {/* Remove InstitutionLogo until the V2 payload carries institution_guid */}\n <Text sx={{ color: 'text.secondary' }} variant=\"body2\">\n {accountName}\n </Text>\n </Stack>\n ),\n }}\n isMini={isMini}\n >\n <TransparentOverdraftV2Body\n formattedProjectedBalance={formattedProjectedBalance}\n isMini={isMini ?? false}\n projectedBalanceLabel={projectedBalanceLabel}\n />\n </BeatCardMUI>\n )\n}\n"],"mappings":";;;;;;;AAkBA,IAAa,IAAA,CAAiE,EAC5E,aAAA,GACA,MAAA,GACA,aAAA,GACA,2BAAA,GACA,QAAA,GACA,uBAAA,GACA,GAAG,EAAA,MAGD,gBAAA,EAAC,GAAD;AAAA,EACE,GAAI;AAAA,EACE,MAAA;AAAA,EACN,QACE,gBAAA,EAAC,GAAD;AAAA,IAAO,IAAI,EAAE,KAAK,EAAE;AAAA,IAApB,UAAA,CACE,gBAAA,EAAC,GAAD;AAAA,MAAe,GAAI;AAAA,MAAmB,MAAA;AAAA,IAAO,CAAA,GAC7C,gBAAA,EAAC,GAAD;AAAA,MACE,GAAI;AAAA,MACE,MAAA;AAAA,MACN,MAAM,CAAC,EAAK;AAAA,MACZ,SAAS;AAAA,IACV,CAAA,CACI;AAAA;EAET,QAAQ;AAAA,IACN,GAAG,EAAU;AAAA,IACb,WACE,gBAAA,EAAC,GAAD;AAAA,MAAO,YAAW;AAAA,MAAS,WAAU;AAAA,MAAM,IAAI;AAAA,QAAE,KAAK;AAAA,QAAG,IAAI;AAAA,MAAE;AAAA,MAE7D,UAAA,gBAAA,EAAC,GAAD;AAAA,QAAM,IAAI,EAAE,OAAO,iBAAiB;AAAA,QAAG,SAAQ;AAAA,QAC5C,UAAA;AAAA,MACG,CAAA;AAAA,IACD,CAAA;AAAA,EAEX;AAAA,EACQ,QAAA;AAAA,EAER,UAAA,gBAAA,EAAC,GAAD;AAAA,IAC6B,2BAAA;AAAA,IAC3B,QAAQ,KAAU;AAAA,IACK,uBAAA;AAAA,EACxB,CAAA;AACU,CAAA"}
|
package/dist/insights/components/insights/TransparentOverdraftV2/TransparentOverdraftV2Body.d.ts
ADDED
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { default as React } from 'react';
|
|
2
|
+
interface TransparentOverdraftV2BodyProps {
|
|
3
|
+
formattedProjectedBalance: string;
|
|
4
|
+
isMini: boolean;
|
|
5
|
+
projectedBalanceLabel: string;
|
|
6
|
+
}
|
|
7
|
+
export declare const TransparentOverdraftV2Body: React.FC<TransparentOverdraftV2BodyProps>;
|
|
8
|
+
export {};
|
package/dist/insights/components/insights/TransparentOverdraftV2/TransparentOverdraftV2Body.es.js
ADDED
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
import "react";
|
|
2
|
+
import e from "@mui/material/Stack";
|
|
3
|
+
import { P as c, Text as m } from "@mxenabled/mxui";
|
|
4
|
+
import { Icon as s } from "@mxenabled/mx-icons";
|
|
5
|
+
import { jsx as r, jsxs as n } from "react/jsx-runtime";
|
|
6
|
+
import d from "@mui/material/Card";
|
|
7
|
+
var y = ({ formattedProjectedBalance: i, isMini: o = !1, projectedBalanceLabel: a }) => {
|
|
8
|
+
const t = {
|
|
9
|
+
boxContainer: {
|
|
10
|
+
bgcolor: "warning.light",
|
|
11
|
+
marginBottom: o ? 0 : 24,
|
|
12
|
+
py: 16,
|
|
13
|
+
px: 24,
|
|
14
|
+
width: "100%"
|
|
15
|
+
},
|
|
16
|
+
card: {
|
|
17
|
+
alignItems: "center",
|
|
18
|
+
borderRadius: 2,
|
|
19
|
+
display: "flex",
|
|
20
|
+
flexDirection: "column",
|
|
21
|
+
justifyContent: "center",
|
|
22
|
+
p: 16,
|
|
23
|
+
width: "100%"
|
|
24
|
+
}
|
|
25
|
+
};
|
|
26
|
+
return /* @__PURE__ */ r(e, {
|
|
27
|
+
sx: t.boxContainer,
|
|
28
|
+
children: /* @__PURE__ */ n(d, {
|
|
29
|
+
sx: {
|
|
30
|
+
...t.card,
|
|
31
|
+
bgcolor: "background.paper"
|
|
32
|
+
},
|
|
33
|
+
children: [/* @__PURE__ */ r(m, {
|
|
34
|
+
component: "span",
|
|
35
|
+
sx: {
|
|
36
|
+
color: "text.primary",
|
|
37
|
+
fontWeight: 700,
|
|
38
|
+
mb: 4
|
|
39
|
+
},
|
|
40
|
+
variant: o ? "h2" : "h1",
|
|
41
|
+
children: i
|
|
42
|
+
}), /* @__PURE__ */ n(e, {
|
|
43
|
+
alignItems: "center",
|
|
44
|
+
direction: "row",
|
|
45
|
+
sx: { gap: 4 },
|
|
46
|
+
children: [/* @__PURE__ */ r(s, {
|
|
47
|
+
"aria-hidden": "true",
|
|
48
|
+
fill: !0,
|
|
49
|
+
name: "error",
|
|
50
|
+
size: 16,
|
|
51
|
+
sx: { color: "warning.main" }
|
|
52
|
+
}), /* @__PURE__ */ r(c, {
|
|
53
|
+
sx: {
|
|
54
|
+
color: "text.secondary",
|
|
55
|
+
fontWeight: 400
|
|
56
|
+
},
|
|
57
|
+
variant: "body2",
|
|
58
|
+
children: a
|
|
59
|
+
})]
|
|
60
|
+
})]
|
|
61
|
+
})
|
|
62
|
+
});
|
|
63
|
+
};
|
|
64
|
+
export {
|
|
65
|
+
y as TransparentOverdraftV2Body
|
|
66
|
+
};
|
|
67
|
+
|
|
68
|
+
//# sourceMappingURL=TransparentOverdraftV2Body.es.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TransparentOverdraftV2Body.es.js","names":[],"sources":["../../../../../src/insights/components/insights/TransparentOverdraftV2/TransparentOverdraftV2Body.tsx"],"sourcesContent":["import React from 'react'\n\nimport { Icon } from '@mxenabled/mx-icons'\nimport { P, Text } from '@mxenabled/mxui'\n\nimport Card from '@mui/material/Card'\nimport Stack from '@mui/material/Stack'\n\ninterface TransparentOverdraftV2BodyProps {\n formattedProjectedBalance: string\n isMini: boolean\n projectedBalanceLabel: string\n}\n\nexport const TransparentOverdraftV2Body: React.FC<TransparentOverdraftV2BodyProps> = ({\n formattedProjectedBalance,\n isMini = false,\n projectedBalanceLabel,\n}) => {\n const styles = {\n boxContainer: {\n bgcolor: 'warning.light',\n marginBottom: isMini ? 0 : 24,\n py: 16,\n px: 24,\n width: '100%',\n },\n card: {\n alignItems: 'center',\n borderRadius: 2,\n display: 'flex',\n flexDirection: 'column',\n justifyContent: 'center',\n p: 16,\n width: '100%',\n },\n }\n\n return (\n <Stack sx={styles.boxContainer}>\n <Card\n sx={{\n ...styles.card,\n bgcolor: 'background.paper',\n }}\n >\n <Text\n component=\"span\"\n sx={{ color: 'text.primary', fontWeight: 700, mb: 4 }}\n variant={isMini ? 'h2' : 'h1'}\n >\n {formattedProjectedBalance}\n </Text>\n\n <Stack alignItems=\"center\" direction=\"row\" sx={{ gap: 4 }}>\n <Icon\n aria-hidden=\"true\"\n fill={true}\n name=\"error\"\n size={16}\n sx={{ color: 'warning.main' }}\n />\n <P sx={{ color: 'text.secondary', fontWeight: 400 }} variant=\"body2\">\n {projectedBalanceLabel}\n </P>\n </Stack>\n </Card>\n </Stack>\n )\n}\n"],"mappings":";;;;;;AAcA,IAAa,IAAA,CAAyE,EACpF,2BAAA,GACA,QAAA,IAAS,IACT,uBAAA,EAAA,MACI;AACJ,QAAM,IAAS;AAAA,IACb,cAAc;AAAA,MACZ,SAAS;AAAA,MACT,cAAc,IAAS,IAAI;AAAA,MAC3B,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,OAAO;AAAA,IACT;AAAA,IACA,MAAM;AAAA,MACJ,YAAY;AAAA,MACZ,cAAc;AAAA,MACd,SAAS;AAAA,MACT,eAAe;AAAA,MACf,gBAAgB;AAAA,MAChB,GAAG;AAAA,MACH,OAAO;AAAA,IACT;AAAA,EACF;AAEA,SACE,gBAAA,EAAC,GAAD;AAAA,IAAO,IAAI,EAAO;AAAA,IAChB,UAAA,gBAAA,EAAC,GAAD;AAAA,MACE,IAAI;AAAA,QACF,GAAG,EAAO;AAAA,QACV,SAAS;AAAA,MACX;AAAA,MAJF,UAAA,CAME,gBAAA,EAAC,GAAD;AAAA,QACE,WAAU;AAAA,QACV,IAAI;AAAA,UAAE,OAAO;AAAA,UAAgB,YAAY;AAAA,UAAK,IAAI;AAAA,QAAE;AAAA,QACpD,SAAS,IAAS,OAAO;AAAA,QAExB,UAAA;AAAA,MACG,CAAA,GAEN,gBAAA,EAAC,GAAD;AAAA,QAAO,YAAW;AAAA,QAAS,WAAU;AAAA,QAAM,IAAI,EAAE,KAAK,EAAE;AAAA,QAAxD,UAAA,CACE,gBAAA,EAAC,GAAD;AAAA,UACE,eAAY;AAAA,UACZ,MAAM;AAAA,UACN,MAAK;AAAA,UACL,MAAM;AAAA,UACN,IAAI,EAAE,OAAO,eAAe;AAAA,QAC7B,CAAA,GACD,gBAAA,EAAC,GAAD;AAAA,UAAG,IAAI;AAAA,YAAE,OAAO;AAAA,YAAkB,YAAY;AAAA,UAAI;AAAA,UAAG,SAAQ;AAAA,UAC1D,UAAA;AAAA,QACA,CAAA,CACE;AAAA,MACH,CAAA,CAAA;AAAA;EACD,CAAA;AAEX"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from './TransparentOverdraftV2';
|
|
@@ -19,6 +19,7 @@ export * from './P2pCategorization';
|
|
|
19
19
|
export * from './SavingsAccountBalancesSummary';
|
|
20
20
|
export * from './SetUpDirectDeposit';
|
|
21
21
|
export * from './SwitchDirectDeposit';
|
|
22
|
+
export * from './TransparentOverdraftV2';
|
|
22
23
|
export * from './UnifiedDeposit';
|
|
23
24
|
export * from './WeeklyNoSpendDays';
|
|
24
25
|
export * from './MarketingHub';
|
|
@@ -17,7 +17,7 @@ import { MiniInsightCard as U } from "./components/shared/MiniInsightCard.es.js"
|
|
|
17
17
|
import { MenuAction as H } from "./components/shared/MenuAction.es.js";
|
|
18
18
|
import w from "./components/shared/P2P/P2PMultipleCategorization.es.js";
|
|
19
19
|
import V from "./components/shared/SaveEnoughToLiveOnBottomSection.es.js";
|
|
20
|
-
import
|
|
20
|
+
import z from "./components/shared/SaveEnoughToLiveOnTopSection.es.js";
|
|
21
21
|
import W from "./components/shared/StatusIndicator.es.js";
|
|
22
22
|
import R from "./components/shared/TransactionCard.es.js";
|
|
23
23
|
import { DirectDeposit as X } from "./components/shared/DirectDeposit/DirectDeposit.es.js";
|
|
@@ -43,7 +43,7 @@ import { LinedCardZeroState as ko } from "./components/shared/ZeroState/LinedCar
|
|
|
43
43
|
import { ErrorCard as Eo } from "./components/shared/ErrorCard/ErrorCard.es.js";
|
|
44
44
|
import { FeedbackHeader as Lo } from "./components/shared/GenericFeedback/FeedbackHeader.es.js";
|
|
45
45
|
import { FeedbackButtons as xo } from "./components/shared/GenericFeedback/FeedbackButtons.es.js";
|
|
46
|
-
import { FeedbackDescription as
|
|
46
|
+
import { FeedbackDescription as Oo } from "./components/shared/GenericFeedback/FeedbackDescription.es.js";
|
|
47
47
|
import { FeedbackOptions as No } from "./components/shared/GenericFeedback/FeedbackOptions.es.js";
|
|
48
48
|
import { BeatFeedbackText as Go } from "./components/shared/GenericFeedback/FeedbackText.es.js";
|
|
49
49
|
import { AccountDiscoverability as jo } from "./components/insights/AccountDiscoverability/AccountDiscoverability.es.js";
|
|
@@ -70,7 +70,7 @@ import { MonthlyEmergencyFundReviewBody as kr } from "./components/insights/Mont
|
|
|
70
70
|
import { LastMonthsContributionSection as Er } from "./components/insights/MonthlyEmergencyFundReview/LastMonthsContributionSection.es.js";
|
|
71
71
|
import { ProjectedCompletionSection as Lr } from "./components/insights/MonthlyEmergencyFundReview/ProjectedCompletionSection.es.js";
|
|
72
72
|
import { TotalSavedSection as xr } from "./components/insights/MonthlyEmergencyFundReview/TotalSection.es.js";
|
|
73
|
-
import { MonthlySavingsToIncomeComparison as
|
|
73
|
+
import { MonthlySavingsToIncomeComparison as Or } from "./components/insights/MonthlySavingsToIncomeComparison/MonthlySavingsToIncomeComparison.es.js";
|
|
74
74
|
import { MonthlySpendingComparisonV2 as Nr } from "./components/insights/MonthlySpendingComparisonV2/MonthlySpendingComparisonV2.es.js";
|
|
75
75
|
import { MonthlySpendToIncomeComparisonV2 as Gr } from "./components/insights/MonthlySpendToIncomeComparisonV2/MonthlySpendToIncomeComparisonV2.es.js";
|
|
76
76
|
import { P2pCategorization as jr } from "./components/insights/P2pCategorization/P2pCategorization.es.js";
|
|
@@ -81,14 +81,15 @@ import { SetUpDirectDepositBody as _r } from "./components/insights/SetUpDirectD
|
|
|
81
81
|
import { AccountBox as ot } from "./components/insights/SwitchDirectDeposit/AccountBox.es.js";
|
|
82
82
|
import { SwitchDirectDepositMainContainer as tt } from "./components/insights/SwitchDirectDeposit/SwitchDirectDepositMainContainer.es.js";
|
|
83
83
|
import { SwitchDirectDepositBody as mt } from "./components/insights/SwitchDirectDeposit/SwitchDirectDepositBody.es.js";
|
|
84
|
-
import {
|
|
85
|
-
import {
|
|
86
|
-
import {
|
|
87
|
-
import {
|
|
88
|
-
import {
|
|
89
|
-
import {
|
|
90
|
-
import {
|
|
91
|
-
import {
|
|
84
|
+
import { TransparentOverdraftV2 as at } from "./components/insights/TransparentOverdraftV2/TransparentOverdraftV2.es.js";
|
|
85
|
+
import { UnifiedDeposit as nt } from "./components/insights/UnifiedDeposit/UnifiedDeposit.es.js";
|
|
86
|
+
import { WeeklyNoSpendDays as dt } from "./components/insights/WeeklyNoSpendDays/WeeklyNoSpendDays.es.js";
|
|
87
|
+
import { UserFeedback as st } from "./components/insights/UserFeedback/UserFeedback.es.js";
|
|
88
|
+
import { DirectDepositDeepLink as lt } from "./components/shared/DeepLinks/DirectDeposit/DirectDepositDeepLink.es.js";
|
|
89
|
+
import { Header as ut } from "./components/feed/Header.es.js";
|
|
90
|
+
import { P2PCategorizationSingleAccount as Bt } from "./components/shared/P2PCategorizationSingleAccount/P2PCategorizationSingleAccount.es.js";
|
|
91
|
+
import { DrillDownCalculation as ht, variants as yt } from "./components/shared/DrillDownCalculation/DrillDownCalculation.es.js";
|
|
92
|
+
import { SaveAnExtra100 as Tt } from "./components/shared/SaveAnExtra100/SaveAnExtra100.es.js";
|
|
92
93
|
export {
|
|
93
94
|
ot as AccountBox,
|
|
94
95
|
jo as AccountDiscoverability,
|
|
@@ -122,7 +123,7 @@ export {
|
|
|
122
123
|
sr as CustomTransaction,
|
|
123
124
|
Mo as Description,
|
|
124
125
|
X as DirectDeposit,
|
|
125
|
-
|
|
126
|
+
lt as DirectDepositDeepLink,
|
|
126
127
|
q as DirectDepositSubHeader,
|
|
127
128
|
ur as DiscoveredAccountsBody,
|
|
128
129
|
T as DiscoveredAccountsConnect,
|
|
@@ -130,7 +131,7 @@ export {
|
|
|
130
131
|
hr as DiscoveredAccountsMiniInsight,
|
|
131
132
|
f as DoubleBarChart,
|
|
132
133
|
c as DoubleBarChartMXUI,
|
|
133
|
-
|
|
134
|
+
ht as DrillDownCalculation,
|
|
134
135
|
vo as EmbeddedCard,
|
|
135
136
|
C as EmptyBarChart,
|
|
136
137
|
Eo as ErrorCard,
|
|
@@ -138,11 +139,11 @@ export {
|
|
|
138
139
|
vr as FederalBankHolidayMUI,
|
|
139
140
|
xo as FeedbackButtons,
|
|
140
141
|
Ao as FeedbackCard,
|
|
141
|
-
|
|
142
|
+
Oo as FeedbackDescription,
|
|
142
143
|
Lo as FeedbackHeader,
|
|
143
144
|
No as FeedbackOptions,
|
|
144
145
|
K as FullFeedBodyHeader,
|
|
145
|
-
|
|
146
|
+
ut as Header,
|
|
146
147
|
Fo as InsightButton,
|
|
147
148
|
Er as LastMonthsContributionSection,
|
|
148
149
|
Y as LeftBox,
|
|
@@ -153,11 +154,11 @@ export {
|
|
|
153
154
|
U as MiniInsightCard,
|
|
154
155
|
Fr as MonthlyDebtToIncomeComparisonV2,
|
|
155
156
|
kr as MonthlyEmergencyFundReviewBody,
|
|
156
|
-
|
|
157
|
+
Or as MonthlySavingsToIncomeComparison,
|
|
157
158
|
Gr as MonthlySpendToIncomeComparisonV2,
|
|
158
159
|
Nr as MonthlySpendingComparisonV2,
|
|
159
160
|
Ar as Offer,
|
|
160
|
-
|
|
161
|
+
Bt as P2PCategorizationSingleAccount,
|
|
161
162
|
w as P2PMultipleCategorization,
|
|
162
163
|
jr as P2pCategorization,
|
|
163
164
|
Zr as P2pCategorizationMultipleTransactions,
|
|
@@ -167,9 +168,9 @@ export {
|
|
|
167
168
|
I as PulseGraidentBox,
|
|
168
169
|
b as PulseProgressBar,
|
|
169
170
|
ro as RightBox,
|
|
170
|
-
|
|
171
|
+
Tt as SaveAnExtra100,
|
|
171
172
|
V as SaveEnoughToLiveOnBottomSection,
|
|
172
|
-
|
|
173
|
+
z as SaveEnoughToLiveOnTopSection,
|
|
173
174
|
Qr as SavingsAccountBalancesSummary,
|
|
174
175
|
_r as SetUpDirectDepositBody,
|
|
175
176
|
lr as SharedDeposit,
|
|
@@ -178,8 +179,9 @@ export {
|
|
|
178
179
|
tt as SwitchDirectDepositMainContainer,
|
|
179
180
|
xr as TotalSavedSection,
|
|
180
181
|
R as TransactionCard,
|
|
181
|
-
at as
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
182
|
+
at as TransparentOverdraftV2,
|
|
183
|
+
nt as UnifiedDeposit,
|
|
184
|
+
st as UserFeedback,
|
|
185
|
+
dt as WeeklyNoSpendDays,
|
|
186
|
+
yt as variants
|
|
185
187
|
};
|