@mx-cartographer/experiences 9.1.4-alpha.al5 → 9.1.4-alpha.al6
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/dist/common/index.es.js +192 -168
- package/dist/common/index.es.js.map +1 -1
- package/package.json +1 -1
package/dist/common/index.es.js
CHANGED
|
@@ -1,109 +1,109 @@
|
|
|
1
|
-
import { l as
|
|
1
|
+
import { l as Q } from "../UserStore-B__9hQOS.mjs";
|
|
2
2
|
import { b as K, a as Z } from "../Localization-DnoVyBNK.mjs";
|
|
3
3
|
import { f as X, b as rr, a as er, c as tr, g as or, d as ar } from "../NumberFormatting--XMeeBfr.mjs";
|
|
4
|
-
import { C as nr, a as ir, b as
|
|
4
|
+
import { C as nr, a as ir, b as lr } from "../CurrencyDialog-DumQCTPO.mjs";
|
|
5
5
|
import { C as cr } from "../CurrencyInput-CABYmqBh.mjs";
|
|
6
6
|
import { D as pr, S as mr } from "../Select-CSpkK5cR.mjs";
|
|
7
|
-
import { D as
|
|
8
|
-
import { D as
|
|
7
|
+
import { D as Er, W as fr, u as yr } from "../WidgetContainer-5O6N88mr.mjs";
|
|
8
|
+
import { D as Sr } from "../Dialog-Bvd2n8hz.mjs";
|
|
9
9
|
import { D as Cr } from "../Donut-SzzfZDHF.mjs";
|
|
10
|
-
import { D as
|
|
10
|
+
import { D as _r } from "../Drawer-DsnW2o0v.mjs";
|
|
11
11
|
import { E as Ur } from "../ErrorBoundary-C7BlHx04.mjs";
|
|
12
|
-
import { jsxs as
|
|
13
|
-
import { Stack as
|
|
12
|
+
import { jsxs as y, jsx as n } from "react/jsx-runtime";
|
|
13
|
+
import { Stack as v, Typography as _, Button as c, alpha as k, darken as h, lighten as S } from "@mui/material";
|
|
14
14
|
import { e as U } from "../hooks-DWOrMnfZ.mjs";
|
|
15
|
-
import { G as
|
|
15
|
+
import { G as wr, m as Dr, n as Or, W as Tr, c as Pr, i as Ar, o as Ir, p as Mr, q as Nr, l as Rr, r as Lr, s as Br, f as Wr, t as Fr, u as qr, a as Gr, k as jr, v as Yr, w as $r, x as Hr, b as zr, y as Qr, z as Vr, A as Kr, h as Zr, B as Jr, g as Xr, C as re, D as ee, E as te } from "../hooks-DWOrMnfZ.mjs";
|
|
16
16
|
import { I as ae } from "../IconBacking-DgT8DCeh.mjs";
|
|
17
17
|
import { I as ne } from "../InformationTooltip-4su8bn1e.mjs";
|
|
18
|
-
import { L as
|
|
18
|
+
import { L as le } from "../Loader-CxeBwuPG.mjs";
|
|
19
19
|
import { M as ce } from "../MicroWidgetContainer-IUZQlml1.mjs";
|
|
20
20
|
import { M as pe } from "../MiniWidgetContainer-CIswJui8.mjs";
|
|
21
21
|
import { css as b } from "@mxenabled/cssinjs";
|
|
22
|
-
import { D, a as
|
|
23
|
-
import { S as
|
|
24
|
-
import { R as
|
|
25
|
-
import { S as
|
|
22
|
+
import { D as w, a as D } from "../SingleSegmentDonut-7Uy6VEld.mjs";
|
|
23
|
+
import { S as ge } from "../SingleSegmentDonut-7Uy6VEld.mjs";
|
|
24
|
+
import { R as fe } from "../ResponsiveButton-CC9F_Ezk.mjs";
|
|
25
|
+
import { S as he } from "../SelectionBox-B4xELRgp.mjs";
|
|
26
26
|
import { S as xe } from "../StatusBar-CPfSXe80.mjs";
|
|
27
|
-
import { I as
|
|
28
|
-
import { A as
|
|
29
|
-
import { C as
|
|
30
|
-
import { C as
|
|
27
|
+
import { I as ve, P as _e, S as ke, T as Ue } from "../TabContentContainer-B0eYJP5p.mjs";
|
|
28
|
+
import { A as we } from "../Analytics-D-jdcL72.mjs";
|
|
29
|
+
import { C as Oe } from "../ConnectCard-DcM6tUOX.mjs";
|
|
30
|
+
import { C as Pe } from "../ConnectDrawer-BQy4YYuc.mjs";
|
|
31
31
|
import { C as Ie } from "../CurrencyText-CCbE6MmF.mjs";
|
|
32
|
-
import { E as
|
|
33
|
-
import { E as
|
|
34
|
-
import { G as
|
|
35
|
-
import { L as
|
|
36
|
-
import { L as
|
|
37
|
-
import { L as
|
|
38
|
-
import { S as
|
|
39
|
-
import { S as
|
|
32
|
+
import { E as Ne } from "../EmptyState-CJUDc3kD.mjs";
|
|
33
|
+
import { E as Le } from "../Error-BFJ3BnfS.mjs";
|
|
34
|
+
import { G as We } from "../GlobalAccountFilter-DEEc3Bc5.mjs";
|
|
35
|
+
import { L as qe } from "../ListItemAction-GDU5z4BN.mjs";
|
|
36
|
+
import { L as je } from "../ListItemRow-kH1rn8Xu.mjs";
|
|
37
|
+
import { L as $e } from "../ListItemWrapper-D6b-6m4t.mjs";
|
|
38
|
+
import { S as ze } from "../SearchBox-Cpgu_gdO.mjs";
|
|
39
|
+
import { S as Ve, T as Ke } from "../Sizes-DISGrlUg.mjs";
|
|
40
40
|
import { T as Je, a as Xe } from "../ToggleListItem-Dl1lXNwj.mjs";
|
|
41
41
|
import { a as et, u as tt, b as ot } from "../Analytics-fWQ36-fb.mjs";
|
|
42
42
|
import { u as st } from "../useAccountDisplayName-DHXXCFYZ.mjs";
|
|
43
43
|
import { u as it } from "../useInsightsEnabled-B_UpjpE6.mjs";
|
|
44
|
-
import { useRef as
|
|
45
|
-
import { u as
|
|
44
|
+
import { useRef as O, useEffect as T } from "react";
|
|
45
|
+
import { u as ut } from "../useScreenSize-mWpmnh5w.mjs";
|
|
46
46
|
import { u as dt } from "../useWidgetLoadTimer-C0Mr0eRf.mjs";
|
|
47
|
-
var
|
|
48
|
-
const
|
|
49
|
-
const
|
|
50
|
-
return
|
|
51
|
-
|
|
52
|
-
}, [r]),
|
|
47
|
+
var u = /* @__PURE__ */ ((r) => (r[r.Unknown = 0] = "Unknown", r[r.EveryWeek = 1] = "EveryWeek", r[r.EveryOtherWeek = 2] = "EveryOtherWeek", r[r.EveryMonth = 3] = "EveryMonth", r[r.EveryOtherMonth = 4] = "EveryOtherMonth", r[r.EveryQuarter = 5] = "EveryQuarter", r[r.EveryOtherQuarter = 6] = "EveryOtherQuarter", r[r.EveryYear = 7] = "EveryYear", r))(u || {});
|
|
48
|
+
const W = (r) => {
|
|
49
|
+
const t = O(null);
|
|
50
|
+
return T(() => {
|
|
51
|
+
t.current = r;
|
|
52
|
+
}, [r]), t.current;
|
|
53
53
|
}, F = [
|
|
54
|
-
{ id:
|
|
55
|
-
{ id:
|
|
56
|
-
{ id:
|
|
57
|
-
{ id:
|
|
58
|
-
{ id:
|
|
59
|
-
{ id:
|
|
60
|
-
{ id:
|
|
61
|
-
{ id:
|
|
62
|
-
],
|
|
54
|
+
{ id: u.Unknown, copy: "frequency_unknown" },
|
|
55
|
+
{ id: u.EveryWeek, copy: "frequency_every_week" },
|
|
56
|
+
{ id: u.EveryOtherWeek, copy: "frequency_every_other_week" },
|
|
57
|
+
{ id: u.EveryMonth, copy: "frequency_every_month" },
|
|
58
|
+
{ id: u.EveryOtherMonth, copy: "frequency_every_other_month" },
|
|
59
|
+
{ id: u.EveryQuarter, copy: "frequency_every_quarter" },
|
|
60
|
+
{ id: u.EveryOtherQuarter, copy: "frequency_every_other_quarter" },
|
|
61
|
+
{ id: u.EveryYear, copy: "frequency_every_year" }
|
|
62
|
+
], q = {
|
|
63
63
|
ERROR: "ERROR",
|
|
64
64
|
LOADING: "LOADING",
|
|
65
65
|
SUCCESS: "SUCCESS"
|
|
66
|
-
},
|
|
66
|
+
}, G = ({
|
|
67
67
|
hasGap: r = !1,
|
|
68
|
-
segments:
|
|
69
|
-
size:
|
|
70
|
-
strokeWidth:
|
|
68
|
+
segments: t,
|
|
69
|
+
size: i = w,
|
|
70
|
+
strokeWidth: l = D,
|
|
71
71
|
children: d
|
|
72
72
|
}) => {
|
|
73
|
-
const
|
|
74
|
-
let
|
|
75
|
-
return /* @__PURE__ */
|
|
76
|
-
/* @__PURE__ */
|
|
77
|
-
/* @__PURE__ */
|
|
73
|
+
const m = P(i), o = (i - l) / 2, a = i / 2;
|
|
74
|
+
let g = -90 - (r ? 1 : 0), e = 0;
|
|
75
|
+
return /* @__PURE__ */ y("div", { className: `mx-cmn-multi-segment-donut ${m}`, children: [
|
|
76
|
+
/* @__PURE__ */ y("svg", { height: i, width: i, children: [
|
|
77
|
+
/* @__PURE__ */ n(
|
|
78
78
|
"circle",
|
|
79
79
|
{
|
|
80
|
-
cx:
|
|
81
|
-
cy:
|
|
80
|
+
cx: a,
|
|
81
|
+
cy: a,
|
|
82
82
|
fill: "none",
|
|
83
|
-
r:
|
|
83
|
+
r: o,
|
|
84
84
|
stroke: "#E4E8EE",
|
|
85
|
-
strokeWidth:
|
|
85
|
+
strokeWidth: l
|
|
86
86
|
}
|
|
87
87
|
),
|
|
88
|
-
|
|
88
|
+
t.map((p, E) => (g += 360 * e + (r ? 1 : 0), e = (p.percent - (r ? 0.3 : 0)) / 100, /* @__PURE__ */ n(
|
|
89
89
|
"circle",
|
|
90
90
|
{
|
|
91
|
-
cx:
|
|
92
|
-
cy:
|
|
91
|
+
cx: a,
|
|
92
|
+
cy: a,
|
|
93
93
|
fill: "none",
|
|
94
|
-
r:
|
|
94
|
+
r: o,
|
|
95
95
|
stroke: p.color,
|
|
96
|
-
strokeDasharray: 2 * Math.PI *
|
|
97
|
-
strokeDashoffset: 2 * Math.PI *
|
|
98
|
-
strokeWidth:
|
|
99
|
-
transform: `rotate(${
|
|
96
|
+
strokeDasharray: 2 * Math.PI * o,
|
|
97
|
+
strokeDashoffset: 2 * Math.PI * o * (1 - e),
|
|
98
|
+
strokeWidth: l,
|
|
99
|
+
transform: `rotate(${g}, ${a}, ${a})`
|
|
100
100
|
},
|
|
101
|
-
|
|
101
|
+
E
|
|
102
102
|
)))
|
|
103
103
|
] }),
|
|
104
|
-
/* @__PURE__ */
|
|
104
|
+
/* @__PURE__ */ n("div", { className: "mx-cmn-multi-segment-donut-children", children: d })
|
|
105
105
|
] });
|
|
106
|
-
},
|
|
106
|
+
}, P = (r) => b({
|
|
107
107
|
height: r,
|
|
108
108
|
marginTop: "-8px",
|
|
109
109
|
position: "relative",
|
|
@@ -115,34 +115,58 @@ const B = (r) => {
|
|
|
115
115
|
top: "50%",
|
|
116
116
|
transform: "translate(-50%, -50%)"
|
|
117
117
|
}
|
|
118
|
-
}),
|
|
118
|
+
}), j = () => {
|
|
119
119
|
const r = U();
|
|
120
|
-
return /* @__PURE__ */
|
|
121
|
-
/* @__PURE__ */
|
|
122
|
-
/* @__PURE__ */ c
|
|
123
|
-
const
|
|
120
|
+
return /* @__PURE__ */ y(v, { spacing: 1, sx: { p: 2, border: "2px dashed red", borderRadius: 2, m: 2 }, children: [
|
|
121
|
+
/* @__PURE__ */ n(_, { variant: "subtitle2", color: "error", children: "⚠️ Error Test Panel — REMOVE BEFORE PROD" }),
|
|
122
|
+
/* @__PURE__ */ n(c, { variant: "outlined", color: "warning", size: "small", onClick: async () => {
|
|
123
|
+
const e = r.userStore.api.getUserFeatures;
|
|
124
124
|
r.userStore.api.getUserFeatures = async () => {
|
|
125
125
|
throw new Error("ApiGetRequestError: 500 Internal Server Error");
|
|
126
|
-
}, await r.userStore.loadUserFeatures(), r.userStore.api.getUserFeatures =
|
|
126
|
+
}, await r.userStore.loadUserFeatures(), r.userStore.api.getUserFeatures = e;
|
|
127
127
|
}, children: "1. UserStore.loadUserFeatures failure" }),
|
|
128
|
-
/* @__PURE__ */ c
|
|
129
|
-
const
|
|
128
|
+
/* @__PURE__ */ n(c, { variant: "outlined", color: "warning", size: "small", onClick: async () => {
|
|
129
|
+
const e = r.userStore.api.updateUser;
|
|
130
130
|
r.userStore.api.updateUser = async () => {
|
|
131
131
|
throw new Error("ApiPutRequestError: 422 Unprocessable Entity");
|
|
132
|
-
}, await r.userStore.updateUser({}), r.userStore.api.updateUser =
|
|
132
|
+
}, await r.userStore.updateUser({}), r.userStore.api.updateUser = e;
|
|
133
133
|
}, children: "2. UserStore.updateUser failure" }),
|
|
134
|
-
/* @__PURE__ */ c
|
|
135
|
-
const
|
|
134
|
+
/* @__PURE__ */ n(c, { variant: "outlined", color: "warning", size: "small", onClick: async () => {
|
|
135
|
+
const e = r.userStore.api.updateUserProfile;
|
|
136
136
|
r.userStore.api.updateUserProfile = async () => {
|
|
137
137
|
throw new Error("ApiPutRequestError: 500 Internal Server Error");
|
|
138
|
-
}, await r.userStore.updateUserProfile({ guid: "test" }), r.userStore.api.updateUserProfile =
|
|
138
|
+
}, await r.userStore.updateUserProfile({ guid: "test" }), r.userStore.api.updateUserProfile = e;
|
|
139
139
|
}, children: "3. UserStore.updateUserProfile failure" }),
|
|
140
|
-
/* @__PURE__ */ c
|
|
140
|
+
/* @__PURE__ */ n(c, { variant: "outlined", color: "warning", size: "small", onClick: () => {
|
|
141
141
|
r.captureException(
|
|
142
142
|
new Error("[ErrorTest] Direct captureException call"),
|
|
143
143
|
{ store: "ErrorTestButtons" }
|
|
144
144
|
);
|
|
145
|
-
}, children: "4. Direct captureException" })
|
|
145
|
+
}, children: "4. Direct captureException" }),
|
|
146
|
+
/* @__PURE__ */ n(c, { variant: "outlined", color: "error", size: "small", onClick: () => {
|
|
147
|
+
try {
|
|
148
|
+
null.nonExistentMethod();
|
|
149
|
+
} catch (e) {
|
|
150
|
+
r.captureException(e, { store: "ErrorTestButtons" });
|
|
151
|
+
}
|
|
152
|
+
}, children: "5. TypeError (null reference)" }),
|
|
153
|
+
/* @__PURE__ */ n(c, { variant: "outlined", color: "warning", size: "small", onClick: () => {
|
|
154
|
+
Promise.reject(new Error("[ErrorTest] Unhandled promise rejection"));
|
|
155
|
+
}, children: "6. Unhandled promise rejection" }),
|
|
156
|
+
/* @__PURE__ */ n(c, { variant: "outlined", color: "warning", size: "small", onClick: async () => {
|
|
157
|
+
try {
|
|
158
|
+
await fetch("https://localhost:1/nonexistent");
|
|
159
|
+
} catch (e) {
|
|
160
|
+
r.captureException(e, { store: "ErrorTestButtons" });
|
|
161
|
+
}
|
|
162
|
+
}, children: "7. Network error (failed fetch)" }),
|
|
163
|
+
/* @__PURE__ */ n(c, { variant: "outlined", color: "error", size: "small", onClick: () => {
|
|
164
|
+
try {
|
|
165
|
+
document.querySelector("");
|
|
166
|
+
} catch (e) {
|
|
167
|
+
r.captureException(e, { store: "ErrorTestButtons" });
|
|
168
|
+
}
|
|
169
|
+
}, children: "8. DOMException" })
|
|
146
170
|
] });
|
|
147
171
|
}, A = [
|
|
148
172
|
"fontFamily",
|
|
@@ -163,67 +187,67 @@ const B = (r) => {
|
|
|
163
187
|
{ key: "warning", light: "warning_color", dark: "warning_color_dark" },
|
|
164
188
|
{ key: "info", light: "info_color", dark: "info_color_dark" },
|
|
165
189
|
{ key: "success", light: "success_color", dark: "success_color_dark" }
|
|
166
|
-
],
|
|
167
|
-
const
|
|
168
|
-
for (const { key: d, light:
|
|
169
|
-
const
|
|
170
|
-
|
|
190
|
+
], Y = (r, t) => {
|
|
191
|
+
const i = t === "dark", l = {};
|
|
192
|
+
for (const { key: d, light: m, dark: o } of x) {
|
|
193
|
+
const a = r?.[i ? o : m];
|
|
194
|
+
a && (l[d] = a);
|
|
171
195
|
}
|
|
172
|
-
return
|
|
173
|
-
},
|
|
174
|
-
const
|
|
175
|
-
lighter:
|
|
176
|
-
light:
|
|
177
|
-
main:
|
|
178
|
-
dark:
|
|
179
|
-
darker:
|
|
180
|
-
} :
|
|
181
|
-
x.map(({ key:
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
r.palette[
|
|
196
|
+
return l;
|
|
197
|
+
}, $ = (r, t, i) => {
|
|
198
|
+
const l = r.palette.mode === "dark", d = (i?.master?.style?.font_name || t?.system_font) ?? r.typography.fontFamily, m = (s, f) => s ? {
|
|
199
|
+
lighter: S(s, 0.5),
|
|
200
|
+
light: S(s, 0.25),
|
|
201
|
+
main: s,
|
|
202
|
+
dark: h(s, 0.25),
|
|
203
|
+
darker: h(s, 0.5)
|
|
204
|
+
} : f, o = Object.fromEntries(
|
|
205
|
+
x.map(({ key: s, light: f, dark: C }) => [
|
|
206
|
+
s,
|
|
207
|
+
m(
|
|
208
|
+
t?.[l ? C : f],
|
|
209
|
+
r.palette[s]
|
|
186
210
|
)
|
|
187
211
|
])
|
|
188
|
-
),
|
|
189
|
-
A.map((
|
|
190
|
-
|
|
191
|
-
|
|
212
|
+
), a = Object.fromEntries(
|
|
213
|
+
A.map((s) => [
|
|
214
|
+
s,
|
|
215
|
+
s === "fontFamily" ? d : { fontFamily: d }
|
|
192
216
|
])
|
|
193
|
-
),
|
|
217
|
+
), g = {
|
|
194
218
|
MuiTabs: {
|
|
195
219
|
styleOverrides: {
|
|
196
|
-
indicator: { backgroundColor:
|
|
220
|
+
indicator: { backgroundColor: o.primary.light }
|
|
197
221
|
}
|
|
198
222
|
},
|
|
199
223
|
MuiPickersCalendarHeader: {
|
|
200
224
|
styleOverrides: {
|
|
201
225
|
switchViewButton: {
|
|
202
|
-
color:
|
|
203
|
-
"&:hover": { backgroundColor: k(
|
|
226
|
+
color: o.primary.lighter,
|
|
227
|
+
"&:hover": { backgroundColor: k(o.primary.light, 0.1) }
|
|
204
228
|
}
|
|
205
229
|
}
|
|
206
230
|
}
|
|
207
|
-
},
|
|
208
|
-
...
|
|
209
|
-
...
|
|
231
|
+
}, e = t?.button_corner_radius, p = t?.card_corner_radius, E = {
|
|
232
|
+
...g,
|
|
233
|
+
...e && {
|
|
210
234
|
MuiButton: {
|
|
211
235
|
styleOverrides: {
|
|
212
|
-
root: { borderRadius: `${
|
|
236
|
+
root: { borderRadius: `${e}px`, textTransform: "none" }
|
|
213
237
|
}
|
|
214
238
|
},
|
|
215
239
|
MuiIconButton: {
|
|
216
240
|
styleOverrides: {
|
|
217
241
|
root: {
|
|
218
|
-
borderRadius: `${
|
|
219
|
-
minWidth:
|
|
220
|
-
minHeight:
|
|
242
|
+
borderRadius: `${e}px`,
|
|
243
|
+
minWidth: e,
|
|
244
|
+
minHeight: e
|
|
221
245
|
}
|
|
222
246
|
}
|
|
223
247
|
},
|
|
224
248
|
MuiToggleButton: {
|
|
225
249
|
styleOverrides: {
|
|
226
|
-
root: { borderRadius: `${
|
|
250
|
+
root: { borderRadius: `${e}px`, textTransform: "none" }
|
|
227
251
|
}
|
|
228
252
|
}
|
|
229
253
|
},
|
|
@@ -240,60 +264,60 @@ const B = (r) => {
|
|
|
240
264
|
}
|
|
241
265
|
}
|
|
242
266
|
};
|
|
243
|
-
return { typography:
|
|
267
|
+
return { typography: a, palette: o, components: E };
|
|
244
268
|
};
|
|
245
269
|
export {
|
|
246
|
-
|
|
270
|
+
we as ANALYTICS_EVENTS,
|
|
247
271
|
nr as Calendar,
|
|
248
272
|
ir as CalendarSelectionTypes,
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
273
|
+
Oe as ConnectCard,
|
|
274
|
+
Pe as ConnectDrawer,
|
|
275
|
+
lr as CurrencyDialog,
|
|
252
276
|
cr as CurrencyInput,
|
|
253
277
|
Ie as CurrencyText,
|
|
254
|
-
|
|
255
|
-
|
|
278
|
+
w as DEFAULT_DONUT_SIZE,
|
|
279
|
+
D as DEFAULT_STROKE_WIDTH,
|
|
256
280
|
pr as DataRow,
|
|
257
|
-
|
|
258
|
-
|
|
281
|
+
Er as DateRangeSelector,
|
|
282
|
+
Sr as Dialog,
|
|
259
283
|
Cr as Donut,
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
284
|
+
_r as Drawer,
|
|
285
|
+
Ne as EmptyState,
|
|
286
|
+
Le as Error,
|
|
263
287
|
Ur as ErrorBoundary,
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
288
|
+
j as ErrorTestButtons,
|
|
289
|
+
We as GlobalAccountFilter,
|
|
290
|
+
wr as GlobalDataContext,
|
|
291
|
+
Dr as GlobalDataProvider,
|
|
292
|
+
Q as GlobalStore,
|
|
293
|
+
ve as INCOME_ACCOUNT_TYPES,
|
|
270
294
|
ae as IconBacking,
|
|
271
295
|
ne as InformationTooltip,
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
296
|
+
q as LOADING_STATUS,
|
|
297
|
+
qe as ListItemAction,
|
|
298
|
+
je as ListItemRow,
|
|
299
|
+
$e as ListItemWrapper,
|
|
300
|
+
le as Loader,
|
|
277
301
|
ce as MicroWidgetContainer,
|
|
278
302
|
pe as MiniWidgetContainer,
|
|
279
|
-
|
|
280
|
-
|
|
303
|
+
G as MultiSegmentDonut,
|
|
304
|
+
_e as PAYMENT_ACCOUNT_TYPES,
|
|
281
305
|
F as RECURRENCE_COPY,
|
|
282
|
-
|
|
306
|
+
fe as ResponsiveButton,
|
|
283
307
|
ke as SPENDING_ACCOUNT_TYPES,
|
|
284
|
-
|
|
308
|
+
ze as SearchBox,
|
|
285
309
|
mr as Select,
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
310
|
+
he as SelectionBox,
|
|
311
|
+
ge as SingleSegmentDonut,
|
|
312
|
+
Ve as Sizes,
|
|
289
313
|
xe as StatusBar,
|
|
290
314
|
Ke as TOUCH_TARGET,
|
|
291
315
|
Ue as TabContentContainer,
|
|
292
316
|
Je as ToggleButtonListItem,
|
|
293
317
|
Xe as ToggleListItem,
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
318
|
+
fr as WidgetContainer,
|
|
319
|
+
Or as WidgetContainerContext,
|
|
320
|
+
Tr as WidgetContainerProvider,
|
|
297
321
|
et as analyticsSession,
|
|
298
322
|
K as buildDynamicCopy,
|
|
299
323
|
Z as buildPluralCopy,
|
|
@@ -301,44 +325,44 @@ export {
|
|
|
301
325
|
rr as formatOrdinal,
|
|
302
326
|
er as formatPercentage,
|
|
303
327
|
tr as generateEqualIntervals,
|
|
304
|
-
|
|
305
|
-
|
|
328
|
+
Y as getClientPaletteOptions,
|
|
329
|
+
$ as getClientTheme,
|
|
306
330
|
or as getCurrencyCodes,
|
|
307
331
|
ar as getPluralRules,
|
|
308
332
|
st as useAccountDisplayName,
|
|
309
|
-
|
|
333
|
+
Pr as useAccountStore,
|
|
310
334
|
Ar as useAppConfig,
|
|
311
335
|
Ir as useBudgetsStore,
|
|
312
336
|
Mr as useCaptureException,
|
|
313
|
-
|
|
314
|
-
|
|
337
|
+
Nr as useCashflowStore,
|
|
338
|
+
Rr as useCategoryStore,
|
|
315
339
|
tt as useCombineEvents,
|
|
316
340
|
ot as useCombinePageviews,
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
|
|
341
|
+
Lr as useDebtStore,
|
|
342
|
+
Br as useError,
|
|
343
|
+
Wr as useEvent,
|
|
320
344
|
Fr as useFinstrongStore,
|
|
321
|
-
|
|
345
|
+
qr as useGlobalCopyStore,
|
|
322
346
|
U as useGlobalStore,
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
|
|
326
|
-
|
|
347
|
+
Gr as useGlobalUiStore,
|
|
348
|
+
jr as useGoalStore,
|
|
349
|
+
Yr as useHelpStore,
|
|
350
|
+
$r as useHoldingStore,
|
|
327
351
|
it as useInsightsEnabled,
|
|
328
|
-
|
|
329
|
-
|
|
330
|
-
|
|
331
|
-
|
|
352
|
+
Hr as useLoad,
|
|
353
|
+
zr as useMerchantStore,
|
|
354
|
+
Qr as useNetWorthStore,
|
|
355
|
+
Vr as useNotificationStore,
|
|
332
356
|
Kr as usePageView,
|
|
333
|
-
|
|
357
|
+
W as usePrevious,
|
|
334
358
|
Zr as useRecurringTransactionsStore,
|
|
335
|
-
|
|
359
|
+
ut as useScreenSize,
|
|
336
360
|
Jr as useSettingsStore,
|
|
337
361
|
Xr as useTransactionStore,
|
|
338
362
|
re as useTrendsStore,
|
|
339
363
|
ee as useUserStore,
|
|
340
364
|
te as useWidgetContainerProvider,
|
|
341
|
-
|
|
365
|
+
yr as useWidgetHeaderStyles,
|
|
342
366
|
dt as useWidgetLoadTimer
|
|
343
367
|
};
|
|
344
368
|
//# sourceMappingURL=index.es.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.es.js","sources":["../../src/core/constants/repeatingTransactions.ts","../../src/common/hooks/usePrevious.tsx","../../src/common/constants/ScheduledPayment.ts","../../src/common/constants/SpendingPlan.ts","../../src/common/components/donuts/MultiSegmentDonut.tsx","../../src/common/components/ErrorTestButtons.tsx","../../src/common/utils/Theme.ts"],"sourcesContent":["export enum RecurrenceTypes {\n Unknown = 0,\n EveryWeek = 1,\n EveryOtherWeek = 2,\n EveryMonth = 3,\n EveryOtherMonth = 4,\n EveryQuarter = 5,\n EveryOtherQuarter = 6,\n EveryYear = 7,\n}\n","import { useEffect, useRef } from 'react'\n\nexport const usePrevious = (value: any) => {\n const ref = useRef(null)\n useEffect(() => {\n ref.current = value\n }, [value])\n return ref.current\n}\nexport default usePrevious\n","import { RecurrenceTypes } from '../../core/constants'\n\nexport const RECURRENCE_COPY = [\n { id: RecurrenceTypes.Unknown, copy: 'frequency_unknown' },\n { id: RecurrenceTypes.EveryWeek, copy: 'frequency_every_week' },\n { id: RecurrenceTypes.EveryOtherWeek, copy: 'frequency_every_other_week' },\n { id: RecurrenceTypes.EveryMonth, copy: 'frequency_every_month' },\n { id: RecurrenceTypes.EveryOtherMonth, copy: 'frequency_every_other_month' },\n { id: RecurrenceTypes.EveryQuarter, copy: 'frequency_every_quarter' },\n { id: RecurrenceTypes.EveryOtherQuarter, copy: 'frequency_every_other_quarter' },\n { id: RecurrenceTypes.EveryYear, copy: 'frequency_every_year' },\n]\n","export const LOADING_STATUS = {\n ERROR: 'ERROR',\n LOADING: 'LOADING',\n SUCCESS: 'SUCCESS',\n}\n","import React from 'react'\nimport { css } from '@mxenabled/cssinjs'\n\nimport { DEFAULT_DONUT_SIZE, DEFAULT_STROKE_WIDTH } from '../../constants'\n\nexport interface Segment {\n percent: number\n color: string\n}\n\nexport interface MultiSegmentDonutProps {\n children: React.ReactNode\n hasGap?: boolean\n segments: Segment[]\n size?: number\n strokeWidth?: number\n}\n\nconst MultiSegmentDonut: React.FC<MultiSegmentDonutProps> = ({\n hasGap = false,\n segments,\n size = DEFAULT_DONUT_SIZE,\n strokeWidth = DEFAULT_STROKE_WIDTH,\n children,\n}) => {\n const styles = getStyles(size)\n\n const radius = (size - strokeWidth) / 2\n const halfSize = size / 2\n\n let offset = -90 - (hasGap ? 1 : 0)\n\n let length = 0\n\n return (\n <div className={`mx-cmn-multi-segment-donut ${styles}`}>\n <svg height={size} width={size}>\n <circle\n cx={halfSize}\n cy={halfSize}\n fill=\"none\"\n r={radius}\n stroke=\"#E4E8EE\"\n strokeWidth={strokeWidth}\n />\n {segments.map((segment, index) => {\n offset += 360 * length + (hasGap ? 1 : 0)\n length = (segment.percent - (hasGap ? 0.3 : 0)) / 100\n\n return (\n <circle\n cx={halfSize}\n cy={halfSize}\n fill=\"none\"\n key={index}\n r={radius}\n stroke={segment.color}\n strokeDasharray={2 * Math.PI * radius}\n strokeDashoffset={2 * Math.PI * radius * (1 - length)}\n strokeWidth={strokeWidth}\n transform={`rotate(${offset}, ${halfSize}, ${halfSize})`}\n />\n )\n })}\n </svg>\n <div className=\"mx-cmn-multi-segment-donut-children\">{children}</div>\n </div>\n )\n}\n\nconst getStyles = (size: number) =>\n css({\n height: size,\n marginTop: `-8px`,\n position: 'relative',\n width: size,\n '& .mx-cmn-multi-segment-donut-children': {\n left: '50%',\n position: 'absolute',\n textAlign: 'center',\n top: '50%',\n transform: 'translate(-50%, -50%)',\n },\n })\n\nexport default MultiSegmentDonut\n","import React from 'react'\nimport { Button, Stack, Typography } from '@mui/material'\n\nimport { useGlobalStore } from '../context/hooks'\n\n/**\n * Temporary component for testing PostHog error capture around UserStore.\n * REMOVE BEFORE MERGING TO PRODUCTION.\n */\n\nconst ErrorTestButtons: React.FC = () => {\n const globalStore = useGlobalStore()\n\n // 1. Simulate getUserFeatures API failure\n const triggerLoadUserFeaturesError = async () => {\n const origApi = globalStore.userStore.api.getUserFeatures\n globalStore.userStore.api.getUserFeatures = async () => {\n throw new Error('ApiGetRequestError: 500 Internal Server Error')\n }\n await globalStore.userStore.loadUserFeatures()\n globalStore.userStore.api.getUserFeatures = origApi\n }\n\n // 2. Simulate updateUser API failure\n const triggerUpdateUserError = async () => {\n const origApi = globalStore.userStore.api.updateUser\n globalStore.userStore.api.updateUser = async () => {\n throw new Error('ApiPutRequestError: 422 Unprocessable Entity')\n }\n await globalStore.userStore.updateUser({} as any)\n globalStore.userStore.api.updateUser = origApi\n }\n\n // 3. Simulate updateUserProfile API failure\n const triggerUpdateUserProfileError = async () => {\n const origApi = globalStore.userStore.api.updateUserProfile\n globalStore.userStore.api.updateUserProfile = async () => {\n throw new Error('ApiPutRequestError: 500 Internal Server Error')\n }\n await globalStore.userStore.updateUserProfile({ guid: 'test' } as any)\n globalStore.userStore.api.updateUserProfile = origApi\n }\n\n // 4. Direct captureException call\n const triggerDirectCapture = () => {\n globalStore.captureException(\n new Error('[ErrorTest] Direct captureException call'),\n { store: 'ErrorTestButtons' },\n )\n }\n\n return (\n <Stack spacing={1} sx={{ p: 2, border: '2px dashed red', borderRadius: 2, m: 2 }}>\n <Typography variant=\"subtitle2\" color=\"error\">\n ⚠️ Error Test Panel — REMOVE BEFORE PROD\n </Typography>\n <Button variant=\"outlined\" color=\"warning\" size=\"small\" onClick={triggerLoadUserFeaturesError}>\n 1. UserStore.loadUserFeatures failure\n </Button>\n <Button variant=\"outlined\" color=\"warning\" size=\"small\" onClick={triggerUpdateUserError}>\n 2. UserStore.updateUser failure\n </Button>\n <Button variant=\"outlined\" color=\"warning\" size=\"small\" onClick={triggerUpdateUserProfileError}>\n 3. UserStore.updateUserProfile failure\n </Button>\n <Button variant=\"outlined\" color=\"warning\" size=\"small\" onClick={triggerDirectCapture}>\n 4. Direct captureException\n </Button>\n </Stack>\n )\n}\n\nexport default ErrorTestButtons\n","import { alpha, darken, lighten, PaletteColor, PaletteMode, Theme } from '@mui/material'\n\nimport type { ClientStyleProfile } from '../../core'\nimport { ClientConfig } from '../../core/types/AppData'\n\nconst TYPOGRAPHY_VARIANTS = [\n 'fontFamily',\n 'h1',\n 'h2',\n 'h3',\n 'body1',\n 'body2',\n 'button',\n 'caption',\n 'subtitle1',\n 'subtitle2',\n 'tiny',\n] as const\n\nconst PALETTE_CONFIG = [\n { key: 'primary', light: 'primary_color', dark: 'primary_color_dark' },\n { key: 'secondary', light: 'neutral_color', dark: 'neutral_color_dark' },\n { key: 'error', light: 'error_color', dark: 'error_color_dark' },\n { key: 'warning', light: 'warning_color', dark: 'warning_color_dark' },\n { key: 'info', light: 'info_color', dark: 'info_color_dark' },\n { key: 'success', light: 'success_color', dark: 'success_color_dark' },\n] as const\n\nexport const getClientPaletteOptions = (\n clientStyleProfile: ClientStyleProfile,\n mode: PaletteMode,\n): Record<string, string> => {\n const isDark = mode === 'dark'\n const options: Record<string, string> = {}\n\n for (const { key, light, dark } of PALETTE_CONFIG) {\n const color = clientStyleProfile?.[isDark ? dark : light] as string | undefined\n if (color) options[key] = color\n }\n\n return options\n}\n\nexport const getClientTheme = (\n theme: Theme,\n clientStyleProfile: ClientStyleProfile,\n clientConfig?: ClientConfig,\n) => {\n const isDark = theme.palette.mode === 'dark'\n const font =\n (clientConfig?.master?.style?.font_name || clientStyleProfile?.system_font) ??\n theme.typography.fontFamily\n\n const generatePalette = (color: string | undefined, defaultColor: PaletteColor) =>\n color\n ? {\n lighter: lighten(color, 0.5),\n light: lighten(color, 0.25),\n main: color,\n dark: darken(color, 0.25),\n darker: darken(color, 0.5),\n }\n : defaultColor\n\n const palette = Object.fromEntries(\n PALETTE_CONFIG.map(({ key, light, dark }) => [\n key,\n generatePalette(\n clientStyleProfile?.[isDark ? dark : light] as string | undefined,\n theme.palette[key],\n ),\n ]),\n )\n\n const typography = Object.fromEntries(\n TYPOGRAPHY_VARIANTS.map((variant) => [\n variant,\n variant === 'fontFamily' ? font : { fontFamily: font },\n ]),\n )\n\n const baseComponents = {\n MuiTabs: {\n styleOverrides: {\n indicator: { backgroundColor: palette.primary.light },\n },\n },\n MuiPickersCalendarHeader: {\n styleOverrides: {\n switchViewButton: {\n color: palette.primary.lighter,\n '&:hover': { backgroundColor: alpha(palette.primary.light, 0.1) },\n },\n },\n },\n }\n\n const buttonRadius = clientStyleProfile?.button_corner_radius\n const cardRadius = clientStyleProfile?.card_corner_radius\n\n const components = {\n ...baseComponents,\n ...(buttonRadius && {\n MuiButton: {\n styleOverrides: {\n root: { borderRadius: `${buttonRadius}px`, textTransform: 'none' },\n },\n },\n MuiIconButton: {\n styleOverrides: {\n root: {\n borderRadius: `${buttonRadius}px`,\n minWidth: buttonRadius,\n minHeight: buttonRadius,\n },\n },\n },\n MuiToggleButton: {\n styleOverrides: {\n root: { borderRadius: `${buttonRadius}px`, textTransform: 'none' },\n },\n },\n }),\n ...(cardRadius && {\n MuiCard: {\n styleOverrides: { root: { borderRadius: `${cardRadius}px` } },\n },\n }),\n ...(cardRadius && {\n MuiPaper: {\n styleOverrides: {\n rounded: { borderRadius: `${cardRadius}px` },\n },\n },\n }),\n }\n\n return { typography, palette, components }\n}\n"],"names":["RecurrenceTypes","usePrevious","value","ref","useRef","useEffect","RECURRENCE_COPY","LOADING_STATUS","MultiSegmentDonut","hasGap","segments","size","DEFAULT_DONUT_SIZE","strokeWidth","DEFAULT_STROKE_WIDTH","children","styles","getStyles","radius","halfSize","offset","length","jsxs","jsx","segment","index","css","ErrorTestButtons","globalStore","useGlobalStore","Stack","Typography","Button","origApi","TYPOGRAPHY_VARIANTS","PALETTE_CONFIG","getClientPaletteOptions","clientStyleProfile","mode","isDark","options","key","light","dark","color","getClientTheme","theme","clientConfig","font","generatePalette","defaultColor","lighten","darken","palette","typography","variant","baseComponents","alpha","buttonRadius","cardRadius","components"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.es.js","sources":["../../src/core/constants/repeatingTransactions.ts","../../src/common/hooks/usePrevious.tsx","../../src/common/constants/ScheduledPayment.ts","../../src/common/constants/SpendingPlan.ts","../../src/common/components/donuts/MultiSegmentDonut.tsx","../../src/common/components/ErrorTestButtons.tsx","../../src/common/utils/Theme.ts"],"sourcesContent":["export enum RecurrenceTypes {\n Unknown = 0,\n EveryWeek = 1,\n EveryOtherWeek = 2,\n EveryMonth = 3,\n EveryOtherMonth = 4,\n EveryQuarter = 5,\n EveryOtherQuarter = 6,\n EveryYear = 7,\n}\n","import { useEffect, useRef } from 'react'\n\nexport const usePrevious = (value: any) => {\n const ref = useRef(null)\n useEffect(() => {\n ref.current = value\n }, [value])\n return ref.current\n}\nexport default usePrevious\n","import { RecurrenceTypes } from '../../core/constants'\n\nexport const RECURRENCE_COPY = [\n { id: RecurrenceTypes.Unknown, copy: 'frequency_unknown' },\n { id: RecurrenceTypes.EveryWeek, copy: 'frequency_every_week' },\n { id: RecurrenceTypes.EveryOtherWeek, copy: 'frequency_every_other_week' },\n { id: RecurrenceTypes.EveryMonth, copy: 'frequency_every_month' },\n { id: RecurrenceTypes.EveryOtherMonth, copy: 'frequency_every_other_month' },\n { id: RecurrenceTypes.EveryQuarter, copy: 'frequency_every_quarter' },\n { id: RecurrenceTypes.EveryOtherQuarter, copy: 'frequency_every_other_quarter' },\n { id: RecurrenceTypes.EveryYear, copy: 'frequency_every_year' },\n]\n","export const LOADING_STATUS = {\n ERROR: 'ERROR',\n LOADING: 'LOADING',\n SUCCESS: 'SUCCESS',\n}\n","import React from 'react'\nimport { css } from '@mxenabled/cssinjs'\n\nimport { DEFAULT_DONUT_SIZE, DEFAULT_STROKE_WIDTH } from '../../constants'\n\nexport interface Segment {\n percent: number\n color: string\n}\n\nexport interface MultiSegmentDonutProps {\n children: React.ReactNode\n hasGap?: boolean\n segments: Segment[]\n size?: number\n strokeWidth?: number\n}\n\nconst MultiSegmentDonut: React.FC<MultiSegmentDonutProps> = ({\n hasGap = false,\n segments,\n size = DEFAULT_DONUT_SIZE,\n strokeWidth = DEFAULT_STROKE_WIDTH,\n children,\n}) => {\n const styles = getStyles(size)\n\n const radius = (size - strokeWidth) / 2\n const halfSize = size / 2\n\n let offset = -90 - (hasGap ? 1 : 0)\n\n let length = 0\n\n return (\n <div className={`mx-cmn-multi-segment-donut ${styles}`}>\n <svg height={size} width={size}>\n <circle\n cx={halfSize}\n cy={halfSize}\n fill=\"none\"\n r={radius}\n stroke=\"#E4E8EE\"\n strokeWidth={strokeWidth}\n />\n {segments.map((segment, index) => {\n offset += 360 * length + (hasGap ? 1 : 0)\n length = (segment.percent - (hasGap ? 0.3 : 0)) / 100\n\n return (\n <circle\n cx={halfSize}\n cy={halfSize}\n fill=\"none\"\n key={index}\n r={radius}\n stroke={segment.color}\n strokeDasharray={2 * Math.PI * radius}\n strokeDashoffset={2 * Math.PI * radius * (1 - length)}\n strokeWidth={strokeWidth}\n transform={`rotate(${offset}, ${halfSize}, ${halfSize})`}\n />\n )\n })}\n </svg>\n <div className=\"mx-cmn-multi-segment-donut-children\">{children}</div>\n </div>\n )\n}\n\nconst getStyles = (size: number) =>\n css({\n height: size,\n marginTop: `-8px`,\n position: 'relative',\n width: size,\n '& .mx-cmn-multi-segment-donut-children': {\n left: '50%',\n position: 'absolute',\n textAlign: 'center',\n top: '50%',\n transform: 'translate(-50%, -50%)',\n },\n })\n\nexport default MultiSegmentDonut\n","import React from 'react'\nimport { Button, Stack, Typography } from '@mui/material'\n\nimport { useGlobalStore } from '../context/hooks'\n\n/**\n * Temporary component for testing PostHog error capture around UserStore.\n * REMOVE BEFORE MERGING TO PRODUCTION.\n */\n\nconst ErrorTestButtons: React.FC = () => {\n const globalStore = useGlobalStore()\n\n // 1. Simulate getUserFeatures API failure\n const triggerLoadUserFeaturesError = async () => {\n const origApi = globalStore.userStore.api.getUserFeatures\n globalStore.userStore.api.getUserFeatures = async () => {\n throw new Error('ApiGetRequestError: 500 Internal Server Error')\n }\n await globalStore.userStore.loadUserFeatures()\n globalStore.userStore.api.getUserFeatures = origApi\n }\n\n // 2. Simulate updateUser API failure\n const triggerUpdateUserError = async () => {\n const origApi = globalStore.userStore.api.updateUser\n globalStore.userStore.api.updateUser = async () => {\n throw new Error('ApiPutRequestError: 422 Unprocessable Entity')\n }\n await globalStore.userStore.updateUser({} as any)\n globalStore.userStore.api.updateUser = origApi\n }\n\n // 3. Simulate updateUserProfile API failure\n const triggerUpdateUserProfileError = async () => {\n const origApi = globalStore.userStore.api.updateUserProfile\n globalStore.userStore.api.updateUserProfile = async () => {\n throw new Error('ApiPutRequestError: 500 Internal Server Error')\n }\n await globalStore.userStore.updateUserProfile({ guid: 'test' } as any)\n globalStore.userStore.api.updateUserProfile = origApi\n }\n\n // 4. Direct captureException call\n const triggerDirectCapture = () => {\n globalStore.captureException(\n new Error('[ErrorTest] Direct captureException call'),\n { store: 'ErrorTestButtons' },\n )\n }\n\n // 5. TypeError\n const triggerTypeError = () => {\n try {\n const obj: any = null\n obj.nonExistentMethod()\n } catch (e) {\n globalStore.captureException(e, { store: 'ErrorTestButtons' })\n }\n }\n\n // 6. Unhandled promise rejection\n const triggerUnhandledRejection = () => {\n Promise.reject(new Error('[ErrorTest] Unhandled promise rejection'))\n }\n\n // 7. Network error (simulates failed fetch)\n const triggerNetworkError = async () => {\n try {\n await fetch('https://localhost:1/nonexistent')\n } catch (e) {\n globalStore.captureException(e, { store: 'ErrorTestButtons' })\n }\n }\n\n // 8. DOMException\n const triggerDOMException = () => {\n try {\n document.querySelector('')\n } catch (e) {\n globalStore.captureException(e, { store: 'ErrorTestButtons' })\n }\n }\n\n return (\n <Stack spacing={1} sx={{ p: 2, border: '2px dashed red', borderRadius: 2, m: 2 }}>\n <Typography variant=\"subtitle2\" color=\"error\">\n ⚠️ Error Test Panel — REMOVE BEFORE PROD\n </Typography>\n <Button variant=\"outlined\" color=\"warning\" size=\"small\" onClick={triggerLoadUserFeaturesError}>\n 1. UserStore.loadUserFeatures failure\n </Button>\n <Button variant=\"outlined\" color=\"warning\" size=\"small\" onClick={triggerUpdateUserError}>\n 2. UserStore.updateUser failure\n </Button>\n <Button variant=\"outlined\" color=\"warning\" size=\"small\" onClick={triggerUpdateUserProfileError}>\n 3. UserStore.updateUserProfile failure\n </Button>\n <Button variant=\"outlined\" color=\"warning\" size=\"small\" onClick={triggerDirectCapture}>\n 4. Direct captureException\n </Button>\n <Button variant=\"outlined\" color=\"error\" size=\"small\" onClick={triggerTypeError}>\n 5. TypeError (null reference)\n </Button>\n <Button variant=\"outlined\" color=\"warning\" size=\"small\" onClick={triggerUnhandledRejection}>\n 6. Unhandled promise rejection\n </Button>\n <Button variant=\"outlined\" color=\"warning\" size=\"small\" onClick={triggerNetworkError}>\n 7. Network error (failed fetch)\n </Button>\n <Button variant=\"outlined\" color=\"error\" size=\"small\" onClick={triggerDOMException}>\n 8. DOMException\n </Button>\n </Stack>\n )\n}\n\nexport default ErrorTestButtons\n","import { alpha, darken, lighten, PaletteColor, PaletteMode, Theme } from '@mui/material'\n\nimport type { ClientStyleProfile } from '../../core'\nimport { ClientConfig } from '../../core/types/AppData'\n\nconst TYPOGRAPHY_VARIANTS = [\n 'fontFamily',\n 'h1',\n 'h2',\n 'h3',\n 'body1',\n 'body2',\n 'button',\n 'caption',\n 'subtitle1',\n 'subtitle2',\n 'tiny',\n] as const\n\nconst PALETTE_CONFIG = [\n { key: 'primary', light: 'primary_color', dark: 'primary_color_dark' },\n { key: 'secondary', light: 'neutral_color', dark: 'neutral_color_dark' },\n { key: 'error', light: 'error_color', dark: 'error_color_dark' },\n { key: 'warning', light: 'warning_color', dark: 'warning_color_dark' },\n { key: 'info', light: 'info_color', dark: 'info_color_dark' },\n { key: 'success', light: 'success_color', dark: 'success_color_dark' },\n] as const\n\nexport const getClientPaletteOptions = (\n clientStyleProfile: ClientStyleProfile,\n mode: PaletteMode,\n): Record<string, string> => {\n const isDark = mode === 'dark'\n const options: Record<string, string> = {}\n\n for (const { key, light, dark } of PALETTE_CONFIG) {\n const color = clientStyleProfile?.[isDark ? dark : light] as string | undefined\n if (color) options[key] = color\n }\n\n return options\n}\n\nexport const getClientTheme = (\n theme: Theme,\n clientStyleProfile: ClientStyleProfile,\n clientConfig?: ClientConfig,\n) => {\n const isDark = theme.palette.mode === 'dark'\n const font =\n (clientConfig?.master?.style?.font_name || clientStyleProfile?.system_font) ??\n theme.typography.fontFamily\n\n const generatePalette = (color: string | undefined, defaultColor: PaletteColor) =>\n color\n ? {\n lighter: lighten(color, 0.5),\n light: lighten(color, 0.25),\n main: color,\n dark: darken(color, 0.25),\n darker: darken(color, 0.5),\n }\n : defaultColor\n\n const palette = Object.fromEntries(\n PALETTE_CONFIG.map(({ key, light, dark }) => [\n key,\n generatePalette(\n clientStyleProfile?.[isDark ? dark : light] as string | undefined,\n theme.palette[key],\n ),\n ]),\n )\n\n const typography = Object.fromEntries(\n TYPOGRAPHY_VARIANTS.map((variant) => [\n variant,\n variant === 'fontFamily' ? font : { fontFamily: font },\n ]),\n )\n\n const baseComponents = {\n MuiTabs: {\n styleOverrides: {\n indicator: { backgroundColor: palette.primary.light },\n },\n },\n MuiPickersCalendarHeader: {\n styleOverrides: {\n switchViewButton: {\n color: palette.primary.lighter,\n '&:hover': { backgroundColor: alpha(palette.primary.light, 0.1) },\n },\n },\n },\n }\n\n const buttonRadius = clientStyleProfile?.button_corner_radius\n const cardRadius = clientStyleProfile?.card_corner_radius\n\n const components = {\n ...baseComponents,\n ...(buttonRadius && {\n MuiButton: {\n styleOverrides: {\n root: { borderRadius: `${buttonRadius}px`, textTransform: 'none' },\n },\n },\n MuiIconButton: {\n styleOverrides: {\n root: {\n borderRadius: `${buttonRadius}px`,\n minWidth: buttonRadius,\n minHeight: buttonRadius,\n },\n },\n },\n MuiToggleButton: {\n styleOverrides: {\n root: { borderRadius: `${buttonRadius}px`, textTransform: 'none' },\n },\n },\n }),\n ...(cardRadius && {\n MuiCard: {\n styleOverrides: { root: { borderRadius: `${cardRadius}px` } },\n },\n }),\n ...(cardRadius && {\n MuiPaper: {\n styleOverrides: {\n rounded: { borderRadius: `${cardRadius}px` },\n },\n },\n }),\n }\n\n return { typography, palette, components }\n}\n"],"names":["RecurrenceTypes","usePrevious","value","ref","useRef","useEffect","RECURRENCE_COPY","LOADING_STATUS","MultiSegmentDonut","hasGap","segments","size","DEFAULT_DONUT_SIZE","strokeWidth","DEFAULT_STROKE_WIDTH","children","styles","getStyles","radius","halfSize","offset","length","jsxs","jsx","segment","index","css","ErrorTestButtons","globalStore","useGlobalStore","Stack","Typography","Button","origApi","TYPOGRAPHY_VARIANTS","PALETTE_CONFIG","getClientPaletteOptions","clientStyleProfile","mode","isDark","options","key","light","dark","color","getClientTheme","theme","clientConfig","font","generatePalette","defaultColor","lighten","darken","palette","typography","variant","baseComponents","alpha","buttonRadius","cardRadius","components"],"mappings":"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"}
|