@paro.io/expert-shared-components 1.13.12 → 1.14.0

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 (80) hide show
  1. package/LICENSE +21 -21
  2. package/README.md +2 -2
  3. package/lib/components/ClientReferencesSection/DeleteButton.js +11 -11
  4. package/lib/components/ClientReferencesSection/ParoError.js +10 -10
  5. package/lib/components/ClientReferencesSection/TagsSection.js +2 -2
  6. package/lib/components/ClientReferencesSection/styles/BrandedTypography.js +2 -2
  7. package/lib/components/ClientReferencesSection/styles/Buttons.js +15 -15
  8. package/lib/components/ClientReferencesSection/styles/Name.js +5 -5
  9. package/lib/components/ClientReferencesSection/styles/NullContentConditionalColor.js +4 -4
  10. package/lib/components/ClientReferencesSection/styles/SectionBody.js +11 -11
  11. package/lib/components/ClientReferencesSection/styles/SectionTitle.js +6 -6
  12. package/lib/components/ClientReferencesSection/styles/Tags.js +2 -2
  13. package/lib/components/DiscussionThread/chat.d.ts +22 -22
  14. package/lib/components/DiscussionThread/chat.js +106 -106
  15. package/lib/components/DocumentCenter/DocumentTable.d.ts +15 -15
  16. package/lib/components/DocumentCenter/DocumentTable.js +350 -350
  17. package/lib/components/DocumentCenter/UploadFilesButton.d.ts +6 -6
  18. package/lib/components/DocumentCenter/UploadFilesButton.js +29 -29
  19. package/lib/components/EarningsTracker/ActiveProjectCard.d.ts +52 -52
  20. package/lib/components/EarningsTracker/ActiveProjectCard.js +161 -161
  21. package/lib/components/EarningsTracker/CenterCardUI.d.ts +13 -13
  22. package/lib/components/EarningsTracker/CenterCardUI.js +134 -134
  23. package/lib/components/EarningsTracker/EarningsTracker.d.ts +52 -52
  24. package/lib/components/EarningsTracker/EarningsTracker.js +508 -508
  25. package/lib/components/EarningsTracker/EditDateModal.d.ts +22 -22
  26. package/lib/components/EarningsTracker/EditDateModal.js +149 -149
  27. package/lib/components/EarningsTracker/EmailModal.d.ts +14 -14
  28. package/lib/components/EarningsTracker/EmailModal.js +79 -79
  29. package/lib/components/EarningsTracker/EndProjectModal.d.ts +56 -56
  30. package/lib/components/EarningsTracker/EndProjectModal.js +221 -221
  31. package/lib/components/EarningsTracker/LeftCardUI.d.ts +18 -18
  32. package/lib/components/EarningsTracker/LeftCardUI.js +189 -189
  33. package/lib/components/EarningsTracker/LogTimeModalAuthenticated.d.ts +52 -52
  34. package/lib/components/EarningsTracker/LogTimeModalAuthenticated.js +358 -358
  35. package/lib/components/EarningsTracker/ProgressBar.d.ts +4 -4
  36. package/lib/components/EarningsTracker/ProgressBar.js +66 -66
  37. package/lib/components/EarningsTracker/ReviewRequestModal.d.ts +17 -17
  38. package/lib/components/EarningsTracker/ReviewRequestModal.js +135 -135
  39. package/lib/components/EarningsTracker/RightCardUI.d.ts +46 -46
  40. package/lib/components/EarningsTracker/RightCardUI.js +231 -231
  41. package/lib/components/EarningsTracker/index.d.ts +1 -1
  42. package/lib/components/EarningsTracker/index.js +5 -5
  43. package/lib/components/Escalations/CustomTag.d.ts +3 -3
  44. package/lib/components/Escalations/CustomTag.js +25 -25
  45. package/lib/components/Escalations/ViewReponseModal.d.ts +8 -8
  46. package/lib/components/Escalations/ViewReponseModal.js +27 -27
  47. package/lib/components/ExpertProfileHeader/ActionButtonSection.js +6 -6
  48. package/lib/components/ExpertProfileHeader/ProfileSection.js +7 -7
  49. package/lib/components/Invoices/TestDecisionSection.d.ts +1 -1
  50. package/lib/components/Invoices/TestDecisionSection.js +126 -126
  51. package/lib/components/OrganizationChart/OrganizationChart.d.ts +15 -15
  52. package/lib/components/OrganizationChart/OrganizationChart.js +312 -312
  53. package/lib/components/OrganizationChart/PersonCard.js +5 -5
  54. package/lib/components/OrganizationChart/utils.js +79 -79
  55. package/lib/components/ProjectCard/ProgressBar.js +4 -4
  56. package/lib/components/ProjectCard/ReviewRequestModal.js +5 -5
  57. package/lib/components/ProjectIntelligence/EngagementHeader/index.js +13 -10
  58. package/lib/components/ProjectIntelligence/FocusAreas/index.d.ts +2 -1
  59. package/lib/components/ProjectIntelligence/FocusAreas/index.js +49 -45
  60. package/lib/components/ProjectIntelligence/KeyMetrics/index.d.ts +19 -0
  61. package/lib/components/ProjectIntelligence/KeyMetrics/index.js +21 -24
  62. package/lib/components/ProjectIntelligence/MissingInformation/index.d.ts +1 -0
  63. package/lib/components/ProjectIntelligence/MissingInformation/index.js +39 -30
  64. package/lib/components/ProjectIntelligence/ProgressTracker/index.js +3 -2
  65. package/lib/components/ProjectIntelligence/ProjectHealth/index.js +18 -18
  66. package/lib/components/ProjectIntelligence/TeamSection/index.js +21 -14
  67. package/lib/components/ProjectIntelligence/index.d.ts +3 -0
  68. package/lib/components/ProjectIntelligence/index.js +29 -11
  69. package/lib/components/Reviews/Pagination.js +6 -6
  70. package/lib/components/ReviewsTab/RatingHeader.js +6 -6
  71. package/lib/components/ReviewsTab/expert-shared-components.code-workspace +20 -20
  72. package/lib/components/ReviewsTab/reviewRequestModal.js +5 -5
  73. package/lib/components/shared/Image.js +13 -13
  74. package/lib/components/shared/ProfileTextField.d.ts +18 -18
  75. package/lib/components/shared/ProfileTextField.js +16 -16
  76. package/lib/components/shared/StyledActionButtons.d.ts +7 -7
  77. package/lib/components/shared/StyledActionButtons.js +15 -15
  78. package/lib/components/shared/ToastNotification.d.ts +10 -10
  79. package/lib/components/shared/ToastNotification.js +63 -63
  80. package/package.json +67 -67
@@ -35,10 +35,20 @@ Object.defineProperty(exports, "__esModule", { value: true });
35
35
  exports.MissingInformation = void 0;
36
36
  const react_1 = __importStar(require("react"));
37
37
  const utils_1 = require("../../shared/utils");
38
- const core_1 = require("@material-ui/core");
39
- const base_icons_1 = require("@paro.io/base-icons");
40
- const base_ui_1 = require("@paro.io/base-ui");
41
- const TeamSection_1 = require("../TeamSection");
38
+ const PRIORITY_COLORS = {
39
+ HIGH: 'bg-red-100 text-red-800 border-red-200',
40
+ MEDIUM: 'bg-orange-100 text-orange-800 border-orange-200',
41
+ LOW: 'bg-gray-100 text-gray-800 border-gray-200',
42
+ REQUESTED: 'bg-green-100 text-green-800 border-green-200',
43
+ CLIENT_RESPONDED: 'bg-green-100 text-green-800 border-green-200',
44
+ };
45
+ const PRIORITY_LABELS = {
46
+ HIGH: 'Required Now',
47
+ MEDIUM: 'Request Info',
48
+ LOW: 'Request Once',
49
+ REQUESTED: 'Requested',
50
+ CLIENT_RESPONDED: 'Client Responded',
51
+ };
42
52
  // Category options for the dropdown
43
53
  const INFORMATION_CATEGORIES = [
44
54
  'Technical Integration Details',
@@ -116,14 +126,15 @@ const RequestInfoModal = ({ isOpen, missingInfoItem, onClose, onSubmit, document
116
126
  const isClientResponded = missingInfoItem.status === "CLIENT_RESPONDED";
117
127
  const buttonText = isClientResponded ? "Update Request" : "Send Request";
118
128
  const hasUploadedDocuments = missingInfoItem.clientResponse && missingInfoItem.clientResponse.includes("Client Uploaded");
119
- return (react_1.default.createElement(core_1.Dialog, { open: isOpen, onClose: onClose, fullWidth: true },
120
- react_1.default.createElement(core_1.DialogTitle, null,
121
- react_1.default.createElement("div", { className: "text-black mb-1 p-2 pl-4 absolute top-0 left-0 w-full flex flex-row justify-between items-center z-50" },
122
- isClientResponded ? "View Client Response" : "Request Additional Information",
123
- react_1.default.createElement(core_1.IconButton, { onClick: onClose },
124
- react_1.default.createElement(base_icons_1.IconX, null)))),
125
- react_1.default.createElement(core_1.DialogContent, null,
126
- react_1.default.createElement("div", { className: "space-y-4 mt-4" },
129
+ return (react_1.default.createElement("div", { className: "fixed inset-0 bg-black bg-opacity-50 flex items-center justify-center z-50" },
130
+ react_1.default.createElement("div", { className: "bg-white rounded-lg shadow-xl w-full max-w-md mx-4" },
131
+ react_1.default.createElement("div", { className: "px-6 py-4 border-b border-gray-200" },
132
+ react_1.default.createElement("div", { className: "flex items-center justify-between" },
133
+ react_1.default.createElement("h2", { className: "text-lg font-semibold text-gray-900" }, isClientResponded ? "View Client Response" : "Request Additional Information"),
134
+ react_1.default.createElement("button", { onClick: onClose, className: "text-gray-400 hover:text-gray-600 transition-colors" },
135
+ react_1.default.createElement("svg", { className: "w-6 h-6", fill: "none", stroke: "currentColor", viewBox: "0 0 24 24" },
136
+ react_1.default.createElement("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: 2, d: "M6 18L18 6M6 6l12 12" }))))),
137
+ react_1.default.createElement("div", { className: "px-6 py-4 space-y-4" },
127
138
  isClientResponded && missingInfoItem.clientResponse && (react_1.default.createElement("div", null,
128
139
  react_1.default.createElement("label", { className: "block text-sm font-medium text-gray-700 mb-1" }, "Client Response"),
129
140
  react_1.default.createElement("div", { className: "w-full px-3 py-2 border border-gray-300 rounded-md bg-gray-50 text-sm" },
@@ -132,27 +143,21 @@ const RequestInfoModal = ({ isOpen, missingInfoItem, onClose, onSubmit, document
132
143
  react_1.default.createElement("button", { onClick: handleOpenDocumentCenter, className: "text-blue-600 hover:text-blue-800 font-medium flex items-center text-sm" },
133
144
  react_1.default.createElement("svg", { className: "w-4 h-4 mr-1", fill: "none", stroke: "currentColor", viewBox: "0 0 24 24", xmlns: "http://www.w3.org/2000/svg" },
134
145
  react_1.default.createElement("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: 2, d: "M9 12h6m-6 4h6m2 5H7a2 2 0 01-2-2V5a2 2 0 012-2h5.586a1 1 0 01.707.293l5.414 5.414a1 1 0 01.293.707V19a2 2 0 01-2 2z" })),
135
- isInternal ? 'View Documents under Documents tab' : 'View Documents in Document Center'))))),
146
+ "View Documents in Document Center"))))),
136
147
  react_1.default.createElement("div", null,
137
148
  react_1.default.createElement("label", { htmlFor: "informationCategory", className: "block text-sm font-medium text-gray-700 mb-1" }, "Information Category"),
138
- react_1.default.createElement(core_1.Select, { fullWidth: true, id: "informationCategory", value: formData.informationCategory, onChange: (e) => setFormData((prev) => (Object.assign(Object.assign({}, prev), { informationCategory: e.target.value }))), displayEmpty: true, variant: "outlined", placeholder: 'Select a category' },
139
- react_1.default.createElement(core_1.MenuItem, { disabled: true, value: "" },
140
- react_1.default.createElement("em", null, `Select a category`)),
141
- INFORMATION_CATEGORIES.map((category) => (react_1.default.createElement(core_1.MenuItem, { key: category, value: category }, category))))),
149
+ react_1.default.createElement("select", { id: "informationCategory", value: formData.informationCategory, onChange: (e) => setFormData(prev => (Object.assign(Object.assign({}, prev), { informationCategory: e.target.value }))), className: "w-full px-3 py-2 border border-gray-300 rounded-md shadow-sm focus:outline-none focus:ring-2 focus:ring-blue-500 focus:border-blue-500 text-sm" }, INFORMATION_CATEGORIES.map((category) => (react_1.default.createElement("option", { key: category, value: category }, category))))),
142
150
  react_1.default.createElement("div", null,
143
151
  react_1.default.createElement("label", { htmlFor: "priorityLevel", className: "block text-sm font-medium text-gray-700 mb-1" }, "Priority Level"),
144
- react_1.default.createElement(core_1.Select, { fullWidth: true, id: "priorityLevel", value: formData.priorityLevel, onChange: (e) => setFormData((prev) => (Object.assign(Object.assign({}, prev), { priorityLevel: e.target.value }))), displayEmpty: true, variant: "outlined", placeholder: 'Select priority level' },
145
- react_1.default.createElement(core_1.MenuItem, { disabled: true, value: "" },
146
- react_1.default.createElement("em", null, `Select priority level`)),
147
- PRIORITY_LEVELS.map((level) => (react_1.default.createElement(core_1.MenuItem, { key: level, value: level }, level))))),
152
+ react_1.default.createElement("select", { id: "priorityLevel", value: formData.priorityLevel, onChange: (e) => setFormData(prev => (Object.assign(Object.assign({}, prev), { priorityLevel: e.target.value }))), className: "w-full px-3 py-2 border border-gray-300 rounded-md shadow-sm focus:outline-none focus:ring-2 focus:ring-blue-500 focus:border-blue-500 text-sm" }, PRIORITY_LEVELS.map((level) => (react_1.default.createElement("option", { key: level, value: level }, level))))),
148
153
  react_1.default.createElement("div", null,
149
154
  react_1.default.createElement("label", { htmlFor: "specificInformation", className: "block text-sm font-medium text-gray-700 mb-1" }, "Specific Information Needed"),
150
- react_1.default.createElement("textarea", { id: "specificInformation", value: formData.specificInformation, onChange: (e) => setFormData(prev => (Object.assign(Object.assign({}, prev), { specificInformation: e.target.value }))), rows: 4, className: "w-full px-3 py-2 border border-gray-300 rounded-md shadow-sm focus:outline-none focus:ring-2 focus:ring-blue-500 focus:border-blue-500 text-sm", placeholder: "Need NetSuite configuration details:\r\n\r\n1. US vs Colombian entity setup\r\n2. Consolidation process and requirements" }))),
151
- react_1.default.createElement("div", { className: "px-6 py-4 flex justify-end space-x-3" },
152
- react_1.default.createElement(base_ui_1.Button, { label: "cancel", onClick: handleCancel, disabled: submitting }),
153
- react_1.default.createElement(base_ui_1.Button, { label: buttonText, onClick: handleSubmit, color: "primary", isLoading: submitting })))));
155
+ react_1.default.createElement("textarea", { id: "specificInformation", value: formData.specificInformation, onChange: (e) => setFormData(prev => (Object.assign(Object.assign({}, prev), { specificInformation: e.target.value }))), rows: 4, className: "w-full px-3 py-2 border border-gray-300 rounded-md shadow-sm focus:outline-none focus:ring-2 focus:ring-blue-500 focus:border-blue-500 text-sm", placeholder: "Need NetSuite configuration details:\n \n 1. US vs Colombian entity setup\n 2. Consolidation process and requirements" }))),
156
+ react_1.default.createElement("div", { className: "px-6 py-4 border-t border-gray-200 flex justify-end space-x-3" },
157
+ react_1.default.createElement("button", { onClick: handleCancel, className: "px-4 py-2 text-sm font-medium text-gray-700 bg-white border border-gray-300 rounded-md hover:bg-gray-50 focus:outline-none focus:ring-2 focus:ring-gray-500 transition-colors" }, "Cancel"),
158
+ react_1.default.createElement("button", { onClick: handleSubmit, className: "px-4 py-2 text-sm font-medium text-white bg-blue bg-blue-600 border border-transparent rounded-md hover:bg-blue-700 focus:outline-none focus:ring-2 focus:ring-blue-500 transition-colors" }, buttonText)))));
154
159
  };
155
- const MissingInformation = ({ items, className = '', opportunityId, GetOpportunityInsightsDocument, updateOpportunityMissingInformation, documentCenterController, isInternal, handleRouteToDocuments, }) => {
160
+ const MissingInformation = ({ items, className = '', opportunityId, GetOpportunityInsightsDocument, updateOpportunityMissingInformation, documentCenterController, isInternal, handleRouteToDocuments, onSaveMissingInformation, }) => {
156
161
  const [selectedItem, setSelectedItem] = (0, react_1.useState)(null);
157
162
  const [isModalOpen, setIsModalOpen] = (0, react_1.useState)(false);
158
163
  const [requestedItems, setRequestedItems] = (0, react_1.useState)({});
@@ -184,6 +189,7 @@ const MissingInformation = ({ items, className = '', opportunityId, GetOpportuni
184
189
  ]
185
190
  });
186
191
  (0, utils_1.showToast)('success', 'Information request submitted successfully');
192
+ onSaveMissingInformation && onSaveMissingInformation();
187
193
  // Update local state to reflect the change immediately
188
194
  setRequestedItems(prev => (Object.assign(Object.assign({}, prev), { [selectedItem.id]: true })));
189
195
  console.log('Information request submitted successfully');
@@ -195,8 +201,9 @@ const MissingInformation = ({ items, className = '', opportunityId, GetOpportuni
195
201
  });
196
202
  return (react_1.default.createElement(react_1.default.Fragment, null,
197
203
  react_1.default.createElement("div", { className: `bg-white rounded-lg shadow-sm border border-gray-200 p-6 ${className}` },
198
- react_1.default.createElement(TeamSection_1.Heading, { icon: react_1.default.createElement(base_icons_1.IconExclamation, { size: "sm", className: "mr-4" }), headerText: "Missing Information" }),
199
- react_1.default.createElement("div", { className: "space-y-4 mt-2" }, items.map((item) => {
204
+ react_1.default.createElement("div", { className: "flex items-center justify-between mb-4" },
205
+ react_1.default.createElement("h3", { className: "text-lg font-semibold text-gray-900 flex items-center" }, "\u26A0\uFE0F Missing Information")),
206
+ react_1.default.createElement("div", { className: "space-y-4" }, items.map((item) => {
200
207
  const isRequested = requestedItems[item.id] || item.status === "EXPERT_REQUESTED";
201
208
  const isClientResponded = item.status === "CLIENT_RESPONDED";
202
209
  let displayPriority = item.priority;
@@ -207,11 +214,13 @@ const MissingInformation = ({ items, className = '', opportunityId, GetOpportuni
207
214
  displayPriority = "CLIENT_RESPONDED";
208
215
  }
209
216
  return (react_1.default.createElement("div", { key: item.id, className: "border border-gray-200 rounded-lg p-4 hover:shadow-sm transition-shadow" },
210
- react_1.default.createElement("div", { className: "text-sm font-bold" }, item.title),
217
+ react_1.default.createElement("div", { className: "flex items-start justify-between mb-2" },
218
+ react_1.default.createElement("h4", { className: "text-sm font-medium text-gray-900" }, item.title),
219
+ react_1.default.createElement("span", { className: `inline-flex items-center px-2 py-0.5 rounded text-xs font-medium border ${PRIORITY_COLORS[displayPriority]}` }, PRIORITY_LABELS[displayPriority])),
211
220
  react_1.default.createElement("p", { className: "text-sm text-gray-600 mb-2" }, item.description),
212
221
  react_1.default.createElement("div", { className: "flex items-center justify-between" },
213
222
  react_1.default.createElement("span", { className: "text-xs text-gray-500" }, item.category),
214
- isClientResponded ? (react_1.default.createElement(base_ui_1.Button, { label: "Show Response", iconRight: react_1.default.createElement(base_icons_1.IconArrowRight, { size: "sm" }), onClick: () => handleRequestInfo(item), color: "success", size: 'sm' })) : !isRequested ? (react_1.default.createElement(base_ui_1.Button, { label: "Request Info", iconRight: react_1.default.createElement(base_icons_1.IconArrowRight, { size: "sm" }), onClick: () => handleRequestInfo(item), color: "success", size: 'sm' })) : (react_1.default.createElement(base_ui_1.Button, { label: "Information Requested", iconLeft: react_1.default.createElement(base_icons_1.IconCheckCircle, { size: "sm" }), disabled: true, size: 'sm' })))));
223
+ isClientResponded ? (react_1.default.createElement("button", { onClick: () => handleRequestInfo(item), className: "text-xs text-blue-600 hover:text-blue-800 font-medium transition-colors" }, "Show Response \u2192")) : !isRequested ? (react_1.default.createElement("button", { onClick: () => handleRequestInfo(item), className: "text-xs text-blue-600 hover:text-blue-800 font-medium transition-colors" }, "Request Info \u2192")) : (react_1.default.createElement("span", { className: "text-xs text-green-600 font-medium" }, "Information Requested")))));
215
224
  }))),
216
225
  react_1.default.createElement(RequestInfoModal, { isOpen: isModalOpen, missingInfoItem: selectedItem, onClose: handleCloseModal, onSubmit: handleSubmitRequest, documentCenterController: documentCenterController, isInternal: isInternal, handleRouteToDocuments: handleRouteToDocuments })));
217
226
  };
@@ -5,7 +5,6 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
6
  exports.ProgressTracker = void 0;
7
7
  const react_1 = __importDefault(require("react"));
8
- const base_ui_1 = require("@paro.io/base-ui");
9
8
  const PHASE_TABS = [
10
9
  { id: 'discovery', label: 'Discovery', active: true },
11
10
  { id: 'kickoff', label: 'Kickoff', active: false },
@@ -16,6 +15,8 @@ const PHASE_TABS = [
16
15
  const ProgressTracker = ({ percentage, currentPhase, nextSteps }) => {
17
16
  return (react_1.default.createElement("div", { className: "bg-white rounded-lg shadow-sm border border-gray-200 mt-6" },
18
17
  react_1.default.createElement("div", { className: "px-6 py-4 border-b border-gray-200" },
19
- react_1.default.createElement("div", { className: "flex space-x-2" }, PHASE_TABS.map((phase) => (react_1.default.createElement(base_ui_1.Button, { key: phase.id, disabled: !phase.active, label: phase.label, color: phase.active ? 'primary' : 'default' })))))));
18
+ react_1.default.createElement("div", { className: "flex space-x-1" }, PHASE_TABS.map((phase) => (react_1.default.createElement("button", { key: phase.id, disabled: !phase.active, className: `px-4 py-2 text-sm font-medium rounded-md transition-colors ${phase.active
19
+ ? 'bg-green-100 text-green-800 border border-green-200 hover:bg-green-200 cursor-pointer'
20
+ : 'text-gray-400 bg-gray-50 border border-gray-200 cursor-not-allowed opacity-60'}` }, phase.label)))))));
20
21
  };
21
22
  exports.ProgressTracker = ProgressTracker;
@@ -5,38 +5,38 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
6
  exports.ProjectHealth = void 0;
7
7
  const react_1 = __importDefault(require("react"));
8
- const TeamSection_1 = require("../TeamSection");
9
- const base_icons_1 = require("@paro.io/base-icons");
10
- const EscalationIssueCard_1 = require("../../Escalations/EscalationIssueCard");
11
8
  const STATUS_COLORS = {
12
- GOOD: "success",
13
- CRITICAL: "danger",
14
- ATTENTION_NEEDED: "warning",
9
+ GOOD: 'bg-green-100 text-green-800 border-green-200',
10
+ ATTENTION_NEEDED: 'bg-orange-100 text-orange-800 border-orange-200',
11
+ CRITICAL: 'bg-red-100 text-red-800 border-red-200',
15
12
  };
16
13
  const STATUS_ICONS = {
17
- GOOD: react_1.default.createElement(base_icons_1.IconCheck, { size: "sm" }),
18
- CRITICAL: react_1.default.createElement(base_icons_1.IconX, { size: "sm" }),
19
- ATTENTION_NEEDED: react_1.default.createElement(base_icons_1.IconExclamation, { size: "sm" }),
14
+ GOOD: '✓',
15
+ ATTENTION_NEEDED: '⚠',
16
+ CRITICAL: '✗',
20
17
  };
21
18
  const HealthIndicator = ({ title, status, description, icon }) => {
22
19
  return (react_1.default.createElement("div", { className: "flex items-start space-x-3 p-3 rounded-lg border border-gray-200 hover:shadow-sm transition-shadow" },
20
+ react_1.default.createElement("div", { className: `flex-shrink-0 w-8 h-8 rounded-full border flex items-center justify-center ${STATUS_COLORS[status]}` },
21
+ react_1.default.createElement("span", { className: "text-sm font-medium" }, STATUS_ICONS[status])),
23
22
  react_1.default.createElement("div", { className: "flex-1 min-w-0" },
24
23
  react_1.default.createElement("div", { className: "flex items-center space-x-2 mb-1" },
25
24
  react_1.default.createElement("span", { className: "text-sm" }, icon),
26
- react_1.default.createElement("div", { className: "text-sm font-bold" }, title),
27
- react_1.default.createElement(EscalationIssueCard_1.CustomTag, { label: status === 'GOOD' ? 'On track' : status === 'ATTENTION_NEEDED' ? 'Needs attention' : 'Critical', iconLeft: STATUS_ICONS[status], customColor: `bg-${STATUS_COLORS[status]} border-${STATUS_COLORS[status]}` })),
28
- react_1.default.createElement("p", { className: "text-sm text-gray-600" }, description))));
25
+ react_1.default.createElement("h4", { className: "text-sm font-medium text-gray-900" }, title)),
26
+ react_1.default.createElement("p", { className: "text-sm text-gray-600" }, description),
27
+ react_1.default.createElement("span", { className: `inline-flex items-center px-2 py-0.5 rounded text-xs font-medium mt-2 ${STATUS_COLORS[status]}` }, status === 'GOOD' ? 'On track' : status === 'ATTENTION_NEEDED' ? 'Needs attention' : 'Critical'))));
29
28
  };
30
29
  const ProjectHealth = ({ healthData, className = '' }) => {
31
30
  return (react_1.default.createElement("div", { className: `bg-white rounded-lg shadow-sm border border-gray-200 ${className}` },
32
- react_1.default.createElement("div", { className: "px-6 py-4 border-b border-gray-200 mb-2" },
33
- react_1.default.createElement(TeamSection_1.Heading, { icon: react_1.default.createElement(base_icons_1.IconChartBar, { size: "sm", className: "mr-4" }), headerText: "Project Health" }),
31
+ react_1.default.createElement("div", { className: "px-6 py-4 border-b border-gray-200" },
32
+ react_1.default.createElement("div", { className: "flex items-center justify-between" },
33
+ react_1.default.createElement("h2", { className: "text-lg font-semibold text-gray-900 flex items-center" }, "\uD83D\uDCCA Project Health")),
34
34
  react_1.default.createElement("p", { className: "text-sm text-gray-600 mt-1" }, "Automated insights from client communications and project data")),
35
35
  react_1.default.createElement("div", { className: "p-6" },
36
36
  react_1.default.createElement("div", { className: "space-y-4" },
37
- react_1.default.createElement(HealthIndicator, { title: "Communication Flow", status: healthData.communicationFlow.status, description: healthData.communicationFlow.description, icon: react_1.default.createElement(base_icons_1.IconChat, { size: "sm" }) }),
38
- react_1.default.createElement(HealthIndicator, { title: "Performance Tracking", status: healthData.performanceTracking.status, description: healthData.performanceTracking.description, icon: react_1.default.createElement(base_icons_1.IconLightningBolt, { size: "sm" }) }),
39
- react_1.default.createElement(HealthIndicator, { title: "Process Health", status: healthData.processHealth.status, description: healthData.processHealth.description, icon: react_1.default.createElement(base_icons_1.IconCog, { size: "sm" }) }),
40
- react_1.default.createElement(HealthIndicator, { title: "Risk Management", status: healthData.riskManagement.status, description: healthData.riskManagement.description, icon: react_1.default.createElement(base_icons_1.IconExclamationCircle, { size: "sm" }) })))));
37
+ react_1.default.createElement(HealthIndicator, { title: "Communication Flow", status: healthData.communicationFlow.status, description: healthData.communicationFlow.description, icon: "\uD83D\uDCAC" }),
38
+ react_1.default.createElement(HealthIndicator, { title: "Performance Tracking", status: healthData.performanceTracking.status, description: healthData.performanceTracking.description, icon: "\uD83D\uDCC8" }),
39
+ react_1.default.createElement(HealthIndicator, { title: "Process Health", status: healthData.processHealth.status, description: healthData.processHealth.description, icon: "\u2699\uFE0F" }),
40
+ react_1.default.createElement(HealthIndicator, { title: "Risk Management", status: healthData.riskManagement.status, description: healthData.riskManagement.description, icon: "\u26A0\uFE0F" })))));
41
41
  };
42
42
  exports.ProjectHealth = ProjectHealth;
@@ -5,8 +5,15 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
6
  exports.TeamSection = exports.Heading = void 0;
7
7
  const react_1 = __importDefault(require("react"));
8
- const base_icons_1 = require("@paro.io/base-icons");
9
- const base_ui_1 = require("@paro.io/base-ui");
8
+ const Avatar = ({ src, name, size = 'md' }) => {
9
+ const sizeClasses = {
10
+ sm: 'w-8 h-8',
11
+ md: 'w-10 h-10',
12
+ lg: 'w-12 h-12'
13
+ };
14
+ const initials = (name === null || name === void 0 ? void 0 : name.split(' ').map(n => n[0]).join('').toUpperCase()) || '';
15
+ return (react_1.default.createElement("div", { className: `${sizeClasses[size]} rounded-full bg-blue-500 flex items-center justify-center text-white font-medium text-sm` }, src ? (react_1.default.createElement("img", { src: src, alt: name, className: `${sizeClasses[size]} rounded-full object-cover` })) : (react_1.default.createElement("span", null, initials))));
16
+ };
10
17
  const Heading = ({ icon, headerText }) => {
11
18
  return (react_1.default.createElement("div", { className: "flex flex-row justify-start items-center" },
12
19
  icon,
@@ -16,26 +23,26 @@ exports.Heading = Heading;
16
23
  const TeamSection = ({ clientTeam, expert, paroTeam }) => {
17
24
  return (react_1.default.createElement("div", { className: "space-y-6" },
18
25
  react_1.default.createElement("div", { className: "bg-white rounded-lg shadow-sm border border-gray-200 p-6" },
19
- react_1.default.createElement(exports.Heading, { icon: react_1.default.createElement(base_icons_1.IconUserGroup, { size: "sm", className: "mr-4" }), headerText: "Client Team" }),
20
- react_1.default.createElement("div", { className: "space-y-3 mt-2" }, clientTeam === null || clientTeam === void 0 ? void 0 : clientTeam.map((member) => (react_1.default.createElement("div", { key: member.id, className: "flex items-center space-x-3" },
21
- react_1.default.createElement(base_ui_1.Avatar, { src: member.avatar || '', name: member.name }),
26
+ react_1.default.createElement("h3", { className: "text-lg font-semibold text-gray-900 mb-4 flex items-center" }, "\uD83D\uDC65 Client Team"),
27
+ react_1.default.createElement("div", { className: "space-y-3" }, clientTeam === null || clientTeam === void 0 ? void 0 : clientTeam.map((member) => (react_1.default.createElement("div", { key: member.id, className: "flex items-center space-x-3" },
28
+ react_1.default.createElement(Avatar, { src: member.avatar || '', name: member.name }),
22
29
  react_1.default.createElement("div", { className: "flex-1 min-w-0" },
23
- react_1.default.createElement("p", { className: "text-sm font-bold" }, member.name),
30
+ react_1.default.createElement("p", { className: "text-sm font-medium text-gray-900" }, member.name),
24
31
  react_1.default.createElement("p", { className: "text-sm text-gray-600" }, member.role),
25
32
  member.availability && (react_1.default.createElement("p", { className: "text-xs text-gray-500" }, member.availability)))))))),
26
33
  react_1.default.createElement("div", { className: "bg-white rounded-lg shadow-sm border border-gray-200 p-6" },
27
- react_1.default.createElement(exports.Heading, { icon: react_1.default.createElement(base_icons_1.IconStar, { size: "sm", className: "mr-4" }), headerText: "Your Expert" }),
28
- react_1.default.createElement("div", { className: "flex items-center space-x-3 mt-2" },
29
- react_1.default.createElement(base_ui_1.Avatar, { src: expert.avatar, name: expert.name }),
34
+ react_1.default.createElement("h3", { className: "text-lg font-semibold text-gray-900 mb-4 flex items-center" }, "\u2B50 Your Expert"),
35
+ react_1.default.createElement("div", { className: "flex items-center space-x-3" },
36
+ react_1.default.createElement(Avatar, { src: expert.avatar, name: expert.name }),
30
37
  react_1.default.createElement("div", { className: "flex-1 min-w-0" },
31
- react_1.default.createElement("p", { className: "text-sm font-bold" }, expert.name),
38
+ react_1.default.createElement("p", { className: "text-sm font-medium text-gray-900" }, expert.name),
32
39
  react_1.default.createElement("p", { className: "text-sm text-gray-600" }, expert.title)))),
33
40
  react_1.default.createElement("div", { className: "bg-white rounded-lg shadow-sm border border-gray-200 p-6" },
34
- react_1.default.createElement(exports.Heading, { icon: react_1.default.createElement(base_icons_1.IconUsers, { size: "sm", className: "mr-4" }), headerText: "Your Paro Team" }),
35
- react_1.default.createElement("div", { className: "space-y-3 mt-2" }, paroTeam === null || paroTeam === void 0 ? void 0 : paroTeam.map((member) => (react_1.default.createElement("div", { key: member.id || member.name, className: "flex items-center space-x-3" },
36
- react_1.default.createElement(base_ui_1.Avatar, { src: member.avatar || '', name: member.name }),
41
+ react_1.default.createElement("h3", { className: "text-lg font-semibold text-gray-900 mb-4 flex items-center" }, "\uD83D\uDD25 Your Paro Team"),
42
+ react_1.default.createElement("div", { className: "space-y-3" }, paroTeam === null || paroTeam === void 0 ? void 0 : paroTeam.map((member) => (react_1.default.createElement("div", { key: member.id || member.name, className: "flex items-center space-x-3" },
43
+ react_1.default.createElement(Avatar, { src: member.avatar || '', name: member.name }),
37
44
  react_1.default.createElement("div", { className: "flex-1 min-w-0" },
38
- react_1.default.createElement("p", { className: "text-sm font-bold" }, member.name),
45
+ react_1.default.createElement("p", { className: "text-sm font-medium text-gray-900" }, member.name),
39
46
  react_1.default.createElement("p", { className: "text-sm text-gray-600" }, member.role)))))))));
40
47
  };
41
48
  exports.TeamSection = TeamSection;
@@ -12,6 +12,9 @@ interface ProjectIntelligenceProps {
12
12
  updateOpportunityFocusArea: any;
13
13
  isInternal?: boolean;
14
14
  handleRouteToDocuments?: () => void;
15
+ updateOpportunityKeyMetrics: any;
16
+ onSaveFocusArea?: any;
17
+ onSaveMissingInformation?: any;
15
18
  }
16
19
  export declare const ProjectIntelligence: React.FC<ProjectIntelligenceProps>;
17
20
  export {};
@@ -12,8 +12,8 @@ const TeamSection_1 = require("./TeamSection");
12
12
  const ProjectHealth_1 = require("./ProjectHealth");
13
13
  const KeyMetrics_1 = require("./KeyMetrics");
14
14
  const MissingInformation_1 = require("./MissingInformation");
15
- const ProjectIntelligence = ({ checkIfOpportunityInsightsExistData, opportunityInsightsData, selectedOpportunityId, setSelectedOpportunityId, GetOpportunityInsightsDocument, updateOpportunityMissingInformation, documentCenterController = null, updateOpportunityFocusArea, isInternal = false, handleRouteToDocuments, }) => {
16
- var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r, _s, _t, _u, _v, _w, _x, _y, _z, _0;
15
+ const ProjectIntelligence = ({ checkIfOpportunityInsightsExistData, opportunityInsightsData, selectedOpportunityId, setSelectedOpportunityId, GetOpportunityInsightsDocument, updateOpportunityMissingInformation, documentCenterController = null, updateOpportunityFocusArea, isInternal = false, handleRouteToDocuments, updateOpportunityKeyMetrics, onSaveFocusArea, onSaveMissingInformation, }) => {
16
+ var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r, _s, _t, _u, _v, _w, _x, _y, _z, _0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10;
17
17
  const opportunityInsights = opportunityInsightsData === null || opportunityInsightsData === void 0 ? void 0 : opportunityInsightsData.getOpportunityInsights;
18
18
  // Create client tabs from checkIfOpportunityInsightsExistData
19
19
  const clientTabs = ((_a = checkIfOpportunityInsightsExistData === null || checkIfOpportunityInsightsExistData === void 0 ? void 0 : checkIfOpportunityInsightsExistData.checkIfOpportunityInsightsExist) === null || _a === void 0 ? void 0 : _a.map((insight) => ({
@@ -88,18 +88,24 @@ const ProjectIntelligence = ({ checkIfOpportunityInsightsExistData, opportunityI
88
88
  priority: mapPriority(area === null || area === void 0 ? void 0 : area.priority)
89
89
  }));
90
90
  };
91
+ const hasNoProjectIntelligence = !(checkIfOpportunityInsightsExistData === null || checkIfOpportunityInsightsExistData === void 0 ? void 0 : checkIfOpportunityInsightsExistData.checkIfOpportunityInsightsExist) ||
92
+ checkIfOpportunityInsightsExistData.checkIfOpportunityInsightsExist.length === 0;
93
+ // If there's no data, show a message
94
+ if (hasNoProjectIntelligence) {
95
+ return (react_1.default.createElement(react_1.default.Fragment, null,
96
+ react_1.default.createElement("div", { className: "max-w-7xl mx-auto px-4 sm:px-6 lg:px-8 py-8" },
97
+ react_1.default.createElement("div", { className: "flex flex-col items-center justify-center h-64 text-center" },
98
+ react_1.default.createElement("i", { className: "fal fa-chart-line text-gray-400 text-6xl mb-4" }),
99
+ react_1.default.createElement("h2", { className: "text-2xl font-bold text-gray-700 mb-2" }, "No project intelligence found"),
100
+ react_1.default.createElement("p", { className: "text-gray-500 max-w-md" }, "No project intelligence found for your won projects. Please check back after you win your next Opportunity!")))));
101
+ }
91
102
  return (react_1.default.createElement(react_1.default.Fragment, null,
92
- react_1.default.createElement("div", { className: "w-full bg-info-light py-6 px-4 rounded-lg shadow mb-8" },
93
- react_1.default.createElement("h1", { className: "text-2xl font-bold" }, (opportunityInsights === null || opportunityInsights === void 0 ? void 0 : opportunityInsights.opportunityName) || 'Client Engagement Dashboard'),
94
- react_1.default.createElement("p", { className: "text-gray-600 mt-1" },
95
- "Engagement dashboard for ",
96
- (opportunityInsights === null || opportunityInsights === void 0 ? void 0 : opportunityInsights.opportunityName) || 'this client')),
97
- react_1.default.createElement("div", { className: "max-w-[80%] mx-auto px-4 py-8" },
103
+ react_1.default.createElement("div", { className: "mx-auto px-4 py-8" },
98
104
  react_1.default.createElement(EngagementHeader_1.EngagementHeader, { clientName: (opportunityInsights === null || opportunityInsights === void 0 ? void 0 : opportunityInsights.opportunityName) || '', expertName: ((_b = opportunityInsights === null || opportunityInsights === void 0 ? void 0 : opportunityInsights.expertInfo) === null || _b === void 0 ? void 0 : _b.name) || '', expertTitle: ((_c = opportunityInsights === null || opportunityInsights === void 0 ? void 0 : opportunityInsights.expertInfo) === null || _c === void 0 ? void 0 : _c.role) || '', startDate: (opportunityInsights === null || opportunityInsights === void 0 ? void 0 : opportunityInsights.startDate) || '', status: (opportunityInsights === null || opportunityInsights === void 0 ? void 0 : opportunityInsights.phase) || 'In_Progress', clientTabs: clientTabs, selectedClientId: selectedOpportunityId, onClientChange: handleClientChange }),
99
105
  react_1.default.createElement(ProgressTracker_1.ProgressTracker, { percentage: 0, currentPhase: "Kickoff Phase (Day 1 of 3)", nextSteps: "System access & team introductions" }),
100
106
  react_1.default.createElement("div", { className: "flex flex-row space-x-4 mt-8" },
101
107
  react_1.default.createElement("div", { className: "w-2/3 space-7-4" },
102
- react_1.default.createElement(FocusAreas_1.FocusAreas, { focusAreas: convertFocusAreas(), onEditFocusAreas: () => { }, updateOpportunityFocusArea: updateOpportunityFocusArea, GetOpportunityInsightsDocument: GetOpportunityInsightsDocument, opportunityId: selectedOpportunityId }),
108
+ react_1.default.createElement(FocusAreas_1.FocusAreas, { focusAreas: convertFocusAreas(), onEditFocusAreas: () => { }, updateOpportunityFocusArea: updateOpportunityFocusArea, GetOpportunityInsightsDocument: GetOpportunityInsightsDocument, selectedOpportunityId: selectedOpportunityId, onSaveFocusArea: onSaveFocusArea }),
103
109
  react_1.default.createElement(ProjectHealth_1.ProjectHealth, { healthData: {
104
110
  communicationFlow: {
105
111
  status: mapHealthStatus((_e = (_d = opportunityInsights === null || opportunityInsights === void 0 ? void 0 : opportunityInsights.opportunityHealth) === null || _d === void 0 ? void 0 : _d.communicationFlow) === null || _e === void 0 ? void 0 : _e.status),
@@ -127,7 +133,7 @@ const ProjectIntelligence = ({ checkIfOpportunityInsightsExistData, opportunityI
127
133
  category: (item === null || item === void 0 ? void 0 : item.category) || 'N/A',
128
134
  status: (item === null || item === void 0 ? void 0 : item.status) || undefined,
129
135
  clientResponse: (item === null || item === void 0 ? void 0 : item.clientResponse) || undefined
130
- })) : [], className: "mt-8", opportunityId: selectedOpportunityId, GetOpportunityInsightsDocument: GetOpportunityInsightsDocument, updateOpportunityMissingInformation: updateOpportunityMissingInformation, documentCenterController: documentCenterController, isInternal: isInternal, handleRouteToDocuments: handleRouteToDocuments })),
136
+ })) : [], className: "mt-8", opportunityId: selectedOpportunityId, GetOpportunityInsightsDocument: GetOpportunityInsightsDocument, updateOpportunityMissingInformation: updateOpportunityMissingInformation, documentCenterController: documentCenterController, isInternal: isInternal, handleRouteToDocuments: handleRouteToDocuments, onSaveMissingInformation: onSaveMissingInformation })),
131
137
  react_1.default.createElement("div", { className: "w-1/3 space-y-4" },
132
138
  react_1.default.createElement(TeamSection_1.TeamSection, { clientTeam: opportunityInsights === null || opportunityInsights === void 0 ? void 0 : opportunityInsights.clientTeam, expert: {
133
139
  id: 'expert-1',
@@ -141,6 +147,18 @@ const ProjectIntelligence = ({ checkIfOpportunityInsightsExistData, opportunityI
141
147
  daysSinceGoal: ((_z = opportunityInsights === null || opportunityInsights === void 0 ? void 0 : opportunityInsights.engagementMetrics) === null || _z === void 0 ? void 0 : _z.dayCloseGoal) ?
142
148
  parseInt(opportunityInsights.engagementMetrics.dayCloseGoal) : 0,
143
149
  totalContractLength: ((_0 = opportunityInsights === null || opportunityInsights === void 0 ? void 0 : opportunityInsights.engagementMetrics) === null || _0 === void 0 ? void 0 : _0.contractLength) || 0
144
- } }))))));
150
+ }, communication: {
151
+ channel: ((_1 = opportunityInsights === null || opportunityInsights === void 0 ? void 0 : opportunityInsights.communication) === null || _1 === void 0 ? void 0 : _1.channel) || 'N/A',
152
+ frequency: ((_2 = opportunityInsights === null || opportunityInsights === void 0 ? void 0 : opportunityInsights.communication) === null || _2 === void 0 ? void 0 : _2.frequency) || 'N/A',
153
+ formalChannel: ((_3 = opportunityInsights === null || opportunityInsights === void 0 ? void 0 : opportunityInsights.communication) === null || _3 === void 0 ? void 0 : _3.formalChannel) || 'N/A',
154
+ weeklyMeeting: ((_4 = opportunityInsights === null || opportunityInsights === void 0 ? void 0 : opportunityInsights.communication) === null || _4 === void 0 ? void 0 : _4.weeklyMeeting) || 'N/A',
155
+ languages: ((_5 = opportunityInsights === null || opportunityInsights === void 0 ? void 0 : opportunityInsights.communication) === null || _5 === void 0 ? void 0 : _5.languages) || []
156
+ }, businessContext: {
157
+ industry: ((_6 = opportunityInsights === null || opportunityInsights === void 0 ? void 0 : opportunityInsights.businessContext) === null || _6 === void 0 ? void 0 : _6.industry) || 'N/A',
158
+ structure: ((_7 = opportunityInsights === null || opportunityInsights === void 0 ? void 0 : opportunityInsights.businessContext) === null || _7 === void 0 ? void 0 : _7.structure) || 'N/A',
159
+ challenge: ((_8 = opportunityInsights === null || opportunityInsights === void 0 ? void 0 : opportunityInsights.businessContext) === null || _8 === void 0 ? void 0 : _8.challenge) || 'N/A',
160
+ opportunity: ((_9 = opportunityInsights === null || opportunityInsights === void 0 ? void 0 : opportunityInsights.businessContext) === null || _9 === void 0 ? void 0 : _9.opportunity) || 'N/A',
161
+ tags: ((_10 = opportunityInsights === null || opportunityInsights === void 0 ? void 0 : opportunityInsights.businessContext) === null || _10 === void 0 ? void 0 : _10.tags) || []
162
+ }, updateOpportunityKeyMetrics: updateOpportunityKeyMetrics, GetOpportunityInsightsDocument: GetOpportunityInsightsDocument, selectedOpportunityId: selectedOpportunityId }))))));
145
163
  };
146
164
  exports.ProjectIntelligence = ProjectIntelligence;
@@ -51,12 +51,12 @@ const Pagination = ({ total, currentPage = 1, setCurrentPage, perPageItems = 10,
51
51
  };
52
52
  const numberOfPages = Math.ceil(total / perPageItems);
53
53
  return (react_1.default.createElement("div", { className: "bg-white px-4 py-3 border-t border-gray-200 sm:px-6 flex flex-col md:flex-row md:items-center md:justify-between" },
54
- react_1.default.createElement("div", { className: "pb-2 md:pb-0" }, `Showing
55
- ${perPageItems * (currentPage - 1) + 1}
56
- to
57
- ${Math.min(total, perPageItems * currentPage)}
58
- of
59
- ${total}
54
+ react_1.default.createElement("div", { className: "pb-2 md:pb-0" }, `Showing
55
+ ${perPageItems * (currentPage - 1) + 1}
56
+ to
57
+ ${Math.min(total, perPageItems * currentPage)}
58
+ of
59
+ ${total}
60
60
  ${displayText}`),
61
61
  react_1.default.createElement("div", { className: "flex items-center justify-between" },
62
62
  react_1.default.createElement("div", { className: "flex-1 flex justify-between sm:hidden" },
@@ -51,12 +51,12 @@ const isRatingExists = (rating) => {
51
51
  return false;
52
52
  };
53
53
  exports.isRatingExists = isRatingExists;
54
- const StyledButton = (0, styled_components_1.default)(core_2.Button) `
55
- margin: 0px !important;
56
- padding: 26px 0 18px 0 !important;
57
- span {
58
- color: #248384 !important
59
- }
54
+ const StyledButton = (0, styled_components_1.default)(core_2.Button) `
55
+ margin: 0px !important;
56
+ padding: 26px 0 18px 0 !important;
57
+ span {
58
+ color: #248384 !important
59
+ }
60
60
  `;
61
61
  const RatingHeader = ({ ratings, project, index, highlightedRatings, requestStatus, handleRatingRequest, loadingSubmitId, handleAddToProfile, ratingReviewButtonlabel, setOpenClientReviewModal, setShowReviewModelWithRecentlyRatedProjects, enableReviewModal, disableReviewModal, isClientPortal, isInternal, createOrUpdateRating, getParoProjectsDocument, projectIdToShow, }) => {
62
62
  var _a, _b, _c, _d;
@@ -1,20 +1,20 @@
1
- {
2
- "folders": [
3
- {
4
- "path": "../../.."
5
- },
6
- {
7
- "path": "../../../../internal-profile-app"
8
- },
9
- {
10
- "path": "../../../../availability-gantt-chart"
11
- },
12
- {
13
- "path": "../../../../client-portal"
14
- },
15
- {
16
- "path": "../../../../expert-portal"
17
- }
18
- ],
19
- "settings": {}
20
- }
1
+ {
2
+ "folders": [
3
+ {
4
+ "path": "../../.."
5
+ },
6
+ {
7
+ "path": "../../../../internal-profile-app"
8
+ },
9
+ {
10
+ "path": "../../../../availability-gantt-chart"
11
+ },
12
+ {
13
+ "path": "../../../../client-portal"
14
+ },
15
+ {
16
+ "path": "../../../../expert-portal"
17
+ }
18
+ ],
19
+ "settings": {}
20
+ }
@@ -34,11 +34,11 @@ const react_hot_toast_1 = __importDefault(require("react-hot-toast"));
34
34
  const ReviewRequestModal = ({ project, requestModal, setRequestModal, expertName, freelancerId, setRequestStatus, selectedProject, setSelectedProject, clientId, refetchParoProjects, setHighlightedRatings, createOrUpdateRatingRequestMutation, getParoProjectsDocument, }) => {
35
35
  var _a;
36
36
  const [showError, setShowError] = (0, react_1.useState)(false);
37
- const [textareaValue, setTextareaValue] = (0, react_1.useState)(`Hi ${(_a = project === null || project === void 0 ? void 0 : project.client) === null || _a === void 0 ? void 0 : _a.name},
38
- I hope you are satisfied with the work I provided on ${project === null || project === void 0 ? void 0 : project.name}. Your feedback is very important to me and helps me improve my services and build my reputation on Paro. Could you please take a moment to leave a review of you experience? Your input is greatly appreciated!
39
-
40
- Thank you in advance for your time and feedback.
41
- Best regards,
37
+ const [textareaValue, setTextareaValue] = (0, react_1.useState)(`Hi ${(_a = project === null || project === void 0 ? void 0 : project.client) === null || _a === void 0 ? void 0 : _a.name},
38
+ I hope you are satisfied with the work I provided on ${project === null || project === void 0 ? void 0 : project.name}. Your feedback is very important to me and helps me improve my services and build my reputation on Paro. Could you please take a moment to leave a review of you experience? Your input is greatly appreciated!
39
+
40
+ Thank you in advance for your time and feedback.
41
+ Best regards,
42
42
  ${expertName}`);
43
43
  const handleTextArea = (e) => {
44
44
  setTextareaValue(e.target.value);
@@ -31,20 +31,20 @@ const react_1 = __importStar(require("react"));
31
31
  const core_1 = require("@material-ui/core");
32
32
  const styled_components_1 = __importDefault(require("styled-components"));
33
33
  const cdn_1 = require("./constants/cdn");
34
- const ProfilePhotoPreview = styled_components_1.default.img `
35
- height: 86px;
36
- width: 86px;
37
- border: 4px solid #F8FAFC;
38
- border-radius: 10px;
39
- object-fit: cover;
40
- object-position: top;
34
+ const ProfilePhotoPreview = styled_components_1.default.img `
35
+ height: 86px;
36
+ width: 86px;
37
+ border: 4px solid #F8FAFC;
38
+ border-radius: 10px;
39
+ object-fit: cover;
40
+ object-position: top;
41
41
  `;
42
- const PhotoChangeButton = (0, styled_components_1.default)(core_1.Typography) `
43
- text-decoration: underline;
44
- cursor: pointer;
45
- :active {
46
- text-decoration: none !important;
47
- }
42
+ const PhotoChangeButton = (0, styled_components_1.default)(core_1.Typography) `
43
+ text-decoration: underline;
44
+ cursor: pointer;
45
+ :active {
46
+ text-decoration: none !important;
47
+ }
48
48
  `;
49
49
  exports.defaultAvatar = cdn_1.CDN_URL + 'defaultAvatar.png';
50
50
  const Image = ({ imageUrl, getUserDocument, uploadUserPhotoMutation, loadingNewImage, imageUpdateError, legacyFreelancerId, }) => {
@@ -1,18 +1,18 @@
1
- import { FieldError } from 'react-hook-form/dist/types/form';
2
- type SectionContents = {
3
- defaultValue?: string | number;
4
- error?: boolean;
5
- helperText: string | undefined | (FieldError | undefined)[];
6
- inputRef?: ((instance: any) => void) | null | undefined;
7
- label?: string;
8
- multiline?: boolean;
9
- name?: string;
10
- placeholder?: string;
11
- props?: unknown;
12
- size?: 'small' | 'medium' | undefined;
13
- onChange?: ((value: any) => void) | undefined;
14
- width?: boolean;
15
- InputProps?: any;
16
- };
17
- declare const ProfileTextField: ({ defaultValue, error, helperText, inputRef, label, multiline, name, placeholder, props, size, width, onChange, InputProps }: SectionContents) => JSX.Element;
18
- export default ProfileTextField;
1
+ import { FieldError } from 'react-hook-form/dist/types/form';
2
+ type SectionContents = {
3
+ defaultValue?: string | number;
4
+ error?: boolean;
5
+ helperText: string | undefined | (FieldError | undefined)[];
6
+ inputRef?: ((instance: any) => void) | null | undefined;
7
+ label?: string;
8
+ multiline?: boolean;
9
+ name?: string;
10
+ placeholder?: string;
11
+ props?: unknown;
12
+ size?: 'small' | 'medium' | undefined;
13
+ onChange?: ((value: any) => void) | undefined;
14
+ width?: boolean;
15
+ InputProps?: any;
16
+ };
17
+ declare const ProfileTextField: ({ defaultValue, error, helperText, inputRef, label, multiline, name, placeholder, props, size, width, onChange, InputProps }: SectionContents) => JSX.Element;
18
+ export default ProfileTextField;
@@ -1,16 +1,16 @@
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
- const react_1 = __importDefault(require("react"));
7
- const TextField_1 = __importDefault(require("@material-ui/core/TextField"));
8
- const ProfileTextField = ({ defaultValue, error, helperText, inputRef, label, multiline = false, name, placeholder, props, size, width = false, onChange, InputProps }) => {
9
- return (onChange ? react_1.default.createElement(TextField_1.default, Object.assign({ InputProps: InputProps, "x-id": 'TextField' }, props, { defaultValue: defaultValue, error: error, fullWidth: true, helperText: helperText, InputLabelProps: {
10
- shrink: true
11
- }, inputRef: inputRef, label: label, margin: 'normal', multiline: multiline, name: name, placeholder: placeholder, size: size, style: Object.assign({ marginTop: '8px' }, (width && { width: '100%' })), variant: 'outlined', onChange: onChange, classes: { root: 'inputCurrency' } })) :
12
- react_1.default.createElement(TextField_1.default, Object.assign({ InputProps: InputProps, "x-id": 'TextField' }, props, { defaultValue: defaultValue, error: error, fullWidth: true, helperText: helperText, InputLabelProps: {
13
- shrink: true
14
- }, inputRef: inputRef, label: label, margin: 'normal', multiline: multiline, name: name, placeholder: placeholder, size: size, style: Object.assign({ marginTop: '8px' }, (width && { width: '100%' })), variant: 'outlined' })));
15
- };
16
- exports.default = ProfileTextField;
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
+ const react_1 = __importDefault(require("react"));
7
+ const TextField_1 = __importDefault(require("@material-ui/core/TextField"));
8
+ const ProfileTextField = ({ defaultValue, error, helperText, inputRef, label, multiline = false, name, placeholder, props, size, width = false, onChange, InputProps }) => {
9
+ return (onChange ? react_1.default.createElement(TextField_1.default, Object.assign({ InputProps: InputProps, "x-id": 'TextField' }, props, { defaultValue: defaultValue, error: error, fullWidth: true, helperText: helperText, InputLabelProps: {
10
+ shrink: true
11
+ }, inputRef: inputRef, label: label, margin: 'normal', multiline: multiline, name: name, placeholder: placeholder, size: size, style: Object.assign({ marginTop: '8px' }, (width && { width: '100%' })), variant: 'outlined', onChange: onChange, classes: { root: 'inputCurrency' } })) :
12
+ react_1.default.createElement(TextField_1.default, Object.assign({ InputProps: InputProps, "x-id": 'TextField' }, props, { defaultValue: defaultValue, error: error, fullWidth: true, helperText: helperText, InputLabelProps: {
13
+ shrink: true
14
+ }, inputRef: inputRef, label: label, margin: 'normal', multiline: multiline, name: name, placeholder: placeholder, size: size, style: Object.assign({ marginTop: '8px' }, (width && { width: '100%' })), variant: 'outlined' })));
15
+ };
16
+ exports.default = ProfileTextField;
@@ -1,7 +1,7 @@
1
- declare const StyledActionButtons: ({ closeOnClick, isDisabled, isLoading, handleSubmit }: {
2
- closeOnClick: () => void;
3
- isDisabled: boolean;
4
- isLoading: boolean;
5
- handleSubmit?: () => void;
6
- }) => JSX.Element;
7
- export default StyledActionButtons;
1
+ declare const StyledActionButtons: ({ closeOnClick, isDisabled, isLoading, handleSubmit }: {
2
+ closeOnClick: () => void;
3
+ isDisabled: boolean;
4
+ isLoading: boolean;
5
+ handleSubmit?: () => void;
6
+ }) => JSX.Element;
7
+ export default StyledActionButtons;