@burdenoff/microfe-brainyrich 2026.706.4 → 2026.713.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 (112) hide show
  1. package/dist/brainyrich/BrainyRichRoot.d.ts +5 -0
  2. package/dist/brainyrich/BrainyRichRoot.d.ts.map +1 -0
  3. package/dist/brainyrich/BrainyRichRoutes.d.ts +2 -0
  4. package/dist/brainyrich/BrainyRichRoutes.d.ts.map +1 -0
  5. package/dist/brainyrich/BrainyRichRoutes.js +27 -15
  6. package/dist/brainyrich/BrainyRichRoutes.js.map +1 -1
  7. package/dist/brainyrich/components/ActorName.d.ts +26 -0
  8. package/dist/brainyrich/components/ActorName.d.ts.map +1 -0
  9. package/dist/brainyrich/components/ConfirmDialog.d.ts +20 -0
  10. package/dist/brainyrich/components/ConfirmDialog.d.ts.map +1 -0
  11. package/dist/brainyrich/components/LoadMore.d.ts +21 -0
  12. package/dist/brainyrich/components/LoadMore.d.ts.map +1 -0
  13. package/dist/brainyrich/components/index.d.ts +11 -0
  14. package/dist/brainyrich/components/index.d.ts.map +1 -0
  15. package/dist/brainyrich/components/notify.d.ts +33 -0
  16. package/dist/brainyrich/components/notify.d.ts.map +1 -0
  17. package/dist/brainyrich/components/pickers.d.ts +63 -0
  18. package/dist/brainyrich/components/pickers.d.ts.map +1 -0
  19. package/dist/brainyrich/components/reuse/CommentThread.d.ts +35 -0
  20. package/dist/brainyrich/components/reuse/CommentThread.d.ts.map +1 -0
  21. package/dist/brainyrich/components/reuse/DocumentsPanel.d.ts +33 -0
  22. package/dist/brainyrich/components/reuse/DocumentsPanel.d.ts.map +1 -0
  23. package/dist/brainyrich/components/reuse/TagField.d.ts +34 -0
  24. package/dist/brainyrich/components/reuse/TagField.d.ts.map +1 -0
  25. package/dist/brainyrich/components/reuse/transport.d.ts +20 -0
  26. package/dist/brainyrich/components/reuse/transport.d.ts.map +1 -0
  27. package/dist/brainyrich/components/viz.d.ts +129 -0
  28. package/dist/brainyrich/components/viz.d.ts.map +1 -0
  29. package/dist/brainyrich/components/viz.js.map +1 -1
  30. package/dist/brainyrich/hooks/useBrainyRichAnalytics.d.ts +17 -0
  31. package/dist/brainyrich/hooks/useBrainyRichAnalytics.d.ts.map +1 -0
  32. package/dist/brainyrich/hooks/useBrainyRichAnalytics.js +24 -0
  33. package/dist/brainyrich/hooks/useBrainyRichAnalytics.js.map +1 -0
  34. package/dist/brainyrich/hooks/useBrainyRichApi.d.ts +2125 -0
  35. package/dist/brainyrich/hooks/useBrainyRichApi.d.ts.map +1 -0
  36. package/dist/brainyrich/hooks/useBrainyRichApi.js +1 -1
  37. package/dist/brainyrich/hooks/useBrainyRichApi.js.map +1 -1
  38. package/dist/brainyrich/index.d.ts +6 -0
  39. package/dist/brainyrich/index.d.ts.map +1 -0
  40. package/dist/brainyrich/index.js +1 -0
  41. package/dist/brainyrich/pages/AccountsPage.d.ts +2 -0
  42. package/dist/brainyrich/pages/AccountsPage.d.ts.map +1 -0
  43. package/dist/brainyrich/pages/AccountsPage.js +608 -593
  44. package/dist/brainyrich/pages/AccountsPage.js.map +1 -1
  45. package/dist/brainyrich/pages/AiAssistantPage.d.ts +2 -0
  46. package/dist/brainyrich/pages/AiAssistantPage.d.ts.map +1 -0
  47. package/dist/brainyrich/pages/AnalyticsPage.d.ts +2 -0
  48. package/dist/brainyrich/pages/AnalyticsPage.d.ts.map +1 -0
  49. package/dist/brainyrich/pages/DashboardPage.d.ts +2 -0
  50. package/dist/brainyrich/pages/DashboardPage.d.ts.map +1 -0
  51. package/dist/brainyrich/pages/DashboardPage.js +264 -256
  52. package/dist/brainyrich/pages/DashboardPage.js.map +1 -1
  53. package/dist/brainyrich/pages/FamilyPage.d.ts +2 -0
  54. package/dist/brainyrich/pages/FamilyPage.d.ts.map +1 -0
  55. package/dist/brainyrich/pages/FamilyPage.js +467 -446
  56. package/dist/brainyrich/pages/FamilyPage.js.map +1 -1
  57. package/dist/brainyrich/pages/GoalsPage.d.ts +2 -0
  58. package/dist/brainyrich/pages/GoalsPage.d.ts.map +1 -0
  59. package/dist/brainyrich/pages/GoalsPage.js +553 -531
  60. package/dist/brainyrich/pages/GoalsPage.js.map +1 -1
  61. package/dist/brainyrich/pages/InvestmentsPage.d.ts +2 -0
  62. package/dist/brainyrich/pages/InvestmentsPage.d.ts.map +1 -0
  63. package/dist/brainyrich/pages/PortfoliosPage.d.ts +2 -0
  64. package/dist/brainyrich/pages/PortfoliosPage.d.ts.map +1 -0
  65. package/dist/brainyrich/pages/PortfoliosPage.js +378 -354
  66. package/dist/brainyrich/pages/PortfoliosPage.js.map +1 -1
  67. package/dist/brainyrich/pages/ReportsPage.d.ts +2 -0
  68. package/dist/brainyrich/pages/ReportsPage.d.ts.map +1 -0
  69. package/dist/brainyrich/pages/RiskPage.d.ts +2 -0
  70. package/dist/brainyrich/pages/RiskPage.d.ts.map +1 -0
  71. package/dist/brainyrich/pages/TaxPage.d.ts +2 -0
  72. package/dist/brainyrich/pages/TaxPage.d.ts.map +1 -0
  73. package/dist/brainyrich/pages/_shared.d.ts +77 -0
  74. package/dist/brainyrich/pages/_shared.d.ts.map +1 -0
  75. package/dist/brainyrich/providers/BrainyRichProvider.d.ts +6 -0
  76. package/dist/brainyrich/providers/BrainyRichProvider.d.ts.map +1 -0
  77. package/dist/brainyrich/services/createSandboxAssistantTransport.d.ts +24 -0
  78. package/dist/brainyrich/services/createSandboxAssistantTransport.d.ts.map +1 -0
  79. package/dist/brainyrich/services/createSandboxAssistantTransport.js +14 -0
  80. package/dist/brainyrich/services/createSandboxAssistantTransport.js.map +1 -0
  81. package/dist/brainyrich/types/bra.d.ts +394 -0
  82. package/dist/brainyrich/types/bra.d.ts.map +1 -0
  83. package/dist/brainyrich/types/index.d.ts +39 -0
  84. package/dist/brainyrich/types/index.d.ts.map +1 -0
  85. package/dist/brainyrich/utils/cn.d.ts +4 -0
  86. package/dist/brainyrich/utils/cn.d.ts.map +1 -0
  87. package/dist/brainyrich/utils/i18n.d.ts +6 -0
  88. package/dist/brainyrich/utils/i18n.d.ts.map +1 -0
  89. package/dist/brainyrich/utils/nativeControls.d.ts +12 -0
  90. package/dist/brainyrich/utils/nativeControls.d.ts.map +1 -0
  91. package/dist/brainyrich/utils/nativeControls.js +12 -0
  92. package/dist/brainyrich/utils/nativeControls.js.map +1 -0
  93. package/dist/brainyrich/utils/navigation.d.ts +2 -0
  94. package/dist/brainyrich/utils/navigation.d.ts.map +1 -0
  95. package/dist/brainyrich/utils/pageContext.d.ts +30 -0
  96. package/dist/brainyrich/utils/pageContext.d.ts.map +1 -0
  97. package/dist/brainyrich/utils/pageContext.js +46 -0
  98. package/dist/brainyrich/utils/pageContext.js.map +1 -0
  99. package/dist/dev/main.d.ts +2 -0
  100. package/dist/dev/main.d.ts.map +1 -0
  101. package/dist/generated/global-operations.d.ts +2 -0
  102. package/dist/generated/global-operations.d.ts.map +1 -0
  103. package/dist/generated/global-types.d.ts +18199 -0
  104. package/dist/generated/global-types.d.ts.map +1 -0
  105. package/dist/generated/wspace-operations.d.ts +2 -0
  106. package/dist/generated/wspace-operations.d.ts.map +1 -0
  107. package/dist/generated/wspace-types.d.ts +43046 -0
  108. package/dist/generated/wspace-types.d.ts.map +1 -0
  109. package/dist/index.d.ts +2 -0
  110. package/dist/index.d.ts.map +1 -0
  111. package/dist/index.js +2 -1
  112. package/package.json +6 -2
@@ -0,0 +1,5 @@
1
+ import { FC } from 'react';
2
+ import { BrainyRichRootProps } from './types';
3
+
4
+ export declare const BrainyRichRoot: FC<BrainyRichRootProps>;
5
+ //# sourceMappingURL=BrainyRichRoot.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"BrainyRichRoot.d.ts","sourceRoot":"","sources":["../../src/brainyrich/BrainyRichRoot.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,OAAO,CAAC;AAkBhC,OAAO,KAAK,EAAW,mBAAmB,EAAE,MAAM,SAAS,CAAC;AAK5D,eAAO,MAAM,cAAc,EAAE,EAAE,CAAC,mBAAmB,CAgIlD,CAAC"}
@@ -0,0 +1,2 @@
1
+ export declare function BrainyRichRoutes(): import("react/jsx-runtime").JSX.Element;
2
+ //# sourceMappingURL=BrainyRichRoutes.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"BrainyRichRoutes.d.ts","sourceRoot":"","sources":["../../src/brainyrich/BrainyRichRoutes.tsx"],"names":[],"mappings":"AA+CA,wBAAgB,gBAAgB,4CAkC/B"}
@@ -3,17 +3,29 @@ import { Suspense as t, lazy as n } from "react";
3
3
  import { Loader2 as r } from "lucide-react";
4
4
  import { Navigate as i, Route as a, Routes as o } from "react-router-dom";
5
5
  import { jsx as s, jsxs as c } from "react/jsx-runtime";
6
+ import { FeatureGate as l } from "@burdenoff/fe-libs/shared/feature-flags";
6
7
  //#region src/brainyrich/BrainyRichRoutes.tsx
7
- var l = n(() => import("./pages/AiAssistantPage.js").then((e) => ({ default: e.AiAssistantPage }))), u = n(() => import("./pages/AnalyticsPage.js").then((e) => ({ default: e.AnalyticsPage }))), d = n(() => import("./pages/AccountsPage.js").then((e) => ({ default: e.AccountsPage }))), f = n(() => import("./pages/FamilyPage.js").then((e) => ({ default: e.FamilyPage }))), p = n(() => import("./pages/GoalsPage.js").then((e) => ({ default: e.GoalsPage }))), m = n(() => import("./pages/InvestmentsPage.js").then((e) => ({ default: e.InvestmentsPage }))), h = n(() => import("./pages/PortfoliosPage.js").then((e) => ({ default: e.PortfoliosPage }))), g = n(() => import("./pages/ReportsPage.js").then((e) => ({ default: e.ReportsPage }))), _ = n(() => import("./pages/RiskPage.js").then((e) => ({ default: e.RiskPage }))), v = n(() => import("./pages/TaxPage.js").then((e) => ({ default: e.TaxPage })));
8
- function y() {
8
+ var u = n(() => import("./pages/AiAssistantPage.js").then((e) => ({ default: e.AiAssistantPage }))), d = n(() => import("./pages/AnalyticsPage.js").then((e) => ({ default: e.AnalyticsPage }))), f = n(() => import("./pages/AccountsPage.js").then((e) => ({ default: e.AccountsPage }))), p = n(() => import("./pages/FamilyPage.js").then((e) => ({ default: e.FamilyPage }))), m = n(() => import("./pages/GoalsPage.js").then((e) => ({ default: e.GoalsPage }))), h = n(() => import("./pages/InvestmentsPage.js").then((e) => ({ default: e.InvestmentsPage }))), g = n(() => import("./pages/PortfoliosPage.js").then((e) => ({ default: e.PortfoliosPage }))), _ = n(() => import("./pages/ReportsPage.js").then((e) => ({ default: e.ReportsPage }))), v = n(() => import("./pages/RiskPage.js").then((e) => ({ default: e.RiskPage }))), y = n(() => import("./pages/TaxPage.js").then((e) => ({ default: e.TaxPage })));
9
+ function b() {
9
10
  return /* @__PURE__ */ s("div", {
10
11
  className: "flex min-h-[320px] items-center justify-center",
11
12
  children: /* @__PURE__ */ s(r, { className: "h-8 w-8 animate-spin text-primary" })
12
13
  });
13
14
  }
14
- function b() {
15
+ function x(e, t) {
16
+ return /* @__PURE__ */ s(l, {
17
+ flag: e,
18
+ fallback: /* @__PURE__ */ s(i, {
19
+ to: "",
20
+ replace: !0
21
+ }),
22
+ defaultValue: !0,
23
+ children: t
24
+ });
25
+ }
26
+ function S() {
15
27
  return /* @__PURE__ */ s(t, {
16
- fallback: /* @__PURE__ */ s(y, {}),
28
+ fallback: /* @__PURE__ */ s(b, {}),
17
29
  children: /* @__PURE__ */ c(o, { children: [
18
30
  /* @__PURE__ */ s(a, {
19
31
  index: !0,
@@ -21,43 +33,43 @@ function b() {
21
33
  }),
22
34
  /* @__PURE__ */ s(a, {
23
35
  path: "ai-assistant",
24
- element: /* @__PURE__ */ s(l, {})
36
+ element: x("brainyrich.route.aiAssistant", /* @__PURE__ */ s(u, {}))
25
37
  }),
26
38
  /* @__PURE__ */ s(a, {
27
39
  path: "analytics",
28
- element: /* @__PURE__ */ s(u, {})
40
+ element: x("brainyrich.route.analytics", /* @__PURE__ */ s(d, {}))
29
41
  }),
30
42
  /* @__PURE__ */ s(a, {
31
43
  path: "accounts",
32
- element: /* @__PURE__ */ s(d, {})
44
+ element: x("brainyrich.route.accounts", /* @__PURE__ */ s(f, {}))
33
45
  }),
34
46
  /* @__PURE__ */ s(a, {
35
47
  path: "family",
36
- element: /* @__PURE__ */ s(f, {})
48
+ element: x("brainyrich.route.family", /* @__PURE__ */ s(p, {}))
37
49
  }),
38
50
  /* @__PURE__ */ s(a, {
39
51
  path: "goals",
40
- element: /* @__PURE__ */ s(p, {})
52
+ element: x("brainyrich.route.goals", /* @__PURE__ */ s(m, {}))
41
53
  }),
42
54
  /* @__PURE__ */ s(a, {
43
55
  path: "investments",
44
- element: /* @__PURE__ */ s(m, {})
56
+ element: x("brainyrich.route.investments", /* @__PURE__ */ s(h, {}))
45
57
  }),
46
58
  /* @__PURE__ */ s(a, {
47
59
  path: "portfolios",
48
- element: /* @__PURE__ */ s(h, {})
60
+ element: x("brainyrich.route.portfolios", /* @__PURE__ */ s(g, {}))
49
61
  }),
50
62
  /* @__PURE__ */ s(a, {
51
63
  path: "reports",
52
- element: /* @__PURE__ */ s(g, {})
64
+ element: x("brainyrich.route.reports", /* @__PURE__ */ s(_, {}))
53
65
  }),
54
66
  /* @__PURE__ */ s(a, {
55
67
  path: "risk",
56
- element: /* @__PURE__ */ s(_, {})
68
+ element: x("brainyrich.route.risk", /* @__PURE__ */ s(v, {}))
57
69
  }),
58
70
  /* @__PURE__ */ s(a, {
59
71
  path: "tax",
60
- element: /* @__PURE__ */ s(v, {})
72
+ element: x("brainyrich.route.tax", /* @__PURE__ */ s(y, {}))
61
73
  }),
62
74
  /* @__PURE__ */ s(a, {
63
75
  path: "*",
@@ -70,6 +82,6 @@ function b() {
70
82
  });
71
83
  }
72
84
  //#endregion
73
- export { b as BrainyRichRoutes };
85
+ export { S as BrainyRichRoutes };
74
86
 
75
87
  //# sourceMappingURL=BrainyRichRoutes.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"BrainyRichRoutes.js","names":[],"sources":["../../src/brainyrich/BrainyRichRoutes.tsx"],"sourcesContent":["import { lazy, Suspense } from 'react';\nimport { Navigate, Route, Routes } from 'react-router-dom';\nimport { Loader2 } from 'lucide-react';\nimport { DashboardPage as IndexPage } from './pages/DashboardPage';\n\nconst AiAssistantPage = lazy(() =>\n import('./pages/AiAssistantPage').then((m) => ({ default: m.AiAssistantPage }))\n);\nconst AnalyticsPage = lazy(() =>\n import('./pages/AnalyticsPage').then((m) => ({ default: m.AnalyticsPage }))\n);\nconst AccountsPage = lazy(() =>\n import('./pages/AccountsPage').then((m) => ({ default: m.AccountsPage }))\n);\nconst FamilyPage = lazy(() =>\n import('./pages/FamilyPage').then((m) => ({ default: m.FamilyPage }))\n);\nconst GoalsPage = lazy(() => import('./pages/GoalsPage').then((m) => ({ default: m.GoalsPage })));\nconst InvestmentsPage = lazy(() =>\n import('./pages/InvestmentsPage').then((m) => ({ default: m.InvestmentsPage }))\n);\nconst PortfoliosPage = lazy(() =>\n import('./pages/PortfoliosPage').then((m) => ({ default: m.PortfoliosPage }))\n);\nconst ReportsPage = lazy(() =>\n import('./pages/ReportsPage').then((m) => ({ default: m.ReportsPage }))\n);\nconst RiskPage = lazy(() => import('./pages/RiskPage').then((m) => ({ default: m.RiskPage })));\nconst TaxPage = lazy(() => import('./pages/TaxPage').then((m) => ({ default: m.TaxPage })));\n\nfunction PageLoader() {\n return (\n <div className=\"flex min-h-[320px] items-center justify-center\">\n <Loader2 className=\"h-8 w-8 animate-spin text-primary\" />\n </div>\n );\n}\n\nexport function BrainyRichRoutes() {\n return (\n <Suspense fallback={<PageLoader />}>\n <Routes>\n <Route index element={<IndexPage />} />\n <Route path=\"ai-assistant\" element={<AiAssistantPage />} />\n <Route path=\"analytics\" element={<AnalyticsPage />} />\n <Route path=\"accounts\" element={<AccountsPage />} />\n <Route path=\"family\" element={<FamilyPage />} />\n <Route path=\"goals\" element={<GoalsPage />} />\n <Route path=\"investments\" element={<InvestmentsPage />} />\n <Route path=\"portfolios\" element={<PortfoliosPage />} />\n <Route path=\"reports\" element={<ReportsPage />} />\n <Route path=\"risk\" element={<RiskPage />} />\n <Route path=\"tax\" element={<TaxPage />} />\n <Route path=\"*\" element={<Navigate to=\"\" replace />} />\n </Routes>\n </Suspense>\n );\n}\n"],"mappings":";;;;;;AAKA,IAAM,IAAkB,QACtB,OAAO,8BAA2B,MAAM,OAAO,EAAE,SAAS,EAAE,iBAAiB,EAAE,CAChF,EACK,IAAgB,QACpB,OAAO,4BAAyB,MAAM,OAAO,EAAE,SAAS,EAAE,eAAe,EAAE,CAC5E,EACK,IAAe,QACnB,OAAO,2BAAwB,MAAM,OAAO,EAAE,SAAS,EAAE,cAAc,EAAE,CAC1E,EACK,IAAa,QACjB,OAAO,yBAAsB,MAAM,OAAO,EAAE,SAAS,EAAE,YAAY,EAAE,CACtE,EACK,IAAY,QAAW,OAAO,wBAAqB,MAAM,OAAO,EAAE,SAAS,EAAE,WAAW,EAAE,CAAC,EAC3F,IAAkB,QACtB,OAAO,8BAA2B,MAAM,OAAO,EAAE,SAAS,EAAE,iBAAiB,EAAE,CAChF,EACK,IAAiB,QACrB,OAAO,6BAA0B,MAAM,OAAO,EAAE,SAAS,EAAE,gBAAgB,EAAE,CAC9E,EACK,IAAc,QAClB,OAAO,0BAAuB,MAAM,OAAO,EAAE,SAAS,EAAE,aAAa,EAAE,CACxE,EACK,IAAW,QAAW,OAAO,uBAAoB,MAAM,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,CAAC,EACxF,IAAU,QAAW,OAAO,sBAAmB,MAAM,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,CAAC;AAE3F,SAAS,IAAa;AACpB,QACE,kBAAC,OAAD;EAAK,WAAU;YACb,kBAAC,GAAD,EAAS,WAAU,qCAAsC,CAAA;EACrD,CAAA;;AAIV,SAAgB,IAAmB;AACjC,QACE,kBAAC,GAAD;EAAU,UAAU,kBAAC,GAAD,EAAc,CAAA;YAChC,kBAAC,GAAD,EAAA,UAAA;GACE,kBAAC,GAAD;IAAO,OAAA;IAAM,SAAS,kBAAC,GAAD,EAAa,CAAA;IAAI,CAAA;GACvC,kBAAC,GAAD;IAAO,MAAK;IAAe,SAAS,kBAAC,GAAD,EAAmB,CAAA;IAAI,CAAA;GAC3D,kBAAC,GAAD;IAAO,MAAK;IAAY,SAAS,kBAAC,GAAD,EAAiB,CAAA;IAAI,CAAA;GACtD,kBAAC,GAAD;IAAO,MAAK;IAAW,SAAS,kBAAC,GAAD,EAAgB,CAAA;IAAI,CAAA;GACpD,kBAAC,GAAD;IAAO,MAAK;IAAS,SAAS,kBAAC,GAAD,EAAc,CAAA;IAAI,CAAA;GAChD,kBAAC,GAAD;IAAO,MAAK;IAAQ,SAAS,kBAAC,GAAD,EAAa,CAAA;IAAI,CAAA;GAC9C,kBAAC,GAAD;IAAO,MAAK;IAAc,SAAS,kBAAC,GAAD,EAAmB,CAAA;IAAI,CAAA;GAC1D,kBAAC,GAAD;IAAO,MAAK;IAAa,SAAS,kBAAC,GAAD,EAAkB,CAAA;IAAI,CAAA;GACxD,kBAAC,GAAD;IAAO,MAAK;IAAU,SAAS,kBAAC,GAAD,EAAe,CAAA;IAAI,CAAA;GAClD,kBAAC,GAAD;IAAO,MAAK;IAAO,SAAS,kBAAC,GAAD,EAAY,CAAA;IAAI,CAAA;GAC5C,kBAAC,GAAD;IAAO,MAAK;IAAM,SAAS,kBAAC,GAAD,EAAW,CAAA;IAAI,CAAA;GAC1C,kBAAC,GAAD;IAAO,MAAK;IAAI,SAAS,kBAAC,GAAD;KAAU,IAAG;KAAG,SAAA;KAAU,CAAA;IAAI,CAAA;GAChD,EAAA,CAAA;EACA,CAAA"}
1
+ {"version":3,"file":"BrainyRichRoutes.js","names":[],"sources":["../../src/brainyrich/BrainyRichRoutes.tsx"],"sourcesContent":["import { lazy, Suspense, type ReactNode } from 'react';\nimport { Navigate, Route, Routes } from 'react-router-dom';\nimport { Loader2 } from 'lucide-react';\nimport { FeatureGate } from '@burdenoff/fe-libs/shared/feature-flags';\nimport { DashboardPage as IndexPage } from './pages/DashboardPage';\n\nconst AiAssistantPage = lazy(() =>\n import('./pages/AiAssistantPage').then((m) => ({ default: m.AiAssistantPage }))\n);\nconst AnalyticsPage = lazy(() =>\n import('./pages/AnalyticsPage').then((m) => ({ default: m.AnalyticsPage }))\n);\nconst AccountsPage = lazy(() =>\n import('./pages/AccountsPage').then((m) => ({ default: m.AccountsPage }))\n);\nconst FamilyPage = lazy(() =>\n import('./pages/FamilyPage').then((m) => ({ default: m.FamilyPage }))\n);\nconst GoalsPage = lazy(() => import('./pages/GoalsPage').then((m) => ({ default: m.GoalsPage })));\nconst InvestmentsPage = lazy(() =>\n import('./pages/InvestmentsPage').then((m) => ({ default: m.InvestmentsPage }))\n);\nconst PortfoliosPage = lazy(() =>\n import('./pages/PortfoliosPage').then((m) => ({ default: m.PortfoliosPage }))\n);\nconst ReportsPage = lazy(() =>\n import('./pages/ReportsPage').then((m) => ({ default: m.ReportsPage }))\n);\nconst RiskPage = lazy(() => import('./pages/RiskPage').then((m) => ({ default: m.RiskPage })));\nconst TaxPage = lazy(() => import('./pages/TaxPage').then((m) => ({ default: m.TaxPage })));\n\nfunction PageLoader() {\n return (\n <div className=\"flex min-h-[320px] items-center justify-center\">\n <Loader2 className=\"h-8 w-8 animate-spin text-primary\" />\n </div>\n );\n}\n\nfunction gatedRoute(flag: string, element: ReactNode) {\n return (\n <FeatureGate flag={flag} fallback={<Navigate to=\"\" replace />} defaultValue>\n {element}\n </FeatureGate>\n );\n}\n\nexport function BrainyRichRoutes() {\n return (\n <Suspense fallback={<PageLoader />}>\n <Routes>\n <Route index element={<IndexPage />} />\n <Route\n path=\"ai-assistant\"\n element={gatedRoute('brainyrich.route.aiAssistant', <AiAssistantPage />)}\n />\n <Route\n path=\"analytics\"\n element={gatedRoute('brainyrich.route.analytics', <AnalyticsPage />)}\n />\n <Route\n path=\"accounts\"\n element={gatedRoute('brainyrich.route.accounts', <AccountsPage />)}\n />\n <Route path=\"family\" element={gatedRoute('brainyrich.route.family', <FamilyPage />)} />\n <Route path=\"goals\" element={gatedRoute('brainyrich.route.goals', <GoalsPage />)} />\n <Route\n path=\"investments\"\n element={gatedRoute('brainyrich.route.investments', <InvestmentsPage />)}\n />\n <Route\n path=\"portfolios\"\n element={gatedRoute('brainyrich.route.portfolios', <PortfoliosPage />)}\n />\n <Route path=\"reports\" element={gatedRoute('brainyrich.route.reports', <ReportsPage />)} />\n <Route path=\"risk\" element={gatedRoute('brainyrich.route.risk', <RiskPage />)} />\n <Route path=\"tax\" element={gatedRoute('brainyrich.route.tax', <TaxPage />)} />\n <Route path=\"*\" element={<Navigate to=\"\" replace />} />\n </Routes>\n </Suspense>\n );\n}\n"],"mappings":"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"}
@@ -0,0 +1,26 @@
1
+ /**
2
+ * Render an actor UUID (owner / advisor / proposedBy / acknowledgedBy …) as a
3
+ * human-readable display name.
4
+ * @module brainyrich/components/ActorName
5
+ *
6
+ * Wraps fe-libs `useActorProfiles`, which resolves identities via the GLOBAL
7
+ * gateway (workspace-member → org-member → admin lookup → local fallback) with
8
+ * an internal 5-minute cache. The MFE is handed a *workspace* `apiGatewayUrl`;
9
+ * `useActorProfiles` detects that and only uses it for the workspace-scoped
10
+ * tier, resolving the global gateway from the hostname itself — so forwarding
11
+ * our workspace URL is safe. Network failures degrade to a short-id fallback,
12
+ * never an error.
13
+ */
14
+ export interface ActorNameProps {
15
+ /** Actor id (usually a user UUID). */
16
+ id?: string | null;
17
+ /** Actor type — 'user' (default), 'app', 'service', 'super_admin'. */
18
+ actorType?: string;
19
+ className?: string;
20
+ /** Shown when `id` is absent/empty (default "—"). */
21
+ fallback?: string;
22
+ /** Also render the secondary label (email / short id) under the name. */
23
+ withSecondary?: boolean;
24
+ }
25
+ export declare function ActorName({ id, actorType, className, fallback, withSecondary, }: ActorNameProps): import("react/jsx-runtime").JSX.Element;
26
+ //# sourceMappingURL=ActorName.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ActorName.d.ts","sourceRoot":"","sources":["../../../src/brainyrich/components/ActorName.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAMH,MAAM,WAAW,cAAc;IAC7B,sCAAsC;IACtC,EAAE,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACnB,sEAAsE;IACtE,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,qDAAqD;IACrD,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,yEAAyE;IACzE,aAAa,CAAC,EAAE,OAAO,CAAC;CACzB;AAED,wBAAgB,SAAS,CAAC,EACxB,EAAE,EACF,SAAkB,EAClB,SAAc,EACd,QAAc,EACd,aAAqB,GACtB,EAAE,cAAc,2CA6BhB"}
@@ -0,0 +1,20 @@
1
+ import { ReactNode } from 'react';
2
+
3
+ export interface ConfirmDialogProps {
4
+ open: boolean;
5
+ onOpenChange: (open: boolean) => void;
6
+ title: string;
7
+ description?: ReactNode;
8
+ /** Label for the confirm button (default "Confirm"). */
9
+ confirmLabel?: string;
10
+ /** Label shown while `pending` (default "Working…"). */
11
+ pendingLabel?: string;
12
+ cancelLabel?: string;
13
+ /** Render the confirm button with the destructive variant. */
14
+ destructive?: boolean;
15
+ /** Confirm action in flight — disables buttons + swaps the label. */
16
+ pending?: boolean;
17
+ onConfirm: () => void;
18
+ }
19
+ export declare function ConfirmDialog({ open, onOpenChange, title, description, confirmLabel, pendingLabel, cancelLabel, destructive, pending, onConfirm, }: ConfirmDialogProps): import("react/jsx-runtime").JSX.Element;
20
+ //# sourceMappingURL=ConfirmDialog.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ConfirmDialog.d.ts","sourceRoot":"","sources":["../../../src/brainyrich/components/ConfirmDialog.tsx"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAWvC,MAAM,WAAW,kBAAkB;IACjC,IAAI,EAAE,OAAO,CAAC;IACd,YAAY,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,CAAC;IACtC,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,SAAS,CAAC;IACxB,wDAAwD;IACxD,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,wDAAwD;IACxD,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,8DAA8D;IAC9D,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,qEAAqE;IACrE,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,SAAS,EAAE,MAAM,IAAI,CAAC;CACvB;AAED,wBAAgB,aAAa,CAAC,EAC5B,IAAI,EACJ,YAAY,EACZ,KAAK,EACL,WAAW,EACX,YAAwB,EACxB,YAAyB,EACzB,WAAsB,EACtB,WAAmB,EACnB,OAAe,EACf,SAAS,GACV,EAAE,kBAAkB,2CA0BpB"}
@@ -0,0 +1,21 @@
1
+ /**
2
+ * "Load more" button for cursor-paginated list pages.
3
+ * @module brainyrich/components/LoadMore
4
+ *
5
+ * Pair with the `usePaged*` hooks in `../hooks/useBrainyRichApi` (they expose
6
+ * `hasMore`, `loadMore`, `isFetchingNextPage`). Renders nothing when there is
7
+ * no next page, so it can be dropped unconditionally at the end of a list.
8
+ */
9
+ export interface LoadMoreProps {
10
+ /** Whether another page exists. Component renders null when false. */
11
+ hasMore: boolean;
12
+ /** Fetch the next page. */
13
+ onClick: () => void;
14
+ /** Next-page fetch in flight. */
15
+ loading?: boolean;
16
+ label?: string;
17
+ loadingLabel?: string;
18
+ className?: string;
19
+ }
20
+ export declare function LoadMore({ hasMore, onClick, loading, label, loadingLabel, className, }: LoadMoreProps): import("react/jsx-runtime").JSX.Element | null;
21
+ //# sourceMappingURL=LoadMore.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"LoadMore.d.ts","sourceRoot":"","sources":["../../../src/brainyrich/components/LoadMore.tsx"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAKH,MAAM,WAAW,aAAa;IAC5B,sEAAsE;IACtE,OAAO,EAAE,OAAO,CAAC;IACjB,2BAA2B;IAC3B,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,iCAAiC;IACjC,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,wBAAgB,QAAQ,CAAC,EACvB,OAAO,EACP,OAAO,EACP,OAAe,EACf,KAAmB,EACnB,YAAyB,EACzB,SAAc,GACf,EAAE,aAAa,kDAgBf"}
@@ -0,0 +1,11 @@
1
+ /**
2
+ * BrainyRich shared UX infrastructure — consumed by page agents.
3
+ * @module brainyrich/components
4
+ */
5
+ export { notify, errorMessage } from './notify';
6
+ export { LoadMore, type LoadMoreProps } from './LoadMore';
7
+ export { ConfirmDialog, type ConfirmDialogProps } from './ConfirmDialog';
8
+ export { ActorName, type ActorNameProps } from './ActorName';
9
+ export { useReducedMotion, useVizColors, FadeIn, GlassCard, DonutChart, Sparkline, ProgressRing, TrendBars, MiniAreaChart, LifecycleStepper, StatTile, type VizColors, type VizTone, type DonutDatum, type TrendDatum, type AreaDatum, } from './viz';
10
+ export { SubjectPicker, type SubjectPickerProps, EntityPicker, type EntityPickerProps, AccountPicker, HouseholdPicker, type HouseholdPickerProps, SUBJECT_KINDS, type SubjectKind, encodeSubject, parseSubject, } from './pickers';
11
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/brainyrich/components/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AAChD,OAAO,EAAE,QAAQ,EAAE,KAAK,aAAa,EAAE,MAAM,YAAY,CAAC;AAC1D,OAAO,EAAE,aAAa,EAAE,KAAK,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AACzE,OAAO,EAAE,SAAS,EAAE,KAAK,cAAc,EAAE,MAAM,aAAa,CAAC;AAC7D,OAAO,EACL,gBAAgB,EAChB,YAAY,EACZ,MAAM,EACN,SAAS,EACT,UAAU,EACV,SAAS,EACT,YAAY,EACZ,SAAS,EACT,aAAa,EACb,gBAAgB,EAChB,QAAQ,EACR,KAAK,SAAS,EACd,KAAK,OAAO,EACZ,KAAK,UAAU,EACf,KAAK,UAAU,EACf,KAAK,SAAS,GACf,MAAM,OAAO,CAAC;AACf,OAAO,EACL,aAAa,EACb,KAAK,kBAAkB,EACvB,YAAY,EACZ,KAAK,iBAAiB,EACtB,aAAa,EACb,eAAe,EACf,KAAK,oBAAoB,EACzB,aAAa,EACb,KAAK,WAAW,EAChB,aAAa,EACb,YAAY,GACb,MAAM,WAAW,CAAC"}
@@ -0,0 +1,33 @@
1
+ /**
2
+ * Centralized user-feedback surface for the BrainyRich MFE.
3
+ * @module brainyrich/components/notify
4
+ *
5
+ * WHY sonner `toast()` and NOT a scoped `<Toaster/>`:
6
+ * sonner exposes a *module-level singleton* store — every `toast()` call
7
+ * renders through whichever `<Toaster/>` is mounted. The host application
8
+ * shell (`AppShellProvider` in `@burdenoff/fe-libs`) already mounts exactly
9
+ * one `<Toaster/>` (see `AppShellProvider.tsx`), so calling `toast()` from
10
+ * here renders through it. Mounting a SECOND `<Toaster/>` in BrainyRichRoot
11
+ * would produce the documented double-toast regression, so we deliberately
12
+ * do not. `sonner` is pinned to the same `^2.0.7` fe-libs uses so the bundler
13
+ * dedupes to a single instance (a duplicated copy would break the singleton).
14
+ *
15
+ * Every page/component and every mutation hook emits feedback through these
16
+ * helpers instead of hand-rolling markup. Durations follow the platform
17
+ * notification spec: success/info auto-dismiss; errors stay until dismissed
18
+ * (sonner renders a close button + announces via aria-live for WCAG AA).
19
+ */
20
+ export declare const notify: {
21
+ success(message: string, description?: string): void;
22
+ info(message: string, description?: string): void;
23
+ warning(message: string, description?: string): void;
24
+ error(message: string, description?: string): void;
25
+ };
26
+ /**
27
+ * Resolve a human-friendly message from any thrown value. The bra transport
28
+ * throws `new Error(<graphql error message>)`, so this runs that message through
29
+ * fe-libs' `extractBackendError` (which maps known codes to friendly copy and
30
+ * hides technical/prisma strings) and falls back to the raw message.
31
+ */
32
+ export declare function errorMessage(error: unknown, fallback?: string): string;
33
+ //# sourceMappingURL=notify.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"notify.d.ts","sourceRoot":"","sources":["../../../src/brainyrich/components/notify.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAKH,eAAO,MAAM,MAAM;qBACA,MAAM,gBAAgB,MAAM,GAAG,IAAI;kBAGtC,MAAM,gBAAgB,MAAM,GAAG,IAAI;qBAGhC,MAAM,gBAAgB,MAAM,GAAG,IAAI;mBAGrC,MAAM,gBAAgB,MAAM,GAAG,IAAI;CAGnD,CAAC;AAEF;;;;;GAKG;AACH,wBAAgB,YAAY,CAC1B,KAAK,EAAE,OAAO,EACd,QAAQ,SAA4C,GACnD,MAAM,CAKR"}
@@ -0,0 +1,63 @@
1
+ /**
2
+ * Reusable entity / subject pickers.
3
+ * @module brainyrich/components/pickers
4
+ *
5
+ * - `SubjectPicker` — encodes `SUBJECT_TYPE:id` across accounts, portfolios,
6
+ * goals and households (for the AiAssistant insight subject).
7
+ * - `EntityPicker` — generic account / household Select returning a bare id.
8
+ * - `AccountPicker` — convenience wrapper (kind="account").
9
+ * - `HouseholdPicker` — OPTIONAL household Select with a "None" option, for the
10
+ * account create/edit form (accounts can be linked to a
11
+ * household). Never a dead-end when no households exist.
12
+ *
13
+ * When a *required* source list is empty every picker renders a CTA that routes
14
+ * the user to create the missing entity instead of showing an empty dropdown.
15
+ */
16
+ export declare const SUBJECT_KINDS: readonly ["ACCOUNT", "PORTFOLIO", "GOAL", "HOUSEHOLD"];
17
+ export type SubjectKind = (typeof SUBJECT_KINDS)[number];
18
+ /** Encode a subject selection as the `SUBJECT_TYPE:id` token a SubjectPicker emits. */
19
+ export declare function encodeSubject(kind: SubjectKind, id: string): string;
20
+ /** Decode a `SUBJECT_TYPE:id` token back into `{ subjectType, subjectId }`. */
21
+ export declare function parseSubject(value: string | null | undefined): {
22
+ subjectType: SubjectKind;
23
+ subjectId: string;
24
+ } | null;
25
+ export interface SubjectPickerProps {
26
+ /** Current `SUBJECT_TYPE:id` token, or empty. */
27
+ value?: string;
28
+ onChange: (value: string) => void;
29
+ id?: string;
30
+ label?: string;
31
+ placeholder?: string;
32
+ disabled?: boolean;
33
+ }
34
+ export declare function SubjectPicker({ value, onChange, id, label, placeholder, disabled, }: SubjectPickerProps): import("react/jsx-runtime").JSX.Element;
35
+ export interface EntityPickerProps {
36
+ kind: 'account' | 'household';
37
+ value?: string | null;
38
+ onChange: (id: string) => void;
39
+ id?: string;
40
+ label?: string;
41
+ placeholder?: string;
42
+ disabled?: boolean;
43
+ }
44
+ export declare function EntityPicker({ kind, value, onChange, id, label, placeholder, disabled, }: EntityPickerProps): import("react/jsx-runtime").JSX.Element;
45
+ /** Convenience wrapper — a required account picker. */
46
+ export declare function AccountPicker(props: Omit<EntityPickerProps, 'kind'>): import("react/jsx-runtime").JSX.Element;
47
+ export interface HouseholdPickerProps {
48
+ /** Current householdId, or null/undefined for "no household". */
49
+ value?: string | null;
50
+ onChange: (householdId: string | null) => void;
51
+ id?: string;
52
+ label?: string;
53
+ /** Label for the "unlinked" option (default "No household"). */
54
+ noneLabel?: string;
55
+ disabled?: boolean;
56
+ }
57
+ /**
58
+ * OPTIONAL household selector. Always offers a "No household" option, so it is
59
+ * never a dead-end even when zero households exist (it just shows a hint). Emits
60
+ * `null` for the none option and a bare householdId otherwise.
61
+ */
62
+ export declare function HouseholdPicker({ value, onChange, id, label, noneLabel, disabled, }: HouseholdPickerProps): import("react/jsx-runtime").JSX.Element;
63
+ //# sourceMappingURL=pickers.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pickers.d.ts","sourceRoot":"","sources":["../../../src/brainyrich/components/pickers.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAsBH,eAAO,MAAM,aAAa,wDAAyD,CAAC;AACpF,MAAM,MAAM,WAAW,GAAG,CAAC,OAAO,aAAa,CAAC,CAAC,MAAM,CAAC,CAAC;AASzD,uFAAuF;AACvF,wBAAgB,aAAa,CAAC,IAAI,EAAE,WAAW,EAAE,EAAE,EAAE,MAAM,GAAG,MAAM,CAEnE;AAED,+EAA+E;AAC/E,wBAAgB,YAAY,CAC1B,KAAK,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GAC/B;IAAE,WAAW,EAAE,WAAW,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CAQxD;AAgDD,MAAM,WAAW,kBAAkB;IACjC,iDAAiD;IACjD,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAClC,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED,wBAAgB,aAAa,CAAC,EAC5B,KAAK,EACL,QAAQ,EACR,EAAqB,EACrB,KAAiB,EACjB,WAAgC,EAChC,QAAgB,GACjB,EAAE,kBAAkB,2CA4DpB;AAMD,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,SAAS,GAAG,WAAW,CAAC;IAC9B,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,QAAQ,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,IAAI,CAAC;IAC/B,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAsBD,wBAAgB,YAAY,CAAC,EAC3B,IAAI,EACJ,KAAK,EACL,QAAQ,EACR,EAAE,EACF,KAAK,EACL,WAAW,EACX,QAAgB,GACjB,EAAE,iBAAiB,2CAsCnB;AAED,uDAAuD;AACvD,wBAAgB,aAAa,CAAC,KAAK,EAAE,IAAI,CAAC,iBAAiB,EAAE,MAAM,CAAC,2CAEnE;AAQD,MAAM,WAAW,oBAAoB;IACnC,iEAAiE;IACjE,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,QAAQ,EAAE,CAAC,WAAW,EAAE,MAAM,GAAG,IAAI,KAAK,IAAI,CAAC;IAC/C,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,gEAAgE;IAChE,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED;;;;GAIG;AACH,wBAAgB,eAAe,CAAC,EAC9B,KAAK,EACL,QAAQ,EACR,EAAuB,EACvB,KAAmB,EACnB,SAA0B,EAC1B,QAAgB,GACjB,EAAE,oBAAoB,2CAgCtB"}
@@ -0,0 +1,35 @@
1
+ /**
2
+ * CommentThread — REUSE of `wspace-conversations-svc` EntityComment as a real
3
+ * comment thread.
4
+ * @module brainyrich/components/reuse/CommentThread
5
+ *
6
+ * Replaces the single-field notes / rationale fork on Households / Portfolios /
7
+ * RebalanceProposals with a threaded, multi-author comment log keyed by
8
+ * `(entityType, entityId)`.
9
+ *
10
+ * Why not the fe-libs `contextConversationWidget`? That folder ships a kit of
11
+ * sub-components + Apollo hooks (subscriptions, `sendContextMessage`, a
12
+ * conversationId-resolution flow) but exports NO mountable root widget and no
13
+ * single mount hook — it is not wrappable as `<CommentThread>` without importing
14
+ * its internals. Per the task's fallback, we build a minimal thread directly on
15
+ * the platform EntityComment API, which is purpose-built for exactly this
16
+ * "comments on an arbitrary entity" case:
17
+ * - `getEntityComments(input)` → list (newest first)
18
+ * - `createEntityComment(input)` → post
19
+ * - `deleteEntityComment(input)` → remove own comment (soft)
20
+ *
21
+ * All ops route through the workspace supergraph the MFE already uses.
22
+ * Presentational + self-contained: owns its hooks, reads gateway base URL +
23
+ * current user from `useBrainyRich()`, uses fe-libs/ui + semantic tokens.
24
+ */
25
+ export interface CommentThreadProps {
26
+ /** Polymorphic entity type, e.g. "brainyrich-household". */
27
+ entityType: string;
28
+ /** The bra entity's id (an ID scalar). */
29
+ entityId: string;
30
+ /** Optional heading; hide with `hideHeading`. */
31
+ heading?: string;
32
+ hideHeading?: boolean;
33
+ }
34
+ export declare function CommentThread({ entityType, entityId, heading, hideHeading, }: CommentThreadProps): import("react/jsx-runtime").JSX.Element;
35
+ //# sourceMappingURL=CommentThread.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CommentThread.d.ts","sourceRoot":"","sources":["../../../../src/brainyrich/components/reuse/CommentThread.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AAgGH,MAAM,WAAW,kBAAkB;IACjC,4DAA4D;IAC5D,UAAU,EAAE,MAAM,CAAC;IACnB,0CAA0C;IAC1C,QAAQ,EAAE,MAAM,CAAC;IACjB,iDAAiD;IACjD,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,WAAW,CAAC,EAAE,OAAO,CAAC;CACvB;AAED,wBAAgB,aAAa,CAAC,EAC5B,UAAU,EACV,QAAQ,EACR,OAAsB,EACtB,WAAmB,GACpB,EAAE,kBAAkB,2CA8IpB"}
@@ -0,0 +1,33 @@
1
+ /**
2
+ * DocumentsPanel — REUSE of `wspace-files-svc` for statement / KYC / tax-doc
3
+ * attachments on Accounts + Households.
4
+ * @module brainyrich/components/reuse/DocumentsPanel
5
+ *
6
+ * A wealth product needs to attach documents (statements, KYC, tax packs) to
7
+ * accounts and households. `wspace-files-svc` has no native entity-owned link on
8
+ * `File`, so we scope documents to an entity via a dedicated, stably-named
9
+ * FOLDER per `(entityType, entityId)` and list its contents. All ops route
10
+ * through the workspace supergraph the MFE already uses.
11
+ *
12
+ * Flow:
13
+ * - resolve folder → `getFolders(filter)` matched by name (created lazily on
14
+ * first upload via `createFolder`); no side-effects on read.
15
+ * - list → `getFilesInFolder(folderId, pagination)`
16
+ * - upload (3-step) → `initiateUpload` → S3 `PUT` (byte-progress) → `completeUpload`
17
+ * - download → `getFileDownloadUrl(id, expiresIn)` capped at 21600s to
18
+ * avoid the >604800 fleet bug (S3 7-day cap → 500).
19
+ *
20
+ * Presentational + self-contained: owns its hooks, reads the gateway base URL
21
+ * from `useBrainyRich()`, uses fe-libs/ui primitives + semantic tokens.
22
+ */
23
+ export interface DocumentsPanelProps {
24
+ /** Polymorphic entity type, e.g. "brainyrich-account" | "brainyrich-household". */
25
+ entityType: string;
26
+ /** The bra entity's id (an ID scalar). */
27
+ entityId: string;
28
+ /** Optional heading; hide with `hideHeading`. */
29
+ heading?: string;
30
+ hideHeading?: boolean;
31
+ }
32
+ export declare function DocumentsPanel({ entityType, entityId, heading, hideHeading, }: DocumentsPanelProps): import("react/jsx-runtime").JSX.Element;
33
+ //# sourceMappingURL=DocumentsPanel.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DocumentsPanel.d.ts","sourceRoot":"","sources":["../../../../src/brainyrich/components/reuse/DocumentsPanel.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AAkOH,MAAM,WAAW,mBAAmB;IAClC,mFAAmF;IACnF,UAAU,EAAE,MAAM,CAAC;IACnB,0CAA0C;IAC1C,QAAQ,EAAE,MAAM,CAAC;IACjB,iDAAiD;IACjD,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,WAAW,CAAC,EAAE,OAAO,CAAC;CACvB;AAED,wBAAgB,cAAc,CAAC,EAC7B,UAAU,EACV,QAAQ,EACR,OAAqB,EACrB,WAAmB,GACpB,EAAE,mBAAmB,2CA0IrB"}
@@ -0,0 +1,34 @@
1
+ /**
2
+ * TagField — REUSE of `wspace-tags-svc` UniversalTag (polymorphic-by-entity).
3
+ * @module brainyrich/components/reuse/TagField
4
+ *
5
+ * Drop-in replacement for the free-text tag string inputs on Households /
6
+ * Portfolios / Goals. Instead of writing a `tags` scalar on the bra entity,
7
+ * this manages REAL `UniversalTag` assignments keyed by `(entityType, entityId)`
8
+ * against the platform tag store — no bra-svc change required. The bra `tags`
9
+ * scalar stays as legacy; this component is the canonical tag surface.
10
+ *
11
+ * Ops (all on the workspace supergraph):
12
+ * - `getEntityTags(entityType, entityId)` → current assignments (chips)
13
+ * - `searchTags(query, limit)` → typeahead over existing tags
14
+ * - `assignTag(input)` → link an existing tag
15
+ * - `createTag(input)` + `assignTag(...)` → create-from-label then link
16
+ * - `removeTagAssignment(id)` → unlink a chip
17
+ *
18
+ * `createTag` needs a `vocabularyId`; we resolve a stable, workspace-scoped
19
+ * "brainyrich" vocabulary via `getVocabularyByKey` (creating it on first use).
20
+ *
21
+ * Presentational + self-contained: owns its react-query hooks, reads the gateway
22
+ * base URL from `useBrainyRich()`, uses fe-libs/ui primitives + semantic tokens.
23
+ */
24
+ export interface TagFieldProps {
25
+ /** Polymorphic entity type, e.g. "brainyrich-household". */
26
+ entityType: string;
27
+ /** The bra entity's id (an ID scalar). */
28
+ entityId: string;
29
+ /** Optional field label (hidden visually when `hideLabel`). */
30
+ label?: string;
31
+ hideLabel?: boolean;
32
+ }
33
+ export declare function TagField({ entityType, entityId, label, hideLabel, }: TagFieldProps): import("react/jsx-runtime").JSX.Element;
34
+ //# sourceMappingURL=TagField.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TagField.d.ts","sourceRoot":"","sources":["../../../../src/brainyrich/components/reuse/TagField.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AAoLH,MAAM,WAAW,aAAa;IAC5B,4DAA4D;IAC5D,UAAU,EAAE,MAAM,CAAC;IACnB,0CAA0C;IAC1C,QAAQ,EAAE,MAAM,CAAC;IACjB,+DAA+D;IAC/D,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB;AAED,wBAAgB,QAAQ,CAAC,EACvB,UAAU,EACV,QAAQ,EACR,KAAc,EACd,SAAiB,GAClB,EAAE,aAAa,2CAgJf"}
@@ -0,0 +1,20 @@
1
+ /**
2
+ * Shared workspace-gateway transport for the BrainyRich REUSE components.
3
+ * @module brainyrich/components/reuse/transport
4
+ *
5
+ * The four reuse components (TagField, DocumentsPanel, CommentThread,
6
+ * ReviewReminders) consume PLATFORM subgraphs — `wspace-tags-svc`,
7
+ * `wspace-files-svc`, `wspace-conversations-svc`, `wspace-calendar-svc` —
8
+ * that are composed into the SAME workspace supergraph the BrainyRich MFE
9
+ * already talks to. So every call routes through the identical transport the
10
+ * `bra*` hooks use: `graphqlFetch({ gateway: 'workspace', workspaceToken: true })`.
11
+ *
12
+ * This file only contains the transport primitive; each component owns its own
13
+ * react-query hooks (kept co-located so a page can drop one component into a
14
+ * Sheet/tab without pulling in the others).
15
+ */
16
+ /** Execute a workspace-gateway GraphQL operation with the workspace token. */
17
+ export declare const wspaceFetch: <TData>(query: string, variables: Record<string, unknown>, baseUrl?: string) => Promise<TData>;
18
+ /** Mutation transport — identical to `wspaceFetch` but clears read caches after. */
19
+ export declare const wspaceMutate: <TData>(query: string, variables: Record<string, unknown>, baseUrl?: string) => Promise<TData>;
20
+ //# sourceMappingURL=transport.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"transport.d.ts","sourceRoot":"","sources":["../../../../src/brainyrich/components/reuse/transport.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAyBH,8EAA8E;AAC9E,eAAO,MAAM,WAAW,GAAU,KAAK,EACrC,OAAO,MAAM,EACb,WAAW,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAClC,UAAU,MAAM,KACf,OAAO,CAAC,KAAK,CAgBf,CAAC;AAEF,oFAAoF;AACpF,eAAO,MAAM,YAAY,GAAU,KAAK,EACtC,OAAO,MAAM,EACb,WAAW,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAClC,UAAU,MAAM,KACf,OAAO,CAAC,KAAK,CAIf,CAAC"}
@@ -0,0 +1,129 @@
1
+ import { ReactNode } from 'react';
2
+
3
+ export declare function useReducedMotion(): boolean;
4
+ declare const CORE_TOKENS: {
5
+ readonly brand: "--color-action-primary-bg";
6
+ readonly brandBorder: "--color-action-primary-border";
7
+ readonly grid: "--color-chart-grid";
8
+ readonly axis: "--color-chart-axis";
9
+ readonly positive: "--color-chart-positive";
10
+ readonly negative: "--color-chart-negative";
11
+ readonly success: "--color-status-success";
12
+ readonly error: "--color-status-error";
13
+ readonly warning: "--color-status-warning";
14
+ readonly info: "--color-status-info";
15
+ readonly teal: "--color-accent-teal";
16
+ readonly blue: "--color-accent-blue";
17
+ readonly purple: "--color-accent-purple";
18
+ readonly indigo: "--color-accent-indigo";
19
+ readonly textPrimary: "--color-text-primary";
20
+ readonly textSecondary: "--color-text-secondary";
21
+ readonly surface: "--color-bg-elevated";
22
+ readonly border: "--color-border-subtle";
23
+ };
24
+ type CoreToken = keyof typeof CORE_TOKENS;
25
+ export type VizColors = Record<CoreToken, string> & {
26
+ /** Categorical palette (index 0 = emerald brand). */
27
+ palette: string[];
28
+ /** Resolve any semantic tone name to a concrete colour string. */
29
+ tone: (tone?: VizTone) => string;
30
+ };
31
+ /** Named tones a datum may request; falls back to the categorical palette. */
32
+ export type VizTone = 'brand' | 'primary' | 'success' | 'positive' | 'error' | 'negative' | 'warning' | 'info' | 'teal' | 'blue' | 'purple' | 'indigo' | 'neutral';
33
+ /**
34
+ * Resolve the semantic viz palette from CSS variables and keep it in sync with
35
+ * the active theme. Returns concrete colour strings for use in recharts props.
36
+ */
37
+ export declare function useVizColors(): VizColors;
38
+ /**
39
+ * Staggered enter animation (translateY + opacity). Fully disabled under
40
+ * `prefers-reduced-motion` (renders a plain element). Use `index` to stagger a
41
+ * list/grid of cards.
42
+ */
43
+ export declare function FadeIn({ children, index, delay, className, as: Tag, }: {
44
+ children: ReactNode;
45
+ index?: number;
46
+ delay?: number;
47
+ className?: string;
48
+ as?: 'div' | 'li' | 'section';
49
+ }): import("react/jsx-runtime").JSX.Element;
50
+ /**
51
+ * Floating/hero surface using the sanctioned glass tokens. Falls back to the
52
+ * standard elevated surface when a glass token is absent (older brand builds).
53
+ */
54
+ export declare function GlassCard({ children, className, glow, }: {
55
+ children: ReactNode;
56
+ className?: string;
57
+ /** Add a subtle emerald glow ring. */
58
+ glow?: boolean;
59
+ }): import("react/jsx-runtime").JSX.Element;
60
+ export interface DonutDatum {
61
+ label: string;
62
+ value: number;
63
+ tone?: VizTone;
64
+ }
65
+ export declare function DonutChart({ data, centerLabel, centerValue, legend, height, valueFormatter, }: {
66
+ data: DonutDatum[];
67
+ centerLabel?: string;
68
+ centerValue?: string;
69
+ legend?: boolean;
70
+ height?: number;
71
+ valueFormatter?: (v: number) => string;
72
+ }): import("react/jsx-runtime").JSX.Element;
73
+ export declare function Sparkline({ data, tone, height, className, }: {
74
+ data: number[];
75
+ tone?: VizTone;
76
+ height?: number;
77
+ className?: string;
78
+ }): import("react/jsx-runtime").JSX.Element;
79
+ export declare function ProgressRing({ value, label, tone, size, strokeWidth, }: {
80
+ value: number;
81
+ label?: string;
82
+ tone?: VizTone;
83
+ size?: number;
84
+ strokeWidth?: number;
85
+ }): import("react/jsx-runtime").JSX.Element;
86
+ export interface TrendDatum {
87
+ label: string;
88
+ inflow: number;
89
+ outflow: number;
90
+ }
91
+ export declare function TrendBars({ data, height, valueFormatter, }: {
92
+ data: TrendDatum[];
93
+ height?: number;
94
+ valueFormatter?: (v: number) => string;
95
+ }): import("react/jsx-runtime").JSX.Element;
96
+ export interface AreaDatum {
97
+ x: string | number;
98
+ y: number;
99
+ }
100
+ export declare function MiniAreaChart({ data, target, tone, height, valueFormatter, }: {
101
+ data: AreaDatum[];
102
+ target?: number;
103
+ tone?: VizTone;
104
+ height?: number;
105
+ valueFormatter?: (v: number) => string;
106
+ }): import("react/jsx-runtime").JSX.Element;
107
+ export declare function LifecycleStepper({ steps, current, className, }: {
108
+ steps: string[];
109
+ current: string;
110
+ className?: string;
111
+ }): import("react/jsx-runtime").JSX.Element;
112
+ export declare function StatTile({ label, value, delta, deltaTone, deltaSuffix, spark, sparkTone, glow, icon, className, }: {
113
+ label: string;
114
+ value: string;
115
+ /** Optional signed delta rendered as a chip (icon + sign + status colour). */
116
+ delta?: number;
117
+ /** Override the auto tone derived from the delta sign. */
118
+ deltaTone?: 'positive' | 'negative' | 'neutral';
119
+ deltaSuffix?: string;
120
+ /** Optional inline sparkline series. */
121
+ spark?: number[];
122
+ sparkTone?: VizTone;
123
+ /** Subtle emerald glow ring for hero tiles. */
124
+ glow?: boolean;
125
+ icon?: ReactNode;
126
+ className?: string;
127
+ }): import("react/jsx-runtime").JSX.Element;
128
+ export {};
129
+ //# sourceMappingURL=viz.d.ts.map