@paro.io/expert-shared-components 1.14.59 → 1.14.61

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 (60) hide show
  1. package/lib/README.md +2 -0
  2. package/lib/components/DocumentCenter/MultiFileUploadSection.js +121 -220
  3. package/lib/components/TaxAxis/TaxAxisApi.d.ts +1 -0
  4. package/lib/components/TaxAxis/TaxAxisShell.js +52 -3
  5. package/lib/components/shared/UploadClient.d.ts +1 -2
  6. package/lib/components/shared/UploadClient.js +2 -6
  7. package/lib/index.d.ts +13 -1
  8. package/lib/index.js +27 -1
  9. package/lib/package.json +68 -0
  10. package/lib/tax-axis/components/clientReport/ExecutiveSummary.d.ts +1 -4
  11. package/lib/tax-axis/components/clientReport/ExecutiveSummary.js +6 -10
  12. package/lib/tax-axis/components/clientReport/Methodology.js +2 -2
  13. package/lib/tax-axis/components/clientReport/RecommendedStrategies.d.ts +1 -6
  14. package/lib/tax-axis/components/clientReport/RecommendedStrategies.js +24 -26
  15. package/lib/tax-axis/components/clientReport/StrategyCard.d.ts +1 -1
  16. package/lib/tax-axis/components/clientReport/StrategyCard.js +23 -39
  17. package/lib/tax-axis/components/clientReport/TaxAxisClientReport.d.ts +2 -5
  18. package/lib/tax-axis/components/clientReport/TaxAxisClientReport.js +7 -9
  19. package/lib/tax-axis/components/dashboard/DashboardActions.js +5 -6
  20. package/lib/tax-axis/components/dashboard/DashboardSummary.d.ts +1 -6
  21. package/lib/tax-axis/components/dashboard/DashboardSummary.js +10 -19
  22. package/lib/tax-axis/components/dashboard/StrategyDetailPanel.d.ts +1 -1
  23. package/lib/tax-axis/components/dashboard/StrategyDetailPanel.js +95 -122
  24. package/lib/tax-axis/components/dashboard/TaxAxisDashboard.d.ts +4 -59
  25. package/lib/tax-axis/components/dashboard/TaxAxisDashboard.js +49 -433
  26. package/lib/tax-axis/components/documents/DocumentCard.d.ts +3 -8
  27. package/lib/tax-axis/components/documents/DocumentCard.js +14 -83
  28. package/lib/tax-axis/components/documents/DocumentTier.d.ts +2 -5
  29. package/lib/tax-axis/components/documents/DocumentTier.js +2 -2
  30. package/lib/tax-axis/components/documents/TaxAxisDocuments.d.ts +8 -28
  31. package/lib/tax-axis/components/documents/TaxAxisDocuments.js +86 -363
  32. package/lib/tax-axis/components/extractionReview/TaxAxisExtractionReview.js +17 -17
  33. package/lib/tax-axis/components/intake/ClientParametersSection.js +30 -14
  34. package/lib/tax-axis/components/intake/CpaIntakeQuestionsSection.js +3 -3
  35. package/lib/tax-axis/components/intake/IntakeCtaCards.d.ts +2 -1
  36. package/lib/tax-axis/components/intake/IntakeCtaCards.js +13 -6
  37. package/lib/tax-axis/components/intake/RefineAnalysisSection.js +7 -7
  38. package/lib/tax-axis/components/intake/TaxAxisIntake.js +45 -6
  39. package/lib/tax-axis/components/intake/intakeSchema.d.ts +3 -0
  40. package/lib/tax-axis/components/intake/intakeSchema.js +4 -2
  41. package/lib/tax-axis/components/preparerWorkpaper/TaxAxisPreparerWorkpaper.d.ts +4 -23
  42. package/lib/tax-axis/components/preparerWorkpaper/TaxAxisPreparerWorkpaper.js +4 -15
  43. package/lib/tax-axis/components/processing/TaxAxisProcessing.d.ts +1 -2
  44. package/lib/tax-axis/components/processing/TaxAxisProcessing.js +31 -102
  45. package/lib/tax-axis/components/prospectReport/ProspectPrintView.js +2 -0
  46. package/lib/tax-axis/components/prospectReport/ProspectStrategyCard.d.ts +8 -1
  47. package/lib/tax-axis/components/prospectReport/ProspectStrategyCard.js +5 -5
  48. package/lib/tax-axis/components/prospectReport/TaxAxisProspectReport.d.ts +27 -1
  49. package/lib/tax-axis/components/prospectReport/TaxAxisProspectReport.js +43 -25
  50. package/lib/tax-axis/index.d.ts +0 -4
  51. package/lib/tax-axis/index.js +1 -6
  52. package/lib/tax-axis/lib/adapters/useEngineOutput.d.ts +13 -138
  53. package/lib/tax-axis/lib/adapters/useEngineOutput.js +7 -156
  54. package/lib/tax-axis/lib/data/documents.d.ts +2 -3
  55. package/lib/tax-axis/lib/data/documents.js +25 -225
  56. package/lib/tax-axis/lib/data/strategies.js +9 -9
  57. package/lib/tax-axis/lib/documentFieldCatalog.d.ts +12 -7
  58. package/lib/tax-axis/lib/documentFieldCatalog.js +8 -805
  59. package/lib/tax-axis/lib/types/index.d.ts +1 -13
  60. package/package.json +1 -1
@@ -1,11 +1,9 @@
1
1
  import React from "react";
2
2
  import { DocSpec } from "../../lib/types";
3
- export type DocStatus = "empty" | "validating" | "parsing" | "failed" | "valid";
3
+ export type DocStatus = "empty" | "validating" | "valid";
4
4
  export interface DocState extends DocSpec {
5
5
  status: DocStatus;
6
6
  fileName: string | null;
7
- parseError?: string | null;
8
- qboSource?: boolean;
9
7
  }
10
8
  interface DocumentCardProps {
11
9
  doc: DocState;
@@ -13,11 +11,8 @@ interface DocumentCardProps {
13
11
  tierBadgeColor: "red" | "orange" | "neutral";
14
12
  tierBadgeText: string;
15
13
  helpOverride?: string;
16
- fieldCount?: number;
17
- onUpload: (file: File) => void;
14
+ onUpload: () => void;
18
15
  onClear: () => void;
19
- onRemove?: () => void;
20
- onReview?: () => void;
21
16
  }
22
- export declare function DocumentCard({ doc, tierBorderColor, tierBadgeColor, tierBadgeText, helpOverride, fieldCount, onUpload, onClear, onRemove, onReview, }: DocumentCardProps): React.JSX.Element;
17
+ export declare function DocumentCard({ doc, tierBorderColor, tierBadgeColor, tierBadgeText, helpOverride, onUpload, onClear, }: DocumentCardProps): React.JSX.Element;
23
18
  export {};
@@ -6,6 +6,8 @@ Object.defineProperty(exports, "__esModule", { value: true });
6
6
  exports.DocumentCard = DocumentCard;
7
7
  const react_1 = __importDefault(require("react"));
8
8
  const TaxAxisBadge_1 = require("../shared/TaxAxisBadge");
9
+ // Inline style values per status — mock T hex values for SVG strokes and
10
+ // rgba borders that don't have direct Tailwind token equivalents.
9
11
  const STATUS_STYLES = {
10
12
  empty: {
11
13
  iconBg: "#171B44",
@@ -17,114 +19,43 @@ const STATUS_STYLES = {
17
19
  iconBorder: "rgba(251,154,29,0.25)",
18
20
  cardBorder: "rgba(251,154,29,0.25)",
19
21
  },
20
- parsing: {
21
- iconBg: "rgba(36,131,132,0.08)",
22
- iconBorder: "rgba(36,131,132,0.25)",
23
- cardBorder: "rgba(36,131,132,0.25)",
24
- },
25
- failed: {
26
- iconBg: "rgba(197,48,48,0.08)",
27
- iconBorder: "rgba(197,48,48,0.25)",
28
- cardBorder: "rgba(197,48,48,0.25)",
29
- },
30
22
  valid: {
31
23
  iconBg: "rgba(15,110,86,0.08)",
32
24
  iconBorder: "rgba(15,110,86,0.25)",
33
25
  cardBorder: "rgba(15,110,86,0.25)",
34
26
  },
35
27
  };
36
- function DocumentCard({ doc, tierBorderColor, tierBadgeColor, tierBadgeText, helpOverride, fieldCount, onUpload, onClear, onRemove, onReview, }) {
37
- var _a, _b, _c;
28
+ function DocumentCard({ doc, tierBorderColor, tierBadgeColor, tierBadgeText, helpOverride, onUpload, onClear, }) {
29
+ var _a;
38
30
  const ss = STATUS_STYLES[doc.status];
39
31
  const leftBorder = doc.status === "valid" ? "rgba(15,110,86,0.6)" : tierBorderColor;
40
- const fileInputId = `tax-axis-upload-${doc.id}`;
41
- const reuploadInputId = `tax-axis-reupload-${doc.id}`;
42
32
  return (react_1.default.createElement("div", { className: "bg-tax-axis-surface overflow-hidden", style: {
43
33
  border: `1px solid ${ss.cardBorder}`,
44
34
  borderLeft: `3px solid ${leftBorder}`,
45
35
  borderRadius: "0 10px 10px 0",
46
36
  boxShadow: "0 2px 12px rgba(6,8,33,0.5)",
47
37
  } },
48
- react_1.default.createElement("div", { className: "px-4 py-3 flex flex-col sm:flex-row gap-3 items-start sm:items-center" },
38
+ react_1.default.createElement("div", { className: "px-4 py-3 flex gap-3 items-center" },
49
39
  react_1.default.createElement("div", { className: "w-9 h-9 rounded-lg flex items-center justify-center flex-shrink-0", style: {
50
40
  background: ss.iconBg,
51
41
  border: `1px solid ${ss.iconBorder}`,
52
42
  } }, doc.status === "validating" ? (react_1.default.createElement("div", { className: "w-3.5 h-3.5 rounded-full animate-spin", style: {
53
43
  border: "2px solid transparent",
54
44
  borderTopColor: "#FB9A1D",
55
- } })) : doc.status === "parsing" ? (react_1.default.createElement("div", { className: "w-3.5 h-3.5 rounded-full animate-spin", style: {
56
- border: "2px solid transparent",
57
- borderTopColor: "#248384",
58
- } })) : doc.status === "failed" ? (react_1.default.createElement("svg", { width: "14", height: "14", viewBox: "0 0 14 14", fill: "none" },
59
- react_1.default.createElement("path", { d: "M4 4l6 6M10 4L4 10", stroke: "#C53030", strokeWidth: "2", strokeLinecap: "round" }))) : doc.status === "valid" ? (react_1.default.createElement("svg", { width: "14", height: "14", viewBox: "0 0 14 14", fill: "none" },
45
+ } })) : doc.status === "valid" ? (react_1.default.createElement("svg", { width: "14", height: "14", viewBox: "0 0 14 14", fill: "none" },
60
46
  react_1.default.createElement("path", { d: "M2.5 7l3.5 3.5 5.5-6", stroke: "#0F6E56", strokeWidth: "2", strokeLinecap: "round" }))) : (react_1.default.createElement("svg", { width: "14", height: "14", viewBox: "0 0 14 14", fill: "none" },
61
47
  react_1.default.createElement("circle", { cx: "7", cy: "7", r: "5", stroke: "#9498B8", strokeWidth: "1.5", strokeDasharray: "3 3" })))),
62
48
  react_1.default.createElement("div", { className: "flex-1 min-w-0" },
63
49
  react_1.default.createElement("div", { className: "flex items-center gap-1.5" },
64
50
  react_1.default.createElement("span", { className: "text-[13px] font-medium text-white font-tax-axis-body" }, doc.name),
65
- doc.status === "empty" && (react_1.default.createElement(TaxAxisBadge_1.TaxAxisBadge, { color: tierBadgeColor, size: "xs" }, tierBadgeText)),
66
- doc.status === "failed" && (react_1.default.createElement(TaxAxisBadge_1.TaxAxisBadge, { color: "red", size: "xs" }, "FAILED")),
67
- doc.status === "valid" && doc.qboSource && (react_1.default.createElement(react_1.default.Fragment, null,
68
- react_1.default.createElement("span", { style: {
69
- fontSize: 9,
70
- fontWeight: 700,
71
- letterSpacing: "0.05em",
72
- padding: "1px 6px",
73
- borderRadius: 3,
74
- background: "rgba(44,160,28,0.1)",
75
- border: "1px solid rgba(44,160,28,0.2)",
76
- color: "#2CA01C",
77
- } }, "QUICKBOOKS"),
78
- react_1.default.createElement("span", { style: {
79
- fontSize: 9,
80
- fontWeight: 600,
81
- color: "#2CA01C",
82
- } }, "Synced")))),
83
- react_1.default.createElement("div", { className: "text-[11px] text-tax-axis-text-3 font-tax-axis-body mt-0.5" }, doc.status === "valid" && doc.fileName
84
- ? `${doc.fileName}${fieldCount ? ` \u00b7 ${fieldCount} fields extracted` : ""}`
85
- : doc.status === "failed" && doc.parseError
86
- ? doc.parseError
87
- : ((_a = doc.fileName) !== null && _a !== void 0 ? _a : (helpOverride !== null && helpOverride !== void 0 ? helpOverride : doc.help)))),
88
- react_1.default.createElement("div", { className: "flex items-center gap-2 flex-shrink-0 w-full sm:w-auto" },
51
+ doc.status === "empty" && (react_1.default.createElement(TaxAxisBadge_1.TaxAxisBadge, { color: tierBadgeColor, size: "xs" }, tierBadgeText))),
52
+ react_1.default.createElement("div", { className: "text-[11px] text-tax-axis-text-3 font-tax-axis-body mt-0.5" }, (_a = doc.fileName) !== null && _a !== void 0 ? _a : (helpOverride !== null && helpOverride !== void 0 ? helpOverride : doc.help))),
53
+ react_1.default.createElement("div", { className: "flex items-center gap-2 flex-shrink-0" },
89
54
  doc.status === "valid" && (react_1.default.createElement(react_1.default.Fragment, null,
90
- react_1.default.createElement("svg", { width: "14", height: "14", viewBox: "0 0 14 14", fill: "none" },
91
- react_1.default.createElement("path", { d: "M2.5 7l3.5 3.5 5.5-6", stroke: "#0F6E56", strokeWidth: "2", strokeLinecap: "round" })),
92
- onReview && (react_1.default.createElement("button", { onClick: onReview, className: "rounded-md px-3 py-1 text-[11px] font-semibold font-tax-axis-mono cursor-pointer flex items-center gap-1.5", style: {
93
- background: "rgba(99,102,241,0.12)",
94
- border: "1px solid rgba(99,102,241,0.30)",
95
- color: "#a5b4fc",
96
- } },
97
- react_1.default.createElement("svg", { width: "12", height: "12", viewBox: "0 0 12 12", fill: "none" },
98
- react_1.default.createElement("rect", { x: "2", y: "1.5", width: "8", height: "9", rx: "1.5", stroke: "#a5b4fc", strokeWidth: "1.2" }),
99
- react_1.default.createElement("path", { d: "M4 4.5h4M4 6.5h4M4 8.5h2", stroke: "#a5b4fc", strokeWidth: "0.9", strokeLinecap: "round" })),
100
- "Review")),
55
+ react_1.default.createElement("span", { className: "text-[10px] font-semibold font-tax-axis-mono", style: { color: "#0F6E56" } }, "Done"),
101
56
  react_1.default.createElement("button", { onClick: onClear, className: "bg-transparent border-none p-1 text-tax-axis-text-4 text-sm cursor-pointer" }, "\u00D7"))),
102
- (doc.status === "parsing" || doc.status === "validating") && (react_1.default.createElement("span", { className: "text-[10px] font-semibold font-tax-axis-mono", style: { color: doc.status === "parsing" ? "#248384" : "#FB9A1D" } }, doc.status === "parsing" ? "Parsing…" : "Uploading…")),
103
- doc.status === "failed" && (react_1.default.createElement(react_1.default.Fragment, null,
104
- react_1.default.createElement("input", { id: reuploadInputId, type: "file", className: "hidden", accept: (_b = doc.accept) === null || _b === void 0 ? void 0 : _b.join(","), onChange: (event) => {
105
- var _a;
106
- const file = (_a = event.target.files) === null || _a === void 0 ? void 0 : _a[0];
107
- if (file) {
108
- onUpload(file);
109
- }
110
- event.currentTarget.value = "";
111
- } }),
112
- react_1.default.createElement("label", { htmlFor: reuploadInputId, className: "rounded-md px-2.5 py-1 text-[10px] font-semibold text-tax-axis-teal-light font-tax-axis-mono cursor-pointer", style: {
113
- background: "rgba(36,131,132,0.10)",
114
- border: "1px solid rgba(36,131,132,0.2)",
115
- } }, "Re-upload"),
116
- react_1.default.createElement("button", { onClick: onRemove || onClear, className: "bg-transparent border-none p-1 text-tax-axis-text-4 text-sm cursor-pointer", title: "Remove document" }, "\u00D7"))),
117
- doc.status === "empty" && (react_1.default.createElement(react_1.default.Fragment, null,
118
- react_1.default.createElement("input", { id: fileInputId, type: "file", className: "hidden", accept: (_c = doc.accept) === null || _c === void 0 ? void 0 : _c.join(","), onChange: (event) => {
119
- var _a;
120
- const file = (_a = event.target.files) === null || _a === void 0 ? void 0 : _a[0];
121
- if (file) {
122
- onUpload(file);
123
- }
124
- event.currentTarget.value = "";
125
- } }),
126
- react_1.default.createElement("label", { htmlFor: fileInputId, className: "rounded-md px-3.5 py-1.5 text-[11px] font-semibold text-tax-axis-teal-light font-tax-axis-mono cursor-pointer", style: {
127
- background: "rgba(36,131,132,0.10)",
128
- border: "1px solid rgba(36,131,132,0.2)",
129
- } }, "Upload")))))));
57
+ doc.status === "empty" && (react_1.default.createElement("button", { onClick: onUpload, className: "rounded-md px-3.5 py-1.5 text-[11px] font-semibold text-tax-axis-teal-light font-tax-axis-mono cursor-pointer", style: {
58
+ background: "rgba(36,131,132,0.10)",
59
+ border: "1px solid rgba(36,131,132,0.2)",
60
+ } }, "Upload"))))));
130
61
  }
@@ -14,11 +14,8 @@ interface DocumentTierProps {
14
14
  tier: TierDef;
15
15
  docs: DocState[];
16
16
  helpOverrides: Record<string, string>;
17
- fieldCounts?: Record<string, number>;
18
- onUpload: (idx: number, file: File) => void;
17
+ onUpload: (idx: number) => void;
19
18
  onClear: (idx: number) => void;
20
- onRemove?: (idx: number) => void;
21
- onReview?: (docId: string) => void;
22
19
  }
23
- export declare function DocumentTier({ tier, docs, helpOverrides, fieldCounts, onUpload, onClear, onRemove, onReview, }: DocumentTierProps): React.JSX.Element | null;
20
+ export declare function DocumentTier({ tier, docs, helpOverrides, onUpload, onClear, }: DocumentTierProps): React.JSX.Element | null;
24
21
  export {};
@@ -6,7 +6,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
6
6
  exports.DocumentTier = DocumentTier;
7
7
  const react_1 = __importDefault(require("react"));
8
8
  const DocumentCard_1 = require("./DocumentCard");
9
- function DocumentTier({ tier, docs, helpOverrides, fieldCounts, onUpload, onClear, onRemove, onReview, }) {
9
+ function DocumentTier({ tier, docs, helpOverrides, onUpload, onClear, }) {
10
10
  const tierDocs = tier.ids
11
11
  .map((id) => {
12
12
  const idx = docs.findIndex((d) => d.id === id);
@@ -19,5 +19,5 @@ function DocumentTier({ tier, docs, helpOverrides, fieldCounts, onUpload, onClea
19
19
  react_1.default.createElement("div", { className: "flex items-center gap-2 mb-2" },
20
20
  react_1.default.createElement("span", { className: "text-[10px] font-bold uppercase tracking-widest font-tax-axis-mono", style: { color: tier.labelColor } }, tier.label),
21
21
  react_1.default.createElement("span", { className: "text-[10px] text-tax-axis-text-4 font-tax-axis-body" }, tier.sublabel)),
22
- react_1.default.createElement("div", { className: "grid gap-1.5" }, tierDocs.map(({ doc, idx }) => (react_1.default.createElement(DocumentCard_1.DocumentCard, { key: doc.id, doc: doc, tierBorderColor: tier.borderColor, tierBadgeColor: tier.badgeColor, tierBadgeText: tier.badgeText, helpOverride: helpOverrides[doc.id], fieldCount: fieldCounts === null || fieldCounts === void 0 ? void 0 : fieldCounts[doc.id], onUpload: (file) => onUpload(idx, file), onClear: () => onClear(idx), onRemove: onRemove ? () => onRemove(idx) : undefined, onReview: onReview ? () => onReview(doc.id) : undefined }))))));
22
+ react_1.default.createElement("div", { className: "grid gap-1.5" }, tierDocs.map(({ doc, idx }) => (react_1.default.createElement(DocumentCard_1.DocumentCard, { key: doc.id, doc: doc, tierBorderColor: tier.borderColor, tierBadgeColor: tier.badgeColor, tierBadgeText: tier.badgeText, helpOverride: helpOverrides[doc.id], onUpload: () => onUpload(idx), onClear: () => onClear(idx) }))))));
23
23
  }
@@ -1,43 +1,23 @@
1
1
  import React from "react";
2
2
  import { ClientProfile, TaxAxisScreenProps } from "../../lib/types";
3
- import { TaxAxisEntityTypeKey } from "../../lib/data/documents";
4
- import { DocState } from "./DocumentCard";
5
3
  export interface TaxAxisDocumentsProps extends TaxAxisScreenProps {
6
4
  profile: ClientProfile;
7
- entityType?: TaxAxisEntityTypeKey | string | null;
8
5
  onContinue: () => void;
9
6
  onBack: () => void;
10
- onUploadDocument?: (doc: DocState, file: File) => Promise<void | {
11
- documentId?: string;
12
- fileName?: string;
13
- status?: string;
14
- documentType?: string;
15
- parseError?: string | null;
16
- }>;
7
+ entityType?: string;
8
+ onUploadDocument?: (doc: {
9
+ id: string;
10
+ }, file: File) => Promise<any>;
17
11
  onDeleteDocument?: (documentId: string) => Promise<void>;
18
- fetchUploadedDocuments?: () => Promise<Array<{
19
- documentId?: string;
20
- fileName: string;
21
- status: string;
22
- documentType?: string | null;
23
- parseError?: string | null;
24
- updatedAt?: string | null;
25
- parsedData?: Record<string, unknown> | null;
26
- reviewedData?: Record<string, unknown> | null;
27
- }>>;
28
- parsedFieldCounts?: Record<string, number>;
12
+ fetchUploadedDocuments?: () => Promise<any[]>;
29
13
  jobId?: string;
30
14
  onSaveReviewedField?: (documentId: string, reviewedData: Record<string, unknown>) => Promise<void>;
31
15
  qboConnected?: boolean;
32
16
  qboCompanyName?: string | null;
33
17
  qboAuthorizeUrl?: string;
34
- onImportQboReport?: (sessionId: string, realmId: string, reportType: string, accountingMethod: string) => Promise<any>;
18
+ qboClientConfirmed?: boolean;
19
+ onImportQboReport?: (...args: any[]) => Promise<any>;
35
20
  onQboConnected?: (companyName: string) => void;
36
21
  onQboDisconnected?: () => void;
37
- onQboImport?: (mappedDocs: {
38
- slot: string;
39
- fileName: string;
40
- }[]) => void;
41
- qboClientConfirmed?: boolean;
42
22
  }
43
- export declare function TaxAxisDocuments({ profile, entityType, onContinue, onBack, onUploadDocument, onDeleteDocument, fetchUploadedDocuments, parsedFieldCounts, jobId, onSaveReviewedField, userContext: _userContext, qboConnected, qboCompanyName, qboAuthorizeUrl, onImportQboReport, onQboConnected, onQboDisconnected, onQboImport, qboClientConfirmed, }: TaxAxisDocumentsProps): React.JSX.Element;
23
+ export declare function TaxAxisDocuments({ profile, onContinue, onBack, userContext: _userContext, }: TaxAxisDocumentsProps): React.JSX.Element;