@aglyn/plugins-crm 1.0.0-beta.143

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 (669) hide show
  1. package/LICENSE +201 -0
  2. package/README.md +7 -0
  3. package/package.json +57 -0
  4. package/src/index.d.ts +21 -0
  5. package/src/index.js +29 -0
  6. package/src/index.js.map +1 -0
  7. package/src/lib/components/activity-list.d.ts +98 -0
  8. package/src/lib/components/activity-list.js +321 -0
  9. package/src/lib/components/activity-list.js.map +1 -0
  10. package/src/lib/components/activity-queries.d.ts +117 -0
  11. package/src/lib/components/activity-queries.js +198 -0
  12. package/src/lib/components/activity-queries.js.map +1 -0
  13. package/src/lib/components/add-to-list-button.d.ts +25 -0
  14. package/src/lib/components/add-to-list-button.js +64 -0
  15. package/src/lib/components/add-to-list-button.js.map +1 -0
  16. package/src/lib/components/add-to-list-dialog.d.ts +24 -0
  17. package/src/lib/components/add-to-list-dialog.js +327 -0
  18. package/src/lib/components/add-to-list-dialog.js.map +1 -0
  19. package/src/lib/components/assignment-rule-drawer.d.ts +43 -0
  20. package/src/lib/components/assignment-rule-drawer.js +293 -0
  21. package/src/lib/components/assignment-rule-drawer.js.map +1 -0
  22. package/src/lib/components/companies-bulk-bar.d.ts +29 -0
  23. package/src/lib/components/companies-bulk-bar.js +274 -0
  24. package/src/lib/components/companies-bulk-bar.js.map +1 -0
  25. package/src/lib/components/companies-section.d.ts +54 -0
  26. package/src/lib/components/companies-section.js +522 -0
  27. package/src/lib/components/companies-section.js.map +1 -0
  28. package/src/lib/components/company-contacts-card.d.ts +49 -0
  29. package/src/lib/components/company-contacts-card.js +435 -0
  30. package/src/lib/components/company-contacts-card.js.map +1 -0
  31. package/src/lib/components/company-deals-card.d.ts +20 -0
  32. package/src/lib/components/company-deals-card.js +38 -0
  33. package/src/lib/components/company-deals-card.js.map +1 -0
  34. package/src/lib/components/company-detail-page.d.ts +20 -0
  35. package/src/lib/components/company-detail-page.js +165 -0
  36. package/src/lib/components/company-detail-page.js.map +1 -0
  37. package/src/lib/components/company-edit-drawer.d.ts +65 -0
  38. package/src/lib/components/company-edit-drawer.js +433 -0
  39. package/src/lib/components/company-edit-drawer.js.map +1 -0
  40. package/src/lib/components/company-import-drawer.d.ts +42 -0
  41. package/src/lib/components/company-import-drawer.js +99 -0
  42. package/src/lib/components/company-import-drawer.js.map +1 -0
  43. package/src/lib/components/company-picker.d.ts +127 -0
  44. package/src/lib/components/company-picker.js +323 -0
  45. package/src/lib/components/company-picker.js.map +1 -0
  46. package/src/lib/components/company-properties-card.d.ts +47 -0
  47. package/src/lib/components/company-properties-card.js +289 -0
  48. package/src/lib/components/company-properties-card.js.map +1 -0
  49. package/src/lib/components/contact-address-fields.d.ts +29 -0
  50. package/src/lib/components/contact-address-fields.js +149 -0
  51. package/src/lib/components/contact-address-fields.js.map +1 -0
  52. package/src/lib/components/contact-associations-card.d.ts +72 -0
  53. package/src/lib/components/contact-associations-card.js +296 -0
  54. package/src/lib/components/contact-associations-card.js.map +1 -0
  55. package/src/lib/components/contact-custom-columns.d.ts +38 -0
  56. package/src/lib/components/contact-custom-columns.js +102 -0
  57. package/src/lib/components/contact-custom-columns.js.map +1 -0
  58. package/src/lib/components/contact-custom-fields-card.d.ts +39 -0
  59. package/src/lib/components/contact-custom-fields-card.js +204 -0
  60. package/src/lib/components/contact-custom-fields-card.js.map +1 -0
  61. package/src/lib/components/contact-deals-card.d.ts +20 -0
  62. package/src/lib/components/contact-deals-card.js +38 -0
  63. package/src/lib/components/contact-deals-card.js.map +1 -0
  64. package/src/lib/components/contact-detail-page.d.ts +46 -0
  65. package/src/lib/components/contact-detail-page.js +535 -0
  66. package/src/lib/components/contact-detail-page.js.map +1 -0
  67. package/src/lib/components/contact-duplicates-card.d.ts +42 -0
  68. package/src/lib/components/contact-duplicates-card.js +167 -0
  69. package/src/lib/components/contact-duplicates-card.js.map +1 -0
  70. package/src/lib/components/contact-field-drawer.d.ts +64 -0
  71. package/src/lib/components/contact-field-drawer.js +251 -0
  72. package/src/lib/components/contact-field-drawer.js.map +1 -0
  73. package/src/lib/components/contact-import-drawer.d.ts +46 -0
  74. package/src/lib/components/contact-import-drawer.js +149 -0
  75. package/src/lib/components/contact-import-drawer.js.map +1 -0
  76. package/src/lib/components/contact-known-by-card.d.ts +39 -0
  77. package/src/lib/components/contact-known-by-card.js +142 -0
  78. package/src/lib/components/contact-known-by-card.js.map +1 -0
  79. package/src/lib/components/contact-list-columns.d.ts +53 -0
  80. package/src/lib/components/contact-list-columns.js +288 -0
  81. package/src/lib/components/contact-list-columns.js.map +1 -0
  82. package/src/lib/components/contact-merge-dialog.d.ts +79 -0
  83. package/src/lib/components/contact-merge-dialog.js +405 -0
  84. package/src/lib/components/contact-merge-dialog.js.map +1 -0
  85. package/src/lib/components/contact-properties-card.d.ts +89 -0
  86. package/src/lib/components/contact-properties-card.js +492 -0
  87. package/src/lib/components/contact-properties-card.js.map +1 -0
  88. package/src/lib/components/contact-timeline-card.d.ts +68 -0
  89. package/src/lib/components/contact-timeline-card.js +435 -0
  90. package/src/lib/components/contact-timeline-card.js.map +1 -0
  91. package/src/lib/components/contacts-bulk-bar.d.ts +91 -0
  92. package/src/lib/components/contacts-bulk-bar.js +493 -0
  93. package/src/lib/components/contacts-bulk-bar.js.map +1 -0
  94. package/src/lib/components/contacts-section.d.ts +26 -0
  95. package/src/lib/components/contacts-section.js +1025 -0
  96. package/src/lib/components/contacts-section.js.map +1 -0
  97. package/src/lib/components/copy-capture-address-button.d.ts +33 -0
  98. package/src/lib/components/copy-capture-address-button.js +60 -0
  99. package/src/lib/components/copy-capture-address-button.js.map +1 -0
  100. package/src/lib/components/crm-attribution-zone.d.ts +38 -0
  101. package/src/lib/components/crm-attribution-zone.js +36 -0
  102. package/src/lib/components/crm-attribution-zone.js.map +1 -0
  103. package/src/lib/components/crm-booking-zone.d.ts +61 -0
  104. package/src/lib/components/crm-booking-zone.js +50 -0
  105. package/src/lib/components/crm-booking-zone.js.map +1 -0
  106. package/src/lib/components/crm-bulk-bar-frame.d.ts +47 -0
  107. package/src/lib/components/crm-bulk-bar-frame.js +137 -0
  108. package/src/lib/components/crm-bulk-bar-frame.js.map +1 -0
  109. package/src/lib/components/crm-call-actions.d.ts +65 -0
  110. package/src/lib/components/crm-call-actions.js +110 -0
  111. package/src/lib/components/crm-call-actions.js.map +1 -0
  112. package/src/lib/components/crm-column-menu.d.ts +21 -0
  113. package/src/lib/components/crm-column-menu.js +103 -0
  114. package/src/lib/components/crm-column-menu.js.map +1 -0
  115. package/src/lib/components/crm-console-page.d.ts +19 -0
  116. package/src/lib/components/crm-console-page.js +151 -0
  117. package/src/lib/components/crm-console-page.js.map +1 -0
  118. package/src/lib/components/crm-console-sections.d.ts +52 -0
  119. package/src/lib/components/crm-console-sections.js +83 -0
  120. package/src/lib/components/crm-console-sections.js.map +1 -0
  121. package/src/lib/components/crm-custom-field-control.d.ts +26 -0
  122. package/src/lib/components/crm-custom-field-control.js +131 -0
  123. package/src/lib/components/crm-custom-field-control.js.map +1 -0
  124. package/src/lib/components/crm-email-template-tools.d.ts +69 -0
  125. package/src/lib/components/crm-email-template-tools.js +240 -0
  126. package/src/lib/components/crm-email-template-tools.js.map +1 -0
  127. package/src/lib/components/crm-export-all-button.d.ts +39 -0
  128. package/src/lib/components/crm-export-all-button.js +98 -0
  129. package/src/lib/components/crm-export-all-button.js.map +1 -0
  130. package/src/lib/components/crm-filter-bar.d.ts +53 -0
  131. package/src/lib/components/crm-filter-bar.js +294 -0
  132. package/src/lib/components/crm-filter-bar.js.map +1 -0
  133. package/src/lib/components/crm-glance-card.d.ts +54 -0
  134. package/src/lib/components/crm-glance-card.js +219 -0
  135. package/src/lib/components/crm-glance-card.js.map +1 -0
  136. package/src/lib/components/crm-next-activity-column.d.ts +35 -0
  137. package/src/lib/components/crm-next-activity-column.js +100 -0
  138. package/src/lib/components/crm-next-activity-column.js.map +1 -0
  139. package/src/lib/components/crm-record-header.d.ts +97 -0
  140. package/src/lib/components/crm-record-header.js +160 -0
  141. package/src/lib/components/crm-record-header.js.map +1 -0
  142. package/src/lib/components/crm-record-insights-zone.d.ts +50 -0
  143. package/src/lib/components/crm-record-insights-zone.js +169 -0
  144. package/src/lib/components/crm-record-insights-zone.js.map +1 -0
  145. package/src/lib/components/crm-record-picker.d.ts +42 -0
  146. package/src/lib/components/crm-record-picker.js +104 -0
  147. package/src/lib/components/crm-record-picker.js.map +1 -0
  148. package/src/lib/components/crm-send-email-button.d.ts +39 -0
  149. package/src/lib/components/crm-send-email-button.js +81 -0
  150. package/src/lib/components/crm-send-email-button.js.map +1 -0
  151. package/src/lib/components/crm-send-email-dialog.d.ts +61 -0
  152. package/src/lib/components/crm-send-email-dialog.js +851 -0
  153. package/src/lib/components/crm-send-email-dialog.js.map +1 -0
  154. package/src/lib/components/crm-site-picker.d.ts +61 -0
  155. package/src/lib/components/crm-site-picker.js +99 -0
  156. package/src/lib/components/crm-site-picker.js.map +1 -0
  157. package/src/lib/components/crm-suite-lock.d.ts +29 -0
  158. package/src/lib/components/crm-suite-lock.js +114 -0
  159. package/src/lib/components/crm-suite-lock.js.map +1 -0
  160. package/src/lib/components/crm-tasks-due-card.d.ts +42 -0
  161. package/src/lib/components/crm-tasks-due-card.js +225 -0
  162. package/src/lib/components/crm-tasks-due-card.js.map +1 -0
  163. package/src/lib/components/crm-views-control.d.ts +65 -0
  164. package/src/lib/components/crm-views-control.js +518 -0
  165. package/src/lib/components/crm-views-control.js.map +1 -0
  166. package/src/lib/components/csv-import-drawer.d.ts +132 -0
  167. package/src/lib/components/csv-import-drawer.js +746 -0
  168. package/src/lib/components/csv-import-drawer.js.map +1 -0
  169. package/src/lib/components/deal-board.d.ts +70 -0
  170. package/src/lib/components/deal-board.js +478 -0
  171. package/src/lib/components/deal-board.js.map +1 -0
  172. package/src/lib/components/deal-detail-page.d.ts +18 -0
  173. package/src/lib/components/deal-detail-page.js +323 -0
  174. package/src/lib/components/deal-detail-page.js.map +1 -0
  175. package/src/lib/components/deal-edit-drawer.d.ts +59 -0
  176. package/src/lib/components/deal-edit-drawer.js +640 -0
  177. package/src/lib/components/deal-edit-drawer.js.map +1 -0
  178. package/src/lib/components/deal-import-drawer.d.ts +24 -0
  179. package/src/lib/components/deal-import-drawer.js +83 -0
  180. package/src/lib/components/deal-import-drawer.js.map +1 -0
  181. package/src/lib/components/deal-products-card.d.ts +48 -0
  182. package/src/lib/components/deal-products-card.js +614 -0
  183. package/src/lib/components/deal-products-card.js.map +1 -0
  184. package/src/lib/components/deal-properties-card.d.ts +29 -0
  185. package/src/lib/components/deal-properties-card.js +144 -0
  186. package/src/lib/components/deal-properties-card.js.map +1 -0
  187. package/src/lib/components/deal-stage-card.d.ts +24 -0
  188. package/src/lib/components/deal-stage-card.js +199 -0
  189. package/src/lib/components/deal-stage-card.js.map +1 -0
  190. package/src/lib/components/deals-bulk-bar.d.ts +31 -0
  191. package/src/lib/components/deals-bulk-bar.js +340 -0
  192. package/src/lib/components/deals-bulk-bar.js.map +1 -0
  193. package/src/lib/components/deals-section.d.ts +49 -0
  194. package/src/lib/components/deals-section.js +767 -0
  195. package/src/lib/components/deals-section.js.map +1 -0
  196. package/src/lib/components/email-capture-card.d.ts +42 -0
  197. package/src/lib/components/email-capture-card.js +134 -0
  198. package/src/lib/components/email-capture-card.js.map +1 -0
  199. package/src/lib/components/email-template-drawer.d.ts +33 -0
  200. package/src/lib/components/email-template-drawer.js +209 -0
  201. package/src/lib/components/email-template-drawer.js.map +1 -0
  202. package/src/lib/components/email-templates-card.d.ts +33 -0
  203. package/src/lib/components/email-templates-card.js +370 -0
  204. package/src/lib/components/email-templates-card.js.map +1 -0
  205. package/src/lib/components/erase-person-action.d.ts +92 -0
  206. package/src/lib/components/erase-person-action.js +261 -0
  207. package/src/lib/components/erase-person-action.js.map +1 -0
  208. package/src/lib/components/fields-section.d.ts +37 -0
  209. package/src/lib/components/fields-section.js +641 -0
  210. package/src/lib/components/fields-section.js.map +1 -0
  211. package/src/lib/components/form-contact-fields-card.d.ts +46 -0
  212. package/src/lib/components/form-contact-fields-card.js +253 -0
  213. package/src/lib/components/form-contact-fields-card.js.map +1 -0
  214. package/src/lib/components/insert-link-at-caret.d.ts +28 -0
  215. package/src/lib/components/insert-link-at-caret.js +37 -0
  216. package/src/lib/components/insert-link-at-caret.js.map +1 -0
  217. package/src/lib/components/lead-convert-dialog.d.ts +32 -0
  218. package/src/lib/components/lead-convert-dialog.js +493 -0
  219. package/src/lib/components/lead-convert-dialog.js.map +1 -0
  220. package/src/lib/components/lead-detail-page.d.ts +16 -0
  221. package/src/lib/components/lead-detail-page.js +163 -0
  222. package/src/lib/components/lead-detail-page.js.map +1 -0
  223. package/src/lib/components/lead-history-card.d.ts +32 -0
  224. package/src/lib/components/lead-history-card.js +165 -0
  225. package/src/lib/components/lead-history-card.js.map +1 -0
  226. package/src/lib/components/lead-import-drawer.d.ts +24 -0
  227. package/src/lib/components/lead-import-drawer.js +95 -0
  228. package/src/lib/components/lead-import-drawer.js.map +1 -0
  229. package/src/lib/components/lead-owner-select.d.ts +35 -0
  230. package/src/lib/components/lead-owner-select.js +91 -0
  231. package/src/lib/components/lead-owner-select.js.map +1 -0
  232. package/src/lib/components/lead-properties-card.d.ts +61 -0
  233. package/src/lib/components/lead-properties-card.js +395 -0
  234. package/src/lib/components/lead-properties-card.js.map +1 -0
  235. package/src/lib/components/lead-status-chip.d.ts +12 -0
  236. package/src/lib/components/lead-status-chip.js +43 -0
  237. package/src/lib/components/lead-status-chip.js.map +1 -0
  238. package/src/lib/components/lead-surfaces-note.d.ts +126 -0
  239. package/src/lib/components/lead-surfaces-note.js +262 -0
  240. package/src/lib/components/lead-surfaces-note.js.map +1 -0
  241. package/src/lib/components/lead-unqualify-dialog.d.ts +24 -0
  242. package/src/lib/components/lead-unqualify-dialog.js +125 -0
  243. package/src/lib/components/lead-unqualify-dialog.js.map +1 -0
  244. package/src/lib/components/leads-bulk-bar.d.ts +58 -0
  245. package/src/lib/components/leads-bulk-bar.js +307 -0
  246. package/src/lib/components/leads-bulk-bar.js.map +1 -0
  247. package/src/lib/components/leads-section.d.ts +23 -0
  248. package/src/lib/components/leads-section.js +664 -0
  249. package/src/lib/components/leads-section.js.map +1 -0
  250. package/src/lib/components/linked-deals-card.d.ts +32 -0
  251. package/src/lib/components/linked-deals-card.js +163 -0
  252. package/src/lib/components/linked-deals-card.js.map +1 -0
  253. package/src/lib/components/log-activity-dialog.d.ts +60 -0
  254. package/src/lib/components/log-activity-dialog.js +368 -0
  255. package/src/lib/components/log-activity-dialog.js.map +1 -0
  256. package/src/lib/components/lost-reason-dialog.d.ts +26 -0
  257. package/src/lib/components/lost-reason-dialog.js +95 -0
  258. package/src/lib/components/lost-reason-dialog.js.map +1 -0
  259. package/src/lib/components/new-contact-drawer.d.ts +78 -0
  260. package/src/lib/components/new-contact-drawer.js +343 -0
  261. package/src/lib/components/new-contact-drawer.js.map +1 -0
  262. package/src/lib/components/org-lead-surfaces-note.d.ts +57 -0
  263. package/src/lib/components/org-lead-surfaces-note.js +172 -0
  264. package/src/lib/components/org-lead-surfaces-note.js.map +1 -0
  265. package/src/lib/components/owner-avatar.d.ts +18 -0
  266. package/src/lib/components/owner-avatar.js +61 -0
  267. package/src/lib/components/owner-avatar.js.map +1 -0
  268. package/src/lib/components/pipeline-stages-dialog.d.ts +43 -0
  269. package/src/lib/components/pipeline-stages-dialog.js +339 -0
  270. package/src/lib/components/pipeline-stages-dialog.js.map +1 -0
  271. package/src/lib/components/pipelines-dialog.d.ts +55 -0
  272. package/src/lib/components/pipelines-dialog.js +517 -0
  273. package/src/lib/components/pipelines-dialog.js.map +1 -0
  274. package/src/lib/components/recent-activity-feed.d.ts +39 -0
  275. package/src/lib/components/recent-activity-feed.js +103 -0
  276. package/src/lib/components/recent-activity-feed.js.map +1 -0
  277. package/src/lib/components/recipes-card.d.ts +39 -0
  278. package/src/lib/components/recipes-card.js +485 -0
  279. package/src/lib/components/recipes-card.js.map +1 -0
  280. package/src/lib/components/record-activity-card.d.ts +26 -0
  281. package/src/lib/components/record-activity-card.js +121 -0
  282. package/src/lib/components/record-activity-card.js.map +1 -0
  283. package/src/lib/components/record-files-card.d.ts +67 -0
  284. package/src/lib/components/record-files-card.js +290 -0
  285. package/src/lib/components/record-files-card.js.map +1 -0
  286. package/src/lib/components/record-tasks-card.d.ts +32 -0
  287. package/src/lib/components/record-tasks-card.js +306 -0
  288. package/src/lib/components/record-tasks-card.js.map +1 -0
  289. package/src/lib/components/reports/activity-card.d.ts +57 -0
  290. package/src/lib/components/reports/activity-card.js +281 -0
  291. package/src/lib/components/reports/activity-card.js.map +1 -0
  292. package/src/lib/components/reports/closed-deals-card.d.ts +20 -0
  293. package/src/lib/components/reports/closed-deals-card.js +194 -0
  294. package/src/lib/components/reports/closed-deals-card.js.map +1 -0
  295. package/src/lib/components/reports/contacts-mix-card.d.ts +27 -0
  296. package/src/lib/components/reports/contacts-mix-card.js +161 -0
  297. package/src/lib/components/reports/contacts-mix-card.js.map +1 -0
  298. package/src/lib/components/reports/contacts-trend-card.d.ts +31 -0
  299. package/src/lib/components/reports/contacts-trend-card.js +144 -0
  300. package/src/lib/components/reports/contacts-trend-card.js.map +1 -0
  301. package/src/lib/components/reports/forecast-card.d.ts +22 -0
  302. package/src/lib/components/reports/forecast-card.js +251 -0
  303. package/src/lib/components/reports/forecast-card.js.map +1 -0
  304. package/src/lib/components/reports/lead-counts.d.ts +32 -0
  305. package/src/lib/components/reports/lead-counts.js +44 -0
  306. package/src/lib/components/reports/lead-counts.js.map +1 -0
  307. package/src/lib/components/reports/lead-funnel-card.d.ts +38 -0
  308. package/src/lib/components/reports/lead-funnel-card.js +375 -0
  309. package/src/lib/components/reports/lead-funnel-card.js.map +1 -0
  310. package/src/lib/components/reports/pipeline-card.d.ts +19 -0
  311. package/src/lib/components/reports/pipeline-card.js +338 -0
  312. package/src/lib/components/reports/pipeline-card.js.map +1 -0
  313. package/src/lib/components/reports/report-bar-chart.d.ts +39 -0
  314. package/src/lib/components/reports/report-bar-chart.js +133 -0
  315. package/src/lib/components/reports/report-bar-chart.js.map +1 -0
  316. package/src/lib/components/reports/report-breakdown.d.ts +32 -0
  317. package/src/lib/components/reports/report-breakdown.js +105 -0
  318. package/src/lib/components/reports/report-breakdown.js.map +1 -0
  319. package/src/lib/components/reports/report-export.d.ts +37 -0
  320. package/src/lib/components/reports/report-export.js +66 -0
  321. package/src/lib/components/reports/report-export.js.map +1 -0
  322. package/src/lib/components/reports/report-format.d.ts +36 -0
  323. package/src/lib/components/reports/report-format.js +43 -0
  324. package/src/lib/components/reports/report-format.js.map +1 -0
  325. package/src/lib/components/reports/report-scope.d.ts +81 -0
  326. package/src/lib/components/reports/report-scope.js +58 -0
  327. package/src/lib/components/reports/report-scope.js.map +1 -0
  328. package/src/lib/components/reports/report-stat-tile.d.ts +47 -0
  329. package/src/lib/components/reports/report-stat-tile.js +96 -0
  330. package/src/lib/components/reports/report-stat-tile.js.map +1 -0
  331. package/src/lib/components/reports/source-conversion-card.d.ts +28 -0
  332. package/src/lib/components/reports/source-conversion-card.js +205 -0
  333. package/src/lib/components/reports/source-conversion-card.js.map +1 -0
  334. package/src/lib/components/reports/tasks-card.d.ts +26 -0
  335. package/src/lib/components/reports/tasks-card.js +279 -0
  336. package/src/lib/components/reports/tasks-card.js.map +1 -0
  337. package/src/lib/components/reports/use-aggregate-read.d.ts +99 -0
  338. package/src/lib/components/reports/use-aggregate-read.js +195 -0
  339. package/src/lib/components/reports/use-aggregate-read.js.map +1 -0
  340. package/src/lib/components/reports/won-lost-by-owner-card.d.ts +30 -0
  341. package/src/lib/components/reports/won-lost-by-owner-card.js +168 -0
  342. package/src/lib/components/reports/won-lost-by-owner-card.js.map +1 -0
  343. package/src/lib/components/reports-section.d.ts +42 -0
  344. package/src/lib/components/reports-section.js +308 -0
  345. package/src/lib/components/reports-section.js.map +1 -0
  346. package/src/lib/components/sending-addresses-card.d.ts +49 -0
  347. package/src/lib/components/sending-addresses-card.js +262 -0
  348. package/src/lib/components/sending-addresses-card.js.map +1 -0
  349. package/src/lib/components/settings-section.d.ts +151 -0
  350. package/src/lib/components/settings-section.js +783 -0
  351. package/src/lib/components/settings-section.js.map +1 -0
  352. package/src/lib/components/task-cells.d.ts +51 -0
  353. package/src/lib/components/task-cells.js +139 -0
  354. package/src/lib/components/task-cells.js.map +1 -0
  355. package/src/lib/components/task-edit-drawer.d.ts +53 -0
  356. package/src/lib/components/task-edit-drawer.js +483 -0
  357. package/src/lib/components/task-edit-drawer.js.map +1 -0
  358. package/src/lib/components/task-import-drawer.d.ts +24 -0
  359. package/src/lib/components/task-import-drawer.js +82 -0
  360. package/src/lib/components/task-import-drawer.js.map +1 -0
  361. package/src/lib/components/task-snooze-menu.d.ts +65 -0
  362. package/src/lib/components/task-snooze-menu.js +207 -0
  363. package/src/lib/components/task-snooze-menu.js.map +1 -0
  364. package/src/lib/components/tasks-bulk-bar.d.ts +25 -0
  365. package/src/lib/components/tasks-bulk-bar.js +348 -0
  366. package/src/lib/components/tasks-bulk-bar.js.map +1 -0
  367. package/src/lib/components/tasks-calendar.d.ts +38 -0
  368. package/src/lib/components/tasks-calendar.js +228 -0
  369. package/src/lib/components/tasks-calendar.js.map +1 -0
  370. package/src/lib/components/tasks-section.d.ts +27 -0
  371. package/src/lib/components/tasks-section.js +579 -0
  372. package/src/lib/components/tasks-section.js.map +1 -0
  373. package/src/lib/components/use-contact-campaign-emails.d.ts +32 -0
  374. package/src/lib/components/use-contact-campaign-emails.js +83 -0
  375. package/src/lib/components/use-contact-campaign-emails.js.map +1 -0
  376. package/src/lib/components/use-crm-api.d.ts +44 -0
  377. package/src/lib/components/use-crm-api.js +84 -0
  378. package/src/lib/components/use-crm-api.js.map +1 -0
  379. package/src/lib/components/use-crm-inbound-address.d.ts +60 -0
  380. package/src/lib/components/use-crm-inbound-address.js +124 -0
  381. package/src/lib/components/use-crm-inbound-address.js.map +1 -0
  382. package/src/lib/components/use-emails-hub-path.d.ts +24 -0
  383. package/src/lib/components/use-emails-hub-path.js +59 -0
  384. package/src/lib/components/use-emails-hub-path.js.map +1 -0
  385. package/src/lib/components/use-member-email-aliases.d.ts +54 -0
  386. package/src/lib/components/use-member-email-aliases.js +186 -0
  387. package/src/lib/components/use-member-email-aliases.js.map +1 -0
  388. package/src/lib/components/use-org-members.d.ts +40 -0
  389. package/src/lib/components/use-org-members.js +100 -0
  390. package/src/lib/components/use-org-members.js.map +1 -0
  391. package/src/lib/constants/api-routes.d.ts +109 -0
  392. package/src/lib/constants/api-routes.js +74 -0
  393. package/src/lib/constants/api-routes.js.map +1 -0
  394. package/src/lib/constants/bundle-common.d.ts +14 -0
  395. package/src/lib/constants/bundle-common.js +14 -0
  396. package/src/lib/constants/bundle-common.js.map +1 -0
  397. package/src/lib/constants/company-filters.d.ts +18 -0
  398. package/src/lib/constants/company-filters.js +51 -0
  399. package/src/lib/constants/company-filters.js.map +1 -0
  400. package/src/lib/constants/contact-filters.d.ts +38 -0
  401. package/src/lib/constants/contact-filters.js +294 -0
  402. package/src/lib/constants/contact-filters.js.map +1 -0
  403. package/src/lib/hooks/use-contact-field-definitions.d.ts +48 -0
  404. package/src/lib/hooks/use-contact-field-definitions.js +72 -0
  405. package/src/lib/hooks/use-contact-field-definitions.js.map +1 -0
  406. package/src/lib/hooks/use-contact-update.d.ts +25 -0
  407. package/src/lib/hooks/use-contact-update.js +80 -0
  408. package/src/lib/hooks/use-contact-update.js.map +1 -0
  409. package/src/lib/hooks/use-crm-activity-logger.d.ts +73 -0
  410. package/src/lib/hooks/use-crm-activity-logger.js +101 -0
  411. package/src/lib/hooks/use-crm-activity-logger.js.map +1 -0
  412. package/src/lib/hooks/use-crm-bulk-apply.d.ts +52 -0
  413. package/src/lib/hooks/use-crm-bulk-apply.js +112 -0
  414. package/src/lib/hooks/use-crm-bulk-apply.js.map +1 -0
  415. package/src/lib/hooks/use-crm-default-view.d.ts +24 -0
  416. package/src/lib/hooks/use-crm-default-view.js +64 -0
  417. package/src/lib/hooks/use-crm-default-view.js.map +1 -0
  418. package/src/lib/hooks/use-crm-email-templates.d.ts +59 -0
  419. package/src/lib/hooks/use-crm-email-templates.js +103 -0
  420. package/src/lib/hooks/use-crm-email-templates.js.map +1 -0
  421. package/src/lib/hooks/use-crm-hub-path.d.ts +29 -0
  422. package/src/lib/hooks/use-crm-hub-path.js +41 -0
  423. package/src/lib/hooks/use-crm-hub-path.js.map +1 -0
  424. package/src/lib/hooks/use-crm-org-mount.d.ts +97 -0
  425. package/src/lib/hooks/use-crm-org-mount.js +215 -0
  426. package/src/lib/hooks/use-crm-org-mount.js.map +1 -0
  427. package/src/lib/hooks/use-crm-record-names.d.ts +52 -0
  428. package/src/lib/hooks/use-crm-record-names.js +126 -0
  429. package/src/lib/hooks/use-crm-record-names.js.map +1 -0
  430. package/src/lib/hooks/use-crm-records-quota.d.ts +68 -0
  431. package/src/lib/hooks/use-crm-records-quota.js +118 -0
  432. package/src/lib/hooks/use-crm-records-quota.js.map +1 -0
  433. package/src/lib/hooks/use-crm-saved-view.d.ts +96 -0
  434. package/src/lib/hooks/use-crm-saved-view.js +329 -0
  435. package/src/lib/hooks/use-crm-saved-view.js.map +1 -0
  436. package/src/lib/hooks/use-crm-scope.d.ts +117 -0
  437. package/src/lib/hooks/use-crm-scope.js +147 -0
  438. package/src/lib/hooks/use-crm-scope.js.map +1 -0
  439. package/src/lib/hooks/use-crm-tasks.d.ts +85 -0
  440. package/src/lib/hooks/use-crm-tasks.js +153 -0
  441. package/src/lib/hooks/use-crm-tasks.js.map +1 -0
  442. package/src/lib/hooks/use-crm-view-grid.d.ts +55 -0
  443. package/src/lib/hooks/use-crm-view-grid.js +170 -0
  444. package/src/lib/hooks/use-crm-view-grid.js.map +1 -0
  445. package/src/lib/hooks/use-crm-views.d.ts +42 -0
  446. package/src/lib/hooks/use-crm-views.js +84 -0
  447. package/src/lib/hooks/use-crm-views.js.map +1 -0
  448. package/src/lib/hooks/use-deal-stage-api.d.ts +69 -0
  449. package/src/lib/hooks/use-deal-stage-api.js +78 -0
  450. package/src/lib/hooks/use-deal-stage-api.js.map +1 -0
  451. package/src/lib/hooks/use-deals.d.ts +47 -0
  452. package/src/lib/hooks/use-deals.js +105 -0
  453. package/src/lib/hooks/use-deals.js.map +1 -0
  454. package/src/lib/hooks/use-org-leads.d.ts +53 -0
  455. package/src/lib/hooks/use-org-leads.js +114 -0
  456. package/src/lib/hooks/use-org-leads.js.map +1 -0
  457. package/src/lib/hooks/use-org-member-directory.d.ts +36 -0
  458. package/src/lib/hooks/use-org-member-directory.js +116 -0
  459. package/src/lib/hooks/use-org-member-directory.js.map +1 -0
  460. package/src/lib/hooks/use-org-member-options.d.ts +38 -0
  461. package/src/lib/hooks/use-org-member-options.js +131 -0
  462. package/src/lib/hooks/use-org-member-options.js.map +1 -0
  463. package/src/lib/hooks/use-pipeline.d.ts +71 -0
  464. package/src/lib/hooks/use-pipeline.js +159 -0
  465. package/src/lib/hooks/use-pipeline.js.map +1 -0
  466. package/src/lib/model/companies-bulk-writes.d.ts +40 -0
  467. package/src/lib/model/companies-bulk-writes.js +103 -0
  468. package/src/lib/model/companies-bulk-writes.js.map +1 -0
  469. package/src/lib/model/companies-csv.d.ts +36 -0
  470. package/src/lib/model/companies-csv.js +38 -0
  471. package/src/lib/model/companies-csv.js.map +1 -0
  472. package/src/lib/model/companies.d.ts +99 -0
  473. package/src/lib/model/companies.js +168 -0
  474. package/src/lib/model/companies.js.map +1 -0
  475. package/src/lib/model/company-delete-route.d.ts +43 -0
  476. package/src/lib/model/company-delete-route.js +31 -0
  477. package/src/lib/model/company-delete-route.js.map +1 -0
  478. package/src/lib/model/company-delete.d.ts +42 -0
  479. package/src/lib/model/company-delete.js +52 -0
  480. package/src/lib/model/company-delete.js.map +1 -0
  481. package/src/lib/model/contact-duplicates.d.ts +58 -0
  482. package/src/lib/model/contact-duplicates.js +67 -0
  483. package/src/lib/model/contact-duplicates.js.map +1 -0
  484. package/src/lib/model/contact-record.d.ts +113 -0
  485. package/src/lib/model/contact-record.js +70 -0
  486. package/src/lib/model/contact-record.js.map +1 -0
  487. package/src/lib/model/contact-update.d.ts +93 -0
  488. package/src/lib/model/contact-update.js +50 -0
  489. package/src/lib/model/contact-update.js.map +1 -0
  490. package/src/lib/model/contacts-bulk-writes.d.ts +173 -0
  491. package/src/lib/model/contacts-bulk-writes.js +196 -0
  492. package/src/lib/model/contacts-bulk-writes.js.map +1 -0
  493. package/src/lib/model/contacts-csv.d.ts +54 -0
  494. package/src/lib/model/contacts-csv.js +67 -0
  495. package/src/lib/model/contacts-csv.js.map +1 -0
  496. package/src/lib/model/contacts-list-seed.d.ts +51 -0
  497. package/src/lib/model/contacts-list-seed.js +63 -0
  498. package/src/lib/model/contacts-list-seed.js.map +1 -0
  499. package/src/lib/model/crm-activity-report.d.ts +27 -0
  500. package/src/lib/model/crm-activity-report.js +56 -0
  501. package/src/lib/model/crm-activity-report.js.map +1 -0
  502. package/src/lib/model/crm-api.d.ts +49 -0
  503. package/src/lib/model/crm-api.js +47 -0
  504. package/src/lib/model/crm-api.js.map +1 -0
  505. package/src/lib/model/crm-bulk-writes.d.ts +147 -0
  506. package/src/lib/model/crm-bulk-writes.js +207 -0
  507. package/src/lib/model/crm-bulk-writes.js.map +1 -0
  508. package/src/lib/model/crm-company-import.d.ts +154 -0
  509. package/src/lib/model/crm-company-import.js +331 -0
  510. package/src/lib/model/crm-company-import.js.map +1 -0
  511. package/src/lib/model/crm-custom-draft.d.ts +62 -0
  512. package/src/lib/model/crm-custom-draft.js +67 -0
  513. package/src/lib/model/crm-custom-draft.js.map +1 -0
  514. package/src/lib/model/crm-deal-import.d.ts +112 -0
  515. package/src/lib/model/crm-deal-import.js +263 -0
  516. package/src/lib/model/crm-deal-import.js.map +1 -0
  517. package/src/lib/model/crm-import.d.ts +244 -0
  518. package/src/lib/model/crm-import.js +466 -0
  519. package/src/lib/model/crm-import.js.map +1 -0
  520. package/src/lib/model/crm-lead-import.d.ts +105 -0
  521. package/src/lib/model/crm-lead-import.js +255 -0
  522. package/src/lib/model/crm-lead-import.js.map +1 -0
  523. package/src/lib/model/crm-record-routes.d.ts +21 -0
  524. package/src/lib/model/crm-record-routes.js +70 -0
  525. package/src/lib/model/crm-record-routes.js.map +1 -0
  526. package/src/lib/model/crm-routes.d.ts +101 -0
  527. package/src/lib/model/crm-routes.js +92 -0
  528. package/src/lib/model/crm-routes.js.map +1 -0
  529. package/src/lib/model/crm-task-import.d.ts +94 -0
  530. package/src/lib/model/crm-task-import.js +275 -0
  531. package/src/lib/model/crm-task-import.js.map +1 -0
  532. package/src/lib/model/crm-view-param.d.ts +43 -0
  533. package/src/lib/model/crm-view-param.js +49 -0
  534. package/src/lib/model/crm-view-param.js.map +1 -0
  535. package/src/lib/model/deal-board-model.d.ts +241 -0
  536. package/src/lib/model/deal-board-model.js +439 -0
  537. package/src/lib/model/deal-board-model.js.map +1 -0
  538. package/src/lib/model/deal-form-model.d.ts +114 -0
  539. package/src/lib/model/deal-form-model.js +218 -0
  540. package/src/lib/model/deal-form-model.js.map +1 -0
  541. package/src/lib/model/deals-csv.d.ts +32 -0
  542. package/src/lib/model/deals-csv.js +37 -0
  543. package/src/lib/model/deals-csv.js.map +1 -0
  544. package/src/lib/model/import-column-shapes.d.ts +36 -0
  545. package/src/lib/model/import-column-shapes.js +76 -0
  546. package/src/lib/model/import-column-shapes.js.map +1 -0
  547. package/src/lib/model/lead-company-suggestion.d.ts +61 -0
  548. package/src/lib/model/lead-company-suggestion.js +65 -0
  549. package/src/lib/model/lead-company-suggestion.js.map +1 -0
  550. package/src/lib/model/lead-filters.d.ts +29 -0
  551. package/src/lib/model/lead-filters.js +39 -0
  552. package/src/lib/model/lead-filters.js.map +1 -0
  553. package/src/lib/model/lead-surfaces.d.ts +58 -0
  554. package/src/lib/model/lead-surfaces.js +67 -0
  555. package/src/lib/model/lead-surfaces.js.map +1 -0
  556. package/src/lib/model/leads-csv.d.ts +40 -0
  557. package/src/lib/model/leads-csv.js +40 -0
  558. package/src/lib/model/leads-csv.js.map +1 -0
  559. package/src/lib/model/next-activity-api.d.ts +31 -0
  560. package/src/lib/model/next-activity-api.js +57 -0
  561. package/src/lib/model/next-activity-api.js.map +1 -0
  562. package/src/lib/model/next-activity.d.ts +64 -0
  563. package/src/lib/model/next-activity.js +47 -0
  564. package/src/lib/model/next-activity.js.map +1 -0
  565. package/src/lib/model/person-key-web.d.ts +43 -0
  566. package/src/lib/model/person-key-web.js +52 -0
  567. package/src/lib/model/person-key-web.js.map +1 -0
  568. package/src/lib/model/record-facts.d.ts +282 -0
  569. package/src/lib/model/record-facts.js +434 -0
  570. package/src/lib/model/record-facts.js.map +1 -0
  571. package/src/lib/model/task-api.d.ts +28 -0
  572. package/src/lib/model/task-api.js +57 -0
  573. package/src/lib/model/task-api.js.map +1 -0
  574. package/src/lib/model/task-calendar.d.ts +108 -0
  575. package/src/lib/model/task-calendar.js +139 -0
  576. package/src/lib/model/task-calendar.js.map +1 -0
  577. package/src/lib/model/task-routes.d.ts +177 -0
  578. package/src/lib/model/task-routes.js +197 -0
  579. package/src/lib/model/task-routes.js.map +1 -0
  580. package/src/lib/model/task-scope.d.ts +45 -0
  581. package/src/lib/model/task-scope.js +51 -0
  582. package/src/lib/model/task-scope.js.map +1 -0
  583. package/src/lib/model/task-views.d.ts +149 -0
  584. package/src/lib/model/task-views.js +286 -0
  585. package/src/lib/model/task-views.js.map +1 -0
  586. package/src/lib/model/tasks-csv.d.ts +28 -0
  587. package/src/lib/model/tasks-csv.js +28 -0
  588. package/src/lib/model/tasks-csv.js.map +1 -0
  589. package/src/lib/plugin.d.ts +32 -0
  590. package/src/lib/plugin.js +208 -0
  591. package/src/lib/plugin.js.map +1 -0
  592. package/src/lib/server/companies-import.d.ts +57 -0
  593. package/src/lib/server/companies-import.js +242 -0
  594. package/src/lib/server/companies-import.js.map +1 -0
  595. package/src/lib/server/company-delete.d.ts +59 -0
  596. package/src/lib/server/company-delete.js +146 -0
  597. package/src/lib/server/company-delete.js.map +1 -0
  598. package/src/lib/server/contact-email-history.d.ts +82 -0
  599. package/src/lib/server/contact-email-history.js +264 -0
  600. package/src/lib/server/contact-email-history.js.map +1 -0
  601. package/src/lib/server/contact-profile.d.ts +41 -0
  602. package/src/lib/server/contact-profile.js +45 -0
  603. package/src/lib/server/contact-profile.js.map +1 -0
  604. package/src/lib/server/contact-update.d.ts +92 -0
  605. package/src/lib/server/contact-update.js +512 -0
  606. package/src/lib/server/contact-update.js.map +1 -0
  607. package/src/lib/server/contacts-import.d.ts +73 -0
  608. package/src/lib/server/contacts-import.js +263 -0
  609. package/src/lib/server/contacts-import.js.map +1 -0
  610. package/src/lib/server/contacts-merge.d.ts +86 -0
  611. package/src/lib/server/contacts-merge.js +206 -0
  612. package/src/lib/server/contacts-merge.js.map +1 -0
  613. package/src/lib/server/deals-import.d.ts +76 -0
  614. package/src/lib/server/deals-import.js +246 -0
  615. package/src/lib/server/deals-import.js.map +1 -0
  616. package/src/lib/server/email-send.d.ts +119 -0
  617. package/src/lib/server/email-send.js +667 -0
  618. package/src/lib/server/email-send.js.map +1 -0
  619. package/src/lib/server/email-template-duplicate.d.ts +19 -0
  620. package/src/lib/server/email-template-duplicate.js +206 -0
  621. package/src/lib/server/email-template-duplicate.js.map +1 -0
  622. package/src/lib/server/erase-person.d.ts +108 -0
  623. package/src/lib/server/erase-person.js +309 -0
  624. package/src/lib/server/erase-person.js.map +1 -0
  625. package/src/lib/server/import-context.d.ts +85 -0
  626. package/src/lib/server/import-context.js +181 -0
  627. package/src/lib/server/import-context.js.map +1 -0
  628. package/src/lib/server/inbound-address.d.ts +61 -0
  629. package/src/lib/server/inbound-address.js +188 -0
  630. package/src/lib/server/inbound-address.js.map +1 -0
  631. package/src/lib/server/lead-convert.d.ts +78 -0
  632. package/src/lib/server/lead-convert.js +250 -0
  633. package/src/lib/server/lead-convert.js.map +1 -0
  634. package/src/lib/server/leads-import.d.ts +84 -0
  635. package/src/lib/server/leads-import.js +261 -0
  636. package/src/lib/server/leads-import.js.map +1 -0
  637. package/src/lib/server/next-activity-routes.d.ts +33 -0
  638. package/src/lib/server/next-activity-routes.js +110 -0
  639. package/src/lib/server/next-activity-routes.js.map +1 -0
  640. package/src/lib/server/org-activity.d.ts +61 -0
  641. package/src/lib/server/org-activity.js +120 -0
  642. package/src/lib/server/org-activity.js.map +1 -0
  643. package/src/lib/server/org-caller.d.ts +110 -0
  644. package/src/lib/server/org-caller.js +154 -0
  645. package/src/lib/server/org-caller.js.map +1 -0
  646. package/src/lib/server/recipe-routes.d.ts +75 -0
  647. package/src/lib/server/recipe-routes.js +442 -0
  648. package/src/lib/server/recipe-routes.js.map +1 -0
  649. package/src/lib/server/record-facts.d.ts +65 -0
  650. package/src/lib/server/record-facts.js +337 -0
  651. package/src/lib/server/record-facts.js.map +1 -0
  652. package/src/lib/server/record-timeline.d.ts +51 -0
  653. package/src/lib/server/record-timeline.js +215 -0
  654. package/src/lib/server/record-timeline.js.map +1 -0
  655. package/src/lib/server/suite-gate.d.ts +42 -0
  656. package/src/lib/server/suite-gate.js +87 -0
  657. package/src/lib/server/suite-gate.js.map +1 -0
  658. package/src/lib/server/task-routes.d.ts +132 -0
  659. package/src/lib/server/task-routes.js +699 -0
  660. package/src/lib/server/task-routes.js.map +1 -0
  661. package/src/lib/server/tasks-import.d.ts +54 -0
  662. package/src/lib/server/tasks-import.js +157 -0
  663. package/src/lib/server/tasks-import.js.map +1 -0
  664. package/src/lib/server-deal-stage.d.ts +88 -0
  665. package/src/lib/server-deal-stage.js +316 -0
  666. package/src/lib/server-deal-stage.js.map +1 -0
  667. package/src/lib/server.d.ts +149 -0
  668. package/src/lib/server.js +615 -0
  669. package/src/lib/server.js.map +1 -0
@@ -0,0 +1,32 @@
1
+ import { type CrmRecordRef } from '../hooks/use-crm-tasks';
2
+ export interface RecordTasksCardProps extends CrmRecordRef {
3
+ /** The site the record is read under, or `null` at the organization level. */
4
+ hostId: string | null;
5
+ /** The org document the shell passed the page; scopes the read when present. */
6
+ org?: Record<string, unknown> | null;
7
+ /**
8
+ * The hub's path, for the link to the full tasks list. A page the hub
9
+ * rendered has one to pass; a card mounted anywhere else leaves it out and
10
+ * the path is rebuilt from the URL.
11
+ */
12
+ basePath?: string;
13
+ }
14
+ /**
15
+ * The open tasks for ONE contact, company or deal, on that record's page
16
+ * (AGL-2599).
17
+ *
18
+ * Exactly one of `contactId`, `companyId`, `dealId` names the record; the
19
+ * first present one wins. A record page drops this in beside its other
20
+ * cards: `<RecordTasksCard hostId={hostId} org={org} contactId={id} />`.
21
+ * Tasks are completed inline and created with the record
22
+ * already linked; everything else about a task is edited by opening it.
23
+ *
24
+ * Open tasks are listed and completed ones are counted, because a record's
25
+ * page is where somebody decides what to do next about the person, and the
26
+ * history of what was done lives in the Done view of the tasks section.
27
+ */
28
+ export declare function RecordTasksCard(props: RecordTasksCardProps): import("react").JSX.Element;
29
+ export declare namespace RecordTasksCard {
30
+ var displayName: string;
31
+ }
32
+ export default RecordTasksCard;
@@ -0,0 +1,306 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2026 Aglyn LLC
4
+ *
5
+ * Licensed under the Apache License, Version 2.0 (the "License");
6
+ * you may not use this file except in compliance with the License.
7
+ * You may obtain a copy of the License at
8
+ *
9
+ * http://www.apache.org/licenses/LICENSE-2.0
10
+ *
11
+ * Unless required by applicable law or agreed to in writing, software
12
+ * distributed under the License is distributed on an "AS IS" BASIS,
13
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14
+ * See the License for the specific language governing permissions and
15
+ * limitations under the License.
16
+ */ 'use client';
17
+ import { _ as _extends } from "@swc/helpers/_/_extends";
18
+ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
19
+ import { CRM_COLLECTIONS, pluginDocsHelp } from "@aglyn/aglyn";
20
+ import { AppLink, CardDisplay } from "@aglyn/shared-ui-jsx";
21
+ import EmptyStateComponent from "@aglyn/shared-ui-jsx/components/empty-state.component";
22
+ import { useSnackbar } from "@aglyn/shared-ui-snackstack";
23
+ import { useFirestore, useUser } from "@aglyn/tenant-feature-instance";
24
+ import { Button, Checkbox, Stack, Typography } from "@mui/material";
25
+ import { deleteField, doc, serverTimestamp, updateDoc } from "firebase/firestore";
26
+ import { useCallback, useMemo, useState } from "react";
27
+ import { useCrmHubPath } from "../hooks/use-crm-hub-path.js";
28
+ import { useCrmRecordTasks, useNowMs } from "../hooks/use-crm-tasks.js";
29
+ import { useOrgMemberDirectory } from "../hooks/use-org-member-directory.js";
30
+ import { crmRoutes } from "../model/crm-routes.js";
31
+ import { refreshCrmNextActivity } from "../model/next-activity-api.js";
32
+ import { completeCrmTask } from "../model/task-api.js";
33
+ import { crmTaskCallScope } from "../model/task-routes.js";
34
+ import { TaskDueText, TaskKindCell, TaskPriorityChip } from "./task-cells.js";
35
+ import TaskEditDrawer from "./task-edit-drawer.js";
36
+ import TaskSnoozeMenu from "./task-snooze-menu.js";
37
+ /**
38
+ * The open tasks for ONE contact, company or deal, on that record's page
39
+ * (AGL-2599).
40
+ *
41
+ * Exactly one of `contactId`, `companyId`, `dealId` names the record; the
42
+ * first present one wins. A record page drops this in beside its other
43
+ * cards: `<RecordTasksCard hostId={hostId} org={org} contactId={id} />`.
44
+ * Tasks are completed inline and created with the record
45
+ * already linked; everything else about a task is edited by opening it.
46
+ *
47
+ * Open tasks are listed and completed ones are counted, because a record's
48
+ * page is where somebody decides what to do next about the person, and the
49
+ * history of what was done lives in the Done view of the tasks section.
50
+ */ export function RecordTasksCard(props) {
51
+ const { hostId, org, basePath, contactId, companyId, dealId } = props;
52
+ const firestore = useFirestore();
53
+ const { data: user } = useUser();
54
+ const { enqueueSnackbar } = useSnackbar();
55
+ const nowMs = useNowMs();
56
+ const hubPath = useCrmHubPath(basePath);
57
+ const routes = useMemo(()=>crmRoutes(hubPath), [
58
+ hubPath
59
+ ]);
60
+ const record = useMemo(()=>contactId ? {
61
+ contactId
62
+ } : companyId ? {
63
+ companyId
64
+ } : {
65
+ dealId
66
+ }, [
67
+ contactId,
68
+ companyId,
69
+ dealId
70
+ ]);
71
+ const { tasks, status, fromCache, scope, orgId, readTokens } = useCrmRecordTasks({
72
+ hostId,
73
+ org,
74
+ record
75
+ });
76
+ const directory = useOrgMemberDirectory(orgId);
77
+ const open = useMemo(()=>tasks.filter((task)=>task.status !== 'done'), [
78
+ tasks
79
+ ]);
80
+ const doneCount = tasks.length - open.length;
81
+ const [drawer, setDrawer] = useState({
82
+ open: false,
83
+ task: null
84
+ });
85
+ const [busyId, setBusyId] = useState(null);
86
+ const toggleDone = useCallback(async (task)=>{
87
+ if (!scope || busyId) return;
88
+ setBusyId(task.$id);
89
+ try {
90
+ if (task.status === 'done') {
91
+ await updateDoc(doc(firestore, scope[0], scope[1], CRM_COLLECTIONS.tasks, task.$id), {
92
+ status: 'open',
93
+ completedAtMs: null,
94
+ completedByUid: deleteField(),
95
+ updatedAt: serverTimestamp()
96
+ });
97
+ // A client-direct write: the records it names are told (AGL-2661).
98
+ await refreshCrmNextActivity(user, crmTaskCallScope(hostId, orgId), [
99
+ task
100
+ ]);
101
+ } else {
102
+ // The mounted site, or at the organization level the org — whose
103
+ // variant emits on the task's own site, or nowhere for an org task.
104
+ const callScope = crmTaskCallScope(hostId, orgId);
105
+ if (!callScope) return;
106
+ await completeCrmTask(user, _extends({}, callScope, {
107
+ taskId: task.$id
108
+ }));
109
+ enqueueSnackbar('Task completed', {
110
+ variant: 'success'
111
+ });
112
+ }
113
+ } catch (cause) {
114
+ enqueueSnackbar(cause instanceof Error ? cause.message : 'The task could not be updated.', {
115
+ variant: 'warning'
116
+ });
117
+ } finally{
118
+ setBusyId(null);
119
+ }
120
+ }, [
121
+ scope,
122
+ busyId,
123
+ firestore,
124
+ user,
125
+ hostId,
126
+ orgId,
127
+ enqueueSnackbar
128
+ ]);
129
+ return /*#__PURE__*/ _jsxs(_Fragment, {
130
+ children: [
131
+ /*#__PURE__*/ _jsx(CardDisplay, {
132
+ header: 'Tasks',
133
+ help: pluginDocsHelp('crmTasks', {
134
+ anchor: '#tasks-on-a-contact-company-or-deal',
135
+ excerpt: 'The open tasks about this record. Tick one to complete it, or ' + 'add a call, an email, a meeting or a to-do already linked here.'
136
+ }),
137
+ subheader: doneCount ? `${open.length} open · ${doneCount} done` : open.length ? `${open.length} open` : undefined,
138
+ contentGutterX: true,
139
+ contentGutterY: true,
140
+ HeaderProps: {
141
+ action: /*#__PURE__*/ _jsxs(Stack, {
142
+ direction: "row",
143
+ spacing: 1,
144
+ children: [
145
+ /*#__PURE__*/ _jsx(Button, _extends({
146
+ component: AppLink
147
+ }, {
148
+ componentVariant: 'naked',
149
+ nativeButton: false
150
+ }, {
151
+ href: routes.section('tasks'),
152
+ size: "small",
153
+ color: "primary",
154
+ children: 'All tasks'
155
+ })),
156
+ /*#__PURE__*/ _jsx(Button, {
157
+ size: "small",
158
+ variant: "contained",
159
+ color: "primary",
160
+ onClick: ()=>setDrawer({
161
+ open: true,
162
+ task: null
163
+ }),
164
+ children: 'New task'
165
+ })
166
+ ]
167
+ })
168
+ },
169
+ children: status === 'error' ? /*#__PURE__*/ _jsx(Typography, {
170
+ variant: "body2",
171
+ color: "error",
172
+ children: 'The tasks could not be loaded.'
173
+ }) : status === 'success' && !open.length ? /*#__PURE__*/ _jsx(EmptyStateComponent, {
174
+ compact: true,
175
+ label: doneCount ? 'Everything here is done' : 'No tasks yet',
176
+ description: doneCount ? 'The completed ones are kept on the Tasks list.' : 'A call, an email, a meeting or a to-do owed to this record.',
177
+ action: /*#__PURE__*/ _jsx(Button, {
178
+ size: "small",
179
+ variant: "contained",
180
+ color: "primary",
181
+ onClick: ()=>setDrawer({
182
+ open: true,
183
+ task: null
184
+ }),
185
+ children: 'New task'
186
+ })
187
+ }) : /*#__PURE__*/ _jsx(Stack, {
188
+ spacing: 1,
189
+ children: open.map((task)=>/*#__PURE__*/ _jsxs(Stack, {
190
+ direction: "row",
191
+ spacing: 1,
192
+ sx: {
193
+ alignItems: 'center',
194
+ minWidth: 0
195
+ },
196
+ children: [
197
+ /*#__PURE__*/ _jsx(Checkbox, {
198
+ size: "small",
199
+ checked: false,
200
+ disabled: busyId === task.$id,
201
+ onClick: ()=>void toggleDone(task),
202
+ slotProps: {
203
+ input: {
204
+ 'aria-label': `Complete "${task.title}"`
205
+ }
206
+ }
207
+ }),
208
+ /*#__PURE__*/ _jsxs(Stack, {
209
+ sx: {
210
+ minWidth: 0,
211
+ flex: 1,
212
+ cursor: 'pointer'
213
+ },
214
+ onClick: ()=>setDrawer({
215
+ open: true,
216
+ task
217
+ }),
218
+ children: [
219
+ /*#__PURE__*/ _jsxs(Stack, {
220
+ direction: "row",
221
+ spacing: 1,
222
+ sx: {
223
+ alignItems: 'center',
224
+ minWidth: 0
225
+ },
226
+ children: [
227
+ /*#__PURE__*/ _jsx(TaskKindCell, {
228
+ kind: task.kind,
229
+ iconOnly: true
230
+ }),
231
+ /*#__PURE__*/ _jsx(Typography, {
232
+ variant: "body2",
233
+ noWrap: true,
234
+ sx: {
235
+ minWidth: 0
236
+ },
237
+ children: task.title
238
+ }),
239
+ task.priority === 'high' ? /*#__PURE__*/ _jsx(TaskPriorityChip, {
240
+ priority: task.priority
241
+ }) : null
242
+ ]
243
+ }),
244
+ /*#__PURE__*/ _jsxs(Stack, {
245
+ direction: "row",
246
+ spacing: 1,
247
+ sx: {
248
+ alignItems: 'center'
249
+ },
250
+ children: [
251
+ /*#__PURE__*/ _jsx(TaskDueText, {
252
+ task: task,
253
+ nowMs: nowMs,
254
+ variant: "caption"
255
+ }),
256
+ task.assigneeUid ? /*#__PURE__*/ _jsx(Typography, {
257
+ variant: "caption",
258
+ color: "text.secondary",
259
+ noWrap: true,
260
+ children: `· ${directory.nameOf(task.assigneeUid)}`
261
+ }) : null,
262
+ scope ? /*#__PURE__*/ _jsx(TaskSnoozeMenu, {
263
+ dueAtMs: task.dueAtMs,
264
+ remindAtMs: task.remindAtMs,
265
+ target: {
266
+ write: {
267
+ scope,
268
+ taskId: task.$id,
269
+ call: crmTaskCallScope(hostId, orgId),
270
+ links: task
271
+ }
272
+ },
273
+ disabled: busyId === task.$id
274
+ }) : null
275
+ ]
276
+ })
277
+ ]
278
+ })
279
+ ]
280
+ }, task.$id))
281
+ })
282
+ }),
283
+ /*#__PURE__*/ _jsx(TaskEditDrawer, {
284
+ open: drawer.open,
285
+ onClose: ()=>setDrawer((prev)=>_extends({}, prev, {
286
+ open: false
287
+ })),
288
+ hostId: hostId,
289
+ org: org,
290
+ orgId: orgId,
291
+ scope: scope,
292
+ readTokens: readTokens,
293
+ task: drawer.task,
294
+ prefill: record,
295
+ seed: {
296
+ fromCache,
297
+ unreadable: status === 'error'
298
+ }
299
+ })
300
+ ]
301
+ });
302
+ }
303
+ RecordTasksCard.displayName = 'RecordTasksCard';
304
+ export default RecordTasksCard;
305
+
306
+ //# sourceMappingURL=record-tasks-card.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../../../../libs/plugins/crm/src/lib/components/record-tasks-card.tsx"],"sourcesContent":["/**\n * @license\n * Copyright 2026 Aglyn LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n'use client'\n\nimport { CRM_COLLECTIONS, pluginDocsHelp } from '@aglyn/aglyn'\nimport { AppLink, CardDisplay } from '@aglyn/shared-ui-jsx'\nimport EmptyStateComponent from '@aglyn/shared-ui-jsx/components/empty-state.component'\nimport { useSnackbar } from '@aglyn/shared-ui-snackstack'\nimport { useFirestore, useUser } from '@aglyn/tenant-feature-instance'\nimport { Button, Checkbox, Stack, Typography } from '@mui/material'\nimport { deleteField, doc, serverTimestamp, updateDoc } from 'firebase/firestore'\nimport { useCallback, useMemo, useState } from 'react'\nimport { useCrmHubPath } from '../hooks/use-crm-hub-path'\nimport {\n type CrmRecordRef,\n type CrmTaskRow,\n useCrmRecordTasks,\n useNowMs,\n} from '../hooks/use-crm-tasks'\nimport { useOrgMemberDirectory } from '../hooks/use-org-member-directory'\nimport { crmRoutes } from '../model/crm-routes'\nimport { refreshCrmNextActivity } from '../model/next-activity-api'\nimport { completeCrmTask } from '../model/task-api'\nimport { crmTaskCallScope } from '../model/task-routes'\nimport { TaskDueText, TaskKindCell, TaskPriorityChip } from './task-cells'\nimport TaskEditDrawer from './task-edit-drawer'\nimport TaskSnoozeMenu from './task-snooze-menu'\n\nexport interface RecordTasksCardProps extends CrmRecordRef {\n /** The site the record is read under, or `null` at the organization level. */\n hostId: string | null\n /** The org document the shell passed the page; scopes the read when present. */\n org?: Record<string, unknown> | null\n /**\n * The hub's path, for the link to the full tasks list. A page the hub\n * rendered has one to pass; a card mounted anywhere else leaves it out and\n * the path is rebuilt from the URL.\n */\n basePath?: string\n}\n\n/**\n * The open tasks for ONE contact, company or deal, on that record's page\n * (AGL-2599).\n *\n * Exactly one of `contactId`, `companyId`, `dealId` names the record; the\n * first present one wins. A record page drops this in beside its other\n * cards: `<RecordTasksCard hostId={hostId} org={org} contactId={id} />`.\n * Tasks are completed inline and created with the record\n * already linked; everything else about a task is edited by opening it.\n *\n * Open tasks are listed and completed ones are counted, because a record's\n * page is where somebody decides what to do next about the person, and the\n * history of what was done lives in the Done view of the tasks section.\n */\nexport function RecordTasksCard(props: RecordTasksCardProps) {\n const { hostId, org, basePath, contactId, companyId, dealId } = props\n const firestore = useFirestore()\n const { data: user } = useUser()\n const { enqueueSnackbar } = useSnackbar()\n const nowMs = useNowMs()\n const hubPath = useCrmHubPath(basePath)\n const routes = useMemo(() => crmRoutes(hubPath), [hubPath])\n const record = useMemo<CrmRecordRef>(\n () =>\n contactId ? { contactId } : companyId ? { companyId } : { dealId },\n [contactId, companyId, dealId],\n )\n const { tasks, status, fromCache, scope, orgId, readTokens } = useCrmRecordTasks({\n hostId,\n org,\n record,\n })\n const directory = useOrgMemberDirectory(orgId)\n const open = useMemo(() => tasks.filter((task) => task.status !== 'done'), [tasks])\n const doneCount = tasks.length - open.length\n\n const [drawer, setDrawer] = useState<{ open: boolean; task: CrmTaskRow | null }>({\n open: false,\n task: null,\n })\n const [busyId, setBusyId] = useState<string | null>(null)\n\n const toggleDone = useCallback(\n async (task: CrmTaskRow) => {\n if (!scope || busyId) return\n setBusyId(task.$id)\n try {\n if (task.status === 'done') {\n await updateDoc(\n doc(firestore, scope[0], scope[1], CRM_COLLECTIONS.tasks, task.$id),\n {\n status: 'open',\n completedAtMs: null,\n completedByUid: deleteField(),\n updatedAt: serverTimestamp(),\n },\n )\n // A client-direct write: the records it names are told (AGL-2661).\n await refreshCrmNextActivity(user, crmTaskCallScope(hostId, orgId), [task])\n } else {\n // The mounted site, or at the organization level the org — whose\n // variant emits on the task's own site, or nowhere for an org task.\n const callScope = crmTaskCallScope(hostId, orgId)\n if (!callScope) return\n await completeCrmTask(user, { ...callScope, taskId: task.$id })\n enqueueSnackbar('Task completed', { variant: 'success' })\n }\n } catch (cause) {\n enqueueSnackbar(\n cause instanceof Error ? cause.message : 'The task could not be updated.',\n { variant: 'warning' },\n )\n } finally {\n setBusyId(null)\n }\n },\n [scope, busyId, firestore, user, hostId, orgId, enqueueSnackbar],\n )\n\n return (\n <>\n <CardDisplay\n header={'Tasks'}\n help={pluginDocsHelp('crmTasks', {\n anchor: '#tasks-on-a-contact-company-or-deal',\n excerpt:\n 'The open tasks about this record. Tick one to complete it, or ' +\n 'add a call, an email, a meeting or a to-do already linked here.',\n })}\n subheader={\n doneCount\n ? `${open.length} open · ${doneCount} done`\n : open.length\n ? `${open.length} open`\n : undefined\n }\n contentGutterX\n contentGutterY\n HeaderProps={{\n action: (\n <Stack direction=\"row\" spacing={1}>\n <Button\n component={AppLink as any}\n {...({ componentVariant: 'naked', nativeButton: false } as any)}\n href={routes.section('tasks')}\n size=\"small\"\n color=\"primary\"\n >\n {'All tasks'}\n </Button>\n <Button\n size=\"small\"\n variant=\"contained\"\n color=\"primary\"\n onClick={() => setDrawer({ open: true, task: null })}\n >\n {'New task'}\n </Button>\n </Stack>\n ),\n }}\n >\n {status === 'error' ? (\n <Typography variant=\"body2\" color=\"error\">\n {'The tasks could not be loaded.'}\n </Typography>\n ) : status === 'success' && !open.length ? (\n <EmptyStateComponent\n compact\n label={doneCount ? 'Everything here is done' : 'No tasks yet'}\n description={\n doneCount\n ? 'The completed ones are kept on the Tasks list.'\n : 'A call, an email, a meeting or a to-do owed to this record.'\n }\n action={\n <Button\n size=\"small\"\n variant=\"contained\"\n color=\"primary\"\n onClick={() => setDrawer({ open: true, task: null })}\n >\n {'New task'}\n </Button>\n }\n />\n ) : (\n <Stack spacing={1}>\n {open.map((task) => (\n <Stack\n key={task.$id}\n direction=\"row\"\n spacing={1}\n sx={{ alignItems: 'center', minWidth: 0 }}\n >\n <Checkbox\n size=\"small\"\n checked={false}\n disabled={busyId === task.$id}\n onClick={() => void toggleDone(task)}\n slotProps={{\n input: { 'aria-label': `Complete \"${task.title}\"` },\n }}\n />\n <Stack\n sx={{ minWidth: 0, flex: 1, cursor: 'pointer' }}\n onClick={() => setDrawer({ open: true, task })}\n >\n <Stack direction=\"row\" spacing={1} sx={{ alignItems: 'center', minWidth: 0 }}>\n <TaskKindCell kind={task.kind} iconOnly />\n <Typography variant=\"body2\" noWrap sx={{ minWidth: 0 }}>\n {task.title}\n </Typography>\n {task.priority === 'high' ? (\n <TaskPriorityChip priority={task.priority} />\n ) : null}\n </Stack>\n <Stack direction=\"row\" spacing={1} sx={{ alignItems: 'center' }}>\n <TaskDueText task={task} nowMs={nowMs} variant=\"caption\" />\n {task.assigneeUid ? (\n <Typography variant=\"caption\" color=\"text.secondary\" noWrap>\n {`· ${directory.nameOf(task.assigneeUid)}`}\n </Typography>\n ) : null}\n {scope ? (\n <TaskSnoozeMenu\n dueAtMs={task.dueAtMs}\n remindAtMs={task.remindAtMs}\n target={{\n write: {\n scope,\n taskId: task.$id,\n call: crmTaskCallScope(hostId, orgId),\n links: task,\n },\n }}\n disabled={busyId === task.$id}\n />\n ) : null}\n </Stack>\n </Stack>\n </Stack>\n ))}\n </Stack>\n )}\n </CardDisplay>\n <TaskEditDrawer\n open={drawer.open}\n onClose={() => setDrawer((prev) => ({ ...prev, open: false }))}\n hostId={hostId}\n org={org}\n orgId={orgId}\n scope={scope}\n readTokens={readTokens}\n task={drawer.task}\n prefill={record}\n seed={{ fromCache, unreadable: status === 'error' }}\n />\n </>\n )\n}\nRecordTasksCard.displayName = 'RecordTasksCard'\n\nexport default RecordTasksCard\n"],"names":["CRM_COLLECTIONS","pluginDocsHelp","AppLink","CardDisplay","EmptyStateComponent","useSnackbar","useFirestore","useUser","Button","Checkbox","Stack","Typography","deleteField","doc","serverTimestamp","updateDoc","useCallback","useMemo","useState","useCrmHubPath","useCrmRecordTasks","useNowMs","useOrgMemberDirectory","crmRoutes","refreshCrmNextActivity","completeCrmTask","crmTaskCallScope","TaskDueText","TaskKindCell","TaskPriorityChip","TaskEditDrawer","TaskSnoozeMenu","RecordTasksCard","props","hostId","org","basePath","contactId","companyId","dealId","firestore","data","user","enqueueSnackbar","nowMs","hubPath","routes","record","tasks","status","fromCache","scope","orgId","readTokens","directory","open","filter","task","doneCount","length","drawer","setDrawer","busyId","setBusyId","toggleDone","$id","completedAtMs","completedByUid","updatedAt","callScope","taskId","variant","cause","Error","message","header","help","anchor","excerpt","subheader","undefined","contentGutterX","contentGutterY","HeaderProps","action","direction","spacing","component","componentVariant","nativeButton","href","section","size","color","onClick","compact","label","description","map","sx","alignItems","minWidth","checked","disabled","slotProps","input","title","flex","cursor","kind","iconOnly","noWrap","priority","assigneeUid","nameOf","dueAtMs","remindAtMs","target","write","call","links","onClose","prev","prefill","seed","unreadable","displayName"],"mappings":"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"}
@@ -0,0 +1,57 @@
1
+ import { type CrmReportScope } from './report-scope';
2
+ export interface ActivityCardProps {
3
+ report: CrmReportScope;
4
+ }
5
+ /**
6
+ * Activity by teammate (AGL-2624): the calls, emails, meetings and notes
7
+ * each member logged in the period, and the tasks they ticked off,
8
+ * busiest first.
9
+ *
10
+ * ## Two windows, two indexes, one table
11
+ *
12
+ * Activities are counted within the period on `atMs`; completed tasks are
13
+ * counted the same way on `completedAtMs`, under `status == 'done'`. Each
14
+ * count is also drawn as a window, newest first, for the leaderboard.
15
+ *
16
+ * ## Why that is four indexes and not one
17
+ *
18
+ * The counts and the windows do not share an index, and neither do the two
19
+ * audiences.
20
+ *
21
+ * A COUNT here names no `orderBy`. Firestore then orders implicitly by the
22
+ * range field, ASCENDING, so a count wants `completedAtMs` ascending — while
23
+ * the window beside it asks for `desc` explicitly and wants the descending
24
+ * one. A composite index serves one direction or its exact reverse, never
25
+ * both, so declaring only the direction the window reads leaves the count
26
+ * with nothing: `FAILED_PRECONDITION`, one column of dashes, and a card that
27
+ * otherwise looks fine.
28
+ *
29
+ * Then the visibility clause doubles it. `visibleToClause` contributes
30
+ * nothing when the reader's tokens are null, which is every organization-level
31
+ * read, so the shape arriving at Firestore has no leading array field — a
32
+ * different index, not a prefix of the one with it. `(visibleTo, status,
33
+ * completedAtMs)` serves a site and `(status, completedAtMs)` the org above
34
+ * it; one without the other is a card that works for exactly one audience.
35
+ *
36
+ * The two reads are independent so that a missing task index degrades ONE
37
+ * column to a dash and a notice rather than the whole card: the activities
38
+ * were read, and the leaderboard draws them.
39
+ *
40
+ * A task ordered by `completedAtMs` is a task the complete route stamped;
41
+ * a task marked done some other way, without the stamp, is not in the
42
+ * window and the caption says what the column is grouped from.
43
+ *
44
+ * ## Names
45
+ *
46
+ * Every activity carries the name it was signed with, for the reason
47
+ * `CrmActivity.byName` gives — a scoped reader cannot resolve a colleague's
48
+ * uid. The roster is read too, through the members route any member may
49
+ * ask, and wins when it knows the uid, so a renamed teammate reads by
50
+ * their current name; the signed name covers a uid the roster no longer
51
+ * has, and the uid itself covers the rest.
52
+ */
53
+ export declare function ActivityCard(props: ActivityCardProps): import("react").JSX.Element;
54
+ export declare namespace ActivityCard {
55
+ var displayName: string;
56
+ }
57
+ export default ActivityCard;