@burdenoff/microfe-brainyrich 2026.805.1 → 2026.825.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 (504) 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.d.ts.map +1 -1
  5. package/dist/brainyrich/BrainyRichRoutes.js +21 -17
  6. package/dist/brainyrich/BrainyRichRoutes.js.map +1 -1
  7. package/dist/brainyrich/components/ActorName.js.map +1 -1
  8. package/dist/brainyrich/components/ConfirmDialog.d.ts +0 -1
  9. package/dist/brainyrich/components/ConfirmDialog.js.map +1 -1
  10. package/dist/brainyrich/components/LoadMore.js.map +1 -1
  11. package/dist/brainyrich/components/notify.js.map +1 -1
  12. package/dist/brainyrich/components/pickers.js.map +1 -1
  13. package/dist/brainyrich/components/reuse/CommentThread.js.map +1 -1
  14. package/dist/brainyrich/components/reuse/DocumentsPanel.js.map +1 -1
  15. package/dist/brainyrich/components/reuse/TagField.js.map +1 -1
  16. package/dist/brainyrich/components/reuse/transport.js.map +1 -1
  17. package/dist/brainyrich/components/viz.d.ts +0 -1
  18. package/dist/brainyrich/components/viz.js.map +1 -1
  19. package/dist/brainyrich/hooks/useBrainyRichAnalytics.js.map +1 -1
  20. package/dist/brainyrich/hooks/useBrainyRichApi.d.ts +3 -2
  21. package/dist/brainyrich/hooks/useBrainyRichApi.d.ts.map +1 -1
  22. package/dist/brainyrich/hooks/useBrainyRichApi.js +20 -12
  23. package/dist/brainyrich/hooks/useBrainyRichApi.js.map +1 -1
  24. package/dist/brainyrich/pages/AccountsPage.d.ts.map +1 -1
  25. package/dist/brainyrich/pages/AccountsPage.js +367 -363
  26. package/dist/brainyrich/pages/AccountsPage.js.map +1 -1
  27. package/dist/brainyrich/pages/AdminFirmPage.d.ts +2 -0
  28. package/dist/brainyrich/pages/AdminFirmPage.d.ts.map +1 -0
  29. package/dist/brainyrich/pages/AdminFirmPage.js +137 -0
  30. package/dist/brainyrich/pages/AdminFirmPage.js.map +1 -0
  31. package/dist/brainyrich/pages/AiAssistantPage.js.map +1 -1
  32. package/dist/brainyrich/pages/AnalyticsPage.js.map +1 -1
  33. package/dist/brainyrich/pages/DashboardPage.js.map +1 -1
  34. package/dist/brainyrich/pages/FamilyPage.js.map +1 -1
  35. package/dist/brainyrich/pages/FirmPage.js.map +1 -1
  36. package/dist/brainyrich/pages/GoalsPage.js.map +1 -1
  37. package/dist/brainyrich/pages/InvestmentsPage.js.map +1 -1
  38. package/dist/brainyrich/pages/PortfoliosPage.js.map +1 -1
  39. package/dist/brainyrich/pages/ReportsPage.js.map +1 -1
  40. package/dist/brainyrich/pages/RiskPage.js.map +1 -1
  41. package/dist/brainyrich/pages/TaxPage.js.map +1 -1
  42. package/dist/brainyrich/pages/_shared.d.ts +0 -1
  43. package/dist/brainyrich/pages/_shared.js.map +1 -1
  44. package/dist/brainyrich/providers/BrainyRichProvider.d.ts +0 -1
  45. package/dist/brainyrich/providers/BrainyRichProvider.js.map +1 -1
  46. package/dist/brainyrich/services/createSandboxAssistantTransport.js.map +1 -1
  47. package/dist/brainyrich/types/bra.d.ts +15 -0
  48. package/dist/brainyrich/types/bra.d.ts.map +1 -1
  49. package/dist/brainyrich/types/index.d.ts +0 -1
  50. package/dist/brainyrich/utils/cn.d.ts +0 -1
  51. package/dist/brainyrich/utils/i18n.d.ts +0 -1
  52. package/dist/brainyrich/utils/i18n.js.map +1 -1
  53. package/dist/brainyrich/utils/nativeControls.d.ts +0 -1
  54. package/dist/brainyrich/utils/nativeControls.js.map +1 -1
  55. package/dist/brainyrich/utils/navigation.js.map +1 -1
  56. package/dist/brainyrich/utils/pageContext.js.map +1 -1
  57. package/dist/dev/main.d.ts +0 -1
  58. package/dist/node_modules/clsx/dist/clsx.js.map +1 -1
  59. package/dist/node_modules/d3-array/src/ascending.js.map +1 -1
  60. package/dist/node_modules/d3-array/src/bisect.js.map +1 -1
  61. package/dist/node_modules/d3-array/src/bisector.js.map +1 -1
  62. package/dist/node_modules/d3-array/src/descending.js.map +1 -1
  63. package/dist/node_modules/d3-array/src/max.js.map +1 -1
  64. package/dist/node_modules/d3-array/src/min.js.map +1 -1
  65. package/dist/node_modules/d3-array/src/number.js.map +1 -1
  66. package/dist/node_modules/d3-array/src/quantile.js.map +1 -1
  67. package/dist/node_modules/d3-array/src/quickselect.js.map +1 -1
  68. package/dist/node_modules/d3-array/src/range.js.map +1 -1
  69. package/dist/node_modules/d3-array/src/sort.js.map +1 -1
  70. package/dist/node_modules/d3-array/src/ticks.js.map +1 -1
  71. package/dist/node_modules/d3-color/src/color.js.map +1 -1
  72. package/dist/node_modules/d3-color/src/define.js.map +1 -1
  73. package/dist/node_modules/d3-format/src/defaultLocale.js.map +1 -1
  74. package/dist/node_modules/d3-format/src/exponent.js.map +1 -1
  75. package/dist/node_modules/d3-format/src/formatDecimal.js.map +1 -1
  76. package/dist/node_modules/d3-format/src/formatGroup.js.map +1 -1
  77. package/dist/node_modules/d3-format/src/formatNumerals.js.map +1 -1
  78. package/dist/node_modules/d3-format/src/formatPrefixAuto.js.map +1 -1
  79. package/dist/node_modules/d3-format/src/formatRounded.js.map +1 -1
  80. package/dist/node_modules/d3-format/src/formatSpecifier.js.map +1 -1
  81. package/dist/node_modules/d3-format/src/formatTrim.js.map +1 -1
  82. package/dist/node_modules/d3-format/src/formatTypes.js.map +1 -1
  83. package/dist/node_modules/d3-format/src/identity.js.map +1 -1
  84. package/dist/node_modules/d3-format/src/locale.js.map +1 -1
  85. package/dist/node_modules/d3-format/src/precisionFixed.js.map +1 -1
  86. package/dist/node_modules/d3-format/src/precisionPrefix.js.map +1 -1
  87. package/dist/node_modules/d3-format/src/precisionRound.js.map +1 -1
  88. package/dist/node_modules/d3-interpolate/src/array.js.map +1 -1
  89. package/dist/node_modules/d3-interpolate/src/basis.js.map +1 -1
  90. package/dist/node_modules/d3-interpolate/src/basisClosed.js.map +1 -1
  91. package/dist/node_modules/d3-interpolate/src/color.js.map +1 -1
  92. package/dist/node_modules/d3-interpolate/src/date.js.map +1 -1
  93. package/dist/node_modules/d3-interpolate/src/number.js.map +1 -1
  94. package/dist/node_modules/d3-interpolate/src/numberArray.js.map +1 -1
  95. package/dist/node_modules/d3-interpolate/src/object.js.map +1 -1
  96. package/dist/node_modules/d3-interpolate/src/piecewise.js.map +1 -1
  97. package/dist/node_modules/d3-interpolate/src/rgb.js.map +1 -1
  98. package/dist/node_modules/d3-interpolate/src/round.js.map +1 -1
  99. package/dist/node_modules/d3-interpolate/src/string.js.map +1 -1
  100. package/dist/node_modules/d3-interpolate/src/value.js.map +1 -1
  101. package/dist/node_modules/d3-path/src/path.js.map +1 -1
  102. package/dist/node_modules/d3-scale/src/band.js.map +1 -1
  103. package/dist/node_modules/d3-scale/src/constant.js.map +1 -1
  104. package/dist/node_modules/d3-scale/src/continuous.js.map +1 -1
  105. package/dist/node_modules/d3-scale/src/diverging.js.map +1 -1
  106. package/dist/node_modules/d3-scale/src/identity.js.map +1 -1
  107. package/dist/node_modules/d3-scale/src/init.js.map +1 -1
  108. package/dist/node_modules/d3-scale/src/linear.js.map +1 -1
  109. package/dist/node_modules/d3-scale/src/log.js.map +1 -1
  110. package/dist/node_modules/d3-scale/src/nice.js.map +1 -1
  111. package/dist/node_modules/d3-scale/src/number.js.map +1 -1
  112. package/dist/node_modules/d3-scale/src/ordinal.js.map +1 -1
  113. package/dist/node_modules/d3-scale/src/pow.js.map +1 -1
  114. package/dist/node_modules/d3-scale/src/quantile.js.map +1 -1
  115. package/dist/node_modules/d3-scale/src/quantize.js.map +1 -1
  116. package/dist/node_modules/d3-scale/src/radial.js.map +1 -1
  117. package/dist/node_modules/d3-scale/src/sequential.js.map +1 -1
  118. package/dist/node_modules/d3-scale/src/sequentialQuantile.js.map +1 -1
  119. package/dist/node_modules/d3-scale/src/symlog.js.map +1 -1
  120. package/dist/node_modules/d3-scale/src/threshold.js.map +1 -1
  121. package/dist/node_modules/d3-scale/src/tickFormat.js.map +1 -1
  122. package/dist/node_modules/d3-scale/src/time.js.map +1 -1
  123. package/dist/node_modules/d3-scale/src/utcTime.js.map +1 -1
  124. package/dist/node_modules/d3-shape/src/area.js.map +1 -1
  125. package/dist/node_modules/d3-shape/src/array.js.map +1 -1
  126. package/dist/node_modules/d3-shape/src/constant.js.map +1 -1
  127. package/dist/node_modules/d3-shape/src/curve/basis.js.map +1 -1
  128. package/dist/node_modules/d3-shape/src/curve/basisClosed.js.map +1 -1
  129. package/dist/node_modules/d3-shape/src/curve/basisOpen.js.map +1 -1
  130. package/dist/node_modules/d3-shape/src/curve/bump.js.map +1 -1
  131. package/dist/node_modules/d3-shape/src/curve/linear.js.map +1 -1
  132. package/dist/node_modules/d3-shape/src/curve/linearClosed.js.map +1 -1
  133. package/dist/node_modules/d3-shape/src/curve/monotone.js.map +1 -1
  134. package/dist/node_modules/d3-shape/src/curve/natural.js.map +1 -1
  135. package/dist/node_modules/d3-shape/src/curve/step.js.map +1 -1
  136. package/dist/node_modules/d3-shape/src/line.js.map +1 -1
  137. package/dist/node_modules/d3-shape/src/noop.js.map +1 -1
  138. package/dist/node_modules/d3-shape/src/offset/expand.js.map +1 -1
  139. package/dist/node_modules/d3-shape/src/offset/none.js.map +1 -1
  140. package/dist/node_modules/d3-shape/src/offset/silhouette.js.map +1 -1
  141. package/dist/node_modules/d3-shape/src/offset/wiggle.js.map +1 -1
  142. package/dist/node_modules/d3-shape/src/order/none.js.map +1 -1
  143. package/dist/node_modules/d3-shape/src/path.js.map +1 -1
  144. package/dist/node_modules/d3-shape/src/point.js.map +1 -1
  145. package/dist/node_modules/d3-shape/src/stack.js.map +1 -1
  146. package/dist/node_modules/d3-shape/src/symbol/circle.js.map +1 -1
  147. package/dist/node_modules/d3-shape/src/symbol/cross.js.map +1 -1
  148. package/dist/node_modules/d3-shape/src/symbol/diamond.js.map +1 -1
  149. package/dist/node_modules/d3-shape/src/symbol/square.js.map +1 -1
  150. package/dist/node_modules/d3-shape/src/symbol/star.js.map +1 -1
  151. package/dist/node_modules/d3-shape/src/symbol/triangle.js.map +1 -1
  152. package/dist/node_modules/d3-shape/src/symbol/wye.js.map +1 -1
  153. package/dist/node_modules/d3-shape/src/symbol.js.map +1 -1
  154. package/dist/node_modules/d3-time/src/day.js.map +1 -1
  155. package/dist/node_modules/d3-time/src/hour.js.map +1 -1
  156. package/dist/node_modules/d3-time/src/interval.js.map +1 -1
  157. package/dist/node_modules/d3-time/src/millisecond.js.map +1 -1
  158. package/dist/node_modules/d3-time/src/minute.js.map +1 -1
  159. package/dist/node_modules/d3-time/src/month.js.map +1 -1
  160. package/dist/node_modules/d3-time/src/second.js.map +1 -1
  161. package/dist/node_modules/d3-time/src/ticks.js.map +1 -1
  162. package/dist/node_modules/d3-time/src/week.js.map +1 -1
  163. package/dist/node_modules/d3-time/src/year.js.map +1 -1
  164. package/dist/node_modules/d3-time-format/src/defaultLocale.js.map +1 -1
  165. package/dist/node_modules/d3-time-format/src/locale.js.map +1 -1
  166. package/dist/node_modules/decimal.js-light/decimal.js.map +1 -1
  167. package/dist/node_modules/eventemitter3/index.js.map +1 -1
  168. package/dist/node_modules/fast-equals/dist/es/index.js.map +1 -1
  169. package/dist/node_modules/internmap/src/index.js.map +1 -1
  170. package/dist/node_modules/lodash/_DataView.js.map +1 -1
  171. package/dist/node_modules/lodash/_Hash.js.map +1 -1
  172. package/dist/node_modules/lodash/_ListCache.js.map +1 -1
  173. package/dist/node_modules/lodash/_Map.js.map +1 -1
  174. package/dist/node_modules/lodash/_MapCache.js.map +1 -1
  175. package/dist/node_modules/lodash/_Promise.js.map +1 -1
  176. package/dist/node_modules/lodash/_Set.js.map +1 -1
  177. package/dist/node_modules/lodash/_SetCache.js.map +1 -1
  178. package/dist/node_modules/lodash/_Stack.js +2 -1
  179. package/dist/node_modules/lodash/_Stack.js.map +1 -1
  180. package/dist/node_modules/lodash/_Symbol.js.map +1 -1
  181. package/dist/node_modules/lodash/_Uint8Array.js.map +1 -1
  182. package/dist/node_modules/lodash/_WeakMap.js.map +1 -1
  183. package/dist/node_modules/lodash/_apply.js.map +1 -1
  184. package/dist/node_modules/lodash/_arrayEvery.js.map +1 -1
  185. package/dist/node_modules/lodash/_arrayFilter.js.map +1 -1
  186. package/dist/node_modules/lodash/_arrayIncludes.js.map +1 -1
  187. package/dist/node_modules/lodash/_arrayIncludesWith.js.map +1 -1
  188. package/dist/node_modules/lodash/_arrayLikeKeys.js.map +1 -1
  189. package/dist/node_modules/lodash/_arrayMap.js.map +1 -1
  190. package/dist/node_modules/lodash/_arrayPush.js.map +1 -1
  191. package/dist/node_modules/lodash/_arraySome.js.map +1 -1
  192. package/dist/node_modules/lodash/_asciiToArray.js.map +1 -1
  193. package/dist/node_modules/lodash/_assocIndexOf.js.map +1 -1
  194. package/dist/node_modules/lodash/_baseAssignValue.js.map +1 -1
  195. package/dist/node_modules/lodash/_baseEach.js.map +1 -1
  196. package/dist/node_modules/lodash/_baseEvery.js.map +1 -1
  197. package/dist/node_modules/lodash/_baseExtremum.js.map +1 -1
  198. package/dist/node_modules/lodash/_baseFindIndex.js.map +1 -1
  199. package/dist/node_modules/lodash/_baseFlatten.js.map +1 -1
  200. package/dist/node_modules/lodash/_baseFor.js.map +1 -1
  201. package/dist/node_modules/lodash/_baseForOwn.js.map +1 -1
  202. package/dist/node_modules/lodash/_baseGet.js.map +1 -1
  203. package/dist/node_modules/lodash/_baseGetAllKeys.js.map +1 -1
  204. package/dist/node_modules/lodash/_baseGetTag.js.map +1 -1
  205. package/dist/node_modules/lodash/_baseGt.js.map +1 -1
  206. package/dist/node_modules/lodash/_baseHasIn.js.map +1 -1
  207. package/dist/node_modules/lodash/_baseIndexOf.js.map +1 -1
  208. package/dist/node_modules/lodash/_baseIsArguments.js.map +1 -1
  209. package/dist/node_modules/lodash/_baseIsEqual.js.map +1 -1
  210. package/dist/node_modules/lodash/_baseIsEqualDeep.js.map +1 -1
  211. package/dist/node_modules/lodash/_baseIsMatch.js.map +1 -1
  212. package/dist/node_modules/lodash/_baseIsNaN.js.map +1 -1
  213. package/dist/node_modules/lodash/_baseIsNative.js.map +1 -1
  214. package/dist/node_modules/lodash/_baseIsTypedArray.js.map +1 -1
  215. package/dist/node_modules/lodash/_baseIteratee.js.map +1 -1
  216. package/dist/node_modules/lodash/_baseKeys.js.map +1 -1
  217. package/dist/node_modules/lodash/_baseLt.js.map +1 -1
  218. package/dist/node_modules/lodash/_baseMap.js.map +1 -1
  219. package/dist/node_modules/lodash/_baseMatches.js.map +1 -1
  220. package/dist/node_modules/lodash/_baseMatchesProperty.js.map +1 -1
  221. package/dist/node_modules/lodash/_baseOrderBy.js.map +1 -1
  222. package/dist/node_modules/lodash/_baseProperty.js.map +1 -1
  223. package/dist/node_modules/lodash/_basePropertyDeep.js.map +1 -1
  224. package/dist/node_modules/lodash/_baseRange.js.map +1 -1
  225. package/dist/node_modules/lodash/_baseRest.js.map +1 -1
  226. package/dist/node_modules/lodash/_baseSetToString.js.map +1 -1
  227. package/dist/node_modules/lodash/_baseSlice.js.map +1 -1
  228. package/dist/node_modules/lodash/_baseSome.js.map +1 -1
  229. package/dist/node_modules/lodash/_baseSortBy.js.map +1 -1
  230. package/dist/node_modules/lodash/_baseTimes.js.map +1 -1
  231. package/dist/node_modules/lodash/_baseToString.js.map +1 -1
  232. package/dist/node_modules/lodash/_baseTrim.js.map +1 -1
  233. package/dist/node_modules/lodash/_baseUnary.js.map +1 -1
  234. package/dist/node_modules/lodash/_baseUniq.js.map +1 -1
  235. package/dist/node_modules/lodash/_cacheHas.js.map +1 -1
  236. package/dist/node_modules/lodash/_castPath.js.map +1 -1
  237. package/dist/node_modules/lodash/_castSlice.js.map +1 -1
  238. package/dist/node_modules/lodash/_compareAscending.js.map +1 -1
  239. package/dist/node_modules/lodash/_compareMultiple.js.map +1 -1
  240. package/dist/node_modules/lodash/_coreJsData.js.map +1 -1
  241. package/dist/node_modules/lodash/_createBaseEach.js.map +1 -1
  242. package/dist/node_modules/lodash/_createBaseFor.js.map +1 -1
  243. package/dist/node_modules/lodash/_createCaseFirst.js.map +1 -1
  244. package/dist/node_modules/lodash/_createFind.js.map +1 -1
  245. package/dist/node_modules/lodash/_createRange.js.map +1 -1
  246. package/dist/node_modules/lodash/_createSet.js.map +1 -1
  247. package/dist/node_modules/lodash/_defineProperty.js.map +1 -1
  248. package/dist/node_modules/lodash/_equalArrays.js.map +1 -1
  249. package/dist/node_modules/lodash/_equalByTag.js.map +1 -1
  250. package/dist/node_modules/lodash/_equalObjects.js.map +1 -1
  251. package/dist/node_modules/lodash/_freeGlobal.js.map +1 -1
  252. package/dist/node_modules/lodash/_getAllKeys.js.map +1 -1
  253. package/dist/node_modules/lodash/_getMapData.js.map +1 -1
  254. package/dist/node_modules/lodash/_getMatchData.js.map +1 -1
  255. package/dist/node_modules/lodash/_getNative.js.map +1 -1
  256. package/dist/node_modules/lodash/_getPrototype.js.map +1 -1
  257. package/dist/node_modules/lodash/_getRawTag.js.map +1 -1
  258. package/dist/node_modules/lodash/_getSymbols.js.map +1 -1
  259. package/dist/node_modules/lodash/_getTag.js.map +1 -1
  260. package/dist/node_modules/lodash/_getValue.js.map +1 -1
  261. package/dist/node_modules/lodash/_hasPath.js.map +1 -1
  262. package/dist/node_modules/lodash/_hasUnicode.js.map +1 -1
  263. package/dist/node_modules/lodash/_hashClear.js.map +1 -1
  264. package/dist/node_modules/lodash/_hashDelete.js.map +1 -1
  265. package/dist/node_modules/lodash/_hashGet.js.map +1 -1
  266. package/dist/node_modules/lodash/_hashHas.js.map +1 -1
  267. package/dist/node_modules/lodash/_hashSet.js.map +1 -1
  268. package/dist/node_modules/lodash/_isFlattenable.js.map +1 -1
  269. package/dist/node_modules/lodash/_isIndex.js.map +1 -1
  270. package/dist/node_modules/lodash/_isIterateeCall.js.map +1 -1
  271. package/dist/node_modules/lodash/_isKey.js.map +1 -1
  272. package/dist/node_modules/lodash/_isKeyable.js.map +1 -1
  273. package/dist/node_modules/lodash/_isMasked.js.map +1 -1
  274. package/dist/node_modules/lodash/_isPrototype.js.map +1 -1
  275. package/dist/node_modules/lodash/_isStrictComparable.js.map +1 -1
  276. package/dist/node_modules/lodash/_listCacheClear.js.map +1 -1
  277. package/dist/node_modules/lodash/_listCacheDelete.js.map +1 -1
  278. package/dist/node_modules/lodash/_listCacheGet.js.map +1 -1
  279. package/dist/node_modules/lodash/_listCacheHas.js.map +1 -1
  280. package/dist/node_modules/lodash/_listCacheSet.js.map +1 -1
  281. package/dist/node_modules/lodash/_mapCacheClear.js.map +1 -1
  282. package/dist/node_modules/lodash/_mapCacheDelete.js.map +1 -1
  283. package/dist/node_modules/lodash/_mapCacheGet.js.map +1 -1
  284. package/dist/node_modules/lodash/_mapCacheHas.js.map +1 -1
  285. package/dist/node_modules/lodash/_mapCacheSet.js.map +1 -1
  286. package/dist/node_modules/lodash/_mapToArray.js.map +1 -1
  287. package/dist/node_modules/lodash/_matchesStrictComparable.js.map +1 -1
  288. package/dist/node_modules/lodash/_memoizeCapped.js.map +1 -1
  289. package/dist/node_modules/lodash/_nativeCreate.js.map +1 -1
  290. package/dist/node_modules/lodash/_nativeKeys.js.map +1 -1
  291. package/dist/node_modules/lodash/_nodeUtil.js.map +1 -1
  292. package/dist/node_modules/lodash/_objectToString.js.map +1 -1
  293. package/dist/node_modules/lodash/_overArg.js.map +1 -1
  294. package/dist/node_modules/lodash/_overRest.js.map +1 -1
  295. package/dist/node_modules/lodash/_root.js.map +1 -1
  296. package/dist/node_modules/lodash/_setCacheAdd.js.map +1 -1
  297. package/dist/node_modules/lodash/_setCacheHas.js.map +1 -1
  298. package/dist/node_modules/lodash/_setToArray.js.map +1 -1
  299. package/dist/node_modules/lodash/_setToString.js.map +1 -1
  300. package/dist/node_modules/lodash/_shortOut.js.map +1 -1
  301. package/dist/node_modules/lodash/_stackClear.js.map +1 -1
  302. package/dist/node_modules/lodash/_stackDelete.js.map +1 -1
  303. package/dist/node_modules/lodash/_stackGet.js.map +1 -1
  304. package/dist/node_modules/lodash/_stackHas.js.map +1 -1
  305. package/dist/node_modules/lodash/_stackSet.js.map +1 -1
  306. package/dist/node_modules/lodash/_strictIndexOf.js.map +1 -1
  307. package/dist/node_modules/lodash/_stringToArray.js.map +1 -1
  308. package/dist/node_modules/lodash/_stringToPath.js.map +1 -1
  309. package/dist/node_modules/lodash/_toKey.js.map +1 -1
  310. package/dist/node_modules/lodash/_toSource.js.map +1 -1
  311. package/dist/node_modules/lodash/_trimmedEndIndex.js.map +1 -1
  312. package/dist/node_modules/lodash/_unicodeToArray.js.map +1 -1
  313. package/dist/node_modules/lodash/constant.js.map +1 -1
  314. package/dist/node_modules/lodash/debounce.js.map +1 -1
  315. package/dist/node_modules/lodash/eq.js.map +1 -1
  316. package/dist/node_modules/lodash/every.js.map +1 -1
  317. package/dist/node_modules/lodash/find.js.map +1 -1
  318. package/dist/node_modules/lodash/findIndex.js.map +1 -1
  319. package/dist/node_modules/lodash/flatMap.js.map +1 -1
  320. package/dist/node_modules/lodash/get.js.map +1 -1
  321. package/dist/node_modules/lodash/hasIn.js.map +1 -1
  322. package/dist/node_modules/lodash/identity.js.map +1 -1
  323. package/dist/node_modules/lodash/isArguments.js.map +1 -1
  324. package/dist/node_modules/lodash/isArray.js.map +1 -1
  325. package/dist/node_modules/lodash/isArrayLike.js.map +1 -1
  326. package/dist/node_modules/lodash/isBoolean.js.map +1 -1
  327. package/dist/node_modules/lodash/isBuffer.js.map +1 -1
  328. package/dist/node_modules/lodash/isEqual.js.map +1 -1
  329. package/dist/node_modules/lodash/isFunction.js.map +1 -1
  330. package/dist/node_modules/lodash/isLength.js.map +1 -1
  331. package/dist/node_modules/lodash/isNaN.js.map +1 -1
  332. package/dist/node_modules/lodash/isNil.js.map +1 -1
  333. package/dist/node_modules/lodash/isNumber.js.map +1 -1
  334. package/dist/node_modules/lodash/isObject.js.map +1 -1
  335. package/dist/node_modules/lodash/isObjectLike.js.map +1 -1
  336. package/dist/node_modules/lodash/isPlainObject.js.map +1 -1
  337. package/dist/node_modules/lodash/isString.js.map +1 -1
  338. package/dist/node_modules/lodash/isSymbol.js.map +1 -1
  339. package/dist/node_modules/lodash/isTypedArray.js.map +1 -1
  340. package/dist/node_modules/lodash/keys.js.map +1 -1
  341. package/dist/node_modules/lodash/last.js.map +1 -1
  342. package/dist/node_modules/lodash/map.js.map +1 -1
  343. package/dist/node_modules/lodash/mapValues.js.map +1 -1
  344. package/dist/node_modules/lodash/max.js.map +1 -1
  345. package/dist/node_modules/lodash/maxBy.js.map +1 -1
  346. package/dist/node_modules/lodash/memoize.js.map +1 -1
  347. package/dist/node_modules/lodash/min.js.map +1 -1
  348. package/dist/node_modules/lodash/minBy.js.map +1 -1
  349. package/dist/node_modules/lodash/noop.js.map +1 -1
  350. package/dist/node_modules/lodash/now.js.map +1 -1
  351. package/dist/node_modules/lodash/property.js.map +1 -1
  352. package/dist/node_modules/lodash/range.js.map +1 -1
  353. package/dist/node_modules/lodash/some.js.map +1 -1
  354. package/dist/node_modules/lodash/sortBy.js.map +1 -1
  355. package/dist/node_modules/lodash/stubArray.js.map +1 -1
  356. package/dist/node_modules/lodash/stubFalse.js.map +1 -1
  357. package/dist/node_modules/lodash/throttle.js.map +1 -1
  358. package/dist/node_modules/lodash/toFinite.js.map +1 -1
  359. package/dist/node_modules/lodash/toInteger.js.map +1 -1
  360. package/dist/node_modules/lodash/toNumber.js.map +1 -1
  361. package/dist/node_modules/lodash/toString.js.map +1 -1
  362. package/dist/node_modules/lodash/uniqBy.js.map +1 -1
  363. package/dist/node_modules/lodash/upperFirst.js.map +1 -1
  364. package/dist/node_modules/object-assign/index.js.map +1 -1
  365. package/dist/node_modules/prop-types/checkPropTypes.js.map +1 -1
  366. package/dist/node_modules/prop-types/factoryWithThrowingShims.js.map +1 -1
  367. package/dist/node_modules/prop-types/factoryWithTypeCheckers.js.map +1 -1
  368. package/dist/node_modules/prop-types/index.js.map +1 -1
  369. package/dist/node_modules/prop-types/lib/ReactPropTypesSecret.js.map +1 -1
  370. package/dist/node_modules/prop-types/lib/has.js.map +1 -1
  371. package/dist/node_modules/prop-types/node_modules/react-is/cjs/react-is.development.js.map +1 -1
  372. package/dist/node_modules/prop-types/node_modules/react-is/cjs/react-is.production.min.js.map +1 -1
  373. package/dist/node_modules/prop-types/node_modules/react-is/index.js.map +1 -1
  374. package/dist/node_modules/react-is/cjs/react-is.development.js.map +1 -1
  375. package/dist/node_modules/react-is/cjs/react-is.production.min.js.map +1 -1
  376. package/dist/node_modules/react-is/index.js.map +1 -1
  377. package/dist/node_modules/react-smooth/es6/Animate.js +2 -2
  378. package/dist/node_modules/react-smooth/es6/Animate.js.map +1 -1
  379. package/dist/node_modules/react-smooth/es6/AnimateManager.js.map +1 -1
  380. package/dist/node_modules/react-smooth/es6/configUpdate.js.map +1 -1
  381. package/dist/node_modules/react-smooth/es6/easing.js.map +1 -1
  382. package/dist/node_modules/react-smooth/es6/setRafTimeout.js.map +1 -1
  383. package/dist/node_modules/react-smooth/es6/util.js.map +1 -1
  384. package/dist/node_modules/recharts/es6/cartesian/Area.js +13 -13
  385. package/dist/node_modules/recharts/es6/cartesian/Area.js.map +1 -1
  386. package/dist/node_modules/recharts/es6/cartesian/Bar.js +9 -9
  387. package/dist/node_modules/recharts/es6/cartesian/Bar.js.map +1 -1
  388. package/dist/node_modules/recharts/es6/cartesian/Brush.js +12 -12
  389. package/dist/node_modules/recharts/es6/cartesian/Brush.js.map +1 -1
  390. package/dist/node_modules/recharts/es6/cartesian/CartesianAxis.js +7 -7
  391. package/dist/node_modules/recharts/es6/cartesian/CartesianAxis.js.map +1 -1
  392. package/dist/node_modules/recharts/es6/cartesian/ErrorBar.js +4 -4
  393. package/dist/node_modules/recharts/es6/cartesian/ErrorBar.js.map +1 -1
  394. package/dist/node_modules/recharts/es6/cartesian/ReferenceArea.js +3 -3
  395. package/dist/node_modules/recharts/es6/cartesian/ReferenceArea.js.map +1 -1
  396. package/dist/node_modules/recharts/es6/cartesian/ReferenceDot.js +3 -3
  397. package/dist/node_modules/recharts/es6/cartesian/ReferenceDot.js.map +1 -1
  398. package/dist/node_modules/recharts/es6/cartesian/ReferenceLine.js +4 -4
  399. package/dist/node_modules/recharts/es6/cartesian/ReferenceLine.js.map +1 -1
  400. package/dist/node_modules/recharts/es6/cartesian/XAxis.js +3 -3
  401. package/dist/node_modules/recharts/es6/cartesian/XAxis.js.map +1 -1
  402. package/dist/node_modules/recharts/es6/cartesian/YAxis.js +3 -3
  403. package/dist/node_modules/recharts/es6/cartesian/YAxis.js.map +1 -1
  404. package/dist/node_modules/recharts/es6/cartesian/getEquidistantTicks.js.map +1 -1
  405. package/dist/node_modules/recharts/es6/cartesian/getTicks.js.map +1 -1
  406. package/dist/node_modules/recharts/es6/chart/AccessibilityManager.js +1 -1
  407. package/dist/node_modules/recharts/es6/chart/AccessibilityManager.js.map +1 -1
  408. package/dist/node_modules/recharts/es6/chart/AreaChart.js.map +1 -1
  409. package/dist/node_modules/recharts/es6/chart/BarChart.js.map +1 -1
  410. package/dist/node_modules/recharts/es6/chart/PieChart.js.map +1 -1
  411. package/dist/node_modules/recharts/es6/chart/generateCategoricalChart.js +22 -22
  412. package/dist/node_modules/recharts/es6/chart/generateCategoricalChart.js.map +1 -1
  413. package/dist/node_modules/recharts/es6/component/Cell.js.map +1 -1
  414. package/dist/node_modules/recharts/es6/component/Cursor.js +1 -1
  415. package/dist/node_modules/recharts/es6/component/Cursor.js.map +1 -1
  416. package/dist/node_modules/recharts/es6/component/DefaultLegendContent.js +11 -11
  417. package/dist/node_modules/recharts/es6/component/DefaultLegendContent.js.map +1 -1
  418. package/dist/node_modules/recharts/es6/component/DefaultTooltipContent.js +6 -6
  419. package/dist/node_modules/recharts/es6/component/DefaultTooltipContent.js.map +1 -1
  420. package/dist/node_modules/recharts/es6/component/Label.js +14 -14
  421. package/dist/node_modules/recharts/es6/component/Label.js.map +1 -1
  422. package/dist/node_modules/recharts/es6/component/LabelList.js +6 -6
  423. package/dist/node_modules/recharts/es6/component/LabelList.js.map +1 -1
  424. package/dist/node_modules/recharts/es6/component/Legend.js +5 -5
  425. package/dist/node_modules/recharts/es6/component/Legend.js.map +1 -1
  426. package/dist/node_modules/recharts/es6/component/ResponsiveContainer.js +3 -3
  427. package/dist/node_modules/recharts/es6/component/ResponsiveContainer.js.map +1 -1
  428. package/dist/node_modules/recharts/es6/component/Text.js +2 -2
  429. package/dist/node_modules/recharts/es6/component/Text.js.map +1 -1
  430. package/dist/node_modules/recharts/es6/component/Tooltip.js +3 -3
  431. package/dist/node_modules/recharts/es6/component/Tooltip.js.map +1 -1
  432. package/dist/node_modules/recharts/es6/component/TooltipBoundingBox.js +2 -2
  433. package/dist/node_modules/recharts/es6/component/TooltipBoundingBox.js.map +1 -1
  434. package/dist/node_modules/recharts/es6/container/Layer.js +2 -2
  435. package/dist/node_modules/recharts/es6/container/Layer.js.map +1 -1
  436. package/dist/node_modules/recharts/es6/container/Surface.js +2 -2
  437. package/dist/node_modules/recharts/es6/container/Surface.js.map +1 -1
  438. package/dist/node_modules/recharts/es6/context/chartLayoutContext.js +2 -2
  439. package/dist/node_modules/recharts/es6/context/chartLayoutContext.js.map +1 -1
  440. package/dist/node_modules/recharts/es6/polar/Pie.js +13 -13
  441. package/dist/node_modules/recharts/es6/polar/Pie.js.map +1 -1
  442. package/dist/node_modules/recharts/es6/polar/PolarAngleAxis.js +8 -8
  443. package/dist/node_modules/recharts/es6/polar/PolarAngleAxis.js.map +1 -1
  444. package/dist/node_modules/recharts/es6/polar/PolarRadiusAxis.js +6 -6
  445. package/dist/node_modules/recharts/es6/polar/PolarRadiusAxis.js.map +1 -1
  446. package/dist/node_modules/recharts/es6/shape/Cross.js +1 -1
  447. package/dist/node_modules/recharts/es6/shape/Cross.js.map +1 -1
  448. package/dist/node_modules/recharts/es6/shape/Curve.js +1 -1
  449. package/dist/node_modules/recharts/es6/shape/Curve.js.map +1 -1
  450. package/dist/node_modules/recharts/es6/shape/Dot.js +1 -1
  451. package/dist/node_modules/recharts/es6/shape/Dot.js.map +1 -1
  452. package/dist/node_modules/recharts/es6/shape/Polygon.js +4 -4
  453. package/dist/node_modules/recharts/es6/shape/Polygon.js.map +1 -1
  454. package/dist/node_modules/recharts/es6/shape/Rectangle.js +4 -4
  455. package/dist/node_modules/recharts/es6/shape/Rectangle.js.map +1 -1
  456. package/dist/node_modules/recharts/es6/shape/Sector.js +1 -1
  457. package/dist/node_modules/recharts/es6/shape/Sector.js.map +1 -1
  458. package/dist/node_modules/recharts/es6/shape/Symbols.js +1 -1
  459. package/dist/node_modules/recharts/es6/shape/Symbols.js.map +1 -1
  460. package/dist/node_modules/recharts/es6/shape/Trapezoid.js +4 -4
  461. package/dist/node_modules/recharts/es6/shape/Trapezoid.js.map +1 -1
  462. package/dist/node_modules/recharts/es6/util/ActiveShapeUtils.js +9 -9
  463. package/dist/node_modules/recharts/es6/util/ActiveShapeUtils.js.map +1 -1
  464. package/dist/node_modules/recharts/es6/util/BarUtils.js +1 -1
  465. package/dist/node_modules/recharts/es6/util/BarUtils.js.map +1 -1
  466. package/dist/node_modules/recharts/es6/util/CartesianUtils.js +1 -1
  467. package/dist/node_modules/recharts/es6/util/CartesianUtils.js.map +1 -1
  468. package/dist/node_modules/recharts/es6/util/ChartUtils.js.map +1 -1
  469. package/dist/node_modules/recharts/es6/util/CssPrefixUtils.js.map +1 -1
  470. package/dist/node_modules/recharts/es6/util/DOMUtils.js.map +1 -1
  471. package/dist/node_modules/recharts/es6/util/DataUtils.js.map +1 -1
  472. package/dist/node_modules/recharts/es6/util/DetectReferenceElementsDomain.js.map +1 -1
  473. package/dist/node_modules/recharts/es6/util/Events.js.map +1 -1
  474. package/dist/node_modules/recharts/es6/util/Global.js.map +1 -1
  475. package/dist/node_modules/recharts/es6/util/IfOverflowMatches.js.map +1 -1
  476. package/dist/node_modules/recharts/es6/util/LogUtils.js.map +1 -1
  477. package/dist/node_modules/recharts/es6/util/PolarUtils.js +1 -1
  478. package/dist/node_modules/recharts/es6/util/PolarUtils.js.map +1 -1
  479. package/dist/node_modules/recharts/es6/util/ReactUtils.js +1 -1
  480. package/dist/node_modules/recharts/es6/util/ReactUtils.js.map +1 -1
  481. package/dist/node_modules/recharts/es6/util/ReduceCSSCalc.js +1 -1
  482. package/dist/node_modules/recharts/es6/util/ReduceCSSCalc.js.map +1 -1
  483. package/dist/node_modules/recharts/es6/util/ShallowEqual.js.map +1 -1
  484. package/dist/node_modules/recharts/es6/util/TickUtils.js.map +1 -1
  485. package/dist/node_modules/recharts/es6/util/calculateViewBox.js.map +1 -1
  486. package/dist/node_modules/recharts/es6/util/cursor/getCursorPoints.js.map +1 -1
  487. package/dist/node_modules/recharts/es6/util/cursor/getCursorRectangle.js.map +1 -1
  488. package/dist/node_modules/recharts/es6/util/cursor/getRadialCursorPoints.js.map +1 -1
  489. package/dist/node_modules/recharts/es6/util/getEveryNthWithCondition.js.map +1 -1
  490. package/dist/node_modules/recharts/es6/util/getLegendProps.js.map +1 -1
  491. package/dist/node_modules/recharts/es6/util/isDomainSpecifiedByUser.js.map +1 -1
  492. package/dist/node_modules/recharts/es6/util/payload/getUniqPayload.js.map +1 -1
  493. package/dist/node_modules/recharts/es6/util/tooltip/translate.js.map +1 -1
  494. package/dist/node_modules/recharts/es6/util/types.js +1 -1
  495. package/dist/node_modules/recharts/es6/util/types.js.map +1 -1
  496. package/dist/node_modules/recharts-scale/es6/getNiceTickValues.js.map +1 -1
  497. package/dist/node_modules/recharts-scale/es6/util/arithmetic.js.map +1 -1
  498. package/dist/node_modules/recharts-scale/es6/util/utils.js.map +1 -1
  499. package/dist/node_modules/sonner/dist/index.js.map +1 -1
  500. package/dist/node_modules/tailwind-merge/dist/bundle-mjs.js +1 -1
  501. package/dist/node_modules/tailwind-merge/dist/bundle-mjs.js.map +1 -1
  502. package/dist/node_modules/tiny-invariant/dist/esm/tiny-invariant.js.map +1 -1
  503. package/dist/stories/LoadMore.stories.d.ts +0 -1
  504. package/package.json +15 -7
@@ -1 +1 @@
1
- {"version":3,"file":"TaxPage.js","names":[],"sources":["../../../src/brainyrich/pages/TaxPage.tsx"],"sourcesContent":["import { useMemo, useState } from 'react';\nimport {\n Badge,\n Button,\n Card,\n CardContent,\n CardDescription,\n CardHeader,\n CardTitle,\n Dialog,\n DialogClose,\n DialogContent,\n DialogDescription,\n DialogFooter,\n DialogHeader,\n DialogTitle,\n DropdownMenu,\n DropdownMenuContent,\n DropdownMenuItem,\n DropdownMenuLabel,\n DropdownMenuSeparator,\n DropdownMenuTrigger,\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 Tabs,\n TabsContent,\n TabsList,\n TabsTrigger,\n Textarea,\n} from '@burdenoff/fe-libs/ui';\nimport {\n ArrowDownRight,\n ArrowUpRight,\n Check,\n Coins,\n Landmark,\n MoreHorizontal,\n Receipt,\n ReceiptText,\n Scissors,\n ShieldCheck,\n Sparkles,\n TrendingDown,\n TrendingUp,\n X,\n} from 'lucide-react';\nimport {\n usePagedInsights,\n useAllTransactions,\n useAllAccounts,\n usePortfolios,\n useHoldings,\n useCreateInsight,\n useAcknowledgeInsight,\n useDismissInsight,\n useResolveInsight,\n} from '../hooks/useBrainyRichApi';\nimport {\n LoadMore,\n ConfirmDialog,\n DonutChart,\n MiniAreaChart,\n ProgressRing,\n LifecycleStepper,\n StatTile,\n GlassCard,\n FadeIn,\n type DonutDatum,\n type VizTone,\n} from '../components';\nimport type {\n BraAccount,\n BraAssetClass,\n BraHolding,\n BraInsight,\n BraInsightSeverity,\n} from '../types/bra';\nimport {\n SectionShell,\n AllocationBars,\n EmptyState,\n LoadingState,\n ErrorState,\n formatMoney,\n formatDate,\n statusBadgeVariant,\n deltaToneClass,\n} from './_shared';\n\n// ============================================================================\n// Domain helpers (derived from the SDL, never fabricated data)\n// ============================================================================\n\nconst SEVERITIES: BraInsightSeverity[] = ['INFO', 'LOW', 'MEDIUM', 'HIGH', 'CRITICAL'];\n\n/** Turn an UPPER_SNAKE enum member into a readable label. */\nfunction humanize(value: string): string {\n return value\n .toLowerCase()\n .split('_')\n .map((w) => w.charAt(0).toUpperCase() + w.slice(1))\n .join(' ');\n}\n\n/** Unrealized P/L for a holding = server market value − cost basis. */\nfunction unrealized(h: BraHolding): number {\n return h.marketValue - h.costBasis;\n}\n\n/** Severity → semantic viz tone (color is never the only signal). */\nfunction severityTone(sev: BraInsightSeverity): VizTone {\n switch (sev) {\n case 'CRITICAL':\n return 'error';\n case 'HIGH':\n return 'warning';\n case 'MEDIUM':\n return 'info';\n case 'LOW':\n return 'teal';\n default:\n return 'neutral';\n }\n}\n\n/** A real holding sitting at an unrealized loss — a tax-loss-harvest candidate. */\ninterface HarvestCandidate {\n holding: BraHolding;\n accountId: string;\n accountName: string;\n loss: number; // negative\n}\n\n// ============================================================================\n// Page\n// ============================================================================\n\ninterface InsightFormState {\n title: string;\n detail: string;\n severity: BraInsightSeverity;\n /** Encoded as `${subjectType}:${id}` from the subject picker. */\n subject: string;\n}\n\nconst EMPTY_INSIGHT_FORM: InsightFormState = {\n title: '',\n detail: '',\n severity: 'MEDIUM',\n subject: '',\n};\n\nexport function TaxPage() {\n // Insights are a *Connection — paginate with LoadMore. Tax-opportunity\n // insights are client-filtered (the list query has no `type` argument).\n const {\n items: insights,\n hasMore: insightsHasMore,\n loadMore: loadMoreInsights,\n isLoading: insightsLoading,\n isFetchingNextPage: insightsFetchingMore,\n isError: insightsError,\n refetch: refetchInsights,\n } = usePagedInsights();\n\n // Realized activity + income aggregated over the FULL transaction set\n // (not a truncated first page) via the fetch-all helper.\n const {\n data: transactions,\n isLoading: txLoading,\n isError: txError,\n refetch: refetchTransactions,\n } = useAllTransactions();\n\n // ALL accounts (with holdings) — drives the portfolio-wide unrealized total.\n const { data: accounts, isLoading: accountsLoading } = useAllAccounts();\n const { data: portfolios } = usePortfolios();\n\n const createInsight = useCreateInsight();\n const acknowledgeInsight = useAcknowledgeInsight();\n const dismissInsight = useDismissInsight();\n const resolveInsight = useResolveInsight();\n\n const [createOpen, setCreateOpen] = useState(false);\n const [form, setForm] = useState<InsightFormState>(EMPTY_INSIGHT_FORM);\n const [formError, setFormError] = useState<string | null>(null);\n const [dismissTarget, setDismissTarget] = useState<BraInsight | null>(null);\n\n // ---- Tax-opportunity insights (client-filtered — the list hook has no type arg) ----\n const taxInsights = useMemo(\n () => insights.filter((i) => i.type === 'TAX_OPPORTUNITY'),\n [insights]\n );\n const openTax = useMemo(() => taxInsights.filter((i) => i.status === 'OPEN'), [taxInsights]);\n\n // Open-tax severity mix drives the signal donut (real counts, no fabrication).\n const severityMix = useMemo<DonutDatum[]>(() => {\n const order: BraInsightSeverity[] = ['CRITICAL', 'HIGH', 'MEDIUM', 'LOW', 'INFO'];\n return order\n .map((sev) => ({\n label: humanize(sev),\n value: openTax.filter((i) => i.severity === sev).length,\n tone: severityTone(sev),\n }))\n .filter((d) => d.value > 0);\n }, [openTax]);\n\n // ---- Realized activity partitioned from real transactions ----\n const sells = useMemo(() => transactions.filter((t) => t.type === 'SELL'), [transactions]);\n const income = useMemo(\n () => transactions.filter((t) => t.type === 'DIVIDEND' || t.type === 'INTEREST'),\n [transactions]\n );\n const realizedProceeds = sells.reduce((sum, t) => sum + t.amount, 0);\n const investmentIncome = income.reduce((sum, t) => sum + t.amount, 0);\n const moneyCurrency = sells[0]?.currency ?? income[0]?.currency ?? 'USD';\n\n // Cumulative realized-proceeds series over trade dates (spark + area chart).\n const proceedsSeries = useMemo(() => {\n const sorted = [...sells].sort(\n (a, b) => new Date(a.tradeDate).getTime() - new Date(b.tradeDate).getTime()\n );\n return sorted.reduce<{ x: string; y: number }[]>((acc, t) => {\n const prev = acc.length > 0 ? acc[acc.length - 1].y : 0;\n acc.push({ x: formatDate(t.tradeDate), y: prev + t.amount });\n return acc;\n }, []);\n }, [sells]);\n const proceedsSpark = proceedsSeries.map((p) => p.y);\n\n // ---- Portfolio-wide unrealized P/L across EVERY account's holdings ----\n const totalUnrealizedAll = useMemo(\n () => accounts.reduce((sum, a) => sum + a.holdings.reduce((s, h) => s + unrealized(h), 0), 0),\n [accounts]\n );\n const unrealizedCurrency = accounts[0]?.currency ?? moneyCurrency;\n\n // ---- Tax-loss-harvest candidates: every holding at an unrealized loss ----\n const harvestCandidates = useMemo<HarvestCandidate[]>(\n () =>\n accounts\n .flatMap((a) =>\n a.holdings\n .filter((h) => unrealized(h) < 0)\n .map((h) => ({\n holding: h,\n accountId: a.id,\n accountName: a.name,\n loss: unrealized(h),\n }))\n )\n .sort((a, b) => a.loss - b.loss),\n [accounts]\n );\n const harvestableLoss = harvestCandidates.reduce((sum, c) => sum + c.loss, 0);\n const harvestCurrency = harvestCandidates[0]?.holding.currency ?? unrealizedCurrency;\n\n const canCreate = accounts.length > 0 || portfolios.length > 0;\n\n function openCreate() {\n setForm(EMPTY_INSIGHT_FORM);\n setFormError(null);\n setCreateOpen(true);\n }\n\n /** Flag a rebalance/harvest proposal against the candidate's real account. */\n function startProposal(c: HarvestCandidate) {\n setForm({\n title: `Harvest ${c.holding.symbol} loss`,\n detail: `Tax-loss-harvest candidate: ${c.holding.symbol} is sitting at an unrealized loss of ${formatMoney(\n c.loss,\n c.holding.currency\n )}. Create a rebalance proposal to realize the loss while holding the target allocation.`,\n severity: 'MEDIUM',\n subject: `account:${c.accountId}`,\n });\n setFormError(null);\n setCreateOpen(true);\n }\n\n function submitCreate() {\n const title = form.title.trim();\n if (!title) {\n setFormError('A title is required.');\n return;\n }\n if (!form.subject) {\n setFormError('Select the account or portfolio this opportunity applies to.');\n return;\n }\n const [subjectType, subjectId] = form.subject.split(':');\n if (!subjectType || !subjectId) {\n setFormError('Select a valid subject.');\n return;\n }\n createInsight.mutate(\n {\n type: 'TAX_OPPORTUNITY',\n severity: form.severity,\n title,\n detail: form.detail.trim() || null,\n subjectId,\n subjectType,\n },\n {\n onSuccess: () => {\n setCreateOpen(false);\n setForm(EMPTY_INSIGHT_FORM);\n },\n onError: (err: unknown) => {\n setFormError(err instanceof Error ? err.message : 'Could not create the tax insight.');\n },\n }\n );\n }\n\n const insightPending =\n acknowledgeInsight.isPending || dismissInsight.isPending || resolveInsight.isPending;\n\n return (\n <SectionShell\n title=\"Tax Center\"\n description=\"Act on tax-opportunity insights and review unrealized and realized gains — all from your live portfolio data.\"\n badges={[`${openTax.length} open opportunit${openTax.length === 1 ? 'y' : 'ies'}`]}\n actionLabel=\"New tax insight\"\n onAction={openCreate}\n >\n {/* ---------------- Premium KPI band ---------------- */}\n <FadeIn>\n <div className=\"grid grid-cols-1 gap-4 sm:grid-cols-2 lg:grid-cols-3 xl:grid-cols-5\">\n <StatTile\n label=\"Open opportunities\"\n value={String(openTax.length)}\n icon={<Sparkles className=\"size-4\" aria-hidden=\"true\" />}\n glow\n />\n <StatTile\n label=\"Realized proceeds\"\n value={formatMoney(realizedProceeds, moneyCurrency)}\n icon={<Landmark className=\"size-4\" aria-hidden=\"true\" />}\n spark={proceedsSpark.length > 1 ? proceedsSpark : undefined}\n sparkTone=\"brand\"\n />\n <StatTile\n label=\"Investment income\"\n value={formatMoney(investmentIncome, moneyCurrency)}\n icon={<Coins className=\"size-4\" aria-hidden=\"true\" />}\n />\n <StatTile\n label=\"Harvestable loss\"\n value={accountsLoading ? '—' : formatMoney(harvestableLoss, harvestCurrency)}\n icon={<Scissors className=\"size-4\" aria-hidden=\"true\" />}\n />\n <StatTile\n label=\"Unrealized P/L\"\n value={accountsLoading ? '—' : formatMoney(totalUnrealizedAll, unrealizedCurrency)}\n deltaTone={totalUnrealizedAll >= 0 ? 'positive' : 'negative'}\n icon={\n totalUnrealizedAll >= 0 ? (\n <TrendingUp className=\"size-4\" aria-hidden=\"true\" />\n ) : (\n <TrendingDown className=\"size-4\" aria-hidden=\"true\" />\n )\n }\n />\n </div>\n </FadeIn>\n\n <Tabs defaultValue=\"opportunities\" className=\"space-y-4\">\n <TabsList className=\"grid w-full grid-cols-2 sm:grid-cols-4\">\n <TabsTrigger value=\"opportunities\">Opportunities</TabsTrigger>\n <TabsTrigger value=\"harvest\">Harvest</TabsTrigger>\n <TabsTrigger value=\"unrealized\">Unrealized</TabsTrigger>\n <TabsTrigger value=\"realized\">Realized</TabsTrigger>\n </TabsList>\n\n {/* ---------------- Tax opportunities ---------------- */}\n <TabsContent value=\"opportunities\">\n <div className=\"grid gap-4 lg:grid-cols-3\">\n <Card className=\"lg:col-span-2\">\n <CardHeader>\n <CardTitle className=\"flex items-center gap-2\">\n <Sparkles className=\"h-5 w-5\" aria-hidden=\"true\" />\n Tax-opportunity insights\n </CardTitle>\n <CardDescription>\n Tax-loss harvesting and other tax signals detected across your accounts and\n portfolios.\n </CardDescription>\n </CardHeader>\n <CardContent>\n {insightsLoading ? (\n <LoadingState />\n ) : insightsError ? (\n <ErrorState onRetry={() => refetchInsights()} />\n ) : taxInsights.length === 0 ? (\n <EmptyState\n icon={<Receipt className=\"size-6\" aria-hidden=\"true\" />}\n title=\"No tax opportunities yet\"\n description=\"Tax-opportunity insights appear here as the backend generates them from your holdings. You can also flag one manually.\"\n action={\n canCreate ? (\n <Button size=\"sm\" onClick={openCreate}>\n <Sparkles className=\"size-4\" aria-hidden=\"true\" />\n New tax insight\n </Button>\n ) : undefined\n }\n />\n ) : (\n <div className=\"space-y-3\">\n {taxInsights.map((insight, i) => (\n <FadeIn key={insight.id} index={i}>\n <TaxInsightRow\n insight={insight}\n actionPending={insightPending}\n onAcknowledge={() => acknowledgeInsight.mutate(insight.id)}\n onResolve={() => resolveInsight.mutate(insight.id)}\n onDismiss={() => setDismissTarget(insight)}\n />\n </FadeIn>\n ))}\n <LoadMore\n hasMore={insightsHasMore}\n onClick={loadMoreInsights}\n loading={insightsFetchingMore}\n label=\"Load more insights\"\n />\n </div>\n )}\n </CardContent>\n </Card>\n\n {/* Signal mix + TLH lifecycle */}\n <div className=\"space-y-4\">\n <GlassCard glow>\n <div className=\"space-y-1\">\n <p className=\"text-sm font-semibold text-text-primary\">Open-signal mix</p>\n <p className=\"text-xs text-text-secondary\">\n Live tax opportunities grouped by severity.\n </p>\n </div>\n <div className=\"mt-4\">\n {severityMix.length === 0 ? (\n <p className=\"py-6 text-center text-sm text-text-secondary\">\n No open opportunities.\n </p>\n ) : (\n <DonutChart\n data={severityMix}\n centerValue={String(openTax.length)}\n centerLabel=\"open\"\n valueFormatter={(v) => `${v} signal${v === 1 ? '' : 's'}`}\n />\n )}\n </div>\n </GlassCard>\n\n <GlassCard>\n <p className=\"text-sm font-semibold text-text-primary\">Harvesting workflow</p>\n <p className=\"mb-4 mt-1 text-xs text-text-secondary\">\n How a loss becomes a realized tax benefit.\n </p>\n <LifecycleStepper\n steps={['Detect', 'Review', 'Proposal', 'Execute']}\n current=\"Review\"\n />\n </GlassCard>\n </div>\n </div>\n </TabsContent>\n\n {/* ---------------- Harvest candidates ---------------- */}\n <TabsContent value=\"harvest\">\n <HarvestCandidatesTab\n candidates={harvestCandidates}\n harvestableLoss={harvestableLoss}\n currency={harvestCurrency}\n loading={accountsLoading}\n canCreate={canCreate}\n onCreateProposal={startProposal}\n />\n </TabsContent>\n\n {/* ---------------- Unrealized gains ---------------- */}\n <TabsContent value=\"unrealized\">\n <UnrealizedGainsTab accounts={accounts} />\n </TabsContent>\n\n {/* ---------------- Realized activity ---------------- */}\n <TabsContent value=\"realized\">\n <Card>\n <CardHeader>\n <CardTitle className=\"flex items-center gap-2\">\n <ReceiptText className=\"h-5 w-5\" aria-hidden=\"true\" />\n Realized activity\n </CardTitle>\n <CardDescription>\n Realized sales, dividends and interest — the taxable events recorded on your\n accounts.\n </CardDescription>\n </CardHeader>\n <CardContent className=\"space-y-6\">\n {txLoading ? (\n <LoadingState />\n ) : txError ? (\n <ErrorState onRetry={() => refetchTransactions()} />\n ) : sells.length === 0 && income.length === 0 ? (\n <EmptyState\n icon={<ReceiptText className=\"size-6\" aria-hidden=\"true\" />}\n title=\"No taxable activity recorded\"\n description=\"Sales, dividends and interest show up here once transactions are recorded against your accounts.\"\n />\n ) : (\n <>\n {proceedsSeries.length > 1 ? (\n <div className=\"rounded-xl border border-border-subtle bg-bg-surface p-4\">\n <p className=\"text-sm font-semibold text-text-primary\">\n Cumulative realized proceeds\n </p>\n <p className=\"mb-3 text-xs text-text-secondary\">\n Running total of sale proceeds over trade dates.\n </p>\n <MiniAreaChart\n data={proceedsSeries}\n tone=\"brand\"\n valueFormatter={(v) => formatMoney(v, moneyCurrency)}\n />\n </div>\n ) : null}\n\n {/* Realized sales */}\n <div className=\"space-y-2\">\n <div className=\"flex items-center gap-2\">\n <Landmark className=\"size-4 text-text-secondary\" aria-hidden=\"true\" />\n <h3 className=\"text-sm font-semibold text-text-primary\">Realized sales</h3>\n <Badge variant=\"secondary\">{sells.length}</Badge>\n </div>\n {sells.length === 0 ? (\n <p className=\"text-sm text-text-secondary\">No sales recorded.</p>\n ) : (\n <div className=\"overflow-x-auto\">\n <Table>\n <TableHeader>\n <TableRow>\n <TableHead>Symbol</TableHead>\n <TableHead className=\"text-right\">Quantity</TableHead>\n <TableHead className=\"text-right\">Price</TableHead>\n <TableHead className=\"text-right\">Proceeds</TableHead>\n <TableHead>Trade date</TableHead>\n </TableRow>\n </TableHeader>\n <TableBody>\n {sells.map((t) => (\n <TableRow key={t.id}>\n <TableCell className=\"font-medium text-text-primary\">\n {t.symbol ?? '—'}\n </TableCell>\n <TableCell className=\"text-right text-text-secondary\">\n {t.quantity}\n </TableCell>\n <TableCell className=\"text-right text-text-secondary\">\n {formatMoney(t.price, t.currency)}\n </TableCell>\n <TableCell className=\"text-right font-medium text-text-primary\">\n {formatMoney(t.amount, t.currency)}\n </TableCell>\n <TableCell className=\"text-text-secondary\">\n {formatDate(t.tradeDate)}\n </TableCell>\n </TableRow>\n ))}\n </TableBody>\n </Table>\n </div>\n )}\n </div>\n\n {/* Investment income */}\n <div className=\"space-y-2\">\n <div className=\"flex items-center gap-2\">\n <Coins className=\"size-4 text-text-secondary\" aria-hidden=\"true\" />\n <h3 className=\"text-sm font-semibold text-text-primary\">\n Dividends &amp; interest\n </h3>\n <Badge variant=\"secondary\">{income.length}</Badge>\n </div>\n {income.length === 0 ? (\n <p className=\"text-sm text-text-secondary\">No income recorded.</p>\n ) : (\n <div className=\"overflow-x-auto\">\n <Table>\n <TableHeader>\n <TableRow>\n <TableHead>Type</TableHead>\n <TableHead>Symbol</TableHead>\n <TableHead className=\"text-right\">Amount</TableHead>\n <TableHead>Trade date</TableHead>\n </TableRow>\n </TableHeader>\n <TableBody>\n {income.map((t) => (\n <TableRow key={t.id}>\n <TableCell>\n <Badge variant=\"outline\">{humanize(t.type)}</Badge>\n </TableCell>\n <TableCell className=\"text-text-secondary\">\n {t.symbol ?? '—'}\n </TableCell>\n <TableCell className=\"text-right font-medium text-status-success-text\">\n {formatMoney(t.amount, t.currency)}\n </TableCell>\n <TableCell className=\"text-text-secondary\">\n {formatDate(t.tradeDate)}\n </TableCell>\n </TableRow>\n ))}\n </TableBody>\n </Table>\n </div>\n )}\n </div>\n </>\n )}\n </CardContent>\n </Card>\n </TabsContent>\n </Tabs>\n\n {/* ---------------- Create tax insight dialog ---------------- */}\n <Dialog\n open={createOpen}\n onOpenChange={(open) => {\n setCreateOpen(open);\n if (!open) setFormError(null);\n }}\n >\n <DialogContent className=\"max-h-[90vh] overflow-y-auto sm:max-w-lg\">\n <DialogHeader>\n <DialogTitle>New tax insight</DialogTitle>\n <DialogDescription>\n Flag a tax opportunity against one of your accounts or portfolios.\n </DialogDescription>\n </DialogHeader>\n\n {!canCreate ? (\n <EmptyState\n title=\"No subject available\"\n description=\"Create an account or portfolio first, then flag a tax opportunity against it.\"\n />\n ) : (\n <div className=\"space-y-4 py-2\">\n <div className=\"space-y-2\">\n <Label htmlFor=\"tax-title\">Title</Label>\n <Input\n id=\"tax-title\"\n value={form.title}\n onChange={(e) => setForm((f) => ({ ...f, title: e.target.value }))}\n placeholder=\"e.g. Harvest losses in tech holdings\"\n />\n </div>\n\n <div className=\"grid gap-4 sm:grid-cols-2\">\n <div className=\"space-y-2\">\n <Label htmlFor=\"tax-severity\">Severity</Label>\n <Select\n value={form.severity}\n onValueChange={(v) =>\n setForm((f) => ({ ...f, severity: v as BraInsightSeverity }))\n }\n >\n <SelectTrigger id=\"tax-severity\">\n <SelectValue />\n </SelectTrigger>\n <SelectContent>\n {SEVERITIES.map((s) => (\n <SelectItem key={s} value={s}>\n {humanize(s)}\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n </div>\n <div className=\"space-y-2\">\n <Label htmlFor=\"tax-subject\">Applies to</Label>\n <Select\n value={form.subject}\n onValueChange={(v) => setForm((f) => ({ ...f, subject: v }))}\n >\n <SelectTrigger id=\"tax-subject\">\n <SelectValue placeholder=\"Select subject\" />\n </SelectTrigger>\n <SelectContent>\n {portfolios.map((p) => (\n <SelectItem key={`portfolio:${p.id}`} value={`portfolio:${p.id}`}>\n Portfolio · {p.name}\n </SelectItem>\n ))}\n {accounts.map((a) => (\n <SelectItem key={`account:${a.id}`} value={`account:${a.id}`}>\n Account · {a.name}\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n </div>\n </div>\n\n <div className=\"space-y-2\">\n <Label htmlFor=\"tax-detail\">Detail</Label>\n <Textarea\n id=\"tax-detail\"\n value={form.detail}\n onChange={(e) => setForm((f) => ({ ...f, detail: e.target.value }))}\n rows={3}\n placeholder=\"What is the opportunity and how should it be actioned?\"\n />\n </div>\n\n {formError ? (\n <p className=\"text-sm text-status-error-text\" role=\"alert\">\n {formError}\n </p>\n ) : null}\n </div>\n )}\n\n <DialogFooter>\n <DialogClose asChild>\n <Button variant=\"outline\" disabled={createInsight.isPending}>\n Cancel\n </Button>\n </DialogClose>\n <Button\n onClick={submitCreate}\n disabled={\n !canCreate || !form.title.trim() || !form.subject || createInsight.isPending\n }\n >\n {createInsight.isPending ? 'Creating…' : 'Create insight'}\n </Button>\n </DialogFooter>\n </DialogContent>\n </Dialog>\n\n {/* ---------------- Dismiss confirmation ---------------- */}\n <ConfirmDialog\n open={Boolean(dismissTarget)}\n onOpenChange={(open) => {\n if (!open) setDismissTarget(null);\n }}\n title=\"Dismiss tax insight?\"\n description={\n dismissTarget ? (\n <>\n &ldquo;{dismissTarget.title}&rdquo; will be marked as dismissed and removed from your\n open opportunities. This does not delete the underlying holdings or transactions.\n </>\n ) : undefined\n }\n confirmLabel=\"Dismiss insight\"\n pendingLabel=\"Dismissing…\"\n destructive\n pending={dismissInsight.isPending}\n onConfirm={() => {\n if (!dismissTarget) return;\n dismissInsight.mutate(dismissTarget.id, {\n onSuccess: () => setDismissTarget(null),\n });\n }}\n />\n </SectionShell>\n );\n}\n\n// ============================================================================\n// Harvest candidates tab — real holdings at an unrealized loss (TLH)\n// ============================================================================\n\nfunction HarvestCandidatesTab({\n candidates,\n harvestableLoss,\n currency,\n loading,\n canCreate,\n onCreateProposal,\n}: {\n candidates: HarvestCandidate[];\n harvestableLoss: number;\n currency: string;\n loading: boolean;\n canCreate: boolean;\n onCreateProposal: (c: HarvestCandidate) => void;\n}) {\n // Each candidate's share of the total harvestable loss (real proportion).\n const contributors = useMemo(\n () =>\n candidates.slice(0, 6).map((c) => ({\n label: c.holding.symbol,\n value: harvestableLoss === 0 ? 0 : (c.loss / harvestableLoss) * 100,\n tone: 'negative' as const,\n caption: formatMoney(c.loss, c.holding.currency),\n })),\n [candidates, harvestableLoss]\n );\n\n if (loading) {\n return (\n <Card>\n <CardContent className=\"pt-6\">\n <LoadingState />\n </CardContent>\n </Card>\n );\n }\n\n return (\n <div className=\"grid gap-4 lg:grid-cols-3\">\n <Card className=\"lg:col-span-2\">\n <CardHeader>\n <CardTitle className=\"flex items-center gap-2\">\n <Scissors className=\"h-5 w-5\" aria-hidden=\"true\" />\n Harvest candidates\n </CardTitle>\n <CardDescription>\n Holdings sitting at an unrealized loss — sell to realize the loss and offset gains.\n </CardDescription>\n </CardHeader>\n <CardContent className=\"space-y-4\">\n {candidates.length === 0 ? (\n <EmptyState\n icon={<Scissors className=\"size-6\" aria-hidden=\"true\" />}\n title=\"No harvest candidates\"\n description=\"Every holding is currently at or above its cost basis — there is nothing to harvest right now.\"\n />\n ) : (\n <>\n {contributors.length > 0 ? (\n <div className=\"rounded-xl border border-border-subtle bg-bg-surface p-4\">\n <p className=\"mb-3 text-xs font-medium uppercase tracking-wide text-text-secondary\">\n Loss by holding\n </p>\n <AllocationBars data={contributors} />\n </div>\n ) : null}\n\n <div className=\"overflow-x-auto\">\n <Table>\n <TableHeader>\n <TableRow>\n <TableHead>Symbol</TableHead>\n <TableHead>Account</TableHead>\n <TableHead className=\"text-right\">Qty</TableHead>\n <TableHead className=\"text-right\">Market value</TableHead>\n <TableHead className=\"text-right\">Unrealized loss</TableHead>\n <TableHead className=\"text-right\">Action</TableHead>\n </TableRow>\n </TableHeader>\n <TableBody>\n {candidates.map((c) => (\n <TableRow key={c.holding.id}>\n <TableCell>\n <p className=\"font-medium text-text-primary\">{c.holding.symbol}</p>\n {c.holding.name ? (\n <p className=\"text-xs text-text-secondary\">{c.holding.name}</p>\n ) : null}\n </TableCell>\n <TableCell className=\"text-text-secondary\">{c.accountName}</TableCell>\n <TableCell className=\"text-right text-text-secondary\">\n {c.holding.quantity}\n </TableCell>\n <TableCell className=\"text-right text-text-primary\">\n {formatMoney(c.holding.marketValue, c.holding.currency)}\n </TableCell>\n <TableCell className=\"text-right\">\n <GainLoss value={c.loss} currency={c.holding.currency} />\n </TableCell>\n <TableCell className=\"text-right\">\n <Button\n variant=\"ghost\"\n size=\"sm\"\n disabled={!canCreate}\n onClick={() => onCreateProposal(c)}\n >\n Create proposal\n </Button>\n </TableCell>\n </TableRow>\n ))}\n </TableBody>\n </Table>\n </div>\n </>\n )}\n </CardContent>\n </Card>\n\n {/* Harvestable-loss hero + proposal CTA */}\n <div className=\"space-y-4\">\n <GlassCard glow>\n <p className=\"text-xs font-medium uppercase tracking-wide text-text-secondary\">\n Estimated harvestable loss\n </p>\n <p className=\"mt-1 text-3xl font-semibold text-status-error-text\">\n {formatMoney(harvestableLoss, currency)}\n </p>\n <p className=\"mt-1 text-xs text-text-secondary\">\n Across {candidates.length} holding{candidates.length === 1 ? '' : 's'} below cost basis.\n </p>\n <div className=\"mt-4\">\n <Button\n className=\"w-full\"\n disabled={!canCreate || candidates.length === 0}\n onClick={() => {\n if (candidates[0]) onCreateProposal(candidates[0]);\n }}\n >\n <Scissors className=\"size-4\" aria-hidden=\"true\" />\n Create rebalance proposal\n </Button>\n </div>\n </GlassCard>\n\n <GlassCard>\n <p className=\"text-sm font-semibold text-text-primary\">Suggested workflow</p>\n <p className=\"mb-4 mt-1 text-xs text-text-secondary\">\n Realize losses while holding your target allocation. Confirm wash-sale windows before\n executing.\n </p>\n <LifecycleStepper\n steps={['Detect', 'Review', 'Proposal', 'Execute']}\n current=\"Proposal\"\n />\n </GlassCard>\n </div>\n </div>\n );\n}\n\n// ============================================================================\n// Unrealized gains tab — per-account holdings P/L (real market value − cost basis)\n// ============================================================================\n\nfunction UnrealizedGainsTab({ accounts }: { accounts: BraAccount[] }) {\n const [accountId, setAccountId] = useState<string>('');\n const selectedId = accountId || accounts[0]?.id;\n const selectedAccount = accounts.find((a) => a.id === selectedId);\n\n const { data: holdings, isLoading, isError, refetch } = useHoldings({ accountId: selectedId });\n\n const currency = selectedAccount?.currency ?? holdings[0]?.currency ?? 'USD';\n\n const totalUnrealized = holdings.reduce((sum, h) => sum + unrealized(h), 0);\n const gainers = holdings.filter((h) => unrealized(h) > 0).length;\n const losers = holdings.filter((h) => unrealized(h) < 0).length;\n\n // Group holdings by asset class with subtotals (grouped, colored by gain/loss).\n const groups = useMemo(() => {\n const map = new Map<BraAssetClass, BraHolding[]>();\n for (const h of holdings) {\n const arr = map.get(h.assetClass) ?? [];\n arr.push(h);\n map.set(h.assetClass, arr);\n }\n return Array.from(map.entries());\n }, [holdings]);\n\n // Market-value allocation by asset class for the donut (real values).\n const allocation = useMemo<DonutDatum[]>(\n () =>\n groups\n .map(([assetClass, rows]) => ({\n label: humanize(assetClass),\n value: rows.reduce((sum, h) => sum + h.marketValue, 0),\n }))\n .filter((d) => d.value > 0),\n [groups]\n );\n const totalMarketValue = allocation.reduce((sum, d) => sum + d.value, 0);\n\n if (accounts.length === 0) {\n return (\n <Card>\n <CardContent className=\"pt-6\">\n <EmptyState\n icon={<TrendingUp className=\"size-6\" aria-hidden=\"true\" />}\n title=\"No accounts yet\"\n description=\"Add an account with holdings to see unrealized gains and losses.\"\n />\n </CardContent>\n </Card>\n );\n }\n\n return (\n <Card>\n <CardHeader className=\"flex flex-col gap-4 md:flex-row md:items-start md:justify-between\">\n <div>\n <CardTitle className=\"flex items-center gap-2\">\n <TrendingUp className=\"h-5 w-5\" aria-hidden=\"true\" />\n Unrealized gains &amp; losses\n </CardTitle>\n <CardDescription>\n Market value minus cost basis for each holding in the selected account.\n </CardDescription>\n </div>\n <div className=\"w-full md:w-64\">\n <Label htmlFor=\"unrealized-account\" className=\"sr-only\">\n Account\n </Label>\n <Select value={selectedId ?? ''} onValueChange={setAccountId}>\n <SelectTrigger id=\"unrealized-account\">\n <SelectValue placeholder=\"Select account\" />\n </SelectTrigger>\n <SelectContent>\n {accounts.map((a) => (\n <SelectItem key={a.id} value={a.id}>\n {a.name}\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n </div>\n </CardHeader>\n <CardContent className=\"space-y-4\">\n {isLoading ? (\n <LoadingState />\n ) : isError ? (\n <ErrorState onRetry={() => refetch()} />\n ) : holdings.length === 0 ? (\n <EmptyState\n icon={<TrendingUp className=\"size-6\" aria-hidden=\"true\" />}\n title=\"No holdings in this account\"\n description=\"Unrealized gains appear once this account has holdings with a cost basis.\"\n />\n ) : (\n <>\n <div className=\"grid gap-4 lg:grid-cols-3\">\n <div className=\"grid grid-cols-2 gap-3 lg:col-span-2\">\n <StatTile\n label=\"Unrealized P/L\"\n value={formatMoney(totalUnrealized, currency)}\n deltaTone={totalUnrealized >= 0 ? 'positive' : 'negative'}\n icon={\n totalUnrealized >= 0 ? (\n <TrendingUp className=\"size-4\" aria-hidden=\"true\" />\n ) : (\n <TrendingDown className=\"size-4\" aria-hidden=\"true\" />\n )\n }\n />\n <StatTile label=\"Holdings\" value={String(holdings.length)} />\n <StatTile\n label=\"Gainers\"\n value={String(gainers)}\n icon={<ArrowUpRight className=\"size-4\" aria-hidden=\"true\" />}\n />\n <StatTile\n label=\"Losers\"\n value={String(losers)}\n icon={<ArrowDownRight className=\"size-4\" aria-hidden=\"true\" />}\n />\n </div>\n <div className=\"rounded-xl border border-border-subtle bg-bg-surface p-4\">\n <p className=\"mb-2 text-xs font-medium uppercase tracking-wide text-text-secondary\">\n Allocation by asset class\n </p>\n <DonutChart\n data={allocation}\n legend={false}\n height={180}\n centerValue={formatMoney(totalMarketValue, currency)}\n centerLabel=\"market value\"\n valueFormatter={(v) => formatMoney(v, currency)}\n />\n </div>\n </div>\n\n <div className=\"space-y-6\">\n {groups.map(([assetClass, rows]) => {\n const groupTotal = rows.reduce((sum, h) => sum + unrealized(h), 0);\n return (\n <div key={assetClass} className=\"space-y-2\">\n <div className=\"flex items-center justify-between\">\n <div className=\"flex items-center gap-2\">\n <h3 className=\"text-sm font-semibold text-text-primary\">\n {humanize(assetClass)}\n </h3>\n <Badge variant=\"secondary\">{rows.length}</Badge>\n </div>\n <GainLoss value={groupTotal} currency={currency} />\n </div>\n <div className=\"overflow-x-auto\">\n <Table>\n <TableHeader>\n <TableRow>\n <TableHead>Symbol</TableHead>\n <TableHead className=\"text-right\">Quantity</TableHead>\n <TableHead className=\"text-right\">Cost basis</TableHead>\n <TableHead className=\"text-right\">Market value</TableHead>\n <TableHead className=\"text-right\">Unrealized</TableHead>\n </TableRow>\n </TableHeader>\n <TableBody>\n {rows.map((h) => (\n <TableRow key={h.id}>\n <TableCell>\n <p className=\"font-medium text-text-primary\">{h.symbol}</p>\n {h.name ? (\n <p className=\"text-xs text-text-secondary\">{h.name}</p>\n ) : null}\n </TableCell>\n <TableCell className=\"text-right text-text-secondary\">\n {h.quantity}\n </TableCell>\n <TableCell className=\"text-right text-text-secondary\">\n {formatMoney(h.costBasis, h.currency)}\n </TableCell>\n <TableCell className=\"text-right text-text-primary\">\n {formatMoney(h.marketValue, h.currency)}\n </TableCell>\n <TableCell className=\"text-right\">\n <GainLoss value={unrealized(h)} currency={h.currency} />\n </TableCell>\n </TableRow>\n ))}\n </TableBody>\n </Table>\n </div>\n </div>\n );\n })}\n </div>\n </>\n )}\n </CardContent>\n </Card>\n );\n}\n\n/** Signed money with an arrow icon + semantic color (color is never the only signal). */\nfunction GainLoss({ value, currency }: { value: number; currency: string }) {\n const positive = value > 0;\n const negative = value < 0;\n const Icon = positive ? ArrowUpRight : negative ? ArrowDownRight : TrendingDown;\n const sign = positive ? '+' : '';\n return (\n <span\n className={`inline-flex items-center justify-end gap-1 font-semibold ${deltaToneClass(value)}`}\n >\n {value !== 0 ? <Icon className=\"size-4\" aria-hidden=\"true\" /> : null}\n {sign}\n {formatMoney(value, currency)}\n </span>\n );\n}\n\n// ============================================================================\n// Tax-insight row (acknowledge / resolve / dismiss)\n// ============================================================================\n\nfunction TaxInsightRow({\n insight,\n actionPending,\n onAcknowledge,\n onResolve,\n onDismiss,\n}: {\n insight: BraInsight;\n actionPending: boolean;\n onAcknowledge: () => void;\n onResolve: () => void;\n onDismiss: () => void;\n}) {\n const terminal = insight.status === 'RESOLVED' || insight.status === 'DISMISSED';\n return (\n <div className=\"flex items-start justify-between gap-4 rounded-lg border border-border-subtle bg-bg-surface p-4 transition-shadow motion-safe:hover:shadow-[var(--shadow-pop-hover,var(--shadow-elevation-2))]\">\n <div className=\"min-w-0 space-y-1\">\n <div className=\"flex flex-wrap items-center gap-2\">\n <p className=\"font-medium text-text-primary\">{insight.title}</p>\n <Badge variant={statusBadgeVariant(insight.severity)}>{humanize(insight.severity)}</Badge>\n <Badge variant={statusBadgeVariant(insight.status)}>{humanize(insight.status)}</Badge>\n </div>\n {insight.detail ? <p className=\"text-sm text-text-secondary\">{insight.detail}</p> : null}\n <p className=\"text-xs text-text-muted\">\n {humanize(insight.subjectType)} · Detected {formatDate(insight.createdAt)}\n </p>\n </div>\n {terminal ? (\n <span className=\"mt-1 text-xs text-text-muted\">Closed</span>\n ) : (\n <DropdownMenu>\n <DropdownMenuTrigger asChild>\n <Button\n variant=\"ghost\"\n size=\"sm\"\n aria-label={`Actions for ${insight.title}`}\n disabled={actionPending}\n >\n <MoreHorizontal className=\"size-4\" aria-hidden=\"true\" />\n </Button>\n </DropdownMenuTrigger>\n <DropdownMenuContent align=\"end\">\n <DropdownMenuLabel>Actions</DropdownMenuLabel>\n <DropdownMenuSeparator />\n {insight.status === 'OPEN' ? (\n <DropdownMenuItem onClick={onAcknowledge}>\n <Check className=\"size-4\" aria-hidden=\"true\" />\n Acknowledge\n </DropdownMenuItem>\n ) : null}\n <DropdownMenuItem onClick={onResolve}>\n <ShieldCheck className=\"size-4\" aria-hidden=\"true\" />\n Resolve\n </DropdownMenuItem>\n <DropdownMenuItem className=\"text-status-error-text\" onClick={onDismiss}>\n <X className=\"size-4\" aria-hidden=\"true\" />\n Dismiss\n </DropdownMenuItem>\n </DropdownMenuContent>\n </DropdownMenu>\n )}\n </div>\n );\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"TaxPage.js","names":[],"sources":["../../../src/brainyrich/pages/TaxPage.tsx"],"sourcesContent":["import { useMemo, useState } from 'react';\nimport {\n Badge,\n Button,\n Card,\n CardContent,\n CardDescription,\n CardHeader,\n CardTitle,\n Dialog,\n DialogClose,\n DialogContent,\n DialogDescription,\n DialogFooter,\n DialogHeader,\n DialogTitle,\n DropdownMenu,\n DropdownMenuContent,\n DropdownMenuItem,\n DropdownMenuLabel,\n DropdownMenuSeparator,\n DropdownMenuTrigger,\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 Tabs,\n TabsContent,\n TabsList,\n TabsTrigger,\n Textarea,\n} from '@burdenoff/fe-libs/ui';\nimport {\n ArrowDownRight,\n ArrowUpRight,\n Check,\n Coins,\n Landmark,\n MoreHorizontal,\n Receipt,\n ReceiptText,\n Scissors,\n ShieldCheck,\n Sparkles,\n TrendingDown,\n TrendingUp,\n X,\n} from 'lucide-react';\nimport {\n usePagedInsights,\n useAllTransactions,\n useAllAccounts,\n usePortfolios,\n useHoldings,\n useCreateInsight,\n useAcknowledgeInsight,\n useDismissInsight,\n useResolveInsight,\n} from '../hooks/useBrainyRichApi';\nimport {\n LoadMore,\n ConfirmDialog,\n DonutChart,\n MiniAreaChart,\n ProgressRing,\n LifecycleStepper,\n StatTile,\n GlassCard,\n FadeIn,\n type DonutDatum,\n type VizTone,\n} from '../components';\nimport type {\n BraAccount,\n BraAssetClass,\n BraHolding,\n BraInsight,\n BraInsightSeverity,\n} from '../types/bra';\nimport {\n SectionShell,\n AllocationBars,\n EmptyState,\n LoadingState,\n ErrorState,\n formatMoney,\n formatDate,\n statusBadgeVariant,\n deltaToneClass,\n} from './_shared';\n\n// ============================================================================\n// Domain helpers (derived from the SDL, never fabricated data)\n// ============================================================================\n\nconst SEVERITIES: BraInsightSeverity[] = ['INFO', 'LOW', 'MEDIUM', 'HIGH', 'CRITICAL'];\n\n/** Turn an UPPER_SNAKE enum member into a readable label. */\nfunction humanize(value: string): string {\n return value\n .toLowerCase()\n .split('_')\n .map((w) => w.charAt(0).toUpperCase() + w.slice(1))\n .join(' ');\n}\n\n/** Unrealized P/L for a holding = server market value − cost basis. */\nfunction unrealized(h: BraHolding): number {\n return h.marketValue - h.costBasis;\n}\n\n/** Severity → semantic viz tone (color is never the only signal). */\nfunction severityTone(sev: BraInsightSeverity): VizTone {\n switch (sev) {\n case 'CRITICAL':\n return 'error';\n case 'HIGH':\n return 'warning';\n case 'MEDIUM':\n return 'info';\n case 'LOW':\n return 'teal';\n default:\n return 'neutral';\n }\n}\n\n/** A real holding sitting at an unrealized loss — a tax-loss-harvest candidate. */\ninterface HarvestCandidate {\n holding: BraHolding;\n accountId: string;\n accountName: string;\n loss: number; // negative\n}\n\n// ============================================================================\n// Page\n// ============================================================================\n\ninterface InsightFormState {\n title: string;\n detail: string;\n severity: BraInsightSeverity;\n /** Encoded as `${subjectType}:${id}` from the subject picker. */\n subject: string;\n}\n\nconst EMPTY_INSIGHT_FORM: InsightFormState = {\n title: '',\n detail: '',\n severity: 'MEDIUM',\n subject: '',\n};\n\nexport function TaxPage() {\n // Insights are a *Connection — paginate with LoadMore. Tax-opportunity\n // insights are client-filtered (the list query has no `type` argument).\n const {\n items: insights,\n hasMore: insightsHasMore,\n loadMore: loadMoreInsights,\n isLoading: insightsLoading,\n isFetchingNextPage: insightsFetchingMore,\n isError: insightsError,\n refetch: refetchInsights,\n } = usePagedInsights();\n\n // Realized activity + income aggregated over the FULL transaction set\n // (not a truncated first page) via the fetch-all helper.\n const {\n data: transactions,\n isLoading: txLoading,\n isError: txError,\n refetch: refetchTransactions,\n } = useAllTransactions();\n\n // ALL accounts (with holdings) — drives the portfolio-wide unrealized total.\n const { data: accounts, isLoading: accountsLoading } = useAllAccounts();\n const { data: portfolios } = usePortfolios();\n\n const createInsight = useCreateInsight();\n const acknowledgeInsight = useAcknowledgeInsight();\n const dismissInsight = useDismissInsight();\n const resolveInsight = useResolveInsight();\n\n const [createOpen, setCreateOpen] = useState(false);\n const [form, setForm] = useState<InsightFormState>(EMPTY_INSIGHT_FORM);\n const [formError, setFormError] = useState<string | null>(null);\n const [dismissTarget, setDismissTarget] = useState<BraInsight | null>(null);\n\n // ---- Tax-opportunity insights (client-filtered — the list hook has no type arg) ----\n const taxInsights = useMemo(\n () => insights.filter((i) => i.type === 'TAX_OPPORTUNITY'),\n [insights]\n );\n const openTax = useMemo(() => taxInsights.filter((i) => i.status === 'OPEN'), [taxInsights]);\n\n // Open-tax severity mix drives the signal donut (real counts, no fabrication).\n const severityMix = useMemo<DonutDatum[]>(() => {\n const order: BraInsightSeverity[] = ['CRITICAL', 'HIGH', 'MEDIUM', 'LOW', 'INFO'];\n return order\n .map((sev) => ({\n label: humanize(sev),\n value: openTax.filter((i) => i.severity === sev).length,\n tone: severityTone(sev),\n }))\n .filter((d) => d.value > 0);\n }, [openTax]);\n\n // ---- Realized activity partitioned from real transactions ----\n const sells = useMemo(() => transactions.filter((t) => t.type === 'SELL'), [transactions]);\n const income = useMemo(\n () => transactions.filter((t) => t.type === 'DIVIDEND' || t.type === 'INTEREST'),\n [transactions]\n );\n const realizedProceeds = sells.reduce((sum, t) => sum + t.amount, 0);\n const investmentIncome = income.reduce((sum, t) => sum + t.amount, 0);\n const moneyCurrency = sells[0]?.currency ?? income[0]?.currency ?? 'USD';\n\n // Cumulative realized-proceeds series over trade dates (spark + area chart).\n const proceedsSeries = useMemo(() => {\n const sorted = [...sells].sort(\n (a, b) => new Date(a.tradeDate).getTime() - new Date(b.tradeDate).getTime()\n );\n return sorted.reduce<{ x: string; y: number }[]>((acc, t) => {\n const prev = acc.length > 0 ? acc[acc.length - 1].y : 0;\n acc.push({ x: formatDate(t.tradeDate), y: prev + t.amount });\n return acc;\n }, []);\n }, [sells]);\n const proceedsSpark = proceedsSeries.map((p) => p.y);\n\n // ---- Portfolio-wide unrealized P/L across EVERY account's holdings ----\n const totalUnrealizedAll = useMemo(\n () => accounts.reduce((sum, a) => sum + a.holdings.reduce((s, h) => s + unrealized(h), 0), 0),\n [accounts]\n );\n const unrealizedCurrency = accounts[0]?.currency ?? moneyCurrency;\n\n // ---- Tax-loss-harvest candidates: every holding at an unrealized loss ----\n const harvestCandidates = useMemo<HarvestCandidate[]>(\n () =>\n accounts\n .flatMap((a) =>\n a.holdings\n .filter((h) => unrealized(h) < 0)\n .map((h) => ({\n holding: h,\n accountId: a.id,\n accountName: a.name,\n loss: unrealized(h),\n }))\n )\n .sort((a, b) => a.loss - b.loss),\n [accounts]\n );\n const harvestableLoss = harvestCandidates.reduce((sum, c) => sum + c.loss, 0);\n const harvestCurrency = harvestCandidates[0]?.holding.currency ?? unrealizedCurrency;\n\n const canCreate = accounts.length > 0 || portfolios.length > 0;\n\n function openCreate() {\n setForm(EMPTY_INSIGHT_FORM);\n setFormError(null);\n setCreateOpen(true);\n }\n\n /** Flag a rebalance/harvest proposal against the candidate's real account. */\n function startProposal(c: HarvestCandidate) {\n setForm({\n title: `Harvest ${c.holding.symbol} loss`,\n detail: `Tax-loss-harvest candidate: ${c.holding.symbol} is sitting at an unrealized loss of ${formatMoney(\n c.loss,\n c.holding.currency\n )}. Create a rebalance proposal to realize the loss while holding the target allocation.`,\n severity: 'MEDIUM',\n subject: `account:${c.accountId}`,\n });\n setFormError(null);\n setCreateOpen(true);\n }\n\n function submitCreate() {\n const title = form.title.trim();\n if (!title) {\n setFormError('A title is required.');\n return;\n }\n if (!form.subject) {\n setFormError('Select the account or portfolio this opportunity applies to.');\n return;\n }\n const [subjectType, subjectId] = form.subject.split(':');\n if (!subjectType || !subjectId) {\n setFormError('Select a valid subject.');\n return;\n }\n createInsight.mutate(\n {\n type: 'TAX_OPPORTUNITY',\n severity: form.severity,\n title,\n detail: form.detail.trim() || null,\n subjectId,\n subjectType,\n },\n {\n onSuccess: () => {\n setCreateOpen(false);\n setForm(EMPTY_INSIGHT_FORM);\n },\n onError: (err: unknown) => {\n setFormError(err instanceof Error ? err.message : 'Could not create the tax insight.');\n },\n }\n );\n }\n\n const insightPending =\n acknowledgeInsight.isPending || dismissInsight.isPending || resolveInsight.isPending;\n\n return (\n <SectionShell\n title=\"Tax Center\"\n description=\"Act on tax-opportunity insights and review unrealized and realized gains — all from your live portfolio data.\"\n badges={[`${openTax.length} open opportunit${openTax.length === 1 ? 'y' : 'ies'}`]}\n actionLabel=\"New tax insight\"\n onAction={openCreate}\n >\n {/* ---------------- Premium KPI band ---------------- */}\n <FadeIn>\n <div className=\"grid grid-cols-1 gap-4 sm:grid-cols-2 lg:grid-cols-3 xl:grid-cols-5\">\n <StatTile\n label=\"Open opportunities\"\n value={String(openTax.length)}\n icon={<Sparkles className=\"size-4\" aria-hidden=\"true\" />}\n glow\n />\n <StatTile\n label=\"Realized proceeds\"\n value={formatMoney(realizedProceeds, moneyCurrency)}\n icon={<Landmark className=\"size-4\" aria-hidden=\"true\" />}\n spark={proceedsSpark.length > 1 ? proceedsSpark : undefined}\n sparkTone=\"brand\"\n />\n <StatTile\n label=\"Investment income\"\n value={formatMoney(investmentIncome, moneyCurrency)}\n icon={<Coins className=\"size-4\" aria-hidden=\"true\" />}\n />\n <StatTile\n label=\"Harvestable loss\"\n value={accountsLoading ? '—' : formatMoney(harvestableLoss, harvestCurrency)}\n icon={<Scissors className=\"size-4\" aria-hidden=\"true\" />}\n />\n <StatTile\n label=\"Unrealized P/L\"\n value={accountsLoading ? '—' : formatMoney(totalUnrealizedAll, unrealizedCurrency)}\n deltaTone={totalUnrealizedAll >= 0 ? 'positive' : 'negative'}\n icon={\n totalUnrealizedAll >= 0 ? (\n <TrendingUp className=\"size-4\" aria-hidden=\"true\" />\n ) : (\n <TrendingDown className=\"size-4\" aria-hidden=\"true\" />\n )\n }\n />\n </div>\n </FadeIn>\n\n <Tabs defaultValue=\"opportunities\" className=\"space-y-4\">\n <TabsList className=\"grid w-full grid-cols-2 sm:grid-cols-4\">\n <TabsTrigger value=\"opportunities\">Opportunities</TabsTrigger>\n <TabsTrigger value=\"harvest\">Harvest</TabsTrigger>\n <TabsTrigger value=\"unrealized\">Unrealized</TabsTrigger>\n <TabsTrigger value=\"realized\">Realized</TabsTrigger>\n </TabsList>\n\n {/* ---------------- Tax opportunities ---------------- */}\n <TabsContent value=\"opportunities\">\n <div className=\"grid gap-4 lg:grid-cols-3\">\n <Card className=\"lg:col-span-2\">\n <CardHeader>\n <CardTitle className=\"flex items-center gap-2\">\n <Sparkles className=\"h-5 w-5\" aria-hidden=\"true\" />\n Tax-opportunity insights\n </CardTitle>\n <CardDescription>\n Tax-loss harvesting and other tax signals detected across your accounts and\n portfolios.\n </CardDescription>\n </CardHeader>\n <CardContent>\n {insightsLoading ? (\n <LoadingState />\n ) : insightsError ? (\n <ErrorState onRetry={() => refetchInsights()} />\n ) : taxInsights.length === 0 ? (\n <EmptyState\n icon={<Receipt className=\"size-6\" aria-hidden=\"true\" />}\n title=\"No tax opportunities yet\"\n description=\"Tax-opportunity insights appear here as the backend generates them from your holdings. You can also flag one manually.\"\n action={\n canCreate ? (\n <Button size=\"sm\" onClick={openCreate}>\n <Sparkles className=\"size-4\" aria-hidden=\"true\" />\n New tax insight\n </Button>\n ) : undefined\n }\n />\n ) : (\n <div className=\"space-y-3\">\n {taxInsights.map((insight, i) => (\n <FadeIn key={insight.id} index={i}>\n <TaxInsightRow\n insight={insight}\n actionPending={insightPending}\n onAcknowledge={() => acknowledgeInsight.mutate(insight.id)}\n onResolve={() => resolveInsight.mutate(insight.id)}\n onDismiss={() => setDismissTarget(insight)}\n />\n </FadeIn>\n ))}\n <LoadMore\n hasMore={insightsHasMore}\n onClick={loadMoreInsights}\n loading={insightsFetchingMore}\n label=\"Load more insights\"\n />\n </div>\n )}\n </CardContent>\n </Card>\n\n {/* Signal mix + TLH lifecycle */}\n <div className=\"space-y-4\">\n <GlassCard glow>\n <div className=\"space-y-1\">\n <p className=\"text-sm font-semibold text-text-primary\">Open-signal mix</p>\n <p className=\"text-xs text-text-secondary\">\n Live tax opportunities grouped by severity.\n </p>\n </div>\n <div className=\"mt-4\">\n {severityMix.length === 0 ? (\n <p className=\"py-6 text-center text-sm text-text-secondary\">\n No open opportunities.\n </p>\n ) : (\n <DonutChart\n data={severityMix}\n centerValue={String(openTax.length)}\n centerLabel=\"open\"\n valueFormatter={(v) => `${v} signal${v === 1 ? '' : 's'}`}\n />\n )}\n </div>\n </GlassCard>\n\n <GlassCard>\n <p className=\"text-sm font-semibold text-text-primary\">Harvesting workflow</p>\n <p className=\"mb-4 mt-1 text-xs text-text-secondary\">\n How a loss becomes a realized tax benefit.\n </p>\n <LifecycleStepper\n steps={['Detect', 'Review', 'Proposal', 'Execute']}\n current=\"Review\"\n />\n </GlassCard>\n </div>\n </div>\n </TabsContent>\n\n {/* ---------------- Harvest candidates ---------------- */}\n <TabsContent value=\"harvest\">\n <HarvestCandidatesTab\n candidates={harvestCandidates}\n harvestableLoss={harvestableLoss}\n currency={harvestCurrency}\n loading={accountsLoading}\n canCreate={canCreate}\n onCreateProposal={startProposal}\n />\n </TabsContent>\n\n {/* ---------------- Unrealized gains ---------------- */}\n <TabsContent value=\"unrealized\">\n <UnrealizedGainsTab accounts={accounts} />\n </TabsContent>\n\n {/* ---------------- Realized activity ---------------- */}\n <TabsContent value=\"realized\">\n <Card>\n <CardHeader>\n <CardTitle className=\"flex items-center gap-2\">\n <ReceiptText className=\"h-5 w-5\" aria-hidden=\"true\" />\n Realized activity\n </CardTitle>\n <CardDescription>\n Realized sales, dividends and interest — the taxable events recorded on your\n accounts.\n </CardDescription>\n </CardHeader>\n <CardContent className=\"space-y-6\">\n {txLoading ? (\n <LoadingState />\n ) : txError ? (\n <ErrorState onRetry={() => refetchTransactions()} />\n ) : sells.length === 0 && income.length === 0 ? (\n <EmptyState\n icon={<ReceiptText className=\"size-6\" aria-hidden=\"true\" />}\n title=\"No taxable activity recorded\"\n description=\"Sales, dividends and interest show up here once transactions are recorded against your accounts.\"\n />\n ) : (\n <>\n {proceedsSeries.length > 1 ? (\n <div className=\"rounded-xl border border-border-subtle bg-bg-surface p-4\">\n <p className=\"text-sm font-semibold text-text-primary\">\n Cumulative realized proceeds\n </p>\n <p className=\"mb-3 text-xs text-text-secondary\">\n Running total of sale proceeds over trade dates.\n </p>\n <MiniAreaChart\n data={proceedsSeries}\n tone=\"brand\"\n valueFormatter={(v) => formatMoney(v, moneyCurrency)}\n />\n </div>\n ) : null}\n\n {/* Realized sales */}\n <div className=\"space-y-2\">\n <div className=\"flex items-center gap-2\">\n <Landmark className=\"size-4 text-text-secondary\" aria-hidden=\"true\" />\n <h3 className=\"text-sm font-semibold text-text-primary\">Realized sales</h3>\n <Badge variant=\"secondary\">{sells.length}</Badge>\n </div>\n {sells.length === 0 ? (\n <p className=\"text-sm text-text-secondary\">No sales recorded.</p>\n ) : (\n <div className=\"overflow-x-auto\">\n <Table>\n <TableHeader>\n <TableRow>\n <TableHead>Symbol</TableHead>\n <TableHead className=\"text-right\">Quantity</TableHead>\n <TableHead className=\"text-right\">Price</TableHead>\n <TableHead className=\"text-right\">Proceeds</TableHead>\n <TableHead>Trade date</TableHead>\n </TableRow>\n </TableHeader>\n <TableBody>\n {sells.map((t) => (\n <TableRow key={t.id}>\n <TableCell className=\"font-medium text-text-primary\">\n {t.symbol ?? '—'}\n </TableCell>\n <TableCell className=\"text-right text-text-secondary\">\n {t.quantity}\n </TableCell>\n <TableCell className=\"text-right text-text-secondary\">\n {formatMoney(t.price, t.currency)}\n </TableCell>\n <TableCell className=\"text-right font-medium text-text-primary\">\n {formatMoney(t.amount, t.currency)}\n </TableCell>\n <TableCell className=\"text-text-secondary\">\n {formatDate(t.tradeDate)}\n </TableCell>\n </TableRow>\n ))}\n </TableBody>\n </Table>\n </div>\n )}\n </div>\n\n {/* Investment income */}\n <div className=\"space-y-2\">\n <div className=\"flex items-center gap-2\">\n <Coins className=\"size-4 text-text-secondary\" aria-hidden=\"true\" />\n <h3 className=\"text-sm font-semibold text-text-primary\">\n Dividends &amp; interest\n </h3>\n <Badge variant=\"secondary\">{income.length}</Badge>\n </div>\n {income.length === 0 ? (\n <p className=\"text-sm text-text-secondary\">No income recorded.</p>\n ) : (\n <div className=\"overflow-x-auto\">\n <Table>\n <TableHeader>\n <TableRow>\n <TableHead>Type</TableHead>\n <TableHead>Symbol</TableHead>\n <TableHead className=\"text-right\">Amount</TableHead>\n <TableHead>Trade date</TableHead>\n </TableRow>\n </TableHeader>\n <TableBody>\n {income.map((t) => (\n <TableRow key={t.id}>\n <TableCell>\n <Badge variant=\"outline\">{humanize(t.type)}</Badge>\n </TableCell>\n <TableCell className=\"text-text-secondary\">\n {t.symbol ?? '—'}\n </TableCell>\n <TableCell className=\"text-right font-medium text-status-success-text\">\n {formatMoney(t.amount, t.currency)}\n </TableCell>\n <TableCell className=\"text-text-secondary\">\n {formatDate(t.tradeDate)}\n </TableCell>\n </TableRow>\n ))}\n </TableBody>\n </Table>\n </div>\n )}\n </div>\n </>\n )}\n </CardContent>\n </Card>\n </TabsContent>\n </Tabs>\n\n {/* ---------------- Create tax insight dialog ---------------- */}\n <Dialog\n open={createOpen}\n onOpenChange={(open) => {\n setCreateOpen(open);\n if (!open) setFormError(null);\n }}\n >\n <DialogContent className=\"max-h-[90vh] overflow-y-auto sm:max-w-lg\">\n <DialogHeader>\n <DialogTitle>New tax insight</DialogTitle>\n <DialogDescription>\n Flag a tax opportunity against one of your accounts or portfolios.\n </DialogDescription>\n </DialogHeader>\n\n {!canCreate ? (\n <EmptyState\n title=\"No subject available\"\n description=\"Create an account or portfolio first, then flag a tax opportunity against it.\"\n />\n ) : (\n <div className=\"space-y-4 py-2\">\n <div className=\"space-y-2\">\n <Label htmlFor=\"tax-title\">Title</Label>\n <Input\n id=\"tax-title\"\n value={form.title}\n onChange={(e) => setForm((f) => ({ ...f, title: e.target.value }))}\n placeholder=\"e.g. Harvest losses in tech holdings\"\n />\n </div>\n\n <div className=\"grid gap-4 sm:grid-cols-2\">\n <div className=\"space-y-2\">\n <Label htmlFor=\"tax-severity\">Severity</Label>\n <Select\n value={form.severity}\n onValueChange={(v) =>\n setForm((f) => ({ ...f, severity: v as BraInsightSeverity }))\n }\n >\n <SelectTrigger id=\"tax-severity\">\n <SelectValue />\n </SelectTrigger>\n <SelectContent>\n {SEVERITIES.map((s) => (\n <SelectItem key={s} value={s}>\n {humanize(s)}\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n </div>\n <div className=\"space-y-2\">\n <Label htmlFor=\"tax-subject\">Applies to</Label>\n <Select\n value={form.subject}\n onValueChange={(v) => setForm((f) => ({ ...f, subject: v }))}\n >\n <SelectTrigger id=\"tax-subject\">\n <SelectValue placeholder=\"Select subject\" />\n </SelectTrigger>\n <SelectContent>\n {portfolios.map((p) => (\n <SelectItem key={`portfolio:${p.id}`} value={`portfolio:${p.id}`}>\n Portfolio · {p.name}\n </SelectItem>\n ))}\n {accounts.map((a) => (\n <SelectItem key={`account:${a.id}`} value={`account:${a.id}`}>\n Account · {a.name}\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n </div>\n </div>\n\n <div className=\"space-y-2\">\n <Label htmlFor=\"tax-detail\">Detail</Label>\n <Textarea\n id=\"tax-detail\"\n value={form.detail}\n onChange={(e) => setForm((f) => ({ ...f, detail: e.target.value }))}\n rows={3}\n placeholder=\"What is the opportunity and how should it be actioned?\"\n />\n </div>\n\n {formError ? (\n <p className=\"text-sm text-status-error-text\" role=\"alert\">\n {formError}\n </p>\n ) : null}\n </div>\n )}\n\n <DialogFooter>\n <DialogClose asChild>\n <Button variant=\"outline\" disabled={createInsight.isPending}>\n Cancel\n </Button>\n </DialogClose>\n <Button\n onClick={submitCreate}\n disabled={\n !canCreate || !form.title.trim() || !form.subject || createInsight.isPending\n }\n >\n {createInsight.isPending ? 'Creating…' : 'Create insight'}\n </Button>\n </DialogFooter>\n </DialogContent>\n </Dialog>\n\n {/* ---------------- Dismiss confirmation ---------------- */}\n <ConfirmDialog\n open={Boolean(dismissTarget)}\n onOpenChange={(open) => {\n if (!open) setDismissTarget(null);\n }}\n title=\"Dismiss tax insight?\"\n description={\n dismissTarget ? (\n <>\n &ldquo;{dismissTarget.title}&rdquo; will be marked as dismissed and removed from your\n open opportunities. This does not delete the underlying holdings or transactions.\n </>\n ) : undefined\n }\n confirmLabel=\"Dismiss insight\"\n pendingLabel=\"Dismissing…\"\n destructive\n pending={dismissInsight.isPending}\n onConfirm={() => {\n if (!dismissTarget) return;\n dismissInsight.mutate(dismissTarget.id, {\n onSuccess: () => setDismissTarget(null),\n });\n }}\n />\n </SectionShell>\n );\n}\n\n// ============================================================================\n// Harvest candidates tab — real holdings at an unrealized loss (TLH)\n// ============================================================================\n\nfunction HarvestCandidatesTab({\n candidates,\n harvestableLoss,\n currency,\n loading,\n canCreate,\n onCreateProposal,\n}: {\n candidates: HarvestCandidate[];\n harvestableLoss: number;\n currency: string;\n loading: boolean;\n canCreate: boolean;\n onCreateProposal: (c: HarvestCandidate) => void;\n}) {\n // Each candidate's share of the total harvestable loss (real proportion).\n const contributors = useMemo(\n () =>\n candidates.slice(0, 6).map((c) => ({\n label: c.holding.symbol,\n value: harvestableLoss === 0 ? 0 : (c.loss / harvestableLoss) * 100,\n tone: 'negative' as const,\n caption: formatMoney(c.loss, c.holding.currency),\n })),\n [candidates, harvestableLoss]\n );\n\n if (loading) {\n return (\n <Card>\n <CardContent className=\"pt-6\">\n <LoadingState />\n </CardContent>\n </Card>\n );\n }\n\n return (\n <div className=\"grid gap-4 lg:grid-cols-3\">\n <Card className=\"lg:col-span-2\">\n <CardHeader>\n <CardTitle className=\"flex items-center gap-2\">\n <Scissors className=\"h-5 w-5\" aria-hidden=\"true\" />\n Harvest candidates\n </CardTitle>\n <CardDescription>\n Holdings sitting at an unrealized loss — sell to realize the loss and offset gains.\n </CardDescription>\n </CardHeader>\n <CardContent className=\"space-y-4\">\n {candidates.length === 0 ? (\n <EmptyState\n icon={<Scissors className=\"size-6\" aria-hidden=\"true\" />}\n title=\"No harvest candidates\"\n description=\"Every holding is currently at or above its cost basis — there is nothing to harvest right now.\"\n />\n ) : (\n <>\n {contributors.length > 0 ? (\n <div className=\"rounded-xl border border-border-subtle bg-bg-surface p-4\">\n <p className=\"mb-3 text-xs font-medium uppercase tracking-wide text-text-secondary\">\n Loss by holding\n </p>\n <AllocationBars data={contributors} />\n </div>\n ) : null}\n\n <div className=\"overflow-x-auto\">\n <Table>\n <TableHeader>\n <TableRow>\n <TableHead>Symbol</TableHead>\n <TableHead>Account</TableHead>\n <TableHead className=\"text-right\">Qty</TableHead>\n <TableHead className=\"text-right\">Market value</TableHead>\n <TableHead className=\"text-right\">Unrealized loss</TableHead>\n <TableHead className=\"text-right\">Action</TableHead>\n </TableRow>\n </TableHeader>\n <TableBody>\n {candidates.map((c) => (\n <TableRow key={c.holding.id}>\n <TableCell>\n <p className=\"font-medium text-text-primary\">{c.holding.symbol}</p>\n {c.holding.name ? (\n <p className=\"text-xs text-text-secondary\">{c.holding.name}</p>\n ) : null}\n </TableCell>\n <TableCell className=\"text-text-secondary\">{c.accountName}</TableCell>\n <TableCell className=\"text-right text-text-secondary\">\n {c.holding.quantity}\n </TableCell>\n <TableCell className=\"text-right text-text-primary\">\n {formatMoney(c.holding.marketValue, c.holding.currency)}\n </TableCell>\n <TableCell className=\"text-right\">\n <GainLoss value={c.loss} currency={c.holding.currency} />\n </TableCell>\n <TableCell className=\"text-right\">\n <Button\n variant=\"ghost\"\n size=\"sm\"\n disabled={!canCreate}\n onClick={() => onCreateProposal(c)}\n >\n Create proposal\n </Button>\n </TableCell>\n </TableRow>\n ))}\n </TableBody>\n </Table>\n </div>\n </>\n )}\n </CardContent>\n </Card>\n\n {/* Harvestable-loss hero + proposal CTA */}\n <div className=\"space-y-4\">\n <GlassCard glow>\n <p className=\"text-xs font-medium uppercase tracking-wide text-text-secondary\">\n Estimated harvestable loss\n </p>\n <p className=\"mt-1 text-3xl font-semibold text-status-error-text\">\n {formatMoney(harvestableLoss, currency)}\n </p>\n <p className=\"mt-1 text-xs text-text-secondary\">\n Across {candidates.length} holding{candidates.length === 1 ? '' : 's'} below cost basis.\n </p>\n <div className=\"mt-4\">\n <Button\n className=\"w-full\"\n disabled={!canCreate || candidates.length === 0}\n onClick={() => {\n if (candidates[0]) onCreateProposal(candidates[0]);\n }}\n >\n <Scissors className=\"size-4\" aria-hidden=\"true\" />\n Create rebalance proposal\n </Button>\n </div>\n </GlassCard>\n\n <GlassCard>\n <p className=\"text-sm font-semibold text-text-primary\">Suggested workflow</p>\n <p className=\"mb-4 mt-1 text-xs text-text-secondary\">\n Realize losses while holding your target allocation. Confirm wash-sale windows before\n executing.\n </p>\n <LifecycleStepper\n steps={['Detect', 'Review', 'Proposal', 'Execute']}\n current=\"Proposal\"\n />\n </GlassCard>\n </div>\n </div>\n );\n}\n\n// ============================================================================\n// Unrealized gains tab — per-account holdings P/L (real market value − cost basis)\n// ============================================================================\n\nfunction UnrealizedGainsTab({ accounts }: { accounts: BraAccount[] }) {\n const [accountId, setAccountId] = useState<string>('');\n const selectedId = accountId || accounts[0]?.id;\n const selectedAccount = accounts.find((a) => a.id === selectedId);\n\n const { data: holdings, isLoading, isError, refetch } = useHoldings({ accountId: selectedId });\n\n const currency = selectedAccount?.currency ?? holdings[0]?.currency ?? 'USD';\n\n const totalUnrealized = holdings.reduce((sum, h) => sum + unrealized(h), 0);\n const gainers = holdings.filter((h) => unrealized(h) > 0).length;\n const losers = holdings.filter((h) => unrealized(h) < 0).length;\n\n // Group holdings by asset class with subtotals (grouped, colored by gain/loss).\n const groups = useMemo(() => {\n const map = new Map<BraAssetClass, BraHolding[]>();\n for (const h of holdings) {\n const arr = map.get(h.assetClass) ?? [];\n arr.push(h);\n map.set(h.assetClass, arr);\n }\n return Array.from(map.entries());\n }, [holdings]);\n\n // Market-value allocation by asset class for the donut (real values).\n const allocation = useMemo<DonutDatum[]>(\n () =>\n groups\n .map(([assetClass, rows]) => ({\n label: humanize(assetClass),\n value: rows.reduce((sum, h) => sum + h.marketValue, 0),\n }))\n .filter((d) => d.value > 0),\n [groups]\n );\n const totalMarketValue = allocation.reduce((sum, d) => sum + d.value, 0);\n\n if (accounts.length === 0) {\n return (\n <Card>\n <CardContent className=\"pt-6\">\n <EmptyState\n icon={<TrendingUp className=\"size-6\" aria-hidden=\"true\" />}\n title=\"No accounts yet\"\n description=\"Add an account with holdings to see unrealized gains and losses.\"\n />\n </CardContent>\n </Card>\n );\n }\n\n return (\n <Card>\n <CardHeader className=\"flex flex-col gap-4 md:flex-row md:items-start md:justify-between\">\n <div>\n <CardTitle className=\"flex items-center gap-2\">\n <TrendingUp className=\"h-5 w-5\" aria-hidden=\"true\" />\n Unrealized gains &amp; losses\n </CardTitle>\n <CardDescription>\n Market value minus cost basis for each holding in the selected account.\n </CardDescription>\n </div>\n <div className=\"w-full md:w-64\">\n <Label htmlFor=\"unrealized-account\" className=\"sr-only\">\n Account\n </Label>\n <Select value={selectedId ?? ''} onValueChange={setAccountId}>\n <SelectTrigger id=\"unrealized-account\">\n <SelectValue placeholder=\"Select account\" />\n </SelectTrigger>\n <SelectContent>\n {accounts.map((a) => (\n <SelectItem key={a.id} value={a.id}>\n {a.name}\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n </div>\n </CardHeader>\n <CardContent className=\"space-y-4\">\n {isLoading ? (\n <LoadingState />\n ) : isError ? (\n <ErrorState onRetry={() => refetch()} />\n ) : holdings.length === 0 ? (\n <EmptyState\n icon={<TrendingUp className=\"size-6\" aria-hidden=\"true\" />}\n title=\"No holdings in this account\"\n description=\"Unrealized gains appear once this account has holdings with a cost basis.\"\n />\n ) : (\n <>\n <div className=\"grid gap-4 lg:grid-cols-3\">\n <div className=\"grid grid-cols-2 gap-3 lg:col-span-2\">\n <StatTile\n label=\"Unrealized P/L\"\n value={formatMoney(totalUnrealized, currency)}\n deltaTone={totalUnrealized >= 0 ? 'positive' : 'negative'}\n icon={\n totalUnrealized >= 0 ? (\n <TrendingUp className=\"size-4\" aria-hidden=\"true\" />\n ) : (\n <TrendingDown className=\"size-4\" aria-hidden=\"true\" />\n )\n }\n />\n <StatTile label=\"Holdings\" value={String(holdings.length)} />\n <StatTile\n label=\"Gainers\"\n value={String(gainers)}\n icon={<ArrowUpRight className=\"size-4\" aria-hidden=\"true\" />}\n />\n <StatTile\n label=\"Losers\"\n value={String(losers)}\n icon={<ArrowDownRight className=\"size-4\" aria-hidden=\"true\" />}\n />\n </div>\n <div className=\"rounded-xl border border-border-subtle bg-bg-surface p-4\">\n <p className=\"mb-2 text-xs font-medium uppercase tracking-wide text-text-secondary\">\n Allocation by asset class\n </p>\n <DonutChart\n data={allocation}\n legend={false}\n height={180}\n centerValue={formatMoney(totalMarketValue, currency)}\n centerLabel=\"market value\"\n valueFormatter={(v) => formatMoney(v, currency)}\n />\n </div>\n </div>\n\n <div className=\"space-y-6\">\n {groups.map(([assetClass, rows]) => {\n const groupTotal = rows.reduce((sum, h) => sum + unrealized(h), 0);\n return (\n <div key={assetClass} className=\"space-y-2\">\n <div className=\"flex items-center justify-between\">\n <div className=\"flex items-center gap-2\">\n <h3 className=\"text-sm font-semibold text-text-primary\">\n {humanize(assetClass)}\n </h3>\n <Badge variant=\"secondary\">{rows.length}</Badge>\n </div>\n <GainLoss value={groupTotal} currency={currency} />\n </div>\n <div className=\"overflow-x-auto\">\n <Table>\n <TableHeader>\n <TableRow>\n <TableHead>Symbol</TableHead>\n <TableHead className=\"text-right\">Quantity</TableHead>\n <TableHead className=\"text-right\">Cost basis</TableHead>\n <TableHead className=\"text-right\">Market value</TableHead>\n <TableHead className=\"text-right\">Unrealized</TableHead>\n </TableRow>\n </TableHeader>\n <TableBody>\n {rows.map((h) => (\n <TableRow key={h.id}>\n <TableCell>\n <p className=\"font-medium text-text-primary\">{h.symbol}</p>\n {h.name ? (\n <p className=\"text-xs text-text-secondary\">{h.name}</p>\n ) : null}\n </TableCell>\n <TableCell className=\"text-right text-text-secondary\">\n {h.quantity}\n </TableCell>\n <TableCell className=\"text-right text-text-secondary\">\n {formatMoney(h.costBasis, h.currency)}\n </TableCell>\n <TableCell className=\"text-right text-text-primary\">\n {formatMoney(h.marketValue, h.currency)}\n </TableCell>\n <TableCell className=\"text-right\">\n <GainLoss value={unrealized(h)} currency={h.currency} />\n </TableCell>\n </TableRow>\n ))}\n </TableBody>\n </Table>\n </div>\n </div>\n );\n })}\n </div>\n </>\n )}\n </CardContent>\n </Card>\n );\n}\n\n/** Signed money with an arrow icon + semantic color (color is never the only signal). */\nfunction GainLoss({ value, currency }: { value: number; currency: string }) {\n const positive = value > 0;\n const negative = value < 0;\n const Icon = positive ? ArrowUpRight : negative ? ArrowDownRight : TrendingDown;\n const sign = positive ? '+' : '';\n return (\n <span\n className={`inline-flex items-center justify-end gap-1 font-semibold ${deltaToneClass(value)}`}\n >\n {value !== 0 ? <Icon className=\"size-4\" aria-hidden=\"true\" /> : null}\n {sign}\n {formatMoney(value, currency)}\n </span>\n );\n}\n\n// ============================================================================\n// Tax-insight row (acknowledge / resolve / dismiss)\n// ============================================================================\n\nfunction TaxInsightRow({\n insight,\n actionPending,\n onAcknowledge,\n onResolve,\n onDismiss,\n}: {\n insight: BraInsight;\n actionPending: boolean;\n onAcknowledge: () => void;\n onResolve: () => void;\n onDismiss: () => void;\n}) {\n const terminal = insight.status === 'RESOLVED' || insight.status === 'DISMISSED';\n return (\n <div className=\"flex items-start justify-between gap-4 rounded-lg border border-border-subtle bg-bg-surface p-4 transition-shadow motion-safe:hover:shadow-[var(--shadow-pop-hover,var(--shadow-elevation-2))]\">\n <div className=\"min-w-0 space-y-1\">\n <div className=\"flex flex-wrap items-center gap-2\">\n <p className=\"font-medium text-text-primary\">{insight.title}</p>\n <Badge variant={statusBadgeVariant(insight.severity)}>{humanize(insight.severity)}</Badge>\n <Badge variant={statusBadgeVariant(insight.status)}>{humanize(insight.status)}</Badge>\n </div>\n {insight.detail ? <p className=\"text-sm text-text-secondary\">{insight.detail}</p> : null}\n <p className=\"text-xs text-text-muted\">\n {humanize(insight.subjectType)} · Detected {formatDate(insight.createdAt)}\n </p>\n </div>\n {terminal ? (\n <span className=\"mt-1 text-xs text-text-muted\">Closed</span>\n ) : (\n <DropdownMenu>\n <DropdownMenuTrigger asChild>\n <Button\n variant=\"ghost\"\n size=\"sm\"\n aria-label={`Actions for ${insight.title}`}\n disabled={actionPending}\n >\n <MoreHorizontal className=\"size-4\" aria-hidden=\"true\" />\n </Button>\n </DropdownMenuTrigger>\n <DropdownMenuContent align=\"end\">\n <DropdownMenuLabel>Actions</DropdownMenuLabel>\n <DropdownMenuSeparator />\n {insight.status === 'OPEN' ? (\n <DropdownMenuItem onClick={onAcknowledge}>\n <Check className=\"size-4\" aria-hidden=\"true\" />\n Acknowledge\n </DropdownMenuItem>\n ) : null}\n <DropdownMenuItem onClick={onResolve}>\n <ShieldCheck className=\"size-4\" aria-hidden=\"true\" />\n Resolve\n </DropdownMenuItem>\n <DropdownMenuItem className=\"text-status-error-text\" onClick={onDismiss}>\n <X className=\"size-4\" aria-hidden=\"true\" />\n Dismiss\n </DropdownMenuItem>\n </DropdownMenuContent>\n </DropdownMenu>\n )}\n </div>\n );\n}\n"],"mappings":"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"}
@@ -1,5 +1,4 @@
1
1
  import { ReactNode } from 'react';
2
-
3
2
  /** USD currency, no cents. Pass a currency code to override. */
4
3
  export declare function formatMoney(value: number, currency?: string): string;
5
4
  /** Compact money/number, e.g. 1.2M, 950K. */
@@ -1 +1 @@
1
- {"version":3,"file":"_shared.js","names":[],"sources":["../../../src/brainyrich/pages/_shared.tsx"],"sourcesContent":["import { useEffect, useState, type ReactNode } from 'react';\nimport { ArrowDownRight, ArrowUpRight, Inbox, Minus, RefreshCw, TriangleAlert } from 'lucide-react';\nimport { Badge, Button, Card, CardContent, Skeleton } from '@burdenoff/fe-libs/ui';\nimport { FadeIn, useReducedMotion } from '../components/viz';\n\n// ============================================================================\n// Formatters\n// ============================================================================\n\n/** USD currency, no cents. Pass a currency code to override. */\nexport function formatMoney(value: number, currency = 'USD'): string {\n if (!Number.isFinite(value)) return '—';\n return new Intl.NumberFormat('en-US', {\n style: 'currency',\n currency,\n maximumFractionDigits: 0,\n }).format(value);\n}\n\n/** Compact money/number, e.g. 1.2M, 950K. */\nexport function formatCompact(value: number, currency?: string): string {\n if (!Number.isFinite(value)) return '—';\n return new Intl.NumberFormat('en-US', {\n notation: 'compact',\n maximumFractionDigits: 1,\n ...(currency ? { style: 'currency', currency } : {}),\n }).format(value);\n}\n\n/** Percentage from a whole-number percent (e.g. 12.5 → \"12.5%\"). */\nexport function formatPct(value: number | null | undefined, fractionDigits = 1): string {\n if (value === null || value === undefined || !Number.isFinite(value)) return '—';\n return `${value.toFixed(fractionDigits)}%`;\n}\n\n/**\n * Guarded date formatter. Only wraps a present ISO string in `new Date()` at\n * render time — never calls `.getTime()` on a raw scalar and never `new Date(0)`.\n * Returns an em-dash for absent/invalid values.\n */\nexport function formatDate(iso?: string | null): string {\n if (!iso) return '—';\n const d = new Date(iso);\n if (Number.isNaN(d.getTime())) return '—';\n return new Intl.DateTimeFormat('en-US', {\n year: 'numeric',\n month: 'short',\n day: 'numeric',\n }).format(d);\n}\n\n// ============================================================================\n// Status → badge variant (semantic, no raw colors)\n// ============================================================================\n\n/**\n * Map a domain status/severity string to a shadcn Badge variant. Accepts the\n * Bra* enum members (ACTIVE, AT_RISK, HIGH, …) case-insensitively so pages can\n * pass raw enum values.\n */\nexport function statusBadgeVariant(\n status: string\n): 'default' | 'secondary' | 'destructive' | 'outline' {\n const s = status.toUpperCase();\n if (['ACTIVE', 'ACHIEVED', 'ON_TRACK', 'AHEAD', 'RESOLVED', 'EXECUTED', 'APPROVED'].includes(s))\n return 'default';\n if (['AT_RISK', 'HIGH', 'CRITICAL', 'ABANDONED', 'REJECTED', 'CANCELLED', 'CLOSED'].includes(s))\n return 'destructive';\n if (\n ['ONBOARDING', 'PROSPECT', 'ON_HOLD', 'BEHIND', 'DRAFT', 'PROPOSED', 'MEDIUM', 'LOW'].includes(\n s\n )\n )\n return 'secondary';\n return 'outline';\n}\n\n/** Semantic text-color token for a signed delta (color is never the only signal). */\nexport function deltaToneClass(value: number): string {\n if (value > 0) return 'text-status-success-text';\n if (value < 0) return 'text-status-error-text';\n return 'text-text-secondary';\n}\n\n// ============================================================================\n// Section shell + KPIs\n// ============================================================================\n\ninterface SectionShellProps {\n title: string;\n description: string;\n actionLabel?: string;\n onAction?: () => void;\n actions?: ReactNode;\n badges?: string[];\n children: ReactNode;\n}\n\nexport function SectionShell({\n title,\n description,\n actionLabel,\n onAction,\n actions,\n badges = [],\n children,\n}: SectionShellProps) {\n return (\n <div className=\"space-y-6 p-6\">\n <div className=\"flex flex-col gap-4 md:flex-row md:items-start md:justify-between\">\n <div>\n <h1 className=\"text-2xl font-semibold text-text-primary\">{title}</h1>\n <p className=\"text-sm text-text-secondary\">{description}</p>\n </div>\n <div className=\"flex items-center gap-2\">\n {badges.map((badge) => (\n <Badge key={badge} variant=\"secondary\">\n {badge}\n </Badge>\n ))}\n {actions}\n {actionLabel ? (\n <Button size=\"sm\" onClick={onAction}>\n {actionLabel}\n </Button>\n ) : null}\n </div>\n </div>\n {children}\n </div>\n );\n}\n\nexport interface KpiItem {\n label: string;\n value: string;\n /** Optional signed delta rendered as a DeltaBadge (icon + sign + color). */\n delta?: number;\n /** Optional free-text trend line (neutral tone unless deltaTone provided). */\n trend?: string;\n deltaTone?: 'positive' | 'negative' | 'neutral';\n}\n\nexport function KpiGrid({ items }: { items: KpiItem[] }) {\n return (\n <div className=\"grid gap-4 md:grid-cols-2 xl:grid-cols-4\">\n {items.map((item, i) => (\n <FadeIn key={item.label} index={i}>\n <Card className=\"h-full transition-shadow motion-safe:hover:shadow-[var(--shadow-pop-hover,var(--shadow-elevation-2))]\">\n <CardContent className=\"space-y-1.5 p-4\">\n <p className=\"text-xs font-medium uppercase tracking-wide text-text-secondary\">\n {item.label}\n </p>\n <p className=\"text-2xl font-semibold tracking-tight text-text-primary\">\n {item.value}\n </p>\n {item.delta !== undefined ? (\n <DeltaBadge value={item.delta} />\n ) : item.trend ? (\n <p\n className={\n item.deltaTone === 'positive'\n ? 'text-xs text-status-success-text'\n : item.deltaTone === 'negative'\n ? 'text-xs text-status-error-text'\n : 'text-xs text-text-secondary'\n }\n >\n {item.trend}\n </p>\n ) : null}\n </CardContent>\n </Card>\n </FadeIn>\n ))}\n </div>\n );\n}\n\n// ============================================================================\n// Delta badge — icon + sign + semantic color (color never the only signal)\n// ============================================================================\n\nexport function DeltaBadge({\n value,\n suffix = '%',\n className = '',\n}: {\n value: number;\n suffix?: string;\n className?: string;\n}) {\n const positive = value > 0;\n const negative = value < 0;\n const Icon = positive ? ArrowUpRight : negative ? ArrowDownRight : Minus;\n const tone = positive\n ? 'text-status-success-text bg-status-success-bg'\n : negative\n ? 'text-status-error-text bg-status-error-bg'\n : 'text-text-secondary bg-bg-sunken';\n const sign = positive ? '+' : '';\n return (\n <span\n className={`inline-flex items-center gap-0.5 rounded-full px-1.5 py-0.5 text-xs font-medium ${tone} ${className}`}\n >\n <Icon className=\"size-3\" aria-hidden=\"true\" />\n {sign}\n {Number.isFinite(value) ? value.toFixed(1) : '—'}\n {suffix}\n </span>\n );\n}\n\n// ============================================================================\n// Allocation bars — tokenized horizontal bar primitive\n// ============================================================================\n\nexport type AllocationTone = 'default' | 'positive' | 'negative' | 'warning' | 'accent';\n\nconst TONE_FILL: Record<AllocationTone, string> = {\n default: 'bg-primary',\n positive: 'bg-status-success-bg',\n negative: 'bg-status-error-bg',\n warning: 'bg-status-warning-bg',\n accent: 'bg-accent-teal',\n};\n\nexport interface AllocationDatum {\n label: string;\n /** Percentage 0–100 for the bar width. */\n value: number;\n tone?: AllocationTone;\n /** Optional right-aligned caption (e.g. formatted money). Defaults to the %. */\n caption?: string;\n}\n\n/**\n * Single allocation bar fill. Starts at 0 width and grows to `width`% after\n * mount via a CSS transition; instant (no transition) under reduced motion.\n */\nfunction AllocationFill({ width, className }: { width: number; className: string }) {\n const reduce = useReducedMotion();\n // Reduced motion starts at the final width (instant); otherwise start at 0 and\n // grow on the next frame via the CSS width transition.\n const [w, setW] = useState(reduce ? width : 0);\n\n useEffect(() => {\n const id = requestAnimationFrame(() => setW(width));\n return () => cancelAnimationFrame(id);\n }, [width]);\n\n return (\n <div\n className={className}\n style={{ width: `${w}%`, transition: reduce ? 'none' : 'width 500ms ease' }}\n />\n );\n}\n\nexport function AllocationBars({ data }: { data: AllocationDatum[] }) {\n const rows = data.filter((d) => Number.isFinite(d.value));\n if (rows.length === 0) {\n return <p className=\"text-sm text-text-secondary\">No allocation data.</p>;\n }\n return (\n <div className=\"space-y-3.5\">\n {rows.map((d) => {\n const width = Math.max(0, Math.min(100, d.value));\n return (\n <div key={d.label} className=\"space-y-1.5\">\n <div className=\"flex items-center justify-between text-xs\">\n <span className=\"font-medium text-text-primary\">{d.label}</span>\n <span className=\"tabular-nums text-text-secondary\">\n {d.caption ?? formatPct(d.value)}\n </span>\n </div>\n <div\n className=\"h-2.5 w-full overflow-hidden rounded-full bg-bg-sunken\"\n role=\"progressbar\"\n aria-valuenow={Math.round(width)}\n aria-valuemin={0}\n aria-valuemax={100}\n aria-label={d.label}\n >\n <AllocationFill\n width={width}\n className={`h-full rounded-full ${TONE_FILL[d.tone ?? 'default']}`}\n />\n </div>\n </div>\n );\n })}\n </div>\n );\n}\n\n// ============================================================================\n// Empty / Loading / Error states (designed, shared)\n// ============================================================================\n\nexport function EmptyState({\n icon,\n title,\n description,\n action,\n}: {\n icon?: ReactNode;\n title: string;\n description?: string;\n action?: ReactNode;\n}) {\n return (\n <div className=\"flex flex-col items-center justify-center rounded-lg border border-dashed border-border-subtle bg-bg-surface px-6 py-12 text-center\">\n <div className=\"mb-4 flex size-12 items-center justify-center rounded-full bg-bg-sunken text-text-secondary\">\n {icon ?? <Inbox className=\"size-6\" aria-hidden=\"true\" />}\n </div>\n <h3 className=\"text-base font-semibold text-text-primary\">{title}</h3>\n {description ? (\n <p className=\"mt-1 max-w-md text-sm text-text-secondary\">{description}</p>\n ) : null}\n {action ? <div className=\"mt-4\">{action}</div> : null}\n </div>\n );\n}\n\nexport function LoadingState({ rows = 4 }: { rows?: number }) {\n return (\n <div className=\"space-y-3\" aria-busy=\"true\" aria-live=\"polite\">\n {Array.from({ length: rows }).map((_, i) => (\n <div\n key={i}\n className=\"flex items-center gap-4 rounded-lg border border-border-subtle bg-bg-surface p-4\"\n >\n <Skeleton className=\"size-10 rounded-full\" />\n <div className=\"flex-1 space-y-2\">\n <Skeleton className=\"h-4 w-1/3\" />\n <Skeleton className=\"h-3 w-1/2\" />\n </div>\n <Skeleton className=\"h-4 w-16\" />\n </div>\n ))}\n </div>\n );\n}\n\nexport function ErrorState({\n title = 'Something went wrong',\n description = 'We could not load this data. Please try again.',\n onRetry,\n}: {\n title?: string;\n description?: string;\n onRetry?: () => void;\n}) {\n return (\n <div className=\"flex flex-col items-center justify-center rounded-lg border border-status-error-text/40 bg-status-error-bg px-6 py-12 text-center\">\n <div className=\"mb-4 flex size-12 items-center justify-center rounded-full bg-bg-surface text-status-error-text\">\n <TriangleAlert className=\"size-6\" aria-hidden=\"true\" />\n </div>\n <h3 className=\"text-base font-semibold text-text-primary\">{title}</h3>\n <p className=\"mt-1 max-w-md text-sm text-text-secondary\">{description}</p>\n {onRetry ? (\n <Button variant=\"outline\" size=\"sm\" className=\"mt-4\" onClick={onRetry}>\n <RefreshCw className=\"size-4\" aria-hidden=\"true\" />\n Retry\n </Button>\n ) : null}\n </div>\n );\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"_shared.js","names":[],"sources":["../../../src/brainyrich/pages/_shared.tsx"],"sourcesContent":["import { useEffect, useState, type ReactNode } from 'react';\nimport { ArrowDownRight, ArrowUpRight, Inbox, Minus, RefreshCw, TriangleAlert } from 'lucide-react';\nimport { Badge, Button, Card, CardContent, Skeleton } from '@burdenoff/fe-libs/ui';\nimport { FadeIn, useReducedMotion } from '../components/viz';\n\n// ============================================================================\n// Formatters\n// ============================================================================\n\n/** USD currency, no cents. Pass a currency code to override. */\nexport function formatMoney(value: number, currency = 'USD'): string {\n if (!Number.isFinite(value)) return '—';\n return new Intl.NumberFormat('en-US', {\n style: 'currency',\n currency,\n maximumFractionDigits: 0,\n }).format(value);\n}\n\n/** Compact money/number, e.g. 1.2M, 950K. */\nexport function formatCompact(value: number, currency?: string): string {\n if (!Number.isFinite(value)) return '—';\n return new Intl.NumberFormat('en-US', {\n notation: 'compact',\n maximumFractionDigits: 1,\n ...(currency ? { style: 'currency', currency } : {}),\n }).format(value);\n}\n\n/** Percentage from a whole-number percent (e.g. 12.5 → \"12.5%\"). */\nexport function formatPct(value: number | null | undefined, fractionDigits = 1): string {\n if (value === null || value === undefined || !Number.isFinite(value)) return '—';\n return `${value.toFixed(fractionDigits)}%`;\n}\n\n/**\n * Guarded date formatter. Only wraps a present ISO string in `new Date()` at\n * render time — never calls `.getTime()` on a raw scalar and never `new Date(0)`.\n * Returns an em-dash for absent/invalid values.\n */\nexport function formatDate(iso?: string | null): string {\n if (!iso) return '—';\n const d = new Date(iso);\n if (Number.isNaN(d.getTime())) return '—';\n return new Intl.DateTimeFormat('en-US', {\n year: 'numeric',\n month: 'short',\n day: 'numeric',\n }).format(d);\n}\n\n// ============================================================================\n// Status → badge variant (semantic, no raw colors)\n// ============================================================================\n\n/**\n * Map a domain status/severity string to a shadcn Badge variant. Accepts the\n * Bra* enum members (ACTIVE, AT_RISK, HIGH, …) case-insensitively so pages can\n * pass raw enum values.\n */\nexport function statusBadgeVariant(\n status: string\n): 'default' | 'secondary' | 'destructive' | 'outline' {\n const s = status.toUpperCase();\n if (['ACTIVE', 'ACHIEVED', 'ON_TRACK', 'AHEAD', 'RESOLVED', 'EXECUTED', 'APPROVED'].includes(s))\n return 'default';\n if (['AT_RISK', 'HIGH', 'CRITICAL', 'ABANDONED', 'REJECTED', 'CANCELLED', 'CLOSED'].includes(s))\n return 'destructive';\n if (\n ['ONBOARDING', 'PROSPECT', 'ON_HOLD', 'BEHIND', 'DRAFT', 'PROPOSED', 'MEDIUM', 'LOW'].includes(\n s\n )\n )\n return 'secondary';\n return 'outline';\n}\n\n/** Semantic text-color token for a signed delta (color is never the only signal). */\nexport function deltaToneClass(value: number): string {\n if (value > 0) return 'text-status-success-text';\n if (value < 0) return 'text-status-error-text';\n return 'text-text-secondary';\n}\n\n// ============================================================================\n// Section shell + KPIs\n// ============================================================================\n\ninterface SectionShellProps {\n title: string;\n description: string;\n actionLabel?: string;\n onAction?: () => void;\n actions?: ReactNode;\n badges?: string[];\n children: ReactNode;\n}\n\nexport function SectionShell({\n title,\n description,\n actionLabel,\n onAction,\n actions,\n badges = [],\n children,\n}: SectionShellProps) {\n return (\n <div className=\"space-y-6 p-6\">\n <div className=\"flex flex-col gap-4 md:flex-row md:items-start md:justify-between\">\n <div>\n <h1 className=\"text-2xl font-semibold text-text-primary\">{title}</h1>\n <p className=\"text-sm text-text-secondary\">{description}</p>\n </div>\n <div className=\"flex items-center gap-2\">\n {badges.map((badge) => (\n <Badge key={badge} variant=\"secondary\">\n {badge}\n </Badge>\n ))}\n {actions}\n {actionLabel ? (\n <Button size=\"sm\" onClick={onAction}>\n {actionLabel}\n </Button>\n ) : null}\n </div>\n </div>\n {children}\n </div>\n );\n}\n\nexport interface KpiItem {\n label: string;\n value: string;\n /** Optional signed delta rendered as a DeltaBadge (icon + sign + color). */\n delta?: number;\n /** Optional free-text trend line (neutral tone unless deltaTone provided). */\n trend?: string;\n deltaTone?: 'positive' | 'negative' | 'neutral';\n}\n\nexport function KpiGrid({ items }: { items: KpiItem[] }) {\n return (\n <div className=\"grid gap-4 md:grid-cols-2 xl:grid-cols-4\">\n {items.map((item, i) => (\n <FadeIn key={item.label} index={i}>\n <Card className=\"h-full transition-shadow motion-safe:hover:shadow-[var(--shadow-pop-hover,var(--shadow-elevation-2))]\">\n <CardContent className=\"space-y-1.5 p-4\">\n <p className=\"text-xs font-medium uppercase tracking-wide text-text-secondary\">\n {item.label}\n </p>\n <p className=\"text-2xl font-semibold tracking-tight text-text-primary\">\n {item.value}\n </p>\n {item.delta !== undefined ? (\n <DeltaBadge value={item.delta} />\n ) : item.trend ? (\n <p\n className={\n item.deltaTone === 'positive'\n ? 'text-xs text-status-success-text'\n : item.deltaTone === 'negative'\n ? 'text-xs text-status-error-text'\n : 'text-xs text-text-secondary'\n }\n >\n {item.trend}\n </p>\n ) : null}\n </CardContent>\n </Card>\n </FadeIn>\n ))}\n </div>\n );\n}\n\n// ============================================================================\n// Delta badge — icon + sign + semantic color (color never the only signal)\n// ============================================================================\n\nexport function DeltaBadge({\n value,\n suffix = '%',\n className = '',\n}: {\n value: number;\n suffix?: string;\n className?: string;\n}) {\n const positive = value > 0;\n const negative = value < 0;\n const Icon = positive ? ArrowUpRight : negative ? ArrowDownRight : Minus;\n const tone = positive\n ? 'text-status-success-text bg-status-success-bg'\n : negative\n ? 'text-status-error-text bg-status-error-bg'\n : 'text-text-secondary bg-bg-sunken';\n const sign = positive ? '+' : '';\n return (\n <span\n className={`inline-flex items-center gap-0.5 rounded-full px-1.5 py-0.5 text-xs font-medium ${tone} ${className}`}\n >\n <Icon className=\"size-3\" aria-hidden=\"true\" />\n {sign}\n {Number.isFinite(value) ? value.toFixed(1) : '—'}\n {suffix}\n </span>\n );\n}\n\n// ============================================================================\n// Allocation bars — tokenized horizontal bar primitive\n// ============================================================================\n\nexport type AllocationTone = 'default' | 'positive' | 'negative' | 'warning' | 'accent';\n\nconst TONE_FILL: Record<AllocationTone, string> = {\n default: 'bg-primary',\n positive: 'bg-status-success-bg',\n negative: 'bg-status-error-bg',\n warning: 'bg-status-warning-bg',\n accent: 'bg-accent-teal',\n};\n\nexport interface AllocationDatum {\n label: string;\n /** Percentage 0–100 for the bar width. */\n value: number;\n tone?: AllocationTone;\n /** Optional right-aligned caption (e.g. formatted money). Defaults to the %. */\n caption?: string;\n}\n\n/**\n * Single allocation bar fill. Starts at 0 width and grows to `width`% after\n * mount via a CSS transition; instant (no transition) under reduced motion.\n */\nfunction AllocationFill({ width, className }: { width: number; className: string }) {\n const reduce = useReducedMotion();\n // Reduced motion starts at the final width (instant); otherwise start at 0 and\n // grow on the next frame via the CSS width transition.\n const [w, setW] = useState(reduce ? width : 0);\n\n useEffect(() => {\n const id = requestAnimationFrame(() => setW(width));\n return () => cancelAnimationFrame(id);\n }, [width]);\n\n return (\n <div\n className={className}\n style={{ width: `${w}%`, transition: reduce ? 'none' : 'width 500ms ease' }}\n />\n );\n}\n\nexport function AllocationBars({ data }: { data: AllocationDatum[] }) {\n const rows = data.filter((d) => Number.isFinite(d.value));\n if (rows.length === 0) {\n return <p className=\"text-sm text-text-secondary\">No allocation data.</p>;\n }\n return (\n <div className=\"space-y-3.5\">\n {rows.map((d) => {\n const width = Math.max(0, Math.min(100, d.value));\n return (\n <div key={d.label} className=\"space-y-1.5\">\n <div className=\"flex items-center justify-between text-xs\">\n <span className=\"font-medium text-text-primary\">{d.label}</span>\n <span className=\"tabular-nums text-text-secondary\">\n {d.caption ?? formatPct(d.value)}\n </span>\n </div>\n <div\n className=\"h-2.5 w-full overflow-hidden rounded-full bg-bg-sunken\"\n role=\"progressbar\"\n aria-valuenow={Math.round(width)}\n aria-valuemin={0}\n aria-valuemax={100}\n aria-label={d.label}\n >\n <AllocationFill\n width={width}\n className={`h-full rounded-full ${TONE_FILL[d.tone ?? 'default']}`}\n />\n </div>\n </div>\n );\n })}\n </div>\n );\n}\n\n// ============================================================================\n// Empty / Loading / Error states (designed, shared)\n// ============================================================================\n\nexport function EmptyState({\n icon,\n title,\n description,\n action,\n}: {\n icon?: ReactNode;\n title: string;\n description?: string;\n action?: ReactNode;\n}) {\n return (\n <div className=\"flex flex-col items-center justify-center rounded-lg border border-dashed border-border-subtle bg-bg-surface px-6 py-12 text-center\">\n <div className=\"mb-4 flex size-12 items-center justify-center rounded-full bg-bg-sunken text-text-secondary\">\n {icon ?? <Inbox className=\"size-6\" aria-hidden=\"true\" />}\n </div>\n <h3 className=\"text-base font-semibold text-text-primary\">{title}</h3>\n {description ? (\n <p className=\"mt-1 max-w-md text-sm text-text-secondary\">{description}</p>\n ) : null}\n {action ? <div className=\"mt-4\">{action}</div> : null}\n </div>\n );\n}\n\nexport function LoadingState({ rows = 4 }: { rows?: number }) {\n return (\n <div className=\"space-y-3\" aria-busy=\"true\" aria-live=\"polite\">\n {Array.from({ length: rows }).map((_, i) => (\n <div\n key={i}\n className=\"flex items-center gap-4 rounded-lg border border-border-subtle bg-bg-surface p-4\"\n >\n <Skeleton className=\"size-10 rounded-full\" />\n <div className=\"flex-1 space-y-2\">\n <Skeleton className=\"h-4 w-1/3\" />\n <Skeleton className=\"h-3 w-1/2\" />\n </div>\n <Skeleton className=\"h-4 w-16\" />\n </div>\n ))}\n </div>\n );\n}\n\nexport function ErrorState({\n title = 'Something went wrong',\n description = 'We could not load this data. Please try again.',\n onRetry,\n}: {\n title?: string;\n description?: string;\n onRetry?: () => void;\n}) {\n return (\n <div className=\"flex flex-col items-center justify-center rounded-lg border border-status-error-text/40 bg-status-error-bg px-6 py-12 text-center\">\n <div className=\"mb-4 flex size-12 items-center justify-center rounded-full bg-bg-surface text-status-error-text\">\n <TriangleAlert className=\"size-6\" aria-hidden=\"true\" />\n </div>\n <h3 className=\"text-base font-semibold text-text-primary\">{title}</h3>\n <p className=\"mt-1 max-w-md text-sm text-text-secondary\">{description}</p>\n {onRetry ? (\n <Button variant=\"outline\" size=\"sm\" className=\"mt-4\" onClick={onRetry}>\n <RefreshCw className=\"size-4\" aria-hidden=\"true\" />\n Retry\n </Button>\n ) : null}\n </div>\n );\n}\n"],"mappings":";;;;;;AAUA,SAAgB,EAAY,GAAe,IAAW,OAAe;CAEnE,OADK,OAAO,SAAS,CAAK,IACnB,IAAI,KAAK,aAAa,SAAS;EACpC,OAAO;EACP;EACA,uBAAuB;CACzB,CAAC,EAAE,OAAO,CAAK,IALqB;AAMtC;AAGA,SAAgB,EAAc,GAAe,GAA2B;CAEtE,OADK,OAAO,SAAS,CAAK,IACnB,IAAI,KAAK,aAAa,SAAS;EACpC,UAAU;EACV,uBAAuB;EACvB,GAAI,IAAW;GAAE,OAAO;GAAY;EAAS,IAAI,CAAC;CACpD,CAAC,EAAE,OAAO,CAAK,IALqB;AAMtC;AAGA,SAAgB,EAAU,GAAkC,IAAiB,GAAW;CAEtF,OADI,KAAU,QAA+B,CAAC,OAAO,SAAS,CAAK,IAAU,MACtE,GAAG,EAAM,QAAQ,CAAc,EAAE;AAC1C;AAOA,SAAgB,EAAW,GAA6B;CACtD,IAAI,CAAC,GAAK,OAAO;CACjB,IAAM,IAAI,IAAI,KAAK,CAAG;CAEtB,OADI,OAAO,MAAM,EAAE,QAAQ,CAAC,IAAU,MAC/B,IAAI,KAAK,eAAe,SAAS;EACtC,MAAM;EACN,OAAO;EACP,KAAK;CACP,CAAC,EAAE,OAAO,CAAC;AACb;AAWA,SAAgB,EACd,GACqD;CACrD,IAAM,IAAI,EAAO,YAAY;CAW7B,OAVI;EAAC;EAAU;EAAY;EAAY;EAAS;EAAY;EAAY;CAAU,EAAE,SAAS,CAAC,IACrF,YACL;EAAC;EAAW;EAAQ;EAAY;EAAa;EAAY;EAAa;CAAQ,EAAE,SAAS,CAAC,IACrF,gBAEP;EAAC;EAAc;EAAY;EAAW;EAAU;EAAS;EAAY;EAAU;CAAK,EAAE,SACpF,CACF,IAEO,cACF;AACT;AAGA,SAAgB,EAAe,GAAuB;CAGpD,OAFI,IAAQ,IAAU,6BAClB,IAAQ,IAAU,2BACf;AACT;AAgBA,SAAgB,EAAa,EAC3B,UACA,gBACA,gBACA,aACA,YACA,YAAS,CAAC,GACV,eACoB;CACpB,OACE,kBAAC,OAAD;EAAK,WAAU;YAAf,CACE,kBAAC,OAAD;GAAK,WAAU;aAAf,CACE,kBAAC,OAAD,EAAA,UAAA,CACE,kBAAC,MAAD;IAAI,WAAU;cAA4C;GAAU,CAAA,GACpE,kBAAC,KAAD;IAAG,WAAU;cAA+B;GAAe,CAAA,CACxD,EAAA,CAAA,GACL,kBAAC,OAAD;IAAK,WAAU;cAAf;KACG,EAAO,KAAK,MACX,kBAAC,GAAD;MAAmB,SAAQ;gBACxB;KACI,GAFK,CAEL,CACR;KACA;KACA,IACC,kBAAC,GAAD;MAAQ,MAAK;MAAK,SAAS;gBACxB;KACK,CAAA,IACN;IACD;KACF;MACJ,CACE;;AAET;AAwFA,IAAM,IAA4C;CAChD,SAAS;CACT,UAAU;CACV,UAAU;CACV,SAAS;CACT,QAAQ;AACV;AAeA,SAAS,EAAe,EAAE,UAAO,gBAAmD;CAClF,IAAM,IAAS,EAAiB,GAG1B,CAAC,GAAG,KAAQ,EAAS,IAAS,IAAQ,CAAC;CAO7C,OALA,QAAgB;EACd,IAAM,IAAK,4BAA4B,EAAK,CAAK,CAAC;EAClD,aAAa,qBAAqB,CAAE;CACtC,GAAG,CAAC,CAAK,CAAC,GAGR,kBAAC,OAAD;EACa;EACX,OAAO;GAAE,OAAO,GAAG,EAAE;GAAI,YAAY,IAAS,SAAS;EAAmB;CAC3E,CAAA;AAEL;AAEA,SAAgB,EAAe,EAAE,WAAqC;CACpE,IAAM,IAAO,EAAK,QAAQ,MAAM,OAAO,SAAS,EAAE,KAAK,CAAC;CAIxD,OAHI,EAAK,WAAW,IACX,kBAAC,KAAD;EAAG,WAAU;YAA8B;CAAsB,CAAA,IAGxE,kBAAC,OAAD;EAAK,WAAU;YACZ,EAAK,KAAK,MAAM;GACf,IAAM,IAAQ,KAAK,IAAI,GAAG,KAAK,IAAI,KAAK,EAAE,KAAK,CAAC;GAChD,OACE,kBAAC,OAAD;IAAmB,WAAU;cAA7B,CACE,kBAAC,OAAD;KAAK,WAAU;eAAf,CACE,kBAAC,QAAD;MAAM,WAAU;gBAAiC,EAAE;KAAY,CAAA,GAC/D,kBAAC,QAAD;MAAM,WAAU;gBACb,EAAE,WAAW,EAAU,EAAE,KAAK;KAC3B,CAAA,CACH;QACL,kBAAC,OAAD;KACE,WAAU;KACV,MAAK;KACL,iBAAe,KAAK,MAAM,CAAK;KAC/B,iBAAe;KACf,iBAAe;KACf,cAAY,EAAE;eAEd,kBAAC,GAAD;MACS;MACP,WAAW,uBAAuB,EAAU,EAAE,QAAQ;KACvD,CAAA;IACE,CAAA,CACF;MApBK,EAAE,KAoBP;EAET,CAAC;CACE,CAAA;AAET;AAMA,SAAgB,EAAW,EACzB,SACA,UACA,gBACA,aAMC;CACD,OACE,kBAAC,OAAD;EAAK,WAAU;YAAf;GACE,kBAAC,OAAD;IAAK,WAAU;cACZ,KAAQ,kBAAC,GAAD;KAAO,WAAU;KAAS,eAAY;IAAQ,CAAA;GACpD,CAAA;GACL,kBAAC,MAAD;IAAI,WAAU;cAA6C;GAAU,CAAA;GACpE,IACC,kBAAC,KAAD;IAAG,WAAU;cAA6C;GAAe,CAAA,IACvE;GACH,IAAS,kBAAC,OAAD;IAAK,WAAU;cAAQ;GAAY,CAAA,IAAI;EAC9C;;AAET;AAEA,SAAgB,EAAa,EAAE,UAAO,KAAwB;CAC5D,OACE,kBAAC,OAAD;EAAK,WAAU;EAAY,aAAU;EAAO,aAAU;YACnD,MAAM,KAAK,EAAE,QAAQ,EAAK,CAAC,EAAE,KAAK,GAAG,MACpC,kBAAC,OAAD;GAEE,WAAU;aAFZ;IAIE,kBAAC,GAAD,EAAU,WAAU,uBAAwB,CAAA;IAC5C,kBAAC,OAAD;KAAK,WAAU;eAAf,CACE,kBAAC,GAAD,EAAU,WAAU,YAAa,CAAA,GACjC,kBAAC,GAAD,EAAU,WAAU,YAAa,CAAA,CAC9B;;IACL,kBAAC,GAAD,EAAU,WAAU,WAAY,CAAA;GAC7B;KATE,CASF,CACN;CACE,CAAA;AAET;AAEA,SAAgB,EAAW,EACzB,WAAQ,wBACR,iBAAc,kDACd,cAKC;CACD,OACE,kBAAC,OAAD;EAAK,WAAU;YAAf;GACE,kBAAC,OAAD;IAAK,WAAU;cACb,kBAAC,GAAD;KAAe,WAAU;KAAS,eAAY;IAAQ,CAAA;GACnD,CAAA;GACL,kBAAC,MAAD;IAAI,WAAU;cAA6C;GAAU,CAAA;GACrE,kBAAC,KAAD;IAAG,WAAU;cAA6C;GAAe,CAAA;GACxE,IACC,kBAAC,GAAD;IAAQ,SAAQ;IAAU,MAAK;IAAK,WAAU;IAAO,SAAS;cAA9D,CACE,kBAAC,GAAD;KAAW,WAAU;KAAS,eAAY;IAAQ,CAAA,GAAC,OAE7C;QACN;EACD;;AAET"}
@@ -1,6 +1,5 @@
1
1
  import { FC, PropsWithChildren } from 'react';
2
2
  import { BrainyRichRootProps } from '../types';
3
-
4
3
  export declare const useBrainyRich: () => BrainyRichRootProps;
5
4
  export declare const BrainyRichProvider: FC<PropsWithChildren<BrainyRichRootProps>>;
6
5
  //# sourceMappingURL=BrainyRichProvider.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"BrainyRichProvider.js","names":[],"sources":["../../../src/brainyrich/providers/BrainyRichProvider.tsx"],"sourcesContent":["import type { FC, PropsWithChildren } from 'react';\nimport { createContext, useContext, useMemo } from 'react';\nimport { MemoryRouter } from 'react-router';\nimport { QueryClient, QueryClientProvider } from '@tanstack/react-query';\nimport type { BrainyRichRootProps } from '../types';\n\ntype BrainyRichContextValue = BrainyRichRootProps;\n\nconst BrainyRichContext = createContext<BrainyRichContextValue | null>(null);\n\nexport const useBrainyRich = () => {\n const context = useContext(BrainyRichContext);\n if (!context) throw new Error('useBrainyRich must be used within BrainyRichProvider');\n return context;\n};\n\nexport const BrainyRichProvider: FC<PropsWithChildren<BrainyRichRootProps>> = ({\n children,\n ...props\n}) => {\n const queryClient = useMemo(\n () =>\n new QueryClient({\n defaultOptions: {\n queries: { retry: 1, refetchOnWindowFocus: false, staleTime: 5 * 60 * 1000 },\n },\n }),\n []\n );\n\n const content = (\n <QueryClientProvider client={queryClient}>\n <BrainyRichContext.Provider value={props}>{children}</BrainyRichContext.Provider>\n </QueryClientProvider>\n );\n\n if (props.basePath) return content;\n return <MemoryRouter>{content}</MemoryRouter>;\n};\n"],"mappings":";;;;;AAQA,IAAM,IAAoB,EAA6C,KAAK,EAE/D,UAAsB;CACjC,IAAM,IAAU,EAAW,EAAkB;AAC7C,KAAI,CAAC,EAAS,OAAU,MAAM,uDAAuD;AACrF,QAAO;GAGI,KAAkE,EAC7E,aACA,GAAG,QACC;CAWJ,IAAM,IACJ,kBAAC,GAAD;EAAqB,QAXH,QAEhB,IAAI,EAAY,EACd,gBAAgB,EACd,SAAS;GAAE,OAAO;GAAG,sBAAsB;GAAO,WAAW,MAAS;GAAM,EAC7E,EACF,CAAC,EACJ,EAAE,CACH;YAIG,kBAAC,EAAkB,UAAnB;GAA4B,OAAO;GAAQ;GAAsC,CAAA;EAC7D,CAAA;AAIxB,QADI,EAAM,WAAiB,IACpB,kBAAC,GAAD,EAAA,UAAe,GAAuB,CAAA"}
1
+ {"version":3,"file":"BrainyRichProvider.js","names":[],"sources":["../../../src/brainyrich/providers/BrainyRichProvider.tsx"],"sourcesContent":["import type { FC, PropsWithChildren } from 'react';\nimport { createContext, useContext, useMemo } from 'react';\nimport { MemoryRouter } from 'react-router';\nimport { QueryClient, QueryClientProvider } from '@tanstack/react-query';\nimport type { BrainyRichRootProps } from '../types';\n\ntype BrainyRichContextValue = BrainyRichRootProps;\n\nconst BrainyRichContext = createContext<BrainyRichContextValue | null>(null);\n\nexport const useBrainyRich = () => {\n const context = useContext(BrainyRichContext);\n if (!context) throw new Error('useBrainyRich must be used within BrainyRichProvider');\n return context;\n};\n\nexport const BrainyRichProvider: FC<PropsWithChildren<BrainyRichRootProps>> = ({\n children,\n ...props\n}) => {\n const queryClient = useMemo(\n () =>\n new QueryClient({\n defaultOptions: {\n queries: { retry: 1, refetchOnWindowFocus: false, staleTime: 5 * 60 * 1000 },\n },\n }),\n []\n );\n\n const content = (\n <QueryClientProvider client={queryClient}>\n <BrainyRichContext.Provider value={props}>{children}</BrainyRichContext.Provider>\n </QueryClientProvider>\n );\n\n if (props.basePath) return content;\n return <MemoryRouter>{content}</MemoryRouter>;\n};\n"],"mappings":";;;;;AAQA,IAAM,IAAoB,EAA6C,IAAI,GAE9D,UAAsB;CACjC,IAAM,IAAU,EAAW,CAAiB;CAC5C,IAAI,CAAC,GAAS,MAAU,MAAM,sDAAsD;CACpF,OAAO;AACT,GAEa,KAAkE,EAC7E,aACA,GAAG,QACC;CAWJ,IAAM,IACJ,kBAAC,GAAD;EAAqB,QAXH,QAEhB,IAAI,EAAY,EACd,gBAAgB,EACd,SAAS;GAAE,OAAO;GAAG,sBAAsB;GAAO,WAAW,MAAS;EAAK,EAC7E,EACF,CAAC,GACH,CAAC,CAI4B;YAC3B,kBAAC,EAAkB,UAAnB;GAA4B,OAAO;GAAQ;EAAqC,CAAA;CAC7D,CAAA;CAIvB,OADI,EAAM,WAAiB,IACpB,kBAAC,GAAD,EAAA,UAAe,EAAsB,CAAA;AAC9C"}
@@ -1 +1 @@
1
- {"version":3,"file":"createSandboxAssistantTransport.js","names":[],"sources":["../../../src/brainyrich/services/createSandboxAssistantTransport.ts"],"sourcesContent":["/**\n * brainyrich adapter for the shared fe-libs AssistantWidget transport.\n *\n * The sandbox lifecycle + poll/stream loop now lives in\n * `@burdenoff/fe-libs/shared/assistant` (one implementation for all products);\n * this is a thin wrapper. The exported name/shape are unchanged so app-shell\n * imports don't move. The public return type is a LOCALLY-declared structural\n * mirror — never re-export fe-libs types (vite-plugin-dts path rewriting).\n */\n\nimport { useSandboxAssistantTransport as useSharedTransport } from '@burdenoff/fe-libs/shared/assistant';\nimport { gatherPageContext } from '../utils/pageContext';\n\ninterface AssistantSendArgs {\n prompt: string;\n onProgress: (partialText: string) => void;\n signal: AbortSignal;\n}\n\nexport interface AssistantTransport {\n sendPrompt: (args: AssistantSendArgs) => Promise<{ text: string }>;\n prewarm?: (level?: 'probe' | 'full') => void;\n suspend?: () => void;\n}\n\nexport function useSandboxAssistantTransport(): AssistantTransport {\n return useSharedTransport({\n product: 'brainyrich',\n gatherPageContext: gatherPageContext,\n enableCredits: true,\n });\n}\n"],"mappings":";;;AAyBA,SAAgB,IAAmD;AACjE,QAAO,EAAmB;EACxB,SAAS;EACU;EACnB,eAAe;EAChB,CAAC"}
1
+ {"version":3,"file":"createSandboxAssistantTransport.js","names":[],"sources":["../../../src/brainyrich/services/createSandboxAssistantTransport.ts"],"sourcesContent":["/**\n * brainyrich adapter for the shared fe-libs AssistantWidget transport.\n *\n * The sandbox lifecycle + poll/stream loop now lives in\n * `@burdenoff/fe-libs/shared/assistant` (one implementation for all products);\n * this is a thin wrapper. The exported name/shape are unchanged so app-shell\n * imports don't move. The public return type is a LOCALLY-declared structural\n * mirror — never re-export fe-libs types (vite-plugin-dts path rewriting).\n */\n\nimport { useSandboxAssistantTransport as useSharedTransport } from '@burdenoff/fe-libs/shared/assistant';\nimport { gatherPageContext } from '../utils/pageContext';\n\ninterface AssistantSendArgs {\n prompt: string;\n onProgress: (partialText: string) => void;\n signal: AbortSignal;\n}\n\nexport interface AssistantTransport {\n sendPrompt: (args: AssistantSendArgs) => Promise<{ text: string }>;\n prewarm?: (level?: 'probe' | 'full') => void;\n suspend?: () => void;\n}\n\nexport function useSandboxAssistantTransport(): AssistantTransport {\n return useSharedTransport({\n product: 'brainyrich',\n gatherPageContext: gatherPageContext,\n enableCredits: true,\n });\n}\n"],"mappings":";;;AAyBA,SAAgB,IAAmD;CACjE,OAAO,EAAmB;EACxB,SAAS;EACU;EACnB,eAAe;CACjB,CAAC;AACH"}
@@ -108,6 +108,21 @@ export interface BraFirmReport {
108
108
  currency: string;
109
109
  byAdvisor: BraFirmAdvisorBreakdown[];
110
110
  }
111
+ export interface BraHouseholdStatusBreakdown {
112
+ status: BraHouseholdStatus;
113
+ count: number;
114
+ aum: number;
115
+ }
116
+ export interface BraAdminFirmSummary {
117
+ workspaceId: string;
118
+ asOf: BraDateTime;
119
+ totalAdvisors: number;
120
+ totalHouseholds: number;
121
+ totalAum: number;
122
+ currency: string;
123
+ byAdvisor: BraFirmAdvisorBreakdown[];
124
+ byHouseholdStatus: BraHouseholdStatusBreakdown[];
125
+ }
111
126
  export interface BraAdvisorBranding {
112
127
  id: string;
113
128
  workspaceId: string;
@@ -1 +1 @@
1
- {"version":3,"file":"bra.d.ts","sourceRoot":"","sources":["../../../src/brainyrich/types/bra.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"bra.d.ts","sourceRoot":"","sources":["../../../src/brainyrich/types/bra.ts"],"names":[],"mappings":"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"}