@burdenoff/microfe-brainyrich 2026.819.1 → 2026.827.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 (514) hide show
  1. package/dist/_virtual/_rolldown/runtime.js +1 -1
  2. package/dist/brainyrich/BrainyRichRoot.d.ts +0 -1
  3. package/dist/brainyrich/BrainyRichRoot.js.map +1 -1
  4. package/dist/brainyrich/BrainyRichRoutes.js.map +1 -1
  5. package/dist/brainyrich/components/ActorName.js.map +1 -1
  6. package/dist/brainyrich/components/ConfirmDialog.d.ts +0 -1
  7. package/dist/brainyrich/components/ConfirmDialog.js.map +1 -1
  8. package/dist/brainyrich/components/LoadMore.js.map +1 -1
  9. package/dist/brainyrich/components/notify.js.map +1 -1
  10. package/dist/brainyrich/components/pickers.js.map +1 -1
  11. package/dist/brainyrich/components/reuse/CommentThread.js.map +1 -1
  12. package/dist/brainyrich/components/reuse/DocumentsPanel.d.ts +4 -0
  13. package/dist/brainyrich/components/reuse/DocumentsPanel.d.ts.map +1 -1
  14. package/dist/brainyrich/components/reuse/DocumentsPanel.js +150 -99
  15. package/dist/brainyrich/components/reuse/DocumentsPanel.js.map +1 -1
  16. package/dist/brainyrich/components/reuse/TagField.js.map +1 -1
  17. package/dist/brainyrich/components/reuse/transport.js.map +1 -1
  18. package/dist/brainyrich/components/viz.d.ts +0 -1
  19. package/dist/brainyrich/components/viz.js.map +1 -1
  20. package/dist/brainyrich/hooks/useBrainyRichAnalytics.js.map +1 -1
  21. package/dist/brainyrich/hooks/useBrainyRichApi.d.ts +176 -1
  22. package/dist/brainyrich/hooks/useBrainyRichApi.d.ts.map +1 -1
  23. package/dist/brainyrich/hooks/useBrainyRichApi.js +96 -82
  24. package/dist/brainyrich/hooks/useBrainyRichApi.js.map +1 -1
  25. package/dist/brainyrich/pages/AccountsPage.d.ts.map +1 -1
  26. package/dist/brainyrich/pages/AccountsPage.js +367 -363
  27. package/dist/brainyrich/pages/AccountsPage.js.map +1 -1
  28. package/dist/brainyrich/pages/AdminFirmPage.d.ts.map +1 -1
  29. package/dist/brainyrich/pages/AdminFirmPage.js +115 -83
  30. package/dist/brainyrich/pages/AdminFirmPage.js.map +1 -1
  31. package/dist/brainyrich/pages/AiAssistantPage.d.ts.map +1 -1
  32. package/dist/brainyrich/pages/AiAssistantPage.js +251 -230
  33. package/dist/brainyrich/pages/AiAssistantPage.js.map +1 -1
  34. package/dist/brainyrich/pages/AnalyticsPage.js.map +1 -1
  35. package/dist/brainyrich/pages/DashboardPage.js.map +1 -1
  36. package/dist/brainyrich/pages/FamilyPage.js.map +1 -1
  37. package/dist/brainyrich/pages/FirmPage.d.ts.map +1 -1
  38. package/dist/brainyrich/pages/FirmPage.js +148 -116
  39. package/dist/brainyrich/pages/FirmPage.js.map +1 -1
  40. package/dist/brainyrich/pages/GoalsPage.js.map +1 -1
  41. package/dist/brainyrich/pages/InvestmentsPage.js.map +1 -1
  42. package/dist/brainyrich/pages/PortfoliosPage.d.ts +14 -0
  43. package/dist/brainyrich/pages/PortfoliosPage.d.ts.map +1 -1
  44. package/dist/brainyrich/pages/PortfoliosPage.js +530 -353
  45. package/dist/brainyrich/pages/PortfoliosPage.js.map +1 -1
  46. package/dist/brainyrich/pages/ReportsPage.js.map +1 -1
  47. package/dist/brainyrich/pages/RiskPage.d.ts.map +1 -1
  48. package/dist/brainyrich/pages/RiskPage.js +381 -396
  49. package/dist/brainyrich/pages/RiskPage.js.map +1 -1
  50. package/dist/brainyrich/pages/TaxPage.js.map +1 -1
  51. package/dist/brainyrich/pages/_shared.d.ts +21 -1
  52. package/dist/brainyrich/pages/_shared.d.ts.map +1 -1
  53. package/dist/brainyrich/pages/_shared.js +66 -31
  54. package/dist/brainyrich/pages/_shared.js.map +1 -1
  55. package/dist/brainyrich/providers/BrainyRichProvider.d.ts +0 -1
  56. package/dist/brainyrich/providers/BrainyRichProvider.js.map +1 -1
  57. package/dist/brainyrich/services/createSandboxAssistantTransport.js.map +1 -1
  58. package/dist/brainyrich/types/bra.d.ts.map +1 -1
  59. package/dist/brainyrich/types/index.d.ts +0 -1
  60. package/dist/brainyrich/utils/cn.d.ts +0 -1
  61. package/dist/brainyrich/utils/i18n.d.ts +0 -1
  62. package/dist/brainyrich/utils/i18n.js.map +1 -1
  63. package/dist/brainyrich/utils/nativeControls.d.ts +0 -1
  64. package/dist/brainyrich/utils/nativeControls.js.map +1 -1
  65. package/dist/brainyrich/utils/navigation.js.map +1 -1
  66. package/dist/brainyrich/utils/pageContext.js.map +1 -1
  67. package/dist/dev/main.d.ts +0 -1
  68. package/dist/node_modules/clsx/dist/clsx.js.map +1 -1
  69. package/dist/node_modules/d3-array/src/ascending.js.map +1 -1
  70. package/dist/node_modules/d3-array/src/bisect.js.map +1 -1
  71. package/dist/node_modules/d3-array/src/bisector.js.map +1 -1
  72. package/dist/node_modules/d3-array/src/descending.js.map +1 -1
  73. package/dist/node_modules/d3-array/src/max.js.map +1 -1
  74. package/dist/node_modules/d3-array/src/min.js.map +1 -1
  75. package/dist/node_modules/d3-array/src/number.js.map +1 -1
  76. package/dist/node_modules/d3-array/src/quantile.js.map +1 -1
  77. package/dist/node_modules/d3-array/src/quickselect.js.map +1 -1
  78. package/dist/node_modules/d3-array/src/range.js.map +1 -1
  79. package/dist/node_modules/d3-array/src/sort.js.map +1 -1
  80. package/dist/node_modules/d3-array/src/ticks.js.map +1 -1
  81. package/dist/node_modules/d3-color/src/color.js.map +1 -1
  82. package/dist/node_modules/d3-color/src/define.js.map +1 -1
  83. package/dist/node_modules/d3-format/src/defaultLocale.js.map +1 -1
  84. package/dist/node_modules/d3-format/src/exponent.js.map +1 -1
  85. package/dist/node_modules/d3-format/src/formatDecimal.js.map +1 -1
  86. package/dist/node_modules/d3-format/src/formatGroup.js.map +1 -1
  87. package/dist/node_modules/d3-format/src/formatNumerals.js.map +1 -1
  88. package/dist/node_modules/d3-format/src/formatPrefixAuto.js.map +1 -1
  89. package/dist/node_modules/d3-format/src/formatRounded.js.map +1 -1
  90. package/dist/node_modules/d3-format/src/formatSpecifier.js.map +1 -1
  91. package/dist/node_modules/d3-format/src/formatTrim.js.map +1 -1
  92. package/dist/node_modules/d3-format/src/formatTypes.js.map +1 -1
  93. package/dist/node_modules/d3-format/src/identity.js.map +1 -1
  94. package/dist/node_modules/d3-format/src/locale.js.map +1 -1
  95. package/dist/node_modules/d3-format/src/precisionFixed.js.map +1 -1
  96. package/dist/node_modules/d3-format/src/precisionPrefix.js.map +1 -1
  97. package/dist/node_modules/d3-format/src/precisionRound.js.map +1 -1
  98. package/dist/node_modules/d3-interpolate/src/array.js.map +1 -1
  99. package/dist/node_modules/d3-interpolate/src/basis.js.map +1 -1
  100. package/dist/node_modules/d3-interpolate/src/basisClosed.js.map +1 -1
  101. package/dist/node_modules/d3-interpolate/src/color.js.map +1 -1
  102. package/dist/node_modules/d3-interpolate/src/date.js.map +1 -1
  103. package/dist/node_modules/d3-interpolate/src/number.js.map +1 -1
  104. package/dist/node_modules/d3-interpolate/src/numberArray.js.map +1 -1
  105. package/dist/node_modules/d3-interpolate/src/object.js.map +1 -1
  106. package/dist/node_modules/d3-interpolate/src/piecewise.js.map +1 -1
  107. package/dist/node_modules/d3-interpolate/src/rgb.js.map +1 -1
  108. package/dist/node_modules/d3-interpolate/src/round.js.map +1 -1
  109. package/dist/node_modules/d3-interpolate/src/string.js.map +1 -1
  110. package/dist/node_modules/d3-interpolate/src/value.js.map +1 -1
  111. package/dist/node_modules/d3-path/src/path.js.map +1 -1
  112. package/dist/node_modules/d3-scale/src/band.js.map +1 -1
  113. package/dist/node_modules/d3-scale/src/constant.js.map +1 -1
  114. package/dist/node_modules/d3-scale/src/continuous.js.map +1 -1
  115. package/dist/node_modules/d3-scale/src/diverging.js.map +1 -1
  116. package/dist/node_modules/d3-scale/src/identity.js.map +1 -1
  117. package/dist/node_modules/d3-scale/src/init.js.map +1 -1
  118. package/dist/node_modules/d3-scale/src/linear.js.map +1 -1
  119. package/dist/node_modules/d3-scale/src/log.js.map +1 -1
  120. package/dist/node_modules/d3-scale/src/nice.js.map +1 -1
  121. package/dist/node_modules/d3-scale/src/number.js.map +1 -1
  122. package/dist/node_modules/d3-scale/src/ordinal.js.map +1 -1
  123. package/dist/node_modules/d3-scale/src/pow.js.map +1 -1
  124. package/dist/node_modules/d3-scale/src/quantile.js.map +1 -1
  125. package/dist/node_modules/d3-scale/src/quantize.js.map +1 -1
  126. package/dist/node_modules/d3-scale/src/radial.js.map +1 -1
  127. package/dist/node_modules/d3-scale/src/sequential.js.map +1 -1
  128. package/dist/node_modules/d3-scale/src/sequentialQuantile.js.map +1 -1
  129. package/dist/node_modules/d3-scale/src/symlog.js.map +1 -1
  130. package/dist/node_modules/d3-scale/src/threshold.js.map +1 -1
  131. package/dist/node_modules/d3-scale/src/tickFormat.js.map +1 -1
  132. package/dist/node_modules/d3-scale/src/time.js.map +1 -1
  133. package/dist/node_modules/d3-scale/src/utcTime.js.map +1 -1
  134. package/dist/node_modules/d3-shape/src/area.js.map +1 -1
  135. package/dist/node_modules/d3-shape/src/array.js.map +1 -1
  136. package/dist/node_modules/d3-shape/src/constant.js.map +1 -1
  137. package/dist/node_modules/d3-shape/src/curve/basis.js.map +1 -1
  138. package/dist/node_modules/d3-shape/src/curve/basisClosed.js.map +1 -1
  139. package/dist/node_modules/d3-shape/src/curve/basisOpen.js.map +1 -1
  140. package/dist/node_modules/d3-shape/src/curve/bump.js.map +1 -1
  141. package/dist/node_modules/d3-shape/src/curve/linear.js.map +1 -1
  142. package/dist/node_modules/d3-shape/src/curve/linearClosed.js.map +1 -1
  143. package/dist/node_modules/d3-shape/src/curve/monotone.js.map +1 -1
  144. package/dist/node_modules/d3-shape/src/curve/natural.js.map +1 -1
  145. package/dist/node_modules/d3-shape/src/curve/step.js.map +1 -1
  146. package/dist/node_modules/d3-shape/src/line.js.map +1 -1
  147. package/dist/node_modules/d3-shape/src/noop.js.map +1 -1
  148. package/dist/node_modules/d3-shape/src/offset/expand.js.map +1 -1
  149. package/dist/node_modules/d3-shape/src/offset/none.js.map +1 -1
  150. package/dist/node_modules/d3-shape/src/offset/silhouette.js.map +1 -1
  151. package/dist/node_modules/d3-shape/src/offset/wiggle.js.map +1 -1
  152. package/dist/node_modules/d3-shape/src/order/none.js.map +1 -1
  153. package/dist/node_modules/d3-shape/src/path.js.map +1 -1
  154. package/dist/node_modules/d3-shape/src/point.js.map +1 -1
  155. package/dist/node_modules/d3-shape/src/stack.js.map +1 -1
  156. package/dist/node_modules/d3-shape/src/symbol/circle.js.map +1 -1
  157. package/dist/node_modules/d3-shape/src/symbol/cross.js.map +1 -1
  158. package/dist/node_modules/d3-shape/src/symbol/diamond.js.map +1 -1
  159. package/dist/node_modules/d3-shape/src/symbol/square.js.map +1 -1
  160. package/dist/node_modules/d3-shape/src/symbol/star.js.map +1 -1
  161. package/dist/node_modules/d3-shape/src/symbol/triangle.js.map +1 -1
  162. package/dist/node_modules/d3-shape/src/symbol/wye.js.map +1 -1
  163. package/dist/node_modules/d3-shape/src/symbol.js.map +1 -1
  164. package/dist/node_modules/d3-time/src/day.js.map +1 -1
  165. package/dist/node_modules/d3-time/src/hour.js.map +1 -1
  166. package/dist/node_modules/d3-time/src/interval.js.map +1 -1
  167. package/dist/node_modules/d3-time/src/millisecond.js.map +1 -1
  168. package/dist/node_modules/d3-time/src/minute.js.map +1 -1
  169. package/dist/node_modules/d3-time/src/month.js.map +1 -1
  170. package/dist/node_modules/d3-time/src/second.js.map +1 -1
  171. package/dist/node_modules/d3-time/src/ticks.js.map +1 -1
  172. package/dist/node_modules/d3-time/src/week.js.map +1 -1
  173. package/dist/node_modules/d3-time/src/year.js.map +1 -1
  174. package/dist/node_modules/d3-time-format/src/defaultLocale.js.map +1 -1
  175. package/dist/node_modules/d3-time-format/src/locale.js.map +1 -1
  176. package/dist/node_modules/decimal.js-light/decimal.js.map +1 -1
  177. package/dist/node_modules/eventemitter3/index.js.map +1 -1
  178. package/dist/node_modules/fast-equals/dist/es/index.js.map +1 -1
  179. package/dist/node_modules/internmap/src/index.js.map +1 -1
  180. package/dist/node_modules/lodash/_DataView.js.map +1 -1
  181. package/dist/node_modules/lodash/_Hash.js.map +1 -1
  182. package/dist/node_modules/lodash/_ListCache.js.map +1 -1
  183. package/dist/node_modules/lodash/_Map.js.map +1 -1
  184. package/dist/node_modules/lodash/_MapCache.js.map +1 -1
  185. package/dist/node_modules/lodash/_Promise.js.map +1 -1
  186. package/dist/node_modules/lodash/_Set.js.map +1 -1
  187. package/dist/node_modules/lodash/_SetCache.js.map +1 -1
  188. package/dist/node_modules/lodash/_Stack.js +2 -1
  189. package/dist/node_modules/lodash/_Stack.js.map +1 -1
  190. package/dist/node_modules/lodash/_Symbol.js.map +1 -1
  191. package/dist/node_modules/lodash/_Uint8Array.js.map +1 -1
  192. package/dist/node_modules/lodash/_WeakMap.js.map +1 -1
  193. package/dist/node_modules/lodash/_apply.js.map +1 -1
  194. package/dist/node_modules/lodash/_arrayEvery.js.map +1 -1
  195. package/dist/node_modules/lodash/_arrayFilter.js.map +1 -1
  196. package/dist/node_modules/lodash/_arrayIncludes.js.map +1 -1
  197. package/dist/node_modules/lodash/_arrayIncludesWith.js.map +1 -1
  198. package/dist/node_modules/lodash/_arrayLikeKeys.js.map +1 -1
  199. package/dist/node_modules/lodash/_arrayMap.js.map +1 -1
  200. package/dist/node_modules/lodash/_arrayPush.js.map +1 -1
  201. package/dist/node_modules/lodash/_arraySome.js.map +1 -1
  202. package/dist/node_modules/lodash/_asciiToArray.js.map +1 -1
  203. package/dist/node_modules/lodash/_assocIndexOf.js.map +1 -1
  204. package/dist/node_modules/lodash/_baseAssignValue.js.map +1 -1
  205. package/dist/node_modules/lodash/_baseEach.js.map +1 -1
  206. package/dist/node_modules/lodash/_baseEvery.js.map +1 -1
  207. package/dist/node_modules/lodash/_baseExtremum.js.map +1 -1
  208. package/dist/node_modules/lodash/_baseFindIndex.js.map +1 -1
  209. package/dist/node_modules/lodash/_baseFlatten.js.map +1 -1
  210. package/dist/node_modules/lodash/_baseFor.js.map +1 -1
  211. package/dist/node_modules/lodash/_baseForOwn.js.map +1 -1
  212. package/dist/node_modules/lodash/_baseGet.js.map +1 -1
  213. package/dist/node_modules/lodash/_baseGetAllKeys.js.map +1 -1
  214. package/dist/node_modules/lodash/_baseGetTag.js.map +1 -1
  215. package/dist/node_modules/lodash/_baseGt.js.map +1 -1
  216. package/dist/node_modules/lodash/_baseHasIn.js.map +1 -1
  217. package/dist/node_modules/lodash/_baseIndexOf.js.map +1 -1
  218. package/dist/node_modules/lodash/_baseIsArguments.js.map +1 -1
  219. package/dist/node_modules/lodash/_baseIsEqual.js.map +1 -1
  220. package/dist/node_modules/lodash/_baseIsEqualDeep.js.map +1 -1
  221. package/dist/node_modules/lodash/_baseIsMatch.js.map +1 -1
  222. package/dist/node_modules/lodash/_baseIsNaN.js.map +1 -1
  223. package/dist/node_modules/lodash/_baseIsNative.js.map +1 -1
  224. package/dist/node_modules/lodash/_baseIsTypedArray.js.map +1 -1
  225. package/dist/node_modules/lodash/_baseIteratee.js.map +1 -1
  226. package/dist/node_modules/lodash/_baseKeys.js.map +1 -1
  227. package/dist/node_modules/lodash/_baseLt.js.map +1 -1
  228. package/dist/node_modules/lodash/_baseMap.js.map +1 -1
  229. package/dist/node_modules/lodash/_baseMatches.js.map +1 -1
  230. package/dist/node_modules/lodash/_baseMatchesProperty.js.map +1 -1
  231. package/dist/node_modules/lodash/_baseOrderBy.js.map +1 -1
  232. package/dist/node_modules/lodash/_baseProperty.js.map +1 -1
  233. package/dist/node_modules/lodash/_basePropertyDeep.js.map +1 -1
  234. package/dist/node_modules/lodash/_baseRange.js.map +1 -1
  235. package/dist/node_modules/lodash/_baseRest.js.map +1 -1
  236. package/dist/node_modules/lodash/_baseSetToString.js.map +1 -1
  237. package/dist/node_modules/lodash/_baseSlice.js.map +1 -1
  238. package/dist/node_modules/lodash/_baseSome.js.map +1 -1
  239. package/dist/node_modules/lodash/_baseSortBy.js.map +1 -1
  240. package/dist/node_modules/lodash/_baseTimes.js.map +1 -1
  241. package/dist/node_modules/lodash/_baseToString.js.map +1 -1
  242. package/dist/node_modules/lodash/_baseTrim.js.map +1 -1
  243. package/dist/node_modules/lodash/_baseUnary.js.map +1 -1
  244. package/dist/node_modules/lodash/_baseUniq.js.map +1 -1
  245. package/dist/node_modules/lodash/_cacheHas.js.map +1 -1
  246. package/dist/node_modules/lodash/_castPath.js.map +1 -1
  247. package/dist/node_modules/lodash/_castSlice.js.map +1 -1
  248. package/dist/node_modules/lodash/_compareAscending.js.map +1 -1
  249. package/dist/node_modules/lodash/_compareMultiple.js.map +1 -1
  250. package/dist/node_modules/lodash/_coreJsData.js.map +1 -1
  251. package/dist/node_modules/lodash/_createBaseEach.js.map +1 -1
  252. package/dist/node_modules/lodash/_createBaseFor.js.map +1 -1
  253. package/dist/node_modules/lodash/_createCaseFirst.js.map +1 -1
  254. package/dist/node_modules/lodash/_createFind.js.map +1 -1
  255. package/dist/node_modules/lodash/_createRange.js.map +1 -1
  256. package/dist/node_modules/lodash/_createSet.js.map +1 -1
  257. package/dist/node_modules/lodash/_defineProperty.js.map +1 -1
  258. package/dist/node_modules/lodash/_equalArrays.js.map +1 -1
  259. package/dist/node_modules/lodash/_equalByTag.js.map +1 -1
  260. package/dist/node_modules/lodash/_equalObjects.js.map +1 -1
  261. package/dist/node_modules/lodash/_freeGlobal.js.map +1 -1
  262. package/dist/node_modules/lodash/_getAllKeys.js.map +1 -1
  263. package/dist/node_modules/lodash/_getMapData.js.map +1 -1
  264. package/dist/node_modules/lodash/_getMatchData.js.map +1 -1
  265. package/dist/node_modules/lodash/_getNative.js.map +1 -1
  266. package/dist/node_modules/lodash/_getPrototype.js.map +1 -1
  267. package/dist/node_modules/lodash/_getRawTag.js.map +1 -1
  268. package/dist/node_modules/lodash/_getSymbols.js.map +1 -1
  269. package/dist/node_modules/lodash/_getTag.js.map +1 -1
  270. package/dist/node_modules/lodash/_getValue.js.map +1 -1
  271. package/dist/node_modules/lodash/_hasPath.js.map +1 -1
  272. package/dist/node_modules/lodash/_hasUnicode.js.map +1 -1
  273. package/dist/node_modules/lodash/_hashClear.js.map +1 -1
  274. package/dist/node_modules/lodash/_hashDelete.js.map +1 -1
  275. package/dist/node_modules/lodash/_hashGet.js.map +1 -1
  276. package/dist/node_modules/lodash/_hashHas.js.map +1 -1
  277. package/dist/node_modules/lodash/_hashSet.js.map +1 -1
  278. package/dist/node_modules/lodash/_isFlattenable.js.map +1 -1
  279. package/dist/node_modules/lodash/_isIndex.js.map +1 -1
  280. package/dist/node_modules/lodash/_isIterateeCall.js.map +1 -1
  281. package/dist/node_modules/lodash/_isKey.js.map +1 -1
  282. package/dist/node_modules/lodash/_isKeyable.js.map +1 -1
  283. package/dist/node_modules/lodash/_isMasked.js.map +1 -1
  284. package/dist/node_modules/lodash/_isPrototype.js.map +1 -1
  285. package/dist/node_modules/lodash/_isStrictComparable.js.map +1 -1
  286. package/dist/node_modules/lodash/_listCacheClear.js.map +1 -1
  287. package/dist/node_modules/lodash/_listCacheDelete.js.map +1 -1
  288. package/dist/node_modules/lodash/_listCacheGet.js.map +1 -1
  289. package/dist/node_modules/lodash/_listCacheHas.js.map +1 -1
  290. package/dist/node_modules/lodash/_listCacheSet.js.map +1 -1
  291. package/dist/node_modules/lodash/_mapCacheClear.js.map +1 -1
  292. package/dist/node_modules/lodash/_mapCacheDelete.js.map +1 -1
  293. package/dist/node_modules/lodash/_mapCacheGet.js.map +1 -1
  294. package/dist/node_modules/lodash/_mapCacheHas.js.map +1 -1
  295. package/dist/node_modules/lodash/_mapCacheSet.js.map +1 -1
  296. package/dist/node_modules/lodash/_mapToArray.js.map +1 -1
  297. package/dist/node_modules/lodash/_matchesStrictComparable.js.map +1 -1
  298. package/dist/node_modules/lodash/_memoizeCapped.js.map +1 -1
  299. package/dist/node_modules/lodash/_nativeCreate.js.map +1 -1
  300. package/dist/node_modules/lodash/_nativeKeys.js.map +1 -1
  301. package/dist/node_modules/lodash/_nodeUtil.js.map +1 -1
  302. package/dist/node_modules/lodash/_objectToString.js.map +1 -1
  303. package/dist/node_modules/lodash/_overArg.js.map +1 -1
  304. package/dist/node_modules/lodash/_overRest.js.map +1 -1
  305. package/dist/node_modules/lodash/_root.js.map +1 -1
  306. package/dist/node_modules/lodash/_setCacheAdd.js.map +1 -1
  307. package/dist/node_modules/lodash/_setCacheHas.js.map +1 -1
  308. package/dist/node_modules/lodash/_setToArray.js.map +1 -1
  309. package/dist/node_modules/lodash/_setToString.js.map +1 -1
  310. package/dist/node_modules/lodash/_shortOut.js.map +1 -1
  311. package/dist/node_modules/lodash/_stackClear.js.map +1 -1
  312. package/dist/node_modules/lodash/_stackDelete.js.map +1 -1
  313. package/dist/node_modules/lodash/_stackGet.js.map +1 -1
  314. package/dist/node_modules/lodash/_stackHas.js.map +1 -1
  315. package/dist/node_modules/lodash/_stackSet.js.map +1 -1
  316. package/dist/node_modules/lodash/_strictIndexOf.js.map +1 -1
  317. package/dist/node_modules/lodash/_stringToArray.js.map +1 -1
  318. package/dist/node_modules/lodash/_stringToPath.js.map +1 -1
  319. package/dist/node_modules/lodash/_toKey.js.map +1 -1
  320. package/dist/node_modules/lodash/_toSource.js.map +1 -1
  321. package/dist/node_modules/lodash/_trimmedEndIndex.js.map +1 -1
  322. package/dist/node_modules/lodash/_unicodeToArray.js.map +1 -1
  323. package/dist/node_modules/lodash/constant.js.map +1 -1
  324. package/dist/node_modules/lodash/debounce.js.map +1 -1
  325. package/dist/node_modules/lodash/eq.js.map +1 -1
  326. package/dist/node_modules/lodash/every.js.map +1 -1
  327. package/dist/node_modules/lodash/find.js.map +1 -1
  328. package/dist/node_modules/lodash/findIndex.js.map +1 -1
  329. package/dist/node_modules/lodash/flatMap.js.map +1 -1
  330. package/dist/node_modules/lodash/get.js.map +1 -1
  331. package/dist/node_modules/lodash/hasIn.js.map +1 -1
  332. package/dist/node_modules/lodash/identity.js.map +1 -1
  333. package/dist/node_modules/lodash/isArguments.js.map +1 -1
  334. package/dist/node_modules/lodash/isArray.js.map +1 -1
  335. package/dist/node_modules/lodash/isArrayLike.js.map +1 -1
  336. package/dist/node_modules/lodash/isBoolean.js.map +1 -1
  337. package/dist/node_modules/lodash/isBuffer.js.map +1 -1
  338. package/dist/node_modules/lodash/isEqual.js.map +1 -1
  339. package/dist/node_modules/lodash/isFunction.js.map +1 -1
  340. package/dist/node_modules/lodash/isLength.js.map +1 -1
  341. package/dist/node_modules/lodash/isNaN.js.map +1 -1
  342. package/dist/node_modules/lodash/isNil.js.map +1 -1
  343. package/dist/node_modules/lodash/isNumber.js.map +1 -1
  344. package/dist/node_modules/lodash/isObject.js.map +1 -1
  345. package/dist/node_modules/lodash/isObjectLike.js.map +1 -1
  346. package/dist/node_modules/lodash/isPlainObject.js.map +1 -1
  347. package/dist/node_modules/lodash/isString.js.map +1 -1
  348. package/dist/node_modules/lodash/isSymbol.js.map +1 -1
  349. package/dist/node_modules/lodash/isTypedArray.js.map +1 -1
  350. package/dist/node_modules/lodash/keys.js.map +1 -1
  351. package/dist/node_modules/lodash/last.js.map +1 -1
  352. package/dist/node_modules/lodash/map.js.map +1 -1
  353. package/dist/node_modules/lodash/mapValues.js.map +1 -1
  354. package/dist/node_modules/lodash/max.js.map +1 -1
  355. package/dist/node_modules/lodash/maxBy.js.map +1 -1
  356. package/dist/node_modules/lodash/memoize.js.map +1 -1
  357. package/dist/node_modules/lodash/min.js.map +1 -1
  358. package/dist/node_modules/lodash/minBy.js.map +1 -1
  359. package/dist/node_modules/lodash/noop.js.map +1 -1
  360. package/dist/node_modules/lodash/now.js.map +1 -1
  361. package/dist/node_modules/lodash/property.js.map +1 -1
  362. package/dist/node_modules/lodash/range.js.map +1 -1
  363. package/dist/node_modules/lodash/some.js.map +1 -1
  364. package/dist/node_modules/lodash/sortBy.js.map +1 -1
  365. package/dist/node_modules/lodash/stubArray.js.map +1 -1
  366. package/dist/node_modules/lodash/stubFalse.js.map +1 -1
  367. package/dist/node_modules/lodash/throttle.js.map +1 -1
  368. package/dist/node_modules/lodash/toFinite.js.map +1 -1
  369. package/dist/node_modules/lodash/toInteger.js.map +1 -1
  370. package/dist/node_modules/lodash/toNumber.js.map +1 -1
  371. package/dist/node_modules/lodash/toString.js.map +1 -1
  372. package/dist/node_modules/lodash/uniqBy.js.map +1 -1
  373. package/dist/node_modules/lodash/upperFirst.js.map +1 -1
  374. package/dist/node_modules/object-assign/index.js.map +1 -1
  375. package/dist/node_modules/prop-types/checkPropTypes.js.map +1 -1
  376. package/dist/node_modules/prop-types/factoryWithThrowingShims.js.map +1 -1
  377. package/dist/node_modules/prop-types/factoryWithTypeCheckers.js.map +1 -1
  378. package/dist/node_modules/prop-types/index.js.map +1 -1
  379. package/dist/node_modules/prop-types/lib/ReactPropTypesSecret.js.map +1 -1
  380. package/dist/node_modules/prop-types/lib/has.js.map +1 -1
  381. package/dist/node_modules/prop-types/node_modules/react-is/cjs/react-is.development.js.map +1 -1
  382. package/dist/node_modules/prop-types/node_modules/react-is/cjs/react-is.production.min.js.map +1 -1
  383. package/dist/node_modules/prop-types/node_modules/react-is/index.js.map +1 -1
  384. package/dist/node_modules/react-is/cjs/react-is.development.js.map +1 -1
  385. package/dist/node_modules/react-is/cjs/react-is.production.min.js.map +1 -1
  386. package/dist/node_modules/react-is/index.js.map +1 -1
  387. package/dist/node_modules/react-smooth/es6/Animate.js +2 -2
  388. package/dist/node_modules/react-smooth/es6/Animate.js.map +1 -1
  389. package/dist/node_modules/react-smooth/es6/AnimateManager.js.map +1 -1
  390. package/dist/node_modules/react-smooth/es6/configUpdate.js.map +1 -1
  391. package/dist/node_modules/react-smooth/es6/easing.js.map +1 -1
  392. package/dist/node_modules/react-smooth/es6/setRafTimeout.js.map +1 -1
  393. package/dist/node_modules/react-smooth/es6/util.js.map +1 -1
  394. package/dist/node_modules/recharts/es6/cartesian/Area.js +13 -13
  395. package/dist/node_modules/recharts/es6/cartesian/Area.js.map +1 -1
  396. package/dist/node_modules/recharts/es6/cartesian/Bar.js +9 -9
  397. package/dist/node_modules/recharts/es6/cartesian/Bar.js.map +1 -1
  398. package/dist/node_modules/recharts/es6/cartesian/Brush.js +12 -12
  399. package/dist/node_modules/recharts/es6/cartesian/Brush.js.map +1 -1
  400. package/dist/node_modules/recharts/es6/cartesian/CartesianAxis.js +7 -7
  401. package/dist/node_modules/recharts/es6/cartesian/CartesianAxis.js.map +1 -1
  402. package/dist/node_modules/recharts/es6/cartesian/ErrorBar.js +4 -4
  403. package/dist/node_modules/recharts/es6/cartesian/ErrorBar.js.map +1 -1
  404. package/dist/node_modules/recharts/es6/cartesian/ReferenceArea.js +3 -3
  405. package/dist/node_modules/recharts/es6/cartesian/ReferenceArea.js.map +1 -1
  406. package/dist/node_modules/recharts/es6/cartesian/ReferenceDot.js +3 -3
  407. package/dist/node_modules/recharts/es6/cartesian/ReferenceDot.js.map +1 -1
  408. package/dist/node_modules/recharts/es6/cartesian/ReferenceLine.js +4 -4
  409. package/dist/node_modules/recharts/es6/cartesian/ReferenceLine.js.map +1 -1
  410. package/dist/node_modules/recharts/es6/cartesian/XAxis.js +3 -3
  411. package/dist/node_modules/recharts/es6/cartesian/XAxis.js.map +1 -1
  412. package/dist/node_modules/recharts/es6/cartesian/YAxis.js +3 -3
  413. package/dist/node_modules/recharts/es6/cartesian/YAxis.js.map +1 -1
  414. package/dist/node_modules/recharts/es6/cartesian/getEquidistantTicks.js.map +1 -1
  415. package/dist/node_modules/recharts/es6/cartesian/getTicks.js.map +1 -1
  416. package/dist/node_modules/recharts/es6/chart/AccessibilityManager.js +1 -1
  417. package/dist/node_modules/recharts/es6/chart/AccessibilityManager.js.map +1 -1
  418. package/dist/node_modules/recharts/es6/chart/AreaChart.js.map +1 -1
  419. package/dist/node_modules/recharts/es6/chart/BarChart.js.map +1 -1
  420. package/dist/node_modules/recharts/es6/chart/PieChart.js.map +1 -1
  421. package/dist/node_modules/recharts/es6/chart/generateCategoricalChart.js +22 -22
  422. package/dist/node_modules/recharts/es6/chart/generateCategoricalChart.js.map +1 -1
  423. package/dist/node_modules/recharts/es6/component/Cell.js.map +1 -1
  424. package/dist/node_modules/recharts/es6/component/Cursor.js +1 -1
  425. package/dist/node_modules/recharts/es6/component/Cursor.js.map +1 -1
  426. package/dist/node_modules/recharts/es6/component/DefaultLegendContent.js +11 -11
  427. package/dist/node_modules/recharts/es6/component/DefaultLegendContent.js.map +1 -1
  428. package/dist/node_modules/recharts/es6/component/DefaultTooltipContent.js +6 -6
  429. package/dist/node_modules/recharts/es6/component/DefaultTooltipContent.js.map +1 -1
  430. package/dist/node_modules/recharts/es6/component/Label.js +14 -14
  431. package/dist/node_modules/recharts/es6/component/Label.js.map +1 -1
  432. package/dist/node_modules/recharts/es6/component/LabelList.js +6 -6
  433. package/dist/node_modules/recharts/es6/component/LabelList.js.map +1 -1
  434. package/dist/node_modules/recharts/es6/component/Legend.js +5 -5
  435. package/dist/node_modules/recharts/es6/component/Legend.js.map +1 -1
  436. package/dist/node_modules/recharts/es6/component/ResponsiveContainer.js +3 -3
  437. package/dist/node_modules/recharts/es6/component/ResponsiveContainer.js.map +1 -1
  438. package/dist/node_modules/recharts/es6/component/Text.js +2 -2
  439. package/dist/node_modules/recharts/es6/component/Text.js.map +1 -1
  440. package/dist/node_modules/recharts/es6/component/Tooltip.js +3 -3
  441. package/dist/node_modules/recharts/es6/component/Tooltip.js.map +1 -1
  442. package/dist/node_modules/recharts/es6/component/TooltipBoundingBox.js +2 -2
  443. package/dist/node_modules/recharts/es6/component/TooltipBoundingBox.js.map +1 -1
  444. package/dist/node_modules/recharts/es6/container/Layer.js +2 -2
  445. package/dist/node_modules/recharts/es6/container/Layer.js.map +1 -1
  446. package/dist/node_modules/recharts/es6/container/Surface.js +2 -2
  447. package/dist/node_modules/recharts/es6/container/Surface.js.map +1 -1
  448. package/dist/node_modules/recharts/es6/context/chartLayoutContext.js +2 -2
  449. package/dist/node_modules/recharts/es6/context/chartLayoutContext.js.map +1 -1
  450. package/dist/node_modules/recharts/es6/polar/Pie.js +13 -13
  451. package/dist/node_modules/recharts/es6/polar/Pie.js.map +1 -1
  452. package/dist/node_modules/recharts/es6/polar/PolarAngleAxis.js +8 -8
  453. package/dist/node_modules/recharts/es6/polar/PolarAngleAxis.js.map +1 -1
  454. package/dist/node_modules/recharts/es6/polar/PolarRadiusAxis.js +6 -6
  455. package/dist/node_modules/recharts/es6/polar/PolarRadiusAxis.js.map +1 -1
  456. package/dist/node_modules/recharts/es6/shape/Cross.js +1 -1
  457. package/dist/node_modules/recharts/es6/shape/Cross.js.map +1 -1
  458. package/dist/node_modules/recharts/es6/shape/Curve.js +1 -1
  459. package/dist/node_modules/recharts/es6/shape/Curve.js.map +1 -1
  460. package/dist/node_modules/recharts/es6/shape/Dot.js +1 -1
  461. package/dist/node_modules/recharts/es6/shape/Dot.js.map +1 -1
  462. package/dist/node_modules/recharts/es6/shape/Polygon.js +4 -4
  463. package/dist/node_modules/recharts/es6/shape/Polygon.js.map +1 -1
  464. package/dist/node_modules/recharts/es6/shape/Rectangle.js +4 -4
  465. package/dist/node_modules/recharts/es6/shape/Rectangle.js.map +1 -1
  466. package/dist/node_modules/recharts/es6/shape/Sector.js +1 -1
  467. package/dist/node_modules/recharts/es6/shape/Sector.js.map +1 -1
  468. package/dist/node_modules/recharts/es6/shape/Symbols.js +1 -1
  469. package/dist/node_modules/recharts/es6/shape/Symbols.js.map +1 -1
  470. package/dist/node_modules/recharts/es6/shape/Trapezoid.js +4 -4
  471. package/dist/node_modules/recharts/es6/shape/Trapezoid.js.map +1 -1
  472. package/dist/node_modules/recharts/es6/util/ActiveShapeUtils.js +9 -9
  473. package/dist/node_modules/recharts/es6/util/ActiveShapeUtils.js.map +1 -1
  474. package/dist/node_modules/recharts/es6/util/BarUtils.js +1 -1
  475. package/dist/node_modules/recharts/es6/util/BarUtils.js.map +1 -1
  476. package/dist/node_modules/recharts/es6/util/CartesianUtils.js +1 -1
  477. package/dist/node_modules/recharts/es6/util/CartesianUtils.js.map +1 -1
  478. package/dist/node_modules/recharts/es6/util/ChartUtils.js.map +1 -1
  479. package/dist/node_modules/recharts/es6/util/CssPrefixUtils.js.map +1 -1
  480. package/dist/node_modules/recharts/es6/util/DOMUtils.js.map +1 -1
  481. package/dist/node_modules/recharts/es6/util/DataUtils.js.map +1 -1
  482. package/dist/node_modules/recharts/es6/util/DetectReferenceElementsDomain.js.map +1 -1
  483. package/dist/node_modules/recharts/es6/util/Events.js.map +1 -1
  484. package/dist/node_modules/recharts/es6/util/Global.js.map +1 -1
  485. package/dist/node_modules/recharts/es6/util/IfOverflowMatches.js.map +1 -1
  486. package/dist/node_modules/recharts/es6/util/LogUtils.js.map +1 -1
  487. package/dist/node_modules/recharts/es6/util/PolarUtils.js +1 -1
  488. package/dist/node_modules/recharts/es6/util/PolarUtils.js.map +1 -1
  489. package/dist/node_modules/recharts/es6/util/ReactUtils.js +1 -1
  490. package/dist/node_modules/recharts/es6/util/ReactUtils.js.map +1 -1
  491. package/dist/node_modules/recharts/es6/util/ReduceCSSCalc.js +1 -1
  492. package/dist/node_modules/recharts/es6/util/ReduceCSSCalc.js.map +1 -1
  493. package/dist/node_modules/recharts/es6/util/ShallowEqual.js.map +1 -1
  494. package/dist/node_modules/recharts/es6/util/TickUtils.js.map +1 -1
  495. package/dist/node_modules/recharts/es6/util/calculateViewBox.js.map +1 -1
  496. package/dist/node_modules/recharts/es6/util/cursor/getCursorPoints.js.map +1 -1
  497. package/dist/node_modules/recharts/es6/util/cursor/getCursorRectangle.js.map +1 -1
  498. package/dist/node_modules/recharts/es6/util/cursor/getRadialCursorPoints.js.map +1 -1
  499. package/dist/node_modules/recharts/es6/util/getEveryNthWithCondition.js.map +1 -1
  500. package/dist/node_modules/recharts/es6/util/getLegendProps.js.map +1 -1
  501. package/dist/node_modules/recharts/es6/util/isDomainSpecifiedByUser.js.map +1 -1
  502. package/dist/node_modules/recharts/es6/util/payload/getUniqPayload.js.map +1 -1
  503. package/dist/node_modules/recharts/es6/util/tooltip/translate.js.map +1 -1
  504. package/dist/node_modules/recharts/es6/util/types.js +1 -1
  505. package/dist/node_modules/recharts/es6/util/types.js.map +1 -1
  506. package/dist/node_modules/recharts-scale/es6/getNiceTickValues.js.map +1 -1
  507. package/dist/node_modules/recharts-scale/es6/util/arithmetic.js.map +1 -1
  508. package/dist/node_modules/recharts-scale/es6/util/utils.js.map +1 -1
  509. package/dist/node_modules/sonner/dist/index.js.map +1 -1
  510. package/dist/node_modules/tailwind-merge/dist/bundle-mjs.js +1 -1
  511. package/dist/node_modules/tailwind-merge/dist/bundle-mjs.js.map +1 -1
  512. package/dist/node_modules/tiny-invariant/dist/esm/tiny-invariant.js.map +1 -1
  513. package/dist/stories/LoadMore.stories.d.ts +0 -1
  514. package/package.json +15 -7
@@ -1,90 +1,102 @@
1
1
  import { tWithFallback as e } from "../utils/i18n.js";
2
2
  import { useAdvisors as t, useEnsureAdvisorProfile as n, useFirmReport as r, useMyAdvisorProfile as i, useSetAdvisorRole as a } from "../hooks/useBrainyRichApi.js";
3
3
  import { FadeIn as o, StatTile as s } from "../components/viz.js";
4
- import { EmptyState as c, ErrorState as l, LoadingState as u, SectionShell as d, formatDate as f, formatMoney as p } from "./_shared.js";
5
- import { useState as m } from "react";
6
- import { Building2 as h, PlusCircle as g, ShieldCheck as _, UserPlus as v, Users as y } from "lucide-react";
7
- import { useI18n as b } from "@burdenoff/fe-libs/shared/providers/shell/I18nProvider";
8
- import { jsx as x, jsxs as S } from "react/jsx-runtime";
9
- import { Badge as C, Button as w, Card as T, CardContent as E, CardDescription as D, CardHeader as O, CardTitle as k, Input as A, Label as j, Select as M, SelectContent as N, SelectItem as P, SelectTrigger as F, SelectValue as I, Table as L, TableBody as R, TableCell as z, TableHead as B, TableHeader as V, TableRow as H } from "@burdenoff/fe-libs/ui";
4
+ import { AllocationBars as c, EmptyState as l, ErrorState as u, LoadingState as d, SectionShell as f, formatDate as p, formatMoney as m, formatPct as h } from "./_shared.js";
5
+ import { useState as g } from "react";
6
+ import { Building2 as _, PlusCircle as v, ShieldCheck as y, UserPlus as b, Users as x } from "lucide-react";
7
+ import { useI18n as S } from "@burdenoff/fe-libs/shared/providers/shell/I18nProvider";
8
+ import { jsx as C, jsxs as w } from "react/jsx-runtime";
9
+ import { Badge as T, Button as E, Card as D, CardContent as O, CardDescription as k, CardHeader as A, CardTitle as j, Input as M, Label as N, Select as P, SelectContent as F, SelectItem as I, SelectTrigger as L, SelectValue as R, Table as z, TableBody as B, TableCell as V, TableHead as H, TableHeader as U, TableRow as W } from "@burdenoff/fe-libs/ui";
10
10
  //#region src/brainyrich/pages/FirmPage.tsx
11
- function U() {
12
- let { t } = b(), r = (n, r, i) => e(t, n, r, i), a = i(), s = n(), l = a.data, f = l?.role === "FIRM_ADMIN", [p, g] = m(""), [M, N] = m("");
13
- return a.isLoading ? /* @__PURE__ */ x(d, {
11
+ var G = 8;
12
+ function K(e, t, n) {
13
+ return t <= 0 ? [] : e.slice(0, G).map((e) => {
14
+ let r = e.aum / t * 100;
15
+ return {
16
+ label: e.displayName ?? e.email ?? e.advisorId,
17
+ value: r,
18
+ tone: "accent",
19
+ caption: `${m(e.aum, n)} · ${h(r)}`
20
+ };
21
+ });
22
+ }
23
+ function q() {
24
+ let { t } = S(), r = (n, r, i) => e(t, n, r, i), a = i(), s = n(), c = a.data, u = c?.role === "FIRM_ADMIN", [p, m] = g(""), [h, v] = g("");
25
+ return a.isLoading ? /* @__PURE__ */ C(f, {
14
26
  title: r("brainyrich.firm.title", "Firm"),
15
27
  description: r("brainyrich.firm.description", "Firm roster and firm-wide AUM reporting."),
16
- children: /* @__PURE__ */ x(u, {})
17
- }) : l ? /* @__PURE__ */ S(d, {
28
+ children: /* @__PURE__ */ C(d, {})
29
+ }) : c ? /* @__PURE__ */ w(f, {
18
30
  title: r("brainyrich.firm.title", "Firm"),
19
31
  description: r("brainyrich.firm.description", "Firm roster and firm-wide AUM reporting."),
20
- children: [/* @__PURE__ */ x(o, { children: /* @__PURE__ */ x(T, { children: /* @__PURE__ */ x(E, {
32
+ children: [/* @__PURE__ */ C(o, { children: /* @__PURE__ */ C(D, { children: /* @__PURE__ */ C(O, {
21
33
  className: "flex flex-wrap items-center justify-between gap-3 py-4",
22
- children: /* @__PURE__ */ S("div", {
34
+ children: /* @__PURE__ */ w("div", {
23
35
  className: "flex items-center gap-2",
24
36
  children: [
25
- /* @__PURE__ */ x(_, {
37
+ /* @__PURE__ */ C(y, {
26
38
  className: "size-4 text-status-success-text",
27
39
  "aria-hidden": "true"
28
40
  }),
29
- /* @__PURE__ */ x("span", {
41
+ /* @__PURE__ */ C("span", {
30
42
  className: "text-sm text-text-secondary",
31
43
  children: r("brainyrich.firm.you", "You are on the firm roster as")
32
44
  }),
33
- /* @__PURE__ */ x(C, {
34
- variant: f ? "default" : "secondary",
35
- children: l.role
45
+ /* @__PURE__ */ C(T, {
46
+ variant: u ? "default" : "secondary",
47
+ children: c.role
36
48
  })
37
49
  ]
38
50
  })
39
- }) }) }), f ? /* @__PURE__ */ x(W, { translate: r }) : /* @__PURE__ */ x(o, { children: /* @__PURE__ */ x(c, {
40
- icon: /* @__PURE__ */ x(y, {
51
+ }) }) }), u ? /* @__PURE__ */ C(J, { translate: r }) : /* @__PURE__ */ C(o, { children: /* @__PURE__ */ C(l, {
52
+ icon: /* @__PURE__ */ C(x, {
41
53
  className: "size-8",
42
54
  "aria-hidden": "true"
43
55
  }),
44
56
  title: r("brainyrich.firm.notAdmin", "Firm-wide roster and AUM reporting are visible to firm admins only.")
45
57
  }) })]
46
- }) : /* @__PURE__ */ x(d, {
58
+ }) : /* @__PURE__ */ C(f, {
47
59
  title: r("brainyrich.firm.title", "Firm"),
48
60
  description: r("brainyrich.firm.description", "Firm roster and firm-wide AUM reporting."),
49
- children: /* @__PURE__ */ x(o, { children: /* @__PURE__ */ S(T, { children: [/* @__PURE__ */ S(O, { children: [/* @__PURE__ */ S(k, {
61
+ children: /* @__PURE__ */ C(o, { children: /* @__PURE__ */ w(D, { children: [/* @__PURE__ */ w(A, { children: [/* @__PURE__ */ w(j, {
50
62
  className: "flex items-center gap-2",
51
- children: [/* @__PURE__ */ x(h, {
63
+ children: [/* @__PURE__ */ C(_, {
52
64
  className: "size-4",
53
65
  "aria-hidden": "true"
54
66
  }), r("brainyrich.firm.join.title", "Join the firm roster")]
55
- }), /* @__PURE__ */ x(D, { children: r("brainyrich.firm.join.description", "You're not on this workspace's BrainyRich firm roster yet. The first advisor to register becomes the firm admin automatically; anyone after that is invited by an existing admin.") })] }), /* @__PURE__ */ S(E, {
67
+ }), /* @__PURE__ */ C(k, { children: r("brainyrich.firm.join.description", "You're not on this workspace's BrainyRich firm roster yet. The first advisor to register becomes the firm admin automatically; anyone after that is invited by an existing admin.") })] }), /* @__PURE__ */ w(O, {
56
68
  className: "space-y-4",
57
- children: [/* @__PURE__ */ S("div", {
69
+ children: [/* @__PURE__ */ w("div", {
58
70
  className: "grid gap-4 sm:grid-cols-2",
59
- children: [/* @__PURE__ */ S("div", {
71
+ children: [/* @__PURE__ */ w("div", {
60
72
  className: "space-y-1.5",
61
- children: [/* @__PURE__ */ x(j, {
73
+ children: [/* @__PURE__ */ C(N, {
62
74
  htmlFor: "firm-display-name",
63
75
  children: r("brainyrich.firm.fields.displayName", "Display name")
64
- }), /* @__PURE__ */ x(A, {
76
+ }), /* @__PURE__ */ C(M, {
65
77
  id: "firm-display-name",
66
78
  value: p,
67
- onChange: (e) => g(e.target.value)
79
+ onChange: (e) => m(e.target.value)
68
80
  })]
69
- }), /* @__PURE__ */ S("div", {
81
+ }), /* @__PURE__ */ w("div", {
70
82
  className: "space-y-1.5",
71
- children: [/* @__PURE__ */ x(j, {
83
+ children: [/* @__PURE__ */ C(N, {
72
84
  htmlFor: "firm-email",
73
85
  children: r("brainyrich.firm.fields.email", "Email")
74
- }), /* @__PURE__ */ x(A, {
86
+ }), /* @__PURE__ */ C(M, {
75
87
  id: "firm-email",
76
88
  type: "email",
77
- value: M,
78
- onChange: (e) => N(e.target.value)
89
+ value: h,
90
+ onChange: (e) => v(e.target.value)
79
91
  })]
80
92
  })]
81
- }), /* @__PURE__ */ S(w, {
93
+ }), /* @__PURE__ */ w(E, {
82
94
  disabled: s.isPending,
83
95
  onClick: () => s.mutate({
84
96
  displayName: p || void 0,
85
- email: M || void 0
97
+ email: h || void 0
86
98
  }),
87
- children: [/* @__PURE__ */ x(v, {
99
+ children: [/* @__PURE__ */ C(b, {
88
100
  className: "size-4",
89
101
  "aria-hidden": "true"
90
102
  }), s.isPending ? "Registering…" : "Register on firm roster"]
@@ -92,155 +104,175 @@ function U() {
92
104
  })] }) })
93
105
  });
94
106
  }
95
- function W({ translate: e }) {
96
- let i = r(), d = t(), _ = a(), [v, b] = m(""), [U, W] = m("ADVISOR"), G = n(), K = i.data;
97
- return /* @__PURE__ */ S("div", {
107
+ function J({ translate: e }) {
108
+ let i = r(), f = t(), h = a(), [y, b] = g(""), [S, q] = g("ADVISOR"), J = n(), Y = i.data;
109
+ return /* @__PURE__ */ w("div", {
98
110
  className: "space-y-6",
99
111
  children: [
100
- /* @__PURE__ */ x(o, { children: /* @__PURE__ */ S("div", {
112
+ /* @__PURE__ */ C(o, { children: /* @__PURE__ */ w("div", {
101
113
  className: "grid gap-4 md:grid-cols-2 xl:grid-cols-4",
102
114
  children: [
103
- /* @__PURE__ */ x(s, {
115
+ /* @__PURE__ */ C(s, {
104
116
  label: e("brainyrich.firm.kpis.totalAum", "Firm AUM"),
105
- value: K ? p(K.totalAum, K.currency) : "—",
117
+ value: Y ? m(Y.totalAum, Y.currency) : "—",
106
118
  glow: !0
107
119
  }),
108
- /* @__PURE__ */ x(s, {
120
+ /* @__PURE__ */ C(s, {
109
121
  label: e("brainyrich.firm.kpis.advisors", "Advisors"),
110
- value: K ? String(K.totalAdvisors) : "—"
122
+ value: Y ? String(Y.totalAdvisors) : "—"
111
123
  }),
112
- /* @__PURE__ */ x(s, {
124
+ /* @__PURE__ */ C(s, {
113
125
  label: e("brainyrich.firm.kpis.households", "Households"),
114
- value: K ? String(K.totalHouseholds) : "—"
126
+ value: Y ? String(Y.totalHouseholds) : "—"
115
127
  }),
116
- /* @__PURE__ */ x(s, {
128
+ /* @__PURE__ */ C(s, {
117
129
  label: e("brainyrich.firm.kpis.asOf", "As of"),
118
- value: K ? f(K.asOf) : "—"
130
+ value: Y ? p(Y.asOf) : "—"
119
131
  })
120
132
  ]
121
133
  }) }),
122
- /* @__PURE__ */ S(T, { children: [/* @__PURE__ */ S(O, { children: [/* @__PURE__ */ x(k, { children: e("brainyrich.firm.byAdvisor.title", "AUM by advisor") }), /* @__PURE__ */ x(D, { children: e("brainyrich.firm.byAdvisor.description", "Sorted by AUM, largest book first — a real rollup of BraHousehold.aum per advisor.") })] }), /* @__PURE__ */ x(E, { children: i.isLoading ? /* @__PURE__ */ x(u, {}) : i.isError ? /* @__PURE__ */ x(l, { onRetry: () => i.refetch() }) : !K || K.byAdvisor.length === 0 ? /* @__PURE__ */ x(c, {
123
- icon: /* @__PURE__ */ x(h, {
134
+ /* @__PURE__ */ w(D, { children: [/* @__PURE__ */ w(A, { children: [/* @__PURE__ */ C(j, { children: e("brainyrich.firm.byAdvisor.title", "AUM by advisor") }), /* @__PURE__ */ C(k, { children: e("brainyrich.firm.byAdvisor.description", "Sorted by AUM, largest book first — a real rollup of BraHousehold.aum per advisor.") })] }), /* @__PURE__ */ C(O, { children: i.isLoading ? /* @__PURE__ */ C(d, {}) : i.isError ? /* @__PURE__ */ C(u, { onRetry: () => i.refetch() }) : !Y || Y.byAdvisor.length === 0 ? /* @__PURE__ */ C(l, {
135
+ icon: /* @__PURE__ */ C(_, {
124
136
  className: "size-8",
125
137
  "aria-hidden": "true"
126
138
  }),
127
139
  title: e("brainyrich.firm.byAdvisor.empty", "No advisor books yet")
128
- }) : /* @__PURE__ */ S(L, { children: [/* @__PURE__ */ x(V, { children: /* @__PURE__ */ S(H, { children: [
129
- /* @__PURE__ */ x(B, { children: "Advisor" }),
130
- /* @__PURE__ */ x(B, { children: "Role" }),
131
- /* @__PURE__ */ x(B, { children: "Households" }),
132
- /* @__PURE__ */ x(B, {
133
- className: "text-right",
134
- children: "AUM"
135
- })
136
- ] }) }), /* @__PURE__ */ x(R, { children: K.byAdvisor.map((e) => /* @__PURE__ */ S(H, { children: [
137
- /* @__PURE__ */ x(z, {
138
- className: "font-medium",
139
- children: e.displayName ?? e.email ?? e.advisorId
140
- }),
141
- /* @__PURE__ */ x(z, { children: /* @__PURE__ */ x(C, {
142
- variant: e.role === "FIRM_ADMIN" ? "default" : "secondary",
143
- children: e.role ?? "—"
144
- }) }),
145
- /* @__PURE__ */ x(z, { children: e.householdCount }),
146
- /* @__PURE__ */ x(z, {
147
- className: "text-right font-medium",
148
- children: p(e.aum, K.currency)
149
- })
150
- ] }, e.advisorId)) })] }) })] }),
151
- /* @__PURE__ */ S(T, { children: [/* @__PURE__ */ x(O, {
140
+ }) : /* @__PURE__ */ w("div", {
141
+ className: "space-y-6",
142
+ children: [K(Y.byAdvisor, Y.totalAum, Y.currency).length > 0 ? /* @__PURE__ */ w("div", {
143
+ className: "space-y-2",
144
+ children: [
145
+ /* @__PURE__ */ C("p", {
146
+ className: "text-xs font-medium uppercase tracking-wide text-text-secondary",
147
+ children: e("brainyrich.firm.byAdvisor.shareLabel", "Share of firm AUM")
148
+ }),
149
+ /* @__PURE__ */ C(c, { data: K(Y.byAdvisor, Y.totalAum, Y.currency) }),
150
+ Y.byAdvisor.length > G ? /* @__PURE__ */ w("p", {
151
+ className: "text-xs text-text-secondary",
152
+ children: [
153
+ "Showing the ",
154
+ G,
155
+ " largest books — every advisor is listed below."
156
+ ]
157
+ }) : null
158
+ ]
159
+ }) : null, /* @__PURE__ */ w(z, { children: [/* @__PURE__ */ C(U, { children: /* @__PURE__ */ w(W, { children: [
160
+ /* @__PURE__ */ C(H, { children: "Advisor" }),
161
+ /* @__PURE__ */ C(H, { children: "Role" }),
162
+ /* @__PURE__ */ C(H, { children: "Households" }),
163
+ /* @__PURE__ */ C(H, {
164
+ className: "text-right",
165
+ children: "AUM"
166
+ })
167
+ ] }) }), /* @__PURE__ */ C(B, { children: Y.byAdvisor.map((e) => /* @__PURE__ */ w(W, { children: [
168
+ /* @__PURE__ */ C(V, {
169
+ className: "font-medium",
170
+ children: e.displayName ?? e.email ?? e.advisorId
171
+ }),
172
+ /* @__PURE__ */ C(V, { children: /* @__PURE__ */ C(T, {
173
+ variant: e.role === "FIRM_ADMIN" ? "default" : "secondary",
174
+ children: e.role ?? "—"
175
+ }) }),
176
+ /* @__PURE__ */ C(V, { children: e.householdCount }),
177
+ /* @__PURE__ */ C(V, {
178
+ className: "text-right font-medium",
179
+ children: m(e.aum, Y.currency)
180
+ })
181
+ ] }, e.advisorId)) })] })]
182
+ }) })] }),
183
+ /* @__PURE__ */ w(D, { children: [/* @__PURE__ */ C(A, {
152
184
  className: "flex flex-row items-center justify-between gap-4",
153
- children: /* @__PURE__ */ S("div", { children: [/* @__PURE__ */ x(k, { children: e("brainyrich.firm.roster.title", "Firm Roster") }), /* @__PURE__ */ x(D, { children: e("brainyrich.firm.roster.description", "Every advisor on the firm roster, with the right to change roles.") })] })
154
- }), /* @__PURE__ */ S(E, {
185
+ children: /* @__PURE__ */ w("div", { children: [/* @__PURE__ */ C(j, { children: e("brainyrich.firm.roster.title", "Firm Roster") }), /* @__PURE__ */ C(k, { children: e("brainyrich.firm.roster.description", "Every advisor on the firm roster, with the right to change roles.") })] })
186
+ }), /* @__PURE__ */ w(O, {
155
187
  className: "space-y-4",
156
- children: [/* @__PURE__ */ S("div", {
188
+ children: [/* @__PURE__ */ w("div", {
157
189
  className: "flex flex-wrap items-end gap-3 rounded-lg border border-border-subtle bg-bg-sunken p-3",
158
190
  children: [
159
- /* @__PURE__ */ S("div", {
191
+ /* @__PURE__ */ w("div", {
160
192
  className: "space-y-1.5",
161
- children: [/* @__PURE__ */ x(j, {
193
+ children: [/* @__PURE__ */ C(N, {
162
194
  htmlFor: "invite-user-id",
163
195
  children: e("brainyrich.firm.roster.inviteUserId", "User ID to invite")
164
- }), /* @__PURE__ */ x(A, {
196
+ }), /* @__PURE__ */ C(M, {
165
197
  id: "invite-user-id",
166
- value: v,
198
+ value: y,
167
199
  onChange: (e) => b(e.target.value),
168
200
  className: "w-64",
169
201
  placeholder: "actor id"
170
202
  })]
171
203
  }),
172
- /* @__PURE__ */ S("div", {
204
+ /* @__PURE__ */ w("div", {
173
205
  className: "space-y-1.5",
174
- children: [/* @__PURE__ */ x(j, { children: e("brainyrich.firm.roster.inviteRole", "Role") }), /* @__PURE__ */ S(M, {
175
- value: U,
176
- onValueChange: (e) => W(e),
177
- children: [/* @__PURE__ */ x(F, {
206
+ children: [/* @__PURE__ */ C(N, { children: e("brainyrich.firm.roster.inviteRole", "Role") }), /* @__PURE__ */ w(P, {
207
+ value: S,
208
+ onValueChange: (e) => q(e),
209
+ children: [/* @__PURE__ */ C(L, {
178
210
  className: "w-40",
179
- children: /* @__PURE__ */ x(I, {})
180
- }), /* @__PURE__ */ S(N, { children: [/* @__PURE__ */ x(P, {
211
+ children: /* @__PURE__ */ C(R, {})
212
+ }), /* @__PURE__ */ w(F, { children: [/* @__PURE__ */ C(I, {
181
213
  value: "ADVISOR",
182
214
  children: "Advisor"
183
- }), /* @__PURE__ */ x(P, {
215
+ }), /* @__PURE__ */ C(I, {
184
216
  value: "FIRM_ADMIN",
185
217
  children: "Firm Admin"
186
218
  })] })]
187
219
  })]
188
220
  }),
189
- /* @__PURE__ */ S(w, {
190
- disabled: !v.trim() || G.isPending,
191
- onClick: () => G.mutate({
192
- userId: v.trim(),
193
- role: U
221
+ /* @__PURE__ */ w(E, {
222
+ disabled: !y.trim() || J.isPending,
223
+ onClick: () => J.mutate({
224
+ userId: y.trim(),
225
+ role: S
194
226
  }, { onSuccess: () => b("") }),
195
- children: [/* @__PURE__ */ x(g, {
227
+ children: [/* @__PURE__ */ C(v, {
196
228
  className: "size-4",
197
229
  "aria-hidden": "true"
198
230
  }), e("brainyrich.firm.roster.invite", "Invite")]
199
231
  })
200
232
  ]
201
- }), d.isLoading ? /* @__PURE__ */ x(u, {}) : d.isError ? /* @__PURE__ */ x(l, { onRetry: () => d.refetch() }) : d.data.length === 0 ? /* @__PURE__ */ x(c, {
202
- icon: /* @__PURE__ */ x(y, {
233
+ }), f.isLoading ? /* @__PURE__ */ C(d, {}) : f.isError ? /* @__PURE__ */ C(u, { onRetry: () => f.refetch() }) : f.data.length === 0 ? /* @__PURE__ */ C(l, {
234
+ icon: /* @__PURE__ */ C(x, {
203
235
  className: "size-8",
204
236
  "aria-hidden": "true"
205
237
  }),
206
238
  title: e("brainyrich.firm.roster.empty", "No advisors yet")
207
- }) : /* @__PURE__ */ S(L, { children: [/* @__PURE__ */ x(V, { children: /* @__PURE__ */ S(H, { children: [
208
- /* @__PURE__ */ x(B, { children: "Name" }),
209
- /* @__PURE__ */ x(B, { children: "Email" }),
210
- /* @__PURE__ */ x(B, { children: "Status" }),
211
- /* @__PURE__ */ x(B, { children: "Role" }),
212
- /* @__PURE__ */ x(B, {
239
+ }) : /* @__PURE__ */ w(z, { children: [/* @__PURE__ */ C(U, { children: /* @__PURE__ */ w(W, { children: [
240
+ /* @__PURE__ */ C(H, { children: "Name" }),
241
+ /* @__PURE__ */ C(H, { children: "Email" }),
242
+ /* @__PURE__ */ C(H, { children: "Status" }),
243
+ /* @__PURE__ */ C(H, { children: "Role" }),
244
+ /* @__PURE__ */ C(H, {
213
245
  className: "text-right",
214
246
  children: "Actions"
215
247
  })
216
- ] }) }), /* @__PURE__ */ x(R, { children: d.data.map((e) => /* @__PURE__ */ S(H, { children: [
217
- /* @__PURE__ */ x(z, {
248
+ ] }) }), /* @__PURE__ */ C(B, { children: f.data.map((e) => /* @__PURE__ */ w(W, { children: [
249
+ /* @__PURE__ */ C(V, {
218
250
  className: "font-medium",
219
251
  children: e.displayName ?? e.userId
220
252
  }),
221
- /* @__PURE__ */ x(z, { children: e.email ?? "—" }),
222
- /* @__PURE__ */ x(z, { children: /* @__PURE__ */ x(C, {
253
+ /* @__PURE__ */ C(V, { children: e.email ?? "—" }),
254
+ /* @__PURE__ */ C(V, { children: /* @__PURE__ */ C(T, {
223
255
  variant: e.status === "ACTIVE" ? "default" : "secondary",
224
256
  children: e.status
225
257
  }) }),
226
- /* @__PURE__ */ x(z, { children: /* @__PURE__ */ S(M, {
258
+ /* @__PURE__ */ C(V, { children: /* @__PURE__ */ w(P, {
227
259
  value: e.role,
228
- onValueChange: (t) => _.mutate({
260
+ onValueChange: (t) => h.mutate({
229
261
  userId: e.userId,
230
262
  role: t
231
263
  }),
232
- children: [/* @__PURE__ */ x(F, {
264
+ children: [/* @__PURE__ */ C(L, {
233
265
  className: "w-40",
234
- children: /* @__PURE__ */ x(I, {})
235
- }), /* @__PURE__ */ S(N, { children: [/* @__PURE__ */ x(P, {
266
+ children: /* @__PURE__ */ C(R, {})
267
+ }), /* @__PURE__ */ w(F, { children: [/* @__PURE__ */ C(I, {
236
268
  value: "ADVISOR",
237
269
  children: "Advisor"
238
- }), /* @__PURE__ */ x(P, {
270
+ }), /* @__PURE__ */ C(I, {
239
271
  value: "FIRM_ADMIN",
240
272
  children: "Firm Admin"
241
273
  })] })]
242
274
  }) }),
243
- /* @__PURE__ */ x(z, {
275
+ /* @__PURE__ */ C(V, {
244
276
  className: "text-right text-xs text-text-secondary",
245
277
  children: e.invitedById ? `Invited by ${e.invitedById}` : "Self-registered"
246
278
  })
@@ -250,6 +282,6 @@ function W({ translate: e }) {
250
282
  });
251
283
  }
252
284
  //#endregion
253
- export { U as FirmPage };
285
+ export { q as FirmPage };
254
286
 
255
287
  //# sourceMappingURL=FirmPage.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"FirmPage.js","names":[],"sources":["../../../src/brainyrich/pages/FirmPage.tsx"],"sourcesContent":["/**\n * FirmPage — firm roster + firm-wide reporting (BOFF-4247).\n *\n * `braFirmReport` / `braListAdvisors` are FIRM_ADMIN-only server-side (see\n * firm.gql) — the domain data (BraAdvisor.role) is the only authorization\n * fact, there is no separate platform-RBAC role for it. This page therefore\n * always renders the calling actor's own roster status first, and only\n * attempts the firm-wide views when that status is FIRM_ADMIN (or when the\n * actor hasn't registered a roster row yet, in which case it offers\n * self-registration — the very first advisor in a workspace becomes\n * FIRM_ADMIN automatically).\n */\nimport { useState } from 'react';\nimport {\n Badge,\n Button,\n Card,\n CardContent,\n CardDescription,\n CardHeader,\n CardTitle,\n Input,\n Label,\n Select,\n SelectContent,\n SelectItem,\n SelectTrigger,\n SelectValue,\n Table,\n TableBody,\n TableCell,\n TableHead,\n TableHeader,\n TableRow,\n} from '@burdenoff/fe-libs/ui';\nimport { Building2, PlusCircle, ShieldCheck, UserPlus, Users } from 'lucide-react';\nimport { useI18n } from '@burdenoff/fe-libs/shared/providers/shell/I18nProvider';\nimport { tWithFallback } from '../utils/i18n';\nimport {\n useMyAdvisorProfile,\n useEnsureAdvisorProfile,\n useAdvisors,\n useSetAdvisorRole,\n useFirmReport,\n} from '../hooks/useBrainyRichApi';\nimport type { BraAdvisor, BraAdvisorRole } from '../types/bra';\nimport {\n SectionShell,\n EmptyState,\n LoadingState,\n ErrorState,\n formatMoney,\n formatDate,\n} from './_shared';\nimport { StatTile, FadeIn } from '../components/viz';\n\ntype Translate = (\n key: string,\n fallback: string,\n params?: Record<string, string | number>\n) => string;\n\nexport function FirmPage() {\n const { t } = useI18n();\n const translate: Translate = (key, fallback, params) => tWithFallback(t, key, fallback, params);\n\n const myProfileQuery = useMyAdvisorProfile();\n const ensureProfile = useEnsureAdvisorProfile();\n const myProfile = myProfileQuery.data;\n const isFirmAdmin = myProfile?.role === 'FIRM_ADMIN';\n\n const [displayName, setDisplayName] = useState('');\n const [email, setEmail] = useState('');\n\n if (myProfileQuery.isLoading) {\n return (\n <SectionShell\n title={translate('brainyrich.firm.title', 'Firm')}\n description={translate(\n 'brainyrich.firm.description',\n 'Firm roster and firm-wide AUM reporting.'\n )}\n >\n <LoadingState />\n </SectionShell>\n );\n }\n\n if (!myProfile) {\n return (\n <SectionShell\n title={translate('brainyrich.firm.title', 'Firm')}\n description={translate(\n 'brainyrich.firm.description',\n 'Firm roster and firm-wide AUM reporting.'\n )}\n >\n <FadeIn>\n <Card>\n <CardHeader>\n <CardTitle className=\"flex items-center gap-2\">\n <Building2 className=\"size-4\" aria-hidden=\"true\" />\n {translate('brainyrich.firm.join.title', 'Join the firm roster')}\n </CardTitle>\n <CardDescription>\n {translate(\n 'brainyrich.firm.join.description',\n \"You're not on this workspace's BrainyRich firm roster yet. The first advisor to register becomes the firm admin automatically; anyone after that is invited by an existing admin.\"\n )}\n </CardDescription>\n </CardHeader>\n <CardContent className=\"space-y-4\">\n <div className=\"grid gap-4 sm:grid-cols-2\">\n <div className=\"space-y-1.5\">\n <Label htmlFor=\"firm-display-name\">\n {translate('brainyrich.firm.fields.displayName', 'Display name')}\n </Label>\n <Input\n id=\"firm-display-name\"\n value={displayName}\n onChange={(e) => setDisplayName(e.target.value)}\n />\n </div>\n <div className=\"space-y-1.5\">\n <Label htmlFor=\"firm-email\">\n {translate('brainyrich.firm.fields.email', 'Email')}\n </Label>\n <Input\n id=\"firm-email\"\n type=\"email\"\n value={email}\n onChange={(e) => setEmail(e.target.value)}\n />\n </div>\n </div>\n <Button\n disabled={ensureProfile.isPending}\n onClick={() =>\n ensureProfile.mutate({\n displayName: displayName || undefined,\n email: email || undefined,\n })\n }\n >\n <UserPlus className=\"size-4\" aria-hidden=\"true\" />\n {ensureProfile.isPending ? 'Registering…' : 'Register on firm roster'}\n </Button>\n </CardContent>\n </Card>\n </FadeIn>\n </SectionShell>\n );\n }\n\n return (\n <SectionShell\n title={translate('brainyrich.firm.title', 'Firm')}\n description={translate(\n 'brainyrich.firm.description',\n 'Firm roster and firm-wide AUM reporting.'\n )}\n >\n <FadeIn>\n <Card>\n <CardContent className=\"flex flex-wrap items-center justify-between gap-3 py-4\">\n <div className=\"flex items-center gap-2\">\n <ShieldCheck className=\"size-4 text-status-success-text\" aria-hidden=\"true\" />\n <span className=\"text-sm text-text-secondary\">\n {translate('brainyrich.firm.you', 'You are on the firm roster as')}\n </span>\n <Badge variant={isFirmAdmin ? 'default' : 'secondary'}>{myProfile.role}</Badge>\n </div>\n </CardContent>\n </Card>\n </FadeIn>\n\n {isFirmAdmin ? (\n <FirmAdminView translate={translate} />\n ) : (\n <FadeIn>\n <EmptyState\n icon={<Users className=\"size-8\" aria-hidden=\"true\" />}\n title={translate(\n 'brainyrich.firm.notAdmin',\n 'Firm-wide roster and AUM reporting are visible to firm admins only.'\n )}\n />\n </FadeIn>\n )}\n </SectionShell>\n );\n}\n\nfunction FirmAdminView({ translate }: { translate: Translate }) {\n const firmReportQuery = useFirmReport();\n const advisorsQuery = useAdvisors();\n const setRole = useSetAdvisorRole();\n const [inviteUserId, setInviteUserId] = useState('');\n const [inviteRole, setInviteRole] = useState<BraAdvisorRole>('ADVISOR');\n const ensureProfile = useEnsureAdvisorProfile();\n\n const report = firmReportQuery.data;\n\n return (\n <div className=\"space-y-6\">\n <FadeIn>\n <div className=\"grid gap-4 md:grid-cols-2 xl:grid-cols-4\">\n <StatTile\n label={translate('brainyrich.firm.kpis.totalAum', 'Firm AUM')}\n value={report ? formatMoney(report.totalAum, report.currency) : '—'}\n glow\n />\n <StatTile\n label={translate('brainyrich.firm.kpis.advisors', 'Advisors')}\n value={report ? String(report.totalAdvisors) : '—'}\n />\n <StatTile\n label={translate('brainyrich.firm.kpis.households', 'Households')}\n value={report ? String(report.totalHouseholds) : '—'}\n />\n <StatTile\n label={translate('brainyrich.firm.kpis.asOf', 'As of')}\n value={report ? formatDate(report.asOf) : '—'}\n />\n </div>\n </FadeIn>\n\n <Card>\n <CardHeader>\n <CardTitle>{translate('brainyrich.firm.byAdvisor.title', 'AUM by advisor')}</CardTitle>\n <CardDescription>\n {translate(\n 'brainyrich.firm.byAdvisor.description',\n 'Sorted by AUM, largest book first — a real rollup of BraHousehold.aum per advisor.'\n )}\n </CardDescription>\n </CardHeader>\n <CardContent>\n {firmReportQuery.isLoading ? (\n <LoadingState />\n ) : firmReportQuery.isError ? (\n <ErrorState onRetry={() => firmReportQuery.refetch()} />\n ) : !report || report.byAdvisor.length === 0 ? (\n <EmptyState\n icon={<Building2 className=\"size-8\" aria-hidden=\"true\" />}\n title={translate('brainyrich.firm.byAdvisor.empty', 'No advisor books yet')}\n />\n ) : (\n <Table>\n <TableHeader>\n <TableRow>\n <TableHead>Advisor</TableHead>\n <TableHead>Role</TableHead>\n <TableHead>Households</TableHead>\n <TableHead className=\"text-right\">AUM</TableHead>\n </TableRow>\n </TableHeader>\n <TableBody>\n {report.byAdvisor.map((row) => (\n <TableRow key={row.advisorId}>\n <TableCell className=\"font-medium\">\n {row.displayName ?? row.email ?? row.advisorId}\n </TableCell>\n <TableCell>\n <Badge variant={row.role === 'FIRM_ADMIN' ? 'default' : 'secondary'}>\n {row.role ?? '—'}\n </Badge>\n </TableCell>\n <TableCell>{row.householdCount}</TableCell>\n <TableCell className=\"text-right font-medium\">\n {formatMoney(row.aum, report.currency)}\n </TableCell>\n </TableRow>\n ))}\n </TableBody>\n </Table>\n )}\n </CardContent>\n </Card>\n\n <Card>\n <CardHeader className=\"flex flex-row items-center justify-between gap-4\">\n <div>\n <CardTitle>{translate('brainyrich.firm.roster.title', 'Firm Roster')}</CardTitle>\n <CardDescription>\n {translate(\n 'brainyrich.firm.roster.description',\n 'Every advisor on the firm roster, with the right to change roles.'\n )}\n </CardDescription>\n </div>\n </CardHeader>\n <CardContent className=\"space-y-4\">\n <div className=\"flex flex-wrap items-end gap-3 rounded-lg border border-border-subtle bg-bg-sunken p-3\">\n <div className=\"space-y-1.5\">\n <Label htmlFor=\"invite-user-id\">\n {translate('brainyrich.firm.roster.inviteUserId', 'User ID to invite')}\n </Label>\n <Input\n id=\"invite-user-id\"\n value={inviteUserId}\n onChange={(e) => setInviteUserId(e.target.value)}\n className=\"w-64\"\n placeholder=\"actor id\"\n />\n </div>\n <div className=\"space-y-1.5\">\n <Label>{translate('brainyrich.firm.roster.inviteRole', 'Role')}</Label>\n <Select value={inviteRole} onValueChange={(v) => setInviteRole(v as BraAdvisorRole)}>\n <SelectTrigger className=\"w-40\">\n <SelectValue />\n </SelectTrigger>\n <SelectContent>\n <SelectItem value=\"ADVISOR\">Advisor</SelectItem>\n <SelectItem value=\"FIRM_ADMIN\">Firm Admin</SelectItem>\n </SelectContent>\n </Select>\n </div>\n <Button\n disabled={!inviteUserId.trim() || ensureProfile.isPending}\n onClick={() =>\n ensureProfile.mutate(\n { userId: inviteUserId.trim(), role: inviteRole },\n { onSuccess: () => setInviteUserId('') }\n )\n }\n >\n <PlusCircle className=\"size-4\" aria-hidden=\"true\" />\n {translate('brainyrich.firm.roster.invite', 'Invite')}\n </Button>\n </div>\n\n {advisorsQuery.isLoading ? (\n <LoadingState />\n ) : advisorsQuery.isError ? (\n <ErrorState onRetry={() => advisorsQuery.refetch()} />\n ) : advisorsQuery.data.length === 0 ? (\n <EmptyState\n icon={<Users className=\"size-8\" aria-hidden=\"true\" />}\n title={translate('brainyrich.firm.roster.empty', 'No advisors yet')}\n />\n ) : (\n <Table>\n <TableHeader>\n <TableRow>\n <TableHead>Name</TableHead>\n <TableHead>Email</TableHead>\n <TableHead>Status</TableHead>\n <TableHead>Role</TableHead>\n <TableHead className=\"text-right\">Actions</TableHead>\n </TableRow>\n </TableHeader>\n <TableBody>\n {advisorsQuery.data.map((advisor: BraAdvisor) => (\n <TableRow key={advisor.id}>\n <TableCell className=\"font-medium\">\n {advisor.displayName ?? advisor.userId}\n </TableCell>\n <TableCell>{advisor.email ?? '—'}</TableCell>\n <TableCell>\n <Badge variant={advisor.status === 'ACTIVE' ? 'default' : 'secondary'}>\n {advisor.status}\n </Badge>\n </TableCell>\n <TableCell>\n <Select\n value={advisor.role}\n onValueChange={(v) =>\n setRole.mutate({ userId: advisor.userId, role: v as BraAdvisorRole })\n }\n >\n <SelectTrigger className=\"w-40\">\n <SelectValue />\n </SelectTrigger>\n <SelectContent>\n <SelectItem value=\"ADVISOR\">Advisor</SelectItem>\n <SelectItem value=\"FIRM_ADMIN\">Firm Admin</SelectItem>\n </SelectContent>\n </Select>\n </TableCell>\n <TableCell className=\"text-right text-xs text-text-secondary\">\n {advisor.invitedById\n ? `Invited by ${advisor.invitedById}`\n : 'Self-registered'}\n </TableCell>\n </TableRow>\n ))}\n </TableBody>\n </Table>\n )}\n </CardContent>\n </Card>\n </div>\n );\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"FirmPage.js","names":[],"sources":["../../../src/brainyrich/pages/FirmPage.tsx"],"sourcesContent":["/**\n * FirmPage — firm roster + firm-wide reporting (BOFF-4247).\n *\n * `braFirmReport` / `braListAdvisors` are FIRM_ADMIN-only server-side (see\n * firm.gql) — the domain data (BraAdvisor.role) is the only authorization\n * fact, there is no separate platform-RBAC role for it. This page therefore\n * always renders the calling actor's own roster status first, and only\n * attempts the firm-wide views when that status is FIRM_ADMIN (or when the\n * actor hasn't registered a roster row yet, in which case it offers\n * self-registration — the very first advisor in a workspace becomes\n * FIRM_ADMIN automatically).\n */\nimport { useState } from 'react';\nimport {\n Badge,\n Button,\n Card,\n CardContent,\n CardDescription,\n CardHeader,\n CardTitle,\n Input,\n Label,\n Select,\n SelectContent,\n SelectItem,\n SelectTrigger,\n SelectValue,\n Table,\n TableBody,\n TableCell,\n TableHead,\n TableHeader,\n TableRow,\n} from '@burdenoff/fe-libs/ui';\nimport { Building2, PlusCircle, ShieldCheck, UserPlus, Users } from 'lucide-react';\nimport { useI18n } from '@burdenoff/fe-libs/shared/providers/shell/I18nProvider';\nimport { tWithFallback } from '../utils/i18n';\nimport {\n useMyAdvisorProfile,\n useEnsureAdvisorProfile,\n useAdvisors,\n useSetAdvisorRole,\n useFirmReport,\n} from '../hooks/useBrainyRichApi';\nimport type { BraAdvisor, BraAdvisorRole } from '../types/bra';\nimport {\n AllocationBars,\n SectionShell,\n EmptyState,\n LoadingState,\n ErrorState,\n formatMoney,\n formatDate,\n formatPct,\n type AllocationDatum,\n} from './_shared';\nimport { StatTile, FadeIn } from '../components/viz';\n\n/** Largest books charted as a share of firm AUM; the table below lists them all. */\nconst MAX_CHARTED_ADVISORS = 8;\n\ninterface AdvisorBookRow {\n advisorId: string;\n aum: number;\n displayName?: string | null;\n email?: string | null;\n}\n\nfunction advisorShareBars(\n byAdvisor: readonly AdvisorBookRow[],\n totalAum: number,\n currency: string\n): AllocationDatum[] {\n if (totalAum <= 0) return [];\n return byAdvisor.slice(0, MAX_CHARTED_ADVISORS).map((row) => {\n const share = (row.aum / totalAum) * 100;\n return {\n label: row.displayName ?? row.email ?? row.advisorId,\n value: share,\n tone: 'accent' as const,\n caption: `${formatMoney(row.aum, currency)} · ${formatPct(share)}`,\n };\n });\n}\n\ntype Translate = (\n key: string,\n fallback: string,\n params?: Record<string, string | number>\n) => string;\n\nexport function FirmPage() {\n const { t } = useI18n();\n const translate: Translate = (key, fallback, params) => tWithFallback(t, key, fallback, params);\n\n const myProfileQuery = useMyAdvisorProfile();\n const ensureProfile = useEnsureAdvisorProfile();\n const myProfile = myProfileQuery.data;\n const isFirmAdmin = myProfile?.role === 'FIRM_ADMIN';\n\n const [displayName, setDisplayName] = useState('');\n const [email, setEmail] = useState('');\n\n if (myProfileQuery.isLoading) {\n return (\n <SectionShell\n title={translate('brainyrich.firm.title', 'Firm')}\n description={translate(\n 'brainyrich.firm.description',\n 'Firm roster and firm-wide AUM reporting.'\n )}\n >\n <LoadingState />\n </SectionShell>\n );\n }\n\n if (!myProfile) {\n return (\n <SectionShell\n title={translate('brainyrich.firm.title', 'Firm')}\n description={translate(\n 'brainyrich.firm.description',\n 'Firm roster and firm-wide AUM reporting.'\n )}\n >\n <FadeIn>\n <Card>\n <CardHeader>\n <CardTitle className=\"flex items-center gap-2\">\n <Building2 className=\"size-4\" aria-hidden=\"true\" />\n {translate('brainyrich.firm.join.title', 'Join the firm roster')}\n </CardTitle>\n <CardDescription>\n {translate(\n 'brainyrich.firm.join.description',\n \"You're not on this workspace's BrainyRich firm roster yet. The first advisor to register becomes the firm admin automatically; anyone after that is invited by an existing admin.\"\n )}\n </CardDescription>\n </CardHeader>\n <CardContent className=\"space-y-4\">\n <div className=\"grid gap-4 sm:grid-cols-2\">\n <div className=\"space-y-1.5\">\n <Label htmlFor=\"firm-display-name\">\n {translate('brainyrich.firm.fields.displayName', 'Display name')}\n </Label>\n <Input\n id=\"firm-display-name\"\n value={displayName}\n onChange={(e) => setDisplayName(e.target.value)}\n />\n </div>\n <div className=\"space-y-1.5\">\n <Label htmlFor=\"firm-email\">\n {translate('brainyrich.firm.fields.email', 'Email')}\n </Label>\n <Input\n id=\"firm-email\"\n type=\"email\"\n value={email}\n onChange={(e) => setEmail(e.target.value)}\n />\n </div>\n </div>\n <Button\n disabled={ensureProfile.isPending}\n onClick={() =>\n ensureProfile.mutate({\n displayName: displayName || undefined,\n email: email || undefined,\n })\n }\n >\n <UserPlus className=\"size-4\" aria-hidden=\"true\" />\n {ensureProfile.isPending ? 'Registering…' : 'Register on firm roster'}\n </Button>\n </CardContent>\n </Card>\n </FadeIn>\n </SectionShell>\n );\n }\n\n return (\n <SectionShell\n title={translate('brainyrich.firm.title', 'Firm')}\n description={translate(\n 'brainyrich.firm.description',\n 'Firm roster and firm-wide AUM reporting.'\n )}\n >\n <FadeIn>\n <Card>\n <CardContent className=\"flex flex-wrap items-center justify-between gap-3 py-4\">\n <div className=\"flex items-center gap-2\">\n <ShieldCheck className=\"size-4 text-status-success-text\" aria-hidden=\"true\" />\n <span className=\"text-sm text-text-secondary\">\n {translate('brainyrich.firm.you', 'You are on the firm roster as')}\n </span>\n <Badge variant={isFirmAdmin ? 'default' : 'secondary'}>{myProfile.role}</Badge>\n </div>\n </CardContent>\n </Card>\n </FadeIn>\n\n {isFirmAdmin ? (\n <FirmAdminView translate={translate} />\n ) : (\n <FadeIn>\n <EmptyState\n icon={<Users className=\"size-8\" aria-hidden=\"true\" />}\n title={translate(\n 'brainyrich.firm.notAdmin',\n 'Firm-wide roster and AUM reporting are visible to firm admins only.'\n )}\n />\n </FadeIn>\n )}\n </SectionShell>\n );\n}\n\nfunction FirmAdminView({ translate }: { translate: Translate }) {\n const firmReportQuery = useFirmReport();\n const advisorsQuery = useAdvisors();\n const setRole = useSetAdvisorRole();\n const [inviteUserId, setInviteUserId] = useState('');\n const [inviteRole, setInviteRole] = useState<BraAdvisorRole>('ADVISOR');\n const ensureProfile = useEnsureAdvisorProfile();\n\n const report = firmReportQuery.data;\n\n return (\n <div className=\"space-y-6\">\n <FadeIn>\n <div className=\"grid gap-4 md:grid-cols-2 xl:grid-cols-4\">\n <StatTile\n label={translate('brainyrich.firm.kpis.totalAum', 'Firm AUM')}\n value={report ? formatMoney(report.totalAum, report.currency) : '—'}\n glow\n />\n <StatTile\n label={translate('brainyrich.firm.kpis.advisors', 'Advisors')}\n value={report ? String(report.totalAdvisors) : '—'}\n />\n <StatTile\n label={translate('brainyrich.firm.kpis.households', 'Households')}\n value={report ? String(report.totalHouseholds) : '—'}\n />\n <StatTile\n label={translate('brainyrich.firm.kpis.asOf', 'As of')}\n value={report ? formatDate(report.asOf) : '—'}\n />\n </div>\n </FadeIn>\n\n <Card>\n <CardHeader>\n <CardTitle>{translate('brainyrich.firm.byAdvisor.title', 'AUM by advisor')}</CardTitle>\n <CardDescription>\n {translate(\n 'brainyrich.firm.byAdvisor.description',\n 'Sorted by AUM, largest book first — a real rollup of BraHousehold.aum per advisor.'\n )}\n </CardDescription>\n </CardHeader>\n <CardContent>\n {firmReportQuery.isLoading ? (\n <LoadingState />\n ) : firmReportQuery.isError ? (\n <ErrorState onRetry={() => firmReportQuery.refetch()} />\n ) : !report || report.byAdvisor.length === 0 ? (\n <EmptyState\n icon={<Building2 className=\"size-8\" aria-hidden=\"true\" />}\n title={translate('brainyrich.firm.byAdvisor.empty', 'No advisor books yet')}\n />\n ) : (\n <div className=\"space-y-6\">\n {advisorShareBars(report.byAdvisor, report.totalAum, report.currency).length > 0 ? (\n <div className=\"space-y-2\">\n <p className=\"text-xs font-medium uppercase tracking-wide text-text-secondary\">\n {translate('brainyrich.firm.byAdvisor.shareLabel', 'Share of firm AUM')}\n </p>\n <AllocationBars\n data={advisorShareBars(report.byAdvisor, report.totalAum, report.currency)}\n />\n {report.byAdvisor.length > MAX_CHARTED_ADVISORS ? (\n <p className=\"text-xs text-text-secondary\">\n Showing the {MAX_CHARTED_ADVISORS} largest books — every advisor is listed\n below.\n </p>\n ) : null}\n </div>\n ) : null}\n\n <Table>\n <TableHeader>\n <TableRow>\n <TableHead>Advisor</TableHead>\n <TableHead>Role</TableHead>\n <TableHead>Households</TableHead>\n <TableHead className=\"text-right\">AUM</TableHead>\n </TableRow>\n </TableHeader>\n <TableBody>\n {report.byAdvisor.map((row) => (\n <TableRow key={row.advisorId}>\n <TableCell className=\"font-medium\">\n {row.displayName ?? row.email ?? row.advisorId}\n </TableCell>\n <TableCell>\n <Badge variant={row.role === 'FIRM_ADMIN' ? 'default' : 'secondary'}>\n {row.role ?? '—'}\n </Badge>\n </TableCell>\n <TableCell>{row.householdCount}</TableCell>\n <TableCell className=\"text-right font-medium\">\n {formatMoney(row.aum, report.currency)}\n </TableCell>\n </TableRow>\n ))}\n </TableBody>\n </Table>\n </div>\n )}\n </CardContent>\n </Card>\n\n <Card>\n <CardHeader className=\"flex flex-row items-center justify-between gap-4\">\n <div>\n <CardTitle>{translate('brainyrich.firm.roster.title', 'Firm Roster')}</CardTitle>\n <CardDescription>\n {translate(\n 'brainyrich.firm.roster.description',\n 'Every advisor on the firm roster, with the right to change roles.'\n )}\n </CardDescription>\n </div>\n </CardHeader>\n <CardContent className=\"space-y-4\">\n <div className=\"flex flex-wrap items-end gap-3 rounded-lg border border-border-subtle bg-bg-sunken p-3\">\n <div className=\"space-y-1.5\">\n <Label htmlFor=\"invite-user-id\">\n {translate('brainyrich.firm.roster.inviteUserId', 'User ID to invite')}\n </Label>\n <Input\n id=\"invite-user-id\"\n value={inviteUserId}\n onChange={(e) => setInviteUserId(e.target.value)}\n className=\"w-64\"\n placeholder=\"actor id\"\n />\n </div>\n <div className=\"space-y-1.5\">\n <Label>{translate('brainyrich.firm.roster.inviteRole', 'Role')}</Label>\n <Select value={inviteRole} onValueChange={(v) => setInviteRole(v as BraAdvisorRole)}>\n <SelectTrigger className=\"w-40\">\n <SelectValue />\n </SelectTrigger>\n <SelectContent>\n <SelectItem value=\"ADVISOR\">Advisor</SelectItem>\n <SelectItem value=\"FIRM_ADMIN\">Firm Admin</SelectItem>\n </SelectContent>\n </Select>\n </div>\n <Button\n disabled={!inviteUserId.trim() || ensureProfile.isPending}\n onClick={() =>\n ensureProfile.mutate(\n { userId: inviteUserId.trim(), role: inviteRole },\n { onSuccess: () => setInviteUserId('') }\n )\n }\n >\n <PlusCircle className=\"size-4\" aria-hidden=\"true\" />\n {translate('brainyrich.firm.roster.invite', 'Invite')}\n </Button>\n </div>\n\n {advisorsQuery.isLoading ? (\n <LoadingState />\n ) : advisorsQuery.isError ? (\n <ErrorState onRetry={() => advisorsQuery.refetch()} />\n ) : advisorsQuery.data.length === 0 ? (\n <EmptyState\n icon={<Users className=\"size-8\" aria-hidden=\"true\" />}\n title={translate('brainyrich.firm.roster.empty', 'No advisors yet')}\n />\n ) : (\n <Table>\n <TableHeader>\n <TableRow>\n <TableHead>Name</TableHead>\n <TableHead>Email</TableHead>\n <TableHead>Status</TableHead>\n <TableHead>Role</TableHead>\n <TableHead className=\"text-right\">Actions</TableHead>\n </TableRow>\n </TableHeader>\n <TableBody>\n {advisorsQuery.data.map((advisor: BraAdvisor) => (\n <TableRow key={advisor.id}>\n <TableCell className=\"font-medium\">\n {advisor.displayName ?? advisor.userId}\n </TableCell>\n <TableCell>{advisor.email ?? '—'}</TableCell>\n <TableCell>\n <Badge variant={advisor.status === 'ACTIVE' ? 'default' : 'secondary'}>\n {advisor.status}\n </Badge>\n </TableCell>\n <TableCell>\n <Select\n value={advisor.role}\n onValueChange={(v) =>\n setRole.mutate({ userId: advisor.userId, role: v as BraAdvisorRole })\n }\n >\n <SelectTrigger className=\"w-40\">\n <SelectValue />\n </SelectTrigger>\n <SelectContent>\n <SelectItem value=\"ADVISOR\">Advisor</SelectItem>\n <SelectItem value=\"FIRM_ADMIN\">Firm Admin</SelectItem>\n </SelectContent>\n </Select>\n </TableCell>\n <TableCell className=\"text-right text-xs text-text-secondary\">\n {advisor.invitedById\n ? `Invited by ${advisor.invitedById}`\n : 'Self-registered'}\n </TableCell>\n </TableRow>\n ))}\n </TableBody>\n </Table>\n )}\n </CardContent>\n </Card>\n </div>\n );\n}\n"],"mappings":"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"}