@aglyn/plugins-crm 1.0.0-beta.221 → 1.0.0-beta.223

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 (541) hide show
  1. package/README.md +2 -1
  2. package/package.json +13 -13
  3. package/src/lib/components/activity-list.js +12 -5
  4. package/src/lib/components/activity-list.js.map +1 -1
  5. package/src/lib/components/companies-bulk-bar.d.ts +1 -4
  6. package/src/lib/components/companies-bulk-bar.js +7 -20
  7. package/src/lib/components/companies-bulk-bar.js.map +1 -1
  8. package/src/lib/components/companies-section.d.ts +3 -3
  9. package/src/lib/components/companies-section.js +149 -46
  10. package/src/lib/components/companies-section.js.map +1 -1
  11. package/src/lib/components/company-edit-drawer.js +281 -20
  12. package/src/lib/components/company-edit-drawer.js.map +1 -1
  13. package/src/lib/components/company-properties-card.js +99 -8
  14. package/src/lib/components/company-properties-card.js.map +1 -1
  15. package/src/lib/components/contact-detail-page.js +3 -1
  16. package/src/lib/components/contact-detail-page.js.map +1 -1
  17. package/src/lib/components/contact-merge-dialog.js +33 -10
  18. package/src/lib/components/contact-merge-dialog.js.map +1 -1
  19. package/src/lib/components/contact-properties-card.d.ts +0 -69
  20. package/src/lib/components/contact-properties-card.js +350 -60
  21. package/src/lib/components/contact-properties-card.js.map +1 -1
  22. package/src/lib/components/contact-reports-to-field.d.ts +46 -0
  23. package/src/lib/components/contact-reports-to-field.js +67 -0
  24. package/src/lib/components/contact-reports-to-field.js.map +1 -0
  25. package/src/lib/components/contacts-bulk-bar.d.ts +1 -8
  26. package/src/lib/components/contacts-bulk-bar.js +7 -19
  27. package/src/lib/components/contacts-bulk-bar.js.map +1 -1
  28. package/src/lib/components/contacts-section.js +46 -33
  29. package/src/lib/components/contacts-section.js.map +1 -1
  30. package/src/lib/components/crm-call-actions.d.ts +10 -0
  31. package/src/lib/components/crm-call-actions.js +26 -9
  32. package/src/lib/components/crm-call-actions.js.map +1 -1
  33. package/src/lib/components/crm-next-activity-column.js +1 -1
  34. package/src/lib/components/crm-next-activity-column.js.map +1 -1
  35. package/src/lib/components/crm-record-picker.d.ts +15 -0
  36. package/src/lib/components/crm-record-picker.js +16 -10
  37. package/src/lib/components/crm-record-picker.js.map +1 -1
  38. package/src/lib/components/crm-transfer-buttons.d.ts +54 -0
  39. package/src/lib/components/crm-transfer-buttons.js +167 -0
  40. package/src/lib/components/crm-transfer-buttons.js.map +1 -0
  41. package/src/lib/components/deal-contact-roles-card.d.ts +46 -0
  42. package/src/lib/components/deal-contact-roles-card.js +368 -0
  43. package/src/lib/components/deal-contact-roles-card.js.map +1 -0
  44. package/src/lib/components/deal-detail-page.d.ts +3 -2
  45. package/src/lib/components/deal-detail-page.js +25 -6
  46. package/src/lib/components/deal-detail-page.js.map +1 -1
  47. package/src/lib/components/deal-edit-drawer.d.ts +10 -0
  48. package/src/lib/components/deal-edit-drawer.js +219 -10
  49. package/src/lib/components/deal-edit-drawer.js.map +1 -1
  50. package/src/lib/components/deal-properties-card.d.ts +7 -0
  51. package/src/lib/components/deal-properties-card.js +34 -3
  52. package/src/lib/components/deal-properties-card.js.map +1 -1
  53. package/src/lib/components/deal-stage-card.d.ts +4 -0
  54. package/src/lib/components/deal-stage-card.js +10 -2
  55. package/src/lib/components/deal-stage-card.js.map +1 -1
  56. package/src/lib/components/deals-bulk-bar.d.ts +0 -3
  57. package/src/lib/components/deals-bulk-bar.js +7 -20
  58. package/src/lib/components/deals-bulk-bar.js.map +1 -1
  59. package/src/lib/components/deals-section.d.ts +3 -3
  60. package/src/lib/components/deals-section.js +123 -63
  61. package/src/lib/components/deals-section.js.map +1 -1
  62. package/src/lib/components/fields-section.js +31 -17
  63. package/src/lib/components/fields-section.js.map +1 -1
  64. package/src/lib/components/lead-convert-dialog.d.ts +4 -0
  65. package/src/lib/components/lead-convert-dialog.js +23 -1
  66. package/src/lib/components/lead-convert-dialog.js.map +1 -1
  67. package/src/lib/components/lead-detail-page.js +8 -2
  68. package/src/lib/components/lead-detail-page.js.map +1 -1
  69. package/src/lib/components/lead-profile-fields.d.ts +71 -0
  70. package/src/lib/components/lead-profile-fields.js +386 -0
  71. package/src/lib/components/lead-profile-fields.js.map +1 -0
  72. package/src/lib/components/lead-properties-card.d.ts +2 -1
  73. package/src/lib/components/lead-properties-card.js +85 -176
  74. package/src/lib/components/lead-properties-card.js.map +1 -1
  75. package/src/lib/components/lead-source-select.d.ts +4 -23
  76. package/src/lib/components/lead-source-select.js +9 -73
  77. package/src/lib/components/lead-source-select.js.map +1 -1
  78. package/src/lib/components/lead-status-chip.d.ts +9 -3
  79. package/src/lib/components/lead-status-chip.js +8 -4
  80. package/src/lib/components/lead-status-chip.js.map +1 -1
  81. package/src/lib/components/lead-status-options.d.ts +20 -0
  82. package/src/lib/components/lead-status-options.js +51 -0
  83. package/src/lib/components/lead-status-options.js.map +1 -0
  84. package/src/lib/components/lead-unqualify-dialog.d.ts +5 -0
  85. package/src/lib/components/lead-unqualify-dialog.js +50 -18
  86. package/src/lib/components/lead-unqualify-dialog.js.map +1 -1
  87. package/src/lib/components/leads-bulk-bar.d.ts +0 -3
  88. package/src/lib/components/leads-bulk-bar.js +29 -29
  89. package/src/lib/components/leads-bulk-bar.js.map +1 -1
  90. package/src/lib/components/leads-section.js +120 -68
  91. package/src/lib/components/leads-section.js.map +1 -1
  92. package/src/lib/components/linked-deals-card.d.ts +4 -0
  93. package/src/lib/components/linked-deals-card.js +47 -3
  94. package/src/lib/components/linked-deals-card.js.map +1 -1
  95. package/src/lib/components/log-activity-dialog.js +43 -3
  96. package/src/lib/components/log-activity-dialog.js.map +1 -1
  97. package/src/lib/components/new-contact-drawer.d.ts +8 -0
  98. package/src/lib/components/new-contact-drawer.js +108 -6
  99. package/src/lib/components/new-contact-drawer.js.map +1 -1
  100. package/src/lib/components/new-lead-drawer.d.ts +9 -2
  101. package/src/lib/components/new-lead-drawer.js +88 -121
  102. package/src/lib/components/new-lead-drawer.js.map +1 -1
  103. package/src/lib/components/picklist-select.d.ts +36 -0
  104. package/src/lib/components/picklist-select.js +114 -0
  105. package/src/lib/components/picklist-select.js.map +1 -0
  106. package/src/lib/components/picklist-values-card.d.ts +34 -0
  107. package/src/lib/components/{lead-source-values-card.js → picklist-values-card.js} +241 -58
  108. package/src/lib/components/picklist-values-card.js.map +1 -0
  109. package/src/lib/components/pipeline-stages-dialog.d.ts +7 -0
  110. package/src/lib/components/pipeline-stages-dialog.js +26 -4
  111. package/src/lib/components/pipeline-stages-dialog.js.map +1 -1
  112. package/src/lib/components/pipelines-dialog.js +15 -6
  113. package/src/lib/components/pipelines-dialog.js.map +1 -1
  114. package/src/lib/components/recent-activity-feed.js +20 -5
  115. package/src/lib/components/recent-activity-feed.js.map +1 -1
  116. package/src/lib/components/recipes-card.js +4 -2
  117. package/src/lib/components/recipes-card.js.map +1 -1
  118. package/src/lib/components/record-tasks-card.js +15 -8
  119. package/src/lib/components/record-tasks-card.js.map +1 -1
  120. package/src/lib/components/reports/forecast-card.d.ts +6 -0
  121. package/src/lib/components/reports/forecast-card.js +101 -3
  122. package/src/lib/components/reports/forecast-card.js.map +1 -1
  123. package/src/lib/components/reports/lead-funnel-card.d.ts +12 -0
  124. package/src/lib/components/reports/lead-funnel-card.js +9 -5
  125. package/src/lib/components/reports/lead-funnel-card.js.map +1 -1
  126. package/src/lib/components/reports/lead-source-card.d.ts +23 -0
  127. package/src/lib/components/reports/lead-source-card.js +318 -0
  128. package/src/lib/components/reports/lead-source-card.js.map +1 -0
  129. package/src/lib/components/reports/pipeline-card.js +2 -1
  130. package/src/lib/components/reports/pipeline-card.js.map +1 -1
  131. package/src/lib/components/reports/report-export.js +1 -1
  132. package/src/lib/components/reports/report-export.js.map +1 -1
  133. package/src/lib/components/reports-section.js +8 -0
  134. package/src/lib/components/reports-section.js.map +1 -1
  135. package/src/lib/components/sharing-rule-drawer.d.ts +5 -0
  136. package/src/lib/components/sharing-rule-drawer.js +108 -19
  137. package/src/lib/components/sharing-rule-drawer.js.map +1 -1
  138. package/src/lib/components/sharing-rules-card.js +11 -3
  139. package/src/lib/components/sharing-rules-card.js.map +1 -1
  140. package/src/lib/components/task-cells.d.ts +9 -1
  141. package/src/lib/components/task-cells.js +9 -4
  142. package/src/lib/components/task-cells.js.map +1 -1
  143. package/src/lib/components/task-edit-drawer.js +111 -43
  144. package/src/lib/components/task-edit-drawer.js.map +1 -1
  145. package/src/lib/components/tasks-bulk-bar.d.ts +0 -3
  146. package/src/lib/components/tasks-bulk-bar.js +7 -20
  147. package/src/lib/components/tasks-bulk-bar.js.map +1 -1
  148. package/src/lib/components/tasks-calendar.d.ts +3 -0
  149. package/src/lib/components/tasks-calendar.js +8 -1
  150. package/src/lib/components/tasks-calendar.js.map +1 -1
  151. package/src/lib/components/tasks-section.d.ts +3 -3
  152. package/src/lib/components/tasks-section.js +58 -43
  153. package/src/lib/components/tasks-section.js.map +1 -1
  154. package/src/lib/constants/api-routes.d.ts +2 -9
  155. package/src/lib/constants/api-routes.js +1 -7
  156. package/src/lib/constants/api-routes.js.map +1 -1
  157. package/src/lib/constants/bundle-common.d.ts +6 -0
  158. package/src/lib/constants/bundle-common.js +11 -0
  159. package/src/lib/constants/bundle-common.js.map +1 -1
  160. package/src/lib/constants/company-filters.d.ts +14 -0
  161. package/src/lib/constants/company-filters.js +51 -1
  162. package/src/lib/constants/company-filters.js.map +1 -1
  163. package/src/lib/constants/contact-filters.d.ts +2 -0
  164. package/src/lib/constants/contact-filters.js +18 -1
  165. package/src/lib/constants/contact-filters.js.map +1 -1
  166. package/src/lib/constants/deal-filters.d.ts +22 -1
  167. package/src/lib/constants/deal-filters.js +67 -4
  168. package/src/lib/constants/deal-filters.js.map +1 -1
  169. package/src/lib/declarations.console-server.d.ts +3 -0
  170. package/src/lib/declarations.console-server.js +35 -0
  171. package/src/lib/declarations.console-server.js.map +1 -1
  172. package/src/lib/declarations.d.ts +26 -0
  173. package/src/lib/declarations.js +35 -0
  174. package/src/lib/declarations.js.map +1 -0
  175. package/src/lib/declarations.server.d.ts +11 -0
  176. package/src/lib/declarations.server.js +97 -1
  177. package/src/lib/declarations.server.js.map +1 -1
  178. package/src/lib/hooks/use-company-picklists.d.ts +15 -0
  179. package/src/lib/hooks/use-company-picklists.js +55 -0
  180. package/src/lib/hooks/use-company-picklists.js.map +1 -0
  181. package/src/lib/hooks/use-crm-picklist.d.ts +25 -0
  182. package/src/lib/hooks/use-crm-picklist.js +53 -0
  183. package/src/lib/hooks/use-crm-picklist.js.map +1 -0
  184. package/src/lib/hooks/use-crm-record-names.d.ts +16 -0
  185. package/src/lib/hooks/use-crm-record-names.js +45 -19
  186. package/src/lib/hooks/use-crm-record-names.js.map +1 -1
  187. package/src/lib/hooks/use-crm-task-picklists.d.ts +11 -0
  188. package/src/lib/hooks/use-crm-task-picklists.js +45 -0
  189. package/src/lib/hooks/use-crm-task-picklists.js.map +1 -0
  190. package/src/lib/hooks/use-deals.d.ts +14 -0
  191. package/src/lib/hooks/use-deals.js +29 -0
  192. package/src/lib/hooks/use-deals.js.map +1 -1
  193. package/src/lib/hooks/use-lead-picklists.d.ts +14 -0
  194. package/src/lib/hooks/use-lead-picklists.js +46 -0
  195. package/src/lib/hooks/use-lead-picklists.js.map +1 -0
  196. package/src/lib/hooks/use-lead-source-picklist.d.ts +5 -19
  197. package/src/lib/hooks/use-lead-source-picklist.js +12 -22
  198. package/src/lib/hooks/use-lead-source-picklist.js.map +1 -1
  199. package/src/lib/hooks/use-lead-status-picklist.d.ts +9 -0
  200. package/src/lib/hooks/use-lead-status-picklist.js +40 -0
  201. package/src/lib/hooks/use-lead-status-picklist.js.map +1 -0
  202. package/src/lib/model/companies.d.ts +32 -3
  203. package/src/lib/model/companies.js +133 -16
  204. package/src/lib/model/companies.js.map +1 -1
  205. package/src/lib/model/contact-merge.d.ts +27 -3
  206. package/src/lib/model/contact-merge.js +81 -7
  207. package/src/lib/model/contact-merge.js.map +1 -1
  208. package/src/lib/model/contact-record.d.ts +17 -0
  209. package/src/lib/model/contact-record.js +17 -2
  210. package/src/lib/model/contact-record.js.map +1 -1
  211. package/src/lib/model/contact-update.d.ts +31 -2
  212. package/src/lib/model/contact-update.js +14 -0
  213. package/src/lib/model/contact-update.js.map +1 -1
  214. package/src/lib/model/crm-list-query.d.ts +5 -0
  215. package/src/lib/model/crm-list-query.js +8 -0
  216. package/src/lib/model/crm-list-query.js.map +1 -1
  217. package/src/lib/model/crm-next-activity.d.ts +107 -0
  218. package/src/lib/model/crm-next-activity.js +140 -0
  219. package/src/lib/model/crm-next-activity.js.map +1 -0
  220. package/src/lib/model/crm-recipes.d.ts +40 -0
  221. package/src/lib/model/crm-recipes.js +259 -0
  222. package/src/lib/model/crm-recipes.js.map +1 -0
  223. package/src/lib/model/crm-record-counts.d.ts +36 -0
  224. package/src/lib/model/crm-record-counts.js +54 -0
  225. package/src/lib/model/crm-record-counts.js.map +1 -0
  226. package/src/lib/model/crm-record-lists.d.ts +23 -0
  227. package/src/lib/model/crm-record-lists.js +161 -0
  228. package/src/lib/model/crm-record-lists.js.map +1 -0
  229. package/src/lib/model/crm-reports.d.ts +73 -3
  230. package/src/lib/model/crm-reports.js +120 -1
  231. package/src/lib/model/crm-reports.js.map +1 -1
  232. package/src/lib/model/crm-sharing.d.ts +21 -3
  233. package/src/lib/model/crm-sharing.js +27 -6
  234. package/src/lib/model/crm-sharing.js.map +1 -1
  235. package/src/lib/model/crm-task-reminders.d.ts +152 -0
  236. package/src/lib/model/crm-task-reminders.js +161 -0
  237. package/src/lib/model/crm-task-reminders.js.map +1 -0
  238. package/src/lib/model/deal-board-model.d.ts +8 -2
  239. package/src/lib/model/deal-board-model.js +15 -2
  240. package/src/lib/model/deal-board-model.js.map +1 -1
  241. package/src/lib/model/deal-contact-roles.d.ts +45 -0
  242. package/src/lib/model/deal-contact-roles.js +73 -0
  243. package/src/lib/model/deal-contact-roles.js.map +1 -0
  244. package/src/lib/model/deal-form-model.d.ts +56 -0
  245. package/src/lib/model/deal-form-model.js +79 -7
  246. package/src/lib/model/deal-form-model.js.map +1 -1
  247. package/src/lib/model/download-text-file.d.ts +23 -0
  248. package/src/lib/model/download-text-file.js +34 -0
  249. package/src/lib/model/download-text-file.js.map +1 -0
  250. package/src/lib/model/lead-filters.d.ts +36 -2
  251. package/src/lib/model/lead-filters.js +123 -2
  252. package/src/lib/model/lead-filters.js.map +1 -1
  253. package/src/lib/model/lead-source-direction.d.ts +38 -0
  254. package/src/lib/model/lead-source-direction.js +52 -0
  255. package/src/lib/model/lead-source-direction.js.map +1 -0
  256. package/src/lib/model/next-activity.d.ts +1 -1
  257. package/src/lib/model/next-activity.js.map +1 -1
  258. package/src/lib/model/picklist-values.d.ts +119 -0
  259. package/src/lib/model/picklist-values.js +256 -0
  260. package/src/lib/model/picklist-values.js.map +1 -0
  261. package/src/lib/model/record-facts-disclosed.d.ts +81 -0
  262. package/src/lib/model/record-facts-disclosed.js +281 -0
  263. package/src/lib/model/record-facts-disclosed.js.map +1 -0
  264. package/src/lib/model/record-facts.d.ts +215 -34
  265. package/src/lib/model/record-facts.js +307 -128
  266. package/src/lib/model/record-facts.js.map +1 -1
  267. package/src/lib/model/task-picklists.d.ts +52 -0
  268. package/src/lib/model/task-picklists.js +83 -0
  269. package/src/lib/model/task-picklists.js.map +1 -0
  270. package/src/lib/model/task-routes.d.ts +13 -0
  271. package/src/lib/model/task-routes.js +23 -4
  272. package/src/lib/model/task-routes.js.map +1 -1
  273. package/src/lib/plan-entitlements.js +6 -4
  274. package/src/lib/plan-entitlements.js.map +1 -1
  275. package/src/lib/plugin.js +17 -0
  276. package/src/lib/plugin.js.map +1 -1
  277. package/src/lib/server/api-v1/contacts.js +220 -14
  278. package/src/lib/server/api-v1/contacts.js.map +1 -1
  279. package/src/lib/server/api-v1/crm-activities.js +14 -1
  280. package/src/lib/server/api-v1/crm-activities.js.map +1 -1
  281. package/src/lib/server/api-v1/crm-companies.js +123 -14
  282. package/src/lib/server/api-v1/crm-companies.js.map +1 -1
  283. package/src/lib/server/api-v1/crm-deals.js +291 -26
  284. package/src/lib/server/api-v1/crm-deals.js.map +1 -1
  285. package/src/lib/server/api-v1/crm-leads.js +144 -38
  286. package/src/lib/server/api-v1/crm-leads.js.map +1 -1
  287. package/src/lib/server/api-v1/crm-pipelines.d.ts +6 -0
  288. package/src/lib/server/api-v1/crm-pipelines.js +8 -2
  289. package/src/lib/server/api-v1/crm-pipelines.js.map +1 -1
  290. package/src/lib/server/api-v1/crm-tasks.js +78 -34
  291. package/src/lib/server/api-v1/crm-tasks.js.map +1 -1
  292. package/src/lib/server/api-v1/openapi.d.ts +0 -11
  293. package/src/lib/server/api-v1/openapi.js +171 -16
  294. package/src/lib/server/api-v1/openapi.js.map +1 -1
  295. package/src/lib/server/assign-contact-owner.d.ts +188 -0
  296. package/src/lib/server/assign-contact-owner.js +446 -0
  297. package/src/lib/server/assign-contact-owner.js.map +1 -0
  298. package/src/lib/server/associate-company-by-domain.d.ts +70 -0
  299. package/src/lib/server/associate-company-by-domain.js +153 -0
  300. package/src/lib/server/associate-company-by-domain.js.map +1 -0
  301. package/src/lib/server/automation-steps.d.ts +140 -0
  302. package/src/lib/server/automation-steps.js +669 -0
  303. package/src/lib/server/automation-steps.js.map +1 -0
  304. package/src/lib/server/capture-contact.d.ts +17 -0
  305. package/src/lib/server/capture-contact.js +95 -26
  306. package/src/lib/server/capture-contact.js.map +1 -1
  307. package/src/lib/server/capture-host-contact.d.ts +104 -0
  308. package/src/lib/server/capture-host-contact.js +151 -0
  309. package/src/lib/server/capture-host-contact.js.map +1 -0
  310. package/src/lib/server/company-children.d.ts +25 -0
  311. package/src/lib/server/company-children.js +42 -0
  312. package/src/lib/server/company-children.js.map +1 -0
  313. package/src/lib/server/company-delete.d.ts +18 -0
  314. package/src/lib/server/company-delete.js +44 -21
  315. package/src/lib/server/company-delete.js.map +1 -1
  316. package/src/lib/server/contact-email-history.js +21 -19
  317. package/src/lib/server/contact-email-history.js.map +1 -1
  318. package/src/lib/server/contact-remove.js +27 -2
  319. package/src/lib/server/contact-remove.js.map +1 -1
  320. package/src/lib/server/contact-reports-to.d.ts +61 -0
  321. package/src/lib/server/contact-reports-to.js +114 -0
  322. package/src/lib/server/contact-reports-to.js.map +1 -0
  323. package/src/lib/server/contact-update.d.ts +42 -1
  324. package/src/lib/server/contact-update.js +204 -23
  325. package/src/lib/server/contact-update.js.map +1 -1
  326. package/src/lib/server/convert-host-lead.d.ts +46 -1
  327. package/src/lib/server/convert-host-lead.js +173 -15
  328. package/src/lib/server/convert-host-lead.js.map +1 -1
  329. package/src/lib/server/convert-open-lead.js +12 -5
  330. package/src/lib/server/convert-open-lead.js.map +1 -1
  331. package/src/lib/server/crm-email-activity.d.ts +118 -0
  332. package/src/lib/server/crm-email-activity.js +148 -0
  333. package/src/lib/server/crm-email-activity.js.map +1 -0
  334. package/src/lib/server/crm-inbound-email.js +1 -1
  335. package/src/lib/server/crm-inbound-email.js.map +1 -1
  336. package/src/lib/server/crm-next-activity.d.ts +74 -0
  337. package/src/lib/server/crm-next-activity.js +194 -0
  338. package/src/lib/server/crm-next-activity.js.map +1 -0
  339. package/src/lib/server/crm-record-indexes.d.ts +45 -0
  340. package/src/lib/server/crm-record-indexes.js +78 -0
  341. package/src/lib/server/crm-record-indexes.js.map +1 -0
  342. package/src/lib/server/crm-sharing.d.ts +9 -1
  343. package/src/lib/server/crm-sharing.js +23 -3
  344. package/src/lib/server/crm-sharing.js.map +1 -1
  345. package/src/lib/server/deal-contact-roles.d.ts +27 -0
  346. package/src/lib/server/deal-contact-roles.js +89 -0
  347. package/src/lib/server/deal-contact-roles.js.map +1 -0
  348. package/src/lib/server/email-send.js +2 -1
  349. package/src/lib/server/email-send.js.map +1 -1
  350. package/src/lib/server/lead-convert.d.ts +5 -0
  351. package/src/lib/server/lead-convert.js +19 -3
  352. package/src/lib/server/lead-convert.js.map +1 -1
  353. package/src/lib/server/lead-create.d.ts +17 -2
  354. package/src/lib/server/lead-create.js +46 -14
  355. package/src/lib/server/lead-create.js.map +1 -1
  356. package/src/lib/server/lead-nurturing.d.ts +6 -0
  357. package/src/lib/server/lead-nurturing.js +57 -20
  358. package/src/lib/server/lead-nurturing.js.map +1 -1
  359. package/src/lib/server/lead-picklists.d.ts +35 -0
  360. package/src/lib/server/lead-picklists.js +52 -0
  361. package/src/lib/server/lead-picklists.js.map +1 -0
  362. package/src/lib/server/lead-source-picklist.d.ts +1 -13
  363. package/src/lib/server/lead-source-picklist.js +6 -33
  364. package/src/lib/server/lead-source-picklist.js.map +1 -1
  365. package/src/lib/server/merge-contacts.js +23 -5
  366. package/src/lib/server/merge-contacts.js.map +1 -1
  367. package/src/lib/server/next-activity-routes.js +2 -1
  368. package/src/lib/server/next-activity-routes.js.map +1 -1
  369. package/src/lib/server/person-eraser.d.ts +53 -0
  370. package/src/lib/server/person-eraser.js +149 -0
  371. package/src/lib/server/person-eraser.js.map +1 -0
  372. package/src/lib/server/person-records.d.ts +69 -0
  373. package/src/lib/server/person-records.js +317 -0
  374. package/src/lib/server/person-records.js.map +1 -0
  375. package/src/lib/server/person-refund.d.ts +97 -0
  376. package/src/lib/server/person-refund.js +221 -0
  377. package/src/lib/server/person-refund.js.map +1 -0
  378. package/src/lib/server/picklist-values.d.ts +21 -0
  379. package/src/lib/server/picklist-values.js +308 -0
  380. package/src/lib/server/picklist-values.js.map +1 -0
  381. package/src/lib/server/read-picklist.d.ts +44 -0
  382. package/src/lib/server/read-picklist.js +65 -0
  383. package/src/lib/server/read-picklist.js.map +1 -0
  384. package/src/lib/server/recipe-routes.js +22 -8
  385. package/src/lib/server/recipe-routes.js.map +1 -1
  386. package/src/lib/server/record-email-state.js +7 -1
  387. package/src/lib/server/record-email-state.js.map +1 -1
  388. package/src/lib/server/record-facts.d.ts +3 -0
  389. package/src/lib/server/record-facts.js +233 -31
  390. package/src/lib/server/record-facts.js.map +1 -1
  391. package/src/lib/server/record-origin.d.ts +27 -0
  392. package/src/lib/server/record-origin.js +104 -0
  393. package/src/lib/server/record-origin.js.map +1 -0
  394. package/src/lib/server/record-timeline.js +40 -3
  395. package/src/lib/server/record-timeline.js.map +1 -1
  396. package/src/lib/server/suite-gate.js +4 -3
  397. package/src/lib/server/suite-gate.js.map +1 -1
  398. package/src/lib/server/task-reminders-route.js +2 -1
  399. package/src/lib/server/task-reminders-route.js.map +1 -1
  400. package/src/lib/server/task-routes.js +33 -17
  401. package/src/lib/server/task-routes.js.map +1 -1
  402. package/src/lib/server-deal-stage.d.ts +5 -1
  403. package/src/lib/server-deal-stage.js +10 -5
  404. package/src/lib/server-deal-stage.js.map +1 -1
  405. package/src/lib/server.d.ts +8 -3
  406. package/src/lib/server.js +47 -43
  407. package/src/lib/server.js.map +1 -1
  408. package/src/lib/testing/memory-firestore.d.ts +55 -0
  409. package/src/lib/testing/memory-firestore.js +335 -0
  410. package/src/lib/testing/memory-firestore.js.map +1 -0
  411. package/src/lib/testing/stand-in-email-send-index.d.ts +25 -0
  412. package/src/lib/testing/stand-in-email-send-index.js +49 -0
  413. package/src/lib/testing/stand-in-email-send-index.js.map +1 -0
  414. package/src/lib/transfer/activities.d.ts +30 -0
  415. package/src/lib/transfer/activities.js +132 -0
  416. package/src/lib/transfer/activities.js.map +1 -0
  417. package/src/lib/transfer/aliases.d.ts +22 -0
  418. package/src/lib/transfer/aliases.js +1342 -0
  419. package/src/lib/transfer/aliases.js.map +1 -0
  420. package/src/lib/transfer/common.d.ts +222 -0
  421. package/src/lib/transfer/common.js +832 -0
  422. package/src/lib/transfer/common.js.map +1 -0
  423. package/src/lib/transfer/companies.d.ts +43 -0
  424. package/src/lib/transfer/companies.js +549 -0
  425. package/src/lib/transfer/companies.js.map +1 -0
  426. package/src/lib/transfer/contacts.d.ts +31 -0
  427. package/src/lib/transfer/contacts.js +727 -0
  428. package/src/lib/transfer/contacts.js.map +1 -0
  429. package/src/lib/transfer/deals.d.ts +66 -0
  430. package/src/lib/transfer/deals.js +698 -0
  431. package/src/lib/transfer/deals.js.map +1 -0
  432. package/src/lib/transfer/email-templates-package.d.ts +40 -0
  433. package/src/lib/transfer/email-templates-package.js +76 -0
  434. package/src/lib/transfer/email-templates-package.js.map +1 -0
  435. package/src/lib/transfer/email-templates-package.server.d.ts +32 -0
  436. package/src/lib/transfer/email-templates-package.server.js +176 -0
  437. package/src/lib/transfer/email-templates-package.server.js.map +1 -0
  438. package/src/lib/transfer/fields.d.ts +102 -0
  439. package/src/lib/transfer/fields.js +1755 -0
  440. package/src/lib/transfer/fields.js.map +1 -0
  441. package/src/lib/transfer/leads.d.ts +30 -0
  442. package/src/lib/transfer/leads.js +582 -0
  443. package/src/lib/transfer/leads.js.map +1 -0
  444. package/src/lib/transfer/pipelines.d.ts +21 -0
  445. package/src/lib/transfer/pipelines.js +172 -0
  446. package/src/lib/transfer/pipelines.js.map +1 -0
  447. package/src/lib/transfer/register.d.ts +47 -0
  448. package/src/lib/transfer/register.js +277 -0
  449. package/src/lib/transfer/register.js.map +1 -0
  450. package/src/lib/transfer/tasks.d.ts +30 -0
  451. package/src/lib/transfer/tasks.js +418 -0
  452. package/src/lib/transfer/tasks.js.map +1 -0
  453. package/src/lib/transfer/ui.d.ts +20 -0
  454. package/src/lib/transfer/ui.js +42 -0
  455. package/src/lib/transfer/ui.js.map +1 -0
  456. package/src/lib/components/company-import-drawer.d.ts +0 -42
  457. package/src/lib/components/company-import-drawer.js +0 -99
  458. package/src/lib/components/company-import-drawer.js.map +0 -1
  459. package/src/lib/components/contact-import-drawer.d.ts +0 -46
  460. package/src/lib/components/contact-import-drawer.js +0 -149
  461. package/src/lib/components/contact-import-drawer.js.map +0 -1
  462. package/src/lib/components/crm-export-all-button.d.ts +0 -39
  463. package/src/lib/components/crm-export-all-button.js +0 -98
  464. package/src/lib/components/crm-export-all-button.js.map +0 -1
  465. package/src/lib/components/csv-import-drawer.d.ts +0 -139
  466. package/src/lib/components/csv-import-drawer.js +0 -757
  467. package/src/lib/components/csv-import-drawer.js.map +0 -1
  468. package/src/lib/components/deal-import-drawer.d.ts +0 -24
  469. package/src/lib/components/deal-import-drawer.js +0 -83
  470. package/src/lib/components/deal-import-drawer.js.map +0 -1
  471. package/src/lib/components/lead-import-drawer.d.ts +0 -27
  472. package/src/lib/components/lead-import-drawer.js +0 -118
  473. package/src/lib/components/lead-import-drawer.js.map +0 -1
  474. package/src/lib/components/lead-source-values-card.d.ts +0 -27
  475. package/src/lib/components/lead-source-values-card.js.map +0 -1
  476. package/src/lib/components/task-import-drawer.d.ts +0 -24
  477. package/src/lib/components/task-import-drawer.js +0 -82
  478. package/src/lib/components/task-import-drawer.js.map +0 -1
  479. package/src/lib/model/companies-csv.d.ts +0 -36
  480. package/src/lib/model/companies-csv.js +0 -38
  481. package/src/lib/model/companies-csv.js.map +0 -1
  482. package/src/lib/model/contacts-csv.d.ts +0 -54
  483. package/src/lib/model/contacts-csv.js +0 -67
  484. package/src/lib/model/contacts-csv.js.map +0 -1
  485. package/src/lib/model/crm-company-import.d.ts +0 -154
  486. package/src/lib/model/crm-company-import.js +0 -331
  487. package/src/lib/model/crm-company-import.js.map +0 -1
  488. package/src/lib/model/crm-csv.d.ts +0 -239
  489. package/src/lib/model/crm-csv.js +0 -467
  490. package/src/lib/model/crm-csv.js.map +0 -1
  491. package/src/lib/model/crm-deal-import.d.ts +0 -112
  492. package/src/lib/model/crm-deal-import.js +0 -263
  493. package/src/lib/model/crm-deal-import.js.map +0 -1
  494. package/src/lib/model/crm-import.d.ts +0 -250
  495. package/src/lib/model/crm-import.js +0 -467
  496. package/src/lib/model/crm-import.js.map +0 -1
  497. package/src/lib/model/crm-lead-import.d.ts +0 -138
  498. package/src/lib/model/crm-lead-import.js +0 -446
  499. package/src/lib/model/crm-lead-import.js.map +0 -1
  500. package/src/lib/model/crm-task-import.d.ts +0 -94
  501. package/src/lib/model/crm-task-import.js +0 -275
  502. package/src/lib/model/crm-task-import.js.map +0 -1
  503. package/src/lib/model/deals-csv.d.ts +0 -32
  504. package/src/lib/model/deals-csv.js +0 -36
  505. package/src/lib/model/deals-csv.js.map +0 -1
  506. package/src/lib/model/import-column-shapes.d.ts +0 -36
  507. package/src/lib/model/import-column-shapes.js +0 -76
  508. package/src/lib/model/import-column-shapes.js.map +0 -1
  509. package/src/lib/model/lead-source-values.d.ts +0 -82
  510. package/src/lib/model/lead-source-values.js +0 -149
  511. package/src/lib/model/lead-source-values.js.map +0 -1
  512. package/src/lib/model/leads-csv.d.ts +0 -40
  513. package/src/lib/model/leads-csv.js +0 -40
  514. package/src/lib/model/leads-csv.js.map +0 -1
  515. package/src/lib/model/tasks-csv.d.ts +0 -28
  516. package/src/lib/model/tasks-csv.js +0 -28
  517. package/src/lib/model/tasks-csv.js.map +0 -1
  518. package/src/lib/server/companies-import.d.ts +0 -57
  519. package/src/lib/server/companies-import.js +0 -242
  520. package/src/lib/server/companies-import.js.map +0 -1
  521. package/src/lib/server/contacts-import.d.ts +0 -109
  522. package/src/lib/server/contacts-import.js +0 -393
  523. package/src/lib/server/contacts-import.js.map +0 -1
  524. package/src/lib/server/deals-import.d.ts +0 -76
  525. package/src/lib/server/deals-import.js +0 -248
  526. package/src/lib/server/deals-import.js.map +0 -1
  527. package/src/lib/server/export-route.d.ts +0 -60
  528. package/src/lib/server/export-route.js +0 -447
  529. package/src/lib/server/export-route.js.map +0 -1
  530. package/src/lib/server/import-context.d.ts +0 -87
  531. package/src/lib/server/import-context.js +0 -182
  532. package/src/lib/server/import-context.js.map +0 -1
  533. package/src/lib/server/lead-source-values.d.ts +0 -50
  534. package/src/lib/server/lead-source-values.js +0 -191
  535. package/src/lib/server/lead-source-values.js.map +0 -1
  536. package/src/lib/server/leads-import.d.ts +0 -84
  537. package/src/lib/server/leads-import.js +0 -367
  538. package/src/lib/server/leads-import.js.map +0 -1
  539. package/src/lib/server/tasks-import.d.ts +0 -54
  540. package/src/lib/server/tasks-import.js +0 -160
  541. package/src/lib/server/tasks-import.js.map +0 -1
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../../../../libs/plugins/crm/src/lib/components/picklist-select.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 {\n type CrmPicklist,\n type CrmPicklistId,\n crmPicklistDefinition,\n crmPicklistOptions,\n groupPicklistOptions,\n type PicklistOption,\n} from '@aglyn/aglyn'\nimport { ListItemText, ListSubheader, MenuItem, TextField } from '@mui/material'\nimport { type ReactNode, useMemo } from 'react'\n\nexport interface CrmPicklistSelectProps {\n /** Which of the CRM's standard picklists the field is. */\n picklistId: CrmPicklistId\n picklist: CrmPicklist\n /** The label the record holds, or `''` for none. */\n value: string\n onChange: (label: string) => void\n /**\n * What the record held when the form opened. Kept in the menu while the\n * list no longer offers it — deactivated, or written before the list\n * held it — so the select shows what is stored until somebody changes it.\n */\n stored?: string\n disabled?: boolean\n helperText?: string\n error?: boolean\n /** The field's label, when a record names it otherwise than the list does. */\n label?: string\n}\n\n/** How a kept value that the list does not offer reads in the menu and the field. */\nfunction optionText(option: PicklistOption): string {\n if (option.inactive) return `${option.label} (inactive)`\n if (option.unlisted) return `${option.label} (not in the list)`\n return option.label\n}\n\n/**\n * A standard picklist's select (AGL-3298, AGL-3510): the org's active\n * values in the order the Fields page keeps them, a \"None\" to clear, and\n * the record's own value when the list would not otherwise show it —\n * marked, and selectable only as what it already is. A definition with\n * groups lists its values under a heading per group, in the definition's\n * order, with ungrouped values last.\n *\n * MUI's select `TextField`, the control every CRM form in this plugin uses\n * for a fixed choice, so it sizes, labels and disables like its neighbors.\n */\nexport function CrmPicklistSelect(props: CrmPicklistSelectProps) {\n const { picklistId, picklist, value, onChange, stored, disabled, helperText, error, label } = props\n const definition = crmPicklistDefinition(picklistId)\n const options = useMemo(\n () => crmPicklistOptions(picklist, stored || value),\n [picklist, stored, value],\n )\n const selected = options.find((option) => option.label === value)\n\n const item = (option: PicklistOption) => (\n <MenuItem\n key={option.label}\n value={option.label}\n // A kept value is shown so the record reads true, not offered as a\n // choice for a record that does not hold it already.\n disabled={(option.inactive || option.unlisted) && option.label !== (stored || value)}\n >\n <ListItemText\n primary={optionText(option)}\n slotProps={\n option.inactive || option.unlisted ? { primary: { color: 'text.secondary' } } : undefined\n }\n />\n </MenuItem>\n )\n // The menu's children flat — a Select reads its options from its direct\n // children, so the headings sit between them rather than around them.\n const groups = definition?.groups ?? []\n const items: ReactNode[] = groups.length\n ? groupPicklistOptions(options, groups).flatMap((section) => [\n <ListSubheader key={`group:${section.group?.id ?? ''}`}>\n {section.group?.label ?? 'No group'}\n </ListSubheader>,\n ...section.options.map(item),\n ])\n : options.map(item)\n\n return (\n <TextField\n select\n size=\"small\"\n label={label ?? definition?.label ?? 'Value'}\n value={selected ? value : ''}\n onChange={(event) => onChange(String(event.target.value))}\n disabled={disabled}\n helperText={helperText}\n error={error}\n fullWidth\n slotProps={{\n select: {\n displayEmpty: true,\n renderValue: (current) => {\n const option = options.find((entry) => entry.label === current)\n return option ? optionText(option) : 'None'\n },\n },\n inputLabel: { shrink: true },\n }}\n >\n <MenuItem value=\"\">\n <ListItemText primary=\"None\" slotProps={{ primary: { color: 'text.secondary' } }} />\n </MenuItem>\n {items}\n </TextField>\n )\n}\nCrmPicklistSelect.displayName = 'CrmPicklistSelect'\n\nexport default CrmPicklistSelect\n"],"names":["crmPicklistDefinition","crmPicklistOptions","groupPicklistOptions","ListItemText","ListSubheader","MenuItem","TextField","useMemo","optionText","option","inactive","label","unlisted","CrmPicklistSelect","props","picklistId","picklist","value","onChange","stored","disabled","helperText","error","definition","options","selected","find","item","primary","slotProps","color","undefined","groups","items","length","flatMap","section","group","id","map","select","size","event","String","target","fullWidth","displayEmpty","renderValue","current","entry","inputLabel","shrink","displayName"],"mappings":"AAAA;;;;;;;;;;;;;;;CAeC,GACD;;AAEA,SAGEA,qBAAqB,EACrBC,kBAAkB,EAClBC,oBAAoB,QAEf,eAAc;AACrB,SAASC,YAAY,EAAEC,aAAa,EAAEC,QAAQ,EAAEC,SAAS,QAAQ,gBAAe;AAChF,SAAyBC,OAAO,QAAQ,QAAO;AAsB/C,mFAAmF,GACnF,SAASC,WAAWC,MAAsB;IACxC,IAAIA,OAAOC,QAAQ,EAAE,OAAO,GAAGD,OAAOE,KAAK,CAAC,WAAW,CAAC;IACxD,IAAIF,OAAOG,QAAQ,EAAE,OAAO,GAAGH,OAAOE,KAAK,CAAC,kBAAkB,CAAC;IAC/D,OAAOF,OAAOE,KAAK;AACrB;AAEA;;;;;;;;;;CAUC,GACD,OAAO,SAASE,kBAAkBC,KAA6B;cAyClDH;IAxCX,MAAM,EAAEI,UAAU,EAAEC,QAAQ,EAAEC,KAAK,EAAEC,QAAQ,EAAEC,MAAM,EAAEC,QAAQ,EAAEC,UAAU,EAAEC,KAAK,EAAEX,KAAK,EAAE,GAAGG;IAC9F,MAAMS,aAAavB,sBAAsBe;IACzC,MAAMS,UAAUjB,QACd,IAAMN,mBAAmBe,UAAUG,UAAUF,QAC7C;QAACD;QAAUG;QAAQF;KAAM;IAE3B,MAAMQ,WAAWD,QAAQE,IAAI,CAAC,CAACjB,SAAWA,OAAOE,KAAK,KAAKM;IAE3D,MAAMU,OAAO,CAAClB,uBACZ,KAACJ;YAECY,OAAOR,OAAOE,KAAK;YACnB,mEAAmE;YACnE,qDAAqD;YACrDS,UAAU,AAACX,CAAAA,OAAOC,QAAQ,IAAID,OAAOG,QAAQ,AAAD,KAAMH,OAAOE,KAAK,KAAMQ,CAAAA,UAAUF,KAAI;sBAElF,cAAA,KAACd;gBACCyB,SAASpB,WAAWC;gBACpBoB,WACEpB,OAAOC,QAAQ,IAAID,OAAOG,QAAQ,GAAG;oBAAEgB,SAAS;wBAAEE,OAAO;oBAAiB;gBAAE,IAAIC;;WAT/EtB,OAAOE,KAAK;IAcrB,wEAAwE;IACxE,sEAAsE;IACtE,MAAMqB,iBAAST,8BAAAA,WAAYS,MAAM,mBAAI,EAAE;IACvC,MAAMC,QAAqBD,OAAOE,MAAM,GACpChC,qBAAqBsB,SAASQ,QAAQG,OAAO,CAAC,CAACC;;YAE1CA,gBAD0BA;eAD4B;0BACzD,KAAChC;mCACEgC,iBAAAA,QAAQC,KAAK,qBAAbD,eAAezB,KAAK,mBAAI;eADP,CAAC,MAAM,YAAEyB,kBAAAA,QAAQC,KAAK,qBAAbD,gBAAeE,EAAE,oBAAI,IAAI;eAGnDF,QAAQZ,OAAO,CAACe,GAAG,CAACZ;SACxB;SACDH,QAAQe,GAAG,CAACZ;IAEhB,qBACE,MAACrB;QACCkC,MAAM;QACNC,MAAK;QACL9B,KAAK,GAAEA,QAAAA,gBAAAA,QAASY,8BAAAA,WAAYZ,KAAK,YAA1BA,QAA8B;QACrCM,OAAOQ,WAAWR,QAAQ;QAC1BC,UAAU,CAACwB,QAAUxB,SAASyB,OAAOD,MAAME,MAAM,CAAC3B,KAAK;QACvDG,UAAUA;QACVC,YAAYA;QACZC,OAAOA;QACPuB,SAAS;QACThB,WAAW;YACTW,QAAQ;gBACNM,cAAc;gBACdC,aAAa,CAACC;oBACZ,MAAMvC,SAASe,QAAQE,IAAI,CAAC,CAACuB,QAAUA,MAAMtC,KAAK,KAAKqC;oBACvD,OAAOvC,SAASD,WAAWC,UAAU;gBACvC;YACF;YACAyC,YAAY;gBAAEC,QAAQ;YAAK;QAC7B;;0BAEA,KAAC9C;gBAASY,OAAM;0BACd,cAAA,KAACd;oBAAayB,SAAQ;oBAAOC,WAAW;wBAAED,SAAS;4BAAEE,OAAO;wBAAiB;oBAAE;;;YAEhFG;;;AAGP;AACApB,kBAAkBuC,WAAW,GAAG;AAEhC,eAAevC,kBAAiB"}
@@ -0,0 +1,34 @@
1
+ import { type CrmPicklistId } from '@aglyn/aglyn';
2
+ export interface PicklistValuesCardProps {
3
+ /** Which of the CRM's standard picklists this card manages. */
4
+ picklistId: CrmPicklistId;
5
+ /** The mounted site, or `null` at the organization level. */
6
+ hostId: string | null;
7
+ /** The org whose list this is; `null` while it settles. */
8
+ orgId: string | null;
9
+ /** The site a newly written list records as its definer — the Fields page's own. */
10
+ createHostId: string | null;
11
+ }
12
+ /**
13
+ * ONE STANDARD PICKLIST'S VALUES (AGL-3298, AGL-3510) — Salesforce's
14
+ * picklist value set for a standard field, managed on the Fields tab of the
15
+ * object the field belongs to.
16
+ *
17
+ * Standard values are marked, and cannot be deleted — every org has them —
18
+ * but rename, reorder, regroup, deactivate and default are theirs as much
19
+ * as an added value's. Every move that touches only the LIST — add,
20
+ * reorder by drag or arrows, sort A–Z, activate, deactivate, group,
21
+ * default — is one client write of the whole document, guarded against a
22
+ * cached read like every seeded save on the Fields page. The two that
23
+ * change RECORDS — rename, and delete with a replacement — go to
24
+ * `crm/picklist-values`, which rewrites the list and every record the
25
+ * definition's targets name together; see that route.
26
+ *
27
+ * An org that has never edited the list reads the standard values, and the
28
+ * first move here writes them down as the org's own.
29
+ */
30
+ export declare function PicklistValuesCard(props: PicklistValuesCardProps): import("react").JSX.Element;
31
+ export declare namespace PicklistValuesCard {
32
+ var displayName: string;
33
+ }
34
+ export default PicklistValuesCard;
@@ -16,7 +16,7 @@
16
16
  */ 'use client';
17
17
  import { _ as _extends } from "@swc/helpers/_/_extends";
18
18
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
19
- import { CRM_COLLECTIONS, CRM_LEAD_SOURCE_PICKLIST, CRM_LEAD_TEXT_MAX, crmPicklistActiveValues, newResourceScopeFields, ORG_SCOPE_TOKEN } from "@aglyn/aglyn";
19
+ import { CRM_COLLECTIONS, CRM_LEAD_TEXT_MAX, isStandardPicklistValueId, newResourceScopeFields, ORG_SCOPE_TOKEN } from "@aglyn/aglyn";
20
20
  import { mdiArrowDown, mdiArrowUp, mdiDeleteOutline, mdiDragVertical, mdiEyeOffOutline, mdiEyeOutline, mdiPencilOutline, mdiStarOutline } from "@aglyn/shared-data-mdi";
21
21
  import { MdiIcon, SrOnly } from "@aglyn/shared-ui-jsx";
22
22
  import RowActionsMenu from "@aglyn/shared-ui-jsx/components/row-actions-menu.component";
@@ -27,44 +27,92 @@ import { useFirestore, useUser, writeGuardedBySeed } from "@aglyn/tenant-feature
27
27
  import { Button, Chip, Dialog, DialogActions, DialogContent, DialogContentText, DialogTitle, IconButton, MenuItem, Stack, TableBody, TableCell, TableHead, TableRow, TextField, Typography } from "@mui/material";
28
28
  import { doc, serverTimestamp, setDoc } from "firebase/firestore";
29
29
  import { useCallback, useState } from "react";
30
- import { useLeadSourcePicklist } from "../hooks/use-lead-source-picklist.js";
31
- import { addPicklistValue, crmLeadSourceValuesRouteUrl, movePicklistValue, setPicklistDefault, setPicklistValueActive, sortPicklistValues } from "../model/lead-source-values.js";
30
+ import { useCrmPicklist } from "../hooks/use-crm-picklist.js";
31
+ import { addPicklistValue, crmPicklistValuesRouteUrl, movePicklistValue, picklistAddableMeanings, picklistMeaningLabel, picklistReplacements, setPicklistDefault, setPicklistValueActive, setPicklistValueGroup, sortPicklistValues } from "../model/picklist-values.js";
32
32
  import { crmTaskCallScope } from "../model/task-routes.js";
33
+ /** Each object's noun, singular and plural, for the card's sentences. */ const OBJECT_NOUNS = {
34
+ contact: [
35
+ 'contact',
36
+ 'contacts'
37
+ ],
38
+ company: [
39
+ 'company',
40
+ 'companies'
41
+ ],
42
+ deal: [
43
+ 'deal',
44
+ 'deals'
45
+ ],
46
+ lead: [
47
+ 'lead',
48
+ 'leads'
49
+ ],
50
+ task: [
51
+ 'task',
52
+ 'tasks'
53
+ ]
54
+ };
55
+ /** "a", "a and b", "a, b and c". */ function sentenceList(words) {
56
+ var _words_;
57
+ return words.length < 2 ? (_words_ = words[0]) != null ? _words_ : '' : `${words.slice(0, -1).join(', ')} and ${words[words.length - 1]}`;
58
+ }
59
+ /** The objects whose records hold the field's label, in the definition's order. */ function targetObjects(definition) {
60
+ return [
61
+ ...new Set(definition.targets.map((target)=>target.object))
62
+ ];
63
+ }
33
64
  /**
34
- * THE LEAD SOURCE VALUES (AGL-3298) — Salesforce's Lead Source picklist,
35
- * managed where the org's lead fields are.
65
+ * ONE STANDARD PICKLIST'S VALUES (AGL-3298, AGL-3510) — Salesforce's
66
+ * picklist value set for a standard field, managed on the Fields tab of the
67
+ * object the field belongs to.
36
68
  *
37
- * Every move that touches only the LIST — add, reorder by drag or arrows,
38
- * sort A–Z, activate, deactivate, default — is one client write of the
39
- * whole document, guarded against a cached read like every seeded save on
40
- * the Fields page. The two that change RECORDS — rename, and delete with a
41
- * replacement — go to `crm/lead-source-values`, which rewrites the list and
42
- * every lead and contact holding the old label together; see that route.
69
+ * Standard values are marked, and cannot be deleted — every org has them —
70
+ * but rename, reorder, regroup, deactivate and default are theirs as much
71
+ * as an added value's. Every move that touches only the LIST — add,
72
+ * reorder by drag or arrows, sort A–Z, activate, deactivate, group,
73
+ * default — is one client write of the whole document, guarded against a
74
+ * cached read like every seeded save on the Fields page. The two that
75
+ * change RECORDS — rename, and delete with a replacement — go to
76
+ * `crm/picklist-values`, which rewrites the list and every record the
77
+ * definition's targets name together; see that route.
43
78
  *
44
- * An org that has never edited its list reads the starter set, and the
45
- * first move here writes it down as the org's own.
46
- */ export function LeadSourceValuesCard(props) {
47
- var _ref;
48
- const { hostId, orgId, createHostId } = props;
79
+ * An org that has never edited the list reads the standard values, and the
80
+ * first move here writes them down as the org's own.
81
+ */ export function PicklistValuesCard(props) {
82
+ var _definition_groups, _definition_meanings, _ref;
83
+ const { picklistId, hostId, orgId, createHostId } = props;
49
84
  const firestore = useFirestore();
50
85
  const { data: user } = useUser();
51
86
  const { enqueueSnackbar } = useSnackbar();
52
- const { picklist, stored, ready, fromCache } = useLeadSourcePicklist(orgId);
87
+ const { definition, picklist, stored, ready, fromCache } = useCrmPicklist(picklistId, orgId);
53
88
  const [busy, setBusy] = useState(false);
54
89
  const [nameDialog, setNameDialog] = useState(null);
55
90
  const [draftName, setDraftName] = useState('');
91
+ const [draftGroup, setDraftGroup] = useState('');
92
+ const [draftMeaning, setDraftMeaning] = useState('');
56
93
  const [nameError, setNameError] = useState('');
57
94
  const [deleting, setDeleting] = useState(null);
58
95
  const [replaceWith, setReplaceWith] = useState('');
59
96
  const [dragFrom, setDragFrom] = useState(null);
97
+ const groups = (_definition_groups = definition.groups) != null ? _definition_groups : [];
98
+ const meanings = (_definition_meanings = definition.meanings) != null ? _definition_meanings : [];
99
+ // An added value may not take a meaning only the platform sets (AGL-3512).
100
+ const addableMeanings = picklistAddableMeanings(definition);
101
+ const [noun, nouns] = OBJECT_NOUNS[definition.object];
102
+ const holders = targetObjects(definition).map((object)=>OBJECT_NOUNS[object]);
103
+ // A list of suggestions only — a task's subjects (AGL-3517) — that no record holds.
104
+ const suggestions = holders.length === 0;
105
+ const field = definition.label.toLowerCase();
106
+ const failed = `The ${definition.plural} could not be saved.`;
107
+ const isStandard = (value)=>isStandardPicklistValueId(definition, value.id);
60
108
  /** Write the whole list — the list-only moves above. */ const save = useCallback(async (next, done)=>{
61
109
  if (!orgId || busy) return;
62
110
  setBusy(true);
63
111
  try {
64
112
  const verdict = await writeGuardedBySeed({
65
- subject: 'lead source list',
113
+ subject: `${field} list`,
66
114
  fromCache
67
- }, ()=>setDoc(doc(firestore, 'orgs', orgId, CRM_COLLECTIONS.picklists, CRM_LEAD_SOURCE_PICKLIST), _extends({
115
+ }, ()=>setDoc(doc(firestore, 'orgs', orgId, CRM_COLLECTIONS.picklists, picklistId), _extends({
68
116
  values: next.values,
69
117
  defaultValueId: next.defaultValueId,
70
118
  updatedAt: serverTimestamp()
@@ -89,7 +137,7 @@ import { crmTaskCallScope } from "../model/task-routes.js";
89
137
  });
90
138
  } catch (error) {
91
139
  console.error(error);
92
- enqueueSnackbar('The lead sources could not be saved.', {
140
+ enqueueSnackbar(failed, {
93
141
  variant: 'error',
94
142
  allowDuplicate: true
95
143
  });
@@ -99,27 +147,32 @@ import { crmTaskCallScope } from "../model/task-routes.js";
99
147
  }, [
100
148
  orgId,
101
149
  busy,
150
+ field,
102
151
  fromCache,
103
152
  firestore,
153
+ picklistId,
104
154
  stored,
105
155
  createHostId,
106
- enqueueSnackbar
156
+ enqueueSnackbar,
157
+ failed
107
158
  ]);
108
159
  /** A rename or a delete — the moves that change records too. */ const post = useCallback(async (request)=>{
109
160
  const scope = crmTaskCallScope(hostId, orgId);
110
161
  if (!scope || busy) return null;
111
162
  setBusy(true);
112
163
  try {
113
- const response = await authorizedFetch(user, crmLeadSourceValuesRouteUrl(), {
164
+ const response = await authorizedFetch(user, crmPicklistValuesRouteUrl(), {
114
165
  method: 'POST',
115
166
  headers: {
116
167
  'Content-Type': 'application/json'
117
168
  },
118
- body: JSON.stringify(_extends({}, request, scope))
169
+ body: JSON.stringify(_extends({}, request, {
170
+ picklistId
171
+ }, scope))
119
172
  });
120
173
  const payload = await response.json().catch(()=>({}));
121
174
  if (!response.ok) {
122
- enqueueSnackbar(payload.error || 'The lead sources could not be saved.', {
175
+ enqueueSnackbar(payload.error || failed, {
123
176
  variant: 'warning',
124
177
  persist: false
125
178
  });
@@ -128,7 +181,7 @@ import { crmTaskCallScope } from "../model/task-routes.js";
128
181
  return payload;
129
182
  } catch (error) {
130
183
  console.error(error);
131
- enqueueSnackbar('The lead sources could not be saved.', {
184
+ enqueueSnackbar(failed, {
132
185
  variant: 'error',
133
186
  allowDuplicate: true
134
187
  });
@@ -141,14 +194,27 @@ import { crmTaskCallScope } from "../model/task-routes.js";
141
194
  orgId,
142
195
  busy,
143
196
  user,
144
- enqueueSnackbar
197
+ picklistId,
198
+ enqueueSnackbar,
199
+ failed
145
200
  ]);
146
- const moved = (result)=>{
147
- const records = result.leads + result.contacts;
148
- return records ? ` — ${result.leads.toLocaleString()} lead${result.leads === 1 ? '' : 's'} and ` + `${result.contacts.toLocaleString()} contact${result.contacts === 1 ? '' : 's'} updated` : '';
201
+ /** " — 2 leads and 1 contact updated", or nothing when no record held the value. */ const moved = (result)=>{
202
+ const counts = targetObjects(definition).map((object)=>{
203
+ var _ref;
204
+ var _result_updated;
205
+ const count = (_ref = (_result_updated = result.updated) == null ? void 0 : _result_updated[object]) != null ? _ref : 0;
206
+ const [one, many] = OBJECT_NOUNS[object];
207
+ return {
208
+ count,
209
+ text: `${count.toLocaleString()} ${count === 1 ? one : many}`
210
+ };
211
+ });
212
+ return counts.some((entry)=>entry.count) ? ` — ${sentenceList(counts.map((entry)=>entry.text))} updated` : '';
149
213
  };
150
214
  const openAdd = ()=>{
151
215
  setDraftName('');
216
+ setDraftGroup('');
217
+ setDraftMeaning('');
152
218
  setNameError('');
153
219
  setNameDialog({
154
220
  mode: 'add'
@@ -165,7 +231,10 @@ import { crmTaskCallScope } from "../model/task-routes.js";
165
231
  const submitName = async ()=>{
166
232
  if (!nameDialog) return;
167
233
  if (nameDialog.mode === 'add') {
168
- const move = addPicklistValue(picklist, draftName);
234
+ const move = addPicklistValue(definition, picklist, draftName, {
235
+ group: draftGroup || null,
236
+ meaning: draftMeaning || null
237
+ });
169
238
  if (move.ok === false) return void setNameError(move.error);
170
239
  setNameDialog(null);
171
240
  await save(move.picklist, `“${draftName.trim()}” added`);
@@ -204,7 +273,7 @@ import { crmTaskCallScope } from "../model/task-routes.js";
204
273
  const move = (from, to)=>void save(movePicklistValue(picklist, from, to), 'Order saved');
205
274
  const rowActions = (value)=>{
206
275
  const isDefault = picklist.defaultValueId === value.id;
207
- return [
276
+ const items = [
208
277
  {
209
278
  key: 'rename',
210
279
  label: 'Rename',
@@ -224,7 +293,7 @@ import { crmTaskCallScope } from "../model/task-routes.js";
224
293
  }),
225
294
  disabled: busy || !isDefault && !value.active,
226
295
  disabledReason: !value.active ? 'An inactive value cannot be the default' : undefined,
227
- onClick: ()=>void save(setPicklistDefault(picklist, isDefault ? null : value.id), isDefault ? 'Default cleared' : `New leads start as “${value.label}”`)
296
+ onClick: ()=>void save(setPicklistDefault(picklist, isDefault ? null : value.id), isDefault ? 'Default cleared' : `New ${nouns} start as “${value.label}”`)
228
297
  },
229
298
  {
230
299
  key: 'active',
@@ -235,8 +304,11 @@ import { crmTaskCallScope } from "../model/task-routes.js";
235
304
  }),
236
305
  disabled: busy,
237
306
  onClick: ()=>void save(setPicklistValueActive(picklist, value.id, !value.active), value.active ? `“${value.label}” deactivated` : `“${value.label}” activated`)
238
- },
239
- {
307
+ }
308
+ ];
309
+ // A standard value is every organization's: it is deactivated, never deleted.
310
+ if (!isStandard(value)) {
311
+ items.push({
240
312
  key: 'delete',
241
313
  label: 'Delete…',
242
314
  icon: /*#__PURE__*/ _jsx(MdiIcon, {
@@ -246,10 +318,13 @@ import { crmTaskCallScope } from "../model/task-routes.js";
246
318
  destructive: true,
247
319
  disabled: busy,
248
320
  onClick: ()=>openDelete(value)
249
- }
250
- ];
321
+ });
322
+ }
323
+ return items;
251
324
  };
252
- const replacements = crmPicklistActiveValues(picklist).filter((value)=>value.id !== (deleting == null ? void 0 : deleting.id));
325
+ const replacements = deleting ? picklistReplacements(definition, picklist, deleting.id) : [];
326
+ const columns = 4 + (groups.length ? 1 : 0) + (meanings.length ? 1 : 0);
327
+ const heldBy = sentenceList(holders.map(([, many])=>many)).replace(/^./, (letter)=>letter.toUpperCase());
253
328
  return /*#__PURE__*/ _jsxs(Stack, {
254
329
  spacing: 1.5,
255
330
  children: [
@@ -271,12 +346,12 @@ import { crmTaskCallScope } from "../model/task-routes.js";
271
346
  children: [
272
347
  /*#__PURE__*/ _jsx(Typography, {
273
348
  variant: "subtitle1",
274
- children: 'Lead source values'
349
+ children: `${definition.label} values`
275
350
  }),
276
351
  /*#__PURE__*/ _jsx(Typography, {
277
352
  variant: "body2",
278
353
  color: "text.secondary",
279
- children: 'The choices in every lead’s Lead source select, in this order. ' + 'An import or an API write naming anything else is refused. ' + 'A deactivated value stays on the records that hold it.'
354
+ children: (suggestions ? `The suggestions every ${noun}’s ${definition.label} offers, in this order. ` + 'Any text may still be typed, and renaming or deleting a suggestion ' + `changes no ${noun}. ` : `The choices in every ${noun}’s ${definition.label} select, in this order. ` + (definition.restricted ? 'An import or an API write naming anything else is refused. ' : '') + 'A deactivated value stays on the records that hold it. ') + 'Standard values come with every organization and cannot be deleted; ' + 'add your own beside them.'
280
355
  })
281
356
  ]
282
357
  }),
@@ -306,7 +381,7 @@ import { crmTaskCallScope } from "../model/task-routes.js";
306
381
  }),
307
382
  !ready ? null : /*#__PURE__*/ _jsxs(ScrollTable, {
308
383
  size: "small",
309
- "aria-label": "Lead source values",
384
+ "aria-label": `${definition.label} values`,
310
385
  children: [
311
386
  /*#__PURE__*/ _jsx(TableHead, {
312
387
  children: /*#__PURE__*/ _jsxs(TableRow, {
@@ -320,6 +395,12 @@ import { crmTaskCallScope } from "../model/task-routes.js";
320
395
  /*#__PURE__*/ _jsx(TableCell, {
321
396
  children: 'Value'
322
397
  }),
398
+ groups.length ? /*#__PURE__*/ _jsx(TableCell, {
399
+ children: 'Group'
400
+ }) : null,
401
+ meanings.length ? /*#__PURE__*/ _jsx(TableCell, {
402
+ children: 'Means'
403
+ }) : null,
323
404
  /*#__PURE__*/ _jsx(TableCell, {
324
405
  children: 'Status'
325
406
  }),
@@ -333,15 +414,17 @@ import { crmTaskCallScope } from "../model/task-routes.js";
333
414
  children: [
334
415
  picklist.values.length === 0 ? /*#__PURE__*/ _jsx(TableRow, {
335
416
  children: /*#__PURE__*/ _jsx(TableCell, {
336
- colSpan: 4,
417
+ colSpan: columns,
337
418
  children: /*#__PURE__*/ _jsx(Typography, {
338
419
  variant: "body2",
339
420
  color: "text.secondary",
340
- children: 'No values yet. Add one, and every lead can be given it.'
421
+ children: `No values yet. Add one, and every ${noun} can be given it.`
341
422
  })
342
423
  })
343
424
  }) : null,
344
- picklist.values.map((value, index)=>/*#__PURE__*/ _jsxs(TableRow, {
425
+ picklist.values.map((value, index)=>{
426
+ var _value_group;
427
+ return /*#__PURE__*/ _jsxs(TableRow, {
345
428
  hover: true,
346
429
  // Native drag and drop for a pointer; the arrows beside the
347
430
  // handle are the same move for a keyboard or a touch screen.
@@ -415,12 +498,70 @@ import { crmTaskCallScope } from "../model/task-routes.js";
415
498
  ]
416
499
  })
417
500
  }),
501
+ /*#__PURE__*/ _jsx(TableCell, {
502
+ children: /*#__PURE__*/ _jsxs(Stack, {
503
+ direction: "row",
504
+ spacing: 1,
505
+ sx: {
506
+ alignItems: 'center'
507
+ },
508
+ children: [
509
+ /*#__PURE__*/ _jsx(Typography, {
510
+ variant: "body2",
511
+ children: value.label
512
+ }),
513
+ isStandard(value) ? /*#__PURE__*/ _jsx(Chip, {
514
+ size: "small",
515
+ variant: "outlined",
516
+ label: "Standard"
517
+ }) : null
518
+ ]
519
+ })
520
+ }),
521
+ groups.length ? /*#__PURE__*/ _jsx(TableCell, {
522
+ sx: {
523
+ minWidth: 150
524
+ },
525
+ children: /*#__PURE__*/ _jsxs(TextField, {
526
+ select: true,
527
+ size: "small",
528
+ variant: "standard",
529
+ value: (_value_group = value.group) != null ? _value_group : '',
530
+ disabled: busy || !orgId,
531
+ onChange: (event)=>{
532
+ var _groups_find;
533
+ const group = String(event.target.value) || null;
534
+ const name = (_groups_find = groups.find((entry)=>entry.id === group)) == null ? void 0 : _groups_find.label;
535
+ void save(setPicklistValueGroup(definition, picklist, value.id, group), name ? `“${value.label}” is ${name}` : `“${value.label}” has no group`);
536
+ },
537
+ fullWidth: true,
538
+ slotProps: {
539
+ select: {
540
+ displayEmpty: true,
541
+ 'aria-label': `Group of ${value.label}`
542
+ }
543
+ },
544
+ children: [
545
+ /*#__PURE__*/ _jsx(MenuItem, {
546
+ value: "",
547
+ children: 'None'
548
+ }),
549
+ groups.map((group)=>/*#__PURE__*/ _jsx(MenuItem, {
550
+ value: group.id,
551
+ children: group.label
552
+ }, group.id))
553
+ ]
554
+ })
555
+ }) : null,
556
+ meanings.length ? // What the value means to the CRM: fixed for a standard value, and
557
+ // chosen when an added one is made.
418
558
  /*#__PURE__*/ _jsx(TableCell, {
419
559
  children: /*#__PURE__*/ _jsx(Typography, {
420
560
  variant: "body2",
421
- children: value.label
561
+ color: value.meaning ? 'text.primary' : 'text.secondary',
562
+ children: value.meaning ? picklistMeaningLabel(definition, value.meaning) : '—'
422
563
  })
423
- }),
564
+ }) : null,
424
565
  /*#__PURE__*/ _jsx(TableCell, {
425
566
  children: /*#__PURE__*/ _jsxs(Stack, {
426
567
  direction: "row",
@@ -461,7 +602,8 @@ import { crmTaskCallScope } from "../model/task-routes.js";
461
602
  })
462
603
  })
463
604
  ]
464
- }, value.id))
605
+ }, value.id);
606
+ })
465
607
  ]
466
608
  })
467
609
  ]
@@ -469,7 +611,7 @@ import { crmTaskCallScope } from "../model/task-routes.js";
469
611
  ready && !stored ? /*#__PURE__*/ _jsx(Typography, {
470
612
  variant: "caption",
471
613
  color: "text.secondary",
472
- children: 'This is the starter list. Your first change here makes it your organization’s own.'
614
+ children: 'These are the standard values. Your first change here makes the list your ' + 'organization’s own.'
473
615
  }) : null,
474
616
  /*#__PURE__*/ _jsxs(Dialog, {
475
617
  open: nameDialog !== null,
@@ -478,7 +620,7 @@ import { crmTaskCallScope } from "../model/task-routes.js";
478
620
  maxWidth: "xs",
479
621
  children: [
480
622
  /*#__PURE__*/ _jsx(DialogTitle, {
481
- children: (nameDialog == null ? void 0 : nameDialog.mode) === 'rename' ? `Rename “${nameDialog.value.label}”` : 'Add a lead source'
623
+ children: (nameDialog == null ? void 0 : nameDialog.mode) === 'rename' ? `Rename “${nameDialog.value.label}”` : `Add a ${field}`
482
624
  }),
483
625
  /*#__PURE__*/ _jsx(DialogContent, {
484
626
  children: /*#__PURE__*/ _jsxs(Stack, {
@@ -487,9 +629,9 @@ import { crmTaskCallScope } from "../model/task-routes.js";
487
629
  pt: 1
488
630
  },
489
631
  children: [
490
- (nameDialog == null ? void 0 : nameDialog.mode) === 'rename' ? /*#__PURE__*/ _jsx(DialogContentText, {
632
+ (nameDialog == null ? void 0 : nameDialog.mode) === 'rename' && !suggestions ? /*#__PURE__*/ _jsx(DialogContentText, {
491
633
  variant: "body2",
492
- children: 'Every lead and contact holding this value is updated to the new name.'
634
+ children: `Every ${sentenceList(holders.map(([one])=>one))} holding this value ` + 'is updated to the new name.'
493
635
  }) : null,
494
636
  /*#__PURE__*/ _jsx(TextField, {
495
637
  size: "small",
@@ -511,7 +653,48 @@ import { crmTaskCallScope } from "../model/task-routes.js";
511
653
  },
512
654
  autoFocus: true,
513
655
  fullWidth: true
514
- })
656
+ }),
657
+ (nameDialog == null ? void 0 : nameDialog.mode) === 'add' && groups.length ? /*#__PURE__*/ _jsxs(TextField, {
658
+ select: true,
659
+ size: "small",
660
+ label: "Group",
661
+ value: draftGroup,
662
+ onChange: (event)=>setDraftGroup(String(event.target.value)),
663
+ fullWidth: true,
664
+ slotProps: {
665
+ select: {
666
+ displayEmpty: true
667
+ },
668
+ inputLabel: {
669
+ shrink: true
670
+ }
671
+ },
672
+ children: [
673
+ /*#__PURE__*/ _jsx(MenuItem, {
674
+ value: "",
675
+ children: 'None'
676
+ }),
677
+ groups.map((group)=>/*#__PURE__*/ _jsx(MenuItem, {
678
+ value: group.id,
679
+ children: group.label
680
+ }, group.id))
681
+ ]
682
+ }) : null,
683
+ (nameDialog == null ? void 0 : nameDialog.mode) === 'add' && meanings.length ? /*#__PURE__*/ _jsx(TextField, {
684
+ select: true,
685
+ size: "small",
686
+ label: "Means",
687
+ value: draftMeaning,
688
+ onChange: (event)=>{
689
+ setDraftMeaning(String(event.target.value));
690
+ setNameError('');
691
+ },
692
+ fullWidth: true,
693
+ children: addableMeanings.map((meaning)=>/*#__PURE__*/ _jsx(MenuItem, {
694
+ value: meaning,
695
+ children: picklistMeaningLabel(definition, meaning)
696
+ }, meaning))
697
+ }) : null
515
698
  ]
516
699
  })
517
700
  }),
@@ -549,9 +732,9 @@ import { crmTaskCallScope } from "../model/task-routes.js";
549
732
  children: [
550
733
  /*#__PURE__*/ _jsx(DialogContentText, {
551
734
  variant: "body2",
552
- children: 'The value leaves the list for good. Leads and contacts that hold it ' + 'are moved to the value you pick here, or cleared. To keep it on ' + 'those records instead, deactivate it.'
735
+ children: suggestions ? `The suggestion leaves the list for good. No ${noun} changes.` : `The value leaves the list for good. ${heldBy} that hold it ` + (meanings.length ? 'are moved to the value you pick here, which means the same. ' : 'are moved to the value you pick here, or cleared. ') + 'To keep it on those records instead, deactivate it.'
553
736
  }),
554
- /*#__PURE__*/ _jsxs(TextField, {
737
+ suggestions ? null : /*#__PURE__*/ _jsxs(TextField, {
555
738
  select: true,
556
739
  size: "small",
557
740
  label: "Replace it on existing records with",
@@ -567,7 +750,7 @@ import { crmTaskCallScope } from "../model/task-routes.js";
567
750
  }
568
751
  },
569
752
  children: [
570
- /*#__PURE__*/ _jsx(MenuItem, {
753
+ meanings.length ? null : /*#__PURE__*/ _jsx(MenuItem, {
571
754
  value: "",
572
755
  children: 'None — clear it'
573
756
  }),
@@ -589,7 +772,7 @@ import { crmTaskCallScope } from "../model/task-routes.js";
589
772
  /*#__PURE__*/ _jsx(Button, {
590
773
  variant: "contained",
591
774
  color: "error",
592
- disabled: busy,
775
+ disabled: busy || meanings.length > 0 && !replaceWith,
593
776
  onClick: ()=>void submitDelete(),
594
777
  children: 'Delete value'
595
778
  })
@@ -600,7 +783,7 @@ import { crmTaskCallScope } from "../model/task-routes.js";
600
783
  ]
601
784
  });
602
785
  }
603
- LeadSourceValuesCard.displayName = 'LeadSourceValuesCard';
604
- export default LeadSourceValuesCard;
786
+ PicklistValuesCard.displayName = 'PicklistValuesCard';
787
+ export default PicklistValuesCard;
605
788
 
606
- //# sourceMappingURL=lead-source-values-card.js.map
789
+ //# sourceMappingURL=picklist-values-card.js.map