@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.
Files changed (35) hide show
  1. package/lib/components/TaxAxis/TaxAxisShell.js +2 -2
  2. package/lib/tax-axis/components/dashboard/TaxAxisDashboard.d.ts +2 -1
  3. package/lib/tax-axis/components/dashboard/TaxAxisDashboard.js +74 -9
  4. package/lib/tax-axis/components/documents/DocumentCard.d.ts +3 -1
  5. package/lib/tax-axis/components/documents/DocumentCard.js +15 -3
  6. package/lib/tax-axis/components/documents/DocumentReviewModal.d.ts +1 -3
  7. package/lib/tax-axis/components/documents/DocumentReviewModal.js +263 -113
  8. package/lib/tax-axis/components/documents/DocumentTier.d.ts +3 -1
  9. package/lib/tax-axis/components/documents/DocumentTier.js +2 -2
  10. package/lib/tax-axis/components/documents/TaxAxisDocuments.js +21 -2
  11. package/lib/tax-axis/components/extractionReview/TaxAxisExtractionReview.js +17 -17
  12. package/lib/tax-axis/components/intake/TaxAxisIntake.js +67 -6
  13. package/lib/tax-axis/index.d.ts +2 -0
  14. package/lib/tax-axis/index.js +5 -1
  15. package/package.json +1 -1
  16. package/lib/tax-axis/components/documents/qbo/QboAvailableReportsModal.d.ts +0 -13
  17. package/lib/tax-axis/components/documents/qbo/QboAvailableReportsModal.js +0 -180
  18. package/lib/tax-axis/components/documents/qbo/QboClientSelectorModal.d.ts +0 -10
  19. package/lib/tax-axis/components/documents/qbo/QboClientSelectorModal.js +0 -155
  20. package/lib/tax-axis/components/documents/qbo/QboConnectBanner.d.ts +0 -9
  21. package/lib/tax-axis/components/documents/qbo/QboConnectBanner.js +0 -55
  22. package/lib/tax-axis/components/documents/qbo/QboDocumentMappingModal.d.ts +0 -10
  23. package/lib/tax-axis/components/documents/qbo/QboDocumentMappingModal.js +0 -202
  24. package/lib/tax-axis/components/documents/qbo/QboImportingModal.d.ts +0 -8
  25. package/lib/tax-axis/components/documents/qbo/QboImportingModal.js +0 -75
  26. package/lib/tax-axis/components/documents/qbo/QboPermissionsModal.d.ts +0 -8
  27. package/lib/tax-axis/components/documents/qbo/QboPermissionsModal.js +0 -126
  28. package/lib/tax-axis/components/documents/qbo/index.d.ts +0 -8
  29. package/lib/tax-axis/components/documents/qbo/index.js +0 -17
  30. package/lib/tax-axis/components/documents/qbo/qboConstants.d.ts +0 -24
  31. package/lib/tax-axis/components/documents/qbo/qboConstants.js +0 -71
  32. package/lib/tax-axis/components/documents/qbo/types.d.ts +0 -43
  33. package/lib/tax-axis/components/documents/qbo/types.js +0 -3
  34. package/lib/tax-axis/components/documents/qbo/useQboFlow.d.ts +0 -19
  35. 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 fedPct = parseFloat((p.federalRate || "0").replace("%", ""));
47
- if (!fedPct || fedPct <= 0)
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 }),
@@ -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";
@@ -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,6 +1,6 @@
1
1
  {
2
2
  "name": "@paro.io/expert-shared-components",
3
- "version": "1.14.61",
3
+ "version": "1.14.63",
4
4
  "description": "",
5
5
  "main": "lib/index.js",
6
6
  "scripts": {
@@ -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 {};