@paro.io/expert-shared-components 1.14.42 → 1.14.45

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 (243) hide show
  1. package/LICENSE +21 -21
  2. package/README.md +2 -2
  3. package/lib/README.md +2 -0
  4. package/lib/components/ClientReferencesSection/DeleteButton.js +11 -11
  5. package/lib/components/ClientReferencesSection/ParoError.js +10 -10
  6. package/lib/components/ClientReferencesSection/TagsSection.js +2 -2
  7. package/lib/components/ClientReferencesSection/styles/BrandedTypography.js +2 -2
  8. package/lib/components/ClientReferencesSection/styles/Buttons.js +15 -15
  9. package/lib/components/ClientReferencesSection/styles/Name.js +5 -5
  10. package/lib/components/ClientReferencesSection/styles/NullContentConditionalColor.js +4 -4
  11. package/lib/components/ClientReferencesSection/styles/SectionBody.js +11 -11
  12. package/lib/components/ClientReferencesSection/styles/SectionTitle.js +6 -6
  13. package/lib/components/ClientReferencesSection/styles/Tags.js +2 -2
  14. package/lib/components/DiscussionThread/DiscussionThread.d.ts +25 -25
  15. package/lib/components/DiscussionThread/DiscussionThread.js +137 -137
  16. package/lib/components/DiscussionThread/chat.d.ts +22 -22
  17. package/lib/components/DiscussionThread/chat.js +106 -106
  18. package/lib/components/DiscussionThread/index.d.ts +1 -1
  19. package/lib/components/DiscussionThread/index.js +5 -5
  20. package/lib/components/DocumentCenter/DocumentTable.d.ts +15 -15
  21. package/lib/components/DocumentCenter/DocumentTable.js +350 -350
  22. package/lib/components/DocumentCenter/DragDropUpload.js +4 -4
  23. package/lib/components/DocumentCenter/MultiFileUploadSection.js +18 -51
  24. package/lib/components/DocumentCenter/UploadFilesButton.d.ts +6 -6
  25. package/lib/components/DocumentCenter/UploadFilesButton.js +29 -29
  26. package/lib/components/EarningsTracker/ActiveProjectCard.d.ts +52 -52
  27. package/lib/components/EarningsTracker/ActiveProjectCard.js +161 -161
  28. package/lib/components/EarningsTracker/CenterCardUI.d.ts +13 -13
  29. package/lib/components/EarningsTracker/CenterCardUI.js +134 -134
  30. package/lib/components/EarningsTracker/EarningsTracker.d.ts +52 -52
  31. package/lib/components/EarningsTracker/EarningsTracker.js +508 -508
  32. package/lib/components/EarningsTracker/EditDateModal.d.ts +22 -22
  33. package/lib/components/EarningsTracker/EditDateModal.js +149 -149
  34. package/lib/components/EarningsTracker/EmailModal.d.ts +14 -14
  35. package/lib/components/EarningsTracker/EmailModal.js +79 -79
  36. package/lib/components/EarningsTracker/EndProjectModal.d.ts +56 -56
  37. package/lib/components/EarningsTracker/EndProjectModal.js +221 -221
  38. package/lib/components/EarningsTracker/LeftCardUI.d.ts +18 -18
  39. package/lib/components/EarningsTracker/LeftCardUI.js +189 -189
  40. package/lib/components/EarningsTracker/LogTimeModalAuthenticated.d.ts +52 -52
  41. package/lib/components/EarningsTracker/LogTimeModalAuthenticated.js +358 -358
  42. package/lib/components/EarningsTracker/ProgressBar.d.ts +4 -4
  43. package/lib/components/EarningsTracker/ProgressBar.js +66 -66
  44. package/lib/components/EarningsTracker/ReviewRequestModal.d.ts +17 -17
  45. package/lib/components/EarningsTracker/ReviewRequestModal.js +135 -135
  46. package/lib/components/EarningsTracker/RightCardUI.d.ts +46 -46
  47. package/lib/components/EarningsTracker/RightCardUI.js +231 -231
  48. package/lib/components/EarningsTracker/index.d.ts +1 -1
  49. package/lib/components/EarningsTracker/index.js +5 -5
  50. package/lib/components/Escalations/CustomTag.d.ts +3 -3
  51. package/lib/components/Escalations/CustomTag.js +25 -25
  52. package/lib/components/Escalations/ViewReponseModal.d.ts +8 -8
  53. package/lib/components/Escalations/ViewReponseModal.js +27 -27
  54. package/lib/components/ExpertProfileHeader/ActionButtonSection.js +6 -6
  55. package/lib/components/ExpertProfileHeader/ProfileSection.js +7 -7
  56. package/lib/components/Invoices/TestDecisionSection.d.ts +1 -1
  57. package/lib/components/Invoices/TestDecisionSection.js +126 -126
  58. package/lib/components/OrganizationChart/OrganizationChart.d.ts +15 -15
  59. package/lib/components/OrganizationChart/OrganizationChart.js +312 -312
  60. package/lib/components/OrganizationChart/PersonCard.js +5 -5
  61. package/lib/components/OrganizationChart/utils.js +79 -79
  62. package/lib/components/ProjectCard/ProgressBar.js +4 -4
  63. package/lib/components/ProjectCard/ReviewRequestModal.js +5 -5
  64. package/lib/components/ProjectIntelligence/MissingInformation/index.js +1 -1
  65. package/lib/components/Reviews/Pagination.js +6 -6
  66. package/lib/components/ReviewsTab/RatingHeader.js +6 -6
  67. package/lib/components/ReviewsTab/expert-shared-components.code-workspace +20 -20
  68. package/lib/components/ReviewsTab/reviewRequestModal.js +5 -5
  69. package/lib/components/shared/Image.js +13 -13
  70. package/lib/components/shared/ProfileTextField.d.ts +18 -18
  71. package/lib/components/shared/ProfileTextField.js +16 -16
  72. package/lib/components/shared/StyledActionButtons.d.ts +7 -7
  73. package/lib/components/shared/StyledActionButtons.js +15 -15
  74. package/lib/components/shared/ToastNotification.d.ts +10 -10
  75. package/lib/components/shared/ToastNotification.js +63 -63
  76. package/lib/index.d.ts +13 -0
  77. package/lib/index.js +27 -1
  78. package/lib/package.json +68 -0
  79. package/lib/tax-axis/components/clientReport/ClientReportCover.d.ts +9 -0
  80. package/lib/tax-axis/components/clientReport/ClientReportCover.js +39 -0
  81. package/lib/tax-axis/components/clientReport/ClientReportTOC.d.ts +8 -0
  82. package/lib/tax-axis/components/clientReport/ClientReportTOC.js +24 -0
  83. package/lib/tax-axis/components/clientReport/ClientReportToolbar.d.ts +2 -0
  84. package/lib/tax-axis/components/clientReport/ClientReportToolbar.js +6 -0
  85. package/lib/tax-axis/components/clientReport/ETRChart.d.ts +10 -0
  86. package/lib/tax-axis/components/clientReport/ETRChart.js +50 -0
  87. package/lib/tax-axis/components/clientReport/ExecutiveSummary.d.ts +15 -0
  88. package/lib/tax-axis/components/clientReport/ExecutiveSummary.js +73 -0
  89. package/lib/tax-axis/components/clientReport/FootnoteBlock.d.ts +11 -0
  90. package/lib/tax-axis/components/clientReport/FootnoteBlock.js +34 -0
  91. package/lib/tax-axis/components/clientReport/ImplementationRoadmap.d.ts +26 -0
  92. package/lib/tax-axis/components/clientReport/ImplementationRoadmap.js +51 -0
  93. package/lib/tax-axis/components/clientReport/ImplementationTimelineChart.d.ts +10 -0
  94. package/lib/tax-axis/components/clientReport/ImplementationTimelineChart.js +49 -0
  95. package/lib/tax-axis/components/clientReport/Methodology.d.ts +10 -0
  96. package/lib/tax-axis/components/clientReport/Methodology.js +40 -0
  97. package/lib/tax-axis/components/clientReport/QuarterlyCashChart.d.ts +10 -0
  98. package/lib/tax-axis/components/clientReport/QuarterlyCashChart.js +56 -0
  99. package/lib/tax-axis/components/clientReport/RecommendedStrategies.d.ts +13 -0
  100. package/lib/tax-axis/components/clientReport/RecommendedStrategies.js +51 -0
  101. package/lib/tax-axis/components/clientReport/SavingsStackChart.d.ts +10 -0
  102. package/lib/tax-axis/components/clientReport/SavingsStackChart.js +66 -0
  103. package/lib/tax-axis/components/clientReport/SectionOpener.d.ts +11 -0
  104. package/lib/tax-axis/components/clientReport/SectionOpener.js +20 -0
  105. package/lib/tax-axis/components/clientReport/Sidebar.d.ts +8 -0
  106. package/lib/tax-axis/components/clientReport/Sidebar.js +37 -0
  107. package/lib/tax-axis/components/clientReport/StrategyCard.d.ts +16 -0
  108. package/lib/tax-axis/components/clientReport/StrategyCard.js +63 -0
  109. package/lib/tax-axis/components/clientReport/TaxAxisClientReport.d.ts +9 -0
  110. package/lib/tax-axis/components/clientReport/TaxAxisClientReport.js +125 -0
  111. package/lib/tax-axis/components/clientReport/applyFootnotes.d.ts +12 -0
  112. package/lib/tax-axis/components/clientReport/applyFootnotes.js +43 -0
  113. package/lib/tax-axis/components/clientReport/palette.d.ts +28 -0
  114. package/lib/tax-axis/components/clientReport/palette.js +34 -0
  115. package/lib/tax-axis/components/dashboard/ConfidenceArc.d.ts +7 -0
  116. package/lib/tax-axis/components/dashboard/ConfidenceArc.js +20 -0
  117. package/lib/tax-axis/components/dashboard/DashboardActions.d.ts +13 -0
  118. package/lib/tax-axis/components/dashboard/DashboardActions.js +96 -0
  119. package/lib/tax-axis/components/dashboard/DashboardSummary.d.ts +11 -0
  120. package/lib/tax-axis/components/dashboard/DashboardSummary.js +98 -0
  121. package/lib/tax-axis/components/dashboard/DashboardTopBar.d.ts +10 -0
  122. package/lib/tax-axis/components/dashboard/DashboardTopBar.js +48 -0
  123. package/lib/tax-axis/components/dashboard/StrategyDetailPanel.d.ts +10 -0
  124. package/lib/tax-axis/components/dashboard/StrategyDetailPanel.js +139 -0
  125. package/lib/tax-axis/components/dashboard/StrategyTile.d.ts +10 -0
  126. package/lib/tax-axis/components/dashboard/StrategyTile.js +82 -0
  127. package/lib/tax-axis/components/dashboard/TaxAxisDashboard.d.ts +12 -0
  128. package/lib/tax-axis/components/dashboard/TaxAxisDashboard.js +284 -0
  129. package/lib/tax-axis/components/dashboard/useCountUp.d.ts +1 -0
  130. package/lib/tax-axis/components/dashboard/useCountUp.js +25 -0
  131. package/lib/tax-axis/components/documents/DocumentCard.d.ts +18 -0
  132. package/lib/tax-axis/components/documents/DocumentCard.js +61 -0
  133. package/lib/tax-axis/components/documents/DocumentTier.d.ts +21 -0
  134. package/lib/tax-axis/components/documents/DocumentTier.js +23 -0
  135. package/lib/tax-axis/components/documents/TaxAxisDocuments.d.ts +8 -0
  136. package/lib/tax-axis/components/documents/TaxAxisDocuments.js +157 -0
  137. package/lib/tax-axis/components/extractionReview/DocumentCard.d.ts +17 -0
  138. package/lib/tax-axis/components/extractionReview/DocumentCard.js +105 -0
  139. package/lib/tax-axis/components/extractionReview/FieldRow.d.ts +17 -0
  140. package/lib/tax-axis/components/extractionReview/FieldRow.js +137 -0
  141. package/lib/tax-axis/components/extractionReview/PurposeBlock.d.ts +7 -0
  142. package/lib/tax-axis/components/extractionReview/PurposeBlock.js +18 -0
  143. package/lib/tax-axis/components/extractionReview/RerunFooter.d.ts +8 -0
  144. package/lib/tax-axis/components/extractionReview/RerunFooter.js +60 -0
  145. package/lib/tax-axis/components/extractionReview/TaxAxisExtractionReview.d.ts +11 -0
  146. package/lib/tax-axis/components/extractionReview/TaxAxisExtractionReview.js +186 -0
  147. package/lib/tax-axis/components/intake/ClientParametersSection.d.ts +7 -0
  148. package/lib/tax-axis/components/intake/ClientParametersSection.js +146 -0
  149. package/lib/tax-axis/components/intake/CpaIntakeQuestionsSection.d.ts +7 -0
  150. package/lib/tax-axis/components/intake/CpaIntakeQuestionsSection.js +93 -0
  151. package/lib/tax-axis/components/intake/IntakeCtaCards.d.ts +9 -0
  152. package/lib/tax-axis/components/intake/IntakeCtaCards.js +30 -0
  153. package/lib/tax-axis/components/intake/RefineAnalysisSection.d.ts +7 -0
  154. package/lib/tax-axis/components/intake/RefineAnalysisSection.js +151 -0
  155. package/lib/tax-axis/components/intake/StateMultiSelect.d.ts +7 -0
  156. package/lib/tax-axis/components/intake/StateMultiSelect.js +90 -0
  157. package/lib/tax-axis/components/intake/StrategyRadar.d.ts +7 -0
  158. package/lib/tax-axis/components/intake/StrategyRadar.js +240 -0
  159. package/lib/tax-axis/components/intake/TaxAxisIntake.d.ts +8 -0
  160. package/lib/tax-axis/components/intake/TaxAxisIntake.js +38 -0
  161. package/lib/tax-axis/components/intake/intakeSchema.d.ts +97 -0
  162. package/lib/tax-axis/components/intake/intakeSchema.js +91 -0
  163. package/lib/tax-axis/components/preparerWorkpaper/CalculationTraceAccordion.d.ts +9 -0
  164. package/lib/tax-axis/components/preparerWorkpaper/CalculationTraceAccordion.js +19 -0
  165. package/lib/tax-axis/components/preparerWorkpaper/EngagementHeader.d.ts +9 -0
  166. package/lib/tax-axis/components/preparerWorkpaper/EngagementHeader.js +43 -0
  167. package/lib/tax-axis/components/preparerWorkpaper/Position6694Accordion.d.ts +9 -0
  168. package/lib/tax-axis/components/preparerWorkpaper/Position6694Accordion.js +25 -0
  169. package/lib/tax-axis/components/preparerWorkpaper/PriorityGroup.d.ts +14 -0
  170. package/lib/tax-axis/components/preparerWorkpaper/PriorityGroup.js +20 -0
  171. package/lib/tax-axis/components/preparerWorkpaper/Section6694Summary.d.ts +9 -0
  172. package/lib/tax-axis/components/preparerWorkpaper/Section6694Summary.js +36 -0
  173. package/lib/tax-axis/components/preparerWorkpaper/SourceDocumentsAccordion.d.ts +9 -0
  174. package/lib/tax-axis/components/preparerWorkpaper/SourceDocumentsAccordion.js +20 -0
  175. package/lib/tax-axis/components/preparerWorkpaper/StrategyWorkpaperCard.d.ts +14 -0
  176. package/lib/tax-axis/components/preparerWorkpaper/StrategyWorkpaperCard.js +53 -0
  177. package/lib/tax-axis/components/preparerWorkpaper/TaxAxisPreparerWorkpaper.d.ts +9 -0
  178. package/lib/tax-axis/components/preparerWorkpaper/TaxAxisPreparerWorkpaper.js +175 -0
  179. package/lib/tax-axis/components/presentationMode/TaxAxisPresentationMode.d.ts +7 -0
  180. package/lib/tax-axis/components/presentationMode/TaxAxisPresentationMode.js +245 -0
  181. package/lib/tax-axis/components/processing/ProcessingStages.d.ts +7 -0
  182. package/lib/tax-axis/components/processing/ProcessingStages.js +17 -0
  183. package/lib/tax-axis/components/processing/TaxAxisProcessing.d.ts +7 -0
  184. package/lib/tax-axis/components/processing/TaxAxisProcessing.js +105 -0
  185. package/lib/tax-axis/components/prospectReport/ProspectCover.d.ts +10 -0
  186. package/lib/tax-axis/components/prospectReport/ProspectCover.js +47 -0
  187. package/lib/tax-axis/components/prospectReport/ProspectDocuments.d.ts +9 -0
  188. package/lib/tax-axis/components/prospectReport/ProspectDocuments.js +31 -0
  189. package/lib/tax-axis/components/prospectReport/ProspectNextSteps.d.ts +13 -0
  190. package/lib/tax-axis/components/prospectReport/ProspectNextSteps.js +37 -0
  191. package/lib/tax-axis/components/prospectReport/ProspectPrintView.d.ts +26 -0
  192. package/lib/tax-axis/components/prospectReport/ProspectPrintView.js +183 -0
  193. package/lib/tax-axis/components/prospectReport/ProspectStrategyCard.d.ts +10 -0
  194. package/lib/tax-axis/components/prospectReport/ProspectStrategyCard.js +52 -0
  195. package/lib/tax-axis/components/prospectReport/SampleAnalysisPreview.d.ts +7 -0
  196. package/lib/tax-axis/components/prospectReport/SampleAnalysisPreview.js +120 -0
  197. package/lib/tax-axis/components/prospectReport/TaxAxisProspectReport.d.ts +9 -0
  198. package/lib/tax-axis/components/prospectReport/TaxAxisProspectReport.js +173 -0
  199. package/lib/tax-axis/components/prospectReport/TaxPositionGap.d.ts +15 -0
  200. package/lib/tax-axis/components/prospectReport/TaxPositionGap.js +45 -0
  201. package/lib/tax-axis/components/prospectReport/theme.d.ts +26 -0
  202. package/lib/tax-axis/components/prospectReport/theme.js +33 -0
  203. package/lib/tax-axis/components/shared/ReportToolbar.d.ts +12 -0
  204. package/lib/tax-axis/components/shared/ReportToolbar.js +81 -0
  205. package/lib/tax-axis/components/shared/SectionHeader.d.ts +8 -0
  206. package/lib/tax-axis/components/shared/SectionHeader.js +15 -0
  207. package/lib/tax-axis/components/shared/TaxAxisBadge.d.ts +12 -0
  208. package/lib/tax-axis/components/shared/TaxAxisBadge.js +34 -0
  209. package/lib/tax-axis/components/shared/TaxAxisButton.d.ts +12 -0
  210. package/lib/tax-axis/components/shared/TaxAxisButton.js +17 -0
  211. package/lib/tax-axis/components/shared/TaxAxisCard.d.ts +9 -0
  212. package/lib/tax-axis/components/shared/TaxAxisCard.js +13 -0
  213. package/lib/tax-axis/index.d.ts +25 -0
  214. package/lib/tax-axis/index.js +51 -0
  215. package/lib/tax-axis/lib/compute/index.d.ts +8 -0
  216. package/lib/tax-axis/lib/compute/index.js +163 -0
  217. package/lib/tax-axis/lib/data/documents.d.ts +3 -0
  218. package/lib/tax-axis/lib/data/documents.js +33 -0
  219. package/lib/tax-axis/lib/data/extractedData.d.ts +2 -0
  220. package/lib/tax-axis/lib/data/extractedData.js +47 -0
  221. package/lib/tax-axis/lib/data/footnoteData.d.ts +2 -0
  222. package/lib/tax-axis/lib/data/footnoteData.js +48 -0
  223. package/lib/tax-axis/lib/data/index.d.ts +11 -0
  224. package/lib/tax-axis/lib/data/index.js +31 -0
  225. package/lib/tax-axis/lib/data/nextSteps.d.ts +2 -0
  226. package/lib/tax-axis/lib/data/nextSteps.js +35 -0
  227. package/lib/tax-axis/lib/data/sidebarLookup.d.ts +2 -0
  228. package/lib/tax-axis/lib/data/sidebarLookup.js +90 -0
  229. package/lib/tax-axis/lib/data/sourceDescriptions.d.ts +1 -0
  230. package/lib/tax-axis/lib/data/sourceDescriptions.js +32 -0
  231. package/lib/tax-axis/lib/data/states.d.ts +6 -0
  232. package/lib/tax-axis/lib/data/states.js +25 -0
  233. package/lib/tax-axis/lib/data/strategies.d.ts +8 -0
  234. package/lib/tax-axis/lib/data/strategies.js +166 -0
  235. package/lib/tax-axis/lib/data/strategyNarrative.d.ts +3 -0
  236. package/lib/tax-axis/lib/data/strategyNarrative.js +170 -0
  237. package/lib/tax-axis/lib/data/strategyProspect.d.ts +2 -0
  238. package/lib/tax-axis/lib/data/strategyProspect.js +66 -0
  239. package/lib/tax-axis/lib/data/workpaperInteractions.d.ts +1 -0
  240. package/lib/tax-axis/lib/data/workpaperInteractions.js +15 -0
  241. package/lib/tax-axis/lib/types/index.d.ts +183 -0
  242. package/lib/tax-axis/lib/types/index.js +7 -0
  243. package/package.json +68 -67
@@ -0,0 +1,125 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || function (mod) {
19
+ if (mod && mod.__esModule) return mod;
20
+ var result = {};
21
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
22
+ __setModuleDefault(result, mod);
23
+ return result;
24
+ };
25
+ Object.defineProperty(exports, "__esModule", { value: true });
26
+ exports.TaxAxisClientReport = TaxAxisClientReport;
27
+ const react_1 = __importStar(require("react"));
28
+ const compute_1 = require("../../lib/compute");
29
+ const palette_1 = require("./palette");
30
+ const ReportToolbar_1 = require("../shared/ReportToolbar");
31
+ const ClientReportCover_1 = require("./ClientReportCover");
32
+ const ClientReportTOC_1 = require("./ClientReportTOC");
33
+ const ExecutiveSummary_1 = require("./ExecutiveSummary");
34
+ const RecommendedStrategies_1 = require("./RecommendedStrategies");
35
+ const ImplementationRoadmap_1 = require("./ImplementationRoadmap");
36
+ const Methodology_1 = require("./Methodology");
37
+ function TaxAxisClientReport({ profile, onBack, onNavigatePreparer }) {
38
+ var _a, _b, _c;
39
+ const [view, setView] = (0, react_1.useState)("client");
40
+ const eligible = (0, react_1.useMemo)(() => (0, compute_1.filterEligibleStrategies)(profile), [profile]);
41
+ const computed = (0, react_1.useMemo)(() => (0, compute_1.computeAllStrategies)(profile), [profile]);
42
+ const totalLo = Math.round(eligible.reduce((a, s) => { var _a, _b; return a + ((_b = (_a = computed.get(s.rank)) === null || _a === void 0 ? void 0 : _a.lo) !== null && _b !== void 0 ? _b : s.lo); }, 0) / 1000);
43
+ const totalHi = Math.round(eligible.reduce((a, s) => { var _a, _b; return a + ((_b = (_a = computed.get(s.rank)) === null || _a === void 0 ? void 0 : _a.hi) !== null && _b !== void 0 ? _b : s.hi); }, 0) / 1000);
44
+ const top3 = [...eligible].sort((a, b) => b.score - a.score).slice(0, 3);
45
+ const hasOBBBA = top3.some(s => s.cat === "obbba_new");
46
+ const bizName = profile.bizName || "Client";
47
+ // Roadmap bucket aggregation (Patch D)
48
+ const bucketDefs = [
49
+ { key: "now", label: "THIS WEEK", color: palette_1.P.green },
50
+ { key: "30d", label: "WITHIN 30 DAYS", color: palette_1.P.teal },
51
+ { key: "90d", label: "WITHIN 90 DAYS", color: palette_1.P.orange },
52
+ { key: "filing", label: "AT TAX FILING", color: palette_1.P.gray500 },
53
+ ];
54
+ const bucketTotals = {};
55
+ bucketDefs.forEach(b => {
56
+ const strategies = eligible.filter(s => s.timelineBucket === b.key).sort((a, c) => c.score - a.score);
57
+ const lo = strategies.reduce((a, s) => { var _a, _b; return a + ((_b = (_a = computed.get(s.rank)) === null || _a === void 0 ? void 0 : _a.lo) !== null && _b !== void 0 ? _b : s.lo); }, 0);
58
+ const hi = strategies.reduce((a, s) => { var _a, _b; return a + ((_b = (_a = computed.get(s.rank)) === null || _a === void 0 ? void 0 : _a.hi) !== null && _b !== void 0 ? _b : s.hi); }, 0);
59
+ bucketTotals[b.key] = { strategies, lo, hi };
60
+ });
61
+ const activeBuckets = bucketDefs.filter(b => bucketTotals[b.key].strategies.length > 0);
62
+ const nowCount = ((_a = bucketTotals.now) === null || _a === void 0 ? void 0 : _a.strategies.length) || 0;
63
+ const nowMidK = Math.round(((((_b = bucketTotals.now) === null || _b === void 0 ? void 0 : _b.lo) || 0) + (((_c = bucketTotals.now) === null || _c === void 0 ? void 0 : _c.hi) || 0)) / 2 / 1000);
64
+ const handleToggle = (v) => {
65
+ if (v === "preparer" && onNavigatePreparer) {
66
+ onNavigatePreparer();
67
+ return;
68
+ }
69
+ setView(v);
70
+ };
71
+ const handlePrintClient = () => {
72
+ window.print();
73
+ };
74
+ const handlePrintPreparer = () => {
75
+ if (onNavigatePreparer) {
76
+ onNavigatePreparer();
77
+ }
78
+ };
79
+ return (react_1.default.createElement("div", { style: { background: palette_1.P.offWhite, minHeight: "100vh", fontFamily: palette_1.P.body, color: palette_1.P.gray900 } },
80
+ react_1.default.createElement("style", null, `
81
+ @import url('https://fonts.googleapis.com/css2?family=Playfair+Display:wght@400;500;600;700;800&display=swap');
82
+ @page { size: letter; margin: 0.75in 1in 1in 1in; orphans: 3; widows: 3; }
83
+ @media print {
84
+ body { print-color-adjust: exact; -webkit-print-color-adjust: exact; }
85
+ .no-print { display: none !important; }
86
+ .MuiDrawer-root, .MuiDrawer-permanent, .MuiDrawer-paper,
87
+ .MuiAppBar-root { display: none !important; }
88
+ .flex.w-full.bg-white.p-2.shadow-sm { display: none !important; }
89
+ .flex.flex-col.w-full { margin-top: 0 !important; }
90
+ main.w-full { width: 100% !important; margin-left: 0 !important; padding: 0 !important; }
91
+ .page-break { page-break-after: always; }
92
+ .section-opener { page-break-before: always; break-before: page; }
93
+ .section-opener:first-of-type { page-break-before: auto; break-before: auto; }
94
+ .strategy-card { page-break-inside: avoid; break-inside: avoid; }
95
+ .fn-block { break-before: avoid; page-break-before: avoid; break-inside: avoid; page-break-inside: avoid; }
96
+ .card-footer { break-inside: avoid; page-break-inside: avoid; break-before: avoid; page-break-before: avoid; }
97
+ .chart-block { page-break-inside: avoid; break-inside: avoid; }
98
+ .bucket-card { break-inside: avoid; page-break-inside: avoid; }
99
+ .source-entry { break-inside: avoid; page-break-inside: avoid; }
100
+ .report-meta { break-inside: avoid; page-break-inside: avoid; }
101
+ .toc-page { break-after: page; page-break-after: always; }
102
+ * { color-adjust: exact; -webkit-print-color-adjust: exact; }
103
+ p, span, div, td, th, li { color: #212529 !important; }
104
+ h1, h2, h3, h4, h5, h6, strong, b { color: #060821 !important; }
105
+ }
106
+ `),
107
+ react_1.default.createElement(ReportToolbar_1.ReportToolbar, { view: view, palette: palette_1.P, onBack: onBack, onToggle: handleToggle, onPrintClient: handlePrintClient, onPrintPreparer: handlePrintPreparer }),
108
+ react_1.default.createElement("div", { style: { maxWidth: 680, margin: "0 auto", padding: "32px 20px 60px" } },
109
+ react_1.default.createElement(ClientReportCover_1.ClientReportCover, { profile: profile, palette: palette_1.P }),
110
+ react_1.default.createElement(ClientReportTOC_1.ClientReportTOC, { bizName: bizName, palette: palette_1.P }),
111
+ react_1.default.createElement(ExecutiveSummary_1.ExecutiveSummary, { profile: profile, eligible: eligible, computed: computed, totalLo: totalLo, totalHi: totalHi, nowCount: nowCount, top3: top3, palette: palette_1.P }),
112
+ react_1.default.createElement("div", { style: { background: palette_1.P.gray50, borderLeft: "3px solid " + palette_1.P.gray300, borderRadius: "0 8px 8px 0", padding: "14px 20px", marginBottom: 20, fontSize: 11, color: palette_1.P.gray500, lineHeight: 1.7, fontFamily: palette_1.P.body } },
113
+ "This summary was prepared using TaxAxis, Paro's AI-powered tax analysis engine. Savings estimates are based on financial data provided for tax year " + profile.year + " (" + (profile.taxDataYears || "1 year") + " of data). All figures are estimates. Your tax preparer has reviewed these recommendations.",
114
+ hasOBBBA && " Some strategies reference provisions from the One Big Beautiful Bill Act (OBBBA), signed July 4, 2025, with limited IRS guidance."),
115
+ react_1.default.createElement(RecommendedStrategies_1.RecommendedStrategies, { profile: profile, eligible: eligible, computed: computed, top3: top3, hasOBBBA: hasOBBBA, palette: palette_1.P }),
116
+ react_1.default.createElement(ImplementationRoadmap_1.ImplementationRoadmap, { eligible: eligible, computed: computed, top3: top3, nowCount: nowCount, nowMidK: nowMidK, bucketDefs: bucketDefs, bucketTotals: bucketTotals, activeBuckets: activeBuckets, palette: palette_1.P }),
117
+ react_1.default.createElement(Methodology_1.Methodology, { profile: profile, eligible: eligible, palette: palette_1.P }),
118
+ react_1.default.createElement("div", { style: { padding: "16px 20px", marginBottom: 16, fontSize: 10, color: palette_1.P.gray400, lineHeight: 1.7, fontFamily: palette_1.P.body } }, "This summary was generated by TaxAxis, an AI-powered analysis tool by Paro. Recommendations are based on financial data provided and current tax law as of April 2026, including OBBBA provisions. These are estimates, not guarantees. Consult your tax preparer before implementing any strategy. This is not legal or financial advice."),
119
+ react_1.default.createElement("div", { style: { display: "flex", justifyContent: "space-between", alignItems: "center", padding: "12px 0", borderTop: "1px solid " + palette_1.P.gray200, fontSize: 10, color: palette_1.P.gray400, fontFamily: palette_1.P.mono } },
120
+ react_1.default.createElement("div", { style: { display: "flex", alignItems: "center", gap: 6 } },
121
+ react_1.default.createElement("div", { style: { width: 14, height: 14, borderRadius: 3, background: palette_1.P.teal, display: "flex", alignItems: "center", justifyContent: "center" } },
122
+ react_1.default.createElement("span", { style: { fontSize: 7, fontWeight: 700, color: palette_1.P.white } }, "P")),
123
+ "Paro TaxAxis \u00B7 Confidential"),
124
+ react_1.default.createElement("span", null, "Page 1 of 1")))));
125
+ }
@@ -0,0 +1,12 @@
1
+ import React from "react";
2
+ import type { FootnoteEntry } from "../../lib/types";
3
+ import type { Palette } from "./palette";
4
+ export interface FootnoteCounter {
5
+ next: number;
6
+ assigned: {
7
+ num: number;
8
+ note: string;
9
+ }[];
10
+ cardKey: number;
11
+ }
12
+ export declare function applyFootnotes(text: string, footnotes: FootnoteEntry[], counter: FootnoteCounter, palette: Palette): React.ReactNode;
@@ -0,0 +1,43 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.applyFootnotes = applyFootnotes;
7
+ const react_1 = __importDefault(require("react"));
8
+ function applyFootnotes(text, footnotes, counter, palette) {
9
+ if (!footnotes || footnotes.length === 0)
10
+ return text;
11
+ const hits = [];
12
+ for (const fn of footnotes) {
13
+ const idx = text.indexOf(fn.match);
14
+ if (idx !== -1) {
15
+ hits.push(Object.assign(Object.assign({}, fn), { position: idx, endPosition: idx + fn.match.length }));
16
+ }
17
+ }
18
+ if (hits.length === 0)
19
+ return text;
20
+ hits.sort((a, b) => a.position - b.position);
21
+ const elements = [];
22
+ let cursor = 0;
23
+ for (const hit of hits) {
24
+ elements.push(text.slice(cursor, hit.endPosition));
25
+ counter.next += 1;
26
+ const num = counter.next;
27
+ counter.assigned.push({ num, note: hit.note });
28
+ elements.push(react_1.default.createElement("sup", { key: "fn-" + counter.cardKey + "-" + num, style: {
29
+ fontSize: 9,
30
+ fontFamily: palette.mono,
31
+ color: palette.teal,
32
+ fontWeight: 600,
33
+ marginLeft: 1,
34
+ verticalAlign: "super",
35
+ lineHeight: 0,
36
+ } }, num));
37
+ cursor = hit.endPosition;
38
+ }
39
+ if (cursor < text.length) {
40
+ elements.push(text.slice(cursor));
41
+ }
42
+ return elements;
43
+ }
@@ -0,0 +1,28 @@
1
+ export declare const P: {
2
+ readonly navy: "#060821";
3
+ readonly teal: "#248384";
4
+ readonly tealLt: "#A1E5E6";
5
+ readonly tealPale: "#E8F6F6";
6
+ readonly orange: "#FB9A1D";
7
+ readonly orangePale: "#FFF5E6";
8
+ readonly white: "#FFFFFF";
9
+ readonly offWhite: "#FAFBFC";
10
+ readonly gray50: "#F8F9FA";
11
+ readonly gray100: "#F1F3F5";
12
+ readonly gray200: "#E9ECEF";
13
+ readonly gray300: "#DEE2E6";
14
+ readonly gray400: "#CED4DA";
15
+ readonly gray500: "#ADB5BD";
16
+ readonly gray600: "#868E96";
17
+ readonly gray700: "#495057";
18
+ readonly gray800: "#343A40";
19
+ readonly gray900: "#212529";
20
+ readonly green: "#0F6E56";
21
+ readonly greenPale: "#E6F5EE";
22
+ readonly red: "#993C1D";
23
+ readonly redPale: "#FEF0EB";
24
+ readonly head: "'Playfair Display','Georgia','Times New Roman',serif";
25
+ readonly body: "'Inter',-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,sans-serif";
26
+ readonly mono: "'JetBrains Mono','Fira Code',monospace";
27
+ };
28
+ export type Palette = typeof P;
@@ -0,0 +1,34 @@
1
+ "use strict";
2
+ // ═══════════════════════════════════════════════════════════════════
3
+ // ClientReport — Light-theme palette (P)
4
+ // Verbatim from the mock (App.jsx:3041-3051).
5
+ // ═══════════════════════════════════════════════════════════════════
6
+ Object.defineProperty(exports, "__esModule", { value: true });
7
+ exports.P = void 0;
8
+ exports.P = {
9
+ navy: "#060821",
10
+ teal: "#248384",
11
+ tealLt: "#A1E5E6",
12
+ tealPale: "#E8F6F6",
13
+ orange: "#FB9A1D",
14
+ orangePale: "#FFF5E6",
15
+ white: "#FFFFFF",
16
+ offWhite: "#FAFBFC",
17
+ gray50: "#F8F9FA",
18
+ gray100: "#F1F3F5",
19
+ gray200: "#E9ECEF",
20
+ gray300: "#DEE2E6",
21
+ gray400: "#CED4DA",
22
+ gray500: "#ADB5BD",
23
+ gray600: "#868E96",
24
+ gray700: "#495057",
25
+ gray800: "#343A40",
26
+ gray900: "#212529",
27
+ green: "#0F6E56",
28
+ greenPale: "#E6F5EE",
29
+ red: "#993C1D",
30
+ redPale: "#FEF0EB",
31
+ head: "'Playfair Display','Georgia','Times New Roman',serif",
32
+ body: "'Inter',-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,sans-serif",
33
+ mono: "'JetBrains Mono','Fira Code',monospace",
34
+ };
@@ -0,0 +1,7 @@
1
+ import React from "react";
2
+ interface ConfidenceArcProps {
3
+ score: number;
4
+ size?: number;
5
+ }
6
+ export declare function ConfidenceArc({ score, size }: ConfidenceArcProps): React.JSX.Element;
7
+ export {};
@@ -0,0 +1,20 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.ConfidenceArc = ConfidenceArc;
7
+ const react_1 = __importDefault(require("react"));
8
+ function ConfidenceArc({ score, size = 44 }) {
9
+ const r = size / 2 - 4;
10
+ const c = 2 * Math.PI * r;
11
+ const f = (score / 100) * c;
12
+ // tax-axis tokens: teal #248384, orange #FB9A1D, red #993C1D
13
+ const col = score >= 85 ? "#248384" : score >= 70 ? "#FB9A1D" : "#993C1D";
14
+ return (react_1.default.createElement("div", { style: { position: "relative", width: size, height: size, flexShrink: 0 } },
15
+ react_1.default.createElement("svg", { width: size, height: size, style: { transform: "rotate(-90deg)" } },
16
+ react_1.default.createElement("circle", { cx: size / 2, cy: size / 2, r: r, fill: "none", stroke: "#1A1D3A", strokeWidth: 3 }),
17
+ react_1.default.createElement("circle", { cx: size / 2, cy: size / 2, r: r, fill: "none", stroke: col, strokeWidth: 3, strokeDasharray: `${f} ${c}`, strokeLinecap: "round", style: { transition: "stroke-dasharray .8s" } })),
18
+ react_1.default.createElement("div", { className: "absolute inset-0 flex items-center justify-center" },
19
+ react_1.default.createElement("span", { className: "text-xs font-bold text-tax-axis-text font-tax-axis-mono" }, score))));
20
+ }
@@ -0,0 +1,13 @@
1
+ import React from "react";
2
+ import type { ClientProfile, Strategy, ComputedMap } from "../../lib/types";
3
+ interface DashboardActionsProps {
4
+ profile: ClientProfile;
5
+ dashEligible: Strategy[];
6
+ computed: ComputedMap;
7
+ onDownloadPreparer: () => void;
8
+ onPresent: () => void;
9
+ onSend: () => void;
10
+ onReset: () => void;
11
+ }
12
+ export declare function DashboardActions({ profile, dashEligible, computed, onDownloadPreparer, onPresent, onSend, onReset, }: DashboardActionsProps): React.JSX.Element;
13
+ export {};
@@ -0,0 +1,96 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || function (mod) {
19
+ if (mod && mod.__esModule) return mod;
20
+ var result = {};
21
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
22
+ __setModuleDefault(result, mod);
23
+ return result;
24
+ };
25
+ Object.defineProperty(exports, "__esModule", { value: true });
26
+ exports.DashboardActions = DashboardActions;
27
+ const react_1 = __importStar(require("react"));
28
+ const data_1 = require("../../lib/data");
29
+ const compute_1 = require("../../lib/compute");
30
+ const TaxAxisButton_1 = require("../shared/TaxAxisButton");
31
+ function DashboardActions({ profile, dashEligible, computed, onDownloadPreparer, onPresent, onSend, onReset, }) {
32
+ var _a;
33
+ const [confirmReset, setConfirmReset] = (0, react_1.useState)(false);
34
+ const bizName = profile.bizName || "Client";
35
+ const stateCount = ((_a = profile.states) === null || _a === void 0 ? void 0 : _a.length) || 1;
36
+ const totalLo = dashEligible.reduce((a, s) => { var _a, _b; return a + ((_b = (_a = computed.get(s.rank)) === null || _a === void 0 ? void 0 : _a.lo) !== null && _b !== void 0 ? _b : s.lo); }, 0);
37
+ const totalHi = dashEligible.reduce((a, s) => { var _a, _b; return a + ((_b = (_a = computed.get(s.rank)) === null || _a === void 0 ? void 0 : _a.hi) !== null && _b !== void 0 ? _b : s.hi); }, 0);
38
+ return (react_1.default.createElement(react_1.default.Fragment, null,
39
+ react_1.default.createElement("div", { className: "relative overflow-hidden mt-5 rounded-[14px]", style: {
40
+ background: "linear-gradient(135deg, rgba(36,131,132,0.12), rgba(251,154,29,0.06))",
41
+ border: "1px solid rgba(36,131,132,0.25)",
42
+ padding: "24px 28px",
43
+ } },
44
+ react_1.default.createElement("div", { className: "absolute pointer-events-none", style: {
45
+ top: -20,
46
+ right: -20,
47
+ width: 120,
48
+ height: 120,
49
+ borderRadius: "50%",
50
+ background: "radial-gradient(circle, rgba(251,154,29,0.08), transparent 70%)",
51
+ } }),
52
+ react_1.default.createElement("div", { className: "relative" },
53
+ react_1.default.createElement("div", { className: "flex items-start gap-4" },
54
+ react_1.default.createElement("div", { className: "w-11 h-11 rounded-xl flex items-center justify-center flex-shrink-0", style: {
55
+ background: "linear-gradient(135deg, #FB9A1D, #D07A00)",
56
+ boxShadow: "0 0 20px rgba(251,154,29,0.2)",
57
+ } },
58
+ react_1.default.createElement("svg", { width: "20", height: "20", viewBox: "0 0 24 24", fill: "none" },
59
+ react_1.default.createElement("path", { d: "M22 12h-4l-3 9L9 3l-3 9H2", stroke: "white", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round" }))),
60
+ react_1.default.createElement("div", { className: "flex-1" },
61
+ react_1.default.createElement("h3", { className: "text-[17px] font-bold text-white font-tax-axis-head mb-1.5" },
62
+ "Deliver this to ",
63
+ bizName),
64
+ react_1.default.createElement("p", { className: "text-[13px] text-tax-axis-text-2 leading-[1.7] font-tax-axis-body mb-4" },
65
+ "Send the client-ready summary directly to ",
66
+ bizName,
67
+ ", or generate a branded engagement letter. TaxAxis found ",
68
+ (0, compute_1.fmtK)(totalLo),
69
+ "\u2013",
70
+ (0, compute_1.fmtK)(totalHi),
71
+ "across ",
72
+ data_1.STRATEGIES.length,
73
+ " strategies \u2014 use this to close the engagement or expand scope."),
74
+ react_1.default.createElement("div", { className: "flex gap-2.5 flex-wrap" },
75
+ react_1.default.createElement(TaxAxisButton_1.TaxAxisButton, { variant: "orange", onClick: onSend }, "Send Report to Client"),
76
+ react_1.default.createElement(TaxAxisButton_1.TaxAxisButton, { onClick: onPresent }, "Present to Client"),
77
+ react_1.default.createElement(TaxAxisButton_1.TaxAxisButton, { variant: "secondary" }, "Generate Engagement Letter")))),
78
+ react_1.default.createElement("div", { className: "flex gap-4 mt-4 pt-3.5", style: { borderTop: "1px solid rgba(36,131,132,0.15)" } }, [
79
+ { v: "3x", l: "Faster than Manual" },
80
+ { v: "25", l: "Strategies Scanned" },
81
+ { v: "100%", l: "IRS-Cited" },
82
+ { v: String(stateCount), l: `State${stateCount > 1 ? "s" : ""}` },
83
+ ].map(({ v, l }) => (react_1.default.createElement("div", { key: l },
84
+ react_1.default.createElement("span", { className: "text-base font-bold text-white font-tax-axis-mono" }, v),
85
+ react_1.default.createElement("span", { className: "text-[11px] text-tax-axis-text-3 ml-1.5" }, l))))))),
86
+ confirmReset ? (react_1.default.createElement("div", { className: "mt-2.5 rounded-[10px] flex justify-between items-center", style: {
87
+ padding: "14px 18px",
88
+ background: "#0E1132",
89
+ border: "1px solid rgba(251,154,29,0.25)",
90
+ } },
91
+ react_1.default.createElement("span", { className: "text-[13px] font-tax-axis-body", style: { color: "#FB9A1D" } }, "Start a new analysis?"),
92
+ react_1.default.createElement("div", { className: "flex gap-2" },
93
+ react_1.default.createElement("button", { onClick: () => setConfirmReset(false), className: "px-4 py-2 bg-transparent rounded-lg text-xs text-tax-axis-text-3 font-tax-axis-body", style: { border: "1px solid rgba(36,131,132,0.12)" } }, "Cancel"),
94
+ react_1.default.createElement("button", { onClick: onReset, className: "px-4 py-2 rounded-lg text-xs font-semibold text-white font-tax-axis-body border-0", style: { background: "#FB9A1D" } }, "Confirm Reset")))) : (react_1.default.createElement("div", { className: "mt-2.5" },
95
+ react_1.default.createElement(TaxAxisButton_1.TaxAxisButton, { variant: "secondary", onClick: () => setConfirmReset(true), className: "w-full" }, "New Analysis")))));
96
+ }
@@ -0,0 +1,11 @@
1
+ import React from "react";
2
+ import type { ClientProfile, Strategy, ComputedMap } from "../../lib/types";
3
+ interface DashboardSummaryProps {
4
+ profile: ClientProfile;
5
+ dashEligible: Strategy[];
6
+ computed: ComputedMap;
7
+ dataConfirmed: boolean;
8
+ reviewUnreviewed: number;
9
+ }
10
+ export declare function DashboardSummary({ profile, dashEligible, computed, dataConfirmed, reviewUnreviewed, }: DashboardSummaryProps): React.JSX.Element;
11
+ export {};
@@ -0,0 +1,98 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.DashboardSummary = DashboardSummary;
7
+ const react_1 = __importDefault(require("react"));
8
+ const useCountUp_1 = require("./useCountUp");
9
+ function DashboardSummary({ profile, dashEligible, computed, dataConfirmed, reviewUnreviewed, }) {
10
+ var _a;
11
+ const totalLo = dashEligible.reduce((a, s) => { var _a, _b; return a + ((_b = (_a = computed.get(s.rank)) === null || _a === void 0 ? void 0 : _a.lo) !== null && _b !== void 0 ? _b : s.lo); }, 0);
12
+ const totalHi = dashEligible.reduce((a, s) => { var _a, _b; return a + ((_b = (_a = computed.get(s.rank)) === null || _a === void 0 ? void 0 : _a.hi) !== null && _b !== void 0 ? _b : s.hi); }, 0);
13
+ const bizName = profile.bizName || "Client";
14
+ const stateCount = ((_a = profile.states) === null || _a === void 0 ? void 0 : _a.length) || 1;
15
+ const scoreAvg = Math.round(dashEligible.reduce((a, s) => a + s.score, 0) / (dashEligible.length || 1));
16
+ const loK = (0, useCountUp_1.useCountUp)(Math.round(totalLo / 1000), 1400, 300);
17
+ const hiK = (0, useCountUp_1.useCountUp)(Math.round(totalHi / 1000), 1400, 500);
18
+ const scoreUp = (0, useCountUp_1.useCountUp)(scoreAvg, 1200, 700);
19
+ // Format K values: ≥1000K → $X.XM, <1000K → $XXXK
20
+ const fmtHero = (k) => k >= 1000 ? "$" + (k / 1000).toFixed(1) + "M" : "$" + k + "K";
21
+ const riskVal = parseInt(profile.riskTolerance) || 3;
22
+ const riskLabels = ["", "Very Conservative", "Conservative", "Moderate", "Aggressive", "Very Aggressive"];
23
+ return (react_1.default.createElement("div", { className: "relative overflow-hidden rounded-2xl mb-5", style: {
24
+ background: "radial-gradient(ellipse at 30% 0%, rgba(36,131,132,0.08) 0%, transparent 60%), #0E1132",
25
+ border: "1px solid rgba(36,131,132,0.12)",
26
+ padding: "32px 32px 28px",
27
+ boxShadow: "0 4px 20px rgba(6,8,33,0.3)",
28
+ } },
29
+ react_1.default.createElement("div", { className: "absolute inset-0 opacity-[0.02]", style: {
30
+ backgroundImage: "linear-gradient(#C5C9E0 1px, transparent 1px), linear-gradient(90deg, #C5C9E0 1px, transparent 1px)",
31
+ backgroundSize: "40px 40px",
32
+ } }),
33
+ react_1.default.createElement("div", { className: "relative" },
34
+ react_1.default.createElement("div", { className: "flex items-center justify-between mb-5" },
35
+ react_1.default.createElement("div", { className: "flex items-center gap-2.5" },
36
+ react_1.default.createElement("div", { className: "w-2 h-2 rounded-full bg-tax-axis-teal animate-pulse" }),
37
+ react_1.default.createElement("span", { className: "text-[13px] font-bold text-white uppercase tracking-widest font-tax-axis-head" }, "TaxAxis Intelligence Report")),
38
+ react_1.default.createElement("span", { className: "text-xs text-tax-axis-text-2 font-tax-axis-head font-medium px-2.5 py-1 rounded-[5px]", style: { border: "1px solid rgba(36,131,132,0.12)" } }, "Answered with Evidence")),
39
+ react_1.default.createElement("div", { className: "mb-1.5" },
40
+ react_1.default.createElement("span", { className: "block text-[11px] text-tax-axis-text-2 font-tax-axis-body mb-1.5" }, "Total Estimated Tax Savings"),
41
+ react_1.default.createElement("span", { className: "font-tax-axis-head", style: {
42
+ fontSize: 56,
43
+ fontWeight: 900,
44
+ color: "#A1E5E6",
45
+ letterSpacing: "-3px",
46
+ lineHeight: 1,
47
+ textShadow: "0 0 60px rgba(161,229,230,0.15)",
48
+ } },
49
+ fmtHero(loK),
50
+ "\u2013",
51
+ fmtHero(hiK))),
52
+ react_1.default.createElement("span", { className: "text-sm text-tax-axis-text font-tax-axis-body font-medium" }, bizName),
53
+ react_1.default.createElement("span", { className: "text-[13px] text-tax-axis-text-3 font-tax-axis-body ml-2" },
54
+ "\u00B7 ",
55
+ profile.entity,
56
+ " \u00B7 ",
57
+ stateCount,
58
+ " state",
59
+ stateCount > 1 ? "s" : "",
60
+ " \u00B7 Tax Year ",
61
+ profile.year,
62
+ profile.period &&
63
+ profile.period !== "Full Year" &&
64
+ profile.period !== "Q4 — Full Year" &&
65
+ ` · ${profile.period.split(" ")[0]} YTD Annualized`),
66
+ profile.riskTolerance && (react_1.default.createElement("div", { className: "flex items-center gap-1.5 mt-1.5" },
67
+ react_1.default.createElement("span", { className: "text-[11px] text-tax-axis-text-3 font-tax-axis-body" }, "Risk Profile:"),
68
+ react_1.default.createElement("div", { className: "flex gap-0.5" }, [1, 2, 3, 4, 5].map((i) => (react_1.default.createElement("div", { key: i, className: "w-2 h-2 rounded-sm", style: {
69
+ background: i <= riskVal
70
+ ? riskVal >= 4
71
+ ? "#FB9A1D"
72
+ : "#248384"
73
+ : "rgba(36,131,132,0.15)",
74
+ } })))),
75
+ react_1.default.createElement("span", { className: "text-[10px] font-tax-axis-mono", style: { color: riskVal >= 4 ? "#FB9A1D" : "#9498B8" } }, riskLabels[riskVal]))),
76
+ profile.cpaName && (react_1.default.createElement("div", { className: "text-xs text-tax-axis-text-3 mt-1" },
77
+ "Preparer: ",
78
+ profile.cpaName)),
79
+ react_1.default.createElement("div", { className: "flex gap-6 mt-[22px] pt-[18px]", style: { borderTop: "1px solid rgba(36,131,132,0.12)" } }, [
80
+ { v: String(scoreUp), u: "/100", l: "Avg. Confidence", warn: false, ok: false },
81
+ { v: "25", u: "", l: "Strategies Scanned", warn: false, ok: false },
82
+ {
83
+ v: dataConfirmed ? "Done" : String(reviewUnreviewed),
84
+ u: "",
85
+ l: dataConfirmed ? "Data Confirmed" : "Need Review",
86
+ warn: !dataConfirmed && reviewUnreviewed > 0,
87
+ ok: dataConfirmed,
88
+ },
89
+ ].map(({ v, u, l, warn, ok }) => (react_1.default.createElement("div", { key: l },
90
+ react_1.default.createElement("div", { className: "font-tax-axis-mono font-bold leading-none", style: {
91
+ fontSize: 24,
92
+ letterSpacing: "-1px",
93
+ color: warn ? "#FB9A1D" : ok ? "#0F6E56" : "#C5C9E0",
94
+ } },
95
+ v,
96
+ react_1.default.createElement("span", { className: "text-xs text-tax-axis-text-3 font-normal" }, u)),
97
+ react_1.default.createElement("div", { className: "text-[10px] text-tax-axis-text-2 mt-1 uppercase tracking-wider font-tax-axis-body" }, l))))))));
98
+ }
@@ -0,0 +1,10 @@
1
+ import React from "react";
2
+ export type TopTab = "extraction" | "report";
3
+ interface DashboardTopBarProps {
4
+ topTab: TopTab;
5
+ setTopTab: (tab: TopTab) => void;
6
+ dataConfirmed: boolean;
7
+ reviewUnreviewed: number;
8
+ }
9
+ export declare function DashboardTopBar({ topTab, setTopTab, dataConfirmed, reviewUnreviewed, }: DashboardTopBarProps): React.JSX.Element;
10
+ export {};
@@ -0,0 +1,48 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.DashboardTopBar = DashboardTopBar;
7
+ const react_1 = __importDefault(require("react"));
8
+ function DashboardTopBar({ topTab, setTopTab, dataConfirmed, reviewUnreviewed, }) {
9
+ return (react_1.default.createElement("div", { className: "flex gap-0 mb-5", style: { borderBottom: "1px solid rgba(36,131,132,0.12)" } },
10
+ react_1.default.createElement("button", { onClick: () => setTopTab("extraction"), className: "flex items-center gap-1.5 bg-transparent border-0 font-tax-axis-body mr-6", style: {
11
+ padding: "10px 0",
12
+ fontSize: 14,
13
+ fontWeight: topTab === "extraction" ? 600 : 400,
14
+ color: topTab === "extraction" ? "#A1E5E6" : "#9498B8",
15
+ borderBottom: topTab === "extraction"
16
+ ? "2px solid #248384"
17
+ : "2px solid transparent",
18
+ marginBottom: "-1px",
19
+ } },
20
+ "Extracted Data",
21
+ !dataConfirmed && reviewUnreviewed > 0 && (react_1.default.createElement("span", { className: "text-[10px] font-semibold font-tax-axis-mono rounded-full min-w-[18px] text-center", style: {
22
+ color: "#FB9A1D",
23
+ background: "rgba(251,154,29,0.06)",
24
+ padding: "1px 6px",
25
+ } }, reviewUnreviewed)),
26
+ dataConfirmed && (react_1.default.createElement("svg", { width: "10", height: "10", viewBox: "0 0 12 12", fill: "none" },
27
+ react_1.default.createElement("path", { d: "M2.5 6l3 3 4.5-5", stroke: "#0F6E56", strokeWidth: "1.5", strokeLinecap: "round" })))),
28
+ react_1.default.createElement("button", { onClick: () => { if (dataConfirmed)
29
+ setTopTab("report"); }, className: "flex items-center gap-1.5 bg-transparent border-0 font-tax-axis-body", style: {
30
+ padding: "10px 0",
31
+ fontSize: 14,
32
+ fontWeight: topTab === "report" ? 600 : 400,
33
+ color: dataConfirmed
34
+ ? topTab === "report" ? "#A1E5E6" : "#9498B8"
35
+ : "#6B6E8A",
36
+ borderBottom: topTab === "report"
37
+ ? "2px solid #248384"
38
+ : "2px solid transparent",
39
+ marginBottom: "-1px",
40
+ cursor: dataConfirmed ? "pointer" : "not-allowed",
41
+ opacity: dataConfirmed ? 1 : 0.5,
42
+ } },
43
+ !dataConfirmed && (react_1.default.createElement("svg", { width: "12", height: "12", viewBox: "0 0 12 12", fill: "none" },
44
+ react_1.default.createElement("rect", { x: "3.5", y: "1.5", width: "5", height: "4", rx: "1.5", fill: "none", stroke: "#6B6E8A", strokeWidth: "1.2" }),
45
+ react_1.default.createElement("rect", { x: "2", y: "5", width: "8", height: "6", rx: "1.5", fill: "none", stroke: "#6B6E8A", strokeWidth: "1.2" }))),
46
+ "Intelligence Report",
47
+ !dataConfirmed && (react_1.default.createElement("span", { className: "text-[10px] text-tax-axis-text-4 font-tax-axis-body font-normal" }, "\u00B7 confirm data to unlock")))));
48
+ }
@@ -0,0 +1,10 @@
1
+ import React from "react";
2
+ import type { Strategy, ClientProfile, ComputedMap } from "../../lib/types";
3
+ interface StrategyDetailPanelProps {
4
+ s: Strategy;
5
+ profile: ClientProfile;
6
+ computed: ComputedMap;
7
+ onClose: () => void;
8
+ }
9
+ export declare function StrategyDetailPanel({ s, profile, computed, onClose }: StrategyDetailPanelProps): React.JSX.Element;
10
+ export {};