@paro.io/expert-shared-components 1.14.65 → 1.14.67

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (81) hide show
  1. package/lib/components/DocumentCenter/MultiFileUploadSection.js +220 -121
  2. package/lib/components/TaxAxis/TaxAxisApi.d.ts +0 -1
  3. package/lib/components/TaxAxis/TaxAxisShell.js +5 -80
  4. package/lib/components/shared/UploadClient.d.ts +2 -1
  5. package/lib/components/shared/UploadClient.js +6 -2
  6. package/lib/index.d.ts +1 -13
  7. package/lib/index.js +1 -27
  8. package/lib/tax-axis/components/clientReport/ExecutiveSummary.d.ts +4 -1
  9. package/lib/tax-axis/components/clientReport/ExecutiveSummary.js +10 -6
  10. package/lib/tax-axis/components/clientReport/Methodology.js +2 -2
  11. package/lib/tax-axis/components/clientReport/RecommendedStrategies.d.ts +6 -1
  12. package/lib/tax-axis/components/clientReport/RecommendedStrategies.js +26 -24
  13. package/lib/tax-axis/components/clientReport/StrategyCard.d.ts +1 -1
  14. package/lib/tax-axis/components/clientReport/StrategyCard.js +39 -23
  15. package/lib/tax-axis/components/clientReport/TaxAxisClientReport.d.ts +5 -2
  16. package/lib/tax-axis/components/clientReport/TaxAxisClientReport.js +9 -7
  17. package/lib/tax-axis/components/dashboard/DashboardActions.js +6 -5
  18. package/lib/tax-axis/components/dashboard/DashboardSummary.d.ts +6 -1
  19. package/lib/tax-axis/components/dashboard/DashboardSummary.js +19 -10
  20. package/lib/tax-axis/components/dashboard/StrategyDetailPanel.d.ts +1 -1
  21. package/lib/tax-axis/components/dashboard/StrategyDetailPanel.js +122 -95
  22. package/lib/tax-axis/components/dashboard/TaxAxisDashboard.d.ts +58 -4
  23. package/lib/tax-axis/components/dashboard/TaxAxisDashboard.js +375 -56
  24. package/lib/tax-axis/components/documents/DocumentCard.d.ts +6 -3
  25. package/lib/tax-axis/components/documents/DocumentCard.js +72 -15
  26. package/lib/tax-axis/components/documents/DocumentReviewModal.d.ts +3 -1
  27. package/lib/tax-axis/components/documents/DocumentReviewModal.js +113 -263
  28. package/lib/tax-axis/components/documents/DocumentTier.d.ts +5 -4
  29. package/lib/tax-axis/components/documents/DocumentTier.js +2 -2
  30. package/lib/tax-axis/components/documents/TaxAxisDocuments.d.ts +28 -8
  31. package/lib/tax-axis/components/documents/TaxAxisDocuments.js +340 -156
  32. package/lib/tax-axis/components/documents/qbo/QboAvailableReportsModal.d.ts +13 -0
  33. package/lib/tax-axis/components/documents/qbo/QboAvailableReportsModal.js +180 -0
  34. package/lib/tax-axis/components/documents/qbo/QboClientSelectorModal.d.ts +10 -0
  35. package/lib/tax-axis/components/documents/qbo/QboClientSelectorModal.js +155 -0
  36. package/lib/tax-axis/components/documents/qbo/QboConnectBanner.d.ts +9 -0
  37. package/lib/tax-axis/components/documents/qbo/QboConnectBanner.js +55 -0
  38. package/lib/tax-axis/components/documents/qbo/QboDocumentMappingModal.d.ts +10 -0
  39. package/lib/tax-axis/components/documents/qbo/QboDocumentMappingModal.js +202 -0
  40. package/lib/tax-axis/components/documents/qbo/QboImportingModal.d.ts +8 -0
  41. package/lib/tax-axis/components/documents/qbo/QboImportingModal.js +75 -0
  42. package/lib/tax-axis/components/documents/qbo/QboPermissionsModal.d.ts +8 -0
  43. package/lib/tax-axis/components/documents/qbo/QboPermissionsModal.js +126 -0
  44. package/lib/tax-axis/components/documents/qbo/index.d.ts +8 -0
  45. package/lib/tax-axis/components/documents/qbo/index.js +17 -0
  46. package/lib/tax-axis/components/documents/qbo/qboConstants.d.ts +24 -0
  47. package/lib/tax-axis/components/documents/qbo/qboConstants.js +71 -0
  48. package/lib/tax-axis/components/documents/qbo/types.d.ts +43 -0
  49. package/lib/tax-axis/components/documents/qbo/types.js +3 -0
  50. package/lib/tax-axis/components/documents/qbo/useQboFlow.d.ts +19 -0
  51. package/lib/tax-axis/components/documents/qbo/useQboFlow.js +207 -0
  52. package/lib/tax-axis/components/intake/ClientParametersSection.js +14 -30
  53. package/lib/tax-axis/components/intake/CpaIntakeQuestionsSection.js +3 -3
  54. package/lib/tax-axis/components/intake/IntakeCtaCards.d.ts +1 -2
  55. package/lib/tax-axis/components/intake/IntakeCtaCards.js +6 -13
  56. package/lib/tax-axis/components/intake/RefineAnalysisSection.js +7 -7
  57. package/lib/tax-axis/components/intake/TaxAxisIntake.js +7 -95
  58. package/lib/tax-axis/components/intake/intakeSchema.d.ts +0 -3
  59. package/lib/tax-axis/components/intake/intakeSchema.js +2 -4
  60. package/lib/tax-axis/components/preparerWorkpaper/TaxAxisPreparerWorkpaper.d.ts +23 -4
  61. package/lib/tax-axis/components/preparerWorkpaper/TaxAxisPreparerWorkpaper.js +15 -4
  62. package/lib/tax-axis/components/processing/TaxAxisProcessing.d.ts +2 -1
  63. package/lib/tax-axis/components/processing/TaxAxisProcessing.js +102 -31
  64. package/lib/tax-axis/components/prospectReport/ProspectPrintView.js +0 -2
  65. package/lib/tax-axis/components/prospectReport/ProspectStrategyCard.d.ts +1 -8
  66. package/lib/tax-axis/components/prospectReport/ProspectStrategyCard.js +5 -5
  67. package/lib/tax-axis/components/prospectReport/TaxAxisProspectReport.d.ts +1 -27
  68. package/lib/tax-axis/components/prospectReport/TaxAxisProspectReport.js +25 -43
  69. package/lib/tax-axis/index.d.ts +3 -1
  70. package/lib/tax-axis/index.js +4 -3
  71. package/lib/tax-axis/lib/adapters/useEngineOutput.d.ts +138 -13
  72. package/lib/tax-axis/lib/adapters/useEngineOutput.js +156 -7
  73. package/lib/tax-axis/lib/data/documents.d.ts +3 -2
  74. package/lib/tax-axis/lib/data/documents.js +225 -25
  75. package/lib/tax-axis/lib/data/strategies.js +9 -9
  76. package/lib/tax-axis/lib/documentFieldCatalog.d.ts +7 -12
  77. package/lib/tax-axis/lib/documentFieldCatalog.js +805 -8
  78. package/lib/tax-axis/lib/types/index.d.ts +13 -1
  79. package/package.json +1 -1
  80. package/lib/README.md +0 -2
  81. package/lib/package.json +0 -68
@@ -0,0 +1,180 @@
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.QboAvailableReportsModal = QboAvailableReportsModal;
27
+ const react_1 = __importStar(require("react"));
28
+ const qboConstants_1 = require("./qboConstants");
29
+ const QBO_YEAR_OPTIONS = [2023, 2024, 2025, 2026];
30
+ function QboAvailableReportsModal({ open, companyName, reports = qboConstants_1.QBO_REPORT_OPTIONS, selectedYear, onYearChange, onCancel, onConfirm, }) {
31
+ const availableReports = reports.filter((r) => r.available);
32
+ const [selected, setSelected] = (0, react_1.useState)(() => new Set(availableReports.map((r) => r.id)));
33
+ const [localYear, setLocalYear] = (0, react_1.useState)(selectedYear !== null && selectedYear !== void 0 ? selectedYear : new Date().getFullYear());
34
+ const handleYearChange = (year) => {
35
+ setLocalYear(year);
36
+ if (onYearChange)
37
+ onYearChange(year);
38
+ };
39
+ if (!open)
40
+ return null;
41
+ const toggleReport = (id) => {
42
+ setSelected((prev) => {
43
+ const next = new Set(prev);
44
+ if (next.has(id))
45
+ next.delete(id);
46
+ else
47
+ next.add(id);
48
+ return next;
49
+ });
50
+ };
51
+ return (react_1.default.createElement("div", { onClick: onCancel, style: {
52
+ position: "fixed",
53
+ inset: 0,
54
+ zIndex: 9999,
55
+ background: "rgba(0,0,0,0.65)",
56
+ display: "flex",
57
+ alignItems: "center",
58
+ justifyContent: "center",
59
+ } },
60
+ react_1.default.createElement("div", { onClick: (e) => e.stopPropagation(), style: {
61
+ width: 480,
62
+ maxHeight: "85vh",
63
+ background: "#111827",
64
+ border: "1px solid #1f2937",
65
+ borderRadius: 16,
66
+ display: "flex",
67
+ flexDirection: "column",
68
+ boxShadow: "0 25px 60px rgba(0,0,0,0.5)",
69
+ } },
70
+ react_1.default.createElement("div", { style: { padding: "20px 24px 16px", borderBottom: "1px solid #1f2937" } },
71
+ react_1.default.createElement("div", { style: { display: "flex", alignItems: "center", gap: 12 } },
72
+ react_1.default.createElement("div", { style: {
73
+ width: 36,
74
+ height: 36,
75
+ borderRadius: 8,
76
+ background: "rgba(44,160,28,0.12)",
77
+ border: "1px solid rgba(44,160,28,0.25)",
78
+ display: "flex",
79
+ alignItems: "center",
80
+ justifyContent: "center",
81
+ } },
82
+ react_1.default.createElement("svg", { width: "16", height: "16", viewBox: "0 0 16 16", fill: "none" },
83
+ react_1.default.createElement("rect", { x: "3", y: "2", width: "10", height: "12", rx: "1.5", stroke: qboConstants_1.QBO_GREEN, strokeWidth: "1.2" }),
84
+ react_1.default.createElement("path", { d: "M5.5 5.5h5M5.5 8h5M5.5 10.5h3", stroke: qboConstants_1.QBO_GREEN, strokeWidth: "0.9", strokeLinecap: "round" }))),
85
+ react_1.default.createElement("div", { style: { flex: 1 } },
86
+ react_1.default.createElement("div", { style: { fontSize: 15, fontWeight: 600, color: "#f3f4f6" } }, "Available Reports"),
87
+ react_1.default.createElement("div", { style: { fontSize: 12, color: "#9ca3af", marginTop: 2 } },
88
+ companyName,
89
+ " \u00B7 Select reports to import")),
90
+ react_1.default.createElement("button", { onClick: onCancel, style: {
91
+ background: "transparent",
92
+ border: "none",
93
+ color: "#6b7280",
94
+ fontSize: 18,
95
+ cursor: "pointer",
96
+ padding: 4,
97
+ lineHeight: 1,
98
+ } }, "\u00D7"))),
99
+ react_1.default.createElement("div", { style: { padding: "14px 24px 0", borderBottom: "1px solid #1f2937" } },
100
+ react_1.default.createElement("div", { style: { display: "flex", alignItems: "center", gap: 10, paddingBottom: 14 } },
101
+ react_1.default.createElement("span", { style: { fontSize: 12, color: "#9ca3af", flexShrink: 0 } }, "Tax Year"),
102
+ react_1.default.createElement("div", { style: { display: "flex", gap: 6 } }, QBO_YEAR_OPTIONS.map((yr) => (react_1.default.createElement("button", { key: yr, onClick: () => handleYearChange(yr), style: Object.assign(Object.assign({ padding: "4px 12px", borderRadius: 6, fontSize: 12, fontWeight: 600, cursor: "pointer", border: "none" }, (localYear === yr
103
+ ? { background: qboConstants_1.QBO_GREEN, color: "white" }
104
+ : { background: "rgba(255,255,255,0.05)", color: "#9ca3af" })), { transition: "all 150ms" }) }, yr)))))),
105
+ react_1.default.createElement("div", { style: { padding: "16px 24px", flex: 1, overflowY: "auto" } }, reports.map((report, i) => {
106
+ const isAvailable = report.available;
107
+ const isChecked = selected.has(report.id);
108
+ return (react_1.default.createElement("div", { key: report.id, style: {
109
+ display: "flex",
110
+ alignItems: "center",
111
+ gap: 12,
112
+ padding: "12px 0",
113
+ borderBottom: i < reports.length - 1 ? "1px solid #1f2937" : "none",
114
+ opacity: isAvailable ? 1 : 0.5,
115
+ } },
116
+ react_1.default.createElement("div", { onClick: () => isAvailable && toggleReport(report.id), style: {
117
+ width: 18,
118
+ height: 18,
119
+ borderRadius: 4,
120
+ border: isChecked
121
+ ? `none`
122
+ : `2px solid ${isAvailable ? "#4b5563" : "#374151"}`,
123
+ background: isChecked ? qboConstants_1.QBO_GREEN : "transparent",
124
+ display: "flex",
125
+ alignItems: "center",
126
+ justifyContent: "center",
127
+ cursor: isAvailable ? "pointer" : "not-allowed",
128
+ flexShrink: 0,
129
+ transition: "all 150ms",
130
+ } }, isChecked && (react_1.default.createElement("svg", { width: "10", height: "10", viewBox: "0 0 10 10", fill: "none" },
131
+ react_1.default.createElement("path", { d: "M2 5l2.5 2.5L8 3", stroke: "white", strokeWidth: "1.5", strokeLinecap: "round" })))),
132
+ react_1.default.createElement("div", { style: { flex: 1 } },
133
+ react_1.default.createElement("span", { style: { fontSize: 13, fontWeight: 500, color: isAvailable ? "#e5e7eb" : "#6b7280" } }, report.label)),
134
+ react_1.default.createElement("span", { style: Object.assign({ fontSize: 9, fontWeight: 700, letterSpacing: "0.05em", padding: "2px 8px", borderRadius: 4 }, (isAvailable
135
+ ? {
136
+ background: "rgba(44,160,28,0.1)",
137
+ border: "1px solid rgba(44,160,28,0.2)",
138
+ color: qboConstants_1.QBO_GREEN,
139
+ }
140
+ : {
141
+ background: "rgba(107,114,128,0.1)",
142
+ border: "1px solid rgba(107,114,128,0.2)",
143
+ color: "#6b7280",
144
+ })) }, isAvailable ? "AVAILABLE" : "NOT FOUND")));
145
+ })),
146
+ react_1.default.createElement("div", { style: {
147
+ padding: "14px 24px",
148
+ borderTop: "1px solid #1f2937",
149
+ display: "flex",
150
+ justifyContent: "space-between",
151
+ alignItems: "center",
152
+ } },
153
+ react_1.default.createElement("span", { style: { fontSize: 11, color: "#6b7280" } },
154
+ selected.size,
155
+ " report",
156
+ selected.size !== 1 ? "s" : "",
157
+ " selected"),
158
+ react_1.default.createElement("div", { style: { display: "flex", gap: 10 } },
159
+ react_1.default.createElement("button", { onClick: onCancel, style: {
160
+ background: "transparent",
161
+ border: "1px solid #374151",
162
+ borderRadius: 8,
163
+ padding: "8px 18px",
164
+ fontSize: 13,
165
+ fontWeight: 500,
166
+ color: "#9ca3af",
167
+ cursor: "pointer",
168
+ } }, "Cancel"),
169
+ react_1.default.createElement("button", { onClick: () => onConfirm(Array.from(selected)), disabled: selected.size === 0, style: {
170
+ background: selected.size > 0 ? qboConstants_1.QBO_GREEN : "#374151",
171
+ border: "none",
172
+ borderRadius: 8,
173
+ padding: "8px 20px",
174
+ fontSize: 13,
175
+ fontWeight: 600,
176
+ color: "white",
177
+ cursor: selected.size > 0 ? "pointer" : "not-allowed",
178
+ opacity: selected.size > 0 ? 1 : 0.5,
179
+ } }, "Confirm & Import"))))));
180
+ }
@@ -0,0 +1,10 @@
1
+ import React from "react";
2
+ import type { QboCompany } from "./types";
3
+ interface QboClientSelectorModalProps {
4
+ open: boolean;
5
+ companies: QboCompany[];
6
+ onCancel: () => void;
7
+ onSelect: (company: QboCompany) => void;
8
+ }
9
+ export declare function QboClientSelectorModal({ open, companies, onCancel, onSelect, }: QboClientSelectorModalProps): React.JSX.Element | null;
10
+ export {};
@@ -0,0 +1,155 @@
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.QboClientSelectorModal = QboClientSelectorModal;
27
+ const react_1 = __importStar(require("react"));
28
+ const qboConstants_1 = require("./qboConstants");
29
+ function QboClientSelectorModal({ open, companies, onCancel, onSelect, }) {
30
+ const [selectedId, setSelectedId] = (0, react_1.useState)(companies.length > 0 ? companies[0].id : null);
31
+ if (!open)
32
+ return null;
33
+ const handleConfirm = () => {
34
+ const company = companies.find((c) => c.id === selectedId);
35
+ if (company)
36
+ onSelect(company);
37
+ };
38
+ return (react_1.default.createElement("div", { onClick: onCancel, style: {
39
+ position: "fixed",
40
+ inset: 0,
41
+ zIndex: 9999,
42
+ background: "rgba(0,0,0,0.65)",
43
+ display: "flex",
44
+ alignItems: "center",
45
+ justifyContent: "center",
46
+ } },
47
+ react_1.default.createElement("div", { onClick: (e) => e.stopPropagation(), style: {
48
+ width: 440,
49
+ maxHeight: "85vh",
50
+ background: "#111827",
51
+ border: "1px solid #1f2937",
52
+ borderRadius: 16,
53
+ display: "flex",
54
+ flexDirection: "column",
55
+ boxShadow: "0 25px 60px rgba(0,0,0,0.5)",
56
+ } },
57
+ react_1.default.createElement("div", { style: { padding: "20px 24px 16px", borderBottom: "1px solid #1f2937" } },
58
+ react_1.default.createElement("div", { style: { display: "flex", alignItems: "center", gap: 12 } },
59
+ react_1.default.createElement("div", { style: {
60
+ width: 36,
61
+ height: 36,
62
+ borderRadius: 8,
63
+ background: "rgba(44,160,28,0.12)",
64
+ border: "1px solid rgba(44,160,28,0.25)",
65
+ display: "flex",
66
+ alignItems: "center",
67
+ justifyContent: "center",
68
+ } },
69
+ react_1.default.createElement("svg", { width: "16", height: "16", viewBox: "0 0 16 16", fill: "none" },
70
+ react_1.default.createElement("rect", { x: "2", y: "3", width: "12", height: "10", rx: "2", stroke: qboConstants_1.QBO_GREEN, strokeWidth: "1.5" }),
71
+ react_1.default.createElement("path", { d: "M5 7h6M5 9.5h4", stroke: qboConstants_1.QBO_GREEN, strokeWidth: "1", strokeLinecap: "round" }))),
72
+ react_1.default.createElement("div", { style: { flex: 1 } },
73
+ react_1.default.createElement("div", { style: { fontSize: 15, fontWeight: 600, color: "#f3f4f6" } }, "Select a Company"),
74
+ react_1.default.createElement("div", { style: { fontSize: 12, color: "#9ca3af", marginTop: 2 } }, "Select the QuickBooks account for this client")),
75
+ react_1.default.createElement("button", { onClick: onCancel, style: {
76
+ background: "transparent",
77
+ border: "none",
78
+ color: "#6b7280",
79
+ fontSize: 18,
80
+ cursor: "pointer",
81
+ padding: 4,
82
+ lineHeight: 1,
83
+ } }, "\u00D7"))),
84
+ react_1.default.createElement("div", { style: { padding: "12px 24px", flex: 1, overflowY: "auto" } }, companies.map((company) => {
85
+ const isSelected = company.id === selectedId;
86
+ return (react_1.default.createElement("label", { key: company.id, style: {
87
+ display: "flex",
88
+ alignItems: "center",
89
+ gap: 12,
90
+ padding: "10px 12px",
91
+ borderRadius: 10,
92
+ cursor: "pointer",
93
+ marginBottom: 4,
94
+ background: isSelected ? "rgba(44,160,28,0.06)" : "transparent",
95
+ border: isSelected
96
+ ? "1px solid rgba(44,160,28,0.25)"
97
+ : "1px solid transparent",
98
+ transition: "all 150ms",
99
+ } },
100
+ react_1.default.createElement("div", { style: {
101
+ width: 16,
102
+ height: 16,
103
+ borderRadius: "50%",
104
+ border: isSelected
105
+ ? `5px solid ${qboConstants_1.QBO_GREEN}`
106
+ : "2px solid #4b5563",
107
+ background: isSelected ? "white" : "transparent",
108
+ flexShrink: 0,
109
+ transition: "all 150ms",
110
+ } }),
111
+ react_1.default.createElement("input", { type: "radio", name: "qbo-company", value: company.id, checked: isSelected, onChange: () => setSelectedId(company.id), style: { display: "none" } }),
112
+ react_1.default.createElement("div", { style: {
113
+ width: 32,
114
+ height: 32,
115
+ borderRadius: 8,
116
+ background: company.color,
117
+ display: "flex",
118
+ alignItems: "center",
119
+ justifyContent: "center",
120
+ fontSize: 12,
121
+ fontWeight: 700,
122
+ color: "white",
123
+ flexShrink: 0,
124
+ } }, company.initials),
125
+ react_1.default.createElement("span", { style: { fontSize: 13, fontWeight: 500, color: "#e5e7eb" } }, company.name)));
126
+ })),
127
+ react_1.default.createElement("div", { style: {
128
+ padding: "14px 24px",
129
+ borderTop: "1px solid #1f2937",
130
+ display: "flex",
131
+ justifyContent: "flex-end",
132
+ gap: 10,
133
+ } },
134
+ react_1.default.createElement("button", { onClick: onCancel, style: {
135
+ background: "transparent",
136
+ border: "1px solid #374151",
137
+ borderRadius: 8,
138
+ padding: "8px 18px",
139
+ fontSize: 13,
140
+ fontWeight: 500,
141
+ color: "#9ca3af",
142
+ cursor: "pointer",
143
+ } }, "Cancel"),
144
+ react_1.default.createElement("button", { onClick: handleConfirm, disabled: !selectedId, style: {
145
+ background: selectedId ? qboConstants_1.QBO_GREEN : "#374151",
146
+ border: "none",
147
+ borderRadius: 8,
148
+ padding: "8px 20px",
149
+ fontSize: 13,
150
+ fontWeight: 600,
151
+ color: "white",
152
+ cursor: selectedId ? "pointer" : "not-allowed",
153
+ opacity: selectedId ? 1 : 0.5,
154
+ } }, "Continue")))));
155
+ }
@@ -0,0 +1,9 @@
1
+ import React from "react";
2
+ interface QboConnectBannerProps {
3
+ connected: boolean;
4
+ companyName?: string | null;
5
+ onConnect: () => void;
6
+ onDisconnect?: () => void;
7
+ }
8
+ export declare function QboConnectBanner({ connected, companyName, onConnect, onDisconnect, }: QboConnectBannerProps): React.JSX.Element;
9
+ export {};
@@ -0,0 +1,55 @@
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.QboConnectBanner = QboConnectBanner;
7
+ const react_1 = __importDefault(require("react"));
8
+ const qboConstants_1 = require("./qboConstants");
9
+ // QuickBooks logo SVG (simplified mark)
10
+ function QboLogo({ size = 20 }) {
11
+ return (react_1.default.createElement("svg", { width: size, height: size, viewBox: "0 0 24 24", fill: "none" },
12
+ react_1.default.createElement("rect", { width: "24", height: "24", rx: "4", fill: qboConstants_1.QBO_GREEN }),
13
+ react_1.default.createElement("path", { d: "M12 4C7.58 4 4 7.58 4 12s3.58 8 8 8 8-3.58 8-8-3.58-8-8-8zm-1.5 12.5c-2.49 0-4.5-2.01-4.5-4.5s2.01-4.5 4.5-4.5c.83 0 1.5.67 1.5 1.5s-.67 1.5-1.5 1.5-1.5.67-1.5 1.5.67 1.5 1.5 1.5 1.5-.67 1.5-1.5c0-.83.67-1.5 1.5-1.5s1.5.67 1.5 1.5c0 2.49-2.01 4.5-4.5 4.5zm3 0c-.83 0-1.5-.67-1.5-1.5s.67-1.5 1.5-1.5 1.5-.67 1.5-1.5-.67-1.5-1.5-1.5-1.5.67-1.5 1.5c0 .83-.67 1.5-1.5 1.5s-1.5-.67-1.5-1.5c0-2.49 2.01-4.5 4.5-4.5s4.5 2.01 4.5 4.5-2.01 4.5-4.5 4.5z", fill: "white" })));
14
+ }
15
+ function QboConnectBanner({ connected, companyName, onConnect, onDisconnect, }) {
16
+ if (connected) {
17
+ return (react_1.default.createElement("div", { className: "flex flex-col sm:flex-row items-start sm:items-center gap-3 px-4 py-3 mb-4 rounded-lg", style: {
18
+ background: qboConstants_1.QBO_GREEN_BG,
19
+ border: `1px solid ${qboConstants_1.QBO_GREEN_BORDER}`,
20
+ } },
21
+ react_1.default.createElement(QboLogo, { size: 20 }),
22
+ react_1.default.createElement("div", { className: "flex-1 min-w-0" },
23
+ react_1.default.createElement("div", { className: "text-[13px] font-medium text-white font-tax-axis-body" }, "Connected to QuickBooks"),
24
+ companyName && (react_1.default.createElement("div", { className: "text-[11px] text-tax-axis-text-3 font-tax-axis-body mt-0.5" }, companyName))),
25
+ react_1.default.createElement("span", { className: "text-[10px] font-semibold font-tax-axis-mono px-2 py-0.5 rounded", style: { background: "rgba(44,160,28,0.15)", color: qboConstants_1.QBO_GREEN } }, "SYNCED"),
26
+ react_1.default.createElement("button", { onClick: onConnect, className: "flex items-center gap-1.5 rounded-md px-3 py-1.5 text-[11px] font-semibold font-tax-axis-mono flex-shrink-0 cursor-pointer border-none", style: {
27
+ background: qboConstants_1.QBO_GREEN,
28
+ color: "white",
29
+ boxShadow: "0 2px 8px rgba(44,160,28,0.3)",
30
+ } },
31
+ "Import",
32
+ react_1.default.createElement("svg", { width: "10", height: "10", viewBox: "0 0 10 10", fill: "none" },
33
+ react_1.default.createElement("path", { d: "M3 1.5L6.5 5 3 8.5", stroke: "white", strokeWidth: "1.5", strokeLinecap: "round", strokeLinejoin: "round" }))),
34
+ onDisconnect && (react_1.default.createElement("button", { onClick: onDisconnect, className: "bg-transparent border-none text-tax-axis-text-4 text-[11px] font-tax-axis-body cursor-pointer hover:text-white" }, "Disconnect"))));
35
+ }
36
+ return (react_1.default.createElement("div", { className: "flex flex-col sm:flex-row items-start sm:items-center gap-3 px-4 py-3.5 mb-4 rounded-lg cursor-pointer", style: {
37
+ background: "linear-gradient(135deg, rgba(44,160,28,0.06) 0%, rgba(44,160,28,0.02) 100%)",
38
+ border: `1px solid ${qboConstants_1.QBO_GREEN_BORDER}`,
39
+ }, onClick: onConnect, role: "button", tabIndex: 0, onKeyDown: (e) => {
40
+ if (e.key === "Enter" || e.key === " ")
41
+ onConnect();
42
+ } },
43
+ react_1.default.createElement(QboLogo, { size: 24 }),
44
+ react_1.default.createElement("div", { className: "flex-1 min-w-0" },
45
+ react_1.default.createElement("div", { className: "text-[13px] font-medium text-white font-tax-axis-body" }, "Import from QuickBooks Online"),
46
+ react_1.default.createElement("div", { className: "text-[11px] text-tax-axis-text-3 font-tax-axis-body mt-0.5" }, "Connect a QuickBooks account to import financial documents for this client")),
47
+ react_1.default.createElement("div", { className: "flex items-center gap-1.5 rounded-md px-3 py-1.5 text-[11px] font-semibold font-tax-axis-mono flex-shrink-0 w-full sm:w-auto justify-center sm:justify-start", style: {
48
+ background: qboConstants_1.QBO_GREEN,
49
+ color: "white",
50
+ boxShadow: "0 2px 8px rgba(44,160,28,0.3)",
51
+ } },
52
+ "Connect",
53
+ react_1.default.createElement("svg", { width: "10", height: "10", viewBox: "0 0 10 10", fill: "none" },
54
+ react_1.default.createElement("path", { d: "M3 1.5L6.5 5 3 8.5", stroke: "white", strokeWidth: "1.5", strokeLinecap: "round", strokeLinejoin: "round" })))));
55
+ }
@@ -0,0 +1,10 @@
1
+ import React from "react";
2
+ interface QboDocumentMappingModalProps {
3
+ open: boolean;
4
+ companyName: string;
5
+ selectedReports: string[];
6
+ onCancel: () => void;
7
+ onConfirm: () => void;
8
+ }
9
+ export declare function QboDocumentMappingModal({ open, companyName, selectedReports, onCancel, onConfirm, }: QboDocumentMappingModalProps): React.JSX.Element | null;
10
+ export {};
@@ -0,0 +1,202 @@
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.QboDocumentMappingModal = QboDocumentMappingModal;
27
+ const react_1 = __importStar(require("react"));
28
+ const qboConstants_1 = require("./qboConstants");
29
+ const STATUS_COLORS = {
30
+ mapped: {
31
+ bg: "rgba(44,160,28,0.08)",
32
+ border: "rgba(44,160,28,0.2)",
33
+ text: qboConstants_1.QBO_GREEN,
34
+ label: "MAPPED",
35
+ },
36
+ unmapped: {
37
+ bg: "rgba(107,114,128,0.08)",
38
+ border: "rgba(107,114,128,0.2)",
39
+ text: "#6b7280",
40
+ label: "UNMAPPED",
41
+ },
42
+ review: {
43
+ bg: "rgba(251,154,29,0.08)",
44
+ border: "rgba(251,154,29,0.2)",
45
+ text: "#FB9A1D",
46
+ label: "REVIEW",
47
+ },
48
+ };
49
+ function QboDocumentMappingModal({ open, companyName, selectedReports, onCancel, onConfirm, }) {
50
+ const hasPL = selectedReports.includes("profit_loss");
51
+ const hasBS = selectedReports.includes("balance_sheet");
52
+ const defaultTab = hasPL ? "profit_loss" : "balance_sheet";
53
+ const [activeTab, setActiveTab] = (0, react_1.useState)(defaultTab);
54
+ if (!open)
55
+ return null;
56
+ const rows = activeTab === "profit_loss" ? qboConstants_1.PL_MAPPING_ROWS : qboConstants_1.BS_MAPPING_ROWS;
57
+ const mappedCount = rows.filter((r) => r.status === "mapped").length;
58
+ const reviewCount = rows.filter((r) => r.status === "review").length;
59
+ const tabs = [
60
+ { key: "profit_loss", label: "Profit & Loss", visible: hasPL },
61
+ { key: "balance_sheet", label: "Balance Sheet", visible: hasBS },
62
+ ];
63
+ return (react_1.default.createElement("div", { onClick: onCancel, style: {
64
+ position: "fixed",
65
+ inset: 0,
66
+ zIndex: 9999,
67
+ background: "rgba(0,0,0,0.65)",
68
+ display: "flex",
69
+ alignItems: "center",
70
+ justifyContent: "center",
71
+ } },
72
+ react_1.default.createElement("div", { onClick: (e) => e.stopPropagation(), style: {
73
+ width: 720,
74
+ maxHeight: "85vh",
75
+ background: "#111827",
76
+ border: "1px solid #1f2937",
77
+ borderRadius: 16,
78
+ display: "flex",
79
+ flexDirection: "column",
80
+ boxShadow: "0 25px 60px rgba(0,0,0,0.5)",
81
+ } },
82
+ react_1.default.createElement("div", { style: { padding: "20px 24px 0" } },
83
+ react_1.default.createElement("div", { style: { display: "flex", alignItems: "center", gap: 12, marginBottom: 12 } },
84
+ react_1.default.createElement("div", { style: {
85
+ width: 36,
86
+ height: 36,
87
+ borderRadius: 8,
88
+ background: "rgba(44,160,28,0.12)",
89
+ border: "1px solid rgba(44,160,28,0.25)",
90
+ display: "flex",
91
+ alignItems: "center",
92
+ justifyContent: "center",
93
+ } },
94
+ react_1.default.createElement("svg", { width: "16", height: "16", viewBox: "0 0 16 16", fill: "none" },
95
+ react_1.default.createElement("path", { d: "M2 5h5v6H2zM9 5h5v6H9z", stroke: qboConstants_1.QBO_GREEN, strokeWidth: "1.2", strokeLinecap: "round" }),
96
+ react_1.default.createElement("path", { d: "M7 8h2", stroke: qboConstants_1.QBO_GREEN, strokeWidth: "1.2", strokeLinecap: "round" }))),
97
+ react_1.default.createElement("div", { style: { flex: 1 } },
98
+ react_1.default.createElement("div", { style: { fontSize: 15, fontWeight: 600, color: "#f3f4f6" } }, "Document Mapping"),
99
+ react_1.default.createElement("div", { style: { fontSize: 12, color: "#9ca3af", marginTop: 2 } },
100
+ companyName,
101
+ " \u00B7 ",
102
+ mappedCount,
103
+ " mapped, ",
104
+ reviewCount,
105
+ " needs review")),
106
+ react_1.default.createElement("button", { onClick: onCancel, style: {
107
+ background: "transparent",
108
+ border: "none",
109
+ color: "#6b7280",
110
+ fontSize: 18,
111
+ cursor: "pointer",
112
+ padding: 4,
113
+ lineHeight: 1,
114
+ } }, "\u00D7")),
115
+ react_1.default.createElement("div", { style: { display: "flex", gap: 0, borderBottom: "1px solid #1f2937" } }, tabs.filter((t) => t.visible).map((tab) => (react_1.default.createElement("button", { key: tab.key, onClick: () => setActiveTab(tab.key), style: {
116
+ background: "transparent",
117
+ border: "none",
118
+ borderBottom: activeTab === tab.key ? `2px solid ${qboConstants_1.QBO_GREEN}` : "2px solid transparent",
119
+ padding: "8px 16px",
120
+ fontSize: 13,
121
+ fontWeight: activeTab === tab.key ? 600 : 400,
122
+ color: activeTab === tab.key ? "#e5e7eb" : "#6b7280",
123
+ cursor: "pointer",
124
+ marginBottom: -1,
125
+ } }, tab.label))))),
126
+ react_1.default.createElement("div", { style: { flex: 1, overflowY: "auto", padding: "0 24px" } },
127
+ react_1.default.createElement("div", { style: {
128
+ display: "grid",
129
+ gridTemplateColumns: "1fr 1fr 90px",
130
+ gap: 12,
131
+ padding: "12px 0",
132
+ borderBottom: "1px solid #1f2937",
133
+ position: "sticky",
134
+ top: 0,
135
+ background: "#111827",
136
+ zIndex: 1,
137
+ } },
138
+ react_1.default.createElement("span", { style: { fontSize: 10, fontWeight: 700, color: "#6b7280", letterSpacing: "0.05em", textTransform: "uppercase" } }, "QuickBooks Field"),
139
+ react_1.default.createElement("span", { style: { fontSize: 10, fontWeight: 700, color: "#6b7280", letterSpacing: "0.05em", textTransform: "uppercase" } }, "TaxAxis Field"),
140
+ react_1.default.createElement("span", { style: { fontSize: 10, fontWeight: 700, color: "#6b7280", letterSpacing: "0.05em", textTransform: "uppercase" } }, "Status")),
141
+ rows.map((row, i) => {
142
+ const sc = STATUS_COLORS[row.status];
143
+ return (react_1.default.createElement("div", { key: i, style: {
144
+ display: "grid",
145
+ gridTemplateColumns: "1fr 1fr 90px",
146
+ gap: 12,
147
+ padding: "10px 0",
148
+ borderBottom: i < rows.length - 1 ? "1px solid rgba(31,41,55,0.5)" : "none",
149
+ alignItems: "center",
150
+ } },
151
+ react_1.default.createElement("span", { style: { fontSize: 12, color: "#d1d5db", fontFamily: "monospace" } }, row.qboField),
152
+ react_1.default.createElement("div", { style: { display: "flex", alignItems: "center", gap: 6 } },
153
+ react_1.default.createElement("svg", { width: "10", height: "10", viewBox: "0 0 10 10", fill: "none" },
154
+ react_1.default.createElement("path", { d: "M1 5h8M6 2.5L8.5 5 6 7.5", stroke: "#4b5563", strokeWidth: "1", strokeLinecap: "round" })),
155
+ react_1.default.createElement("span", { style: { fontSize: 12, color: "#d1d5db", fontFamily: "monospace" } }, row.taxAxisField)),
156
+ react_1.default.createElement("span", { style: {
157
+ fontSize: 9,
158
+ fontWeight: 700,
159
+ letterSpacing: "0.05em",
160
+ padding: "2px 8px",
161
+ borderRadius: 4,
162
+ background: sc.bg,
163
+ border: `1px solid ${sc.border}`,
164
+ color: sc.text,
165
+ textAlign: "center",
166
+ } }, sc.label)));
167
+ })),
168
+ react_1.default.createElement("div", { style: {
169
+ padding: "14px 24px",
170
+ borderTop: "1px solid #1f2937",
171
+ display: "flex",
172
+ justifyContent: "space-between",
173
+ alignItems: "center",
174
+ } },
175
+ react_1.default.createElement("span", { style: { fontSize: 11, color: "#6b7280" } },
176
+ mappedCount,
177
+ " of ",
178
+ rows.length,
179
+ " fields mapped"),
180
+ react_1.default.createElement("div", { style: { display: "flex", gap: 10 } },
181
+ react_1.default.createElement("button", { onClick: onCancel, style: {
182
+ background: "transparent",
183
+ border: "1px solid #374151",
184
+ borderRadius: 8,
185
+ padding: "8px 18px",
186
+ fontSize: 13,
187
+ fontWeight: 500,
188
+ color: "#9ca3af",
189
+ cursor: "pointer",
190
+ } }, "Cancel"),
191
+ react_1.default.createElement("button", { onClick: onConfirm, style: {
192
+ background: qboConstants_1.QBO_GREEN,
193
+ border: "none",
194
+ borderRadius: 8,
195
+ padding: "8px 20px",
196
+ fontSize: 13,
197
+ fontWeight: 600,
198
+ color: "white",
199
+ cursor: "pointer",
200
+ boxShadow: "0 2px 8px rgba(44,160,28,0.3)",
201
+ } }, "Confirm & Import"))))));
202
+ }
@@ -0,0 +1,8 @@
1
+ import React from "react";
2
+ interface QboImportingModalProps {
3
+ open: boolean;
4
+ currentStepIndex: number;
5
+ companyName: string;
6
+ }
7
+ export declare function QboImportingModal({ open, currentStepIndex, companyName, }: QboImportingModalProps): React.JSX.Element | null;
8
+ export {};