@mx-cartographer/experiences 9.4.43 → 9.4.44
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
CHANGED
|
@@ -1,3 +1,7 @@
|
|
|
1
|
+
## [9.4.44] - 09-25-2026
|
|
2
|
+
|
|
3
|
+
- **FIXED** - Budgets zero-state buttons now wrap and grow to fit longer localized copy instead of cropping or overflowing the text (MEW-4167)
|
|
4
|
+
|
|
1
5
|
## [9.4.43] - 09-25-2026
|
|
2
6
|
|
|
3
7
|
- **FIXED** - Category names now render localized copy instead of the raw API value in the Spending widget (main view list, drawer, donut legend), the Spending mini widget, the Finstrong spend-less-than-you-make chart, and the Transactions table Category column. (MEW-4166)
|
|
@@ -1,21 +1,21 @@
|
|
|
1
|
-
import { useAppConfig as
|
|
1
|
+
import { useAppConfig as S, useBudgetsStore as B, useCategoryStore as v, useGlobalCopyStore as z, useWidgetContainerProvider as A } from "../../common/context/hooks.es.js";
|
|
2
2
|
import { useScreenSize as D } from "../../common/hooks/useScreenSize.es.js";
|
|
3
3
|
import E from "../../common/components/Loader.es.js";
|
|
4
4
|
import { EmptyState as u } from "../../common/components/EmptyState.es.js";
|
|
5
|
-
import
|
|
6
|
-
import { Fragment as j, jsx as
|
|
7
|
-
var
|
|
8
|
-
const { config:
|
|
9
|
-
|
|
10
|
-
const { data: e, isSuccess:
|
|
11
|
-
|
|
5
|
+
import s from "react";
|
|
6
|
+
import { Fragment as j, jsx as a } from "react/jsx-runtime";
|
|
7
|
+
var R = ({ isMiniWidget: r = !1, onConnectAccountsClick: _, createBudgetOnClick: n }) => {
|
|
8
|
+
const { config: h } = S(), { recalculateBudgets: g } = B(), { spendCategories: i } = v(), { budgets: t } = z(), { availableWidth: p } = A(), { isMobile: b } = D(p), o = r && b, [l, d] = s.useState(!1), [y, f] = s.useState(!1), [x, m] = s.useState(!1), w = s.useMemo(() => i.filter((e) => e.totalAverageAmount > 0), [i]), c = async () => {
|
|
9
|
+
m(!0);
|
|
10
|
+
const { data: e, isSuccess: C } = await g(w);
|
|
11
|
+
m(!1), C ? (e.length === 0 && f(!0), d(!1)) : d(!0);
|
|
12
12
|
};
|
|
13
|
-
return
|
|
13
|
+
return x ? /* @__PURE__ */ a(E, {}) : l ? /* @__PURE__ */ a(u, {
|
|
14
14
|
header: t.autogenerate_budgets_error_header,
|
|
15
15
|
icon: "error",
|
|
16
16
|
iconColor: "#4D4D4D",
|
|
17
17
|
onClick: (e) => {
|
|
18
|
-
e === "primary" ?
|
|
18
|
+
e === "primary" ? c() : n();
|
|
19
19
|
},
|
|
20
20
|
primaryButton: t.autogenerate_budgets_error_primary_button,
|
|
21
21
|
secondaryButton: t.zero_state_generate_budgets_secondary_button,
|
|
@@ -23,13 +23,15 @@ var P = ({ isMiniWidget: o = !1, onConnectAccountsClick: _, createBudgetOnClick:
|
|
|
23
23
|
sx: {
|
|
24
24
|
width: { sm: 468 },
|
|
25
25
|
".buttons-footer": {
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
26
|
+
minWidth: 208,
|
|
27
|
+
maxWidth: "100%",
|
|
28
|
+
button: {
|
|
29
|
+
textWrap: "wrap",
|
|
30
|
+
height: "max-content"
|
|
31
|
+
},
|
|
32
|
+
...o && { mt: 16 }
|
|
31
33
|
},
|
|
32
|
-
...
|
|
34
|
+
...o && {
|
|
33
35
|
justifyContent: "center",
|
|
34
36
|
mt: 0,
|
|
35
37
|
svg: {
|
|
@@ -38,30 +40,32 @@ var P = ({ isMiniWidget: o = !1, onConnectAccountsClick: _, createBudgetOnClick:
|
|
|
38
40
|
}
|
|
39
41
|
}
|
|
40
42
|
}
|
|
41
|
-
}) : /* @__PURE__ */
|
|
43
|
+
}) : /* @__PURE__ */ a(j, { children: y ? /* @__PURE__ */ a(u, {
|
|
42
44
|
header: t.zero_state_generate_budgets_header,
|
|
43
45
|
icon: "error",
|
|
44
46
|
iconColor: "#4D4D4D",
|
|
45
47
|
onClick: (e) => {
|
|
46
48
|
e === "primary" ? _() : n();
|
|
47
49
|
},
|
|
48
|
-
primaryButton:
|
|
50
|
+
primaryButton: h.show_connections_widget_in_master ? t.zero_state_generate_budgets_primary_button : void 0,
|
|
49
51
|
secondaryButton: t.zero_state_generate_budgets_secondary_button,
|
|
50
52
|
subText: t.zero_state_generate_budgets_subheader,
|
|
51
53
|
sx: {
|
|
52
|
-
width:
|
|
53
|
-
height:
|
|
54
|
-
mt:
|
|
54
|
+
width: r ? "100%" : { sm: 500 },
|
|
55
|
+
height: r ? "100%" : { sm: 468 },
|
|
56
|
+
mt: o ? 0 : 50,
|
|
55
57
|
".buttons-footer": {
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
58
|
+
minWidth: 208,
|
|
59
|
+
maxWidth: "100%",
|
|
60
|
+
minHeight: 100,
|
|
61
|
+
button: {
|
|
62
|
+
textWrap: "wrap",
|
|
63
|
+
height: "max-content"
|
|
64
|
+
},
|
|
65
|
+
...o && { mt: 16 }
|
|
62
66
|
},
|
|
63
|
-
padding:
|
|
64
|
-
...
|
|
67
|
+
padding: r ? 5 : 0,
|
|
68
|
+
...o && {
|
|
65
69
|
justifyContent: "center",
|
|
66
70
|
svg: {
|
|
67
71
|
height: 32,
|
|
@@ -69,30 +73,32 @@ var P = ({ isMiniWidget: o = !1, onConnectAccountsClick: _, createBudgetOnClick:
|
|
|
69
73
|
}
|
|
70
74
|
}
|
|
71
75
|
}
|
|
72
|
-
}) : /* @__PURE__ */
|
|
76
|
+
}) : /* @__PURE__ */ a(u, {
|
|
73
77
|
header: t.create_budgets_title,
|
|
74
78
|
icon: "bubble_chart",
|
|
75
79
|
iconColor: "#1A1A1A",
|
|
76
80
|
onClick: (e) => {
|
|
77
|
-
e === "primary" ?
|
|
81
|
+
e === "primary" ? c() : n();
|
|
78
82
|
},
|
|
79
83
|
primaryButton: t.empty_state_primary_button,
|
|
80
|
-
secondaryButton:
|
|
84
|
+
secondaryButton: r ? void 0 : t.empty_state_secondary_button,
|
|
81
85
|
subText: t.empty_state_subheader,
|
|
82
86
|
sx: {
|
|
83
|
-
width:
|
|
84
|
-
height:
|
|
85
|
-
mt:
|
|
87
|
+
width: r ? "100%" : { sm: 432 },
|
|
88
|
+
height: r ? "100%" : { sm: 468 },
|
|
89
|
+
mt: o ? 0 : 50,
|
|
86
90
|
".buttons-footer": {
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
91
|
+
minWidth: 208,
|
|
92
|
+
maxWidth: "100%",
|
|
93
|
+
minHeight: 100,
|
|
94
|
+
button: {
|
|
95
|
+
textWrap: "wrap",
|
|
96
|
+
height: "max-content"
|
|
97
|
+
},
|
|
98
|
+
...o && { mt: 24 }
|
|
93
99
|
},
|
|
94
|
-
padding:
|
|
95
|
-
...
|
|
100
|
+
padding: r ? 4 : 0,
|
|
101
|
+
...o && {
|
|
96
102
|
justifyContent: "center",
|
|
97
103
|
svg: {
|
|
98
104
|
height: 32,
|
|
@@ -103,7 +109,7 @@ var P = ({ isMiniWidget: o = !1, onConnectAccountsClick: _, createBudgetOnClick:
|
|
|
103
109
|
}) });
|
|
104
110
|
};
|
|
105
111
|
export {
|
|
106
|
-
|
|
112
|
+
R as BudgetsEmptyState
|
|
107
113
|
};
|
|
108
114
|
|
|
109
115
|
//# sourceMappingURL=BudgetsEmptyState.es.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"BudgetsEmptyState.es.js","names":[],"sources":["../../../src/budgets/components/BudgetsEmptyState.tsx"],"sourcesContent":["import React from 'react'\n\nimport {\n useAppConfig,\n EmptyState,\n Loader,\n useBudgetsStore,\n useCategoryStore,\n useGlobalCopyStore,\n useScreenSize,\n useWidgetContainerProvider,\n} from '../../common'\n\ninterface BudgetsEmptyStateProps {\n isMiniWidget?: boolean\n onConnectAccountsClick: () => void\n createBudgetOnClick: () => void\n}\nexport const BudgetsEmptyState: React.FC<BudgetsEmptyStateProps> = ({\n isMiniWidget = false,\n onConnectAccountsClick,\n createBudgetOnClick,\n}) => {\n const { config } = useAppConfig()\n const { recalculateBudgets } = useBudgetsStore()\n const { spendCategories } = useCategoryStore()\n const { budgets: copy } = useGlobalCopyStore()\n const { availableWidth } = useWidgetContainerProvider()\n const { isMobile } = useScreenSize(availableWidth)\n\n const isCompact = isMiniWidget && isMobile\n\n const [isError, setError] = React.useState(false)\n const [shouldShowEmptyGeneratedBudgets, setShouldShowEmptyGeneratedBudgets] =\n React.useState(false)\n const [recalculateBudgetsLoading, setRecalculateBudgetsLoading] = React.useState(false)\n\n const newBudgetCategories = React.useMemo(() => {\n return
|
|
1
|
+
{"version":3,"file":"BudgetsEmptyState.es.js","names":[],"sources":["../../../src/budgets/components/BudgetsEmptyState.tsx"],"sourcesContent":["import React from 'react'\n\nimport {\n useAppConfig,\n EmptyState,\n Loader,\n useBudgetsStore,\n useCategoryStore,\n useGlobalCopyStore,\n useScreenSize,\n useWidgetContainerProvider,\n} from '../../common'\n\ninterface BudgetsEmptyStateProps {\n isMiniWidget?: boolean\n onConnectAccountsClick: () => void\n createBudgetOnClick: () => void\n}\nexport const BudgetsEmptyState: React.FC<BudgetsEmptyStateProps> = ({\n isMiniWidget = false,\n onConnectAccountsClick,\n createBudgetOnClick,\n}) => {\n const { config } = useAppConfig()\n const { recalculateBudgets } = useBudgetsStore()\n const { spendCategories } = useCategoryStore()\n const { budgets: copy } = useGlobalCopyStore()\n const { availableWidth } = useWidgetContainerProvider()\n const { isMobile } = useScreenSize(availableWidth)\n\n const isCompact = isMiniWidget && isMobile\n\n const [isError, setError] = React.useState(false)\n const [shouldShowEmptyGeneratedBudgets, setShouldShowEmptyGeneratedBudgets] =\n React.useState(false)\n const [recalculateBudgetsLoading, setRecalculateBudgetsLoading] = React.useState(false)\n\n const newBudgetCategories = React.useMemo(() => {\n return spendCategories.filter((category) => category.totalAverageAmount > 0)\n }, [spendCategories])\n\n const autoGenerateBudgets = async () => {\n setRecalculateBudgetsLoading(true)\n const { data, isSuccess } = await recalculateBudgets(newBudgetCategories)\n setRecalculateBudgetsLoading(false)\n if (isSuccess) {\n if (data.length === 0) {\n setShouldShowEmptyGeneratedBudgets(true)\n }\n setError(false)\n } else {\n setError(true)\n }\n }\n\n if (recalculateBudgetsLoading) {\n return <Loader />\n }\n if (isError) {\n return (\n <EmptyState\n header={copy.autogenerate_budgets_error_header}\n icon={'error'}\n iconColor=\"#4D4D4D\"\n onClick={(buttonType) => {\n if (buttonType === 'primary') {\n autoGenerateBudgets()\n } else {\n createBudgetOnClick()\n }\n }}\n primaryButton={copy.autogenerate_budgets_error_primary_button}\n secondaryButton={copy.zero_state_generate_budgets_secondary_button}\n subText={copy.autogenerate_budgets_error_subheader}\n sx={{\n width: { sm: 468 },\n '.buttons-footer': {\n minWidth: 208,\n maxWidth: '100%',\n button: { textWrap: 'wrap', height: 'max-content' },\n ...(isCompact && { mt: 16 }),\n },\n ...(isCompact && { justifyContent: 'center', mt: 0, svg: { height: 32, width: 32 } }),\n }}\n />\n )\n }\n\n return (\n <>\n {shouldShowEmptyGeneratedBudgets ? (\n <EmptyState\n header={copy.zero_state_generate_budgets_header}\n icon=\"error\"\n iconColor=\"#4D4D4D\"\n onClick={(buttonType: string) => {\n if (buttonType === 'primary') {\n onConnectAccountsClick()\n } else {\n createBudgetOnClick()\n }\n }}\n primaryButton={\n config.show_connections_widget_in_master\n ? copy.zero_state_generate_budgets_primary_button\n : undefined\n }\n secondaryButton={copy.zero_state_generate_budgets_secondary_button}\n subText={copy.zero_state_generate_budgets_subheader}\n sx={{\n width: isMiniWidget ? '100%' : { sm: 500 },\n height: isMiniWidget ? '100%' : { sm: 468 },\n mt: isCompact ? 0 : 50,\n '.buttons-footer': {\n minWidth: 208,\n maxWidth: '100%',\n minHeight: 100,\n button: { textWrap: 'wrap', height: 'max-content' },\n ...(isCompact && { mt: 16 }),\n },\n padding: isMiniWidget ? 5 : 0,\n ...(isCompact && { justifyContent: 'center', svg: { height: 32, width: 32 } }),\n }}\n />\n ) : (\n <EmptyState\n header={copy.create_budgets_title}\n icon=\"bubble_chart\"\n iconColor=\"#1A1A1A\"\n onClick={(buttonType: string) => {\n if (buttonType === 'primary') {\n autoGenerateBudgets()\n } else {\n createBudgetOnClick()\n }\n }}\n primaryButton={copy.empty_state_primary_button}\n secondaryButton={!isMiniWidget ? copy.empty_state_secondary_button : undefined}\n subText={copy.empty_state_subheader}\n sx={{\n width: isMiniWidget ? '100%' : { sm: 432 },\n height: isMiniWidget ? '100%' : { sm: 468 },\n mt: isCompact ? 0 : 50,\n '.buttons-footer': {\n minWidth: 208,\n maxWidth: '100%',\n minHeight: 100,\n button: { textWrap: 'wrap', height: 'max-content' },\n ...(isCompact && { mt: 24 }),\n },\n padding: isMiniWidget ? 4 : 0,\n ...(isCompact && { justifyContent: 'center', svg: { height: 32, width: 32 } }),\n }}\n />\n )}\n </>\n )\n}\n"],"mappings":";;;;;;AAkBA,IAAa,IAAA,CAAuD,EAClE,cAAA,IAAe,IACf,wBAAA,GACA,qBAAA,EAAA,MACI;AACJ,QAAM,EAAE,QAAA,EAAA,IAAW,EAAa,GAC1B,EAAE,oBAAA,EAAA,IAAuB,EAAgB,GACzC,EAAE,iBAAA,EAAA,IAAoB,EAAiB,GACvC,EAAE,SAAS,EAAA,IAAS,EAAmB,GACvC,EAAE,gBAAA,EAAA,IAAmB,EAA2B,GAChD,EAAE,UAAA,EAAA,IAAa,EAAc,CAAc,GAE3C,IAAY,KAAgB,GAE5B,CAAC,GAAS,CAAA,IAAY,EAAM,SAAS,EAAK,GAC1C,CAAC,GAAiC,CAAA,IACtC,EAAM,SAAS,EAAK,GAChB,CAAC,GAA2B,CAAA,IAAgC,EAAM,SAAS,EAAK,GAEhF,IAAsB,EAAM,QAAA,MACzB,EAAgB,OAAA,CAAQ,MAAa,EAAS,qBAAqB,CAAC,GAC1E,CAAC,CAAe,CAAC,GAEd,IAAsB,YAAY;AACtC,IAAA,EAA6B,EAAI;AACjC,UAAM,EAAE,MAAA,GAAM,WAAA,EAAA,IAAc,MAAM,EAAmB,CAAmB;AACxE,IAAA,EAA6B,EAAK,GAC9B,KACE,EAAK,WAAW,KAClB,EAAmC,EAAI,GAEzC,EAAS,EAAK,KAEd,EAAS,EAAI;AAAA,EAEjB;AAEA,SAAI,IACK,gBAAA,EAAC,GAAD,CAAS,CAAA,IAEd,IAEA,gBAAA,EAAC,GAAD;AAAA,IACE,QAAQ,EAAK;AAAA,IACb,MAAM;AAAA,IACN,WAAU;AAAA,IACV,SAAA,CAAU,MAAe;AACvB,MAAI,MAAe,YACjB,EAAoB,IAEpB,EAAoB;AAAA,IAExB;AAAA,IACA,eAAe,EAAK;AAAA,IACpB,iBAAiB,EAAK;AAAA,IACtB,SAAS,EAAK;AAAA,IACd,IAAI;AAAA,MACF,OAAO,EAAE,IAAI,IAAI;AAAA,MACjB,mBAAmB;AAAA,QACjB,UAAU;AAAA,QACV,UAAU;AAAA,QACV,QAAQ;AAAA,UAAE,UAAU;AAAA,UAAQ,QAAQ;AAAA,QAAc;AAAA,QAClD,GAAI,KAAa,EAAE,IAAI,GAAG;AAAA,MAC5B;AAAA,MACA,GAAI,KAAa;AAAA,QAAE,gBAAgB;AAAA,QAAU,IAAI;AAAA,QAAG,KAAK;AAAA,UAAE,QAAQ;AAAA,UAAI,OAAO;AAAA,QAAG;AAAA,MAAE;AAAA,IACrF;AAAA,EACD,CAAA,IAKH,gBAAA,EAAA,GAAA,EAAA,UACG,IACC,gBAAA,EAAC,GAAD;AAAA,IACE,QAAQ,EAAK;AAAA,IACb,MAAK;AAAA,IACL,WAAU;AAAA,IACV,SAAA,CAAU,MAAuB;AAC/B,MAAI,MAAe,YACjB,EAAuB,IAEvB,EAAoB;AAAA,IAExB;AAAA,IACA,eACE,EAAO,oCACH,EAAK,6CACL;AAAA,IAEN,iBAAiB,EAAK;AAAA,IACtB,SAAS,EAAK;AAAA,IACd,IAAI;AAAA,MACF,OAAO,IAAe,SAAS,EAAE,IAAI,IAAI;AAAA,MACzC,QAAQ,IAAe,SAAS,EAAE,IAAI,IAAI;AAAA,MAC1C,IAAI,IAAY,IAAI;AAAA,MACpB,mBAAmB;AAAA,QACjB,UAAU;AAAA,QACV,UAAU;AAAA,QACV,WAAW;AAAA,QACX,QAAQ;AAAA,UAAE,UAAU;AAAA,UAAQ,QAAQ;AAAA,QAAc;AAAA,QAClD,GAAI,KAAa,EAAE,IAAI,GAAG;AAAA,MAC5B;AAAA,MACA,SAAS,IAAe,IAAI;AAAA,MAC5B,GAAI,KAAa;AAAA,QAAE,gBAAgB;AAAA,QAAU,KAAK;AAAA,UAAE,QAAQ;AAAA,UAAI,OAAO;AAAA,QAAG;AAAA,MAAE;AAAA,IAC9E;AAAA,EACD,CAAA,IAED,gBAAA,EAAC,GAAD;AAAA,IACE,QAAQ,EAAK;AAAA,IACb,MAAK;AAAA,IACL,WAAU;AAAA,IACV,SAAA,CAAU,MAAuB;AAC/B,MAAI,MAAe,YACjB,EAAoB,IAEpB,EAAoB;AAAA,IAExB;AAAA,IACA,eAAe,EAAK;AAAA,IACpB,iBAAkB,IAAmD,SAApC,EAAK;AAAA,IACtC,SAAS,EAAK;AAAA,IACd,IAAI;AAAA,MACF,OAAO,IAAe,SAAS,EAAE,IAAI,IAAI;AAAA,MACzC,QAAQ,IAAe,SAAS,EAAE,IAAI,IAAI;AAAA,MAC1C,IAAI,IAAY,IAAI;AAAA,MACpB,mBAAmB;AAAA,QACjB,UAAU;AAAA,QACV,UAAU;AAAA,QACV,WAAW;AAAA,QACX,QAAQ;AAAA,UAAE,UAAU;AAAA,UAAQ,QAAQ;AAAA,QAAc;AAAA,QAClD,GAAI,KAAa,EAAE,IAAI,GAAG;AAAA,MAC5B;AAAA,MACA,SAAS,IAAe,IAAI;AAAA,MAC5B,GAAI,KAAa;AAAA,QAAE,gBAAgB;AAAA,QAAU,KAAK;AAAA,UAAE,QAAQ;AAAA,UAAI,OAAO;AAAA,QAAG;AAAA,MAAE;AAAA,IAC9E;AAAA,EACD,CAAA,EAEH,CAAA;AAEN"}
|