@paro.io/expert-shared-components 1.14.61 → 1.14.63
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/lib/components/TaxAxis/TaxAxisShell.js +2 -2
- package/lib/tax-axis/components/dashboard/TaxAxisDashboard.d.ts +2 -1
- package/lib/tax-axis/components/dashboard/TaxAxisDashboard.js +74 -9
- package/lib/tax-axis/components/documents/DocumentCard.d.ts +3 -1
- package/lib/tax-axis/components/documents/DocumentCard.js +15 -3
- package/lib/tax-axis/components/documents/DocumentReviewModal.d.ts +1 -3
- package/lib/tax-axis/components/documents/DocumentReviewModal.js +263 -113
- package/lib/tax-axis/components/documents/DocumentTier.d.ts +3 -1
- package/lib/tax-axis/components/documents/DocumentTier.js +2 -2
- package/lib/tax-axis/components/documents/TaxAxisDocuments.js +21 -2
- package/lib/tax-axis/components/extractionReview/TaxAxisExtractionReview.js +17 -17
- package/lib/tax-axis/components/intake/TaxAxisIntake.js +67 -6
- package/lib/tax-axis/index.d.ts +2 -0
- package/lib/tax-axis/index.js +5 -1
- package/package.json +1 -1
- package/lib/tax-axis/components/documents/qbo/QboAvailableReportsModal.d.ts +0 -13
- package/lib/tax-axis/components/documents/qbo/QboAvailableReportsModal.js +0 -180
- package/lib/tax-axis/components/documents/qbo/QboClientSelectorModal.d.ts +0 -10
- package/lib/tax-axis/components/documents/qbo/QboClientSelectorModal.js +0 -155
- package/lib/tax-axis/components/documents/qbo/QboConnectBanner.d.ts +0 -9
- package/lib/tax-axis/components/documents/qbo/QboConnectBanner.js +0 -55
- package/lib/tax-axis/components/documents/qbo/QboDocumentMappingModal.d.ts +0 -10
- package/lib/tax-axis/components/documents/qbo/QboDocumentMappingModal.js +0 -202
- package/lib/tax-axis/components/documents/qbo/QboImportingModal.d.ts +0 -8
- package/lib/tax-axis/components/documents/qbo/QboImportingModal.js +0 -75
- package/lib/tax-axis/components/documents/qbo/QboPermissionsModal.d.ts +0 -8
- package/lib/tax-axis/components/documents/qbo/QboPermissionsModal.js +0 -126
- package/lib/tax-axis/components/documents/qbo/index.d.ts +0 -8
- package/lib/tax-axis/components/documents/qbo/index.js +0 -17
- package/lib/tax-axis/components/documents/qbo/qboConstants.d.ts +0 -24
- package/lib/tax-axis/components/documents/qbo/qboConstants.js +0 -71
- package/lib/tax-axis/components/documents/qbo/types.d.ts +0 -43
- package/lib/tax-axis/components/documents/qbo/types.js +0 -3
- package/lib/tax-axis/components/documents/qbo/useQboFlow.d.ts +0 -19
- package/lib/tax-axis/components/documents/qbo/useQboFlow.js +0 -207
|
@@ -34,6 +34,38 @@ const RefineAnalysisSection_1 = require("./RefineAnalysisSection");
|
|
|
34
34
|
const CpaIntakeQuestionsSection_1 = require("./CpaIntakeQuestionsSection");
|
|
35
35
|
const StrategyRadar_1 = require("./StrategyRadar");
|
|
36
36
|
const IntakeCtaCards_1 = require("./IntakeCtaCards");
|
|
37
|
+
const DEMO_PROFILE = {
|
|
38
|
+
bizName: "Meridian Consulting Group, Inc.",
|
|
39
|
+
cpaName: "Sarah Chen, EA",
|
|
40
|
+
entity: "S-Corporation",
|
|
41
|
+
industry: "Professional Services",
|
|
42
|
+
period: "Full Year",
|
|
43
|
+
revenue: "2850000",
|
|
44
|
+
ownerComp: "185000",
|
|
45
|
+
employees: "14",
|
|
46
|
+
year: "2025",
|
|
47
|
+
states: ["IL"],
|
|
48
|
+
filingStatus: "MFJ",
|
|
49
|
+
age: "45",
|
|
50
|
+
sstb: "No",
|
|
51
|
+
ownsRealEstate: "Yes — Commercial",
|
|
52
|
+
itemizesDeductions: "Yes",
|
|
53
|
+
singleOwner: "Yes",
|
|
54
|
+
netIncome: "142000",
|
|
55
|
+
equipmentPurchased: "75000",
|
|
56
|
+
capitalGains: "50000",
|
|
57
|
+
federalRate: "24%",
|
|
58
|
+
stateRate: "4.95",
|
|
59
|
+
taxDataYears: "1 year",
|
|
60
|
+
riskTolerance: "3",
|
|
61
|
+
overtimePremium: "0",
|
|
62
|
+
tipIncomePct: "0",
|
|
63
|
+
retirementContributions: "22500",
|
|
64
|
+
hdhpEnrolled: "Yes",
|
|
65
|
+
hsaContributions: "0",
|
|
66
|
+
wotcHires: "Yes — Form 8850 submitted",
|
|
67
|
+
familyEmployed: "Yes",
|
|
68
|
+
};
|
|
37
69
|
/** Returns a list of human-readable labels for missing required fields. */
|
|
38
70
|
function getMissingFields(p) {
|
|
39
71
|
const missing = [];
|
|
@@ -43,12 +75,9 @@ function getMissingFields(p) {
|
|
|
43
75
|
missing.push("State");
|
|
44
76
|
if (!p.revenue || (0, compute_1.parseNum)(p.revenue) <= 0)
|
|
45
77
|
missing.push("Revenue");
|
|
46
|
-
const
|
|
47
|
-
if (!
|
|
78
|
+
const fedStr = String(p.federalRate || "0").replace("%", "");
|
|
79
|
+
if (!parseFloat(fedStr) || parseFloat(fedStr) <= 0)
|
|
48
80
|
missing.push("Federal Rate");
|
|
49
|
-
const statePct = parseFloat((p.stateRate || "0").replace("%", ""));
|
|
50
|
-
if (!statePct || statePct <= 0)
|
|
51
|
-
missing.push("State Rate");
|
|
52
81
|
return missing;
|
|
53
82
|
}
|
|
54
83
|
function TaxAxisIntake({ userContext = "expert", onProspect, onFullAnalysis, initialProfile, }) {
|
|
@@ -59,6 +88,37 @@ function TaxAxisIntake({ userContext = "expert", onProspect, onFullAnalysis, ini
|
|
|
59
88
|
});
|
|
60
89
|
const profile = methods.watch();
|
|
61
90
|
const missingFields = (0, react_1.useMemo)(() => getMissingFields(profile), [profile]);
|
|
91
|
+
const [showDemo, setShowDemo] = (0, react_1.useState)(false);
|
|
92
|
+
const konamiRef = (0, react_1.useRef)({ keys: '', timer: null });
|
|
93
|
+
(0, react_1.useEffect)(() => {
|
|
94
|
+
const handler = (e) => {
|
|
95
|
+
var _a;
|
|
96
|
+
const tag = (_a = e.target) === null || _a === void 0 ? void 0 : _a.tagName;
|
|
97
|
+
if (tag === 'INPUT' || tag === 'TEXTAREA' || tag === 'SELECT')
|
|
98
|
+
return;
|
|
99
|
+
const k = konamiRef.current;
|
|
100
|
+
k.keys += e.key.toLowerCase();
|
|
101
|
+
clearTimeout(k.timer);
|
|
102
|
+
k.timer = setTimeout(() => { k.keys = ''; }, 3000);
|
|
103
|
+
if (k.keys.includes('demo')) {
|
|
104
|
+
setShowDemo(true);
|
|
105
|
+
k.keys = '';
|
|
106
|
+
}
|
|
107
|
+
};
|
|
108
|
+
window.addEventListener('keydown', handler);
|
|
109
|
+
return () => window.removeEventListener('keydown', handler);
|
|
110
|
+
}, []);
|
|
111
|
+
const handleDemoToggle = () => {
|
|
112
|
+
const current = methods.getValues();
|
|
113
|
+
const isDemoFilled = current.bizName === DEMO_PROFILE.bizName;
|
|
114
|
+
if (isDemoFilled) {
|
|
115
|
+
methods.reset(Object.assign({}, intakeSchema_1.intakeDefaultValues));
|
|
116
|
+
}
|
|
117
|
+
else {
|
|
118
|
+
methods.reset(Object.assign(Object.assign({}, intakeSchema_1.intakeDefaultValues), DEMO_PROFILE));
|
|
119
|
+
}
|
|
120
|
+
setTimeout(() => methods.trigger(), 0);
|
|
121
|
+
};
|
|
62
122
|
const handleProspect = () => {
|
|
63
123
|
methods.handleSubmit((valid) => onProspect(valid), () => { })();
|
|
64
124
|
};
|
|
@@ -67,7 +127,8 @@ function TaxAxisIntake({ userContext = "expert", onProspect, onFullAnalysis, ini
|
|
|
67
127
|
};
|
|
68
128
|
return (react_1.default.createElement(react_hook_form_1.FormProvider, Object.assign({}, methods),
|
|
69
129
|
react_1.default.createElement("div", { className: "grid grid-cols-[1fr_1fr] gap-5" },
|
|
70
|
-
react_1.default.createElement("div", { className: "flex flex-col gap-4" },
|
|
130
|
+
react_1.default.createElement("div", { className: "relative flex flex-col gap-4" },
|
|
131
|
+
showDemo && (react_1.default.createElement("button", { type: "button", onClick: handleDemoToggle, className: "absolute right-0 -top-1 text-[10px] text-tax-axis-text-4 opacity-40 hover:opacity-80 transition-opacity cursor-pointer bg-transparent border-none font-tax-axis-mono", style: { zIndex: 20 } }, "Demo")),
|
|
71
132
|
react_1.default.createElement(ClientParametersSection_1.ClientParametersSection, { userContext: userContext }),
|
|
72
133
|
react_1.default.createElement(RefineAnalysisSection_1.RefineAnalysisSection, { userContext: userContext }),
|
|
73
134
|
react_1.default.createElement(CpaIntakeQuestionsSection_1.CpaIntakeQuestionsSection, { userContext: userContext }),
|
package/lib/tax-axis/index.d.ts
CHANGED
|
@@ -9,6 +9,8 @@ export { TaxAxisIntake } from "./components/intake/TaxAxisIntake";
|
|
|
9
9
|
export type { TaxAxisIntakeProps } from "./components/intake/TaxAxisIntake";
|
|
10
10
|
export { TaxAxisDocuments } from "./components/documents/TaxAxisDocuments";
|
|
11
11
|
export type { TaxAxisDocumentsProps } from "./components/documents/TaxAxisDocuments";
|
|
12
|
+
export { DocumentReviewModal, EXTRACTED_FIELDS_QUERY, SAVE_FIELD_EDIT_MUTATION } from "./components/documents/DocumentReviewModal";
|
|
13
|
+
export type { DocumentReviewModalProps } from "./components/documents/DocumentReviewModal";
|
|
12
14
|
export { TaxAxisProcessing } from "./components/processing/TaxAxisProcessing";
|
|
13
15
|
export type { TaxAxisProcessingProps } from "./components/processing/TaxAxisProcessing";
|
|
14
16
|
export { TaxAxisDashboard } from "./components/dashboard/TaxAxisDashboard";
|
package/lib/tax-axis/index.js
CHANGED
|
@@ -14,7 +14,7 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
|
14
14
|
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
15
|
};
|
|
16
16
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
-
exports.TaxAxisPresentationMode = exports.TaxAxisProspectReport = exports.TaxAxisExtractionReview = exports.TaxAxisPreparerWorkpaper = exports.TaxAxisClientReport = exports.TaxAxisDashboard = exports.TaxAxisProcessing = exports.TaxAxisDocuments = exports.TaxAxisIntake = exports.SectionHeader = exports.TaxAxisButton = exports.TaxAxisBadge = exports.TaxAxisCard = void 0;
|
|
17
|
+
exports.TaxAxisPresentationMode = exports.TaxAxisProspectReport = exports.TaxAxisExtractionReview = exports.TaxAxisPreparerWorkpaper = exports.TaxAxisClientReport = exports.TaxAxisDashboard = exports.TaxAxisProcessing = exports.SAVE_FIELD_EDIT_MUTATION = exports.EXTRACTED_FIELDS_QUERY = exports.DocumentReviewModal = exports.TaxAxisDocuments = exports.TaxAxisIntake = exports.SectionHeader = exports.TaxAxisButton = exports.TaxAxisBadge = exports.TaxAxisCard = void 0;
|
|
18
18
|
// Shared primitives
|
|
19
19
|
var TaxAxisCard_1 = require("./components/shared/TaxAxisCard");
|
|
20
20
|
Object.defineProperty(exports, "TaxAxisCard", { enumerable: true, get: function () { return TaxAxisCard_1.TaxAxisCard; } });
|
|
@@ -35,6 +35,10 @@ var TaxAxisIntake_1 = require("./components/intake/TaxAxisIntake");
|
|
|
35
35
|
Object.defineProperty(exports, "TaxAxisIntake", { enumerable: true, get: function () { return TaxAxisIntake_1.TaxAxisIntake; } });
|
|
36
36
|
var TaxAxisDocuments_1 = require("./components/documents/TaxAxisDocuments");
|
|
37
37
|
Object.defineProperty(exports, "TaxAxisDocuments", { enumerable: true, get: function () { return TaxAxisDocuments_1.TaxAxisDocuments; } });
|
|
38
|
+
var DocumentReviewModal_1 = require("./components/documents/DocumentReviewModal");
|
|
39
|
+
Object.defineProperty(exports, "DocumentReviewModal", { enumerable: true, get: function () { return DocumentReviewModal_1.DocumentReviewModal; } });
|
|
40
|
+
Object.defineProperty(exports, "EXTRACTED_FIELDS_QUERY", { enumerable: true, get: function () { return DocumentReviewModal_1.EXTRACTED_FIELDS_QUERY; } });
|
|
41
|
+
Object.defineProperty(exports, "SAVE_FIELD_EDIT_MUTATION", { enumerable: true, get: function () { return DocumentReviewModal_1.SAVE_FIELD_EDIT_MUTATION; } });
|
|
38
42
|
var TaxAxisProcessing_1 = require("./components/processing/TaxAxisProcessing");
|
|
39
43
|
Object.defineProperty(exports, "TaxAxisProcessing", { enumerable: true, get: function () { return TaxAxisProcessing_1.TaxAxisProcessing; } });
|
|
40
44
|
var TaxAxisDashboard_1 = require("./components/dashboard/TaxAxisDashboard");
|
package/package.json
CHANGED
|
@@ -1,13 +0,0 @@
|
|
|
1
|
-
import React from "react";
|
|
2
|
-
import type { QboReportOption } from "./types";
|
|
3
|
-
interface QboAvailableReportsModalProps {
|
|
4
|
-
open: boolean;
|
|
5
|
-
companyName: string;
|
|
6
|
-
reports?: QboReportOption[];
|
|
7
|
-
selectedYear?: number;
|
|
8
|
-
onYearChange?: (year: number) => void;
|
|
9
|
-
onCancel: () => void;
|
|
10
|
-
onConfirm: (selectedReportIds: string[]) => void;
|
|
11
|
-
}
|
|
12
|
-
export declare function QboAvailableReportsModal({ open, companyName, reports, selectedYear, onYearChange, onCancel, onConfirm, }: QboAvailableReportsModalProps): React.JSX.Element | null;
|
|
13
|
-
export {};
|
|
@@ -1,180 +0,0 @@
|
|
|
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
|
-
}
|
|
@@ -1,10 +0,0 @@
|
|
|
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 {};
|
|
@@ -1,155 +0,0 @@
|
|
|
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
|
-
}
|
|
@@ -1,9 +0,0 @@
|
|
|
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 {};
|
|
@@ -1,55 +0,0 @@
|
|
|
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
|
-
}
|
|
@@ -1,10 +0,0 @@
|
|
|
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 {};
|