@burdenoff/microfe-brainyrich 2026.828.1 → 2026.830.1

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.
Files changed (39) hide show
  1. package/dist/brainyrich/BrainyRichRoot.d.ts.map +1 -1
  2. package/dist/brainyrich/BrainyRichRoot.js +59 -59
  3. package/dist/brainyrich/BrainyRichRoot.js.map +1 -1
  4. package/dist/brainyrich/components/viz.d.ts.map +1 -1
  5. package/dist/brainyrich/components/viz.js +149 -148
  6. package/dist/brainyrich/components/viz.js.map +1 -1
  7. package/dist/brainyrich/hooks/useTr.d.ts +17 -0
  8. package/dist/brainyrich/hooks/useTr.d.ts.map +1 -0
  9. package/dist/brainyrich/hooks/useTr.js +14 -0
  10. package/dist/brainyrich/hooks/useTr.js.map +1 -0
  11. package/dist/brainyrich/pages/AiAssistantPage.js +192 -192
  12. package/dist/brainyrich/pages/AiAssistantPage.js.map +1 -1
  13. package/dist/brainyrich/pages/AnalyticsPage.d.ts.map +1 -1
  14. package/dist/brainyrich/pages/AnalyticsPage.js +253 -252
  15. package/dist/brainyrich/pages/AnalyticsPage.js.map +1 -1
  16. package/dist/brainyrich/pages/DashboardPage.js +115 -115
  17. package/dist/brainyrich/pages/DashboardPage.js.map +1 -1
  18. package/dist/brainyrich/pages/FamilyPage.js +59 -59
  19. package/dist/brainyrich/pages/FamilyPage.js.map +1 -1
  20. package/dist/brainyrich/pages/GoalsPage.js +285 -285
  21. package/dist/brainyrich/pages/GoalsPage.js.map +1 -1
  22. package/dist/brainyrich/pages/InvestmentsPage.js +18 -18
  23. package/dist/brainyrich/pages/InvestmentsPage.js.map +1 -1
  24. package/dist/brainyrich/pages/PortfoliosPage.d.ts.map +1 -1
  25. package/dist/brainyrich/pages/PortfoliosPage.js +477 -471
  26. package/dist/brainyrich/pages/PortfoliosPage.js.map +1 -1
  27. package/dist/brainyrich/pages/ReportsPage.js +52 -52
  28. package/dist/brainyrich/pages/ReportsPage.js.map +1 -1
  29. package/dist/brainyrich/pages/RiskPage.d.ts.map +1 -1
  30. package/dist/brainyrich/pages/RiskPage.js +272 -271
  31. package/dist/brainyrich/pages/RiskPage.js.map +1 -1
  32. package/dist/brainyrich/pages/TaxPage.d.ts.map +1 -1
  33. package/dist/brainyrich/pages/TaxPage.js +198 -197
  34. package/dist/brainyrich/pages/TaxPage.js.map +1 -1
  35. package/dist/brainyrich/pages/_shared.d.ts.map +1 -1
  36. package/dist/brainyrich/pages/_shared.js +84 -82
  37. package/dist/brainyrich/pages/_shared.js.map +1 -1
  38. package/dist/brainyrich/types/bra.d.ts.map +1 -1
  39. package/package.json +1 -1
@@ -12,29 +12,30 @@ import { BarChart as u } from "../../node_modules/recharts/es6/chart/BarChart.js
12
12
  import { PieChart as d } from "../../node_modules/recharts/es6/chart/PieChart.js";
13
13
  import { AreaChart as f } from "../../node_modules/recharts/es6/chart/AreaChart.js";
14
14
  import { twMerge as p } from "../../node_modules/tailwind-merge/dist/bundle-mjs.js";
15
- import { useEffect as m, useId as h, useMemo as g, useState as _ } from "react";
16
- import { jsx as v, jsxs as y } from "react/jsx-runtime";
15
+ import { useTr as m } from "../hooks/useTr.js";
16
+ import { useEffect as h, useId as g, useMemo as _, useState as v } from "react";
17
+ import { jsx as y, jsxs as b } from "react/jsx-runtime";
17
18
  //#region src/brainyrich/components/viz.tsx
18
- function b(...t) {
19
+ function x(...t) {
19
20
  return p(e(t));
20
21
  }
21
- function x() {
22
+ function S() {
22
23
  return typeof window > "u" || typeof window.matchMedia != "function" ? !1 : window.matchMedia("(prefers-reduced-motion: reduce)").matches;
23
24
  }
24
- function S() {
25
- let [e, t] = _(x);
26
- return m(() => {
25
+ function C() {
26
+ let [e, t] = v(S);
27
+ return h(() => {
27
28
  if (typeof window > "u" || typeof window.matchMedia != "function") return;
28
29
  let e = window.matchMedia("(prefers-reduced-motion: reduce)"), n = (e) => t(e.matches);
29
30
  return e.addEventListener("change", n), () => e.removeEventListener("change", n);
30
31
  }, []), e;
31
32
  }
32
- var C = "brainyrich-viz-motion", w = "\n@keyframes br-fade-in {\n from { opacity: 0; transform: translateY(8px); }\n to { opacity: 1; transform: none; }\n}\n.br-fade-in {\n animation: br-fade-in 240ms var(--motion-easing-standard, ease-out) both;\n}\n";
33
- if (typeof document < "u" && !document.getElementById(C)) {
33
+ var w = "brainyrich-viz-motion", T = "\n@keyframes br-fade-in {\n from { opacity: 0; transform: translateY(8px); }\n to { opacity: 1; transform: none; }\n}\n.br-fade-in {\n animation: br-fade-in 240ms var(--motion-easing-standard, ease-out) both;\n}\n";
34
+ if (typeof document < "u" && !document.getElementById(w)) {
34
35
  let e = document.createElement("style");
35
- e.id = C, e.textContent = w, document.head.appendChild(e);
36
+ e.id = w, e.textContent = T, document.head.appendChild(e);
36
37
  }
37
- var T = {
38
+ var E = {
38
39
  brand: "--color-action-primary-bg",
39
40
  brandBorder: "--color-action-primary-border",
40
41
  grid: "--color-chart-grid",
@@ -53,7 +54,7 @@ var T = {
53
54
  textSecondary: "--color-text-secondary",
54
55
  surface: "--color-bg-elevated",
55
56
  border: "--color-border-subtle"
56
- }, E = [
57
+ }, D = [
57
58
  "--color-action-primary-bg",
58
59
  "--color-chart-2",
59
60
  "--color-chart-3",
@@ -67,12 +68,12 @@ var T = {
67
68
  "--color-chart-11",
68
69
  "--color-chart-12"
69
70
  ];
70
- function D(e) {
71
+ function O(e) {
71
72
  return typeof window > "u" ? `var(${e})` : getComputedStyle(document.documentElement).getPropertyValue(e).trim() || `var(${e})`;
72
73
  }
73
- function O() {
74
- let [e, t] = _(0);
75
- return m(() => {
74
+ function k() {
75
+ let [e, t] = v(0);
76
+ return h(() => {
76
77
  if (typeof window > "u") return;
77
78
  let e = new MutationObserver(() => t((e) => e + 1));
78
79
  return e.observe(document.documentElement, {
@@ -83,8 +84,8 @@ function O() {
83
84
  "style"
84
85
  ]
85
86
  }), () => e.disconnect();
86
- }, []), g(() => {
87
- let e = Object.fromEntries(Object.keys(T).map((e) => [e, D(T[e])])), t = E.map(D), n = (t) => {
87
+ }, []), _(() => {
88
+ let e = Object.fromEntries(Object.keys(E).map((e) => [e, O(E[e])])), t = D.map(O), n = (t) => {
88
89
  switch (t) {
89
90
  case "brand":
90
91
  case "primary": return e.brand;
@@ -109,8 +110,8 @@ function O() {
109
110
  };
110
111
  }, [e]);
111
112
  }
112
- function k() {
113
- let e = O();
113
+ function A() {
114
+ let e = k();
114
115
  return {
115
116
  wrapper: {
116
117
  background: e.surface,
@@ -119,7 +120,7 @@ function k() {
119
120
  padding: "8px 12px",
120
121
  color: e.textPrimary,
121
122
  fontSize: 12,
122
- boxShadow: "var(--shadow-pop, 0 8px 24px rgba(0,0,0,0.35))"
123
+ boxShadow: "var(--shadow-pop)"
123
124
  },
124
125
  label: {
125
126
  color: e.textSecondary,
@@ -128,20 +129,20 @@ function k() {
128
129
  }
129
130
  };
130
131
  }
131
- function A({ active: e, payload: t, label: n, valueFormatter: r }) {
132
- let i = k();
133
- return !e || !t || t.length === 0 ? null : /* @__PURE__ */ y("div", {
132
+ function j({ active: e, payload: t, label: n, valueFormatter: r }) {
133
+ let i = A();
134
+ return !e || !t || t.length === 0 ? null : /* @__PURE__ */ b("div", {
134
135
  style: i.wrapper,
135
136
  role: "tooltip",
136
- children: [n !== void 0 && n !== "" ? /* @__PURE__ */ v("div", {
137
+ children: [n !== void 0 && n !== "" ? /* @__PURE__ */ y("div", {
137
138
  style: i.label,
138
139
  children: n
139
140
  }) : null, t.map((e, t) => {
140
141
  let n = typeof e.value == "number" ? e.value : Number(e.value), a = r && Number.isFinite(n) ? r(n) : String(e.value ?? "");
141
- return /* @__PURE__ */ y("div", {
142
+ return /* @__PURE__ */ b("div", {
142
143
  className: "flex items-center gap-2",
143
144
  children: [
144
- e.color ? /* @__PURE__ */ v("span", {
145
+ e.color ? /* @__PURE__ */ y("span", {
145
146
  "aria-hidden": "true",
146
147
  style: {
147
148
  width: 8,
@@ -151,11 +152,11 @@ function A({ active: e, payload: t, label: n, valueFormatter: r }) {
151
152
  display: "inline-block"
152
153
  }
153
154
  }) : null,
154
- e.name ? /* @__PURE__ */ y("span", {
155
+ e.name ? /* @__PURE__ */ b("span", {
155
156
  style: { color: i.label.color },
156
157
  children: [e.name, ":"]
157
158
  }) : null,
158
- /* @__PURE__ */ v("span", {
159
+ /* @__PURE__ */ y("span", {
159
160
  style: { fontWeight: 600 },
160
161
  children: a
161
162
  })
@@ -164,43 +165,43 @@ function A({ active: e, payload: t, label: n, valueFormatter: r }) {
164
165
  })]
165
166
  });
166
167
  }
167
- function j({ children: e, index: t = 0, delay: n = 0, className: r, as: i = "div" }) {
168
- return S() ? /* @__PURE__ */ v(i, {
168
+ function M({ children: e, index: t = 0, delay: n = 0, className: r, as: i = "div" }) {
169
+ return C() ? /* @__PURE__ */ y(i, {
169
170
  className: r,
170
171
  children: e
171
- }) : /* @__PURE__ */ v(i, {
172
- className: b("br-fade-in", r),
172
+ }) : /* @__PURE__ */ y(i, {
173
+ className: x("br-fade-in", r),
173
174
  style: { animationDelay: `${n + t * .04}s` },
174
175
  children: e
175
176
  });
176
177
  }
177
- function M({ children: e, className: t, glow: n = !1 }) {
178
- return /* @__PURE__ */ v("div", {
179
- className: b("rounded-2xl border p-5", "border-[var(--color-border-glass,var(--color-border-subtle))]", "bg-[var(--color-surface-glass,var(--color-bg-elevated))]", "shadow-[var(--shadow-float,var(--shadow-elevation-3))]", "backdrop-blur-[var(--blur-glass,12px)]", n && "ring-1 ring-[var(--color-action-primary-border)]/40", t),
178
+ function N({ children: e, className: t, glow: n = !1 }) {
179
+ return /* @__PURE__ */ y("div", {
180
+ className: x("rounded-2xl border p-5", "border-[var(--color-border-glass,var(--color-border-subtle))]", "bg-[var(--color-surface-glass,var(--color-bg-elevated))]", "shadow-[var(--shadow-float,var(--shadow-elevation-3))]", "backdrop-blur-[var(--blur-glass,12px)]", n && "ring-1 ring-[var(--color-action-primary-border)]/40", t),
180
181
  children: e
181
182
  });
182
183
  }
183
- function N({ data: e, centerLabel: a, centerValue: o, legend: s = !0, height: c = 220, valueFormatter: l }) {
184
- let u = O(), f = S(), p = e.filter((e) => Number.isFinite(e.value) && e.value > 0);
185
- if (p.length === 0) return /* @__PURE__ */ v("p", {
184
+ function P({ data: e, centerLabel: a, centerValue: o, legend: s = !0, height: c = 220, valueFormatter: l }) {
185
+ let u = k(), f = C(), p = m(), h = e.filter((e) => Number.isFinite(e.value) && e.value > 0);
186
+ if (h.length === 0) return /* @__PURE__ */ y("p", {
186
187
  className: "text-sm text-text-secondary",
187
- children: "No data."
188
+ children: p("brainyrich.common.noData", "No data.")
188
189
  });
189
- let m = (e, t) => e.tone ? u.tone(e.tone) : u.palette[t % u.palette.length];
190
- return /* @__PURE__ */ y("div", {
190
+ let g = (e, t) => e.tone ? u.tone(e.tone) : u.palette[t % u.palette.length];
191
+ return /* @__PURE__ */ b("div", {
191
192
  className: "flex flex-col items-center gap-4 sm:flex-row sm:items-center",
192
- children: [/* @__PURE__ */ y("div", {
193
+ children: [/* @__PURE__ */ b("div", {
193
194
  className: "relative",
194
195
  style: {
195
196
  width: "100%",
196
197
  maxWidth: 260,
197
198
  height: c
198
199
  },
199
- children: [/* @__PURE__ */ v(n, {
200
+ children: [/* @__PURE__ */ y(n, {
200
201
  width: "100%",
201
202
  height: "100%",
202
- children: /* @__PURE__ */ y(d, { children: [/* @__PURE__ */ v(i, {
203
- data: p,
203
+ children: /* @__PURE__ */ b(d, { children: [/* @__PURE__ */ y(i, {
204
+ data: h,
204
205
  dataKey: "value",
205
206
  nameKey: "label",
206
207
  innerRadius: "62%",
@@ -209,34 +210,34 @@ function N({ data: e, centerLabel: a, centerValue: o, legend: s = !0, height: c
209
210
  stroke: "transparent",
210
211
  isAnimationActive: !f,
211
212
  animationDuration: 250,
212
- children: p.map((e, t) => /* @__PURE__ */ v(r, { fill: m(e, t) }, e.label))
213
- }), /* @__PURE__ */ v(t, { content: /* @__PURE__ */ v(A, { valueFormatter: l }) })] })
214
- }), o || a ? /* @__PURE__ */ y("div", {
213
+ children: h.map((e, t) => /* @__PURE__ */ y(r, { fill: g(e, t) }, e.label))
214
+ }), /* @__PURE__ */ y(t, { content: /* @__PURE__ */ y(j, { valueFormatter: l }) })] })
215
+ }), o || a ? /* @__PURE__ */ b("div", {
215
216
  className: "pointer-events-none absolute inset-0 flex flex-col items-center justify-center",
216
- children: [o ? /* @__PURE__ */ v("span", {
217
+ children: [o ? /* @__PURE__ */ y("span", {
217
218
  className: "text-xl font-semibold text-text-primary",
218
219
  children: o
219
- }) : null, a ? /* @__PURE__ */ v("span", {
220
+ }) : null, a ? /* @__PURE__ */ y("span", {
220
221
  className: "text-xs text-text-secondary",
221
222
  children: a
222
223
  }) : null]
223
224
  }) : null]
224
- }), s ? /* @__PURE__ */ v("ul", {
225
+ }), s ? /* @__PURE__ */ y("ul", {
225
226
  className: "grid flex-1 grid-cols-1 gap-2 sm:grid-cols-2",
226
227
  "aria-label": "Legend",
227
- children: p.map((e, t) => /* @__PURE__ */ y("li", {
228
+ children: h.map((e, t) => /* @__PURE__ */ b("li", {
228
229
  className: "flex items-center gap-2 text-xs",
229
230
  children: [
230
- /* @__PURE__ */ v("span", {
231
+ /* @__PURE__ */ y("span", {
231
232
  "aria-hidden": "true",
232
233
  className: "size-2.5 shrink-0 rounded-full",
233
- style: { background: m(e, t) }
234
+ style: { background: g(e, t) }
234
235
  }),
235
- /* @__PURE__ */ v("span", {
236
+ /* @__PURE__ */ y("span", {
236
237
  className: "truncate text-text-secondary",
237
238
  children: e.label
238
239
  }),
239
- /* @__PURE__ */ v("span", {
240
+ /* @__PURE__ */ y("span", {
240
241
  className: "ml-auto font-medium text-text-primary",
241
242
  children: l ? l(e.value) : e.value
242
243
  })
@@ -245,9 +246,9 @@ function N({ data: e, centerLabel: a, centerValue: o, legend: s = !0, height: c
245
246
  }) : null]
246
247
  });
247
248
  }
248
- function P({ data: e, tone: t = "brand", height: r = 40, className: i }) {
249
- let a = O().tone(t), o = e.filter((e) => Number.isFinite(e)), c = `spark-${h().replace(/:/g, "")}`;
250
- if (o.length < 2) return /* @__PURE__ */ v("div", {
249
+ function F({ data: e, tone: t = "brand", height: r = 40, className: i }) {
250
+ let a = k().tone(t), o = e.filter((e) => Number.isFinite(e)), c = `spark-${g().replace(/:/g, "")}`;
251
+ if (o.length < 2) return /* @__PURE__ */ y("div", {
251
252
  className: i,
252
253
  style: { height: r },
253
254
  "aria-hidden": "true"
@@ -256,17 +257,17 @@ function P({ data: e, tone: t = "brand", height: r = 40, className: i }) {
256
257
  x: t,
257
258
  y: e
258
259
  }));
259
- return /* @__PURE__ */ v("div", {
260
+ return /* @__PURE__ */ y("div", {
260
261
  className: i,
261
262
  style: {
262
263
  width: "100%",
263
264
  height: r
264
265
  },
265
266
  "aria-hidden": "true",
266
- children: /* @__PURE__ */ v(n, {
267
+ children: /* @__PURE__ */ y(n, {
267
268
  width: "100%",
268
269
  height: "100%",
269
- children: /* @__PURE__ */ y(f, {
270
+ children: /* @__PURE__ */ b(f, {
270
271
  data: l,
271
272
  margin: {
272
273
  top: 2,
@@ -274,22 +275,22 @@ function P({ data: e, tone: t = "brand", height: r = 40, className: i }) {
274
275
  bottom: 0,
275
276
  left: 0
276
277
  },
277
- children: [/* @__PURE__ */ v("defs", { children: /* @__PURE__ */ y("linearGradient", {
278
+ children: [/* @__PURE__ */ y("defs", { children: /* @__PURE__ */ b("linearGradient", {
278
279
  id: c,
279
280
  x1: "0",
280
281
  y1: "0",
281
282
  x2: "0",
282
283
  y2: "1",
283
- children: [/* @__PURE__ */ v("stop", {
284
+ children: [/* @__PURE__ */ y("stop", {
284
285
  offset: "0%",
285
286
  stopColor: a,
286
287
  stopOpacity: .28
287
- }), /* @__PURE__ */ v("stop", {
288
+ }), /* @__PURE__ */ y("stop", {
288
289
  offset: "100%",
289
290
  stopColor: a,
290
291
  stopOpacity: 0
291
292
  })]
292
- }) }), /* @__PURE__ */ v(s, {
293
+ }) }), /* @__PURE__ */ y(s, {
293
294
  type: "monotone",
294
295
  dataKey: "y",
295
296
  stroke: a,
@@ -302,12 +303,12 @@ function P({ data: e, tone: t = "brand", height: r = 40, className: i }) {
302
303
  })
303
304
  });
304
305
  }
305
- function F({ value: e, label: t, tone: n = "brand", size: r = 120, strokeWidth: i = 10 }) {
306
- let a = O(), o = S(), s = Math.max(0, Math.min(100, Number.isFinite(e) ? e : 0)), c = (r - i) / 2, l = 2 * Math.PI * c, u = s / 100 * l, d = a.tone(n), f = l - u, [p, h] = _(o ? f : l);
307
- return m(() => {
308
- let e = requestAnimationFrame(() => h(f));
306
+ function I({ value: e, label: t, tone: n = "brand", size: r = 120, strokeWidth: i = 10 }) {
307
+ let a = k(), o = C(), s = Math.max(0, Math.min(100, Number.isFinite(e) ? e : 0)), c = (r - i) / 2, l = 2 * Math.PI * c, u = s / 100 * l, d = a.tone(n), f = l - u, [p, m] = v(o ? f : l);
308
+ return h(() => {
309
+ let e = requestAnimationFrame(() => m(f));
309
310
  return () => cancelAnimationFrame(e);
310
- }, [f]), /* @__PURE__ */ y("div", {
311
+ }, [f]), /* @__PURE__ */ b("div", {
311
312
  className: "relative inline-flex items-center justify-center",
312
313
  style: {
313
314
  width: r,
@@ -318,18 +319,18 @@ function F({ value: e, label: t, tone: n = "brand", size: r = 120, strokeWidth:
318
319
  "aria-valuemin": 0,
319
320
  "aria-valuemax": 100,
320
321
  "aria-label": t ?? "Progress",
321
- children: [/* @__PURE__ */ y("svg", {
322
+ children: [/* @__PURE__ */ b("svg", {
322
323
  width: r,
323
324
  height: r,
324
325
  className: "-rotate-90",
325
- children: [/* @__PURE__ */ v("circle", {
326
+ children: [/* @__PURE__ */ y("circle", {
326
327
  cx: r / 2,
327
328
  cy: r / 2,
328
329
  r: c,
329
330
  fill: "none",
330
331
  stroke: a.border,
331
332
  strokeWidth: i
332
- }), /* @__PURE__ */ v("circle", {
333
+ }), /* @__PURE__ */ y("circle", {
333
334
  cx: r / 2,
334
335
  cy: r / 2,
335
336
  r: c,
@@ -341,39 +342,39 @@ function F({ value: e, label: t, tone: n = "brand", size: r = 120, strokeWidth:
341
342
  strokeDashoffset: p,
342
343
  style: { transition: o ? "none" : "stroke-dashoffset 600ms ease" }
343
344
  })]
344
- }), /* @__PURE__ */ y("div", {
345
+ }), /* @__PURE__ */ b("div", {
345
346
  className: "absolute inset-0 flex flex-col items-center justify-center",
346
- children: [/* @__PURE__ */ y("span", {
347
+ children: [/* @__PURE__ */ b("span", {
347
348
  className: "text-lg font-semibold text-text-primary",
348
349
  children: [Math.round(s), "%"]
349
- }), t ? /* @__PURE__ */ v("span", {
350
+ }), t ? /* @__PURE__ */ y("span", {
350
351
  className: "text-[10px] text-text-secondary",
351
352
  children: t
352
353
  }) : null]
353
354
  })]
354
355
  });
355
356
  }
356
- function I({ data: e, height: r = 240, valueFormatter: i }) {
357
- let s = O(), d = S(), f = e.filter((e) => Number.isFinite(e.inflow) && Number.isFinite(e.outflow));
358
- if (f.length === 0) return /* @__PURE__ */ v("p", {
357
+ function L({ data: e, height: r = 240, valueFormatter: i }) {
358
+ let s = k(), d = C(), f = m(), p = e.filter((e) => Number.isFinite(e.inflow) && Number.isFinite(e.outflow));
359
+ if (p.length === 0) return /* @__PURE__ */ y("p", {
359
360
  className: "text-sm text-text-secondary",
360
- children: "No cashflow data."
361
+ children: f("brainyrich.common.noCashflowData", "No cashflow data.")
361
362
  });
362
- let p = f.map((e) => ({
363
+ let h = p.map((e) => ({
363
364
  label: e.label,
364
365
  inflow: Math.abs(e.inflow),
365
366
  outflow: -Math.abs(e.outflow)
366
367
  }));
367
- return /* @__PURE__ */ v("div", {
368
+ return /* @__PURE__ */ y("div", {
368
369
  style: {
369
370
  width: "100%",
370
371
  height: r
371
372
  },
372
- children: /* @__PURE__ */ v(n, {
373
+ children: /* @__PURE__ */ y(n, {
373
374
  width: "100%",
374
375
  height: "100%",
375
- children: /* @__PURE__ */ y(u, {
376
- data: p,
376
+ children: /* @__PURE__ */ b(u, {
377
+ data: h,
377
378
  margin: {
378
379
  top: 8,
379
380
  right: 8,
@@ -382,7 +383,7 @@ function I({ data: e, height: r = 240, valueFormatter: i }) {
382
383
  },
383
384
  stackOffset: "sign",
384
385
  children: [
385
- /* @__PURE__ */ v(c, {
386
+ /* @__PURE__ */ y(c, {
386
387
  dataKey: "label",
387
388
  tick: {
388
389
  fill: s.textSecondary,
@@ -391,7 +392,7 @@ function I({ data: e, height: r = 240, valueFormatter: i }) {
391
392
  axisLine: { stroke: s.grid },
392
393
  tickLine: !1
393
394
  }),
394
- /* @__PURE__ */ v(l, {
395
+ /* @__PURE__ */ y(l, {
395
396
  tick: {
396
397
  fill: s.textSecondary,
397
398
  fontSize: 11
@@ -401,18 +402,18 @@ function I({ data: e, height: r = 240, valueFormatter: i }) {
401
402
  width: 44,
402
403
  tickFormatter: (e) => i ? i(Math.abs(e)) : String(Math.abs(e))
403
404
  }),
404
- /* @__PURE__ */ v(o, {
405
+ /* @__PURE__ */ y(o, {
405
406
  y: 0,
406
407
  stroke: s.grid
407
408
  }),
408
- /* @__PURE__ */ v(t, {
409
+ /* @__PURE__ */ y(t, {
409
410
  cursor: {
410
411
  fill: s.border,
411
412
  opacity: .25
412
413
  },
413
- content: /* @__PURE__ */ v(A, { valueFormatter: (e) => i ? i(Math.abs(e)) : String(Math.abs(e)) })
414
+ content: /* @__PURE__ */ y(j, { valueFormatter: (e) => i ? i(Math.abs(e)) : String(Math.abs(e)) })
414
415
  }),
415
- /* @__PURE__ */ v(a, {
416
+ /* @__PURE__ */ y(a, {
416
417
  dataKey: "inflow",
417
418
  name: "Inflow",
418
419
  fill: s.positive,
@@ -425,7 +426,7 @@ function I({ data: e, height: r = 240, valueFormatter: i }) {
425
426
  isAnimationActive: !d,
426
427
  animationDuration: 250
427
428
  }),
428
- /* @__PURE__ */ v(a, {
429
+ /* @__PURE__ */ y(a, {
429
430
  dataKey: "outflow",
430
431
  name: "Outflow",
431
432
  fill: s.negative,
@@ -443,21 +444,21 @@ function I({ data: e, height: r = 240, valueFormatter: i }) {
443
444
  })
444
445
  });
445
446
  }
446
- function L({ data: e, target: r, tone: i = "brand", height: a = 200, valueFormatter: u }) {
447
- let d = O(), p = S(), m = d.tone(i), g = e.filter((e) => Number.isFinite(e.y)), _ = `area-${h().replace(/:/g, "")}`;
448
- return g.length < 2 ? /* @__PURE__ */ v("p", {
447
+ function R({ data: e, target: r, tone: i = "brand", height: a = 200, valueFormatter: u }) {
448
+ let d = k(), p = C(), h = m(), _ = d.tone(i), v = e.filter((e) => Number.isFinite(e.y)), x = `area-${g().replace(/:/g, "")}`;
449
+ return v.length < 2 ? /* @__PURE__ */ y("p", {
449
450
  className: "text-sm text-text-secondary",
450
- children: "Not enough data to chart."
451
- }) : /* @__PURE__ */ v("div", {
451
+ children: h("brainyrich.common.notEnoughData", "Not enough data to chart.")
452
+ }) : /* @__PURE__ */ y("div", {
452
453
  style: {
453
454
  width: "100%",
454
455
  height: a
455
456
  },
456
- children: /* @__PURE__ */ v(n, {
457
+ children: /* @__PURE__ */ y(n, {
457
458
  width: "100%",
458
459
  height: "100%",
459
- children: /* @__PURE__ */ y(f, {
460
- data: g,
460
+ children: /* @__PURE__ */ b(f, {
461
+ data: v,
461
462
  margin: {
462
463
  top: 8,
463
464
  right: 8,
@@ -465,23 +466,23 @@ function L({ data: e, target: r, tone: i = "brand", height: a = 200, valueFormat
465
466
  left: 8
466
467
  },
467
468
  children: [
468
- /* @__PURE__ */ v("defs", { children: /* @__PURE__ */ y("linearGradient", {
469
- id: _,
469
+ /* @__PURE__ */ y("defs", { children: /* @__PURE__ */ b("linearGradient", {
470
+ id: x,
470
471
  x1: "0",
471
472
  y1: "0",
472
473
  x2: "0",
473
474
  y2: "1",
474
- children: [/* @__PURE__ */ v("stop", {
475
+ children: [/* @__PURE__ */ y("stop", {
475
476
  offset: "0%",
476
- stopColor: m,
477
+ stopColor: _,
477
478
  stopOpacity: .3
478
- }), /* @__PURE__ */ v("stop", {
479
+ }), /* @__PURE__ */ y("stop", {
479
480
  offset: "100%",
480
- stopColor: m,
481
+ stopColor: _,
481
482
  stopOpacity: .02
482
483
  })]
483
484
  }) }),
484
- /* @__PURE__ */ v(c, {
485
+ /* @__PURE__ */ y(c, {
485
486
  dataKey: "x",
486
487
  tick: {
487
488
  fill: d.textSecondary,
@@ -490,7 +491,7 @@ function L({ data: e, target: r, tone: i = "brand", height: a = 200, valueFormat
490
491
  axisLine: { stroke: d.grid },
491
492
  tickLine: !1
492
493
  }),
493
- /* @__PURE__ */ v(l, {
494
+ /* @__PURE__ */ y(l, {
494
495
  tick: {
495
496
  fill: d.textSecondary,
496
497
  fontSize: 11
@@ -500,8 +501,8 @@ function L({ data: e, target: r, tone: i = "brand", height: a = 200, valueFormat
500
501
  width: 44,
501
502
  tickFormatter: (e) => u ? u(e) : String(e)
502
503
  }),
503
- /* @__PURE__ */ v(t, { content: /* @__PURE__ */ v(A, { valueFormatter: u }) }),
504
- r !== void 0 && Number.isFinite(r) ? /* @__PURE__ */ v(o, {
504
+ /* @__PURE__ */ y(t, { content: /* @__PURE__ */ y(j, { valueFormatter: u }) }),
505
+ r !== void 0 && Number.isFinite(r) ? /* @__PURE__ */ y(o, {
505
506
  y: r,
506
507
  stroke: d.textSecondary,
507
508
  strokeDasharray: "5 4",
@@ -512,12 +513,12 @@ function L({ data: e, target: r, tone: i = "brand", height: a = 200, valueFormat
512
513
  fontSize: 10
513
514
  }
514
515
  }) : null,
515
- /* @__PURE__ */ v(s, {
516
+ /* @__PURE__ */ y(s, {
516
517
  type: "monotone",
517
518
  dataKey: "y",
518
- stroke: m,
519
+ stroke: _,
519
520
  strokeWidth: 2,
520
- fill: `url(#${_})`,
521
+ fill: `url(#${x})`,
521
522
  isAnimationActive: !p,
522
523
  animationDuration: 250,
523
524
  dot: !1
@@ -527,45 +528,45 @@ function L({ data: e, target: r, tone: i = "brand", height: a = 200, valueFormat
527
528
  })
528
529
  });
529
530
  }
530
- var R = /reject|cancel|abandon|decline|fail/i;
531
- function z({ steps: e, current: t, className: n }) {
532
- let r = R.test(t), i = e.findIndex((e) => e.toLowerCase() === t.toLowerCase());
533
- return /* @__PURE__ */ y("ol", {
534
- className: b("flex w-full items-center overflow-x-auto", n),
531
+ var z = /reject|cancel|abandon|decline|fail/i;
532
+ function B({ steps: e, current: t, className: n }) {
533
+ let r = z.test(t), i = e.findIndex((e) => e.toLowerCase() === t.toLowerCase());
534
+ return /* @__PURE__ */ b("ol", {
535
+ className: x("flex w-full items-center overflow-x-auto", n),
535
536
  "aria-label": "Lifecycle progress",
536
537
  children: [e.map((t, n) => {
537
538
  let a = n === e.length - 1, o = i >= 0 && n < i, s = i >= 0 && n === i && !r, c = o ? "done" : s ? "active" : "upcoming";
538
- return /* @__PURE__ */ y("li", {
539
+ return /* @__PURE__ */ b("li", {
539
540
  className: "flex min-w-fit flex-1 items-center",
540
541
  "aria-current": s ? "step" : void 0,
541
- children: [/* @__PURE__ */ y("div", {
542
+ children: [/* @__PURE__ */ b("div", {
542
543
  className: "flex flex-col items-center gap-1.5 px-1",
543
- children: [/* @__PURE__ */ v("span", {
544
- className: b("flex size-7 items-center justify-center rounded-full border text-xs font-semibold transition-colors", c === "done" && "border-transparent bg-[var(--color-action-primary-bg)] text-[var(--color-action-primary-text)]", c === "active" && "border-[var(--color-action-primary-border)] bg-[var(--color-action-primary-bg)]/15 text-[var(--color-action-primary-text)]", c === "upcoming" && "border-border-subtle bg-bg-sunken text-text-secondary"),
544
+ children: [/* @__PURE__ */ y("span", {
545
+ className: x("flex size-7 items-center justify-center rounded-full border text-xs font-semibold transition-colors", c === "done" && "border-transparent bg-[var(--color-action-primary-bg)] text-[var(--color-action-primary-text)]", c === "active" && "border-[var(--color-action-primary-border)] bg-[var(--color-action-primary-bg)]/15 text-[var(--color-action-primary-text)]", c === "upcoming" && "border-border-subtle bg-bg-sunken text-text-secondary"),
545
546
  "aria-hidden": "true",
546
547
  children: o ? "✓" : n + 1
547
- }), /* @__PURE__ */ v("span", {
548
- className: b("whitespace-nowrap text-[11px]", s ? "font-medium text-text-primary" : "text-text-secondary"),
548
+ }), /* @__PURE__ */ y("span", {
549
+ className: x("whitespace-nowrap text-[11px]", s ? "font-medium text-text-primary" : "text-text-secondary"),
549
550
  children: t
550
551
  })]
551
- }), a ? null : /* @__PURE__ */ v("span", {
552
+ }), a ? null : /* @__PURE__ */ y("span", {
552
553
  "aria-hidden": "true",
553
- className: b("mx-1 h-0.5 flex-1 rounded-full", o ? "bg-[var(--color-action-primary-bg)]" : "bg-border-subtle")
554
+ className: x("mx-1 h-0.5 flex-1 rounded-full", o ? "bg-[var(--color-action-primary-bg)]" : "bg-border-subtle")
554
555
  })]
555
556
  }, t);
556
- }), r ? /* @__PURE__ */ y("li", {
557
+ }), r ? /* @__PURE__ */ b("li", {
557
558
  className: "ml-2 flex min-w-fit items-center gap-1.5",
558
559
  "aria-current": "step",
559
- children: [/* @__PURE__ */ v("span", {
560
+ children: [/* @__PURE__ */ y("span", {
560
561
  className: "mx-1 h-0.5 w-6 rounded-full bg-status-error-border",
561
562
  "aria-hidden": "true"
562
- }), /* @__PURE__ */ y("div", {
563
+ }), /* @__PURE__ */ b("div", {
563
564
  className: "flex flex-col items-center gap-1.5 px-1",
564
- children: [/* @__PURE__ */ v("span", {
565
+ children: [/* @__PURE__ */ y("span", {
565
566
  className: "flex size-7 items-center justify-center rounded-full border border-transparent bg-status-error text-xs font-semibold text-status-error-text",
566
567
  "aria-hidden": "true",
567
568
  children: "✕"
568
- }), /* @__PURE__ */ v("span", {
569
+ }), /* @__PURE__ */ y("span", {
569
570
  className: "whitespace-nowrap text-[11px] font-medium text-status-error-text",
570
571
  children: t
571
572
  })]
@@ -573,35 +574,35 @@ function z({ steps: e, current: t, className: n }) {
573
574
  }) : null]
574
575
  });
575
576
  }
576
- function B({ label: e, value: t, delta: n, deltaTone: r, deltaSuffix: i = "%", spark: a, sparkTone: o = "brand", glow: s = !1, icon: c, className: l }) {
577
+ function V({ label: e, value: t, delta: n, deltaTone: r, deltaSuffix: i = "%", spark: a, sparkTone: o = "brand", glow: s = !1, icon: c, className: l }) {
577
578
  let u = r ? r === "positive" : (n ?? 0) > 0, d = r ? r === "negative" : (n ?? 0) < 0, f = u ? "text-status-success-text bg-status-success-bg" : d ? "text-status-error-text bg-status-error-bg" : "text-text-secondary bg-bg-sunken", p = n !== void 0 && n > 0 ? "+" : "";
578
- return /* @__PURE__ */ y("div", {
579
- className: b("group relative overflow-hidden rounded-xl border border-border-subtle bg-bg-surface p-4 transition-shadow", "motion-safe:hover:shadow-[var(--shadow-pop-hover,var(--shadow-elevation-2))]", s && "ring-1 ring-[var(--color-action-primary-border)]/40", l),
579
+ return /* @__PURE__ */ b("div", {
580
+ className: x("group relative overflow-hidden rounded-xl border border-border-subtle bg-bg-surface p-4 transition-shadow", "motion-safe:hover:shadow-[var(--shadow-pop-hover,var(--shadow-elevation-2))]", s && "ring-1 ring-[var(--color-action-primary-border)]/40", l),
580
581
  children: [
581
- s ? /* @__PURE__ */ v("span", {
582
+ s ? /* @__PURE__ */ y("span", {
582
583
  "aria-hidden": "true",
583
584
  className: "pointer-events-none absolute -right-8 -top-8 size-24 rounded-full bg-[var(--color-action-primary-bg)]/15 blur-2xl"
584
585
  }) : null,
585
- /* @__PURE__ */ y("div", {
586
+ /* @__PURE__ */ b("div", {
586
587
  className: "flex items-start justify-between gap-2",
587
- children: [/* @__PURE__ */ v("p", {
588
+ children: [/* @__PURE__ */ y("p", {
588
589
  className: "text-xs text-text-secondary",
589
590
  children: e
590
- }), c ? /* @__PURE__ */ v("span", {
591
+ }), c ? /* @__PURE__ */ y("span", {
591
592
  className: "text-text-secondary",
592
593
  children: c
593
594
  }) : null]
594
595
  }),
595
- /* @__PURE__ */ v("p", {
596
+ /* @__PURE__ */ y("p", {
596
597
  className: "mt-1 text-2xl font-semibold text-text-primary",
597
598
  children: t
598
599
  }),
599
- /* @__PURE__ */ y("div", {
600
+ /* @__PURE__ */ b("div", {
600
601
  className: "mt-2 flex items-center justify-between gap-2",
601
- children: [n !== void 0 && Number.isFinite(n) ? /* @__PURE__ */ y("span", {
602
- className: b("inline-flex items-center gap-0.5 rounded-full px-1.5 py-0.5 text-xs font-medium", f),
602
+ children: [n !== void 0 && Number.isFinite(n) ? /* @__PURE__ */ b("span", {
603
+ className: x("inline-flex items-center gap-0.5 rounded-full px-1.5 py-0.5 text-xs font-medium", f),
603
604
  children: [
604
- /* @__PURE__ */ v("span", {
605
+ /* @__PURE__ */ y("span", {
605
606
  "aria-hidden": "true",
606
607
  children: u ? "▲" : d ? "▼" : "—"
607
608
  }),
@@ -609,9 +610,9 @@ function B({ label: e, value: t, delta: n, deltaTone: r, deltaSuffix: i = "%", s
609
610
  n.toFixed(1),
610
611
  i
611
612
  ]
612
- }) : /* @__PURE__ */ v("span", {}), a && a.length > 1 ? /* @__PURE__ */ v("div", {
613
+ }) : /* @__PURE__ */ y("span", {}), a && a.length > 1 ? /* @__PURE__ */ y("div", {
613
614
  className: "w-20 shrink-0",
614
- children: /* @__PURE__ */ v(P, {
615
+ children: /* @__PURE__ */ y(F, {
615
616
  data: a,
616
617
  tone: o,
617
618
  height: 28
@@ -622,6 +623,6 @@ function B({ label: e, value: t, delta: n, deltaTone: r, deltaSuffix: i = "%", s
622
623
  });
623
624
  }
624
625
  //#endregion
625
- export { N as DonutChart, j as FadeIn, M as GlassCard, z as LifecycleStepper, L as MiniAreaChart, F as ProgressRing, P as Sparkline, B as StatTile, I as TrendBars, S as useReducedMotion, O as useVizColors };
626
+ export { P as DonutChart, M as FadeIn, N as GlassCard, B as LifecycleStepper, R as MiniAreaChart, I as ProgressRing, F as Sparkline, V as StatTile, L as TrendBars, C as useReducedMotion, k as useVizColors };
626
627
 
627
628
  //# sourceMappingURL=viz.js.map