@mx-cartographer/experiences 9.2.7 → 9.2.8
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 +4 -0
- package/dist/WidgetContainer-eosXfD5G.mjs +493 -0
- package/dist/WidgetContainer-eosXfD5G.mjs.map +1 -0
- package/dist/accounts/index.es.js +1 -1
- package/dist/budgets/index.es.js +1 -1
- package/dist/cashflow/index.es.js +1 -1
- package/dist/common/components/daterangeselector/DateRangeSelector.d.ts +14 -0
- package/dist/common/index.es.js +1 -1
- package/dist/debts/index.es.js +1 -1
- package/dist/finstrong/index.es.js +1 -1
- package/dist/goals/index.es.js +1 -1
- package/dist/help/index.es.js +1 -1
- package/dist/investments/index.es.js +1 -1
- package/dist/networth/index.es.js +1 -1
- package/dist/recurringtransactions/index.es.js +1 -1
- package/dist/settings/index.es.js +1 -1
- package/dist/spending/index.es.js +1 -1
- package/dist/transactions/index.es.js +1 -1
- package/dist/trends/index.es.js +1 -1
- package/package.json +1 -1
- package/dist/WidgetContainer-DvKtBdhn.mjs +0 -487
- package/dist/WidgetContainer-DvKtBdhn.mjs.map +0 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,3 +1,7 @@
|
|
|
1
|
+
## [9.2.8] - 08-07-2026
|
|
2
|
+
|
|
3
|
+
- **FIXED** - Trends timeframe buttons (3M/6M/9M/1Y) reset to the 6-month default when the widget remounted, snapping the displayed date range back to the previous selection
|
|
4
|
+
|
|
1
5
|
## [9.2.7] - 08-06-2026
|
|
2
6
|
|
|
3
7
|
- **FIXED** - Spending and Trends dropped a date-range or account-filter change made while a totals request was still in flight; the previous range's data stayed on screen until the widget was reloaded
|
|
@@ -0,0 +1,493 @@
|
|
|
1
|
+
import { jsxs as p, jsx as e } from "react/jsx-runtime";
|
|
2
|
+
import h from "react";
|
|
3
|
+
import { observer as le } from "mobx-react-lite";
|
|
4
|
+
import H from "@mui/material/Button";
|
|
5
|
+
import ge from "@mui/material/Card";
|
|
6
|
+
import fe from "@mui/material/CardContent";
|
|
7
|
+
import be from "@mui/material/Divider";
|
|
8
|
+
import U from "@mui/material/IconButton";
|
|
9
|
+
import Re from "@mui/material/Paper";
|
|
10
|
+
import L from "@mui/material/Stack";
|
|
11
|
+
import { ChevronLeft as _e } from "@mxenabled/mx-icons";
|
|
12
|
+
import { Icon as x, Text as z, DateRangePicker as Z } from "@mxenabled/mxui";
|
|
13
|
+
import { u as J } from "./useDimensions-CeDR9V8N.mjs";
|
|
14
|
+
import { G as Ce } from "./GlobalAccountFilter-z4N1ElqC.mjs";
|
|
15
|
+
import { a as de, u as me, f as xe, i as De, W as Te } from "./hooks-97sNJ_lf.mjs";
|
|
16
|
+
import { addMonths as ee } from "date-fns/addMonths";
|
|
17
|
+
import { addDays as ke } from "date-fns/addDays";
|
|
18
|
+
import { addYears as te } from "date-fns/addYears";
|
|
19
|
+
import { differenceInCalendarDays as ye } from "date-fns/differenceInCalendarDays";
|
|
20
|
+
import { differenceInCalendarMonths as Me } from "date-fns/differenceInCalendarMonths";
|
|
21
|
+
import { endOfDay as ve } from "date-fns/endOfDay";
|
|
22
|
+
import { endOfMonth as G } from "date-fns/endOfMonth";
|
|
23
|
+
import { endOfToday as ae } from "date-fns/endOfToday";
|
|
24
|
+
import { endOfYear as Pe } from "date-fns/endOfYear";
|
|
25
|
+
import { startOfMonth as Se } from "date-fns/startOfMonth";
|
|
26
|
+
import { startOfToday as Ee } from "date-fns/startOfToday";
|
|
27
|
+
import { startOfYear as Ae } from "date-fns/startOfYear";
|
|
28
|
+
import { subMonths as $ } from "date-fns/subMonths";
|
|
29
|
+
import { subDays as Le } from "date-fns/subDays";
|
|
30
|
+
import { subYears as re } from "date-fns/subYears";
|
|
31
|
+
import oe from "@mui/material/Box";
|
|
32
|
+
import Ye from "@mui/material/ButtonGroup";
|
|
33
|
+
import we from "@mui/material/Tab";
|
|
34
|
+
import Ie from "@mui/material/Tabs";
|
|
35
|
+
import Be from "@mui/material/ToggleButton";
|
|
36
|
+
import Oe from "@mui/material/ToggleButtonGroup";
|
|
37
|
+
import { useTheme as Ne } from "@mui/material/styles";
|
|
38
|
+
import { u as Fe } from "./useAriaLive-MkYebyUR.mjs";
|
|
39
|
+
import { D as We } from "./Dialog-Bvd2n8hz.mjs";
|
|
40
|
+
import { D as Ge } from "./Drawer-DsnW2o0v.mjs";
|
|
41
|
+
import { u as ce } from "./useScreenSize-mWpmnh5w.mjs";
|
|
42
|
+
import { f as v, D as P } from "./DateFormats-HudZ3Bjs.mjs";
|
|
43
|
+
import { L as He } from "./Loader-CxeBwuPG.mjs";
|
|
44
|
+
import ze from "@mui/material/useMediaQuery";
|
|
45
|
+
import { A as ne } from "./Analytics-D-jdcL72.mjs";
|
|
46
|
+
const je = (o) => {
|
|
47
|
+
const { isDesktop: l, isMobile: a, isSmallTablet: i, isTablet: r } = ce(o), d = ze("(min-width:900px)"), R = 24;
|
|
48
|
+
let m = 48, D = 32, g = 0, c = "h1", _ = !1;
|
|
49
|
+
const n = a || i;
|
|
50
|
+
r && !i ? (m = 24, D = 24, c = "h2") : n && (m = 8, D = 10, g = 10, c = "h3", _ = !0);
|
|
51
|
+
const S = {
|
|
52
|
+
pb: n ? 12 : 0,
|
|
53
|
+
...n && {
|
|
54
|
+
px: m,
|
|
55
|
+
"& .mx-cmn-date-range-selector": { m: 0, width: "100%" },
|
|
56
|
+
"& .mx-cmn-date-range-selector > .MuiBox-root": { display: "flex", justifyContent: "center" },
|
|
57
|
+
"& .MuiButtonGroup-root": { width: "100%" },
|
|
58
|
+
"& .MuiButtonGroup-middleButton": { flex: 1 },
|
|
59
|
+
"& .MuiToggleButtonGroup-root": { width: "100%", justifyContent: "center" }
|
|
60
|
+
}
|
|
61
|
+
};
|
|
62
|
+
return {
|
|
63
|
+
actionsFlex: n ? 0 : 1,
|
|
64
|
+
containerSquareCorners: _,
|
|
65
|
+
headerHeadingLevel: c,
|
|
66
|
+
headerPaddingBottom: g,
|
|
67
|
+
headerPaddingTop: D,
|
|
68
|
+
headerPaddingX: m,
|
|
69
|
+
iconSize: R,
|
|
70
|
+
isCompact: n,
|
|
71
|
+
isDesktop: l,
|
|
72
|
+
isViewportAbove900: d,
|
|
73
|
+
slotSx: S
|
|
74
|
+
};
|
|
75
|
+
}, ie = 6, Ve = [3, 6, 9, 12], se = (o) => {
|
|
76
|
+
const [l, a] = o;
|
|
77
|
+
if (!l || !a) return ie;
|
|
78
|
+
const i = Me(a, l);
|
|
79
|
+
return Ve.find((r) => i === r || i === r - 1) ?? ie;
|
|
80
|
+
}, qe = ({
|
|
81
|
+
calendarActions: o,
|
|
82
|
+
color: l = "primary",
|
|
83
|
+
copy: a,
|
|
84
|
+
range: i = [Se(Ee()), G(ae())],
|
|
85
|
+
shouldShrinkToIcon: r = !0,
|
|
86
|
+
variant: d = "outlined"
|
|
87
|
+
}) => {
|
|
88
|
+
const R = Ne(), { isMobile: m } = ce(), { announce: D, ariaLive: g } = Fe(), [c, _] = h.useState(i), [n, S] = h.useState(a.dateRangePickerCopy.dateRangeThisMonth), [C, Y] = h.useState(c), [E, T] = h.useState(!1), [j, w] = h.useState(!0), [k, A] = h.useState(() => se(i)), I = {
|
|
89
|
+
buttons: [
|
|
90
|
+
{ ariaLabel: "3 Months", label: "3M", value: 3 },
|
|
91
|
+
{ ariaLabel: "6 Months", label: "6M", value: 6 },
|
|
92
|
+
{ ariaLabel: "9 Months", label: "9M", value: 9 },
|
|
93
|
+
{ ariaLabel: "1 Year", label: "1Y", value: 12 }
|
|
94
|
+
],
|
|
95
|
+
tabs: [
|
|
96
|
+
{ label: "3 Months", value: 3 },
|
|
97
|
+
{ label: "6 Months", value: 6 },
|
|
98
|
+
{ label: "9 Months", value: 9 },
|
|
99
|
+
{ label: "1 Year", value: 12 }
|
|
100
|
+
]
|
|
101
|
+
};
|
|
102
|
+
h.useEffect(() => {
|
|
103
|
+
_(i), Y(i), A(se(i));
|
|
104
|
+
}, [i[0]?.getTime(), i[1]?.getTime()]), h.useEffect(() => {
|
|
105
|
+
(d === "timeframebuttons" || d === "timeframetabs") && o.onRangeChanged(V());
|
|
106
|
+
}, [k]);
|
|
107
|
+
const V = () => {
|
|
108
|
+
const t = G(ae());
|
|
109
|
+
return [G($(t, k)), t];
|
|
110
|
+
}, B = (t) => {
|
|
111
|
+
const [s, u] = c, f = t === "previous";
|
|
112
|
+
let b;
|
|
113
|
+
if (n === a.dateRangePickerCopy.dateRangeThisMonth || n === a.dateRangePickerCopy.dateRangeLastMonth)
|
|
114
|
+
b = [
|
|
115
|
+
f ? $(s, 1) : ee(s, 1),
|
|
116
|
+
G(f ? $(u, 1) : ee(u, 1))
|
|
117
|
+
];
|
|
118
|
+
else if (n === a.dateRangePickerCopy.dateRangeYTD || n === a.dateRangePickerCopy.dateRangeLastYear) {
|
|
119
|
+
const y = Ae(s), M = Pe(s);
|
|
120
|
+
b = [
|
|
121
|
+
f ? re(y, 1) : te(y, 1),
|
|
122
|
+
f ? re(M, 1) : te(M, 1)
|
|
123
|
+
];
|
|
124
|
+
} else {
|
|
125
|
+
const y = ye(u, s), M = f ? Le : ke;
|
|
126
|
+
b = [M(s, y), M(u, y)];
|
|
127
|
+
}
|
|
128
|
+
_(b), o.onRangeChanged(b);
|
|
129
|
+
}, O = () => {
|
|
130
|
+
_(C), w(
|
|
131
|
+
n === a.dateRangePickerCopy.dateRangeThisMonth || n === a.dateRangePickerCopy.dateRangeLastMonth
|
|
132
|
+
), o.onRangeChanged(C);
|
|
133
|
+
}, N = (t, s) => {
|
|
134
|
+
t[1] = t[1] ?? t[0];
|
|
135
|
+
const u = [t[0], t[1] ? ve(t[1]) : t[1]], f = v(u[0], P.MONTH_DAY_YEAR), b = v(u[1], P.MONTH_DAY_YEAR);
|
|
136
|
+
Y(u), S(s), D(`${a.dateRangeEditTitle}: ${f} - ${b}`);
|
|
137
|
+
}, F = (t) => {
|
|
138
|
+
A(t), o.onTimeframeClick?.(t);
|
|
139
|
+
};
|
|
140
|
+
return /* @__PURE__ */ p(oe, { className: "mx-cmn-date-range-selector", m: 4, children: [
|
|
141
|
+
/* @__PURE__ */ p(
|
|
142
|
+
oe,
|
|
143
|
+
{
|
|
144
|
+
sx: {
|
|
145
|
+
[R.breakpoints.down("sm")]: {
|
|
146
|
+
display: r ? "none" : "flex",
|
|
147
|
+
justifyContent: "center"
|
|
148
|
+
},
|
|
149
|
+
[R.breakpoints.up("sm")]: { display: "inline-flex" }
|
|
150
|
+
},
|
|
151
|
+
children: [
|
|
152
|
+
d === "readonly" && /* @__PURE__ */ p(L, { alignItems: "center", direction: "row", gap: 8, children: [
|
|
153
|
+
/* @__PURE__ */ e(x, { name: "calendar_month", size: 24 }),
|
|
154
|
+
/* @__PURE__ */ e(z, { bold: !0, children: v(C[0], P.MONTH_DAY) }),
|
|
155
|
+
/* @__PURE__ */ e(x, { name: "remove" }),
|
|
156
|
+
/* @__PURE__ */ e(z, { bold: !0, children: v(C[1], P.MONTH_DAY_YEAR) })
|
|
157
|
+
] }),
|
|
158
|
+
d !== "readonly" && d !== "timeframebuttons" && d !== "timeframetabs" && /* @__PURE__ */ p(
|
|
159
|
+
Ye,
|
|
160
|
+
{
|
|
161
|
+
color: l,
|
|
162
|
+
sx: {
|
|
163
|
+
"& .MuiButtonGroup-grouped": {
|
|
164
|
+
padding: m ? 0 : 12
|
|
165
|
+
},
|
|
166
|
+
"& .MuiButtonGroup-middleButton": {
|
|
167
|
+
px: 24
|
|
168
|
+
},
|
|
169
|
+
height: 44
|
|
170
|
+
},
|
|
171
|
+
variant: d,
|
|
172
|
+
children: [
|
|
173
|
+
/* @__PURE__ */ e(
|
|
174
|
+
H,
|
|
175
|
+
{
|
|
176
|
+
"aria-disabled": o.shouldDisablePrevious,
|
|
177
|
+
"aria-label": a.dateRangePreviousAria,
|
|
178
|
+
color: o.shouldDisablePrevious ? "secondary" : "primary",
|
|
179
|
+
onClick: () => o.shouldDisablePrevious ? null : B("previous"),
|
|
180
|
+
children: /* @__PURE__ */ e(x, { name: "chevron_left", size: 20 })
|
|
181
|
+
}
|
|
182
|
+
),
|
|
183
|
+
/* @__PURE__ */ e(
|
|
184
|
+
H,
|
|
185
|
+
{
|
|
186
|
+
"aria-disabled": o.shouldDisablePicker,
|
|
187
|
+
color: l,
|
|
188
|
+
onClick: () => o.shouldDisablePicker ? null : T(!0),
|
|
189
|
+
startIcon: /* @__PURE__ */ e(x, { name: "calendar_month", size: 20 }),
|
|
190
|
+
sx: {
|
|
191
|
+
p: m ? 0 : 8
|
|
192
|
+
},
|
|
193
|
+
children: j ? v(c[0], P.MONTH_YEAR) : /* @__PURE__ */ p("span", { children: [
|
|
194
|
+
v(c[0], P.MONTH_DAY_YEAR),
|
|
195
|
+
" -",
|
|
196
|
+
" ",
|
|
197
|
+
v(c[1], P.MONTH_DAY_YEAR)
|
|
198
|
+
] })
|
|
199
|
+
}
|
|
200
|
+
),
|
|
201
|
+
/* @__PURE__ */ e(
|
|
202
|
+
H,
|
|
203
|
+
{
|
|
204
|
+
"aria-disabled": o.shouldDisableNext,
|
|
205
|
+
"aria-label": a.dateRangeNextAria,
|
|
206
|
+
color: o.shouldDisableNext ? "secondary" : "primary",
|
|
207
|
+
onClick: () => o.shouldDisableNext ? null : B("next"),
|
|
208
|
+
children: /* @__PURE__ */ e(x, { name: "chevron_right", size: 20 })
|
|
209
|
+
}
|
|
210
|
+
)
|
|
211
|
+
]
|
|
212
|
+
}
|
|
213
|
+
),
|
|
214
|
+
d === "timeframebuttons" && /* @__PURE__ */ e(
|
|
215
|
+
Oe,
|
|
216
|
+
{
|
|
217
|
+
"aria-label": a.dateRangeEditTitle,
|
|
218
|
+
color: l,
|
|
219
|
+
exclusive: !0,
|
|
220
|
+
orientation: "horizontal",
|
|
221
|
+
value: k,
|
|
222
|
+
children: I.buttons.map((t) => /* @__PURE__ */ e(
|
|
223
|
+
Be,
|
|
224
|
+
{
|
|
225
|
+
"aria-label": t.ariaLabel,
|
|
226
|
+
onClick: () => F(t.value),
|
|
227
|
+
sx: { width: 56 },
|
|
228
|
+
value: t.value,
|
|
229
|
+
children: t.label
|
|
230
|
+
},
|
|
231
|
+
t.label
|
|
232
|
+
))
|
|
233
|
+
}
|
|
234
|
+
),
|
|
235
|
+
d === "timeframetabs" && /* @__PURE__ */ e(
|
|
236
|
+
Ie,
|
|
237
|
+
{
|
|
238
|
+
indicatorColor: "primary",
|
|
239
|
+
onChange: (t, s) => F(s),
|
|
240
|
+
textColor: "primary",
|
|
241
|
+
value: k,
|
|
242
|
+
variant: "fullWidth",
|
|
243
|
+
children: I.tabs.map((t) => /* @__PURE__ */ e(
|
|
244
|
+
we,
|
|
245
|
+
{
|
|
246
|
+
label: /* @__PURE__ */ e(z, { bold: !0, variant: "body1", children: t.label }),
|
|
247
|
+
sx: { minWidth: 80 },
|
|
248
|
+
value: t.value
|
|
249
|
+
},
|
|
250
|
+
t.label
|
|
251
|
+
))
|
|
252
|
+
}
|
|
253
|
+
)
|
|
254
|
+
]
|
|
255
|
+
}
|
|
256
|
+
),
|
|
257
|
+
E && m && /* @__PURE__ */ p(
|
|
258
|
+
Ge,
|
|
259
|
+
{
|
|
260
|
+
ariaLabelClose: a.dateRangeCloseAria,
|
|
261
|
+
isOpen: E,
|
|
262
|
+
onClose: () => T(!1),
|
|
263
|
+
onPrimaryAction: () => {
|
|
264
|
+
O(), T(!1);
|
|
265
|
+
},
|
|
266
|
+
primaryText: a.dateRangeEditApply,
|
|
267
|
+
title: a.dateRangeEditTitle,
|
|
268
|
+
children: [
|
|
269
|
+
g,
|
|
270
|
+
/* @__PURE__ */ e(
|
|
271
|
+
Z,
|
|
272
|
+
{
|
|
273
|
+
copy: a.dateRangePickerCopy,
|
|
274
|
+
dateRange: C,
|
|
275
|
+
onRangeChanged: N,
|
|
276
|
+
selectedShortcut: n,
|
|
277
|
+
sx: { p: 0 }
|
|
278
|
+
}
|
|
279
|
+
)
|
|
280
|
+
]
|
|
281
|
+
}
|
|
282
|
+
),
|
|
283
|
+
E && !m && /* @__PURE__ */ p(
|
|
284
|
+
We,
|
|
285
|
+
{
|
|
286
|
+
copy: { title: a.dateRangeEditTitle },
|
|
287
|
+
isOpen: !0,
|
|
288
|
+
maxWidth: "sm",
|
|
289
|
+
onClose: () => T(!1),
|
|
290
|
+
onPrimaryAction: () => O(),
|
|
291
|
+
primaryText: a.dateRangeEditApply,
|
|
292
|
+
sx: {
|
|
293
|
+
"& .MuiDialogContent-root": {
|
|
294
|
+
padding: 0
|
|
295
|
+
},
|
|
296
|
+
"& .MuiDialog-paper": {
|
|
297
|
+
minWidth: "max-content"
|
|
298
|
+
}
|
|
299
|
+
},
|
|
300
|
+
children: [
|
|
301
|
+
g,
|
|
302
|
+
/* @__PURE__ */ e(
|
|
303
|
+
Z,
|
|
304
|
+
{
|
|
305
|
+
copy: a.dateRangePickerCopy,
|
|
306
|
+
dateRange: C,
|
|
307
|
+
onRangeChanged: N,
|
|
308
|
+
selectedShortcut: n,
|
|
309
|
+
sx: {
|
|
310
|
+
pt: 0,
|
|
311
|
+
"& .MuiPickersLayout-toolbar": {
|
|
312
|
+
gridColumn: "1/4"
|
|
313
|
+
}
|
|
314
|
+
}
|
|
315
|
+
}
|
|
316
|
+
)
|
|
317
|
+
]
|
|
318
|
+
}
|
|
319
|
+
)
|
|
320
|
+
] });
|
|
321
|
+
}, Ue = le(
|
|
322
|
+
({ calendarActions: o, dateRange: l, dateRangeVariant: a }) => {
|
|
323
|
+
const { displayedDateRange: i } = de(), { common: r } = me(), d = {
|
|
324
|
+
dateRangePickerCopy: {
|
|
325
|
+
dateRangeFrom: r.date_range_picker.from,
|
|
326
|
+
dateRangeTo: r.date_range_picker.to,
|
|
327
|
+
dateRangeCustom: r.date_range_picker.custom,
|
|
328
|
+
dateRangeSelectARange: r.date_range_picker.select_range,
|
|
329
|
+
dateRangeThisMonth: r.date_range_picker.this_month,
|
|
330
|
+
dateRangeLastMonth: r.date_range_picker.last_month,
|
|
331
|
+
dateRangeLast30Days: r.date_range_picker.last_30_days,
|
|
332
|
+
dateRangeLast90Days: r.date_range_picker.last_90_days,
|
|
333
|
+
dateRangeYTD: r.date_range_picker.ytd,
|
|
334
|
+
dateRangeLastYear: r.date_range_picker.last_year,
|
|
335
|
+
dateRangeSelect: r.date_range_picker.select
|
|
336
|
+
},
|
|
337
|
+
dateRangeEditApply: r.date_range_picker.edit_apply,
|
|
338
|
+
dateRangeEditTitle: r.date_range_picker.edit_title,
|
|
339
|
+
dateRangeNextAria: r.date_range_picker.next_aria,
|
|
340
|
+
dateRangePreviousAria: r.date_range_picker.previous_aria
|
|
341
|
+
}, R = l ? l.start : i.start, m = l ? l.end : i.end;
|
|
342
|
+
return /* @__PURE__ */ e(
|
|
343
|
+
qe,
|
|
344
|
+
{
|
|
345
|
+
calendarActions: o,
|
|
346
|
+
copy: d,
|
|
347
|
+
range: [R, m],
|
|
348
|
+
shouldShrinkToIcon: !1,
|
|
349
|
+
variant: a
|
|
350
|
+
}
|
|
351
|
+
);
|
|
352
|
+
}
|
|
353
|
+
), Ft = le(
|
|
354
|
+
({
|
|
355
|
+
actions: o,
|
|
356
|
+
allowedAccountTypes: l,
|
|
357
|
+
calendarActions: a,
|
|
358
|
+
children: i,
|
|
359
|
+
className: r = "mx-cmn-widget",
|
|
360
|
+
dateRange: d,
|
|
361
|
+
dateRangeVariant: R,
|
|
362
|
+
hasDivider: m = !1,
|
|
363
|
+
onAccountsFilterClick: D,
|
|
364
|
+
onBackClick: g,
|
|
365
|
+
onMenuClick: c,
|
|
366
|
+
showAccountFilter: _ = !0,
|
|
367
|
+
slotComponent: n,
|
|
368
|
+
sx: S = {},
|
|
369
|
+
title: C = ""
|
|
370
|
+
}) => {
|
|
371
|
+
const [Y, { height: E, width: T }] = J(), [j, { height: w, width: k }] = J(), { onEvent: A } = xe(), {
|
|
372
|
+
actionsFlex: I,
|
|
373
|
+
containerSquareCorners: V,
|
|
374
|
+
headerHeadingLevel: B,
|
|
375
|
+
headerPaddingBottom: O,
|
|
376
|
+
headerPaddingTop: N,
|
|
377
|
+
headerPaddingX: F,
|
|
378
|
+
iconSize: t,
|
|
379
|
+
isCompact: s,
|
|
380
|
+
isDesktop: u,
|
|
381
|
+
isViewportAbove900: f,
|
|
382
|
+
slotSx: b
|
|
383
|
+
} = je(T), { isCopyLoaded: y } = de(), { common: M } = me(), {
|
|
384
|
+
config: { display_widget_headings: ue }
|
|
385
|
+
} = De(), he = () => {
|
|
386
|
+
g && (g(), A(ne.WIDGET_BACK_CLICK));
|
|
387
|
+
};
|
|
388
|
+
if (h.useEffect(() => {
|
|
389
|
+
A(ne.WIDGET_SIZE_CHANGED, {
|
|
390
|
+
height: w,
|
|
391
|
+
width: k
|
|
392
|
+
});
|
|
393
|
+
}, [w, k]), !y)
|
|
394
|
+
return /* @__PURE__ */ e(He, {});
|
|
395
|
+
const pe = () => c && s && !f ? /* @__PURE__ */ e(U, { color: "primary", onClick: c, sx: { p: 10 }, children: /* @__PURE__ */ e(x, { name: "menu_open", size: t, sx: { transform: "rotate(180deg)" } }) }) : g ? /* @__PURE__ */ e(
|
|
396
|
+
U,
|
|
397
|
+
{
|
|
398
|
+
"aria-label": M.back_to_dashboard,
|
|
399
|
+
color: "primary",
|
|
400
|
+
onClick: he,
|
|
401
|
+
sx: { p: 10 },
|
|
402
|
+
children: /* @__PURE__ */ e(_e, { size: 24 })
|
|
403
|
+
}
|
|
404
|
+
) : null, K = a && /* @__PURE__ */ e(L, { alignItems: "center", sx: b, children: /* @__PURE__ */ e(
|
|
405
|
+
Ue,
|
|
406
|
+
{
|
|
407
|
+
calendarActions: a,
|
|
408
|
+
dateRange: d,
|
|
409
|
+
dateRangeVariant: R
|
|
410
|
+
}
|
|
411
|
+
) });
|
|
412
|
+
return /* @__PURE__ */ e(
|
|
413
|
+
Re,
|
|
414
|
+
{
|
|
415
|
+
className: r,
|
|
416
|
+
elevation: 1,
|
|
417
|
+
ref: Y,
|
|
418
|
+
square: V,
|
|
419
|
+
sx: {
|
|
420
|
+
borderBottomLeftRadius: 0,
|
|
421
|
+
borderBottomRightRadius: 0,
|
|
422
|
+
margin: 0,
|
|
423
|
+
overflowY: "auto",
|
|
424
|
+
height: "100%",
|
|
425
|
+
...S
|
|
426
|
+
},
|
|
427
|
+
children: /* @__PURE__ */ p(ge, { children: [
|
|
428
|
+
/* @__PURE__ */ p(
|
|
429
|
+
L,
|
|
430
|
+
{
|
|
431
|
+
alignItems: "center",
|
|
432
|
+
alignSelf: "stretch",
|
|
433
|
+
direction: "row",
|
|
434
|
+
justifyContent: "space-between",
|
|
435
|
+
sx: {
|
|
436
|
+
pb: O,
|
|
437
|
+
pt: N,
|
|
438
|
+
px: F
|
|
439
|
+
},
|
|
440
|
+
children: [
|
|
441
|
+
pe(),
|
|
442
|
+
/* @__PURE__ */ e(L, { alignItems: "flex-start", minWidth: 0, sx: { flex: 1 }, children: ue && /* @__PURE__ */ e(z, { sx: { width: "100%" }, truncate: !0, variant: B, children: C }) }),
|
|
443
|
+
!s && (n || K),
|
|
444
|
+
/* @__PURE__ */ p(
|
|
445
|
+
L,
|
|
446
|
+
{
|
|
447
|
+
alignItems: "center",
|
|
448
|
+
direction: "row",
|
|
449
|
+
justifyContent: "flex-end",
|
|
450
|
+
sx: { flex: I, flexShrink: 0 },
|
|
451
|
+
children: [
|
|
452
|
+
_ && /* @__PURE__ */ e(
|
|
453
|
+
Ce,
|
|
454
|
+
{
|
|
455
|
+
allowedAccountTypes: l,
|
|
456
|
+
isDesktop: u,
|
|
457
|
+
onAccountFilterClick: D
|
|
458
|
+
}
|
|
459
|
+
),
|
|
460
|
+
o?.map((q) => {
|
|
461
|
+
if (h.isValidElement(q))
|
|
462
|
+
return h.cloneElement(q, { isDesktop: u });
|
|
463
|
+
const { iconName: W, onClick: X, label: Q } = q;
|
|
464
|
+
return u ? /* @__PURE__ */ e(
|
|
465
|
+
H,
|
|
466
|
+
{
|
|
467
|
+
onClick: X,
|
|
468
|
+
startIcon: /* @__PURE__ */ e(x, { name: W, size: t }),
|
|
469
|
+
children: Q
|
|
470
|
+
},
|
|
471
|
+
W
|
|
472
|
+
) : /* @__PURE__ */ e(U, { "aria-label": Q, color: "primary", onClick: X, children: /* @__PURE__ */ e(x, { name: W, size: t }) }, W);
|
|
473
|
+
})
|
|
474
|
+
]
|
|
475
|
+
}
|
|
476
|
+
)
|
|
477
|
+
]
|
|
478
|
+
}
|
|
479
|
+
),
|
|
480
|
+
s && (n || K),
|
|
481
|
+
s && m && /* @__PURE__ */ e(be, {}),
|
|
482
|
+
/* @__PURE__ */ e(fe, { ref: j, sx: { p: 0 }, children: /* @__PURE__ */ e(Te, { availableHeight: E, availableWidth: T, children: i }) })
|
|
483
|
+
] })
|
|
484
|
+
}
|
|
485
|
+
);
|
|
486
|
+
}
|
|
487
|
+
);
|
|
488
|
+
export {
|
|
489
|
+
qe as D,
|
|
490
|
+
Ft as W,
|
|
491
|
+
je as u
|
|
492
|
+
};
|
|
493
|
+
//# sourceMappingURL=WidgetContainer-eosXfD5G.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"WidgetContainer-eosXfD5G.mjs","sources":["../src/common/hooks/useWidgetHeaderStyles.ts","../src/common/components/daterangeselector/DateRangeSelector.tsx","../src/common/components/WidgetDateRangeSelector.tsx","../src/common/components/WidgetContainer.tsx"],"sourcesContent":["import useMediaQuery from '@mui/material/useMediaQuery'\n\nimport { useScreenSize } from './useScreenSize'\n\nexport const useWidgetHeaderStyles = (availableWidth?: number) => {\n const { isDesktop, isMobile, isSmallTablet, isTablet } = useScreenSize(availableWidth)\n const isViewportAbove900 = useMediaQuery('(min-width:900px)')\n\n const iconSize = 24\n\n // large variant\n // L & XL breakpoints\n let headerPaddingX = 48\n let headerPaddingTop = 32\n let headerPaddingBottom = 0\n let headerHeadingLevel: 'h1' | 'h2' | 'h3' = 'h1'\n let containerSquareCorners = false\n\n const isCompact = isMobile || isSmallTablet\n\n if (isTablet && !isSmallTablet) {\n // M breakpoint\n headerPaddingX = 24\n headerPaddingTop = 24\n headerHeadingLevel = 'h2'\n } else if (isCompact) {\n // small variant\n // S, XS, XXS breakpoints\n headerPaddingX = 8\n headerPaddingTop = 10\n headerPaddingBottom = 10\n headerHeadingLevel = 'h3'\n\n containerSquareCorners = true\n }\n\n const slotSx = {\n pb: isCompact ? 12 : 0,\n ...(isCompact && {\n px: headerPaddingX,\n '& .mx-cmn-date-range-selector': { m: 0, width: '100%' },\n '& .mx-cmn-date-range-selector > .MuiBox-root': { display: 'flex', justifyContent: 'center' },\n '& .MuiButtonGroup-root': { width: '100%' },\n '& .MuiButtonGroup-middleButton': { flex: 1 },\n '& .MuiToggleButtonGroup-root': { width: '100%', justifyContent: 'center' },\n }),\n }\n\n return {\n actionsFlex: isCompact ? 0 : 1,\n containerSquareCorners,\n headerHeadingLevel,\n headerPaddingBottom,\n headerPaddingTop,\n headerPaddingX,\n iconSize,\n isCompact,\n isDesktop,\n isViewportAbove900,\n slotSx,\n }\n}\n","import React from 'react'\nimport { addMonths } from 'date-fns/addMonths'\nimport { addDays } from 'date-fns/addDays'\nimport { addYears } from 'date-fns/addYears'\nimport { differenceInCalendarDays } from 'date-fns/differenceInCalendarDays'\nimport { differenceInCalendarMonths } from 'date-fns/differenceInCalendarMonths'\nimport { endOfDay } from 'date-fns/endOfDay'\nimport { endOfMonth } from 'date-fns/endOfMonth'\nimport { endOfToday } from 'date-fns/endOfToday'\nimport { endOfYear } from 'date-fns/endOfYear'\nimport { startOfMonth } from 'date-fns/startOfMonth'\nimport { startOfToday } from 'date-fns/startOfToday'\nimport { startOfYear } from 'date-fns/startOfYear'\nimport { subMonths } from 'date-fns/subMonths'\nimport { subDays } from 'date-fns/subDays'\nimport { subYears } from 'date-fns/subYears'\n\nimport Box from '@mui/material/Box'\nimport Button from '@mui/material/Button'\nimport ButtonGroup from '@mui/material/ButtonGroup'\nimport Stack from '@mui/material/Stack'\nimport Tab from '@mui/material/Tab'\nimport Tabs from '@mui/material/Tabs'\nimport ToggleButton from '@mui/material/ToggleButton'\nimport ToggleButtonGroup from '@mui/material/ToggleButtonGroup'\nimport { useTheme } from '@mui/material/styles'\n\nimport { DateRange } from '@mui/x-date-pickers-pro'\n\nimport { DateRangePicker, DateRangePickerCopy, Icon, Text } from '@mxenabled/mxui'\n\nimport { DATE_FORMATS_INTL, formatDate } from '../../../core/constants'\nimport { useScreenSize } from '../../hooks'\nimport { useAriaLive } from '../../hooks/useAriaLive'\nimport Dialog from '../dialog/Dialog'\nimport Drawer from '../drawer/Drawer'\n\nexport type DateRangeSelectorCopy = {\n dateRangePickerCopy: DateRangePickerCopy\n dateRangeEditApply: string\n dateRangeEditTitle: string\n dateRangeNextAria: string\n dateRangePreviousAria: string\n dateRangeCloseAria: string\n}\n\nexport type CalendarActions = {\n shouldDisableNext?: boolean\n shouldDisablePrevious?: boolean\n shouldDisablePicker?: boolean\n onRangeChanged: (dateRange: DateRange<Date>) => void\n /**\n * Fires only when the user actively selects a timeframe button/tab (3M/6M/9M/1Y).\n * Unlike onRangeChanged, this does NOT fire on mount, so it's safe for click analytics.\n */\n onTimeframeClick?: (timeframe: number) => void\n}\n\nexport interface DateRangeSelectorProps {\n calendarActions: CalendarActions\n color?: 'primary' | 'secondary'\n copy: DateRangeSelectorCopy\n range?: DateRange<Date>\n shouldShrinkToIcon?: boolean\n variant?: 'outlined' | 'text' | 'readonly' | 'timeframebuttons' | 'timeframetabs'\n}\n\nexport type Timeframe = {\n ariaLabel?: string\n label: string\n value: number\n}\n\nexport const DEFAULT_TIMEFRAME = 6\nconst SUPPORTED_TIMEFRAMES = [3, 6, 9, 12]\n\n/**\n * Derive the timeframe button/tab that matches a caller-supplied range.\n *\n * The timeframe variants own a `timeframe` state that drives the mount effect.\n * Seeding it from the incoming range keeps the control in sync with the\n * caller's stored selection, so remounting doesn't reset it to the default\n * and clobber that selection via onRangeChanged. (MEW-3911)\n *\n * Returns DEFAULT_TIMEFRAME when the range doesn't correspond to a button\n * (e.g. NetWorth, which renders the timeframe variants without passing a\n * range and relies on the mount emit to seed its own 6M default).\n */\nexport const getTimeframeFromRange = (range: DateRange<Date>): number => {\n const [start, end] = range\n if (!start || !end) return DEFAULT_TIMEFRAME\n\n const months = differenceInCalendarMonths(end, start)\n // onRangeChanged consumers add a second to the start date, which drops the\n // calendar-month difference by one, so accept both N and N-1.\n return SUPPORTED_TIMEFRAMES.find((tf) => months === tf || months === tf - 1) ?? DEFAULT_TIMEFRAME\n}\n\nconst DateRangeSelector: React.FC<DateRangeSelectorProps> = ({\n calendarActions,\n color = 'primary',\n copy,\n range = [startOfMonth(startOfToday()), endOfMonth(endOfToday())],\n shouldShrinkToIcon = true,\n variant = 'outlined',\n}) => {\n const theme = useTheme()\n const { isMobile } = useScreenSize()\n const { announce, ariaLive } = useAriaLive()\n\n const [dateRange, setDateRange] = React.useState<DateRange<Date>>(range)\n const [shortcut, setShortcut] = React.useState(copy.dateRangePickerCopy.dateRangeThisMonth)\n const [pickerDateRange, setPickerDateRange] = React.useState(dateRange)\n const [isPickerOpen, setIsPickerOpen] = React.useState(false)\n const [isMonthFormat, setIsMonthFormat] = React.useState(true)\n const [timeframe, setTimeframe] = React.useState(() => getTimeframeFromRange(range))\n\n // TODO: put labels in mrs content and use as copy\n const timeframes = {\n buttons: [\n { ariaLabel: '3 Months', label: '3M', value: 3 },\n { ariaLabel: '6 Months', label: '6M', value: 6 },\n { ariaLabel: '9 Months', label: '9M', value: 9 },\n { ariaLabel: '1 Year', label: '1Y', value: 12 },\n ],\n tabs: [\n { label: '3 Months', value: 3 },\n { label: '6 Months', value: 6 },\n { label: '9 Months', value: 9 },\n { label: '1 Year', value: 12 },\n ],\n }\n\n // Depends on the range timestamps rather than the array identity: callers such\n // as WidgetDateRangeSelector pass an inline `[start, end]` literal, so keying\n // on identity re-runs this on every parent render. (MEW-3910, MEW-3911)\n React.useEffect(() => {\n setDateRange(range)\n setPickerDateRange(range)\n // Keep the highlighted timeframe in sync when the range changes without a\n // remount, otherwise the control keeps highlighting the previous timeframe\n // and clicking it is a no-op (React bails out of identical state). (MEW-3911)\n setTimeframe(getTimeframeFromRange(range))\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [range[0]?.getTime(), range[1]?.getTime()])\n\n // dates for timeframe buttons\n // using today's date as the end date, looks back 3, 6, 9, or 12 months\n React.useEffect(() => {\n if (variant === 'timeframebuttons' || variant === 'timeframetabs') {\n calendarActions.onRangeChanged(getTimeFrameDates())\n }\n }, [timeframe])\n\n const getTimeFrameDates = () => {\n const timeframeEndDate = endOfMonth(endOfToday()) as Date\n const timeframeBeginDate = endOfMonth(subMonths(timeframeEndDate, timeframe))\n return [timeframeBeginDate, timeframeEndDate] as DateRange<Date>\n }\n\n const handlePrevNextClick = (direction: 'previous' | 'next') => {\n const [beginDate, endDate] = dateRange as [Date, Date]\n const isPrev = direction === 'previous'\n\n let newRange: DateRange<Date>\n\n // Month-based shortcuts\n if (\n shortcut === copy.dateRangePickerCopy.dateRangeThisMonth ||\n shortcut === copy.dateRangePickerCopy.dateRangeLastMonth\n ) {\n newRange = [\n isPrev ? subMonths(beginDate, 1) : addMonths(beginDate, 1),\n endOfMonth(isPrev ? subMonths(endDate, 1) : addMonths(endDate, 1)),\n ]\n }\n // Year-based shortcuts\n else if (\n shortcut === copy.dateRangePickerCopy.dateRangeYTD ||\n shortcut === copy.dateRangePickerCopy.dateRangeLastYear\n ) {\n const startYear = startOfYear(beginDate)\n const endYear = endOfYear(beginDate)\n newRange = [\n isPrev ? subYears(startYear, 1) : addYears(startYear, 1),\n isPrev ? subYears(endYear, 1) : addYears(endYear, 1),\n ]\n }\n // Custom date range - shift by the current range duration\n else {\n const dayOffset = differenceInCalendarDays(endDate, beginDate)\n const dateModifier = isPrev ? subDays : addDays\n newRange = [dateModifier(beginDate, dayOffset), dateModifier(endDate, dayOffset)]\n }\n\n setDateRange(newRange)\n calendarActions.onRangeChanged(newRange)\n }\n\n const handleRangeChanged = () => {\n setDateRange(pickerDateRange)\n setIsMonthFormat(\n shortcut === copy.dateRangePickerCopy.dateRangeThisMonth ||\n shortcut === copy.dateRangePickerCopy.dateRangeLastMonth,\n )\n calendarActions.onRangeChanged(pickerDateRange)\n }\n\n const handleDataRangePickerChange = (range: DateRange<Date>, shortcut: string) => {\n range[1] = range[1] ?? range[0]\n\n const adjustedRange: DateRange<Date> = [range[0], range[1] ? endOfDay(range[1]) : range[1]]\n const startFormatted = formatDate(adjustedRange[0] as Date, DATE_FORMATS_INTL.MONTH_DAY_YEAR)\n const endFormatted = formatDate(adjustedRange[1] as Date, DATE_FORMATS_INTL.MONTH_DAY_YEAR)\n\n setPickerDateRange(adjustedRange)\n setShortcut(shortcut)\n announce(`${copy.dateRangeEditTitle}: ${startFormatted} - ${endFormatted}`)\n }\n\n const handleTimeframeChanged = (timeframe: number) => {\n setTimeframe(timeframe)\n calendarActions.onTimeframeClick?.(timeframe)\n }\n\n return (\n <Box className=\"mx-cmn-date-range-selector\" m={4}>\n <Box\n sx={{\n [theme.breakpoints.down('sm')]: {\n display: shouldShrinkToIcon ? 'none' : 'flex',\n justifyContent: 'center',\n },\n [theme.breakpoints.up('sm')]: { display: 'inline-flex' },\n }}\n >\n {variant === 'readonly' && (\n <Stack alignItems=\"center\" direction=\"row\" gap={8}>\n <Icon name=\"calendar_month\" size={24} />\n <Text bold={true}>\n {formatDate(pickerDateRange[0] as Date, DATE_FORMATS_INTL.MONTH_DAY)}\n </Text>\n <Icon name=\"remove\" />\n <Text bold={true}>\n {formatDate(pickerDateRange[1] as Date, DATE_FORMATS_INTL.MONTH_DAY_YEAR)}\n </Text>\n </Stack>\n )}\n\n {variant !== 'readonly' &&\n variant !== 'timeframebuttons' &&\n variant !== 'timeframetabs' && (\n <ButtonGroup\n color={color}\n sx={{\n '& .MuiButtonGroup-grouped': {\n padding: isMobile ? 0 : 12,\n },\n '& .MuiButtonGroup-middleButton': {\n px: 24,\n },\n height: 44,\n }}\n variant={variant}\n >\n <Button\n aria-disabled={calendarActions.shouldDisablePrevious}\n aria-label={copy.dateRangePreviousAria}\n color={calendarActions.shouldDisablePrevious ? 'secondary' : 'primary'}\n onClick={() =>\n calendarActions.shouldDisablePrevious ? null : handlePrevNextClick('previous')\n }\n >\n <Icon name=\"chevron_left\" size={20} />\n </Button>\n <Button\n aria-disabled={calendarActions.shouldDisablePicker}\n color={color}\n onClick={() => (calendarActions.shouldDisablePicker ? null : setIsPickerOpen(true))}\n startIcon={<Icon name=\"calendar_month\" size={20} />}\n sx={{\n p: isMobile ? 0 : 8,\n }}\n >\n {isMonthFormat ? (\n formatDate(dateRange[0] as Date, DATE_FORMATS_INTL.MONTH_YEAR)\n ) : (\n <span>\n {formatDate(dateRange[0] as Date, DATE_FORMATS_INTL.MONTH_DAY_YEAR)} -{' '}\n {formatDate(dateRange[1] as Date, DATE_FORMATS_INTL.MONTH_DAY_YEAR)}\n </span>\n )}\n </Button>\n <Button\n aria-disabled={calendarActions.shouldDisableNext}\n aria-label={copy.dateRangeNextAria}\n color={calendarActions.shouldDisableNext ? 'secondary' : 'primary'}\n onClick={() =>\n calendarActions.shouldDisableNext ? null : handlePrevNextClick('next')\n }\n >\n <Icon name=\"chevron_right\" size={20} />\n </Button>\n </ButtonGroup>\n )}\n\n {variant === 'timeframebuttons' && (\n <ToggleButtonGroup\n aria-label={copy.dateRangeEditTitle}\n color={color}\n exclusive={true}\n orientation=\"horizontal\"\n value={timeframe}\n >\n {timeframes.buttons.map((timeframe: Timeframe) => (\n <ToggleButton\n aria-label={timeframe.ariaLabel}\n key={timeframe.label}\n onClick={() => handleTimeframeChanged(timeframe.value)}\n sx={{ width: 56 }}\n value={timeframe.value}\n >\n {timeframe.label}\n </ToggleButton>\n ))}\n </ToggleButtonGroup>\n )}\n\n {variant === 'timeframetabs' && (\n <Tabs\n indicatorColor=\"primary\"\n onChange={(_, newValue) => handleTimeframeChanged(newValue)}\n textColor=\"primary\"\n value={timeframe}\n variant=\"fullWidth\"\n >\n {timeframes.tabs.map((timeframe: Timeframe) => (\n <Tab\n key={timeframe.label}\n label={\n <Text bold={true} variant=\"body1\">\n {timeframe.label}\n </Text>\n }\n sx={{ minWidth: 80 }}\n value={timeframe.value}\n />\n ))}\n </Tabs>\n )}\n </Box>\n\n {isPickerOpen && isMobile && (\n <Drawer\n ariaLabelClose={copy.dateRangeCloseAria}\n isOpen={isPickerOpen}\n onClose={() => setIsPickerOpen(false)}\n onPrimaryAction={() => {\n handleRangeChanged()\n setIsPickerOpen(false)\n }}\n primaryText={copy.dateRangeEditApply}\n title={copy.dateRangeEditTitle}\n >\n {ariaLive}\n <DateRangePicker\n copy={copy.dateRangePickerCopy}\n dateRange={pickerDateRange}\n onRangeChanged={handleDataRangePickerChange}\n selectedShortcut={shortcut}\n sx={{ p: 0 }}\n />\n </Drawer>\n )}\n\n {isPickerOpen && !isMobile && (\n <Dialog\n copy={{ title: copy.dateRangeEditTitle }}\n isOpen={true}\n maxWidth=\"sm\"\n onClose={() => setIsPickerOpen(false)}\n onPrimaryAction={() => handleRangeChanged()}\n primaryText={copy.dateRangeEditApply}\n sx={{\n '& .MuiDialogContent-root': {\n padding: 0,\n },\n '& .MuiDialog-paper': {\n minWidth: 'max-content',\n },\n }}\n >\n {ariaLive}\n <DateRangePicker\n copy={copy.dateRangePickerCopy}\n dateRange={pickerDateRange}\n onRangeChanged={handleDataRangePickerChange}\n selectedShortcut={shortcut}\n sx={{\n pt: 0,\n '& .MuiPickersLayout-toolbar': {\n gridColumn: '1/4',\n },\n }}\n />\n </Dialog>\n )}\n </Box>\n )\n}\n\nexport default DateRangeSelector\n","import React from 'react'\nimport { observer } from 'mobx-react-lite'\n\nimport { useGlobalCopyStore, useGlobalUiStore } from '../context'\n\nimport { DateRangeSelector } from './daterangeselector'\nimport { CalendarActions, DateRangeSelectorCopy } from './daterangeselector/DateRangeSelector'\n\ninterface WidgetDateRangeSelectorProps {\n calendarActions: CalendarActions\n dateRange?: { start: Date; end: Date }\n dateRangeVariant?: 'outlined' | 'text' | 'readonly' | 'timeframebuttons' | 'timeframetabs'\n}\n\nexport const WidgetDateRangeSelector: React.FC<WidgetDateRangeSelectorProps> = observer(\n ({ calendarActions, dateRange, dateRangeVariant }) => {\n const { displayedDateRange } = useGlobalUiStore()\n const { common: commonCopy } = useGlobalCopyStore()\n\n const dateRangeSelectorCopy = {\n dateRangePickerCopy: {\n dateRangeFrom: commonCopy.date_range_picker.from,\n dateRangeTo: commonCopy.date_range_picker.to,\n dateRangeCustom: commonCopy.date_range_picker.custom,\n dateRangeSelectARange: commonCopy.date_range_picker.select_range,\n dateRangeThisMonth: commonCopy.date_range_picker.this_month,\n dateRangeLastMonth: commonCopy.date_range_picker.last_month,\n dateRangeLast30Days: commonCopy.date_range_picker.last_30_days,\n dateRangeLast90Days: commonCopy.date_range_picker.last_90_days,\n dateRangeYTD: commonCopy.date_range_picker.ytd,\n dateRangeLastYear: commonCopy.date_range_picker.last_year,\n dateRangeSelect: commonCopy.date_range_picker.select,\n },\n dateRangeEditApply: commonCopy.date_range_picker.edit_apply,\n dateRangeEditTitle: commonCopy.date_range_picker.edit_title,\n dateRangeNextAria: commonCopy.date_range_picker.next_aria,\n dateRangePreviousAria: commonCopy.date_range_picker.previous_aria,\n } as DateRangeSelectorCopy\n\n const startDate = dateRange ? dateRange.start : displayedDateRange.start\n const endDate = dateRange ? dateRange.end : displayedDateRange.end\n\n return (\n <DateRangeSelector\n calendarActions={calendarActions}\n copy={dateRangeSelectorCopy}\n range={[startDate, endDate]}\n shouldShrinkToIcon={false}\n variant={dateRangeVariant}\n />\n )\n },\n)\n","import React, { PropsWithChildren } from 'react'\nimport { observer } from 'mobx-react-lite'\n\nimport Button from '@mui/material/Button'\nimport Card from '@mui/material/Card'\nimport CardContent from '@mui/material/CardContent'\nimport Divider from '@mui/material/Divider'\nimport IconButton from '@mui/material/IconButton'\nimport Paper from '@mui/material/Paper'\nimport Stack from '@mui/material/Stack'\nimport type { SxProps } from '@mui/material/styles'\n\nimport { ChevronLeft } from '@mxenabled/mx-icons'\nimport { Icon, Text } from '@mxenabled/mxui'\n\nimport { ANALYTICS_EVENTS, useEvent } from '../../common'\nimport { AccountType } from '../../core'\nimport {\n useAppConfig,\n useGlobalCopyStore,\n useGlobalUiStore,\n WidgetContainerProvider,\n} from '../context'\nimport { useWidgetHeaderStyles } from '../hooks'\nimport { useDimensions } from '../hooks/useDimensions'\n\nimport { CalendarActions } from './daterangeselector/DateRangeSelector'\nimport { GlobalAccountFilter } from './GlobalAccountFilter'\nimport { WidgetDateRangeSelector } from './WidgetDateRangeSelector'\nimport Loader from './Loader'\n\ntype Action = {\n label: string\n iconName: string\n onClick: () => void\n}\n\ninterface WidgetContainerProps {\n allowedAccountTypes?: AccountType[] | undefined\n actions?: (Action | React.JSX.Element)[]\n calendarActions?: CalendarActions\n className?: string\n dateRange?: { start: Date; end: Date }\n dateRangeVariant?: 'outlined' | 'text' | 'readonly' | 'timeframebuttons' | 'timeframetabs'\n hasDivider?: boolean\n onBackClick?: () => void\n onMenuClick?: () => void\n onAccountsFilterClick?: () => void\n showAccountFilter?: boolean\n slotComponent?: React.ReactElement\n sx?: SxProps\n title?: string\n}\n\nexport const WidgetContainer: React.FC<PropsWithChildren<WidgetContainerProps>> = observer(\n ({\n actions,\n allowedAccountTypes,\n calendarActions,\n children,\n className = 'mx-cmn-widget',\n dateRange,\n dateRangeVariant,\n hasDivider = false,\n onAccountsFilterClick,\n onBackClick,\n onMenuClick,\n showAccountFilter = true,\n slotComponent,\n sx = {},\n title = '',\n }) => {\n const [containerRef, { height, width }] = useDimensions()\n const [contentRef, { height: contentHeight, width: contentWidth }] = useDimensions()\n const { onEvent } = useEvent()\n\n const {\n actionsFlex,\n containerSquareCorners,\n headerHeadingLevel,\n headerPaddingBottom,\n headerPaddingTop,\n headerPaddingX,\n iconSize,\n isCompact,\n isDesktop,\n isViewportAbove900,\n slotSx,\n } = useWidgetHeaderStyles(width)\n const { isCopyLoaded } = useGlobalUiStore()\n const { common: commonCopy } = useGlobalCopyStore()\n const {\n config: { display_widget_headings: showTitle },\n } = useAppConfig()\n\n const handleBackClick = () => {\n if (onBackClick) {\n onBackClick()\n onEvent(ANALYTICS_EVENTS.WIDGET_BACK_CLICK)\n }\n }\n\n React.useEffect(() => {\n onEvent(ANALYTICS_EVENTS.WIDGET_SIZE_CHANGED, {\n height: contentHeight,\n width: contentWidth,\n })\n }, [contentHeight, contentWidth])\n\n if (!isCopyLoaded) {\n return <Loader />\n }\n\n const getNavButton = () => {\n if (onMenuClick && isCompact && !isViewportAbove900) {\n return (\n <IconButton color=\"primary\" onClick={onMenuClick} sx={{ p: 10 }}>\n <Icon name=\"menu_open\" size={iconSize} sx={{ transform: 'rotate(180deg)' }} />\n </IconButton>\n )\n }\n\n if (onBackClick) {\n return (\n <IconButton\n aria-label={commonCopy.back_to_dashboard}\n color=\"primary\"\n onClick={handleBackClick}\n sx={{ p: 10 }}\n >\n <ChevronLeft size={24} />\n </IconButton>\n )\n }\n\n return null\n }\n\n const defaultSlotComponent = calendarActions && (\n <Stack alignItems=\"center\" sx={slotSx}>\n <WidgetDateRangeSelector\n calendarActions={calendarActions}\n dateRange={dateRange}\n dateRangeVariant={dateRangeVariant}\n />\n </Stack>\n )\n\n return (\n <Paper\n className={className}\n elevation={1}\n ref={containerRef}\n square={containerSquareCorners}\n sx={{\n borderBottomLeftRadius: 0,\n borderBottomRightRadius: 0,\n margin: 0,\n overflowY: 'auto',\n height: '100%',\n ...sx,\n }}\n >\n <Card>\n <Stack\n alignItems=\"center\"\n alignSelf=\"stretch\"\n direction=\"row\"\n justifyContent=\"space-between\"\n sx={{\n pb: headerPaddingBottom,\n pt: headerPaddingTop,\n px: headerPaddingX,\n }}\n >\n {getNavButton()}\n <Stack alignItems=\"flex-start\" minWidth={0} sx={{ flex: 1 }}>\n {showTitle && (\n <Text sx={{ width: '100%' }} truncate={true} variant={headerHeadingLevel}>\n {title}\n </Text>\n )}\n </Stack>\n {!isCompact && (slotComponent ? slotComponent : defaultSlotComponent)}\n <Stack\n alignItems=\"center\"\n direction=\"row\"\n justifyContent=\"flex-end\"\n sx={{ flex: actionsFlex, flexShrink: 0 }}\n >\n {showAccountFilter && (\n <GlobalAccountFilter\n allowedAccountTypes={allowedAccountTypes}\n isDesktop={isDesktop}\n onAccountFilterClick={onAccountsFilterClick}\n />\n )}\n {actions?.map((action) => {\n if (React.isValidElement(action))\n return React.cloneElement(action, { isDesktop } as Partial<unknown>)\n const { iconName, onClick, label } = action as Action\n return isDesktop ? (\n <Button\n key={iconName}\n onClick={onClick}\n startIcon={<Icon name={iconName} size={iconSize} />}\n >\n {label}\n </Button>\n ) : (\n <IconButton aria-label={label} color=\"primary\" key={iconName} onClick={onClick}>\n <Icon name={iconName} size={iconSize} />\n </IconButton>\n )\n })}\n </Stack>\n </Stack>\n {isCompact && (slotComponent ? slotComponent : defaultSlotComponent)}\n {isCompact && hasDivider && <Divider />}\n <CardContent ref={contentRef} sx={{ p: 0 }}>\n <WidgetContainerProvider availableHeight={height} availableWidth={width}>\n {children}\n </WidgetContainerProvider>\n </CardContent>\n </Card>\n </Paper>\n )\n },\n)\n"],"names":["useWidgetHeaderStyles","availableWidth","isDesktop","isMobile","isSmallTablet","isTablet","useScreenSize","isViewportAbove900","useMediaQuery","iconSize","headerPaddingX","headerPaddingTop","headerPaddingBottom","headerHeadingLevel","containerSquareCorners","isCompact","slotSx","DEFAULT_TIMEFRAME","SUPPORTED_TIMEFRAMES","getTimeframeFromRange","range","start","end","months","differenceInCalendarMonths","tf","DateRangeSelector","calendarActions","color","copy","startOfMonth","startOfToday","endOfMonth","endOfToday","shouldShrinkToIcon","variant","theme","useTheme","announce","ariaLive","useAriaLive","dateRange","setDateRange","React","shortcut","setShortcut","pickerDateRange","setPickerDateRange","isPickerOpen","setIsPickerOpen","isMonthFormat","setIsMonthFormat","timeframe","setTimeframe","timeframes","getTimeFrameDates","timeframeEndDate","subMonths","handlePrevNextClick","direction","beginDate","endDate","isPrev","newRange","addMonths","startYear","startOfYear","endYear","endOfYear","subYears","addYears","dayOffset","differenceInCalendarDays","dateModifier","subDays","addDays","handleRangeChanged","handleDataRangePickerChange","adjustedRange","endOfDay","startFormatted","formatDate","DATE_FORMATS_INTL","endFormatted","handleTimeframeChanged","jsxs","Box","Stack","jsx","Icon","Text","ButtonGroup","Button","ToggleButtonGroup","ToggleButton","Tabs","_","newValue","Tab","Drawer","DateRangePicker","Dialog","WidgetDateRangeSelector","observer","dateRangeVariant","displayedDateRange","useGlobalUiStore","commonCopy","useGlobalCopyStore","dateRangeSelectorCopy","startDate","WidgetContainer","actions","allowedAccountTypes","children","className","hasDivider","onAccountsFilterClick","onBackClick","onMenuClick","showAccountFilter","slotComponent","sx","title","containerRef","height","width","useDimensions","contentRef","contentHeight","contentWidth","onEvent","useEvent","actionsFlex","isCopyLoaded","showTitle","useAppConfig","handleBackClick","ANALYTICS_EVENTS","Loader","getNavButton","IconButton","ChevronLeft","defaultSlotComponent","Paper","Card","GlobalAccountFilter","action","iconName","onClick","label","Divider","CardContent","WidgetContainerProvider"],"mappings":"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"}
|
|
@@ -20,7 +20,7 @@ import { C as l1 } from "../ConnectionsDrawer-CZU9ku-k.mjs";
|
|
|
20
20
|
import { u as Y } from "../useScreenSize-mWpmnh5w.mjs";
|
|
21
21
|
import { u as T } from "../useWidgetLoadTimer-B0tB-yzL.mjs";
|
|
22
22
|
import { L as B } from "../Loader-CxeBwuPG.mjs";
|
|
23
|
-
import { W as n1 } from "../WidgetContainer-
|
|
23
|
+
import { W as n1 } from "../WidgetContainer-eosXfD5G.mjs";
|
|
24
24
|
import { C as q } from "../ConnectDrawer-CW4LA3H3.mjs";
|
|
25
25
|
import i1 from "@mui/material/ListItem";
|
|
26
26
|
import { c as W } from "../Account-DR7Plrqy.mjs";
|
package/dist/budgets/index.es.js
CHANGED
|
@@ -47,7 +47,7 @@ import { subDays as rt } from "date-fns/subDays";
|
|
|
47
47
|
import st from "@mui/material/IconButton";
|
|
48
48
|
import { M as it } from "../ManageIncome-Br11zvAT.mjs";
|
|
49
49
|
import { u as je } from "../useWidgetLoadTimer-B0tB-yzL.mjs";
|
|
50
|
-
import { W as ct } from "../WidgetContainer-
|
|
50
|
+
import { W as ct } from "../WidgetContainer-eosXfD5G.mjs";
|
|
51
51
|
import { g as lt, a as dt } from "../BudgetUtil-Bg2AQJpQ.mjs";
|
|
52
52
|
import { M as ut } from "../MiniWidgetContainer-Bmv_WeUd.mjs";
|
|
53
53
|
import { b as mt } from "../CurrencyDialog-DumQCTPO.mjs";
|
|
@@ -39,7 +39,7 @@ import { D as We } from "../Drawer-DsnW2o0v.mjs";
|
|
|
39
39
|
import { subDays as Me } from "date-fns/subDays";
|
|
40
40
|
import { startOfToday as le } from "date-fns/startOfToday";
|
|
41
41
|
import { endOfToday as mt } from "date-fns/endOfToday";
|
|
42
|
-
import { W as pt } from "../WidgetContainer-
|
|
42
|
+
import { W as pt } from "../WidgetContainer-eosXfD5G.mjs";
|
|
43
43
|
import { c as V } from "../Account-DR7Plrqy.mjs";
|
|
44
44
|
import { A as Se } from "../Analytics-D-jdcL72.mjs";
|
|
45
45
|
import { formatISO as ut } from "date-fns/formatISO";
|
|
@@ -33,5 +33,19 @@ export type Timeframe = {
|
|
|
33
33
|
label: string;
|
|
34
34
|
value: number;
|
|
35
35
|
};
|
|
36
|
+
export declare const DEFAULT_TIMEFRAME = 6;
|
|
37
|
+
/**
|
|
38
|
+
* Derive the timeframe button/tab that matches a caller-supplied range.
|
|
39
|
+
*
|
|
40
|
+
* The timeframe variants own a `timeframe` state that drives the mount effect.
|
|
41
|
+
* Seeding it from the incoming range keeps the control in sync with the
|
|
42
|
+
* caller's stored selection, so remounting doesn't reset it to the default
|
|
43
|
+
* and clobber that selection via onRangeChanged. (MEW-3911)
|
|
44
|
+
*
|
|
45
|
+
* Returns DEFAULT_TIMEFRAME when the range doesn't correspond to a button
|
|
46
|
+
* (e.g. NetWorth, which renders the timeframe variants without passing a
|
|
47
|
+
* range and relies on the mount emit to seed its own 6M default).
|
|
48
|
+
*/
|
|
49
|
+
export declare const getTimeframeFromRange: (range: DateRange<Date>) => number;
|
|
36
50
|
declare const DateRangeSelector: React.FC<DateRangeSelectorProps>;
|
|
37
51
|
export default DateRangeSelector;
|
package/dist/common/index.es.js
CHANGED
|
@@ -4,7 +4,7 @@ import { f as j, b as V, a as K, c as Z, g as J, d as X } from "../NumberFormatt
|
|
|
4
4
|
import { C as rr, a as er, b as or } from "../CurrencyDialog-DumQCTPO.mjs";
|
|
5
5
|
import { C as ar } from "../CurrencyInput-DaGEQaLW.mjs";
|
|
6
6
|
import { D as nr, S as ir } from "../Select-CSpkK5cR.mjs";
|
|
7
|
-
import { D as lr, W as mr, u as dr } from "../WidgetContainer-
|
|
7
|
+
import { D as lr, W as mr, u as dr } from "../WidgetContainer-eosXfD5G.mjs";
|
|
8
8
|
import { D as fr } from "../Dialog-Bvd2n8hz.mjs";
|
|
9
9
|
import { D as yr } from "../Donut-SzzfZDHF.mjs";
|
|
10
10
|
import { D as xr } from "../Drawer-DsnW2o0v.mjs";
|