@rapidmx/crm-plugin 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (888) hide show
  1. package/LICENSE +382 -0
  2. package/README.md +210 -0
  3. package/apps/admin-crm/_layout.tsx +46 -0
  4. package/apps/admin-crm/index.tsx +16 -0
  5. package/apps/crm/_layout.tsx +46 -0
  6. package/apps/crm/automations/[uid].tsx +16 -0
  7. package/apps/crm/automations/index.tsx +16 -0
  8. package/apps/crm/campaigns/[uid].tsx +16 -0
  9. package/apps/crm/campaigns/index.tsx +16 -0
  10. package/apps/crm/companies/[uid].tsx +16 -0
  11. package/apps/crm/companies/index.tsx +16 -0
  12. package/apps/crm/contacts/[uid].tsx +16 -0
  13. package/apps/crm/deals/[uid].tsx +16 -0
  14. package/apps/crm/deals/index.tsx +16 -0
  15. package/apps/crm/forms/index.tsx +16 -0
  16. package/apps/crm/imports/index.tsx +16 -0
  17. package/apps/crm/index.tsx +16 -0
  18. package/apps/crm/integrations/index.tsx +16 -0
  19. package/apps/crm/lists/index.tsx +16 -0
  20. package/apps/crm/pipelines/index.tsx +16 -0
  21. package/apps/crm/reports/index.tsx +16 -0
  22. package/apps/crm/scoring/index.tsx +16 -0
  23. package/apps/crm/segments/index.tsx +16 -0
  24. package/apps/crm/settings/index.tsx +16 -0
  25. package/apps/crm/tasks/index.tsx +16 -0
  26. package/apps/crm/templates/[uid].tsx +16 -0
  27. package/apps/crm/templates/index.tsx +16 -0
  28. package/apps/f/[formUid].tsx +11 -0
  29. package/apps/f/_layout.tsx +33 -0
  30. package/apps/f/index.tsx +15 -0
  31. package/apps/shared/components/CrmShell.tsx +229 -0
  32. package/apps/shared/components/FilterBuilder.tsx +204 -0
  33. package/apps/shared/components/FormManager.tsx +326 -0
  34. package/apps/shared/components/ImportWizard.tsx +251 -0
  35. package/apps/shared/components/Integrations.tsx +401 -0
  36. package/apps/shared/components/ListManager.tsx +206 -0
  37. package/apps/shared/components/RecordDetail.tsx +444 -0
  38. package/apps/shared/components/RecordList.tsx +446 -0
  39. package/apps/shared/components/ScoringRules.tsx +262 -0
  40. package/apps/shared/components/SegmentManager.tsx +245 -0
  41. package/apps/shared/components/TaskList.tsx +140 -0
  42. package/apps/shared/components/TemplateList.tsx +170 -0
  43. package/apps/shared/components/WorkspaceSettings.tsx +503 -0
  44. package/apps/shared/components/admin/CrmAdmin.tsx +129 -0
  45. package/apps/shared/components/automations/AutomationEditor.tsx +530 -0
  46. package/apps/shared/components/automations/AutomationList.tsx +147 -0
  47. package/apps/shared/components/automations/StepInspector.tsx +403 -0
  48. package/apps/shared/components/automations/flowModel.ts +331 -0
  49. package/apps/shared/components/campaigns/CampaignEditor.tsx +471 -0
  50. package/apps/shared/components/campaigns/CampaignList.tsx +164 -0
  51. package/apps/shared/components/campaigns/CampaignPage.tsx +30 -0
  52. package/apps/shared/components/campaigns/CampaignReport.tsx +345 -0
  53. package/apps/shared/components/campaigns/campaignUi.tsx +33 -0
  54. package/apps/shared/components/deals/ContactDeals.tsx +40 -0
  55. package/apps/shared/components/deals/DealBoard.tsx +287 -0
  56. package/apps/shared/components/deals/DealDetail.tsx +363 -0
  57. package/apps/shared/components/deals/PipelineManager.tsx +207 -0
  58. package/apps/shared/components/deals/dealUi.ts +24 -0
  59. package/apps/shared/components/designer/BlockView.tsx +92 -0
  60. package/apps/shared/components/designer/Canvas.tsx +206 -0
  61. package/apps/shared/components/designer/Inspector.tsx +339 -0
  62. package/apps/shared/components/designer/LazyTextBlockEditor.tsx +68 -0
  63. package/apps/shared/components/designer/MergeTagPicker.tsx +31 -0
  64. package/apps/shared/components/designer/PreviewModal.tsx +119 -0
  65. package/apps/shared/components/designer/TemplateDesigner.tsx +408 -0
  66. package/apps/shared/components/designer/TestSendModal.tsx +75 -0
  67. package/apps/shared/components/designer/TextBlockEditor.tsx +122 -0
  68. package/apps/shared/components/designer/designModel.ts +276 -0
  69. package/apps/shared/components/public/PublicPages.tsx +343 -0
  70. package/apps/shared/components/public/honeypot.ts +7 -0
  71. package/apps/shared/components/reports/Charts.tsx +315 -0
  72. package/apps/shared/components/reports/Reports.tsx +198 -0
  73. package/apps/shared/crmApi.ts +1046 -0
  74. package/apps/shared/fields.ts +175 -0
  75. package/apps/shared/publicApi.ts +50 -0
  76. package/apps/subscriptions/[token].tsx +11 -0
  77. package/apps/subscriptions/_layout.tsx +33 -0
  78. package/apps/subscriptions/confirm/[token].tsx +11 -0
  79. package/apps/subscriptions/index.tsx +11 -0
  80. package/apps/subscriptions/unsubscribe/[token].tsx +11 -0
  81. package/dist/apps/admin-crm/_layout.d.ts +15 -0
  82. package/dist/apps/admin-crm/_layout.js +8 -0
  83. package/dist/apps/admin-crm/index.d.ts +4 -0
  84. package/dist/apps/admin-crm/index.js +7 -0
  85. package/dist/apps/crm/_layout.d.ts +15 -0
  86. package/dist/apps/crm/_layout.js +8 -0
  87. package/dist/apps/crm/automations/[uid].d.ts +8 -0
  88. package/dist/apps/crm/automations/[uid].js +7 -0
  89. package/dist/apps/crm/automations/index.d.ts +4 -0
  90. package/dist/apps/crm/automations/index.js +7 -0
  91. package/dist/apps/crm/campaigns/[uid].d.ts +8 -0
  92. package/dist/apps/crm/campaigns/[uid].js +7 -0
  93. package/dist/apps/crm/campaigns/index.d.ts +4 -0
  94. package/dist/apps/crm/campaigns/index.js +7 -0
  95. package/dist/apps/crm/companies/[uid].d.ts +8 -0
  96. package/dist/apps/crm/companies/[uid].js +7 -0
  97. package/dist/apps/crm/companies/index.d.ts +4 -0
  98. package/dist/apps/crm/companies/index.js +7 -0
  99. package/dist/apps/crm/contacts/[uid].d.ts +8 -0
  100. package/dist/apps/crm/contacts/[uid].js +7 -0
  101. package/dist/apps/crm/deals/[uid].d.ts +8 -0
  102. package/dist/apps/crm/deals/[uid].js +7 -0
  103. package/dist/apps/crm/deals/index.d.ts +4 -0
  104. package/dist/apps/crm/deals/index.js +7 -0
  105. package/dist/apps/crm/forms/index.d.ts +4 -0
  106. package/dist/apps/crm/forms/index.js +7 -0
  107. package/dist/apps/crm/imports/index.d.ts +4 -0
  108. package/dist/apps/crm/imports/index.js +7 -0
  109. package/dist/apps/crm/index.d.ts +4 -0
  110. package/dist/apps/crm/index.js +7 -0
  111. package/dist/apps/crm/integrations/index.d.ts +4 -0
  112. package/dist/apps/crm/integrations/index.js +7 -0
  113. package/dist/apps/crm/lists/index.d.ts +4 -0
  114. package/dist/apps/crm/lists/index.js +7 -0
  115. package/dist/apps/crm/pipelines/index.d.ts +4 -0
  116. package/dist/apps/crm/pipelines/index.js +7 -0
  117. package/dist/apps/crm/reports/index.d.ts +4 -0
  118. package/dist/apps/crm/reports/index.js +7 -0
  119. package/dist/apps/crm/scoring/index.d.ts +4 -0
  120. package/dist/apps/crm/scoring/index.js +7 -0
  121. package/dist/apps/crm/segments/index.d.ts +4 -0
  122. package/dist/apps/crm/segments/index.js +7 -0
  123. package/dist/apps/crm/settings/index.d.ts +4 -0
  124. package/dist/apps/crm/settings/index.js +7 -0
  125. package/dist/apps/crm/tasks/index.d.ts +4 -0
  126. package/dist/apps/crm/tasks/index.js +7 -0
  127. package/dist/apps/crm/templates/[uid].d.ts +8 -0
  128. package/dist/apps/crm/templates/[uid].js +7 -0
  129. package/dist/apps/crm/templates/index.d.ts +4 -0
  130. package/dist/apps/crm/templates/index.js +7 -0
  131. package/dist/apps/f/[formUid].d.ts +7 -0
  132. package/dist/apps/f/[formUid].js +6 -0
  133. package/dist/apps/f/_layout.d.ts +8 -0
  134. package/dist/apps/f/_layout.js +8 -0
  135. package/dist/apps/f/index.d.ts +3 -0
  136. package/dist/apps/f/index.js +6 -0
  137. package/dist/apps/shared/components/CrmShell.d.ts +39 -0
  138. package/dist/apps/shared/components/CrmShell.js +127 -0
  139. package/dist/apps/shared/components/FilterBuilder.d.ts +34 -0
  140. package/dist/apps/shared/components/FilterBuilder.js +101 -0
  141. package/dist/apps/shared/components/FormManager.d.ts +7 -0
  142. package/dist/apps/shared/components/FormManager.js +132 -0
  143. package/dist/apps/shared/components/ImportWizard.d.ts +8 -0
  144. package/dist/apps/shared/components/ImportWizard.js +105 -0
  145. package/dist/apps/shared/components/Integrations.d.ts +13 -0
  146. package/dist/apps/shared/components/Integrations.js +164 -0
  147. package/dist/apps/shared/components/ListManager.d.ts +6 -0
  148. package/dist/apps/shared/components/ListManager.js +95 -0
  149. package/dist/apps/shared/components/RecordDetail.d.ts +30 -0
  150. package/dist/apps/shared/components/RecordDetail.js +244 -0
  151. package/dist/apps/shared/components/RecordList.d.ts +13 -0
  152. package/dist/apps/shared/components/RecordList.js +214 -0
  153. package/dist/apps/shared/components/ScoringRules.d.ts +13 -0
  154. package/dist/apps/shared/components/ScoringRules.js +128 -0
  155. package/dist/apps/shared/components/SegmentManager.d.ts +10 -0
  156. package/dist/apps/shared/components/SegmentManager.js +119 -0
  157. package/dist/apps/shared/components/TaskList.d.ts +3 -0
  158. package/dist/apps/shared/components/TaskList.js +62 -0
  159. package/dist/apps/shared/components/TemplateList.d.ts +3 -0
  160. package/dist/apps/shared/components/TemplateList.js +81 -0
  161. package/dist/apps/shared/components/WorkspaceSettings.d.ts +6 -0
  162. package/dist/apps/shared/components/WorkspaceSettings.js +239 -0
  163. package/dist/apps/shared/components/admin/CrmAdmin.d.ts +9 -0
  164. package/dist/apps/shared/components/admin/CrmAdmin.js +56 -0
  165. package/dist/apps/shared/components/automations/AutomationEditor.d.ts +15 -0
  166. package/dist/apps/shared/components/automations/AutomationEditor.js +219 -0
  167. package/dist/apps/shared/components/automations/AutomationList.d.ts +3 -0
  168. package/dist/apps/shared/components/automations/AutomationList.js +65 -0
  169. package/dist/apps/shared/components/automations/StepInspector.d.ts +40 -0
  170. package/dist/apps/shared/components/automations/StepInspector.js +177 -0
  171. package/dist/apps/shared/components/automations/flowModel.d.ts +67 -0
  172. package/dist/apps/shared/components/automations/flowModel.js +292 -0
  173. package/dist/apps/shared/components/campaigns/CampaignEditor.d.ts +11 -0
  174. package/dist/apps/shared/components/campaigns/CampaignEditor.js +163 -0
  175. package/dist/apps/shared/components/campaigns/CampaignList.d.ts +3 -0
  176. package/dist/apps/shared/components/campaigns/CampaignList.js +80 -0
  177. package/dist/apps/shared/components/campaigns/CampaignPage.d.ts +5 -0
  178. package/dist/apps/shared/components/campaigns/CampaignPage.js +24 -0
  179. package/dist/apps/shared/components/campaigns/CampaignReport.d.ts +13 -0
  180. package/dist/apps/shared/components/campaigns/CampaignReport.js +119 -0
  181. package/dist/apps/shared/components/campaigns/campaignUi.d.ts +10 -0
  182. package/dist/apps/shared/components/campaigns/campaignUi.js +24 -0
  183. package/dist/apps/shared/components/deals/ContactDeals.d.ts +5 -0
  184. package/dist/apps/shared/components/deals/ContactDeals.js +18 -0
  185. package/dist/apps/shared/components/deals/DealBoard.d.ts +7 -0
  186. package/dist/apps/shared/components/deals/DealBoard.js +134 -0
  187. package/dist/apps/shared/components/deals/DealDetail.d.ts +8 -0
  188. package/dist/apps/shared/components/deals/DealDetail.js +148 -0
  189. package/dist/apps/shared/components/deals/PipelineManager.d.ts +7 -0
  190. package/dist/apps/shared/components/deals/PipelineManager.js +62 -0
  191. package/dist/apps/shared/components/deals/dealUi.d.ts +7 -0
  192. package/dist/apps/shared/components/deals/dealUi.js +17 -0
  193. package/dist/apps/shared/components/designer/BlockView.d.ts +10 -0
  194. package/dist/apps/shared/components/designer/BlockView.js +37 -0
  195. package/dist/apps/shared/components/designer/Canvas.d.ts +31 -0
  196. package/dist/apps/shared/components/designer/Canvas.js +71 -0
  197. package/dist/apps/shared/components/designer/Inspector.d.ts +27 -0
  198. package/dist/apps/shared/components/designer/Inspector.js +102 -0
  199. package/dist/apps/shared/components/designer/LazyTextBlockEditor.d.ts +7 -0
  200. package/dist/apps/shared/components/designer/LazyTextBlockEditor.js +42 -0
  201. package/dist/apps/shared/components/designer/MergeTagPicker.d.ts +11 -0
  202. package/dist/apps/shared/components/designer/MergeTagPicker.js +15 -0
  203. package/dist/apps/shared/components/designer/PreviewModal.d.ts +15 -0
  204. package/dist/apps/shared/components/designer/PreviewModal.js +50 -0
  205. package/dist/apps/shared/components/designer/TemplateDesigner.d.ts +10 -0
  206. package/dist/apps/shared/components/designer/TemplateDesigner.js +194 -0
  207. package/dist/apps/shared/components/designer/TestSendModal.d.ts +11 -0
  208. package/dist/apps/shared/components/designer/TestSendModal.js +35 -0
  209. package/dist/apps/shared/components/designer/TextBlockEditor.d.ts +16 -0
  210. package/dist/apps/shared/components/designer/TextBlockEditor.js +81 -0
  211. package/dist/apps/shared/components/designer/designModel.d.ts +86 -0
  212. package/dist/apps/shared/components/designer/designModel.js +230 -0
  213. package/dist/apps/shared/components/public/PublicPages.d.ts +29 -0
  214. package/dist/apps/shared/components/public/PublicPages.js +155 -0
  215. package/dist/apps/shared/components/public/honeypot.d.ts +2 -0
  216. package/dist/apps/shared/components/public/honeypot.js +6 -0
  217. package/dist/apps/shared/components/reports/Charts.d.ts +32 -0
  218. package/dist/apps/shared/components/reports/Charts.js +121 -0
  219. package/dist/apps/shared/components/reports/Reports.d.ts +9 -0
  220. package/dist/apps/shared/components/reports/Reports.js +61 -0
  221. package/dist/apps/shared/crmApi.d.ts +909 -0
  222. package/dist/apps/shared/crmApi.js +240 -0
  223. package/dist/apps/shared/fields.d.ts +45 -0
  224. package/dist/apps/shared/fields.js +146 -0
  225. package/dist/apps/shared/publicApi.d.ts +48 -0
  226. package/dist/apps/shared/publicApi.js +17 -0
  227. package/dist/apps/subscriptions/[token].d.ts +7 -0
  228. package/dist/apps/subscriptions/[token].js +6 -0
  229. package/dist/apps/subscriptions/_layout.d.ts +8 -0
  230. package/dist/apps/subscriptions/_layout.js +8 -0
  231. package/dist/apps/subscriptions/confirm/[token].d.ts +7 -0
  232. package/dist/apps/subscriptions/confirm/[token].js +6 -0
  233. package/dist/apps/subscriptions/index.d.ts +3 -0
  234. package/dist/apps/subscriptions/index.js +6 -0
  235. package/dist/apps/subscriptions/unsubscribe/[token].d.ts +7 -0
  236. package/dist/apps/subscriptions/unsubscribe/[token].js +6 -0
  237. package/dist/lib/automation/Dates.js +85 -0
  238. package/dist/lib/automation/Dates.js.map +1 -0
  239. package/dist/lib/automation/Engine.js +384 -0
  240. package/dist/lib/automation/Engine.js.map +1 -0
  241. package/dist/lib/automation/Events.js +46 -0
  242. package/dist/lib/automation/Events.js.map +1 -0
  243. package/dist/lib/automation/Graph.js +296 -0
  244. package/dist/lib/automation/Graph.js.map +1 -0
  245. package/dist/lib/filters/Filter.js +343 -0
  246. package/dist/lib/filters/Filter.js.map +1 -0
  247. package/dist/lib/filters/fields.js +71 -0
  248. package/dist/lib/filters/fields.js.map +1 -0
  249. package/dist/lib/index.js +86 -0
  250. package/dist/lib/index.js.map +1 -0
  251. package/dist/lib/jobs/AutomationRunJob.js +110 -0
  252. package/dist/lib/jobs/AutomationRunJob.js.map +1 -0
  253. package/dist/lib/jobs/AutomationTriggerJob.js +126 -0
  254. package/dist/lib/jobs/AutomationTriggerJob.js.map +1 -0
  255. package/dist/lib/jobs/CampaignJob.js +285 -0
  256. package/dist/lib/jobs/CampaignJob.js.map +1 -0
  257. package/dist/lib/jobs/CrmImportJob.js +218 -0
  258. package/dist/lib/jobs/CrmImportJob.js.map +1 -0
  259. package/dist/lib/jobs/CrmJobBase.js +75 -0
  260. package/dist/lib/jobs/CrmJobBase.js.map +1 -0
  261. package/dist/lib/jobs/CrmMailEventJob.js +232 -0
  262. package/dist/lib/jobs/CrmMailEventJob.js.map +1 -0
  263. package/dist/lib/jobs/DateTriggerJob.js +155 -0
  264. package/dist/lib/jobs/DateTriggerJob.js.map +1 -0
  265. package/dist/lib/jobs/ScoringJob.js +75 -0
  266. package/dist/lib/jobs/ScoringJob.js.map +1 -0
  267. package/dist/lib/jobs/SegmentRefreshJob.js +84 -0
  268. package/dist/lib/jobs/SegmentRefreshJob.js.map +1 -0
  269. package/dist/lib/jobs/SendDispatchJob.js +277 -0
  270. package/dist/lib/jobs/SendDispatchJob.js.map +1 -0
  271. package/dist/lib/jobs/TaskReminderJob.js +70 -0
  272. package/dist/lib/jobs/TaskReminderJob.js.map +1 -0
  273. package/dist/lib/jobs/WebhookDeliveryJob.js +126 -0
  274. package/dist/lib/jobs/WebhookDeliveryJob.js.map +1 -0
  275. package/dist/lib/jobs/mongo/AutomationRunJobMongo.js +12 -0
  276. package/dist/lib/jobs/mongo/AutomationRunJobMongo.js.map +1 -0
  277. package/dist/lib/jobs/mongo/AutomationTriggerJobMongo.js +10 -0
  278. package/dist/lib/jobs/mongo/AutomationTriggerJobMongo.js.map +1 -0
  279. package/dist/lib/jobs/mongo/CampaignJobMongo.js +10 -0
  280. package/dist/lib/jobs/mongo/CampaignJobMongo.js.map +1 -0
  281. package/dist/lib/jobs/mongo/CrmImportJobMongo.js +14 -0
  282. package/dist/lib/jobs/mongo/CrmImportJobMongo.js.map +1 -0
  283. package/dist/lib/jobs/mongo/CrmMailEventJobMongo.js +10 -0
  284. package/dist/lib/jobs/mongo/CrmMailEventJobMongo.js.map +1 -0
  285. package/dist/lib/jobs/mongo/DateTriggerJobMongo.js +10 -0
  286. package/dist/lib/jobs/mongo/DateTriggerJobMongo.js.map +1 -0
  287. package/dist/lib/jobs/mongo/ScoringJobMongo.js +10 -0
  288. package/dist/lib/jobs/mongo/ScoringJobMongo.js.map +1 -0
  289. package/dist/lib/jobs/mongo/SegmentRefreshJobMongo.js +10 -0
  290. package/dist/lib/jobs/mongo/SegmentRefreshJobMongo.js.map +1 -0
  291. package/dist/lib/jobs/mongo/SendDispatchJobMongo.js +10 -0
  292. package/dist/lib/jobs/mongo/SendDispatchJobMongo.js.map +1 -0
  293. package/dist/lib/jobs/mongo/TaskReminderJobMongo.js +10 -0
  294. package/dist/lib/jobs/mongo/TaskReminderJobMongo.js.map +1 -0
  295. package/dist/lib/jobs/mongo/WebhookDeliveryJobMongo.js +10 -0
  296. package/dist/lib/jobs/mongo/WebhookDeliveryJobMongo.js.map +1 -0
  297. package/dist/lib/jobs/sql/AutomationRunJobSQL.js +12 -0
  298. package/dist/lib/jobs/sql/AutomationRunJobSQL.js.map +1 -0
  299. package/dist/lib/jobs/sql/AutomationTriggerJobSQL.js +10 -0
  300. package/dist/lib/jobs/sql/AutomationTriggerJobSQL.js.map +1 -0
  301. package/dist/lib/jobs/sql/CampaignJobSQL.js +10 -0
  302. package/dist/lib/jobs/sql/CampaignJobSQL.js.map +1 -0
  303. package/dist/lib/jobs/sql/CrmImportJobSQL.js +14 -0
  304. package/dist/lib/jobs/sql/CrmImportJobSQL.js.map +1 -0
  305. package/dist/lib/jobs/sql/CrmMailEventJobSQL.js +10 -0
  306. package/dist/lib/jobs/sql/CrmMailEventJobSQL.js.map +1 -0
  307. package/dist/lib/jobs/sql/DateTriggerJobSQL.js +10 -0
  308. package/dist/lib/jobs/sql/DateTriggerJobSQL.js.map +1 -0
  309. package/dist/lib/jobs/sql/ScoringJobSQL.js +10 -0
  310. package/dist/lib/jobs/sql/ScoringJobSQL.js.map +1 -0
  311. package/dist/lib/jobs/sql/SegmentRefreshJobSQL.js +10 -0
  312. package/dist/lib/jobs/sql/SegmentRefreshJobSQL.js.map +1 -0
  313. package/dist/lib/jobs/sql/SendDispatchJobSQL.js +10 -0
  314. package/dist/lib/jobs/sql/SendDispatchJobSQL.js.map +1 -0
  315. package/dist/lib/jobs/sql/TaskReminderJobSQL.js +10 -0
  316. package/dist/lib/jobs/sql/TaskReminderJobSQL.js.map +1 -0
  317. package/dist/lib/jobs/sql/WebhookDeliveryJobSQL.js +10 -0
  318. package/dist/lib/jobs/sql/WebhookDeliveryJobSQL.js.map +1 -0
  319. package/dist/lib/models/CrmModelClasses.js +44 -0
  320. package/dist/lib/models/CrmModelClasses.js.map +1 -0
  321. package/dist/lib/models/mongo/ApiKeyMongo.js +105 -0
  322. package/dist/lib/models/mongo/ApiKeyMongo.js.map +1 -0
  323. package/dist/lib/models/mongo/AutomationMongo.js +126 -0
  324. package/dist/lib/models/mongo/AutomationMongo.js.map +1 -0
  325. package/dist/lib/models/mongo/AutomationVersionMongo.js +82 -0
  326. package/dist/lib/models/mongo/AutomationVersionMongo.js.map +1 -0
  327. package/dist/lib/models/mongo/CampaignMongo.js +211 -0
  328. package/dist/lib/models/mongo/CampaignMongo.js.map +1 -0
  329. package/dist/lib/models/mongo/CrmCompanyMongo.js +126 -0
  330. package/dist/lib/models/mongo/CrmCompanyMongo.js.map +1 -0
  331. package/dist/lib/models/mongo/CrmContactMongo.js +156 -0
  332. package/dist/lib/models/mongo/CrmContactMongo.js.map +1 -0
  333. package/dist/lib/models/mongo/CrmEventMongo.js +92 -0
  334. package/dist/lib/models/mongo/CrmEventMongo.js.map +1 -0
  335. package/dist/lib/models/mongo/CrmFormMongo.js +139 -0
  336. package/dist/lib/models/mongo/CrmFormMongo.js.map +1 -0
  337. package/dist/lib/models/mongo/CrmImportMongo.js +190 -0
  338. package/dist/lib/models/mongo/CrmImportMongo.js.map +1 -0
  339. package/dist/lib/models/mongo/CrmNoteMongo.js +89 -0
  340. package/dist/lib/models/mongo/CrmNoteMongo.js.map +1 -0
  341. package/dist/lib/models/mongo/CrmSettingMongo.js +60 -0
  342. package/dist/lib/models/mongo/CrmSettingMongo.js.map +1 -0
  343. package/dist/lib/models/mongo/CrmTaskMongo.js +136 -0
  344. package/dist/lib/models/mongo/CrmTaskMongo.js.map +1 -0
  345. package/dist/lib/models/mongo/DealMongo.js +163 -0
  346. package/dist/lib/models/mongo/DealMongo.js.map +1 -0
  347. package/dist/lib/models/mongo/EmailTemplateMongo.js +90 -0
  348. package/dist/lib/models/mongo/EmailTemplateMongo.js.map +1 -0
  349. package/dist/lib/models/mongo/EngagementEventMongo.js +113 -0
  350. package/dist/lib/models/mongo/EngagementEventMongo.js.map +1 -0
  351. package/dist/lib/models/mongo/EnrollmentMongo.js +150 -0
  352. package/dist/lib/models/mongo/EnrollmentMongo.js.map +1 -0
  353. package/dist/lib/models/mongo/MailingListMongo.js +104 -0
  354. package/dist/lib/models/mongo/MailingListMongo.js.map +1 -0
  355. package/dist/lib/models/mongo/OutboundSendMongo.js +265 -0
  356. package/dist/lib/models/mongo/OutboundSendMongo.js.map +1 -0
  357. package/dist/lib/models/mongo/PipelineMongo.js +74 -0
  358. package/dist/lib/models/mongo/PipelineMongo.js.map +1 -0
  359. package/dist/lib/models/mongo/PropertyDefinitionMongo.js +105 -0
  360. package/dist/lib/models/mongo/PropertyDefinitionMongo.js.map +1 -0
  361. package/dist/lib/models/mongo/PropertyValueMongo.js +101 -0
  362. package/dist/lib/models/mongo/PropertyValueMongo.js.map +1 -0
  363. package/dist/lib/models/mongo/SavedBlockMongo.js +67 -0
  364. package/dist/lib/models/mongo/SavedBlockMongo.js.map +1 -0
  365. package/dist/lib/models/mongo/ScoringRuleMongo.js +112 -0
  366. package/dist/lib/models/mongo/ScoringRuleMongo.js.map +1 -0
  367. package/dist/lib/models/mongo/SegmentMongo.js +113 -0
  368. package/dist/lib/models/mongo/SegmentMongo.js.map +1 -0
  369. package/dist/lib/models/mongo/SubscriptionMongo.js +114 -0
  370. package/dist/lib/models/mongo/SubscriptionMongo.js.map +1 -0
  371. package/dist/lib/models/mongo/SuppressionMongo.js +77 -0
  372. package/dist/lib/models/mongo/SuppressionMongo.js.map +1 -0
  373. package/dist/lib/models/mongo/TimelineEventMongo.js +112 -0
  374. package/dist/lib/models/mongo/TimelineEventMongo.js.map +1 -0
  375. package/dist/lib/models/mongo/WebhookDeliveryMongo.js +128 -0
  376. package/dist/lib/models/mongo/WebhookDeliveryMongo.js.map +1 -0
  377. package/dist/lib/models/mongo/WebhookEndpointMongo.js +118 -0
  378. package/dist/lib/models/mongo/WebhookEndpointMongo.js.map +1 -0
  379. package/dist/lib/models/mongo/WorkspaceMemberMongo.js +92 -0
  380. package/dist/lib/models/mongo/WorkspaceMemberMongo.js.map +1 -0
  381. package/dist/lib/models/mongo/WorkspaceMongo.js +117 -0
  382. package/dist/lib/models/mongo/WorkspaceMongo.js.map +1 -0
  383. package/dist/lib/models/mongo/WorkspaceSenderMongo.js +100 -0
  384. package/dist/lib/models/mongo/WorkspaceSenderMongo.js.map +1 -0
  385. package/dist/lib/models/mongo/index.js +74 -0
  386. package/dist/lib/models/mongo/index.js.map +1 -0
  387. package/dist/lib/models/sql/ApiKeySQL.js +105 -0
  388. package/dist/lib/models/sql/ApiKeySQL.js.map +1 -0
  389. package/dist/lib/models/sql/AutomationSQL.js +126 -0
  390. package/dist/lib/models/sql/AutomationSQL.js.map +1 -0
  391. package/dist/lib/models/sql/AutomationVersionSQL.js +82 -0
  392. package/dist/lib/models/sql/AutomationVersionSQL.js.map +1 -0
  393. package/dist/lib/models/sql/CampaignSQL.js +211 -0
  394. package/dist/lib/models/sql/CampaignSQL.js.map +1 -0
  395. package/dist/lib/models/sql/CrmCompanySQL.js +126 -0
  396. package/dist/lib/models/sql/CrmCompanySQL.js.map +1 -0
  397. package/dist/lib/models/sql/CrmContactSQL.js +156 -0
  398. package/dist/lib/models/sql/CrmContactSQL.js.map +1 -0
  399. package/dist/lib/models/sql/CrmEventSQL.js +92 -0
  400. package/dist/lib/models/sql/CrmEventSQL.js.map +1 -0
  401. package/dist/lib/models/sql/CrmFormSQL.js +139 -0
  402. package/dist/lib/models/sql/CrmFormSQL.js.map +1 -0
  403. package/dist/lib/models/sql/CrmImportSQL.js +190 -0
  404. package/dist/lib/models/sql/CrmImportSQL.js.map +1 -0
  405. package/dist/lib/models/sql/CrmNoteSQL.js +89 -0
  406. package/dist/lib/models/sql/CrmNoteSQL.js.map +1 -0
  407. package/dist/lib/models/sql/CrmSettingSQL.js +60 -0
  408. package/dist/lib/models/sql/CrmSettingSQL.js.map +1 -0
  409. package/dist/lib/models/sql/CrmTaskSQL.js +136 -0
  410. package/dist/lib/models/sql/CrmTaskSQL.js.map +1 -0
  411. package/dist/lib/models/sql/DealSQL.js +163 -0
  412. package/dist/lib/models/sql/DealSQL.js.map +1 -0
  413. package/dist/lib/models/sql/EmailTemplateSQL.js +90 -0
  414. package/dist/lib/models/sql/EmailTemplateSQL.js.map +1 -0
  415. package/dist/lib/models/sql/EngagementEventSQL.js +113 -0
  416. package/dist/lib/models/sql/EngagementEventSQL.js.map +1 -0
  417. package/dist/lib/models/sql/EnrollmentSQL.js +150 -0
  418. package/dist/lib/models/sql/EnrollmentSQL.js.map +1 -0
  419. package/dist/lib/models/sql/MailingListSQL.js +104 -0
  420. package/dist/lib/models/sql/MailingListSQL.js.map +1 -0
  421. package/dist/lib/models/sql/OutboundSendSQL.js +265 -0
  422. package/dist/lib/models/sql/OutboundSendSQL.js.map +1 -0
  423. package/dist/lib/models/sql/PipelineSQL.js +74 -0
  424. package/dist/lib/models/sql/PipelineSQL.js.map +1 -0
  425. package/dist/lib/models/sql/PropertyDefinitionSQL.js +105 -0
  426. package/dist/lib/models/sql/PropertyDefinitionSQL.js.map +1 -0
  427. package/dist/lib/models/sql/PropertyValueSQL.js +101 -0
  428. package/dist/lib/models/sql/PropertyValueSQL.js.map +1 -0
  429. package/dist/lib/models/sql/SavedBlockSQL.js +67 -0
  430. package/dist/lib/models/sql/SavedBlockSQL.js.map +1 -0
  431. package/dist/lib/models/sql/ScoringRuleSQL.js +112 -0
  432. package/dist/lib/models/sql/ScoringRuleSQL.js.map +1 -0
  433. package/dist/lib/models/sql/SegmentSQL.js +113 -0
  434. package/dist/lib/models/sql/SegmentSQL.js.map +1 -0
  435. package/dist/lib/models/sql/SubscriptionSQL.js +114 -0
  436. package/dist/lib/models/sql/SubscriptionSQL.js.map +1 -0
  437. package/dist/lib/models/sql/SuppressionSQL.js +77 -0
  438. package/dist/lib/models/sql/SuppressionSQL.js.map +1 -0
  439. package/dist/lib/models/sql/TimelineEventSQL.js +112 -0
  440. package/dist/lib/models/sql/TimelineEventSQL.js.map +1 -0
  441. package/dist/lib/models/sql/WebhookDeliverySQL.js +128 -0
  442. package/dist/lib/models/sql/WebhookDeliverySQL.js.map +1 -0
  443. package/dist/lib/models/sql/WebhookEndpointSQL.js +118 -0
  444. package/dist/lib/models/sql/WebhookEndpointSQL.js.map +1 -0
  445. package/dist/lib/models/sql/WorkspaceMemberSQL.js +92 -0
  446. package/dist/lib/models/sql/WorkspaceMemberSQL.js.map +1 -0
  447. package/dist/lib/models/sql/WorkspaceSQL.js +117 -0
  448. package/dist/lib/models/sql/WorkspaceSQL.js.map +1 -0
  449. package/dist/lib/models/sql/WorkspaceSenderSQL.js +100 -0
  450. package/dist/lib/models/sql/WorkspaceSenderSQL.js.map +1 -0
  451. package/dist/lib/models/sql/index.js +74 -0
  452. package/dist/lib/models/sql/index.js.map +1 -0
  453. package/dist/lib/models/types.js +275 -0
  454. package/dist/lib/models/types.js.map +1 -0
  455. package/dist/lib/mongo.js +80 -0
  456. package/dist/lib/mongo.js.map +1 -0
  457. package/dist/lib/purge.js +68 -0
  458. package/dist/lib/purge.js.map +1 -0
  459. package/dist/lib/routes/BaseAnalyticsRoute.js +217 -0
  460. package/dist/lib/routes/BaseAnalyticsRoute.js.map +1 -0
  461. package/dist/lib/routes/BaseApiKeyRoute.js +76 -0
  462. package/dist/lib/routes/BaseApiKeyRoute.js.map +1 -0
  463. package/dist/lib/routes/BaseAutomationRoute.js +316 -0
  464. package/dist/lib/routes/BaseAutomationRoute.js.map +1 -0
  465. package/dist/lib/routes/BaseCampaignRoute.js +443 -0
  466. package/dist/lib/routes/BaseCampaignRoute.js.map +1 -0
  467. package/dist/lib/routes/BaseCompanyRoute.js +106 -0
  468. package/dist/lib/routes/BaseCompanyRoute.js.map +1 -0
  469. package/dist/lib/routes/BaseContactRoute.js +162 -0
  470. package/dist/lib/routes/BaseContactRoute.js.map +1 -0
  471. package/dist/lib/routes/BaseCrmAdminRoute.js +108 -0
  472. package/dist/lib/routes/BaseCrmAdminRoute.js.map +1 -0
  473. package/dist/lib/routes/BaseDealRoute.js +312 -0
  474. package/dist/lib/routes/BaseDealRoute.js.map +1 -0
  475. package/dist/lib/routes/BaseFormRoute.js +124 -0
  476. package/dist/lib/routes/BaseFormRoute.js.map +1 -0
  477. package/dist/lib/routes/BaseImportRoute.js +231 -0
  478. package/dist/lib/routes/BaseImportRoute.js.map +1 -0
  479. package/dist/lib/routes/BaseIntegrationRoute.js +181 -0
  480. package/dist/lib/routes/BaseIntegrationRoute.js.map +1 -0
  481. package/dist/lib/routes/BaseListRoute.js +89 -0
  482. package/dist/lib/routes/BaseListRoute.js.map +1 -0
  483. package/dist/lib/routes/BaseNoteRoute.js +69 -0
  484. package/dist/lib/routes/BaseNoteRoute.js.map +1 -0
  485. package/dist/lib/routes/BasePipelineRoute.js +149 -0
  486. package/dist/lib/routes/BasePipelineRoute.js.map +1 -0
  487. package/dist/lib/routes/BasePropertyDefinitionRoute.js +140 -0
  488. package/dist/lib/routes/BasePropertyDefinitionRoute.js.map +1 -0
  489. package/dist/lib/routes/BasePublicRoute.js +528 -0
  490. package/dist/lib/routes/BasePublicRoute.js.map +1 -0
  491. package/dist/lib/routes/BaseSavedBlockRoute.js +39 -0
  492. package/dist/lib/routes/BaseSavedBlockRoute.js.map +1 -0
  493. package/dist/lib/routes/BaseScoringRuleRoute.js +146 -0
  494. package/dist/lib/routes/BaseScoringRuleRoute.js.map +1 -0
  495. package/dist/lib/routes/BaseSegmentRoute.js +136 -0
  496. package/dist/lib/routes/BaseSegmentRoute.js.map +1 -0
  497. package/dist/lib/routes/BaseSubscriptionRoute.js +92 -0
  498. package/dist/lib/routes/BaseSubscriptionRoute.js.map +1 -0
  499. package/dist/lib/routes/BaseSuppressionRoute.js +48 -0
  500. package/dist/lib/routes/BaseSuppressionRoute.js.map +1 -0
  501. package/dist/lib/routes/BaseTaggedRecordRoute.js +312 -0
  502. package/dist/lib/routes/BaseTaggedRecordRoute.js.map +1 -0
  503. package/dist/lib/routes/BaseTaskRoute.js +116 -0
  504. package/dist/lib/routes/BaseTaskRoute.js.map +1 -0
  505. package/dist/lib/routes/BaseTemplateRoute.js +207 -0
  506. package/dist/lib/routes/BaseTemplateRoute.js.map +1 -0
  507. package/dist/lib/routes/BaseTimelineRoute.js +47 -0
  508. package/dist/lib/routes/BaseTimelineRoute.js.map +1 -0
  509. package/dist/lib/routes/BaseTrackingRoute.js +106 -0
  510. package/dist/lib/routes/BaseTrackingRoute.js.map +1 -0
  511. package/dist/lib/routes/BaseWebhookRoute.js +173 -0
  512. package/dist/lib/routes/BaseWebhookRoute.js.map +1 -0
  513. package/dist/lib/routes/BaseWorkspaceRecordRoute.js +220 -0
  514. package/dist/lib/routes/BaseWorkspaceRecordRoute.js.map +1 -0
  515. package/dist/lib/routes/BaseWorkspaceRoute.js +540 -0
  516. package/dist/lib/routes/BaseWorkspaceRoute.js.map +1 -0
  517. package/dist/lib/routes/CrmRouteBase.js +261 -0
  518. package/dist/lib/routes/CrmRouteBase.js.map +1 -0
  519. package/dist/lib/routes/mongo/AnalyticsRouteMongo.js +26 -0
  520. package/dist/lib/routes/mongo/AnalyticsRouteMongo.js.map +1 -0
  521. package/dist/lib/routes/mongo/ApiKeyRouteMongo.js +26 -0
  522. package/dist/lib/routes/mongo/ApiKeyRouteMongo.js.map +1 -0
  523. package/dist/lib/routes/mongo/AutomationRouteMongo.js +26 -0
  524. package/dist/lib/routes/mongo/AutomationRouteMongo.js.map +1 -0
  525. package/dist/lib/routes/mongo/CampaignRouteMongo.js +26 -0
  526. package/dist/lib/routes/mongo/CampaignRouteMongo.js.map +1 -0
  527. package/dist/lib/routes/mongo/CompanyRouteMongo.js +26 -0
  528. package/dist/lib/routes/mongo/CompanyRouteMongo.js.map +1 -0
  529. package/dist/lib/routes/mongo/ContactRouteMongo.js +26 -0
  530. package/dist/lib/routes/mongo/ContactRouteMongo.js.map +1 -0
  531. package/dist/lib/routes/mongo/CrmAdminRouteMongo.js +26 -0
  532. package/dist/lib/routes/mongo/CrmAdminRouteMongo.js.map +1 -0
  533. package/dist/lib/routes/mongo/DealRouteMongo.js +26 -0
  534. package/dist/lib/routes/mongo/DealRouteMongo.js.map +1 -0
  535. package/dist/lib/routes/mongo/FormRouteMongo.js +26 -0
  536. package/dist/lib/routes/mongo/FormRouteMongo.js.map +1 -0
  537. package/dist/lib/routes/mongo/ImportRouteMongo.js +26 -0
  538. package/dist/lib/routes/mongo/ImportRouteMongo.js.map +1 -0
  539. package/dist/lib/routes/mongo/IntegrationRouteMongo.js +28 -0
  540. package/dist/lib/routes/mongo/IntegrationRouteMongo.js.map +1 -0
  541. package/dist/lib/routes/mongo/ListRouteMongo.js +26 -0
  542. package/dist/lib/routes/mongo/ListRouteMongo.js.map +1 -0
  543. package/dist/lib/routes/mongo/NoteRouteMongo.js +26 -0
  544. package/dist/lib/routes/mongo/NoteRouteMongo.js.map +1 -0
  545. package/dist/lib/routes/mongo/PipelineRouteMongo.js +26 -0
  546. package/dist/lib/routes/mongo/PipelineRouteMongo.js.map +1 -0
  547. package/dist/lib/routes/mongo/PropertyDefinitionRouteMongo.js +26 -0
  548. package/dist/lib/routes/mongo/PropertyDefinitionRouteMongo.js.map +1 -0
  549. package/dist/lib/routes/mongo/PublicRouteMongo.js +28 -0
  550. package/dist/lib/routes/mongo/PublicRouteMongo.js.map +1 -0
  551. package/dist/lib/routes/mongo/SavedBlockRouteMongo.js +26 -0
  552. package/dist/lib/routes/mongo/SavedBlockRouteMongo.js.map +1 -0
  553. package/dist/lib/routes/mongo/ScoringRuleRouteMongo.js +26 -0
  554. package/dist/lib/routes/mongo/ScoringRuleRouteMongo.js.map +1 -0
  555. package/dist/lib/routes/mongo/SegmentRouteMongo.js +26 -0
  556. package/dist/lib/routes/mongo/SegmentRouteMongo.js.map +1 -0
  557. package/dist/lib/routes/mongo/SubscriptionRouteMongo.js +26 -0
  558. package/dist/lib/routes/mongo/SubscriptionRouteMongo.js.map +1 -0
  559. package/dist/lib/routes/mongo/SuppressionRouteMongo.js +26 -0
  560. package/dist/lib/routes/mongo/SuppressionRouteMongo.js.map +1 -0
  561. package/dist/lib/routes/mongo/TaskRouteMongo.js +26 -0
  562. package/dist/lib/routes/mongo/TaskRouteMongo.js.map +1 -0
  563. package/dist/lib/routes/mongo/TemplateRouteMongo.js +26 -0
  564. package/dist/lib/routes/mongo/TemplateRouteMongo.js.map +1 -0
  565. package/dist/lib/routes/mongo/TimelineRouteMongo.js +26 -0
  566. package/dist/lib/routes/mongo/TimelineRouteMongo.js.map +1 -0
  567. package/dist/lib/routes/mongo/TrackingRouteMongo.js +26 -0
  568. package/dist/lib/routes/mongo/TrackingRouteMongo.js.map +1 -0
  569. package/dist/lib/routes/mongo/WebhookRouteMongo.js +26 -0
  570. package/dist/lib/routes/mongo/WebhookRouteMongo.js.map +1 -0
  571. package/dist/lib/routes/mongo/WorkspaceRouteMongo.js +26 -0
  572. package/dist/lib/routes/mongo/WorkspaceRouteMongo.js.map +1 -0
  573. package/dist/lib/routes/sql/AnalyticsRouteSQL.js +26 -0
  574. package/dist/lib/routes/sql/AnalyticsRouteSQL.js.map +1 -0
  575. package/dist/lib/routes/sql/ApiKeyRouteSQL.js +26 -0
  576. package/dist/lib/routes/sql/ApiKeyRouteSQL.js.map +1 -0
  577. package/dist/lib/routes/sql/AutomationRouteSQL.js +26 -0
  578. package/dist/lib/routes/sql/AutomationRouteSQL.js.map +1 -0
  579. package/dist/lib/routes/sql/CampaignRouteSQL.js +26 -0
  580. package/dist/lib/routes/sql/CampaignRouteSQL.js.map +1 -0
  581. package/dist/lib/routes/sql/CompanyRouteSQL.js +26 -0
  582. package/dist/lib/routes/sql/CompanyRouteSQL.js.map +1 -0
  583. package/dist/lib/routes/sql/ContactRouteSQL.js +26 -0
  584. package/dist/lib/routes/sql/ContactRouteSQL.js.map +1 -0
  585. package/dist/lib/routes/sql/CrmAdminRouteSQL.js +26 -0
  586. package/dist/lib/routes/sql/CrmAdminRouteSQL.js.map +1 -0
  587. package/dist/lib/routes/sql/DealRouteSQL.js +26 -0
  588. package/dist/lib/routes/sql/DealRouteSQL.js.map +1 -0
  589. package/dist/lib/routes/sql/FormRouteSQL.js +26 -0
  590. package/dist/lib/routes/sql/FormRouteSQL.js.map +1 -0
  591. package/dist/lib/routes/sql/ImportRouteSQL.js +26 -0
  592. package/dist/lib/routes/sql/ImportRouteSQL.js.map +1 -0
  593. package/dist/lib/routes/sql/IntegrationRouteSQL.js +28 -0
  594. package/dist/lib/routes/sql/IntegrationRouteSQL.js.map +1 -0
  595. package/dist/lib/routes/sql/ListRouteSQL.js +26 -0
  596. package/dist/lib/routes/sql/ListRouteSQL.js.map +1 -0
  597. package/dist/lib/routes/sql/NoteRouteSQL.js +26 -0
  598. package/dist/lib/routes/sql/NoteRouteSQL.js.map +1 -0
  599. package/dist/lib/routes/sql/PipelineRouteSQL.js +26 -0
  600. package/dist/lib/routes/sql/PipelineRouteSQL.js.map +1 -0
  601. package/dist/lib/routes/sql/PropertyDefinitionRouteSQL.js +26 -0
  602. package/dist/lib/routes/sql/PropertyDefinitionRouteSQL.js.map +1 -0
  603. package/dist/lib/routes/sql/PublicRouteSQL.js +28 -0
  604. package/dist/lib/routes/sql/PublicRouteSQL.js.map +1 -0
  605. package/dist/lib/routes/sql/SavedBlockRouteSQL.js +26 -0
  606. package/dist/lib/routes/sql/SavedBlockRouteSQL.js.map +1 -0
  607. package/dist/lib/routes/sql/ScoringRuleRouteSQL.js +26 -0
  608. package/dist/lib/routes/sql/ScoringRuleRouteSQL.js.map +1 -0
  609. package/dist/lib/routes/sql/SegmentRouteSQL.js +26 -0
  610. package/dist/lib/routes/sql/SegmentRouteSQL.js.map +1 -0
  611. package/dist/lib/routes/sql/SubscriptionRouteSQL.js +26 -0
  612. package/dist/lib/routes/sql/SubscriptionRouteSQL.js.map +1 -0
  613. package/dist/lib/routes/sql/SuppressionRouteSQL.js +26 -0
  614. package/dist/lib/routes/sql/SuppressionRouteSQL.js.map +1 -0
  615. package/dist/lib/routes/sql/TaskRouteSQL.js +26 -0
  616. package/dist/lib/routes/sql/TaskRouteSQL.js.map +1 -0
  617. package/dist/lib/routes/sql/TemplateRouteSQL.js +26 -0
  618. package/dist/lib/routes/sql/TemplateRouteSQL.js.map +1 -0
  619. package/dist/lib/routes/sql/TimelineRouteSQL.js +26 -0
  620. package/dist/lib/routes/sql/TimelineRouteSQL.js.map +1 -0
  621. package/dist/lib/routes/sql/TrackingRouteSQL.js +26 -0
  622. package/dist/lib/routes/sql/TrackingRouteSQL.js.map +1 -0
  623. package/dist/lib/routes/sql/WebhookRouteSQL.js +26 -0
  624. package/dist/lib/routes/sql/WebhookRouteSQL.js.map +1 -0
  625. package/dist/lib/routes/sql/WorkspaceRouteSQL.js +26 -0
  626. package/dist/lib/routes/sql/WorkspaceRouteSQL.js.map +1 -0
  627. package/dist/lib/scoring/Scoring.js +105 -0
  628. package/dist/lib/scoring/Scoring.js.map +1 -0
  629. package/dist/lib/segments/Segments.js +125 -0
  630. package/dist/lib/segments/Segments.js.map +1 -0
  631. package/dist/lib/sending/Audience.js +87 -0
  632. package/dist/lib/sending/Audience.js.map +1 -0
  633. package/dist/lib/sending/CampaignRenderer.js +123 -0
  634. package/dist/lib/sending/CampaignRenderer.js.map +1 -0
  635. package/dist/lib/sending/Engagement.js +216 -0
  636. package/dist/lib/sending/Engagement.js.map +1 -0
  637. package/dist/lib/sending/Stats.js +70 -0
  638. package/dist/lib/sending/Stats.js.map +1 -0
  639. package/dist/lib/sending/Tracking.js +98 -0
  640. package/dist/lib/sending/Tracking.js.map +1 -0
  641. package/dist/lib/sql.js +80 -0
  642. package/dist/lib/sql.js.map +1 -0
  643. package/dist/lib/templates/Design.js +278 -0
  644. package/dist/lib/templates/Design.js.map +1 -0
  645. package/dist/lib/templates/MergeContext.js +57 -0
  646. package/dist/lib/templates/MergeContext.js.map +1 -0
  647. package/dist/lib/templates/Render.js +147 -0
  648. package/dist/lib/templates/Render.js.map +1 -0
  649. package/dist/lib/templates/Sanitize.js +98 -0
  650. package/dist/lib/templates/Sanitize.js.map +1 -0
  651. package/dist/lib/util/Csv.js +128 -0
  652. package/dist/lib/util/Csv.js.map +1 -0
  653. package/dist/lib/util/ImportMapping.js +206 -0
  654. package/dist/lib/util/ImportMapping.js.map +1 -0
  655. package/dist/lib/util/Mailer.js +43 -0
  656. package/dist/lib/util/Mailer.js.map +1 -0
  657. package/dist/lib/util/PropertyValues.js +145 -0
  658. package/dist/lib/util/PropertyValues.js.map +1 -0
  659. package/dist/lib/util/Secrets.js +31 -0
  660. package/dist/lib/util/Secrets.js.map +1 -0
  661. package/dist/lib/util/Tokens.js +58 -0
  662. package/dist/lib/util/Tokens.js.map +1 -0
  663. package/dist/lib/util/Validation.js +194 -0
  664. package/dist/lib/util/Validation.js.map +1 -0
  665. package/dist/lib/util/WorkspaceAccess.js +55 -0
  666. package/dist/lib/util/WorkspaceAccess.js.map +1 -0
  667. package/dist/lib/webhooks/Deliveries.js +47 -0
  668. package/dist/lib/webhooks/Deliveries.js.map +1 -0
  669. package/dist/lib/webhooks/Webhooks.js +132 -0
  670. package/dist/lib/webhooks/Webhooks.js.map +1 -0
  671. package/dist/types/automation/Dates.d.ts +42 -0
  672. package/dist/types/automation/Engine.d.ts +63 -0
  673. package/dist/types/automation/Events.d.ts +43 -0
  674. package/dist/types/automation/Graph.d.ts +77 -0
  675. package/dist/types/filters/Filter.d.ts +83 -0
  676. package/dist/types/filters/fields.d.ts +9 -0
  677. package/dist/types/index.d.ts +81 -0
  678. package/dist/types/jobs/AutomationRunJob.d.ts +18 -0
  679. package/dist/types/jobs/AutomationTriggerJob.d.ts +23 -0
  680. package/dist/types/jobs/CampaignJob.d.ts +45 -0
  681. package/dist/types/jobs/CrmImportJob.d.ts +44 -0
  682. package/dist/types/jobs/CrmJobBase.d.ts +26 -0
  683. package/dist/types/jobs/CrmMailEventJob.d.ts +102 -0
  684. package/dist/types/jobs/DateTriggerJob.d.ts +21 -0
  685. package/dist/types/jobs/ScoringJob.d.ts +13 -0
  686. package/dist/types/jobs/SegmentRefreshJob.d.ts +16 -0
  687. package/dist/types/jobs/SendDispatchJob.d.ts +52 -0
  688. package/dist/types/jobs/TaskReminderJob.d.ts +12 -0
  689. package/dist/types/jobs/WebhookDeliveryJob.d.ts +22 -0
  690. package/dist/types/jobs/mongo/AutomationRunJobMongo.d.ts +7 -0
  691. package/dist/types/jobs/mongo/AutomationTriggerJobMongo.d.ts +6 -0
  692. package/dist/types/jobs/mongo/CampaignJobMongo.d.ts +6 -0
  693. package/dist/types/jobs/mongo/CrmImportJobMongo.d.ts +8 -0
  694. package/dist/types/jobs/mongo/CrmMailEventJobMongo.d.ts +6 -0
  695. package/dist/types/jobs/mongo/DateTriggerJobMongo.d.ts +6 -0
  696. package/dist/types/jobs/mongo/ScoringJobMongo.d.ts +6 -0
  697. package/dist/types/jobs/mongo/SegmentRefreshJobMongo.d.ts +6 -0
  698. package/dist/types/jobs/mongo/SendDispatchJobMongo.d.ts +6 -0
  699. package/dist/types/jobs/mongo/TaskReminderJobMongo.d.ts +6 -0
  700. package/dist/types/jobs/mongo/WebhookDeliveryJobMongo.d.ts +6 -0
  701. package/dist/types/jobs/sql/AutomationRunJobSQL.d.ts +7 -0
  702. package/dist/types/jobs/sql/AutomationTriggerJobSQL.d.ts +6 -0
  703. package/dist/types/jobs/sql/CampaignJobSQL.d.ts +6 -0
  704. package/dist/types/jobs/sql/CrmImportJobSQL.d.ts +8 -0
  705. package/dist/types/jobs/sql/CrmMailEventJobSQL.d.ts +6 -0
  706. package/dist/types/jobs/sql/DateTriggerJobSQL.d.ts +6 -0
  707. package/dist/types/jobs/sql/ScoringJobSQL.d.ts +6 -0
  708. package/dist/types/jobs/sql/SegmentRefreshJobSQL.d.ts +6 -0
  709. package/dist/types/jobs/sql/SendDispatchJobSQL.d.ts +6 -0
  710. package/dist/types/jobs/sql/TaskReminderJobSQL.d.ts +6 -0
  711. package/dist/types/jobs/sql/WebhookDeliveryJobSQL.d.ts +6 -0
  712. package/dist/types/models/CrmModelClasses.d.ts +63 -0
  713. package/dist/types/models/mongo/ApiKeyMongo.d.ts +19 -0
  714. package/dist/types/models/mongo/AutomationMongo.d.ts +22 -0
  715. package/dist/types/models/mongo/AutomationVersionMongo.d.ts +16 -0
  716. package/dist/types/models/mongo/CampaignMongo.d.ts +34 -0
  717. package/dist/types/models/mongo/CrmCompanyMongo.d.ts +22 -0
  718. package/dist/types/models/mongo/CrmContactMongo.d.ts +26 -0
  719. package/dist/types/models/mongo/CrmEventMongo.d.ts +17 -0
  720. package/dist/types/models/mongo/CrmFormMongo.d.ts +24 -0
  721. package/dist/types/models/mongo/CrmImportMongo.d.ts +31 -0
  722. package/dist/types/models/mongo/CrmNoteMongo.d.ts +17 -0
  723. package/dist/types/models/mongo/CrmSettingMongo.d.ts +13 -0
  724. package/dist/types/models/mongo/CrmTaskMongo.d.ts +23 -0
  725. package/dist/types/models/mongo/DealMongo.d.ts +27 -0
  726. package/dist/types/models/mongo/EmailTemplateMongo.d.ts +17 -0
  727. package/dist/types/models/mongo/EngagementEventMongo.d.ts +20 -0
  728. package/dist/types/models/mongo/EnrollmentMongo.d.ts +25 -0
  729. package/dist/types/models/mongo/MailingListMongo.d.ts +19 -0
  730. package/dist/types/models/mongo/OutboundSendMongo.d.ts +41 -0
  731. package/dist/types/models/mongo/PipelineMongo.d.ts +15 -0
  732. package/dist/types/models/mongo/PropertyDefinitionMongo.d.ts +19 -0
  733. package/dist/types/models/mongo/PropertyValueMongo.d.ts +18 -0
  734. package/dist/types/models/mongo/SavedBlockMongo.d.ts +14 -0
  735. package/dist/types/models/mongo/ScoringRuleMongo.d.ts +20 -0
  736. package/dist/types/models/mongo/SegmentMongo.d.ts +20 -0
  737. package/dist/types/models/mongo/SubscriptionMongo.d.ts +20 -0
  738. package/dist/types/models/mongo/SuppressionMongo.d.ts +15 -0
  739. package/dist/types/models/mongo/TimelineEventMongo.d.ts +20 -0
  740. package/dist/types/models/mongo/WebhookDeliveryMongo.d.ts +22 -0
  741. package/dist/types/models/mongo/WebhookEndpointMongo.d.ts +21 -0
  742. package/dist/types/models/mongo/WorkspaceMemberMongo.d.ts +17 -0
  743. package/dist/types/models/mongo/WorkspaceMongo.d.ts +21 -0
  744. package/dist/types/models/mongo/WorkspaceSenderMongo.d.ts +18 -0
  745. package/dist/types/models/mongo/index.d.ts +3 -0
  746. package/dist/types/models/sql/ApiKeySQL.d.ts +19 -0
  747. package/dist/types/models/sql/AutomationSQL.d.ts +22 -0
  748. package/dist/types/models/sql/AutomationVersionSQL.d.ts +16 -0
  749. package/dist/types/models/sql/CampaignSQL.d.ts +34 -0
  750. package/dist/types/models/sql/CrmCompanySQL.d.ts +22 -0
  751. package/dist/types/models/sql/CrmContactSQL.d.ts +26 -0
  752. package/dist/types/models/sql/CrmEventSQL.d.ts +17 -0
  753. package/dist/types/models/sql/CrmFormSQL.d.ts +24 -0
  754. package/dist/types/models/sql/CrmImportSQL.d.ts +31 -0
  755. package/dist/types/models/sql/CrmNoteSQL.d.ts +17 -0
  756. package/dist/types/models/sql/CrmSettingSQL.d.ts +13 -0
  757. package/dist/types/models/sql/CrmTaskSQL.d.ts +23 -0
  758. package/dist/types/models/sql/DealSQL.d.ts +27 -0
  759. package/dist/types/models/sql/EmailTemplateSQL.d.ts +17 -0
  760. package/dist/types/models/sql/EngagementEventSQL.d.ts +20 -0
  761. package/dist/types/models/sql/EnrollmentSQL.d.ts +25 -0
  762. package/dist/types/models/sql/MailingListSQL.d.ts +19 -0
  763. package/dist/types/models/sql/OutboundSendSQL.d.ts +41 -0
  764. package/dist/types/models/sql/PipelineSQL.d.ts +15 -0
  765. package/dist/types/models/sql/PropertyDefinitionSQL.d.ts +19 -0
  766. package/dist/types/models/sql/PropertyValueSQL.d.ts +18 -0
  767. package/dist/types/models/sql/SavedBlockSQL.d.ts +14 -0
  768. package/dist/types/models/sql/ScoringRuleSQL.d.ts +20 -0
  769. package/dist/types/models/sql/SegmentSQL.d.ts +20 -0
  770. package/dist/types/models/sql/SubscriptionSQL.d.ts +20 -0
  771. package/dist/types/models/sql/SuppressionSQL.d.ts +15 -0
  772. package/dist/types/models/sql/TimelineEventSQL.d.ts +20 -0
  773. package/dist/types/models/sql/WebhookDeliverySQL.d.ts +22 -0
  774. package/dist/types/models/sql/WebhookEndpointSQL.d.ts +21 -0
  775. package/dist/types/models/sql/WorkspaceMemberSQL.d.ts +17 -0
  776. package/dist/types/models/sql/WorkspaceSQL.d.ts +21 -0
  777. package/dist/types/models/sql/WorkspaceSenderSQL.d.ts +18 -0
  778. package/dist/types/models/sql/index.d.ts +3 -0
  779. package/dist/types/models/types.d.ts +902 -0
  780. package/dist/types/mongo.d.ts +75 -0
  781. package/dist/types/purge.d.ts +32 -0
  782. package/dist/types/routes/BaseAnalyticsRoute.d.ts +87 -0
  783. package/dist/types/routes/BaseApiKeyRoute.d.ts +31 -0
  784. package/dist/types/routes/BaseAutomationRoute.d.ts +56 -0
  785. package/dist/types/routes/BaseCampaignRoute.d.ts +66 -0
  786. package/dist/types/routes/BaseCompanyRoute.d.ts +30 -0
  787. package/dist/types/routes/BaseContactRoute.d.ts +42 -0
  788. package/dist/types/routes/BaseCrmAdminRoute.d.ts +41 -0
  789. package/dist/types/routes/BaseDealRoute.d.ts +65 -0
  790. package/dist/types/routes/BaseFormRoute.d.ts +25 -0
  791. package/dist/types/routes/BaseImportRoute.d.ts +39 -0
  792. package/dist/types/routes/BaseIntegrationRoute.d.ts +46 -0
  793. package/dist/types/routes/BaseListRoute.d.ts +26 -0
  794. package/dist/types/routes/BaseNoteRoute.d.ts +15 -0
  795. package/dist/types/routes/BasePipelineRoute.d.ts +31 -0
  796. package/dist/types/routes/BasePropertyDefinitionRoute.d.ts +24 -0
  797. package/dist/types/routes/BasePublicRoute.d.ts +129 -0
  798. package/dist/types/routes/BaseSavedBlockRoute.d.ts +16 -0
  799. package/dist/types/routes/BaseScoringRuleRoute.d.ts +33 -0
  800. package/dist/types/routes/BaseSegmentRoute.d.ts +36 -0
  801. package/dist/types/routes/BaseSubscriptionRoute.d.ts +20 -0
  802. package/dist/types/routes/BaseSuppressionRoute.d.ts +17 -0
  803. package/dist/types/routes/BaseTaggedRecordRoute.d.ts +85 -0
  804. package/dist/types/routes/BaseTaskRoute.d.ts +18 -0
  805. package/dist/types/routes/BaseTemplateRoute.d.ts +52 -0
  806. package/dist/types/routes/BaseTimelineRoute.d.ts +10 -0
  807. package/dist/types/routes/BaseTrackingRoute.d.ts +21 -0
  808. package/dist/types/routes/BaseWebhookRoute.d.ts +49 -0
  809. package/dist/types/routes/BaseWorkspaceRecordRoute.d.ts +78 -0
  810. package/dist/types/routes/BaseWorkspaceRoute.d.ts +78 -0
  811. package/dist/types/routes/CrmRouteBase.d.ts +95 -0
  812. package/dist/types/routes/mongo/AnalyticsRouteMongo.d.ts +6 -0
  813. package/dist/types/routes/mongo/ApiKeyRouteMongo.d.ts +6 -0
  814. package/dist/types/routes/mongo/AutomationRouteMongo.d.ts +6 -0
  815. package/dist/types/routes/mongo/CampaignRouteMongo.d.ts +6 -0
  816. package/dist/types/routes/mongo/CompanyRouteMongo.d.ts +6 -0
  817. package/dist/types/routes/mongo/ContactRouteMongo.d.ts +6 -0
  818. package/dist/types/routes/mongo/CrmAdminRouteMongo.d.ts +6 -0
  819. package/dist/types/routes/mongo/DealRouteMongo.d.ts +6 -0
  820. package/dist/types/routes/mongo/FormRouteMongo.d.ts +6 -0
  821. package/dist/types/routes/mongo/ImportRouteMongo.d.ts +6 -0
  822. package/dist/types/routes/mongo/IntegrationRouteMongo.d.ts +7 -0
  823. package/dist/types/routes/mongo/ListRouteMongo.d.ts +6 -0
  824. package/dist/types/routes/mongo/NoteRouteMongo.d.ts +6 -0
  825. package/dist/types/routes/mongo/PipelineRouteMongo.d.ts +6 -0
  826. package/dist/types/routes/mongo/PropertyDefinitionRouteMongo.d.ts +6 -0
  827. package/dist/types/routes/mongo/PublicRouteMongo.d.ts +7 -0
  828. package/dist/types/routes/mongo/SavedBlockRouteMongo.d.ts +6 -0
  829. package/dist/types/routes/mongo/ScoringRuleRouteMongo.d.ts +6 -0
  830. package/dist/types/routes/mongo/SegmentRouteMongo.d.ts +6 -0
  831. package/dist/types/routes/mongo/SubscriptionRouteMongo.d.ts +6 -0
  832. package/dist/types/routes/mongo/SuppressionRouteMongo.d.ts +6 -0
  833. package/dist/types/routes/mongo/TaskRouteMongo.d.ts +6 -0
  834. package/dist/types/routes/mongo/TemplateRouteMongo.d.ts +6 -0
  835. package/dist/types/routes/mongo/TimelineRouteMongo.d.ts +6 -0
  836. package/dist/types/routes/mongo/TrackingRouteMongo.d.ts +6 -0
  837. package/dist/types/routes/mongo/WebhookRouteMongo.d.ts +6 -0
  838. package/dist/types/routes/mongo/WorkspaceRouteMongo.d.ts +6 -0
  839. package/dist/types/routes/sql/AnalyticsRouteSQL.d.ts +6 -0
  840. package/dist/types/routes/sql/ApiKeyRouteSQL.d.ts +6 -0
  841. package/dist/types/routes/sql/AutomationRouteSQL.d.ts +6 -0
  842. package/dist/types/routes/sql/CampaignRouteSQL.d.ts +6 -0
  843. package/dist/types/routes/sql/CompanyRouteSQL.d.ts +6 -0
  844. package/dist/types/routes/sql/ContactRouteSQL.d.ts +6 -0
  845. package/dist/types/routes/sql/CrmAdminRouteSQL.d.ts +6 -0
  846. package/dist/types/routes/sql/DealRouteSQL.d.ts +6 -0
  847. package/dist/types/routes/sql/FormRouteSQL.d.ts +6 -0
  848. package/dist/types/routes/sql/ImportRouteSQL.d.ts +6 -0
  849. package/dist/types/routes/sql/IntegrationRouteSQL.d.ts +7 -0
  850. package/dist/types/routes/sql/ListRouteSQL.d.ts +6 -0
  851. package/dist/types/routes/sql/NoteRouteSQL.d.ts +6 -0
  852. package/dist/types/routes/sql/PipelineRouteSQL.d.ts +6 -0
  853. package/dist/types/routes/sql/PropertyDefinitionRouteSQL.d.ts +6 -0
  854. package/dist/types/routes/sql/PublicRouteSQL.d.ts +7 -0
  855. package/dist/types/routes/sql/SavedBlockRouteSQL.d.ts +6 -0
  856. package/dist/types/routes/sql/ScoringRuleRouteSQL.d.ts +6 -0
  857. package/dist/types/routes/sql/SegmentRouteSQL.d.ts +6 -0
  858. package/dist/types/routes/sql/SubscriptionRouteSQL.d.ts +6 -0
  859. package/dist/types/routes/sql/SuppressionRouteSQL.d.ts +6 -0
  860. package/dist/types/routes/sql/TaskRouteSQL.d.ts +6 -0
  861. package/dist/types/routes/sql/TemplateRouteSQL.d.ts +6 -0
  862. package/dist/types/routes/sql/TimelineRouteSQL.d.ts +6 -0
  863. package/dist/types/routes/sql/TrackingRouteSQL.d.ts +6 -0
  864. package/dist/types/routes/sql/WebhookRouteSQL.d.ts +6 -0
  865. package/dist/types/routes/sql/WorkspaceRouteSQL.d.ts +6 -0
  866. package/dist/types/scoring/Scoring.d.ts +14 -0
  867. package/dist/types/segments/Segments.d.ts +46 -0
  868. package/dist/types/sending/Audience.d.ts +39 -0
  869. package/dist/types/sending/CampaignRenderer.d.ts +40 -0
  870. package/dist/types/sending/Engagement.d.ts +50 -0
  871. package/dist/types/sending/Stats.d.ts +17 -0
  872. package/dist/types/sending/Tracking.d.ts +39 -0
  873. package/dist/types/sql.d.ts +75 -0
  874. package/dist/types/templates/Design.d.ts +138 -0
  875. package/dist/types/templates/MergeContext.d.ts +27 -0
  876. package/dist/types/templates/Render.d.ts +46 -0
  877. package/dist/types/templates/Sanitize.d.ts +18 -0
  878. package/dist/types/util/Csv.d.ts +26 -0
  879. package/dist/types/util/ImportMapping.d.ts +23 -0
  880. package/dist/types/util/Mailer.d.ts +24 -0
  881. package/dist/types/util/PropertyValues.d.ts +31 -0
  882. package/dist/types/util/Secrets.d.ts +10 -0
  883. package/dist/types/util/Tokens.d.ts +30 -0
  884. package/dist/types/util/Validation.d.ts +59 -0
  885. package/dist/types/util/WorkspaceAccess.d.ts +24 -0
  886. package/dist/types/webhooks/Deliveries.d.ts +26 -0
  887. package/dist/types/webhooks/Webhooks.d.ts +43 -0
  888. package/package.json +226 -0
@@ -0,0 +1,230 @@
1
+ /** A fresh id for a section, column or block. */
2
+ export function newId() {
3
+ return crypto.randomUUID();
4
+ }
5
+ /** The block types the palette offers, in its order, with what each is called. */
6
+ export const BLOCK_TYPES = [
7
+ { type: "heading", label: "Heading" },
8
+ { type: "text", label: "Text" },
9
+ { type: "image", label: "Image" },
10
+ { type: "button", label: "Button" },
11
+ { type: "divider", label: "Divider" },
12
+ { type: "spacer", label: "Spacer" },
13
+ { type: "social", label: "Social links" },
14
+ { type: "footer", label: "Footer" },
15
+ { type: "html", label: "HTML" },
16
+ ];
17
+ /** What a block type is called. */
18
+ export function blockLabel(type) {
19
+ return BLOCK_TYPES.find((entry) => entry.type === type).label;
20
+ }
21
+ /** A new block of `type`, with the content a new one starts with. */
22
+ export function newBlock(type) {
23
+ const id = newId();
24
+ switch (type) {
25
+ case "heading":
26
+ return { id, type, text: "New heading", level: 2 };
27
+ case "text":
28
+ return { id, type, html: "<p>Write something here.</p>" };
29
+ case "image":
30
+ return { id, type, src: "", alt: "" };
31
+ case "button":
32
+ return { id, type, text: "Click here", href: "" };
33
+ case "divider":
34
+ return { id, type };
35
+ case "spacer":
36
+ return { id, type, height: 24 };
37
+ case "social":
38
+ return { id, type, links: [{ network: "web", href: "" }], align: "center" };
39
+ case "html":
40
+ return { id, type, html: "<p>Your HTML</p>" };
41
+ default:
42
+ return { id, type: "footer" };
43
+ }
44
+ }
45
+ /** A new section with `columns` empty columns (1 to 4). */
46
+ export function newSection(columns) {
47
+ return { id: newId(), padding: 16, columns: Array.from({ length: columns }, () => ({ id: newId(), blocks: [] })) };
48
+ }
49
+ /** `blocks` with fresh ids, for pasting a saved block or duplicating one. */
50
+ export function withNewIds(blocks) {
51
+ return blocks.map((block) => ({ ...structuredClone(block), id: newId() }));
52
+ }
53
+ /** Where block `id` is, or `undefined`. */
54
+ export function findBlock(design, id) {
55
+ for (const [section, { columns }] of design.sections.entries()) {
56
+ for (const [column, { blocks }] of columns.entries()) {
57
+ const index = blocks.findIndex((block) => block.id === id);
58
+ if (index >= 0) {
59
+ return { section, column, index };
60
+ }
61
+ }
62
+ }
63
+ return undefined;
64
+ }
65
+ /** The block `id`, or `undefined`. */
66
+ export function getBlock(design, id) {
67
+ const at = findBlock(design, id);
68
+ return at && design.sections[at.section].columns[at.column].blocks[at.index];
69
+ }
70
+ /** Where column `id` is: its section's index and its own. */
71
+ function findColumn(design, id) {
72
+ for (const [section, { columns }] of design.sections.entries()) {
73
+ const column = columns.findIndex((entry) => entry.id === id);
74
+ if (column >= 0) {
75
+ return { section, column };
76
+ }
77
+ }
78
+ return undefined;
79
+ }
80
+ /** `design` with the blocks of each column passed through `change` (given the column's id). */
81
+ function mapColumns(design, change) {
82
+ return {
83
+ ...design,
84
+ sections: design.sections.map((section) => ({ ...section, columns: section.columns.map((column) => ({ ...column, blocks: change(column) })) })),
85
+ };
86
+ }
87
+ /** `design` with block `id` changed by `patch`. */
88
+ export function updateBlock(design, id, patch) {
89
+ return mapColumns(design, ({ blocks }) => blocks.map((block) => (block.id === id ? { ...block, ...patch } : block)));
90
+ }
91
+ /** `design` without block `id`. */
92
+ export function removeBlock(design, id) {
93
+ return mapColumns(design, ({ blocks }) => blocks.filter((block) => block.id !== id));
94
+ }
95
+ /** `design` with `blocks` put into column `columnId` at `index` (its end when past it). */
96
+ export function insertBlocks(design, columnId, index, blocks) {
97
+ return mapColumns(design, (column) => (column.id === columnId ? [...column.blocks.slice(0, index), ...blocks, ...column.blocks.slice(index)] : column.blocks));
98
+ }
99
+ /** `design` with a copy of block `id` right after it; the copy's id is returned too. */
100
+ export function duplicateBlock(design, id) {
101
+ const at = findBlock(design, id);
102
+ const column = design.sections[at.section].columns[at.column];
103
+ const [copy] = withNewIds([column.blocks[at.index]]);
104
+ return { design: insertBlocks(design, column.id, at.index + 1, [copy]), id: copy.id };
105
+ }
106
+ /** `design` with block `id` moved to column `columnId` at `index` (counted without the block). */
107
+ export function moveBlock(design, id, columnId, index) {
108
+ const block = getBlock(design, id);
109
+ return block ? insertBlocks(removeBlock(design, id), columnId, index, [block]) : design;
110
+ }
111
+ /** `design` with block `id` one place up (`delta` -1) or down (1) its column; unchanged at the column's end. */
112
+ export function nudgeBlock(design, id, delta) {
113
+ const at = findBlock(design, id);
114
+ const column = design.sections[at.section].columns[at.column];
115
+ const index = at.index + delta;
116
+ return index < 0 || index >= column.blocks.length ? design : moveBlock(design, id, column.id, index);
117
+ }
118
+ /**
119
+ * `design` after dragging block `activeId` over `overId` - another block (it takes that block's place) or a column (it goes to the column's
120
+ * end, which is how an empty column is dropped into). Unchanged when either is unknown.
121
+ */
122
+ export function dropBlock(design, activeId, overId) {
123
+ const from = findBlock(design, activeId);
124
+ if (!from || activeId === overId) {
125
+ return design;
126
+ }
127
+ const overBlock = findBlock(design, overId);
128
+ if (overBlock) {
129
+ const columnId = design.sections[overBlock.section].columns[overBlock.column].id;
130
+ return moveBlock(design, activeId, columnId, overBlock.index);
131
+ }
132
+ const overColumn = findColumn(design, overId);
133
+ if (!overColumn) {
134
+ return design;
135
+ }
136
+ const column = design.sections[overColumn.section].columns[overColumn.column];
137
+ const sameColumn = from.section === overColumn.section && from.column === overColumn.column;
138
+ return moveBlock(design, activeId, column.id, column.blocks.length - (sameColumn ? 1 : 0));
139
+ }
140
+ /** `design` with `section` put at `index`. */
141
+ export function addSection(design, index, section) {
142
+ return { ...design, sections: [...design.sections.slice(0, index), section, ...design.sections.slice(index)] };
143
+ }
144
+ /** `design` without section `id`. */
145
+ export function removeSection(design, id) {
146
+ return { ...design, sections: design.sections.filter((section) => section.id !== id) };
147
+ }
148
+ /** `design` with section `id` one place up (-1) or down (1); unchanged at either end. */
149
+ export function nudgeSection(design, id, delta) {
150
+ const from = design.sections.findIndex((section) => section.id === id);
151
+ const to = from + delta;
152
+ if (to < 0 || to >= design.sections.length) {
153
+ return design;
154
+ }
155
+ const sections = [...design.sections];
156
+ [sections[from], sections[to]] = [sections[to], sections[from]];
157
+ return { ...design, sections };
158
+ }
159
+ /**
160
+ * `design` with section `id` changed by `patch`; a `columns` count (1 to 4) adds empty columns or folds the blocks of removed ones into
161
+ * the last one kept, so no block is lost.
162
+ */
163
+ export function updateSection(design, id, patch) {
164
+ const { columns: count, ...rest } = patch;
165
+ return {
166
+ ...design,
167
+ sections: design.sections.map((section) => {
168
+ if (section.id !== id) {
169
+ return section;
170
+ }
171
+ let columns = section.columns;
172
+ if (count !== undefined && count > columns.length) {
173
+ columns = [...columns, ...Array.from({ length: count - columns.length }, () => ({ id: newId(), blocks: [] }))];
174
+ }
175
+ else if (count !== undefined && count < columns.length) {
176
+ const folded = columns.slice(count - 1).flatMap((column) => column.blocks);
177
+ columns = [...columns.slice(0, count - 1), { ...columns[count - 1], blocks: folded }];
178
+ }
179
+ return { ...section, ...rest, columns };
180
+ }),
181
+ };
182
+ }
183
+ /** What stops a design being saved, block by block - fields the server would refuse. */
184
+ export function designProblems(design) {
185
+ const problems = [];
186
+ for (const { columns } of design.sections) {
187
+ for (const { blocks } of columns) {
188
+ for (const block of blocks) {
189
+ const add = (message) => problems.push({ blockId: block.id, message });
190
+ if (block.type === "image" && !/^https:\/\//i.test(block.src)) {
191
+ add("An image needs an https:// address.");
192
+ }
193
+ else if (block.type === "button" && !isLink(block.href)) {
194
+ add(`The button "${block.text}" needs a link.`);
195
+ }
196
+ else if (block.type === "social" && block.links.some((link) => !isLink(link.href))) {
197
+ add("Every social link needs an address.");
198
+ }
199
+ else if (block.type === "heading" && block.text.trim() === "") {
200
+ add("A heading needs some text.");
201
+ }
202
+ }
203
+ }
204
+ }
205
+ return problems;
206
+ }
207
+ /** Whether `href` is a link the server takes: web, mail or phone, or starting with a merge tag. */
208
+ export function isLink(href) {
209
+ return /^(?:https?:\/\/\S|mailto:\S|tel:\S|\{\{)/i.test(href.trim());
210
+ }
211
+ /** How many designs back undo reaches. */
212
+ export const HISTORY_LIMIT = 100;
213
+ /** `history` with `design` as the current design (dropping what was undone). */
214
+ export function record(history, design) {
215
+ return { past: [...history.past, history.present].slice(-HISTORY_LIMIT), present: design, future: [] };
216
+ }
217
+ /** `history` one step back; unchanged when there's nothing to undo. */
218
+ export function undo(history) {
219
+ if (history.past.length === 0) {
220
+ return history;
221
+ }
222
+ return { past: history.past.slice(0, -1), present: history.past[history.past.length - 1], future: [history.present, ...history.future] };
223
+ }
224
+ /** `history` one step forward again; unchanged when nothing was undone. */
225
+ export function redo(history) {
226
+ if (history.future.length === 0) {
227
+ return history;
228
+ }
229
+ return { past: [...history.past, history.present], present: history.future[0], future: history.future.slice(1) };
230
+ }
@@ -0,0 +1,29 @@
1
+ /**
2
+ * The CRM's public pages, which subscribers reach from emails and forms without signing in: the preference center, double opt-in
3
+ * confirmation, one-click unsubscribe, and signup forms. Each is drawn in the deployment's branding.
4
+ */
5
+ import React, { PropsWithChildren } from "react";
6
+ /** The frame of a public page: the deployment's branding around a centred card. */
7
+ export declare function PublicPage({ title, children }: PropsWithChildren<{
8
+ title: string;
9
+ }>): React.JSX.Element;
10
+ /** A page that needs a token from an email but was opened without one. */
11
+ export declare function MissingLinkPage({ title }: {
12
+ title: string;
13
+ }): React.JSX.Element;
14
+ /** The preference center: which lists to be on, and unsubscribing from all email. */
15
+ export declare function PreferenceCenterPage({ token }: {
16
+ token: string;
17
+ }): React.JSX.Element;
18
+ /** Confirming a double opt-in subscription: one button, so a link scanner opening the page doesn't confirm on the reader's behalf. */
19
+ export declare function ConfirmPage({ token }: {
20
+ token: string;
21
+ }): React.JSX.Element;
22
+ /** An unsubscribe link's landing page: one button, then a way to the preference center. */
23
+ export declare function UnsubscribePage({ token }: {
24
+ token: string;
25
+ }): React.JSX.Element;
26
+ /** A signup form. */
27
+ export declare function SignupFormPage({ formUid }: {
28
+ formUid: string;
29
+ }): React.JSX.Element;
@@ -0,0 +1,155 @@
1
+ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
2
+ ///////////////////////////////////////////////////////////////////////////////
3
+ // Copyright (C) 2026 Jean-Philippe Steinmetz
4
+ // SPDX-License-Identifier: MPL-2.0
5
+ ///////////////////////////////////////////////////////////////////////////////
6
+ /**
7
+ * The CRM's public pages, which subscribers reach from emails and forms without signing in: the preference center, double opt-in
8
+ * confirmation, one-click unsubscribe, and signup forms. Each is drawn in the deployment's branding.
9
+ */
10
+ import { useEffect, useState } from "react";
11
+ import { ApiRequestError } from "@rapidmx/web-client/lib/util/api.js";
12
+ import useBranding from "@rapidmx/web-client/lib/branding/useBranding.js";
13
+ import { BrandingFooter, BrandingHeader } from "@rapidmx/web-client/shared/components/layout/BrandingChrome.js";
14
+ import Alert from "@rapidmx/web-client/lib/components/feedback/Alert.js";
15
+ import Button from "@rapidmx/web-client/lib/components/buttons/Button.js";
16
+ import FormField from "@rapidmx/web-client/lib/components/forms/FormField.js";
17
+ import { confirmSubscription, getPreferences, getPublicForm, savePreferences, submitForm, unsubscribe, } from "../../publicApi.js";
18
+ import { HONEYPOT_NAME } from "./honeypot.js";
19
+ const INPUT_CLASS = "w-full text-sm py-2 px-3 border border-border rounded-sm bg-surface text-text focus:outline-none focus:border-primary";
20
+ /** What a failed call says to a visitor: the server's own words for a refusal, a friendlier line for a link that doesn't work. */
21
+ function visitorMessage(err, fallback) {
22
+ if (err instanceof ApiRequestError && err.status === 404) {
23
+ return "This link doesn't work any more. Use the link in your most recent email.";
24
+ }
25
+ return err instanceof ApiRequestError ? err.message : fallback;
26
+ }
27
+ /** The frame of a public page: the deployment's branding around a centred card. */
28
+ export function PublicPage({ title, children }) {
29
+ const { branding } = useBranding();
30
+ return (_jsxs("div", { className: "min-h-screen flex flex-col", children: [_jsx(BrandingHeader, { branding: branding }), _jsx("main", { className: "flex-1 bg-surface-alt px-4 py-8 sm:py-12", children: _jsxs("div", { className: "mx-auto w-full max-w-xl rounded-lg border border-border bg-surface shadow-sm p-6 sm:p-8", children: [_jsx("h1", { className: "text-xl font-bold tracking-tight mb-4", children: title }), children] }) }), _jsx(BrandingFooter, { branding: branding })] }));
31
+ }
32
+ /** A page that needs a token from an email but was opened without one. */
33
+ export function MissingLinkPage({ title }) {
34
+ return (_jsx(PublicPage, { title: title, children: _jsx("p", { className: "text-sm", children: "Open this page from the link in one of our emails." }) }));
35
+ }
36
+ /** The preference center: which lists to be on, and unsubscribing from all email. */
37
+ export function PreferenceCenterPage({ token }) {
38
+ const [preferences, setPreferences] = useState(null);
39
+ const [choices, setChoices] = useState({});
40
+ const [error, setError] = useState(null);
41
+ const [saved, setSaved] = useState(null);
42
+ function show(next) {
43
+ setPreferences(next);
44
+ setChoices(Object.fromEntries(next.lists.map((list) => [list.uid, list.subscribed])));
45
+ }
46
+ useEffect(() => {
47
+ getPreferences(token)
48
+ .then(show)
49
+ .catch((err) => setError(visitorMessage(err, "Your preferences could not be loaded.")));
50
+ }, [token]);
51
+ async function save(input, message) {
52
+ try {
53
+ show(await savePreferences(token, input));
54
+ setSaved(message);
55
+ setError(null);
56
+ }
57
+ catch (err) {
58
+ setSaved(null);
59
+ setError(visitorMessage(err, "Your preferences could not be saved."));
60
+ }
61
+ }
62
+ return (_jsxs(PublicPage, { title: "Email preferences", children: [error && _jsx(Alert, { children: error }), saved && _jsx("p", { className: "text-sm text-success mb-3", children: saved }), preferences && (_jsxs(_Fragment, { children: [_jsxs("p", { className: "text-sm mb-4", children: ["Choose what ", preferences.workspaceName, " sends to ", _jsx("strong", { children: preferences.email }), "."] }), preferences.unsubscribedAll && (_jsxs("div", { className: "text-sm mb-4", children: ["You have unsubscribed from all email.", " ", _jsx("button", { type: "button", className: "text-primary-dark underline", onClick: () => void save({ unsubscribeAll: false }, "Welcome back."), children: "Resubscribe" })] })), _jsxs("form", { onSubmit: (event) => {
63
+ event.preventDefault();
64
+ void save({ lists: choices }, "Your preferences are saved.");
65
+ }, className: "flex flex-col gap-3", children: [preferences.lists.map((list) => (_jsxs("label", { className: "flex items-start gap-3 text-sm", children: [_jsx("input", { type: "checkbox", className: "mt-1", checked: choices[list.uid] ?? false, onChange: (event) => setChoices((current) => ({ ...current, [list.uid]: event.target.checked })) }), _jsxs("span", { children: [_jsx("span", { className: "font-medium", children: list.name }), list.description && _jsx("span", { className: "block text-text-muted", children: list.description })] })] }, list.uid))), preferences.lists.length > 0 && (_jsx(Button, { type: "submit", className: "!w-auto self-start", children: "Save preferences" }))] }), !preferences.unsubscribedAll && (_jsx("button", { type: "button", className: "text-sm text-danger underline mt-6", onClick: () => void save({ unsubscribeAll: true }, "You won't get any more marketing email from us."), children: "Unsubscribe from all email" }))] }))] }));
66
+ }
67
+ /** Confirming a double opt-in subscription: one button, so a link scanner opening the page doesn't confirm on the reader's behalf. */
68
+ export function ConfirmPage({ token }) {
69
+ const [result, setResult] = useState(null);
70
+ const [error, setError] = useState(null);
71
+ const [busy, setBusy] = useState(false);
72
+ async function confirm() {
73
+ setBusy(true);
74
+ try {
75
+ setResult(await confirmSubscription(token));
76
+ setError(null);
77
+ }
78
+ catch (err) {
79
+ setError(visitorMessage(err, "Your subscription could not be confirmed."));
80
+ }
81
+ finally {
82
+ setBusy(false);
83
+ }
84
+ }
85
+ return (_jsxs(PublicPage, { title: "Confirm your subscription", children: [error && _jsx(Alert, { children: error }), result ? (_jsx("p", { className: "text-sm", children: result.lists.length > 0
86
+ ? `Thanks! You're subscribed to ${result.lists.join(", ")} from ${result.workspaceName}.`
87
+ : "There is nothing left to confirm: you may have confirmed already, or unsubscribed since." })) : (_jsxs(_Fragment, { children: [_jsx("p", { className: "text-sm mb-4", children: "Confirm that you want to receive these emails." }), _jsx(Button, { type: "button", className: "!w-auto", loading: busy, disabled: busy, onClick: () => void confirm(), children: "Confirm subscription" })] }))] }));
88
+ }
89
+ /** An unsubscribe link's landing page: one button, then a way to the preference center. */
90
+ export function UnsubscribePage({ token }) {
91
+ const [result, setResult] = useState(null);
92
+ const [error, setError] = useState(null);
93
+ const [busy, setBusy] = useState(false);
94
+ async function run() {
95
+ setBusy(true);
96
+ try {
97
+ setResult(await unsubscribe(token));
98
+ setError(null);
99
+ }
100
+ catch (err) {
101
+ setError(visitorMessage(err, "You could not be unsubscribed. Please try again."));
102
+ }
103
+ finally {
104
+ setBusy(false);
105
+ }
106
+ }
107
+ return (_jsxs(PublicPage, { title: "Unsubscribe", children: [error && _jsx(Alert, { children: error }), result ? (_jsxs(_Fragment, { children: [_jsx("p", { className: "text-sm mb-4", children: result.list ? `You're unsubscribed from ${result.list}.` : `You won't get any more marketing email from ${result.workspaceName}.` }), _jsx("a", { className: "text-sm text-primary-dark underline", href: `/subscriptions/${encodeURIComponent(result.preferencesToken)}`, children: "Manage your email preferences" })] })) : (_jsx(Button, { type: "button", className: "!w-auto", loading: busy, disabled: busy, onClick: () => void run(), children: "Unsubscribe" }))] }));
108
+ }
109
+ /** A signup form. */
110
+ export function SignupFormPage({ formUid }) {
111
+ const [form, setForm] = useState(null);
112
+ const [values, setValues] = useState({});
113
+ const [trap, setTrap] = useState("");
114
+ const [result, setResult] = useState(null);
115
+ const [error, setError] = useState(null);
116
+ const [busy, setBusy] = useState(false);
117
+ useEffect(() => {
118
+ getPublicForm(formUid)
119
+ .then(setForm)
120
+ .catch((err) => setError(err instanceof ApiRequestError && err.status === 404 ? "This form isn't available." : "The form could not be loaded."));
121
+ }, [formUid]);
122
+ async function submit(event) {
123
+ event.preventDefault();
124
+ setBusy(true);
125
+ try {
126
+ const answer = await submitForm(formUid, values, trap);
127
+ if (answer.result === "subscribed" && answer.redirectUrl) {
128
+ window.location.assign(answer.redirectUrl);
129
+ return;
130
+ }
131
+ setResult(answer);
132
+ setError(null);
133
+ }
134
+ catch (err) {
135
+ setError(err instanceof ApiRequestError ? err.message : "The form could not be sent. Please try again.");
136
+ }
137
+ finally {
138
+ setBusy(false);
139
+ }
140
+ }
141
+ return (_jsxs(PublicPage, { title: form?.title ?? "Sign up", children: [error && _jsx(Alert, { children: error }), result && _jsx("p", { className: "text-sm", children: result.message }), form && !result && (_jsxs("form", { onSubmit: submit, className: "flex flex-col gap-3", "aria-label": form.title, children: [form.description && _jsx("p", { className: "text-sm text-text-muted", children: form.description }), form.fields.map((field) => (_jsx(SignupField, { field: field, value: values[field.target], onChange: (value) => setValues((current) => ({ ...current, [field.target]: value })) }, field.target))), _jsx("div", { "aria-hidden": "true", className: "absolute -left-[9999px] h-0 overflow-hidden", children: _jsxs("label", { children: ["Leave this empty", _jsx("input", { name: HONEYPOT_NAME, tabIndex: -1, autoComplete: "off", value: trap, onChange: (event) => setTrap(event.target.value) })] }) }), _jsx(Button, { type: "submit", className: "!w-auto self-start", loading: busy, disabled: busy, children: "Sign up" })] }))] }));
142
+ }
143
+ /** One field of a signup form, with an input suited to its type. */
144
+ function SignupField({ field, value, onChange }) {
145
+ const id = `signup-${field.target}`;
146
+ const label = `${field.label}${field.required ? " *" : ""}`;
147
+ if (field.type === "boolean") {
148
+ return (_jsxs("label", { className: "text-sm flex items-center gap-2", children: [_jsx("input", { type: "checkbox", checked: value === true, onChange: (event) => onChange(event.target.checked) }), label] }));
149
+ }
150
+ if (field.type === "multi_select") {
151
+ const chosen = Array.isArray(value) ? value : [];
152
+ return (_jsxs("fieldset", { className: "text-sm", children: [_jsx("legend", { className: "font-medium mb-1", children: label }), (field.options ?? []).map((option) => (_jsxs("label", { className: "flex items-center gap-2", children: [_jsx("input", { type: "checkbox", checked: chosen.includes(option.value), onChange: (event) => onChange(event.target.checked ? [...chosen, option.value] : chosen.filter((entry) => entry !== option.value)) }), option.label] }, option.value)))] }));
153
+ }
154
+ return (_jsx(FormField, { label: label, htmlFor: id, children: field.type === "select" ? (_jsxs("select", { id: id, className: INPUT_CLASS, value: value ?? "", required: field.required, onChange: (event) => onChange(event.target.value), children: [_jsx("option", { value: "", children: "Choose\u2026" }), (field.options ?? []).map((option) => (_jsx("option", { value: option.value, children: option.label }, option.value)))] })) : (_jsx("input", { id: id, className: INPUT_CLASS, type: field.type === "email" ? "email" : field.type === "number" ? "number" : field.type === "date" ? "date" : "text", required: field.required, value: value ?? "", onChange: (event) => onChange(event.target.value) })) }));
155
+ }
@@ -0,0 +1,2 @@
1
+ /** The name of a signup form's hidden trap field - the server's `HONEYPOT_FIELD`: people never fill it in, simple bots do. */
2
+ export declare const HONEYPOT_NAME = "website";
@@ -0,0 +1,6 @@
1
+ ///////////////////////////////////////////////////////////////////////////////
2
+ // Copyright (C) 2026 Jean-Philippe Steinmetz
3
+ // SPDX-License-Identifier: MPL-2.0
4
+ ///////////////////////////////////////////////////////////////////////////////
5
+ /** The name of a signup form's hidden trap field - the server's `HONEYPOT_FIELD`: people never fill it in, simple bots do. */
6
+ export const HONEYPOT_NAME = "website";
@@ -0,0 +1,32 @@
1
+ import React from "react";
2
+ /**
3
+ * The chart colors, by role. The three series slots are a validated categorical order (checked for color-vision deficiency
4
+ * separation in both schemes); the dark steps are their own, not a flip. `<html data-theme>` wins over the system's scheme.
5
+ */
6
+ export declare const VIZ_STYLE = "\n.crm-viz {\n --viz-series-1: #2a78d6; --viz-series-2: #eb6834; --viz-series-3: #1baf7a;\n --viz-grid: #e1e0d9; --viz-axis: #c3c2b7; --viz-muted: #898781; --viz-surface: #fcfcfb;\n}\n@media (prefers-color-scheme: dark) {\n :root:where(:not([data-theme=\"light\"])) .crm-viz {\n --viz-series-1: #3987e5; --viz-series-2: #d95926; --viz-series-3: #199e70;\n --viz-grid: #2c2c2a; --viz-axis: #383835; --viz-surface: #1a1a19;\n }\n}\n:root[data-theme=\"dark\"] .crm-viz {\n --viz-series-1: #3987e5; --viz-series-2: #d95926; --viz-series-3: #199e70;\n --viz-grid: #2c2c2a; --viz-axis: #383835; --viz-surface: #1a1a19;\n}\n";
7
+ /** One line of a chart, in a fixed slot (1-3) so its color follows it whatever else is shown. */
8
+ export interface Series {
9
+ key: string;
10
+ label: string;
11
+ slot: 1 | 2 | 3;
12
+ values: number[];
13
+ }
14
+ /** The smallest of 1, 2, 5 × 10ⁿ at or above `value` (1 for nothing), so the axis reads in round numbers. */
15
+ export declare function niceMax(value: number): number;
16
+ /** `YYYY-MM-DD` as a short day ("Mar 4"), in UTC like the reports. */
17
+ export declare function shortDate(date: string): string;
18
+ /** Lines over days, labelled at their ends, with a crosshair and a card of every value on hover. */
19
+ export declare function LineChart({ title, days, series, format }: {
20
+ title: string;
21
+ days: string[];
22
+ series: Series[];
23
+ format?: (value: number) => string;
24
+ }): React.JSX.Element;
25
+ /** One measure per day as columns (rounded at the top, gapped), with a card of the value on hover. */
26
+ export declare function ColumnChart({ title, label, days, values, format }: {
27
+ title: string;
28
+ label: string;
29
+ days: string[];
30
+ values: number[];
31
+ format?: (value: number) => string;
32
+ }): React.JSX.Element;
@@ -0,0 +1,121 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ ///////////////////////////////////////////////////////////////////////////////
3
+ // Copyright (C) 2026 Jean-Philippe Steinmetz
4
+ // SPDX-License-Identifier: MPL-2.0
5
+ ///////////////////////////////////////////////////////////////////////////////
6
+ import { useState } from "react";
7
+ /**
8
+ * The chart colors, by role. The three series slots are a validated categorical order (checked for color-vision deficiency
9
+ * separation in both schemes); the dark steps are their own, not a flip. `<html data-theme>` wins over the system's scheme.
10
+ */
11
+ export const VIZ_STYLE = `
12
+ .crm-viz {
13
+ --viz-series-1: #2a78d6; --viz-series-2: #eb6834; --viz-series-3: #1baf7a;
14
+ --viz-grid: #e1e0d9; --viz-axis: #c3c2b7; --viz-muted: #898781; --viz-surface: #fcfcfb;
15
+ }
16
+ @media (prefers-color-scheme: dark) {
17
+ :root:where(:not([data-theme="light"])) .crm-viz {
18
+ --viz-series-1: #3987e5; --viz-series-2: #d95926; --viz-series-3: #199e70;
19
+ --viz-grid: #2c2c2a; --viz-axis: #383835; --viz-surface: #1a1a19;
20
+ }
21
+ }
22
+ :root[data-theme="dark"] .crm-viz {
23
+ --viz-series-1: #3987e5; --viz-series-2: #d95926; --viz-series-3: #199e70;
24
+ --viz-grid: #2c2c2a; --viz-axis: #383835; --viz-surface: #1a1a19;
25
+ }
26
+ `;
27
+ const WIDTH = 640;
28
+ const HEIGHT = 200;
29
+ const PAD = { top: 12, right: 96, bottom: 24, left: 44 };
30
+ const PLOT_W = WIDTH - PAD.left - PAD.right;
31
+ const PLOT_H = HEIGHT - PAD.top - PAD.bottom;
32
+ /** The smallest of 1, 2, 5 × 10ⁿ at or above `value` (1 for nothing), so the axis reads in round numbers. */
33
+ export function niceMax(value) {
34
+ if (value <= 0) {
35
+ return 1;
36
+ }
37
+ const magnitude = 10 ** Math.floor(Math.log10(value));
38
+ const step = [1, 2, 5, 10].find((candidate) => candidate * magnitude >= value);
39
+ return step * magnitude;
40
+ }
41
+ /** `YYYY-MM-DD` as a short day ("Mar 4"), in UTC like the reports. */
42
+ export function shortDate(date) {
43
+ return new Date(`${date}T00:00:00Z`).toLocaleDateString(undefined, { month: "short", day: "numeric", timeZone: "UTC" });
44
+ }
45
+ const x = (index, count) => PAD.left + (count <= 1 ? PLOT_W / 2 : (index / (count - 1)) * PLOT_W);
46
+ const y = (value, max) => PAD.top + PLOT_H - (value / max) * PLOT_H;
47
+ /** The day under the pointer, from its position across the plot. */
48
+ function indexAt(event, count) {
49
+ const box = event.currentTarget.getBoundingClientRect();
50
+ const plotX = box.width > 0 ? ((event.clientX - box.left) / box.width) * WIDTH : PAD.left;
51
+ const ratio = (plotX - PAD.left) / PLOT_W;
52
+ return Math.min(count - 1, Math.max(0, Math.round(ratio * (count - 1))));
53
+ }
54
+ /** Gridlines and the value axis: four steps up to `max`. */
55
+ function Grid({ max, format }) {
56
+ return (_jsx("g", { children: [0, 1, 2, 3, 4].map((step) => {
57
+ const value = (max / 4) * step;
58
+ return (_jsxs("g", { children: [_jsx("line", { x1: PAD.left, x2: PAD.left + PLOT_W, y1: y(value, max), y2: y(value, max), stroke: step === 0 ? "var(--viz-axis)" : "var(--viz-grid)", strokeWidth: 1 }), _jsx("text", { x: PAD.left - 6, y: y(value, max), dy: "0.32em", textAnchor: "end", fontSize: 10, fill: "var(--viz-muted)", style: { fontVariantNumeric: "tabular-nums" }, children: format(value) })] }, step));
59
+ }) }));
60
+ }
61
+ /** The first, middle and last days under the plot. */
62
+ function DayAxis({ days }) {
63
+ const shown = [...new Set([0, Math.floor((days.length - 1) / 2), days.length - 1])];
64
+ return (_jsx("g", { children: shown.map((index) => (_jsx("text", { x: x(index, days.length), y: HEIGHT - 6, textAnchor: index === 0 ? "start" : index === days.length - 1 ? "end" : "middle", fontSize: 10, fill: "var(--viz-muted)", children: shortDate(days[index]) }, index))) }));
65
+ }
66
+ /** A table of the same numbers, for reading exact values and for assistive technology. */
67
+ function DataTable({ days, columns, format }) {
68
+ return (_jsx("div", { className: "max-h-64 overflow-y-auto mt-2", children: _jsxs("table", { className: "w-full text-sm", children: [_jsx("thead", { children: _jsxs("tr", { className: "text-left text-text-muted", children: [_jsx("th", { className: "font-normal py-1", children: "Day" }), columns.map((column) => (_jsx("th", { className: "font-normal py-1 text-right", children: column.label }, column.label)))] }) }), _jsx("tbody", { children: days.map((day, index) => (_jsxs("tr", { className: "border-t border-border", children: [_jsx("td", { className: "py-1", children: shortDate(day) }), columns.map((column) => (_jsx("td", { className: "py-1 text-right tabular-nums", children: format(column.values[index]) }, column.label)))] }, day))) })] }) }));
69
+ }
70
+ /** A chart's frame: its title, legend, the chart or its table, and the switch between them. */
71
+ function ChartFrame({ title, legend, table, children, }) {
72
+ const [showTable, setShowTable] = useState(false);
73
+ return (_jsxs("figure", { className: "crm-viz border border-border rounded-sm p-3 m-0", children: [_jsxs("div", { className: "flex items-center gap-3 mb-2 flex-wrap", children: [_jsx("figcaption", { className: "text-sm font-semibold", children: title }), legend && (_jsx("ul", { className: "flex gap-3 text-xs text-text-muted list-none m-0 p-0", "aria-label": "Legend", children: legend.map((series) => (_jsxs("li", { className: "flex items-center gap-1", children: [_jsx("span", { "aria-hidden": true, className: "inline-block w-3 h-0.5 rounded-full", style: { background: `var(--viz-series-${series.slot})` } }), series.label] }, series.key))) })), _jsx("button", { type: "button", className: "ml-auto text-xs text-primary hover:underline", "aria-pressed": showTable, onClick: () => setShowTable(!showTable), children: showTable ? "Show chart" : "Show table" })] }), showTable ? table : children] }));
74
+ }
75
+ /** The hover card: the day and each value, in text ink beside a colored key. */
76
+ function Tooltip({ index, count, day, rows }) {
77
+ const left = (x(index, count) / WIDTH) * 100;
78
+ return (_jsxs("div", { role: "status", className: "absolute top-0 pointer-events-none bg-surface border border-border rounded-sm shadow-sm px-2 py-1 text-xs whitespace-nowrap", style: left > 60 ? { right: `${100 - left + 2}%` } : { left: `${left + 2}%` }, children: [_jsx("div", { className: "font-semibold", children: shortDate(day) }), rows.map((row) => (_jsxs("div", { className: "flex items-center gap-1", children: [_jsx("span", { "aria-hidden": true, className: "inline-block w-2 h-2 rounded-full", style: { background: `var(--viz-series-${row.slot})` } }), _jsx("span", { className: "text-text-muted", children: row.label }), _jsx("span", { className: "ml-auto pl-2 tabular-nums", children: row.value })] }, row.label)))] }));
79
+ }
80
+ /** Moves the highlighted day with the arrow keys, Home and End. */
81
+ function useDayCursor(count) {
82
+ const [active, setActive] = useState(null);
83
+ const onKeyDown = (event) => {
84
+ const moves = { ArrowLeft: (active ?? count) - 1, ArrowRight: (active ?? -1) + 1, Home: 0, End: count - 1 };
85
+ if (event.key in moves) {
86
+ event.preventDefault();
87
+ setActive(Math.min(count - 1, Math.max(0, moves[event.key])));
88
+ }
89
+ else if (event.key === "Escape") {
90
+ setActive(null);
91
+ }
92
+ };
93
+ return [active, setActive, onKeyDown];
94
+ }
95
+ /** Lines over days, labelled at their ends, with a crosshair and a card of every value on hover. */
96
+ export function LineChart({ title, days, series, format = (value) => value.toLocaleString() }) {
97
+ const [active, setActive, onKeyDown] = useDayCursor(days.length);
98
+ const max = niceMax(Math.max(0, ...series.flatMap((entry) => entry.values)));
99
+ const last = days.length - 1;
100
+ // End labels, pushed apart so they never overlap.
101
+ const labels = series.map((entry) => ({ entry, at: y(entry.values[last], max) })).sort((a, b) => a.at - b.at);
102
+ for (let index = 1; index < labels.length; index++) {
103
+ labels[index].at = Math.max(labels[index].at, labels[index - 1].at + 12);
104
+ }
105
+ return (_jsx(ChartFrame, { title: title, legend: series, table: _jsx(DataTable, { days: days, columns: series.map(({ label, values }) => ({ label, values })), format: format }), children: _jsxs("div", { className: "relative", children: [_jsxs("svg", { viewBox: `0 0 ${WIDTH} ${HEIGHT}`, className: "w-full h-auto block outline-none focus-visible:ring-2 focus-visible:ring-primary", role: "img", "aria-label": `${title}, ${shortDate(days[0])} to ${shortDate(days[last])}`, tabIndex: 0, onKeyDown: onKeyDown, onMouseMove: (event) => setActive(indexAt(event, days.length)), onMouseLeave: () => setActive(null), onBlur: () => setActive(null), children: [_jsx(Grid, { max: max, format: format }), _jsx(DayAxis, { days: days }), active !== null && _jsx("line", { x1: x(active, days.length), x2: x(active, days.length), y1: PAD.top, y2: PAD.top + PLOT_H, stroke: "var(--viz-axis)", strokeWidth: 1 }), series.map((entry) => (_jsx("path", { d: entry.values.map((value, index) => `${index === 0 ? "M" : "L"}${x(index, days.length).toFixed(1)},${y(value, max).toFixed(1)}`).join(""), fill: "none", stroke: `var(--viz-series-${entry.slot})`, strokeWidth: 2, strokeLinejoin: "round", strokeLinecap: "round" }, entry.key))), active !== null &&
106
+ series.map((entry) => (_jsx("circle", { cx: x(active, days.length), cy: y(entry.values[active], max), r: 4, fill: `var(--viz-series-${entry.slot})`, stroke: "var(--viz-surface)", strokeWidth: 2 }, entry.key))), labels.map(({ entry, at }) => (_jsx("text", { x: PAD.left + PLOT_W + 6, y: at, dy: "0.32em", fontSize: 11, fill: "currentColor", children: entry.label }, entry.key)))] }), active !== null && (_jsx(Tooltip, { index: active, count: days.length, day: days[active], rows: series.map((entry) => ({ label: entry.label, value: format(entry.values[active]), slot: entry.slot })) }))] }) }));
107
+ }
108
+ /** One measure per day as columns (rounded at the top, gapped), with a card of the value on hover. */
109
+ export function ColumnChart({ title, label, days, values, format = (value) => value.toLocaleString() }) {
110
+ const [active, setActive, onKeyDown] = useDayCursor(days.length);
111
+ const max = niceMax(Math.max(0, ...values));
112
+ const slotWidth = PLOT_W / days.length;
113
+ const barWidth = Math.max(1, slotWidth - 2);
114
+ const baseline = PAD.top + PLOT_H;
115
+ return (_jsx(ChartFrame, { title: title, table: _jsx(DataTable, { days: days, columns: [{ label, values }], format: format }), children: _jsxs("div", { className: "relative", children: [_jsxs("svg", { viewBox: `0 0 ${WIDTH} ${HEIGHT}`, className: "w-full h-auto block outline-none focus-visible:ring-2 focus-visible:ring-primary", role: "img", "aria-label": `${title}, ${shortDate(days[0])} to ${shortDate(days[days.length - 1])}`, tabIndex: 0, onKeyDown: onKeyDown, onMouseLeave: () => setActive(null), onBlur: () => setActive(null), children: [_jsx(Grid, { max: max, format: format }), values.map((value, index) => {
116
+ const left = PAD.left + index * slotWidth + 1;
117
+ const height = (value / max) * PLOT_H;
118
+ const radius = Math.min(4, barWidth / 2, height);
119
+ return (_jsxs("g", { onMouseEnter: () => setActive(index), children: [_jsx("rect", { x: left - 1, y: PAD.top, width: slotWidth, height: PLOT_H, fill: "transparent" }), height > 0 && (_jsx("path", { d: `M${left},${baseline}V${baseline - height + radius}q0,-${radius} ${radius},-${radius}h${barWidth - 2 * radius}q${radius},0 ${radius},${radius}V${baseline}Z`, fill: "var(--viz-series-1)", opacity: active === null || active === index ? 1 : 0.55 }))] }, days[index]));
120
+ }), _jsx("text", { x: PAD.left, y: HEIGHT - 6, fontSize: 10, fill: "var(--viz-muted)", children: shortDate(days[0]) }), _jsx("text", { x: PAD.left + PLOT_W, y: HEIGHT - 6, textAnchor: "end", fontSize: 10, fill: "var(--viz-muted)", children: shortDate(days[days.length - 1]) })] }), active !== null && _jsx(Tooltip, { index: active, count: days.length, day: days[active], rows: [{ label, value: format(values[active]), slot: 1 }] })] }) }));
121
+ }
@@ -0,0 +1,9 @@
1
+ import React from "react";
2
+ /** The report periods offered, in days. */
3
+ export declare const PERIODS: readonly number[];
4
+ /**
5
+ * The workspace's reports over a period: email performance by day (sent, opened, clicked) with its rates and the recipient domains
6
+ * mailed most; audience growth (new contacts, subscribes and unsubscribes) with each list's subscribers; and sales (deals won by
7
+ * value, what is open, the win rate) for all pipelines or one. Days are UTC days.
8
+ */
9
+ export default function Reports(): React.JSX.Element;