@paro.io/expert-shared-components 1.14.43 → 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.
- package/LICENSE +21 -21
- package/README.md +2 -2
- package/lib/README.md +2 -0
- package/lib/components/ClientReferencesSection/DeleteButton.js +11 -11
- package/lib/components/ClientReferencesSection/ParoError.js +10 -10
- package/lib/components/ClientReferencesSection/TagsSection.js +2 -2
- package/lib/components/ClientReferencesSection/styles/BrandedTypography.js +2 -2
- package/lib/components/ClientReferencesSection/styles/Buttons.js +15 -15
- package/lib/components/ClientReferencesSection/styles/Name.js +5 -5
- package/lib/components/ClientReferencesSection/styles/NullContentConditionalColor.js +4 -4
- package/lib/components/ClientReferencesSection/styles/SectionBody.js +11 -11
- package/lib/components/ClientReferencesSection/styles/SectionTitle.js +6 -6
- package/lib/components/ClientReferencesSection/styles/Tags.js +2 -2
- package/lib/components/DiscussionThread/DiscussionThread.d.ts +25 -25
- package/lib/components/DiscussionThread/DiscussionThread.js +137 -137
- package/lib/components/DiscussionThread/chat.d.ts +22 -22
- package/lib/components/DiscussionThread/chat.js +106 -106
- package/lib/components/DiscussionThread/index.d.ts +1 -1
- package/lib/components/DiscussionThread/index.js +5 -5
- package/lib/components/DocumentCenter/DocumentTable.d.ts +15 -15
- package/lib/components/DocumentCenter/DocumentTable.js +350 -350
- package/lib/components/DocumentCenter/DragDropUpload.js +4 -4
- package/lib/components/DocumentCenter/UploadFilesButton.d.ts +6 -6
- package/lib/components/DocumentCenter/UploadFilesButton.js +29 -29
- package/lib/components/EarningsTracker/ActiveProjectCard.d.ts +52 -52
- package/lib/components/EarningsTracker/ActiveProjectCard.js +161 -161
- package/lib/components/EarningsTracker/CenterCardUI.d.ts +13 -13
- package/lib/components/EarningsTracker/CenterCardUI.js +134 -134
- package/lib/components/EarningsTracker/EarningsTracker.d.ts +52 -52
- package/lib/components/EarningsTracker/EarningsTracker.js +508 -508
- package/lib/components/EarningsTracker/EditDateModal.d.ts +22 -22
- package/lib/components/EarningsTracker/EditDateModal.js +149 -149
- package/lib/components/EarningsTracker/EmailModal.d.ts +14 -14
- package/lib/components/EarningsTracker/EmailModal.js +79 -79
- package/lib/components/EarningsTracker/EndProjectModal.d.ts +56 -56
- package/lib/components/EarningsTracker/EndProjectModal.js +221 -221
- package/lib/components/EarningsTracker/LeftCardUI.d.ts +18 -18
- package/lib/components/EarningsTracker/LeftCardUI.js +189 -189
- package/lib/components/EarningsTracker/LogTimeModalAuthenticated.d.ts +52 -52
- package/lib/components/EarningsTracker/LogTimeModalAuthenticated.js +358 -358
- package/lib/components/EarningsTracker/ProgressBar.d.ts +4 -4
- package/lib/components/EarningsTracker/ProgressBar.js +66 -66
- package/lib/components/EarningsTracker/ReviewRequestModal.d.ts +17 -17
- package/lib/components/EarningsTracker/ReviewRequestModal.js +135 -135
- package/lib/components/EarningsTracker/RightCardUI.d.ts +46 -46
- package/lib/components/EarningsTracker/RightCardUI.js +231 -231
- package/lib/components/EarningsTracker/index.d.ts +1 -1
- package/lib/components/EarningsTracker/index.js +5 -5
- package/lib/components/Escalations/CustomTag.d.ts +3 -3
- package/lib/components/Escalations/CustomTag.js +25 -25
- package/lib/components/Escalations/ViewReponseModal.d.ts +8 -8
- package/lib/components/Escalations/ViewReponseModal.js +27 -27
- package/lib/components/ExpertProfileHeader/ActionButtonSection.js +6 -6
- package/lib/components/ExpertProfileHeader/ProfileSection.js +7 -7
- package/lib/components/Invoices/TestDecisionSection.d.ts +1 -1
- package/lib/components/Invoices/TestDecisionSection.js +126 -126
- package/lib/components/OrganizationChart/OrganizationChart.d.ts +15 -15
- package/lib/components/OrganizationChart/OrganizationChart.js +312 -312
- package/lib/components/OrganizationChart/PersonCard.js +5 -5
- package/lib/components/OrganizationChart/utils.js +79 -79
- package/lib/components/ProjectCard/ProgressBar.js +4 -4
- package/lib/components/ProjectCard/ReviewRequestModal.js +5 -5
- package/lib/components/ProjectIntelligence/MissingInformation/index.js +1 -1
- package/lib/components/Reviews/Pagination.js +6 -6
- package/lib/components/ReviewsTab/RatingHeader.js +6 -6
- package/lib/components/ReviewsTab/expert-shared-components.code-workspace +20 -20
- package/lib/components/ReviewsTab/reviewRequestModal.js +5 -5
- package/lib/components/shared/Image.js +13 -13
- package/lib/components/shared/ProfileTextField.d.ts +18 -18
- package/lib/components/shared/ProfileTextField.js +16 -16
- package/lib/components/shared/StyledActionButtons.d.ts +7 -7
- package/lib/components/shared/StyledActionButtons.js +15 -15
- package/lib/components/shared/ToastNotification.d.ts +10 -10
- package/lib/components/shared/ToastNotification.js +63 -63
- package/lib/index.d.ts +13 -0
- package/lib/index.js +27 -1
- package/lib/package.json +68 -0
- package/lib/tax-axis/components/clientReport/ClientReportCover.d.ts +9 -0
- package/lib/tax-axis/components/clientReport/ClientReportCover.js +39 -0
- package/lib/tax-axis/components/clientReport/ClientReportTOC.d.ts +8 -0
- package/lib/tax-axis/components/clientReport/ClientReportTOC.js +24 -0
- package/lib/tax-axis/components/clientReport/ClientReportToolbar.d.ts +2 -0
- package/lib/tax-axis/components/clientReport/ClientReportToolbar.js +6 -0
- package/lib/tax-axis/components/clientReport/ETRChart.d.ts +10 -0
- package/lib/tax-axis/components/clientReport/ETRChart.js +50 -0
- package/lib/tax-axis/components/clientReport/ExecutiveSummary.d.ts +15 -0
- package/lib/tax-axis/components/clientReport/ExecutiveSummary.js +73 -0
- package/lib/tax-axis/components/clientReport/FootnoteBlock.d.ts +11 -0
- package/lib/tax-axis/components/clientReport/FootnoteBlock.js +34 -0
- package/lib/tax-axis/components/clientReport/ImplementationRoadmap.d.ts +26 -0
- package/lib/tax-axis/components/clientReport/ImplementationRoadmap.js +51 -0
- package/lib/tax-axis/components/clientReport/ImplementationTimelineChart.d.ts +10 -0
- package/lib/tax-axis/components/clientReport/ImplementationTimelineChart.js +49 -0
- package/lib/tax-axis/components/clientReport/Methodology.d.ts +10 -0
- package/lib/tax-axis/components/clientReport/Methodology.js +40 -0
- package/lib/tax-axis/components/clientReport/QuarterlyCashChart.d.ts +10 -0
- package/lib/tax-axis/components/clientReport/QuarterlyCashChart.js +56 -0
- package/lib/tax-axis/components/clientReport/RecommendedStrategies.d.ts +13 -0
- package/lib/tax-axis/components/clientReport/RecommendedStrategies.js +51 -0
- package/lib/tax-axis/components/clientReport/SavingsStackChart.d.ts +10 -0
- package/lib/tax-axis/components/clientReport/SavingsStackChart.js +66 -0
- package/lib/tax-axis/components/clientReport/SectionOpener.d.ts +11 -0
- package/lib/tax-axis/components/clientReport/SectionOpener.js +20 -0
- package/lib/tax-axis/components/clientReport/Sidebar.d.ts +8 -0
- package/lib/tax-axis/components/clientReport/Sidebar.js +37 -0
- package/lib/tax-axis/components/clientReport/StrategyCard.d.ts +16 -0
- package/lib/tax-axis/components/clientReport/StrategyCard.js +63 -0
- package/lib/tax-axis/components/clientReport/TaxAxisClientReport.d.ts +9 -0
- package/lib/tax-axis/components/clientReport/TaxAxisClientReport.js +125 -0
- package/lib/tax-axis/components/clientReport/applyFootnotes.d.ts +12 -0
- package/lib/tax-axis/components/clientReport/applyFootnotes.js +43 -0
- package/lib/tax-axis/components/clientReport/palette.d.ts +28 -0
- package/lib/tax-axis/components/clientReport/palette.js +34 -0
- package/lib/tax-axis/components/dashboard/ConfidenceArc.d.ts +7 -0
- package/lib/tax-axis/components/dashboard/ConfidenceArc.js +20 -0
- package/lib/tax-axis/components/dashboard/DashboardActions.d.ts +13 -0
- package/lib/tax-axis/components/dashboard/DashboardActions.js +96 -0
- package/lib/tax-axis/components/dashboard/DashboardSummary.d.ts +11 -0
- package/lib/tax-axis/components/dashboard/DashboardSummary.js +98 -0
- package/lib/tax-axis/components/dashboard/DashboardTopBar.d.ts +10 -0
- package/lib/tax-axis/components/dashboard/DashboardTopBar.js +48 -0
- package/lib/tax-axis/components/dashboard/StrategyDetailPanel.d.ts +10 -0
- package/lib/tax-axis/components/dashboard/StrategyDetailPanel.js +139 -0
- package/lib/tax-axis/components/dashboard/StrategyTile.d.ts +10 -0
- package/lib/tax-axis/components/dashboard/StrategyTile.js +82 -0
- package/lib/tax-axis/components/dashboard/TaxAxisDashboard.d.ts +12 -0
- package/lib/tax-axis/components/dashboard/TaxAxisDashboard.js +284 -0
- package/lib/tax-axis/components/dashboard/useCountUp.d.ts +1 -0
- package/lib/tax-axis/components/dashboard/useCountUp.js +25 -0
- package/lib/tax-axis/components/documents/DocumentCard.d.ts +18 -0
- package/lib/tax-axis/components/documents/DocumentCard.js +61 -0
- package/lib/tax-axis/components/documents/DocumentTier.d.ts +21 -0
- package/lib/tax-axis/components/documents/DocumentTier.js +23 -0
- package/lib/tax-axis/components/documents/TaxAxisDocuments.d.ts +8 -0
- package/lib/tax-axis/components/documents/TaxAxisDocuments.js +157 -0
- package/lib/tax-axis/components/extractionReview/DocumentCard.d.ts +17 -0
- package/lib/tax-axis/components/extractionReview/DocumentCard.js +105 -0
- package/lib/tax-axis/components/extractionReview/FieldRow.d.ts +17 -0
- package/lib/tax-axis/components/extractionReview/FieldRow.js +137 -0
- package/lib/tax-axis/components/extractionReview/PurposeBlock.d.ts +7 -0
- package/lib/tax-axis/components/extractionReview/PurposeBlock.js +18 -0
- package/lib/tax-axis/components/extractionReview/RerunFooter.d.ts +8 -0
- package/lib/tax-axis/components/extractionReview/RerunFooter.js +60 -0
- package/lib/tax-axis/components/extractionReview/TaxAxisExtractionReview.d.ts +11 -0
- package/lib/tax-axis/components/extractionReview/TaxAxisExtractionReview.js +186 -0
- package/lib/tax-axis/components/intake/ClientParametersSection.d.ts +7 -0
- package/lib/tax-axis/components/intake/ClientParametersSection.js +146 -0
- package/lib/tax-axis/components/intake/CpaIntakeQuestionsSection.d.ts +7 -0
- package/lib/tax-axis/components/intake/CpaIntakeQuestionsSection.js +93 -0
- package/lib/tax-axis/components/intake/IntakeCtaCards.d.ts +9 -0
- package/lib/tax-axis/components/intake/IntakeCtaCards.js +30 -0
- package/lib/tax-axis/components/intake/RefineAnalysisSection.d.ts +7 -0
- package/lib/tax-axis/components/intake/RefineAnalysisSection.js +151 -0
- package/lib/tax-axis/components/intake/StateMultiSelect.d.ts +7 -0
- package/lib/tax-axis/components/intake/StateMultiSelect.js +90 -0
- package/lib/tax-axis/components/intake/StrategyRadar.d.ts +7 -0
- package/lib/tax-axis/components/intake/StrategyRadar.js +240 -0
- package/lib/tax-axis/components/intake/TaxAxisIntake.d.ts +8 -0
- package/lib/tax-axis/components/intake/TaxAxisIntake.js +38 -0
- package/lib/tax-axis/components/intake/intakeSchema.d.ts +97 -0
- package/lib/tax-axis/components/intake/intakeSchema.js +91 -0
- package/lib/tax-axis/components/preparerWorkpaper/CalculationTraceAccordion.d.ts +9 -0
- package/lib/tax-axis/components/preparerWorkpaper/CalculationTraceAccordion.js +19 -0
- package/lib/tax-axis/components/preparerWorkpaper/EngagementHeader.d.ts +9 -0
- package/lib/tax-axis/components/preparerWorkpaper/EngagementHeader.js +43 -0
- package/lib/tax-axis/components/preparerWorkpaper/Position6694Accordion.d.ts +9 -0
- package/lib/tax-axis/components/preparerWorkpaper/Position6694Accordion.js +25 -0
- package/lib/tax-axis/components/preparerWorkpaper/PriorityGroup.d.ts +14 -0
- package/lib/tax-axis/components/preparerWorkpaper/PriorityGroup.js +20 -0
- package/lib/tax-axis/components/preparerWorkpaper/Section6694Summary.d.ts +9 -0
- package/lib/tax-axis/components/preparerWorkpaper/Section6694Summary.js +36 -0
- package/lib/tax-axis/components/preparerWorkpaper/SourceDocumentsAccordion.d.ts +9 -0
- package/lib/tax-axis/components/preparerWorkpaper/SourceDocumentsAccordion.js +20 -0
- package/lib/tax-axis/components/preparerWorkpaper/StrategyWorkpaperCard.d.ts +14 -0
- package/lib/tax-axis/components/preparerWorkpaper/StrategyWorkpaperCard.js +53 -0
- package/lib/tax-axis/components/preparerWorkpaper/TaxAxisPreparerWorkpaper.d.ts +9 -0
- package/lib/tax-axis/components/preparerWorkpaper/TaxAxisPreparerWorkpaper.js +175 -0
- package/lib/tax-axis/components/presentationMode/TaxAxisPresentationMode.d.ts +7 -0
- package/lib/tax-axis/components/presentationMode/TaxAxisPresentationMode.js +245 -0
- package/lib/tax-axis/components/processing/ProcessingStages.d.ts +7 -0
- package/lib/tax-axis/components/processing/ProcessingStages.js +17 -0
- package/lib/tax-axis/components/processing/TaxAxisProcessing.d.ts +7 -0
- package/lib/tax-axis/components/processing/TaxAxisProcessing.js +105 -0
- package/lib/tax-axis/components/prospectReport/ProspectCover.d.ts +10 -0
- package/lib/tax-axis/components/prospectReport/ProspectCover.js +47 -0
- package/lib/tax-axis/components/prospectReport/ProspectDocuments.d.ts +9 -0
- package/lib/tax-axis/components/prospectReport/ProspectDocuments.js +31 -0
- package/lib/tax-axis/components/prospectReport/ProspectNextSteps.d.ts +13 -0
- package/lib/tax-axis/components/prospectReport/ProspectNextSteps.js +37 -0
- package/lib/tax-axis/components/prospectReport/ProspectPrintView.d.ts +26 -0
- package/lib/tax-axis/components/prospectReport/ProspectPrintView.js +183 -0
- package/lib/tax-axis/components/prospectReport/ProspectStrategyCard.d.ts +10 -0
- package/lib/tax-axis/components/prospectReport/ProspectStrategyCard.js +52 -0
- package/lib/tax-axis/components/prospectReport/SampleAnalysisPreview.d.ts +7 -0
- package/lib/tax-axis/components/prospectReport/SampleAnalysisPreview.js +120 -0
- package/lib/tax-axis/components/prospectReport/TaxAxisProspectReport.d.ts +9 -0
- package/lib/tax-axis/components/prospectReport/TaxAxisProspectReport.js +173 -0
- package/lib/tax-axis/components/prospectReport/TaxPositionGap.d.ts +15 -0
- package/lib/tax-axis/components/prospectReport/TaxPositionGap.js +45 -0
- package/lib/tax-axis/components/prospectReport/theme.d.ts +26 -0
- package/lib/tax-axis/components/prospectReport/theme.js +33 -0
- package/lib/tax-axis/components/shared/ReportToolbar.d.ts +12 -0
- package/lib/tax-axis/components/shared/ReportToolbar.js +81 -0
- package/lib/tax-axis/components/shared/SectionHeader.d.ts +8 -0
- package/lib/tax-axis/components/shared/SectionHeader.js +15 -0
- package/lib/tax-axis/components/shared/TaxAxisBadge.d.ts +12 -0
- package/lib/tax-axis/components/shared/TaxAxisBadge.js +34 -0
- package/lib/tax-axis/components/shared/TaxAxisButton.d.ts +12 -0
- package/lib/tax-axis/components/shared/TaxAxisButton.js +17 -0
- package/lib/tax-axis/components/shared/TaxAxisCard.d.ts +9 -0
- package/lib/tax-axis/components/shared/TaxAxisCard.js +13 -0
- package/lib/tax-axis/index.d.ts +25 -0
- package/lib/tax-axis/index.js +51 -0
- package/lib/tax-axis/lib/compute/index.d.ts +8 -0
- package/lib/tax-axis/lib/compute/index.js +163 -0
- package/lib/tax-axis/lib/data/documents.d.ts +3 -0
- package/lib/tax-axis/lib/data/documents.js +33 -0
- package/lib/tax-axis/lib/data/extractedData.d.ts +2 -0
- package/lib/tax-axis/lib/data/extractedData.js +47 -0
- package/lib/tax-axis/lib/data/footnoteData.d.ts +2 -0
- package/lib/tax-axis/lib/data/footnoteData.js +48 -0
- package/lib/tax-axis/lib/data/index.d.ts +11 -0
- package/lib/tax-axis/lib/data/index.js +31 -0
- package/lib/tax-axis/lib/data/nextSteps.d.ts +2 -0
- package/lib/tax-axis/lib/data/nextSteps.js +35 -0
- package/lib/tax-axis/lib/data/sidebarLookup.d.ts +2 -0
- package/lib/tax-axis/lib/data/sidebarLookup.js +90 -0
- package/lib/tax-axis/lib/data/sourceDescriptions.d.ts +1 -0
- package/lib/tax-axis/lib/data/sourceDescriptions.js +32 -0
- package/lib/tax-axis/lib/data/states.d.ts +6 -0
- package/lib/tax-axis/lib/data/states.js +25 -0
- package/lib/tax-axis/lib/data/strategies.d.ts +8 -0
- package/lib/tax-axis/lib/data/strategies.js +166 -0
- package/lib/tax-axis/lib/data/strategyNarrative.d.ts +3 -0
- package/lib/tax-axis/lib/data/strategyNarrative.js +170 -0
- package/lib/tax-axis/lib/data/strategyProspect.d.ts +2 -0
- package/lib/tax-axis/lib/data/strategyProspect.js +66 -0
- package/lib/tax-axis/lib/data/workpaperInteractions.d.ts +1 -0
- package/lib/tax-axis/lib/data/workpaperInteractions.js +15 -0
- package/lib/tax-axis/lib/types/index.d.ts +183 -0
- package/lib/tax-axis/lib/types/index.js +7 -0
- package/package.json +68 -67
|
@@ -0,0 +1,151 @@
|
|
|
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.RefineAnalysisSection = RefineAnalysisSection;
|
|
27
|
+
const react_1 = __importStar(require("react"));
|
|
28
|
+
const react_hook_form_1 = require("react-hook-form");
|
|
29
|
+
const TaxAxisCard_1 = require("../shared/TaxAxisCard");
|
|
30
|
+
/* ═══ Shared class constants ═══ */
|
|
31
|
+
const inputCls = "w-full bg-tax-axis-surface border border-tax-axis-border text-white text-sm rounded-lg p-2.5 focus:border-tax-axis-teal-light focus:outline-none font-tax-axis-body transition-colors";
|
|
32
|
+
const selectCls = "w-full bg-tax-axis-surface border border-tax-axis-border text-white text-sm rounded-lg p-2.5 focus:border-tax-axis-teal-light focus:outline-none font-tax-axis-body transition-colors appearance-none cursor-pointer";
|
|
33
|
+
const labelCls = "block text-[11px] font-semibold text-tax-axis-text-2 mb-1 font-tax-axis-body tracking-wide";
|
|
34
|
+
const errCls = "text-tax-axis-red text-xs mt-1";
|
|
35
|
+
const subHeaderCls = "text-[11px] font-semibold uppercase tracking-wider text-tax-axis-text-3 mt-5 mb-2";
|
|
36
|
+
const helperCls = "text-[11px] text-tax-axis-text-4 mt-0.5 leading-tight";
|
|
37
|
+
const Chevron = () => (react_1.default.createElement("svg", { className: "absolute right-2.5 top-1/2 -translate-y-1/2 pointer-events-none", width: "10", height: "10", viewBox: "0 0 12 12", fill: "none" },
|
|
38
|
+
react_1.default.createElement("path", { d: "M3 4.5l3 3 3-3", stroke: "#E6E8F5", strokeWidth: "1.5", strokeLinecap: "round" })));
|
|
39
|
+
/* ═══ Option lists ═══ */
|
|
40
|
+
const FILING_STATUS_OPTIONS = ["Single", "MFJ", "MFS", "Head of Household", "QSS"];
|
|
41
|
+
const SSTB_OPTIONS = ["Yes", "No", "Unsure"];
|
|
42
|
+
const REAL_ESTATE_OPTIONS = ["No", "Yes — Commercial", "Yes — Residential", "Yes — Both"];
|
|
43
|
+
const ITEMIZES_OPTIONS = ["Yes", "No", "Unsure"];
|
|
44
|
+
const SINGLE_OWNER_OPTIONS = ["Yes", "No"];
|
|
45
|
+
const FEDERAL_RATE_OPTIONS = ["10%", "12%", "22%", "24%", "32%", "35%", "37%"];
|
|
46
|
+
const TAX_DATA_YEARS_OPTIONS = ["1 year", "2 years", "3 years", "4 years", "5 years"];
|
|
47
|
+
// Risk Tolerance: mock stores first char ("1"-"5") as value.
|
|
48
|
+
// NOTE: intakeDefaultValues sets riskTolerance to "M" (spec) but the mock
|
|
49
|
+
// stores "3" for Moderate. This is a spec-vs-mock discrepancy — flagged for
|
|
50
|
+
// reconciliation. Using mock option values (numeric) since downstream screens
|
|
51
|
+
// call parseInt(riskTolerance).
|
|
52
|
+
const RISK_OPTIONS = [
|
|
53
|
+
{ label: "1 — Very Conservative", value: "1" },
|
|
54
|
+
{ label: "2 — Conservative", value: "2" },
|
|
55
|
+
{ label: "3 — Moderate", value: "3" },
|
|
56
|
+
{ label: "4 — Aggressive", value: "4" },
|
|
57
|
+
{ label: "5 — Very Aggressive", value: "5" },
|
|
58
|
+
];
|
|
59
|
+
function RefineAnalysisSection({ userContext: _userContext, }) {
|
|
60
|
+
const [expanded, setExpanded] = (0, react_1.useState)(false);
|
|
61
|
+
const { control, watch, formState: { errors }, } = (0, react_hook_form_1.useFormContext)();
|
|
62
|
+
const ownsRealEstate = watch("ownsRealEstate");
|
|
63
|
+
return (react_1.default.createElement(TaxAxisCard_1.TaxAxisCard, null,
|
|
64
|
+
react_1.default.createElement("div", { onClick: () => setExpanded(prev => !prev), className: "flex items-center justify-between cursor-pointer", style: { marginBottom: expanded ? 10 : 0 } },
|
|
65
|
+
react_1.default.createElement("span", { className: "text-[11px] font-semibold uppercase tracking-wider text-tax-axis-text-3" }, "Refine Analysis"),
|
|
66
|
+
react_1.default.createElement("div", { className: "flex items-center gap-1.5" },
|
|
67
|
+
react_1.default.createElement("span", { className: "text-[10px] text-tax-axis-text-4 bg-tax-axis-surface-2 rounded-xl px-2 py-0.5" }, "15 fields using smart defaults"),
|
|
68
|
+
react_1.default.createElement("svg", { className: `transition-transform ${expanded ? "rotate-180" : "rotate-0"}`, width: "10", height: "10", viewBox: "0 0 12 12", fill: "none" },
|
|
69
|
+
react_1.default.createElement("path", { d: "M3 4.5l3 3 3-3", stroke: "#9498B8", strokeWidth: "1.5", strokeLinecap: "round" })))),
|
|
70
|
+
expanded && (react_1.default.createElement("div", null,
|
|
71
|
+
react_1.default.createElement("div", { className: "text-[11px] text-tax-axis-text-4 italic mb-3" }, "These fields improve accuracy. Many will be auto-populated when documents are uploaded."),
|
|
72
|
+
react_1.default.createElement("div", { className: subHeaderCls, style: { marginTop: 0 } }, "Client Profile"),
|
|
73
|
+
react_1.default.createElement("div", { className: "grid grid-cols-2 gap-3 mb-2.5" },
|
|
74
|
+
react_1.default.createElement("div", null,
|
|
75
|
+
react_1.default.createElement("label", { className: labelCls }, "Filing Status"),
|
|
76
|
+
react_1.default.createElement(react_hook_form_1.Controller, { name: "filingStatus", control: control, render: ({ field }) => (react_1.default.createElement("div", { className: "relative" },
|
|
77
|
+
react_1.default.createElement("select", Object.assign({}, field, { className: selectCls }), FILING_STATUS_OPTIONS.map(o => (react_1.default.createElement("option", { key: o, value: o, className: "bg-tax-axis-surface-2" }, o)))),
|
|
78
|
+
react_1.default.createElement(Chevron, null))) })),
|
|
79
|
+
react_1.default.createElement("div", null,
|
|
80
|
+
react_1.default.createElement("label", { className: labelCls }, "Age"),
|
|
81
|
+
react_1.default.createElement(react_hook_form_1.Controller, { name: "age", control: control, render: ({ field }) => (react_1.default.createElement("input", Object.assign({}, field, { type: "number", placeholder: "45", className: inputCls }))) }))),
|
|
82
|
+
react_1.default.createElement("div", { className: "grid grid-cols-2 gap-3 mb-2.5" },
|
|
83
|
+
react_1.default.createElement("div", null,
|
|
84
|
+
react_1.default.createElement("label", { className: labelCls }, "SSTB"),
|
|
85
|
+
react_1.default.createElement(react_hook_form_1.Controller, { name: "sstb", control: control, render: ({ field }) => (react_1.default.createElement("div", { className: "relative" },
|
|
86
|
+
react_1.default.createElement("select", Object.assign({}, field, { className: selectCls }), SSTB_OPTIONS.map(o => (react_1.default.createElement("option", { key: o, value: o, className: "bg-tax-axis-surface-2" }, o)))),
|
|
87
|
+
react_1.default.createElement(Chevron, null))) }),
|
|
88
|
+
react_1.default.createElement("div", { className: helperCls }, "SSTB: law, health, consulting, financial services, performing arts, athletics")),
|
|
89
|
+
react_1.default.createElement("div", null,
|
|
90
|
+
react_1.default.createElement("label", { className: labelCls }, "Owns Real Estate"),
|
|
91
|
+
react_1.default.createElement(react_hook_form_1.Controller, { name: "ownsRealEstate", control: control, render: ({ field }) => (react_1.default.createElement("div", { className: "relative" },
|
|
92
|
+
react_1.default.createElement("select", Object.assign({}, field, { className: selectCls }), REAL_ESTATE_OPTIONS.map(o => (react_1.default.createElement("option", { key: o, value: o, className: "bg-tax-axis-surface-2" }, o)))),
|
|
93
|
+
react_1.default.createElement(Chevron, null))) }))),
|
|
94
|
+
react_1.default.createElement("div", { className: "grid grid-cols-2 gap-3 mb-2.5" },
|
|
95
|
+
react_1.default.createElement("div", null,
|
|
96
|
+
react_1.default.createElement("label", { className: labelCls }, "Itemizes Deductions"),
|
|
97
|
+
react_1.default.createElement(react_hook_form_1.Controller, { name: "itemizesDeductions", control: control, render: ({ field }) => (react_1.default.createElement("div", { className: "relative" },
|
|
98
|
+
react_1.default.createElement("select", Object.assign({}, field, { className: selectCls }), ITEMIZES_OPTIONS.map(o => (react_1.default.createElement("option", { key: o, value: o, className: "bg-tax-axis-surface-2" }, o)))),
|
|
99
|
+
react_1.default.createElement(Chevron, null))) })),
|
|
100
|
+
react_1.default.createElement("div", null,
|
|
101
|
+
react_1.default.createElement("label", { className: labelCls }, "Single Owner"),
|
|
102
|
+
react_1.default.createElement(react_hook_form_1.Controller, { name: "singleOwner", control: control, render: ({ field }) => (react_1.default.createElement("div", { className: "relative" },
|
|
103
|
+
react_1.default.createElement("select", Object.assign({}, field, { className: selectCls }), SINGLE_OWNER_OPTIONS.map(o => (react_1.default.createElement("option", { key: o, value: o, className: "bg-tax-axis-surface-2" }, o)))),
|
|
104
|
+
react_1.default.createElement(Chevron, null))) }))),
|
|
105
|
+
react_1.default.createElement("div", { className: subHeaderCls }, "Financial Data"),
|
|
106
|
+
react_1.default.createElement("div", { className: "grid grid-cols-2 gap-3 mb-2.5" },
|
|
107
|
+
react_1.default.createElement("div", null,
|
|
108
|
+
react_1.default.createElement("label", { className: labelCls }, "Net Income"),
|
|
109
|
+
react_1.default.createElement(react_hook_form_1.Controller, { name: "netIncome", control: control, render: ({ field }) => (react_1.default.createElement("div", { className: "relative" },
|
|
110
|
+
react_1.default.createElement("span", { className: "absolute left-2.5 top-1/2 -translate-y-1/2 text-tax-axis-text-3 text-[13px]" }, "$"),
|
|
111
|
+
react_1.default.createElement("input", Object.assign({}, field, { placeholder: "142,000", className: `${inputCls} pl-6` })))) })),
|
|
112
|
+
react_1.default.createElement("div", null,
|
|
113
|
+
react_1.default.createElement("label", { className: labelCls }, "Equipment Purchased (This Year)"),
|
|
114
|
+
react_1.default.createElement(react_hook_form_1.Controller, { name: "equipmentPurchased", control: control, render: ({ field }) => (react_1.default.createElement("div", { className: "relative" },
|
|
115
|
+
react_1.default.createElement("span", { className: "absolute left-2.5 top-1/2 -translate-y-1/2 text-tax-axis-text-3 text-[13px]" }, "$"),
|
|
116
|
+
react_1.default.createElement("input", Object.assign({}, field, { placeholder: "0", className: `${inputCls} pl-6` })))) }))),
|
|
117
|
+
react_1.default.createElement("div", { className: "grid grid-cols-2 gap-3 mb-2.5" },
|
|
118
|
+
ownsRealEstate !== "No" ? (react_1.default.createElement("div", { className: "transition-opacity" },
|
|
119
|
+
react_1.default.createElement("label", { className: labelCls }, "Real Estate Value"),
|
|
120
|
+
react_1.default.createElement(react_hook_form_1.Controller, { name: "realEstateValue", control: control, render: ({ field }) => (react_1.default.createElement("div", { className: "relative" },
|
|
121
|
+
react_1.default.createElement("span", { className: "absolute left-2.5 top-1/2 -translate-y-1/2 text-tax-axis-text-3 text-[13px]" }, "$"),
|
|
122
|
+
react_1.default.createElement("input", Object.assign({}, field, { placeholder: "0", className: `${inputCls} pl-6` })))) }))) : (react_1.default.createElement("div", null)),
|
|
123
|
+
react_1.default.createElement("div", null,
|
|
124
|
+
react_1.default.createElement("label", { className: labelCls }, "Capital Gains"),
|
|
125
|
+
react_1.default.createElement(react_hook_form_1.Controller, { name: "capitalGains", control: control, render: ({ field }) => (react_1.default.createElement("div", { className: "relative" },
|
|
126
|
+
react_1.default.createElement("span", { className: "absolute left-2.5 top-1/2 -translate-y-1/2 text-tax-axis-text-3 text-[13px]" }, "$"),
|
|
127
|
+
react_1.default.createElement("input", Object.assign({}, field, { placeholder: "0", className: `${inputCls} pl-6` })))) }))),
|
|
128
|
+
react_1.default.createElement("div", { className: subHeaderCls }, "Tax Profile"),
|
|
129
|
+
react_1.default.createElement("div", { className: "grid grid-cols-2 gap-3 mb-2.5" },
|
|
130
|
+
react_1.default.createElement("div", null,
|
|
131
|
+
react_1.default.createElement("label", { className: labelCls }, "Federal Marginal Rate"),
|
|
132
|
+
react_1.default.createElement(react_hook_form_1.Controller, { name: "federalRate", control: control, render: ({ field }) => (react_1.default.createElement("div", { className: "relative" },
|
|
133
|
+
react_1.default.createElement("select", Object.assign({}, field, { className: selectCls }), FEDERAL_RATE_OPTIONS.map(o => (react_1.default.createElement("option", { key: o, value: o, className: "bg-tax-axis-surface-2" }, o)))),
|
|
134
|
+
react_1.default.createElement(Chevron, null))) })),
|
|
135
|
+
react_1.default.createElement("div", null,
|
|
136
|
+
react_1.default.createElement("label", { className: labelCls }, "State Marginal Rate"),
|
|
137
|
+
react_1.default.createElement(react_hook_form_1.Controller, { name: "stateRate", control: control, render: ({ field }) => (react_1.default.createElement("div", { className: "relative" },
|
|
138
|
+
react_1.default.createElement("input", Object.assign({}, field, { placeholder: "4.95", className: `${inputCls} pr-6` })),
|
|
139
|
+
react_1.default.createElement("span", { className: "absolute right-2.5 top-1/2 -translate-y-1/2 text-tax-axis-text-3 text-[13px]" }, "%"))) }))),
|
|
140
|
+
react_1.default.createElement("div", { className: "grid grid-cols-2 gap-3 mb-2.5" },
|
|
141
|
+
react_1.default.createElement("div", null,
|
|
142
|
+
react_1.default.createElement("label", { className: labelCls }, "Tax Data Years Available"),
|
|
143
|
+
react_1.default.createElement(react_hook_form_1.Controller, { name: "taxDataYears", control: control, render: ({ field }) => (react_1.default.createElement("div", { className: "relative" },
|
|
144
|
+
react_1.default.createElement("select", Object.assign({}, field, { className: selectCls }), TAX_DATA_YEARS_OPTIONS.map(o => (react_1.default.createElement("option", { key: o, value: o, className: "bg-tax-axis-surface-2" }, o)))),
|
|
145
|
+
react_1.default.createElement(Chevron, null))) })),
|
|
146
|
+
react_1.default.createElement("div", null,
|
|
147
|
+
react_1.default.createElement("label", { className: labelCls }, "Client Risk Tolerance"),
|
|
148
|
+
react_1.default.createElement(react_hook_form_1.Controller, { name: "riskTolerance", control: control, render: ({ field }) => (react_1.default.createElement("div", { className: "relative" },
|
|
149
|
+
react_1.default.createElement("select", Object.assign({}, field, { className: selectCls }), RISK_OPTIONS.map(o => (react_1.default.createElement("option", { key: o.value, value: o.value, className: "bg-tax-axis-surface-2" }, o.label)))),
|
|
150
|
+
react_1.default.createElement(Chevron, null))) })))))));
|
|
151
|
+
}
|
|
@@ -0,0 +1,90 @@
|
|
|
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.StateMultiSelect = StateMultiSelect;
|
|
27
|
+
const react_1 = __importStar(require("react"));
|
|
28
|
+
const data_1 = require("../../lib/data");
|
|
29
|
+
function StateMultiSelect({ selected, onChange }) {
|
|
30
|
+
const [open, setOpen] = (0, react_1.useState)(false);
|
|
31
|
+
const [search, setSearch] = (0, react_1.useState)("");
|
|
32
|
+
const ref = (0, react_1.useRef)(null);
|
|
33
|
+
(0, react_1.useEffect)(() => {
|
|
34
|
+
const h = (e) => {
|
|
35
|
+
if (ref.current && !ref.current.contains(e.target))
|
|
36
|
+
setOpen(false);
|
|
37
|
+
};
|
|
38
|
+
document.addEventListener("mousedown", h);
|
|
39
|
+
return () => document.removeEventListener("mousedown", h);
|
|
40
|
+
}, []);
|
|
41
|
+
const filtered = data_1.US_STATES.filter(s => s.name.toLowerCase().includes(search.toLowerCase()) ||
|
|
42
|
+
s.code.toLowerCase().includes(search.toLowerCase()));
|
|
43
|
+
const toggle = (code) => {
|
|
44
|
+
if (selected.includes(code))
|
|
45
|
+
onChange(selected.filter(c => c !== code));
|
|
46
|
+
else
|
|
47
|
+
onChange([...selected, code]);
|
|
48
|
+
};
|
|
49
|
+
return (react_1.default.createElement("div", { ref: ref, className: "relative" },
|
|
50
|
+
react_1.default.createElement("div", { onClick: () => setOpen(!open), className: `w-full px-3.5 py-2.5 rounded-lg border ${open ? "border-tax-axis-teal-light" : "border-tax-axis-border"} text-sm bg-tax-axis-surface-2 cursor-pointer min-h-[44px] flex items-center flex-wrap gap-1 transition-colors` },
|
|
51
|
+
selected.length === 0 && (react_1.default.createElement("span", { className: "text-tax-axis-text-3" }, "Select states of operation\u2026")),
|
|
52
|
+
selected.length > 0 &&
|
|
53
|
+
selected.length <= 6 &&
|
|
54
|
+
selected.map(c => (react_1.default.createElement("span", { key: c, className: "text-[11px] font-semibold text-tax-axis-teal-light bg-tax-axis-teal-bg px-2 py-0.5 rounded font-tax-axis-mono" }, c))),
|
|
55
|
+
selected.length > 6 && (react_1.default.createElement(react_1.default.Fragment, null,
|
|
56
|
+
selected.slice(0, 5).map(c => (react_1.default.createElement("span", { key: c, className: "text-[11px] font-semibold text-tax-axis-teal-light bg-tax-axis-teal-bg px-2 py-0.5 rounded font-tax-axis-mono" }, c))),
|
|
57
|
+
react_1.default.createElement("span", { className: "text-[11px] font-semibold text-tax-axis-orange bg-tax-axis-orange-bg px-2 py-0.5 rounded font-tax-axis-mono" },
|
|
58
|
+
"+",
|
|
59
|
+
selected.length - 5,
|
|
60
|
+
" more"))),
|
|
61
|
+
react_1.default.createElement("svg", { className: `ml-auto flex-shrink-0 transition-transform ${open ? "rotate-180" : ""}`, width: "12", height: "12", viewBox: "0 0 12 12", fill: "none" },
|
|
62
|
+
react_1.default.createElement("path", { d: "M3 4.5l3 3 3-3", stroke: "#E6E8F5", strokeWidth: "1.5", strokeLinecap: "round" }))),
|
|
63
|
+
open && (react_1.default.createElement("div", { className: "absolute top-full mt-1 left-0 right-0 bg-tax-axis-surface border border-tax-axis-border rounded-xl z-50 max-h-[280px] flex flex-col overflow-hidden", style: { boxShadow: "0 8px 40px rgba(6,8,33,0.6)" } },
|
|
64
|
+
react_1.default.createElement("div", { className: "px-2.5 py-2 border-b border-tax-axis-border" },
|
|
65
|
+
react_1.default.createElement("input", { value: search, onChange: e => setSearch(e.target.value), placeholder: "Search states\u2026", autoFocus: true, className: "w-full px-2.5 py-2 rounded-md border border-tax-axis-border text-[13px] text-white bg-tax-axis-surface-2 outline-none font-tax-axis-body focus:border-tax-axis-teal-light transition-colors" })),
|
|
66
|
+
react_1.default.createElement("div", { className: "px-2.5 pt-1.5 flex gap-1.5" },
|
|
67
|
+
react_1.default.createElement("button", { onClick: () => onChange(data_1.US_STATES.map(s => s.code)), className: "text-[10px] font-semibold text-tax-axis-teal-light bg-tax-axis-teal-bg border-none px-2 py-0.5 rounded font-tax-axis-mono", type: "button" }, "Select All"),
|
|
68
|
+
react_1.default.createElement("button", { onClick: () => onChange([]), className: "text-[10px] font-semibold text-tax-axis-text-3 bg-tax-axis-surface-2 border border-tax-axis-border px-2 py-0.5 rounded font-tax-axis-mono", type: "button" }, "Clear"),
|
|
69
|
+
react_1.default.createElement("span", { className: "text-[10px] text-tax-axis-text-4 font-tax-axis-mono ml-auto self-center" },
|
|
70
|
+
selected.length,
|
|
71
|
+
" selected")),
|
|
72
|
+
react_1.default.createElement("div", { className: "overflow-y-auto flex-1 px-1.5 py-1" }, filtered.map(s => {
|
|
73
|
+
const on = selected.includes(s.code);
|
|
74
|
+
return (react_1.default.createElement("div", { key: s.code, onClick: () => toggle(s.code), className: `flex items-center gap-2.5 px-2.5 py-[7px] rounded-md cursor-pointer ${on ? "bg-tax-axis-teal-bg" : ""}`, onMouseOver: e => {
|
|
75
|
+
if (!on)
|
|
76
|
+
e.currentTarget.style.background = "rgba(255,255,255,0.03)";
|
|
77
|
+
}, onMouseOut: e => {
|
|
78
|
+
if (!on)
|
|
79
|
+
e.currentTarget.style.background = "transparent";
|
|
80
|
+
} },
|
|
81
|
+
react_1.default.createElement("div", { className: `w-4 h-4 rounded flex items-center justify-center flex-shrink-0 border-[1.5px] ${on
|
|
82
|
+
? "border-tax-axis-teal-light bg-tax-axis-teal"
|
|
83
|
+
: "border-tax-axis-text-4 bg-transparent"}` }, on && (react_1.default.createElement("svg", { width: "10", height: "10", viewBox: "0 0 10 10", fill: "none" },
|
|
84
|
+
react_1.default.createElement("path", { d: "M2 5l2.5 2.5L8 3", stroke: "white", strokeWidth: "1.5", strokeLinecap: "round", strokeLinejoin: "round" })))),
|
|
85
|
+
react_1.default.createElement("span", { className: `text-[13px] font-tax-axis-body flex-1 ${on ? "text-white" : "text-tax-axis-text-2"}` }, s.name),
|
|
86
|
+
react_1.default.createElement("span", { className: "text-[10px] font-semibold text-tax-axis-text-4 font-tax-axis-mono w-6" }, s.code),
|
|
87
|
+
data_1.NO_INCOME_TAX.has(s.code) && (react_1.default.createElement("span", { className: "text-[8px] font-bold text-tax-axis-green bg-tax-axis-green-bg px-1.5 py-px rounded font-tax-axis-mono" }, "NO TAX")),
|
|
88
|
+
data_1.PTE_STATES.has(s.code) && !data_1.NO_INCOME_TAX.has(s.code) && (react_1.default.createElement("span", { className: "text-[8px] font-bold text-tax-axis-teal-light bg-tax-axis-teal-bg px-1.5 py-px rounded font-tax-axis-mono" }, "PTE"))));
|
|
89
|
+
}))))));
|
|
90
|
+
}
|
|
@@ -0,0 +1,240 @@
|
|
|
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.StrategyRadar = StrategyRadar;
|
|
27
|
+
const react_1 = __importStar(require("react"));
|
|
28
|
+
const strategies_1 = require("../../lib/data/strategies");
|
|
29
|
+
const states_1 = require("../../lib/data/states");
|
|
30
|
+
const compute_1 = require("../../lib/compute");
|
|
31
|
+
// ═══════════════════════════════════════════════════════════════════
|
|
32
|
+
// SVG fill/stroke hex values and CSS font-family strings from the
|
|
33
|
+
// tax-axis Tailwind token config (S0.7). Replaces the mock's T
|
|
34
|
+
// theme object for SVG attributes and inline styles where Tailwind
|
|
35
|
+
// classes don't apply.
|
|
36
|
+
// ═══════════════════════════════════════════════════════════════════
|
|
37
|
+
const T = {
|
|
38
|
+
accent: "#248384",
|
|
39
|
+
accentLt: "#A1E5E6",
|
|
40
|
+
accentBg: "rgba(36,131,132,0.10)",
|
|
41
|
+
white: "#FFFFFF",
|
|
42
|
+
text2: "#E6E8F5",
|
|
43
|
+
text3: "#C8CCE5",
|
|
44
|
+
text4: "#9498B8",
|
|
45
|
+
surface2: "#151B3D",
|
|
46
|
+
border: "rgba(255,255,255,0.08)",
|
|
47
|
+
green: "#0F6E56",
|
|
48
|
+
orange: "#FB9A1D",
|
|
49
|
+
shadow: "0 2px 12px rgba(6,8,33,0.5)",
|
|
50
|
+
// G3/G5 — font conversions
|
|
51
|
+
body: "'Inter',-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,sans-serif",
|
|
52
|
+
head: "'Playfair Display','Georgia','Times New Roman',serif",
|
|
53
|
+
mono: "'JetBrains Mono','Fira Code',monospace",
|
|
54
|
+
};
|
|
55
|
+
// ═══════════════════════════════════════════════════════════════════
|
|
56
|
+
// RADAR_NODES — shortened labels for each of the 25 strategy nodes.
|
|
57
|
+
// Ported verbatim from mock (App.jsx:849-852).
|
|
58
|
+
// G5 patch: "Sec. 179" (not "§179"), "Bus. Interest" (not "§163(j)").
|
|
59
|
+
// ═══════════════════════════════════════════════════════════════════
|
|
60
|
+
const SHORTS = {
|
|
61
|
+
"Business Entity Structure": "Entity Struct.",
|
|
62
|
+
"Section 179 Expensing": "Sec. 179",
|
|
63
|
+
"Bonus Depreciation §168(k)": "Bonus Dep.",
|
|
64
|
+
"QBI Deduction §199A": "QBI §199A",
|
|
65
|
+
"R&D Credit §41": "R&D Credit",
|
|
66
|
+
"WOTC": "WOTC",
|
|
67
|
+
"Retirement Plan Upgrade": "Retirement",
|
|
68
|
+
"Cost Segregation": "Cost Seg.",
|
|
69
|
+
"HSA Maximization": "HSA Max",
|
|
70
|
+
"Business Meal Deductions": "Meals",
|
|
71
|
+
"Professional Services Deductions": "Prof. Svc",
|
|
72
|
+
"Home Office Deduction": "Home Office",
|
|
73
|
+
"Employee Benefit Credits": "Emp. Ben.",
|
|
74
|
+
"Charitable Contribution Strategies": "Charit.",
|
|
75
|
+
"SALT / PTE Optimization": "SALT/PTE",
|
|
76
|
+
"Business Interest §163(j)": "Bus. Interest",
|
|
77
|
+
"Income Deferral & Timing": "Deferral",
|
|
78
|
+
"Opportunity Zone §1400Z": "Opp. Zone",
|
|
79
|
+
"Energy Credits §179D": "Energy §179D",
|
|
80
|
+
"Tax Method Elections": "Methods",
|
|
81
|
+
"Qualified Tips Deduction": "Qual. Tips",
|
|
82
|
+
"Overtime Pay Deduction": "Overtime",
|
|
83
|
+
"R&E Catch-Up §174A": "R&E Catch-Up",
|
|
84
|
+
"Employer Childcare Credit": "Childcare",
|
|
85
|
+
"Trump Accounts": "Trump Acct.",
|
|
86
|
+
};
|
|
87
|
+
const RADAR_NODES = strategies_1.STRATEGIES.map(s => ({
|
|
88
|
+
id: String(s.rank),
|
|
89
|
+
label: SHORTS[s.name] || s.name,
|
|
90
|
+
short: s.code,
|
|
91
|
+
}));
|
|
92
|
+
function StrategyRadar({ profile }) {
|
|
93
|
+
var _a, _b, _c;
|
|
94
|
+
const [expanded, setExpanded] = (0, react_1.useState)(false);
|
|
95
|
+
// Defensive ?? defaults for Partial<ClientProfile>:
|
|
96
|
+
// - entity: required by ENTITY_TO_BUCKETS in filterEligibleStrategies (undefined crashes)
|
|
97
|
+
// - states: used for PTE/NoTax/Nexus calculations (undefined crashes .some())
|
|
98
|
+
// - revenue: used for savings display gating
|
|
99
|
+
// - ownsRealEstate / equipmentPurchased: used for dimHint / warnHint on specific nodes
|
|
100
|
+
const entity = (_a = profile.entity) !== null && _a !== void 0 ? _a : "S-Corporation";
|
|
101
|
+
const states = (_b = profile.states) !== null && _b !== void 0 ? _b : [];
|
|
102
|
+
const rev = parseInt((profile.revenue || "0").replace(/,/g, "")) || 0;
|
|
103
|
+
const noRealEstate = ((_c = profile.ownsRealEstate) !== null && _c !== void 0 ? _c : "No") === "No";
|
|
104
|
+
const noEquipment = !profile.equipmentPurchased || profile.equipmentPurchased === "0";
|
|
105
|
+
const safeProfile = Object.assign(Object.assign({}, profile), { entity });
|
|
106
|
+
const eligibleStrategies = (0, compute_1.filterEligibleStrategies)(safeProfile);
|
|
107
|
+
const eligibleIds = new Set(eligibleStrategies.map(s => String(s.rank)));
|
|
108
|
+
const stratCount = eligibleStrategies.length;
|
|
109
|
+
const computed = (0, react_1.useMemo)(() => (0, compute_1.computeAllStrategies)(safeProfile), [profile]);
|
|
110
|
+
const loSum = eligibleStrategies.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);
|
|
111
|
+
const hiSum = eligibleStrategies.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);
|
|
112
|
+
const highImpact = eligibleStrategies.filter(s => s.priority === "HIGH").length;
|
|
113
|
+
const quickWins = eligibleStrategies.filter(s => s.priority === "QUICK WIN").length;
|
|
114
|
+
const obbbaNew = eligibleStrategies.filter(s => s.cat === "obbba_new").length;
|
|
115
|
+
const hasPTE = states.some(s => states_1.PTE_STATES.has(s));
|
|
116
|
+
const hasNoTax = states.some(s => states_1.NO_INCOME_TAX.has(s));
|
|
117
|
+
const total = RADAR_NODES.length;
|
|
118
|
+
// G4 — Sizing: compact vs expanded
|
|
119
|
+
const sz = expanded ? 580 : 320;
|
|
120
|
+
const cx = sz / 2, cy = sz / 2, r = expanded ? 210 : 120;
|
|
121
|
+
const labelR = expanded ? r + 30 : r + 16;
|
|
122
|
+
const dotSz = expanded ? 8 : 5;
|
|
123
|
+
const dotOff = expanded ? 5 : 3;
|
|
124
|
+
// G4 — Node label sizing
|
|
125
|
+
const nameSz = expanded ? 13 : 9;
|
|
126
|
+
const codeSz = expanded ? 9 : 0;
|
|
127
|
+
// ── SVG Radar ──
|
|
128
|
+
const renderRadar = (
|
|
129
|
+
// G5 — Canvas padding: width={sz+160}, height={sz+48}, viewBox -80 -24
|
|
130
|
+
react_1.default.createElement("svg", { width: sz + 160, height: sz + 48, viewBox: `-80 -24 ${sz + 160} ${sz + 48}`, style: { transition: "width .3s, height .3s", overflow: "visible" } },
|
|
131
|
+
[r, Math.round(r * 0.7), Math.round(r * 0.4)].map(rd => (react_1.default.createElement("circle", { key: rd, cx: cx, cy: cy, r: rd, fill: "none", stroke: T.border, strokeWidth: 1, strokeDasharray: "4 4", opacity: 0.25 }))),
|
|
132
|
+
react_1.default.createElement("line", { x1: cx - r - 8, y1: cy, x2: cx + r + 8, y2: cy, stroke: T.border, strokeWidth: 1, opacity: 0.1 }),
|
|
133
|
+
react_1.default.createElement("line", { x1: cx, y1: cy - r - 8, x2: cx, y2: cy + r + 8, stroke: T.border, strokeWidth: 1, opacity: 0.1 }),
|
|
134
|
+
react_1.default.createElement("circle", { cx: cx, cy: cy, r: r, fill: "none", stroke: T.accent, strokeWidth: 1.5, opacity: 0.15 },
|
|
135
|
+
react_1.default.createElement("animate", { attributeName: "r", values: `${r - 2};${r + 2};${r - 2}`, dur: "3s", repeatCount: "indefinite" })),
|
|
136
|
+
react_1.default.createElement("circle", { cx: cx, cy: cy, r: expanded ? 28 : 20, fill: "url(#cg)" }),
|
|
137
|
+
react_1.default.createElement("defs", null,
|
|
138
|
+
react_1.default.createElement("radialGradient", { id: "cg" },
|
|
139
|
+
react_1.default.createElement("stop", { offset: "0%", stopColor: T.accent, stopOpacity: stratCount > 15 ? 0.3 : 0.1 }),
|
|
140
|
+
react_1.default.createElement("stop", { offset: "100%", stopColor: T.accent, stopOpacity: 0 }))),
|
|
141
|
+
react_1.default.createElement("text", { x: cx, y: cy - (expanded ? 4 : 2), textAnchor: "middle", fill: T.accentLt, fontSize: expanded ? 30 : 22, fontWeight: 900, fontFamily: T.head }, stratCount),
|
|
142
|
+
react_1.default.createElement("text", { x: cx, y: cy + (expanded ? 14 : 12), textAnchor: "middle", fill: T.text2, fontSize: expanded ? 10 : 8, fontWeight: 600, fontFamily: T.body, letterSpacing: 1 }, "OF 25"),
|
|
143
|
+
RADAR_NODES.map((s, i) => {
|
|
144
|
+
const a = (i / total) * Math.PI * 2 - Math.PI / 2;
|
|
145
|
+
const nx = cx + Math.cos(a) * r;
|
|
146
|
+
const ny = cy + Math.sin(a) * r;
|
|
147
|
+
const on = eligibleIds.has(s.id);
|
|
148
|
+
const dimHint = on && s.id === "8" && noRealEstate;
|
|
149
|
+
const warnHint = on && (s.id === "2" || s.id === "3") && noEquipment;
|
|
150
|
+
const nodeOpacity = dimHint ? 0.4 : 1;
|
|
151
|
+
const lx = cx + Math.cos(a) * labelR;
|
|
152
|
+
const ly = cy + Math.sin(a) * labelR;
|
|
153
|
+
const deg = ((a * 180 / Math.PI) + 360) % 360;
|
|
154
|
+
const anchor = deg > 100 && deg < 260 ? "end" : deg < 80 || deg > 280 ? "start" : "middle";
|
|
155
|
+
return (react_1.default.createElement("g", { key: s.id, opacity: nodeOpacity },
|
|
156
|
+
react_1.default.createElement("line", { x1: cx, y1: cy, x2: nx, y2: ny, stroke: on ? T.accent : T.text4, strokeWidth: on ? 1 : 0.3, opacity: on ? 0.25 : 0.05 }),
|
|
157
|
+
on && react_1.default.createElement("circle", { cx: nx, cy: ny, r: dotSz * 2, fill: T.accent, opacity: 0.06 }),
|
|
158
|
+
react_1.default.createElement("circle", { cx: nx, cy: ny, r: on ? dotSz : dotOff, fill: on ? T.accent : T.surface2, stroke: on ? T.accentLt : T.text4, strokeWidth: on ? 1.5 : 0.7 }, on && react_1.default.createElement("animate", { attributeName: "r", values: `${dotSz - 1};${dotSz + 1};${dotSz - 1}`, dur: "3s", begin: `${i * 0.12}s`, repeatCount: "indefinite" })),
|
|
159
|
+
react_1.default.createElement("text", { x: lx, y: ly + (expanded ? -1 : 2), textAnchor: anchor, fill: on ? T.white : T.text4, fontSize: nameSz, fontWeight: on ? 700 : 500, fontFamily: T.body }, s.label),
|
|
160
|
+
expanded && (react_1.default.createElement("text", { x: lx, y: ly + 12, textAnchor: anchor, fill: on ? T.text2 : T.text4, fontSize: codeSz, fontWeight: 500, fontFamily: T.mono, opacity: on ? 0.85 : 0.4 }, s.short)),
|
|
161
|
+
expanded && warnHint && (react_1.default.createElement("text", { x: lx, y: ly + 22, textAnchor: anchor, fill: T.orange, fontSize: 8, fontFamily: T.body, fontWeight: 500 }, "No equipment data"))));
|
|
162
|
+
})));
|
|
163
|
+
// ── HTML wrapper ──
|
|
164
|
+
return (react_1.default.createElement("div", { style: {
|
|
165
|
+
background: "#0F1330",
|
|
166
|
+
border: `1px solid ${T.border}`,
|
|
167
|
+
borderRadius: 14,
|
|
168
|
+
padding: "20px 16px",
|
|
169
|
+
boxShadow: T.shadow,
|
|
170
|
+
position: "relative",
|
|
171
|
+
overflow: "visible",
|
|
172
|
+
} },
|
|
173
|
+
react_1.default.createElement("div", { style: {
|
|
174
|
+
position: "absolute",
|
|
175
|
+
top: "-40%",
|
|
176
|
+
left: "-20%",
|
|
177
|
+
width: "140%",
|
|
178
|
+
height: "140%",
|
|
179
|
+
background: "radial-gradient(circle at 50% 50%,rgba(36,131,132,0.06) 0%,transparent 60%)",
|
|
180
|
+
pointerEvents: "none",
|
|
181
|
+
} }),
|
|
182
|
+
react_1.default.createElement("div", { style: { position: "relative" } },
|
|
183
|
+
react_1.default.createElement("div", { style: { display: "flex", alignItems: "center", justifyContent: "space-between", marginBottom: 10 } },
|
|
184
|
+
react_1.default.createElement("span", { style: { fontSize: 11, fontWeight: 700, color: T.accentLt, textTransform: "uppercase", letterSpacing: 1.5, fontFamily: T.body } }, "Strategy Radar"),
|
|
185
|
+
react_1.default.createElement("button", { onClick: () => setExpanded(!expanded), style: {
|
|
186
|
+
display: "flex",
|
|
187
|
+
alignItems: "center",
|
|
188
|
+
gap: 5,
|
|
189
|
+
padding: "4px 10px",
|
|
190
|
+
background: expanded ? T.accentBg : "transparent",
|
|
191
|
+
border: `1px solid ${expanded ? T.accent : T.border}`,
|
|
192
|
+
borderRadius: 6,
|
|
193
|
+
fontSize: 10,
|
|
194
|
+
fontWeight: 600,
|
|
195
|
+
color: expanded ? T.accentLt : T.text3,
|
|
196
|
+
fontFamily: T.body,
|
|
197
|
+
letterSpacing: 0.3,
|
|
198
|
+
transition: "all .2s",
|
|
199
|
+
cursor: "pointer",
|
|
200
|
+
}, type: "button" },
|
|
201
|
+
react_1.default.createElement("svg", { width: "12", height: "12", viewBox: "0 0 24 24", fill: "none" },
|
|
202
|
+
react_1.default.createElement("path", { d: expanded
|
|
203
|
+
? "M8 3v3a2 2 0 01-2 2H3m18 0h-3a2 2 0 01-2-2V3m0 18v-3a2 2 0 012-2h3M3 16h3a2 2 0 012 2v3"
|
|
204
|
+
: "M15 3h6v6M9 21H3v-6M21 3l-7 7M3 21l7-7", stroke: "currentColor", strokeWidth: "1.5", strokeLinecap: "round", strokeLinejoin: "round" })),
|
|
205
|
+
expanded ? "Compact" : "Expand")),
|
|
206
|
+
react_1.default.createElement("div", { style: { display: "flex", justifyContent: "center", marginBottom: 10, overflow: "visible" } }, renderRadar),
|
|
207
|
+
react_1.default.createElement("div", { style: { textAlign: "center", marginBottom: 14 } },
|
|
208
|
+
react_1.default.createElement("div", { style: { fontSize: 11, fontWeight: 600, color: T.text2, textTransform: "uppercase", letterSpacing: 1.2, marginBottom: 4, fontFamily: T.body } }, "Estimated Savings Range"),
|
|
209
|
+
react_1.default.createElement("div", { style: {
|
|
210
|
+
fontSize: expanded ? 36 : 30,
|
|
211
|
+
fontWeight: 900,
|
|
212
|
+
color: rev > 0 ? T.accentLt : T.text4,
|
|
213
|
+
fontFamily: T.head,
|
|
214
|
+
letterSpacing: "-1.5px",
|
|
215
|
+
transition: "all .3s",
|
|
216
|
+
} }, rev > 0 ? (0, compute_1.fmtK)(loSum) + "\u2013" + (0, compute_1.fmtK)(hiSum) : "\u2014"),
|
|
217
|
+
rev > 0 && (react_1.default.createElement("div", { style: { fontSize: 12, color: T.text2, marginTop: 2, fontFamily: T.body } }, "Pending document analysis"))),
|
|
218
|
+
react_1.default.createElement("div", { style: { display: "grid", gridTemplateColumns: "1fr 1fr 1fr", gap: 8, marginBottom: 14 } }, [
|
|
219
|
+
{ v: highImpact, l: "High Priority", c: T.accentLt },
|
|
220
|
+
{ v: quickWins, l: "Quick Wins", c: T.green },
|
|
221
|
+
{ v: 25 - stratCount, l: "Not Eligible", c: T.text4 },
|
|
222
|
+
].map(({ v, l, c }) => (react_1.default.createElement("div", { key: l, style: {
|
|
223
|
+
textAlign: "center",
|
|
224
|
+
padding: "10px 8px",
|
|
225
|
+
background: T.surface2,
|
|
226
|
+
borderRadius: 8,
|
|
227
|
+
border: `1px solid ${T.border}`,
|
|
228
|
+
} },
|
|
229
|
+
react_1.default.createElement("div", { style: { fontSize: 20, fontWeight: 700, color: c, fontFamily: T.head, letterSpacing: "-.5px" } }, v),
|
|
230
|
+
react_1.default.createElement("div", { style: { fontSize: 10, fontWeight: 600, color: T.text2, textTransform: "uppercase", letterSpacing: 1, marginTop: 2, fontFamily: T.body } }, l))))),
|
|
231
|
+
react_1.default.createElement("div", { style: { borderTop: `1px solid ${T.border}`, paddingTop: 12, display: "grid", gap: 8 } }, [
|
|
232
|
+
{ l: "PTE Election Eligible", v: hasPTE ? "YES" : "NO", c: hasPTE ? T.green : T.text4 },
|
|
233
|
+
{ l: "No-Income-Tax States", v: String(states.filter(s => states_1.NO_INCOME_TAX.has(s)).length), c: hasNoTax ? T.green : T.text4 },
|
|
234
|
+
{ l: "Multi-State Nexus Risk", v: states.length > 1 ? "FLAGGED" : "NONE", c: states.length > 1 ? T.orange : T.text4 },
|
|
235
|
+
{ l: "OBBBA New Provisions", v: obbbaNew + " eligible", c: T.orange },
|
|
236
|
+
].map(({ l, v, c }) => (react_1.default.createElement("div", { key: l, style: { display: "flex", justifyContent: "space-between", alignItems: "center" } },
|
|
237
|
+
react_1.default.createElement("span", { style: { fontSize: 12, color: T.text2, fontFamily: T.body } }, l),
|
|
238
|
+
react_1.default.createElement("span", { style: { fontSize: 12, fontWeight: 700, color: c, fontFamily: T.body, letterSpacing: 0.3 } }, v))))),
|
|
239
|
+
react_1.default.createElement("p", { style: { fontSize: 11, color: T.text3, fontFamily: T.body, lineHeight: 1.5, marginTop: 12, textAlign: "center" } }, "Updates live as you change entity, revenue, and states."))));
|
|
240
|
+
}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import React from "react";
|
|
2
|
+
import { ClientProfile, TaxAxisScreenProps } from "../../lib/types";
|
|
3
|
+
export interface TaxAxisIntakeProps extends TaxAxisScreenProps {
|
|
4
|
+
onProspect: (profile: ClientProfile) => void;
|
|
5
|
+
onFullAnalysis: (profile: ClientProfile) => void;
|
|
6
|
+
initialProfile?: Partial<ClientProfile>;
|
|
7
|
+
}
|
|
8
|
+
export declare function TaxAxisIntake({ userContext, onProspect, onFullAnalysis, initialProfile, }: TaxAxisIntakeProps): React.JSX.Element;
|
|
@@ -0,0 +1,38 @@
|
|
|
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.TaxAxisIntake = TaxAxisIntake;
|
|
7
|
+
const react_1 = __importDefault(require("react"));
|
|
8
|
+
const react_hook_form_1 = require("react-hook-form");
|
|
9
|
+
const yup_1 = require("@hookform/resolvers/yup");
|
|
10
|
+
const intakeSchema_1 = require("./intakeSchema");
|
|
11
|
+
const ClientParametersSection_1 = require("./ClientParametersSection");
|
|
12
|
+
const RefineAnalysisSection_1 = require("./RefineAnalysisSection");
|
|
13
|
+
const CpaIntakeQuestionsSection_1 = require("./CpaIntakeQuestionsSection");
|
|
14
|
+
const StrategyRadar_1 = require("./StrategyRadar");
|
|
15
|
+
const IntakeCtaCards_1 = require("./IntakeCtaCards");
|
|
16
|
+
function TaxAxisIntake({ userContext = "expert", onProspect, onFullAnalysis, initialProfile, }) {
|
|
17
|
+
const methods = (0, react_hook_form_1.useForm)({
|
|
18
|
+
resolver: (0, yup_1.yupResolver)(intakeSchema_1.intakeSchema), // yupResolver generic incompatibility with RHF v7 — cast is intentional
|
|
19
|
+
defaultValues: Object.assign(Object.assign({}, intakeSchema_1.intakeDefaultValues), initialProfile),
|
|
20
|
+
mode: "onChange",
|
|
21
|
+
});
|
|
22
|
+
const profile = methods.watch();
|
|
23
|
+
const handleProspect = () => {
|
|
24
|
+
methods.handleSubmit((valid) => onProspect(valid), () => { })();
|
|
25
|
+
};
|
|
26
|
+
const handleFull = () => {
|
|
27
|
+
methods.handleSubmit((valid) => onFullAnalysis(valid), () => { })();
|
|
28
|
+
};
|
|
29
|
+
return (react_1.default.createElement(react_hook_form_1.FormProvider, Object.assign({}, methods),
|
|
30
|
+
react_1.default.createElement("div", { className: "grid grid-cols-[1fr_1fr] gap-5" },
|
|
31
|
+
react_1.default.createElement("div", { className: "flex flex-col gap-4" },
|
|
32
|
+
react_1.default.createElement(ClientParametersSection_1.ClientParametersSection, { userContext: userContext }),
|
|
33
|
+
react_1.default.createElement(RefineAnalysisSection_1.RefineAnalysisSection, { userContext: userContext }),
|
|
34
|
+
react_1.default.createElement(CpaIntakeQuestionsSection_1.CpaIntakeQuestionsSection, { userContext: userContext }),
|
|
35
|
+
react_1.default.createElement(IntakeCtaCards_1.IntakeCtaCards, { onProspect: handleProspect, onFullAnalysis: handleFull, userContext: userContext })),
|
|
36
|
+
react_1.default.createElement("div", { className: "sticky top-5 self-start" },
|
|
37
|
+
react_1.default.createElement(StrategyRadar_1.StrategyRadar, { profile: profile })))));
|
|
38
|
+
}
|