@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,60 @@
|
|
|
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.RerunFooter = RerunFooter;
|
|
7
|
+
const react_1 = __importDefault(require("react"));
|
|
8
|
+
function RerunFooter({ totalEdits, rerunning, onRerun }) {
|
|
9
|
+
if (totalEdits === 0)
|
|
10
|
+
return null;
|
|
11
|
+
return (react_1.default.createElement("div", { style: {
|
|
12
|
+
marginTop: 12,
|
|
13
|
+
background: "linear-gradient(135deg, rgba(36,131,132,0.12), rgba(36,131,132,0.06))",
|
|
14
|
+
border: "1px solid rgba(36,131,132,0.3)",
|
|
15
|
+
borderRadius: 12,
|
|
16
|
+
padding: "14px 18px",
|
|
17
|
+
display: "flex",
|
|
18
|
+
alignItems: "center",
|
|
19
|
+
gap: 14,
|
|
20
|
+
} },
|
|
21
|
+
react_1.default.createElement("div", { style: { flex: 1 } },
|
|
22
|
+
react_1.default.createElement("div", { className: "text-[13px] font-semibold font-tax-axis-head", style: { color: "#A1E5E6" } },
|
|
23
|
+
totalEdits,
|
|
24
|
+
" value",
|
|
25
|
+
totalEdits > 1 ? "s" : "",
|
|
26
|
+
" corrected"),
|
|
27
|
+
react_1.default.createElement("div", { className: "text-[11px] text-tax-axis-text-2 font-tax-axis-body mt-0.5" }, "Re-run to regenerate all strategies with corrected inputs.")),
|
|
28
|
+
react_1.default.createElement("button", { onClick: onRerun, disabled: rerunning, style: {
|
|
29
|
+
padding: "10px 22px",
|
|
30
|
+
background: rerunning
|
|
31
|
+
? "#171B44"
|
|
32
|
+
: "linear-gradient(135deg, #248384, #1A6B6C)",
|
|
33
|
+
border: "none",
|
|
34
|
+
borderRadius: 8,
|
|
35
|
+
fontSize: 13,
|
|
36
|
+
fontWeight: 600,
|
|
37
|
+
color: "#FFFFFF",
|
|
38
|
+
cursor: rerunning ? "wait" : "pointer",
|
|
39
|
+
whiteSpace: "nowrap",
|
|
40
|
+
boxShadow: rerunning ? "none" : "0 0 20px rgba(36,131,132,0.3)",
|
|
41
|
+
display: "flex",
|
|
42
|
+
alignItems: "center",
|
|
43
|
+
gap: 8,
|
|
44
|
+
transition: "all .2s",
|
|
45
|
+
fontFamily: "inherit",
|
|
46
|
+
} }, rerunning ? (react_1.default.createElement(react_1.default.Fragment, null,
|
|
47
|
+
react_1.default.createElement("div", { style: {
|
|
48
|
+
width: 14,
|
|
49
|
+
height: 14,
|
|
50
|
+
border: "2px solid transparent",
|
|
51
|
+
borderTopColor: "#A1E5E6",
|
|
52
|
+
borderRadius: "50%",
|
|
53
|
+
animation: "spin .8s linear infinite",
|
|
54
|
+
} }),
|
|
55
|
+
"Re-analyzing\u2026")) : (react_1.default.createElement(react_1.default.Fragment, null,
|
|
56
|
+
react_1.default.createElement("svg", { width: "14", height: "14", viewBox: "0 0 14 14", fill: "none" },
|
|
57
|
+
react_1.default.createElement("path", { d: "M1 7a6 6 0 0111.2-3M13 7a6 6 0 01-11.2 3", stroke: "#FFFFFF", strokeWidth: "1.5", strokeLinecap: "round" }),
|
|
58
|
+
react_1.default.createElement("path", { d: "M12 1v3h-3M2 13v-3h3", stroke: "#FFFFFF", strokeWidth: "1.5", strokeLinecap: "round", strokeLinejoin: "round" })),
|
|
59
|
+
"Rerun Analysis")))));
|
|
60
|
+
}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import React from "react";
|
|
2
|
+
import type { TaxAxisScreenProps } from "../../lib/types";
|
|
3
|
+
export interface TaxAxisExtractionReviewProps extends TaxAxisScreenProps {
|
|
4
|
+
onStatusChange?: (status: {
|
|
5
|
+
unreviewed: number;
|
|
6
|
+
edits: number;
|
|
7
|
+
}) => void;
|
|
8
|
+
onConfirmAndUnlock?: () => void;
|
|
9
|
+
onBack?: () => void;
|
|
10
|
+
}
|
|
11
|
+
export declare function TaxAxisExtractionReview({ onStatusChange, onConfirmAndUnlock, onBack, }: TaxAxisExtractionReviewProps): React.JSX.Element;
|
|
@@ -0,0 +1,186 @@
|
|
|
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.TaxAxisExtractionReview = TaxAxisExtractionReview;
|
|
27
|
+
const react_1 = __importStar(require("react"));
|
|
28
|
+
const data_1 = require("../../lib/data");
|
|
29
|
+
const TaxAxisButton_1 = require("../shared/TaxAxisButton");
|
|
30
|
+
const PurposeBlock_1 = require("./PurposeBlock");
|
|
31
|
+
const DocumentCard_1 = require("./DocumentCard");
|
|
32
|
+
const RerunFooter_1 = require("./RerunFooter");
|
|
33
|
+
function TaxAxisExtractionReview({ onStatusChange, onConfirmAndUnlock, onBack, }) {
|
|
34
|
+
// ─── State ─────────────────────────────────────────────────────
|
|
35
|
+
const [edits, setEdits] = (0, react_1.useState)({});
|
|
36
|
+
const [editingKey, setEditingKey] = (0, react_1.useState)(null);
|
|
37
|
+
const [editVal, setEditVal] = (0, react_1.useState)("");
|
|
38
|
+
const [expandedDocs, setExpandedDocs] = (0, react_1.useState)(() => {
|
|
39
|
+
const init = {};
|
|
40
|
+
data_1.EXTRACTED_DATA.forEach((d) => {
|
|
41
|
+
init[d.docId] = d.flagCount > 0;
|
|
42
|
+
});
|
|
43
|
+
return init;
|
|
44
|
+
});
|
|
45
|
+
const [cleanExpanded, setCleanExpanded] = (0, react_1.useState)(false);
|
|
46
|
+
const [rerunning, setRerunning] = (0, react_1.useState)(false);
|
|
47
|
+
// ─── Derived ───────────────────────────────────────────────────
|
|
48
|
+
const flaggedDocs = (0, react_1.useMemo)(() => data_1.EXTRACTED_DATA.filter((d) => d.flagCount > 0), []);
|
|
49
|
+
const cleanDocs = (0, react_1.useMemo)(() => data_1.EXTRACTED_DATA.filter((d) => d.flagCount === 0), []);
|
|
50
|
+
const totalFlags = flaggedDocs.reduce((a, d) => a + d.flagCount, 0);
|
|
51
|
+
const totalEdits = Object.keys(edits).length;
|
|
52
|
+
const totalFields = data_1.EXTRACTED_DATA.reduce((a, d) => a + d.fields.length, 0);
|
|
53
|
+
// ─── Callbacks ─────────────────────────────────────────────────
|
|
54
|
+
(0, react_1.useEffect)(() => {
|
|
55
|
+
if (onStatusChange) {
|
|
56
|
+
onStatusChange({
|
|
57
|
+
unreviewed: Math.max(0, totalFlags - totalEdits),
|
|
58
|
+
edits: totalEdits,
|
|
59
|
+
});
|
|
60
|
+
}
|
|
61
|
+
}, [totalEdits, totalFlags, onStatusChange]);
|
|
62
|
+
const startEdit = (docId, fieldIdx, val) => {
|
|
63
|
+
setEditingKey(docId + "-" + fieldIdx);
|
|
64
|
+
setEditVal(val);
|
|
65
|
+
};
|
|
66
|
+
const saveEdit = (docId, fieldIdx) => {
|
|
67
|
+
var _a, _b;
|
|
68
|
+
const k = docId + "-" + fieldIdx;
|
|
69
|
+
const orig = (_b = (_a = data_1.EXTRACTED_DATA.find((d) => d.docId === docId)) === null || _a === void 0 ? void 0 : _a.fields[fieldIdx]) === null || _b === void 0 ? void 0 : _b.value;
|
|
70
|
+
const origRaw = orig ? orig.replace(/[^0-9.]/g, "") : "";
|
|
71
|
+
if (editVal.trim() && editVal.trim() !== origRaw) {
|
|
72
|
+
setEdits((p) => (Object.assign(Object.assign({}, p), { [k]: editVal.trim() })));
|
|
73
|
+
}
|
|
74
|
+
setEditingKey(null);
|
|
75
|
+
setEditVal("");
|
|
76
|
+
};
|
|
77
|
+
const cancelEdit = () => {
|
|
78
|
+
setEditingKey(null);
|
|
79
|
+
setEditVal("");
|
|
80
|
+
};
|
|
81
|
+
const handleRerun = () => {
|
|
82
|
+
setRerunning(true);
|
|
83
|
+
setTimeout(() => {
|
|
84
|
+
setRerunning(false);
|
|
85
|
+
}, 2200);
|
|
86
|
+
};
|
|
87
|
+
const toggleDoc = (id) => setExpandedDocs((p) => (Object.assign(Object.assign({}, p), { [id]: !p[id] })));
|
|
88
|
+
// ─── Render ────────────────────────────────────────────────────
|
|
89
|
+
return (react_1.default.createElement("div", null,
|
|
90
|
+
react_1.default.createElement("style", null, `@keyframes spin{to{transform:rotate(360deg)}}`),
|
|
91
|
+
react_1.default.createElement(PurposeBlock_1.PurposeBlock, { totalFields: totalFields, totalDocs: data_1.EXTRACTED_DATA.length }),
|
|
92
|
+
react_1.default.createElement("div", { style: { display: "flex", alignItems: "center", gap: 10, marginBottom: 12 } },
|
|
93
|
+
react_1.default.createElement("div", { style: {
|
|
94
|
+
width: 8,
|
|
95
|
+
height: 8,
|
|
96
|
+
borderRadius: "50%",
|
|
97
|
+
background: totalEdits >= totalFlags ? "#248384" : "#FB9A1D",
|
|
98
|
+
transition: "background .3s",
|
|
99
|
+
} }),
|
|
100
|
+
react_1.default.createElement("span", { className: "text-[13px] font-bold text-white uppercase font-tax-axis-head", style: { letterSpacing: 1 } }, "Extracted Data"),
|
|
101
|
+
totalFlags - totalEdits > 0 && (react_1.default.createElement("span", { className: "text-[11px] text-tax-axis-text-2 font-tax-axis-body" },
|
|
102
|
+
"\u2014 ",
|
|
103
|
+
totalFlags - totalEdits,
|
|
104
|
+
" value",
|
|
105
|
+
totalFlags - totalEdits > 1 ? "s" : "",
|
|
106
|
+
" to review")),
|
|
107
|
+
totalFlags - totalEdits <= 0 && totalEdits > 0 && (react_1.default.createElement("span", { className: "text-[11px] font-tax-axis-body", style: { color: "#A1E5E6" } },
|
|
108
|
+
"\u2014 ",
|
|
109
|
+
totalEdits,
|
|
110
|
+
" correction",
|
|
111
|
+
totalEdits > 1 ? "s" : "",
|
|
112
|
+
" ready"))),
|
|
113
|
+
totalFlags - totalEdits > 0 && (react_1.default.createElement("div", { style: {
|
|
114
|
+
padding: "12px 16px",
|
|
115
|
+
background: "rgba(251,154,29,0.08)",
|
|
116
|
+
border: "1px solid rgba(251,154,29,0.25)",
|
|
117
|
+
borderRadius: 10,
|
|
118
|
+
marginBottom: 12,
|
|
119
|
+
fontSize: 13,
|
|
120
|
+
color: "#FFFFFF",
|
|
121
|
+
lineHeight: 1.65,
|
|
122
|
+
fontFamily: "inherit",
|
|
123
|
+
} },
|
|
124
|
+
react_1.default.createElement("strong", { style: { fontWeight: 700, color: "#FB9A1D" } },
|
|
125
|
+
totalFlags - totalEdits,
|
|
126
|
+
" value",
|
|
127
|
+
totalFlags - totalEdits > 1 ? "s" : "",
|
|
128
|
+
" need verification."),
|
|
129
|
+
" ",
|
|
130
|
+
"TaxAxis flagged these because its extraction confidence was below threshold. Verify each against the source document and correct if needed. The strategy tags below each value show which recommendations depend on it.")),
|
|
131
|
+
react_1.default.createElement("div", { style: { display: "flex", flexDirection: "column", gap: 8, marginBottom: cleanDocs.length ? 8 : 0 } }, flaggedDocs.map((d) => (react_1.default.createElement(DocumentCard_1.DocumentCard, { key: d.docId, doc: d, isFlagged: true, isOpen: !!expandedDocs[d.docId], onToggle: toggleDoc, editingKey: editingKey, editVal: editVal, edits: edits, onStartEdit: startEdit, onSaveEdit: saveEdit, onCancelEdit: cancelEdit, onEditValChange: setEditVal })))),
|
|
132
|
+
cleanDocs.length > 0 && (react_1.default.createElement("div", { style: {
|
|
133
|
+
background: "#0E1133",
|
|
134
|
+
border: "1px solid #2E3160",
|
|
135
|
+
borderRadius: 12,
|
|
136
|
+
overflow: "hidden",
|
|
137
|
+
boxShadow: "0 2px 12px rgba(6,8,33,0.5)",
|
|
138
|
+
} },
|
|
139
|
+
react_1.default.createElement("div", { onClick: () => setCleanExpanded(!cleanExpanded), style: {
|
|
140
|
+
padding: "12px 16px",
|
|
141
|
+
display: "flex",
|
|
142
|
+
alignItems: "center",
|
|
143
|
+
gap: 10,
|
|
144
|
+
cursor: "pointer",
|
|
145
|
+
} },
|
|
146
|
+
react_1.default.createElement("svg", { width: "12", height: "12", viewBox: "0 0 12 12", fill: "none" },
|
|
147
|
+
react_1.default.createElement("path", { d: "M2.5 6l3 3 4.5-5", stroke: "#34D399", strokeWidth: "1.5", strokeLinecap: "round" })),
|
|
148
|
+
react_1.default.createElement("span", { className: "text-[13px] text-white font-tax-axis-body" },
|
|
149
|
+
cleanDocs.length,
|
|
150
|
+
" document",
|
|
151
|
+
cleanDocs.length > 1 ? "s" : "",
|
|
152
|
+
" \u2014 all values verified"),
|
|
153
|
+
react_1.default.createElement("svg", { width: "12", height: "12", viewBox: "0 0 12 12", fill: "none", style: {
|
|
154
|
+
marginLeft: "auto",
|
|
155
|
+
transform: cleanExpanded ? "rotate(180deg)" : "none",
|
|
156
|
+
transition: "transform .2s",
|
|
157
|
+
} },
|
|
158
|
+
react_1.default.createElement("path", { d: "M3 4.5l3 3 3-3", stroke: "#E6E8F5", strokeWidth: "1.5", strokeLinecap: "round" }))),
|
|
159
|
+
cleanExpanded && (react_1.default.createElement("div", { style: { borderTop: "1px solid #2E3160", padding: "4px 8px 8px" } },
|
|
160
|
+
react_1.default.createElement("div", { style: { display: "flex", flexDirection: "column", gap: 6, padding: "4px 0" } }, cleanDocs.map((d) => (react_1.default.createElement(DocumentCard_1.DocumentCard, { key: d.docId, doc: d, isFlagged: false, isOpen: !!expandedDocs[d.docId], onToggle: toggleDoc, editingKey: editingKey, editVal: editVal, edits: edits, onStartEdit: startEdit, onSaveEdit: saveEdit, onCancelEdit: cancelEdit, onEditValChange: setEditVal })))))),
|
|
161
|
+
!cleanExpanded && (react_1.default.createElement("div", { style: { padding: "4px 16px 12px", display: "flex", gap: 6, flexWrap: "wrap" } }, cleanDocs.map((d) => (react_1.default.createElement("span", { key: d.docId, className: "font-tax-axis-mono", style: {
|
|
162
|
+
fontSize: 10,
|
|
163
|
+
color: "#E6E8F5",
|
|
164
|
+
padding: "2px 8px",
|
|
165
|
+
background: "#171B44",
|
|
166
|
+
borderRadius: 4,
|
|
167
|
+
border: "1px solid #2E3160",
|
|
168
|
+
} }, d.code))))))),
|
|
169
|
+
react_1.default.createElement(RerunFooter_1.RerunFooter, { totalEdits: totalEdits, rerunning: rerunning, onRerun: handleRerun }),
|
|
170
|
+
onConfirmAndUnlock && (react_1.default.createElement("div", { style: {
|
|
171
|
+
marginTop: 16,
|
|
172
|
+
background: "linear-gradient(135deg, rgba(36,131,132,0.12), rgba(36,131,132,0.06))",
|
|
173
|
+
border: "1px solid rgba(36,131,132,0.3)",
|
|
174
|
+
borderRadius: 12,
|
|
175
|
+
padding: "18px 20px",
|
|
176
|
+
} },
|
|
177
|
+
react_1.default.createElement("div", { className: "flex items-center gap-4" },
|
|
178
|
+
react_1.default.createElement("div", { className: "flex-1" },
|
|
179
|
+
react_1.default.createElement("div", { className: "text-[15px] font-bold text-white font-tax-axis-head mb-1" }, "Ready to view your report?"),
|
|
180
|
+
react_1.default.createElement("div", { className: "text-[13px] text-tax-axis-text leading-relaxed font-tax-axis-body" }, totalFlags - totalEdits > 0
|
|
181
|
+
? (totalFlags - totalEdits) + " value" + (totalFlags - totalEdits > 1 ? "s" : "") + " still flagged. You can confirm now or correct values first."
|
|
182
|
+
: "All extracted values look good. Confirm to unlock the Intelligence Report.")),
|
|
183
|
+
react_1.default.createElement("div", { className: "flex gap-2.5" },
|
|
184
|
+
onBack && (react_1.default.createElement(TaxAxisButton_1.TaxAxisButton, { variant: "secondary", onClick: onBack }, "Back to Dashboard")),
|
|
185
|
+
react_1.default.createElement(TaxAxisButton_1.TaxAxisButton, { onClick: onConfirmAndUnlock }, totalFlags - totalEdits > 0 ? "Confirm & Unlock Report" : "Confirm & View Report")))))));
|
|
186
|
+
}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import React from "react";
|
|
2
|
+
import { UserContext } from "../../lib/types";
|
|
3
|
+
interface ClientParametersSectionProps {
|
|
4
|
+
userContext?: UserContext;
|
|
5
|
+
}
|
|
6
|
+
export declare function ClientParametersSection({ userContext, }: ClientParametersSectionProps): React.JSX.Element;
|
|
7
|
+
export {};
|
|
@@ -0,0 +1,146 @@
|
|
|
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.ClientParametersSection = ClientParametersSection;
|
|
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
|
+
const StateMultiSelect_1 = require("./StateMultiSelect");
|
|
31
|
+
const data_1 = require("../../lib/data");
|
|
32
|
+
// Strip everything except digits and a single decimal point
|
|
33
|
+
const stripToNum = (v) => {
|
|
34
|
+
const stripped = v.replace(/[^0-9.]/g, "");
|
|
35
|
+
const parts = stripped.split(".");
|
|
36
|
+
if (parts.length <= 1)
|
|
37
|
+
return stripped;
|
|
38
|
+
return parts[0] + "." + parts.slice(1).join("");
|
|
39
|
+
};
|
|
40
|
+
// Strip to integer only (no decimal)
|
|
41
|
+
const stripToInt = (v) => v.replace(/[^0-9]/g, "");
|
|
42
|
+
/* ═══ Shared class constants ═══ */
|
|
43
|
+
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";
|
|
44
|
+
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";
|
|
45
|
+
const labelCls = "block text-[11px] font-semibold text-tax-axis-text-2 mb-1 font-tax-axis-body tracking-wide";
|
|
46
|
+
const errCls = "text-tax-axis-red text-xs mt-1";
|
|
47
|
+
/* ═══ Chevron shared by all <select> wrappers ═══ */
|
|
48
|
+
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" },
|
|
49
|
+
react_1.default.createElement("path", { d: "M3 4.5l3 3 3-3", stroke: "#E6E8F5", strokeWidth: "1.5", strokeLinecap: "round" })));
|
|
50
|
+
/* ═══ Option lists (spec-canonical) ═══ */
|
|
51
|
+
const ENTITY_OPTIONS = [
|
|
52
|
+
"S-Corporation",
|
|
53
|
+
"C-Corporation",
|
|
54
|
+
"LLC",
|
|
55
|
+
"Partnership",
|
|
56
|
+
"Sole Proprietor",
|
|
57
|
+
];
|
|
58
|
+
const INDUSTRY_OPTIONS = [
|
|
59
|
+
"Professional Services",
|
|
60
|
+
"Restaurant / Hospitality",
|
|
61
|
+
"Retail",
|
|
62
|
+
"Manufacturing",
|
|
63
|
+
"Construction",
|
|
64
|
+
"Healthcare",
|
|
65
|
+
"Technology",
|
|
66
|
+
"Real Estate",
|
|
67
|
+
"Other",
|
|
68
|
+
];
|
|
69
|
+
const PERIOD_OPTIONS = ["Full Year", "YTD"];
|
|
70
|
+
const YEAR_OPTIONS = ["2024", "2025", "2026"];
|
|
71
|
+
function ClientParametersSection({ userContext = "expert", }) {
|
|
72
|
+
const { control, formState: { errors }, } = (0, react_hook_form_1.useFormContext)();
|
|
73
|
+
// TECH DEBT (post-BDO): Analysis Period dropdown is local useState only —
|
|
74
|
+
// value does not persist to form state because ClientProfile has no `period`
|
|
75
|
+
// field. computeAllStrategies does not read this value. Spec defect.
|
|
76
|
+
// Resolve post-BDO by either adding `period` to ClientProfile or removing
|
|
77
|
+
// the field entirely.
|
|
78
|
+
const [analysisPeriod, setAnalysisPeriod] = (0, react_1.useState)("Full Year");
|
|
79
|
+
const [expanded, setExpanded] = (0, react_1.useState)(true);
|
|
80
|
+
return (react_1.default.createElement(TaxAxisCard_1.TaxAxisCard, null,
|
|
81
|
+
react_1.default.createElement("div", { onClick: () => setExpanded((prev) => !prev), className: "flex items-center justify-between cursor-pointer", style: { marginBottom: expanded ? 14 : 0 } },
|
|
82
|
+
react_1.default.createElement("span", { className: "text-[10px] font-bold uppercase tracking-widest text-tax-axis-teal-light font-tax-axis-body" }, userContext === "cpa-firm-client" ? "Your Business" : "Client Parameters"),
|
|
83
|
+
react_1.default.createElement("svg", { className: `transition-transform ${expanded ? "rotate-180" : "rotate-0"}`, width: "10", height: "10", viewBox: "0 0 12 12", fill: "none" },
|
|
84
|
+
react_1.default.createElement("path", { d: "M3 4.5l3 3 3-3", stroke: "#9498B8", strokeWidth: "1.5", strokeLinecap: "round" }))),
|
|
85
|
+
expanded && (react_1.default.createElement(react_1.default.Fragment, null,
|
|
86
|
+
react_1.default.createElement("div", { className: "grid grid-cols-2 gap-3" },
|
|
87
|
+
react_1.default.createElement("div", null,
|
|
88
|
+
react_1.default.createElement("label", { className: labelCls }, "Business Name"),
|
|
89
|
+
react_1.default.createElement(react_hook_form_1.Controller, { name: "bizName", control: control, render: ({ field }) => (react_1.default.createElement("input", Object.assign({}, field, { placeholder: "Acme Consulting LLC", className: inputCls }))) }),
|
|
90
|
+
errors.bizName && react_1.default.createElement("div", { className: errCls }, errors.bizName.message)),
|
|
91
|
+
react_1.default.createElement("div", null,
|
|
92
|
+
react_1.default.createElement("label", { className: labelCls }, userContext === "cpa-firm-client" ? "Your Firm Name" : "Preparer Name"),
|
|
93
|
+
react_1.default.createElement(react_hook_form_1.Controller, { name: "cpaName", control: control, render: ({ field }) => (react_1.default.createElement("input", Object.assign({}, field, { placeholder: "Sarah Chen, EA", className: inputCls }))) }),
|
|
94
|
+
errors.cpaName && react_1.default.createElement("div", { className: errCls }, errors.cpaName.message)),
|
|
95
|
+
react_1.default.createElement("div", null,
|
|
96
|
+
react_1.default.createElement("label", { className: labelCls }, "Entity Type"),
|
|
97
|
+
react_1.default.createElement(react_hook_form_1.Controller, { name: "entity", control: control, render: ({ field }) => (react_1.default.createElement("div", { className: "relative" },
|
|
98
|
+
react_1.default.createElement("select", Object.assign({}, field, { className: selectCls }), ENTITY_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
|
+
errors.entity && react_1.default.createElement("div", { className: errCls }, errors.entity.message)),
|
|
101
|
+
react_1.default.createElement("div", null,
|
|
102
|
+
react_1.default.createElement("label", { className: labelCls }, "Industry"),
|
|
103
|
+
react_1.default.createElement(react_hook_form_1.Controller, { name: "industry", control: control, render: ({ field }) => (react_1.default.createElement("div", { className: "relative" },
|
|
104
|
+
react_1.default.createElement("select", Object.assign({}, field, { className: selectCls }), INDUSTRY_OPTIONS.map(o => (react_1.default.createElement("option", { key: o, value: o, className: "bg-tax-axis-surface-2" }, o)))),
|
|
105
|
+
react_1.default.createElement(Chevron, null))) }),
|
|
106
|
+
errors.industry && react_1.default.createElement("div", { className: errCls }, errors.industry.message)),
|
|
107
|
+
react_1.default.createElement("div", null,
|
|
108
|
+
react_1.default.createElement("label", { className: labelCls }, "Analysis Period"),
|
|
109
|
+
react_1.default.createElement("div", { className: "relative" },
|
|
110
|
+
react_1.default.createElement("select", { value: analysisPeriod, onChange: e => setAnalysisPeriod(e.target.value), className: selectCls }, PERIOD_OPTIONS.map(o => (react_1.default.createElement("option", { key: o, value: o, className: "bg-tax-axis-surface-2" }, o)))),
|
|
111
|
+
react_1.default.createElement(Chevron, null))),
|
|
112
|
+
react_1.default.createElement("div", null,
|
|
113
|
+
react_1.default.createElement("label", { className: labelCls }, "Annual Revenue"),
|
|
114
|
+
react_1.default.createElement(react_hook_form_1.Controller, { name: "revenue", 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: "500,000", className: `${inputCls} pl-6`, onChange: (e) => field.onChange(stripToNum(e.target.value)) })))) }),
|
|
117
|
+
errors.revenue && react_1.default.createElement("div", { className: errCls }, errors.revenue.message)),
|
|
118
|
+
react_1.default.createElement("div", null,
|
|
119
|
+
react_1.default.createElement("label", { className: labelCls }, "Owner W-2 Comp"),
|
|
120
|
+
react_1.default.createElement(react_hook_form_1.Controller, { name: "ownerComp", 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: "65,000", className: `${inputCls} pl-6`, onChange: (e) => field.onChange(stripToNum(e.target.value)) })))) })),
|
|
123
|
+
react_1.default.createElement("div", null,
|
|
124
|
+
react_1.default.createElement("label", { className: labelCls }, "Employees"),
|
|
125
|
+
react_1.default.createElement(react_hook_form_1.Controller, { name: "employees", control: control, render: ({ field }) => (react_1.default.createElement("input", Object.assign({}, field, { placeholder: "3", className: inputCls, onChange: (e) => field.onChange(stripToInt(e.target.value)) }))) })),
|
|
126
|
+
react_1.default.createElement("div", null,
|
|
127
|
+
react_1.default.createElement("label", { className: labelCls }, "Tax Year"),
|
|
128
|
+
react_1.default.createElement(react_hook_form_1.Controller, { name: "year", control: control, render: ({ field }) => (react_1.default.createElement("div", { className: "relative" },
|
|
129
|
+
react_1.default.createElement("select", Object.assign({}, field, { className: selectCls }), YEAR_OPTIONS.map(o => (react_1.default.createElement("option", { key: o, value: o, className: "bg-tax-axis-surface-2" }, o)))),
|
|
130
|
+
react_1.default.createElement(Chevron, null))) }),
|
|
131
|
+
errors.year && react_1.default.createElement("div", { className: errCls }, errors.year.message))),
|
|
132
|
+
react_1.default.createElement("div", { className: "border-t border-tax-axis-border pt-3 mt-3.5" },
|
|
133
|
+
react_1.default.createElement(react_hook_form_1.Controller, { name: "states", control: control, render: ({ field }) => (react_1.default.createElement(react_1.default.Fragment, null,
|
|
134
|
+
react_1.default.createElement("label", { className: `${labelCls} flex items-center gap-1.5` },
|
|
135
|
+
"States of Operation",
|
|
136
|
+
field.value && field.value.length > 0 && (react_1.default.createElement("span", { className: "text-[9px] font-semibold text-tax-axis-teal-light font-tax-axis-body" },
|
|
137
|
+
"(",
|
|
138
|
+
field.value.length,
|
|
139
|
+
")"))),
|
|
140
|
+
react_1.default.createElement(StateMultiSelect_1.StateMultiSelect, { selected: field.value || [], onChange: field.onChange }),
|
|
141
|
+
field.value && field.value.length > 0 && (react_1.default.createElement("div", { className: "mt-1.5 flex gap-1 flex-wrap" },
|
|
142
|
+
field.value.some((s) => data_1.PTE_STATES.has(s)) && (react_1.default.createElement("span", { className: "text-[8px] font-semibold text-tax-axis-teal-light bg-tax-axis-teal-bg px-1.5 py-0.5 rounded font-tax-axis-mono" }, "PTE")),
|
|
143
|
+
field.value.some((s) => data_1.NO_INCOME_TAX.has(s)) && (react_1.default.createElement("span", { className: "text-[8px] font-semibold text-tax-axis-green bg-tax-axis-green-bg px-1.5 py-0.5 rounded font-tax-axis-mono" }, "NO-TAX")),
|
|
144
|
+
field.value.length > 1 && (react_1.default.createElement("span", { className: "text-[8px] font-semibold text-tax-axis-orange bg-tax-axis-orange-bg px-1.5 py-0.5 rounded font-tax-axis-mono" }, "NEXUS")))))) }),
|
|
145
|
+
errors.states && react_1.default.createElement("div", { className: errCls }, errors.states.message))))));
|
|
146
|
+
}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import React from "react";
|
|
2
|
+
import { UserContext } from "../../lib/types";
|
|
3
|
+
interface CpaIntakeQuestionsSectionProps {
|
|
4
|
+
userContext?: UserContext;
|
|
5
|
+
}
|
|
6
|
+
export declare function CpaIntakeQuestionsSection({ userContext, }: CpaIntakeQuestionsSectionProps): React.JSX.Element;
|
|
7
|
+
export {};
|
|
@@ -0,0 +1,93 @@
|
|
|
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.CpaIntakeQuestionsSection = CpaIntakeQuestionsSection;
|
|
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 helperCls = "text-[11px] text-tax-axis-text-4 mt-0.5 leading-tight";
|
|
35
|
+
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" },
|
|
36
|
+
react_1.default.createElement("path", { d: "M3 4.5l3 3 3-3", stroke: "#E6E8F5", strokeWidth: "1.5", strokeLinecap: "round" })));
|
|
37
|
+
/* ═══ Option lists ═══ */
|
|
38
|
+
const HDHP_OPTIONS = ["No", "Yes"];
|
|
39
|
+
const WOTC_OPTIONS = ["No", "Yes — Form 8850 submitted", "Yes — No Form 8850"];
|
|
40
|
+
const FAMILY_OPTIONS = ["No", "Yes"];
|
|
41
|
+
function CpaIntakeQuestionsSection({ userContext = "expert", }) {
|
|
42
|
+
// Collapsed by default (spec S1.4 explicitly says "collapsed by default").
|
|
43
|
+
const [expanded, setExpanded] = (0, react_1.useState)(false);
|
|
44
|
+
const { control, watch } = (0, react_hook_form_1.useFormContext)();
|
|
45
|
+
const hdhpEnrolled = watch("hdhpEnrolled");
|
|
46
|
+
const industry = watch("industry");
|
|
47
|
+
return (react_1.default.createElement(TaxAxisCard_1.TaxAxisCard, null,
|
|
48
|
+
react_1.default.createElement("div", { onClick: () => setExpanded(prev => !prev), className: "flex items-center justify-between cursor-pointer", style: { marginBottom: expanded ? 10 : 0 } },
|
|
49
|
+
react_1.default.createElement("span", { className: "text-[11px] font-semibold uppercase tracking-wider text-tax-axis-text-3" }, userContext === "cpa-firm-client" ? "Additional Details" : "CPA Intake Questions"),
|
|
50
|
+
react_1.default.createElement("svg", { className: `transition-transform ${expanded ? "rotate-180" : "rotate-0"}`, width: "10", height: "10", viewBox: "0 0 12 12", fill: "none" },
|
|
51
|
+
react_1.default.createElement("path", { d: "M3 4.5l3 3 3-3", stroke: "#9498B8", strokeWidth: "1.5", strokeLinecap: "round" }))),
|
|
52
|
+
expanded && (react_1.default.createElement("div", null,
|
|
53
|
+
react_1.default.createElement("div", { className: "grid grid-cols-2 gap-3 mb-2.5" },
|
|
54
|
+
react_1.default.createElement("div", null,
|
|
55
|
+
react_1.default.createElement("label", { className: labelCls }, "Overtime Premium Paid"),
|
|
56
|
+
react_1.default.createElement(react_hook_form_1.Controller, { name: "overtimePremium", control: control, render: ({ field }) => (react_1.default.createElement("div", { className: "relative" },
|
|
57
|
+
react_1.default.createElement("span", { className: "absolute left-2.5 top-1/2 -translate-y-1/2 text-tax-axis-text-3 text-[13px]" }, "$"),
|
|
58
|
+
react_1.default.createElement("input", Object.assign({}, field, { placeholder: "0", className: `${inputCls} pl-6` })))) }),
|
|
59
|
+
react_1.default.createElement("div", { className: helperCls }, "Extra 0.5\u00D7 rate on hours above 40/week, not total overtime wages")),
|
|
60
|
+
react_1.default.createElement("div", null,
|
|
61
|
+
react_1.default.createElement("label", { className: labelCls }, "Gross Revenue from Tips"),
|
|
62
|
+
react_1.default.createElement(react_hook_form_1.Controller, { name: "tipIncomePct", control: control, render: ({ field }) => (react_1.default.createElement("div", { className: "relative" },
|
|
63
|
+
react_1.default.createElement("input", Object.assign({}, field, { placeholder: "0", className: `${inputCls} pr-6` })),
|
|
64
|
+
react_1.default.createElement("span", { className: "absolute right-2.5 top-1/2 -translate-y-1/2 text-tax-axis-text-3 text-[13px]" }, "%"))) }),
|
|
65
|
+
industry !== "Restaurant / Hospitality" && (react_1.default.createElement("div", { className: helperCls }, "Typically relevant for Restaurant / Hospitality")))),
|
|
66
|
+
react_1.default.createElement("div", { className: "grid grid-cols-2 gap-3 mb-2.5" },
|
|
67
|
+
react_1.default.createElement("div", null,
|
|
68
|
+
react_1.default.createElement("label", { className: labelCls }, "Retirement Plan Contributions"),
|
|
69
|
+
react_1.default.createElement(react_hook_form_1.Controller, { name: "retirementContributions", control: control, render: ({ field }) => (react_1.default.createElement("div", { className: "relative" },
|
|
70
|
+
react_1.default.createElement("span", { className: "absolute left-2.5 top-1/2 -translate-y-1/2 text-tax-axis-text-3 text-[13px]" }, "$"),
|
|
71
|
+
react_1.default.createElement("input", Object.assign({}, field, { placeholder: "0", className: `${inputCls} pl-6` })))) })),
|
|
72
|
+
react_1.default.createElement("div", null,
|
|
73
|
+
react_1.default.createElement("label", { className: labelCls }, "Enrolled in HDHP?"),
|
|
74
|
+
react_1.default.createElement(react_hook_form_1.Controller, { name: "hdhpEnrolled", control: control, render: ({ field }) => (react_1.default.createElement("div", { className: "relative" },
|
|
75
|
+
react_1.default.createElement("select", Object.assign({}, field, { className: selectCls }), HDHP_OPTIONS.map(o => (react_1.default.createElement("option", { key: o, value: o, className: "bg-tax-axis-surface-2" }, o)))),
|
|
76
|
+
react_1.default.createElement(Chevron, null))) }),
|
|
77
|
+
hdhpEnrolled === "Yes" && (react_1.default.createElement("div", { className: "mt-1.5 transition-opacity" },
|
|
78
|
+
react_1.default.createElement("label", { className: labelCls }, "HSA Contributions"),
|
|
79
|
+
react_1.default.createElement(react_hook_form_1.Controller, { name: "hsaContributions", control: control, render: ({ field }) => (react_1.default.createElement("div", { className: "relative" },
|
|
80
|
+
react_1.default.createElement("span", { className: "absolute left-2.5 top-1/2 -translate-y-1/2 text-tax-axis-text-3 text-[13px]" }, "$"),
|
|
81
|
+
react_1.default.createElement("input", Object.assign({}, field, { placeholder: "0", className: `${inputCls} pl-6` })))) }))))),
|
|
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 }, "WOTC Qualifying Hires"),
|
|
85
|
+
react_1.default.createElement(react_hook_form_1.Controller, { name: "wotcHires", control: control, render: ({ field }) => (react_1.default.createElement("div", { className: "relative" },
|
|
86
|
+
react_1.default.createElement("select", Object.assign({}, field, { className: selectCls }), WOTC_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", null,
|
|
89
|
+
react_1.default.createElement("label", { className: labelCls }, "Family Members Employed (W-2)"),
|
|
90
|
+
react_1.default.createElement(react_hook_form_1.Controller, { name: "familyEmployed", control: control, render: ({ field }) => (react_1.default.createElement("div", { className: "relative" },
|
|
91
|
+
react_1.default.createElement("select", Object.assign({}, field, { className: selectCls }), FAMILY_OPTIONS.map(o => (react_1.default.createElement("option", { key: o, value: o, className: "bg-tax-axis-surface-2" }, o)))),
|
|
92
|
+
react_1.default.createElement(Chevron, null))) })))))));
|
|
93
|
+
}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import React from "react";
|
|
2
|
+
import { UserContext } from "../../lib/types";
|
|
3
|
+
interface IntakeCtaCardsProps {
|
|
4
|
+
onProspect: () => void;
|
|
5
|
+
onFullAnalysis: () => void;
|
|
6
|
+
userContext?: UserContext;
|
|
7
|
+
}
|
|
8
|
+
export declare function IntakeCtaCards({ onProspect, onFullAnalysis, userContext, }: IntakeCtaCardsProps): React.JSX.Element;
|
|
9
|
+
export {};
|
|
@@ -0,0 +1,30 @@
|
|
|
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.IntakeCtaCards = IntakeCtaCards;
|
|
7
|
+
const react_1 = __importDefault(require("react"));
|
|
8
|
+
const TaxAxisButton_1 = require("../shared/TaxAxisButton");
|
|
9
|
+
const TaxAxisBadge_1 = require("../shared/TaxAxisBadge");
|
|
10
|
+
function IntakeCtaCards({ onProspect, onFullAnalysis, userContext = "expert", }) {
|
|
11
|
+
return (react_1.default.createElement("div", { className: "grid grid-cols-2 gap-3" },
|
|
12
|
+
react_1.default.createElement("div", { className: "bg-tax-axis-surface border border-tax-axis-border rounded-xl p-4 min-h-[140px] flex flex-col transition-all" },
|
|
13
|
+
react_1.default.createElement("div", { className: "text-[11px] font-bold text-tax-axis-orange uppercase tracking-widest mb-2.5 font-tax-axis-body" }, "Prospect Report"),
|
|
14
|
+
react_1.default.createElement("div", { className: "text-xs text-tax-axis-text-3 font-tax-axis-body mb-3" }, "Top 3 strategies \u00B7 Savings ranges \u00B7 ~2 min \u00B7 No docs"),
|
|
15
|
+
react_1.default.createElement("div", { className: "flex-1" }),
|
|
16
|
+
react_1.default.createElement(TaxAxisButton_1.TaxAxisButton, { variant: "orange", onClick: onProspect, className: "w-full text-xs" }, userContext === "cpa-firm-client"
|
|
17
|
+
? "Generate My Savings Report"
|
|
18
|
+
: "Generate Prospect Report")),
|
|
19
|
+
react_1.default.createElement("div", { className: "bg-tax-axis-surface border border-tax-axis-teal rounded-xl p-4 min-h-[140px] flex flex-col transition-all", style: {
|
|
20
|
+
background: "radial-gradient(ellipse at 50% 0%,rgba(36,131,132,0.06) 0%,transparent 70%) #0F1330",
|
|
21
|
+
boxShadow: "0 0 30px rgba(36,131,132,0.15)",
|
|
22
|
+
} },
|
|
23
|
+
react_1.default.createElement(TaxAxisBadge_1.TaxAxisBadge, { color: "teal", variant: "outline", size: "xs" }, "Recommended"),
|
|
24
|
+
react_1.default.createElement("div", { className: "text-[11px] font-bold text-tax-axis-teal uppercase tracking-widest mt-2 mb-2.5 font-tax-axis-body" }, "Full Analysis"),
|
|
25
|
+
react_1.default.createElement("div", { className: "text-xs text-tax-axis-text-3 font-tax-axis-body mb-3" }, "All 25 strategies \u00B7 Real dollar savings \u00B7 ~15 min"),
|
|
26
|
+
react_1.default.createElement("div", { className: "flex-1" }),
|
|
27
|
+
react_1.default.createElement(TaxAxisButton_1.TaxAxisButton, { variant: "primary", onClick: onFullAnalysis, className: "w-full text-xs" }, userContext === "cpa-firm-client"
|
|
28
|
+
? "Run Full Analysis on My Business"
|
|
29
|
+
: "Start Full Analysis"))));
|
|
30
|
+
}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import React from "react";
|
|
2
|
+
import { UserContext } from "../../lib/types";
|
|
3
|
+
interface RefineAnalysisSectionProps {
|
|
4
|
+
userContext?: UserContext;
|
|
5
|
+
}
|
|
6
|
+
export declare function RefineAnalysisSection({ userContext: _userContext, }: RefineAnalysisSectionProps): React.JSX.Element;
|
|
7
|
+
export {};
|