@mx-cartographer/experiences 8.2.4 → 8.2.6

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,10 @@
1
+ ## [8.2.6] - 05-21-2026
2
+
3
+ - **UPDATED** - Hide MarketingHub Offer call to action button when call_to_action content is blank
4
+ ## [8.2.5] - 05-14-2026
5
+
6
+ - **FIXED** - Payment due date logic in account details to ensure consistent UTC-based date rendering
7
+
1
8
  ## [8.2.4] - 05-13-2026
2
9
 
3
10
  - **UPDATED** - Removed deprecated `variant` and `showBorder` props from Insights Micro Widget after `cardStyle` migration, reduce type duplication for micro insight `cards`
package/README.md CHANGED
@@ -41,15 +41,19 @@ The library is built using a modern React stack, leveraging industry-standard to
41
41
 
42
42
  ### Prerequisites
43
43
  - **Node.js**: v18.0.0 or higher
44
- - **Yarn**: 4.11.0 [^YARN_VER]
44
+ - **Yarn**: 4.14.1 [^YARN_VER]
45
45
  - **React**: 18.3.1 [^REACT_VER]
46
- - **MobX**: 6.13.6 [^MOBX_VER]
46
+ - **MobX**: 6.15.0 [^MOBX_VER]
47
47
 
48
48
  ### Installation
49
49
 
50
50
  Install the library using yarn:
51
51
 
52
52
  ```bash
53
+ # For v8.x (this branch)
54
+ yarn add @mx-cartographer/experiences@v8-latest
55
+
56
+ # For v9.x (master)
53
57
  yarn add @mx-cartographer/experiences
54
58
  ```
55
59
 
@@ -149,13 +153,24 @@ graph TD
149
153
  src --> core["core/ (Centralized TypeScript types and constants)"]
150
154
  src --> common["common/ (Shared components, hooks, stores, and API utilities)"]
151
155
  src --> accounts["accounts/ (Accounts summary, details, and connection management)"]
156
+ src --> analytics["analytics/ (User feedback collection and NPS/CSAT surveys)"]
152
157
  src --> budgets["budgets/ (Budget tracking, bubble charts, and categorization)"]
153
158
  src --> cashflow["cashflow/ (Cashflow forecasting and event management)"]
159
+ src --> categories["categories/ (Category management and classification)"]
154
160
  src --> dashboard["dashboard/ (Aggregate view of multiple experience widgets)"]
155
161
  src --> debts["debts/ (Debt tracking and payoff visualization)"]
162
+ src --> expenses["expenses/ (Expense tracking and management)"]
156
163
  src --> finstrong["finstrong/ (Financial health scoring and reporting)"]
157
164
  src --> goals["goals/ (Savings goal setting, tracking, and progress visualization)"]
165
+ src --> help["help/ (Contextual help, support requests, and user guidance)"]
166
+ src --> insights["insights/ (Data-driven financial insights and alerts)"]
167
+ src --> investments["investments/ (Investment portfolio tracking and holding details)"]
168
+ src --> merchants["merchants/ (Merchant data and transaction categorization)"]
169
+ src --> microinsights["microinsights/ (Smart, micro financial insights)"]
158
170
  src --> networth["networth/ (Asset and liability tracking with historical trends)"]
171
+ src --> notifications["notifications/ (Notification management and alerts)"]
172
+ src --> recurringtransactions["recurringtransactions/ (Recurring bill and subscription management)"]
173
+ src --> settings["settings/ (User profile, device, and preference management)"]
159
174
  src --> spending["spending/ (Categorized spending analysis)"]
160
175
  src --> transactions["transactions/ (Detailed transaction history and rules)"]
161
176
  src --> trends["trends/ (Longitudinal spending and income analysis)"]
@@ -176,7 +191,7 @@ yarn testui
176
191
  yarn citest
177
192
  ```
178
193
 
179
- Verification logic and test setups are maintained in [src/common/__tests__](src/common/__tests__) and [vitest.setup.insights.tsx](vitest.setup.insights.tsx).
194
+ Verification logic and test setups are maintained in various `__tests__` directories throughout the codebase and [vitest.setup.insights.tsx](vitest.setup.insights.tsx).
180
195
 
181
196
  ## Contributing
182
197
 
@@ -193,18 +208,42 @@ Verification logic and test setups are maintained in [src/common/__tests__](src/
193
208
  yarn build
194
209
  ```
195
210
 
196
- <!-- Commented this out to prevent exposing internal operations in the npm registry -->
211
+ ## Release Workflow (v8.x)
212
+
213
+ This branch (`Experiences_8.x`) publishes v8.x.x releases **manually**, while `master` publishes v9.x automatically via CI.
197
214
 
198
- <!-- ## Publishing alpha versions
199
- 1. Bump the version in package.json using the format `major.minor.patch-alpha.<yourinitials><n>` See [the version history](https://www.npmjs.com/package/@mx-cartographer/experiences?activeTab=versions) for examples.
200
- 1. Run `npm publish --tag alpha`.
215
+ To avoid overwriting the `latest` npm dist-tag (which should always point to v9.x on `master`), **always publish with the `v8-latest` tag**:
201
216
 
217
+ 1. Branch off `Experiences_8.x` for your feature work:
218
+ ```bash
219
+ git checkout Experiences_8.x
220
+ git checkout -b my-feature-branch
221
+ ```
222
+ 1. Make your changes, including bumping the version in `package.json` and updating `CHANGELOG.md`.
223
+ 1. Push your feature branch and open an MR targeting `Experiences_8.x` on GitLab.
224
+ 1. After code review and merge, pull down the updated branch:
225
+ ```bash
226
+ git checkout Experiences_8.x
227
+ git pull origin Experiences_8.x
228
+ ```
229
+ 1. Tag the release and push the tag:
230
+ ```bash
231
+ git tag v8.2.6
232
+ git push origin --tags
233
+ ```
234
+ 1. Publish with the dist-tag:
235
+ ```bash
236
+ npm publish --tag v8-latest
237
+ ```
238
+
239
+ Consumers on v8 can install with:
240
+ ```bash
241
+ yarn add @mx-cartographer/experiences@v8-latest
242
+ # or pin a specific version
243
+ yarn add @mx-cartographer/experiences@8.2.6
244
+ ```
202
245
 
203
- ## Merging and Publishing
204
- 1. Update CHANGELOG.md and include the version to publish using the standard `major.minor.patch`. If there are breaking changes, we bump the major, new feature we bump minor and bug fixes or minor changes, we bump patch.
205
- 1. Request a MR review by commenting `shipit --review`
206
- 1. Once the MR is approved, comment `shipit --publish-version=major|minor|patch`.
207
- 2. Shipit will bump the version in package.json, merge and publish the package to npm. -->
246
+ > **Do not** run `npm publish` without `--tag v8-latest` from this branch — it would move the `latest` tag away from v9.x.
208
247
 
209
248
  ## Support
210
249
 
@@ -217,12 +256,12 @@ For technical assistance or internal inquiries:
217
256
 
218
257
  [^1]: [src/common/components/WidgetContainer.tsx:55](src/common/components/WidgetContainer.tsx#L55)
219
258
  [^2]: [src/common/context/WidgetContainerProvider.tsx:10](src/common/context/WidgetContainerProvider.tsx#L10)
220
- [^3]: [src/common/context/GlobalStoreProvider.tsx:10](src/common/context/GlobalStoreProvider.tsx#L10)
259
+ [^3]: [src/common/context/GlobalDataProvider.tsx:16](src/common/context/GlobalDataProvider.tsx#L16)
221
260
  [^4]: [src/common/hooks/useScreenSize.tsx:4](src/common/hooks/useScreenSize.tsx#L4)
222
- [^5]: [package.json:267](package.json#L267)
223
- [^6]: [package.json:160](package.json#L160)
224
- [^MUI_VER]: [package.json:188](package.json#L188)
225
- [^MXUI_VER]: [package.json:196](package.json#L196)
226
- [^MOBX_VER]: [package.json:202](package.json#L202)
227
- [^REACT_VER]: [package.json:206](package.json#L206)
228
- [^YARN_VER]: [package.json:284](package.json#L284)
261
+ [^5]: [package.json:274](package.json#L274)
262
+ [^6]: [package.json:233](package.json#L233)
263
+ [^MUI_VER]: [package.json:195](package.json#L195)
264
+ [^MXUI_VER]: [package.json:203](package.json#L203)
265
+ [^MOBX_VER]: [package.json:209](package.json#L209)
266
+ [^REACT_VER]: [package.json:213](package.json#L213)
267
+ [^YARN_VER]: [package.json:291](package.json#L291)
@@ -5,7 +5,7 @@ import { H3 as x, InstitutionLogo as D, Text as d, H2 as N } from "@mxenabled/mx
5
5
  import { f as P } from "./NumberFormatting--XMeeBfr.mjs";
6
6
  import p from "react";
7
7
  import { G, d as f, l as O, f as R, a as v, u as w } from "./hooks-BaO_gOI6.mjs";
8
- import { g as L } from "./AccountFields-CAy0x_4i.mjs";
8
+ import { g as L } from "./AccountFields-mwJ8NXsX.mjs";
9
9
  import { A as i } from "./Account-BaJmiJAG.mjs";
10
10
  import H from "@mui/material/Card";
11
11
  import M from "@mui/material/CardContent";
@@ -1,12 +1,12 @@
1
1
  import { jsx as p } from "react/jsx-runtime";
2
- import { Text as v, Icon as b } from "@mxenabled/mxui";
3
- import { A as d, a as h, P as F, b as T } from "./Account-BaJmiJAG.mjs";
4
- import { i as A, u as D, a as g, b as O, c as C } from "./AccountUtils-T5_Odvos.mjs";
2
+ import { Text as h, Icon as b } from "@mxenabled/mxui";
3
+ import { A as d, a as F, P as T, b as A } from "./Account-BaJmiJAG.mjs";
4
+ import { i as D, u as g, a as O, b as C, c as N } from "./AccountUtils-T5_Odvos.mjs";
5
5
  import { F as m } from "./Accounts-CseLC3lL.mjs";
6
- import { f as N } from "./DateUtil-Bhq59ZVg.mjs";
6
+ import { f } from "./DateUtil-Bhq59ZVg.mjs";
7
7
  import { f as s, i as o, a as S, b as I } from "./NumberFormatting--XMeeBfr.mjs";
8
8
  import { b as i } from "./Localization-DnoVyBNK.mjs";
9
- import { f, D as c } from "./DateFormats-HudZ3Bjs.mjs";
9
+ import { f as c, D as y } from "./DateFormats-HudZ3Bjs.mjs";
10
10
  const Y = (l, e) => {
11
11
  const n = [
12
12
  {
@@ -19,7 +19,7 @@ const Y = (l, e) => {
19
19
  valueFormatter: (a) => a
20
20
  }
21
21
  ];
22
- if (A(l)) {
22
+ if (D(l)) {
23
23
  n.unshift({
24
24
  label: e.account_balance,
25
25
  name: "balance",
@@ -30,7 +30,7 @@ const Y = (l, e) => {
30
30
  const a = Object.keys(d).filter((t) => Number(t)).map((t) => ({
31
31
  label: e.account_types[t],
32
32
  value: Number(t),
33
- icon: /* @__PURE__ */ p(b, { name: h[t] })
33
+ icon: /* @__PURE__ */ p(b, { name: F[t] })
34
34
  }));
35
35
  n.push({
36
36
  label: e.account_type,
@@ -42,10 +42,10 @@ const Y = (l, e) => {
42
42
  });
43
43
  }
44
44
  if (l.account_type === d.PROPERTY) {
45
- const a = Object.keys(F).filter((t) => Number(t)).map((t) => ({
45
+ const a = Object.keys(T).filter((t) => Number(t)).map((t) => ({
46
46
  label: e.property_types[t],
47
47
  value: Number(t),
48
- icon: /* @__PURE__ */ p(b, { name: T[t] })
48
+ icon: /* @__PURE__ */ p(b, { name: A[t] })
49
49
  }));
50
50
  n.push({
51
51
  label: e.property_type,
@@ -56,7 +56,7 @@ const Y = (l, e) => {
56
56
  valueFormatter: (t) => a.find((r) => r.value === t)?.label
57
57
  });
58
58
  }
59
- if (D(l)) {
59
+ if (g(l)) {
60
60
  let a = e.interest_rate, t = "interest_rate";
61
61
  l.is_manual || (typeof l.apr == "number" && (a = e.apr, t = "apr"), typeof l.apy == "number" && (a = e.apy, t = "apy")), n.push({
62
62
  event: "account_details_click_interest_rate",
@@ -68,7 +68,7 @@ const Y = (l, e) => {
68
68
  valueFormatter: (r) => o(r) ? S(r / 100) : r
69
69
  });
70
70
  }
71
- return g(l) && (n.push({
71
+ return O(l) && (n.push({
72
72
  label: e.minimum_payment,
73
73
  name: "minimum_payment",
74
74
  placeholder: i(e.enter_value, e.minimum_payment),
@@ -79,8 +79,8 @@ const Y = (l, e) => {
79
79
  name: "payment_due_at",
80
80
  type: m.Date,
81
81
  valueFormatter: (a) => {
82
- const t = typeof a == "number" ? new Date(a * 1e3) : a;
83
- return f(t, c.MED_MONTH_SHORT_DAY_FULL_YEAR);
82
+ const t = typeof a == "number" ? f(a) : a;
83
+ return c(t, y.MED_MONTH_SHORT_DAY_FULL_YEAR);
84
84
  }
85
85
  }) : n.push({
86
86
  label: e.day_payment_due,
@@ -91,13 +91,13 @@ const Y = (l, e) => {
91
91
  e.day_of_every_month,
92
92
  I(a <= 31 ? a : new Date(a).getDate())
93
93
  )
94
- })), O(l) && n.push({
94
+ })), C(l) && n.push({
95
95
  label: e.credit_limit,
96
96
  name: "credit_limit",
97
97
  placeholder: i(e.enter_value, e.credit_limit),
98
98
  type: m.Currency,
99
99
  valueFormatter: (a) => s(a, "0,0.00")
100
- }), C(l) && n.push({
100
+ }), N(l) && n.push({
101
101
  label: e.original_balance,
102
102
  minAmount: 1,
103
103
  name: "original_balance",
@@ -115,11 +115,11 @@ const Y = (l, e) => {
115
115
  }
116
116
  default:
117
117
  if (a = e.current_balance, t = l.balance, l.minimum_payment && l.payment_due_at) {
118
- const y = N(l.payment_due_at);
119
- r = /* @__PURE__ */ p(v, { component: "strong", variant: "caption", children: i(
118
+ const v = f(l.payment_due_at);
119
+ r = /* @__PURE__ */ p(h, { component: "strong", variant: "caption", children: i(
120
120
  e.payment_due_on,
121
121
  s(l.minimum_payment, "0,0.00"),
122
- f(y, c.FULL_MONTH_DAY)
122
+ c(v, y.FULL_MONTH_DAY)
123
123
  ) });
124
124
  } else l.credit_limit && (r = e.available_credit, _ = s(l.credit_limit - (l?.balance ?? 0), "0,0.00"));
125
125
  }
@@ -11,7 +11,7 @@ import { InstitutionLogo as B, Text as r } from "@mxenabled/mxui";
11
11
  import { Error as j } from "@mxenabled/mx-icons";
12
12
  import { I as T } from "./IconBacking-DgT8DCeh.mjs";
13
13
  import { f as $ } from "./NumberFormatting--XMeeBfr.mjs";
14
- import { g as k } from "./AccountFields-CAy0x_4i.mjs";
14
+ import { g as k } from "./AccountFields-mwJ8NXsX.mjs";
15
15
  import { u as w } from "./useAccountDisplayName-CFa_MrS6.mjs";
16
16
  import { a as E, u as M } from "./hooks-BaO_gOI6.mjs";
17
17
  import { C as d } from "./Account-BaJmiJAG.mjs";
@@ -11,15 +11,15 @@ import B from "@mui/material/ListSubheader";
11
11
  import P from "@mui/system/Stack";
12
12
  import { f as s1 } from "../NumberFormatting--XMeeBfr.mjs";
13
13
  import { useTheme as y1, alpha as w1 } from "@mui/material/styles";
14
- import { u as R, A as x1 } from "../AccountDetailsHeader-CfdnKyJK.mjs";
14
+ import { u as R, A as x1 } from "../AccountDetailsHeader-DIysk_4w.mjs";
15
15
  import { L as R1 } from "../LineChart-CejWS_rh.mjs";
16
16
  import { g as S1, a as T1, b as E1 } from "../SpendingData-PKlh8caU.mjs";
17
17
  import { l as D1, u as A, d as D, g as k, h as p1, a as _1, b as G } from "../hooks-BaO_gOI6.mjs";
18
18
  import { A as I, g as f, N as L1 } from "../Account-BaJmiJAG.mjs";
19
19
  import { I as f1, P as g1, S as H1 } from "../Account-BxHMlV9R.mjs";
20
- import { a as k1, b as I1 } from "../AccountFields-CAy0x_4i.mjs";
21
- import { g as c2 } from "../AccountFields-CAy0x_4i.mjs";
22
- import { A as U } from "../AccountListItem-BYyeeCf6.mjs";
20
+ import { a as k1, b as I1 } from "../AccountFields-mwJ8NXsX.mjs";
21
+ import { g as c2 } from "../AccountFields-mwJ8NXsX.mjs";
22
+ import { A as U } from "../AccountListItem-CU-oWLRi.mjs";
23
23
  import l1 from "@mui/material/Tab";
24
24
  import Z1 from "@mui/material/Tabs";
25
25
  import N1 from "@mui/material/Switch";
@@ -23,7 +23,7 @@ import ye from "@mui/material/Tab";
23
23
  import { getUnixTime as le } from "date-fns/getUnixTime";
24
24
  import Q from "@mui/material/List";
25
25
  import ee from "@mui/material/ListItem";
26
- import { A as tt } from "../AccountListItem-BYyeeCf6.mjs";
26
+ import { A as tt } from "../AccountListItem-CU-oWLRi.mjs";
27
27
  import { f as U, D as Y } from "../DateFormats-HudZ3Bjs.mjs";
28
28
  import nt from "@mui/material/ListSubheader";
29
29
  import { f as J } from "../NumberFormatting--XMeeBfr.mjs";
@@ -12,7 +12,7 @@ import { G as Ge, q as ee, u as w, k as V, g as k, d as te, a as He, b as ze } f
12
12
  import { u as ae } from "../useScreenSize-CeFhWTt_.mjs";
13
13
  import { b as T } from "../Localization-DnoVyBNK.mjs";
14
14
  import { D as ie } from "../Drawer-XPaLYjiO.mjs";
15
- import { A as je, u as Ve } from "../AccountDetailsHeader-CfdnKyJK.mjs";
15
+ import { A as je, u as Ve } from "../AccountDetailsHeader-DIysk_4w.mjs";
16
16
  import Ye from "@mui/material/Card";
17
17
  import Ke from "@mui/material/CardContent";
18
18
  import Ue from "@mui/material/CardHeader";
@@ -43,7 +43,7 @@ import { E as Be } from "../EmptyState-DHAkGsjk.mjs";
43
43
  import $n from "@mui/material/Chip";
44
44
  import { D as ie } from "../Drawer-XPaLYjiO.mjs";
45
45
  import { g as kt } from "../AccountDisplayName-CO7z3v99.mjs";
46
- import { g as Mt } from "../AccountFields-CAy0x_4i.mjs";
46
+ import { g as Mt } from "../AccountFields-mwJ8NXsX.mjs";
47
47
  import Nn from "@mui/material/ListSubheader";
48
48
  import { S as dt } from "../Select-BZRUpOib.mjs";
49
49
  import { A as je } from "../Account-BaJmiJAG.mjs";
@@ -3363,7 +3363,7 @@ const A4 = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAUAAAACvCAYAAACM9QdJAA
3363
3363
  altLoadingText: r,
3364
3364
  beat: i,
3365
3365
  button: /* @__PURE__ */ s(C, { spacing: 10, children: [
3366
- /* @__PURE__ */ t(
3366
+ i.call_to_action && /* @__PURE__ */ t(
3367
3367
  H,
3368
3368
  {
3369
3369
  beat: i,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@mx-cartographer/experiences",
3
- "version": "8.2.4",
3
+ "version": "8.2.6",
4
4
  "description": "Library containing experience widgets",
5
5
  "author": "MX",
6
6
  "license": "MIT",
@@ -288,5 +288,5 @@
288
288
  "CHANGELOG.md",
289
289
  "README.md"
290
290
  ],
291
- "packageManager": "yarn@4.14.1"
291
+ "packageManager": "yarn@4.15.0"
292
292
  }