@kelpie/ui 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 (704) hide show
  1. package/LICENSE +661 -0
  2. package/README.md +44 -0
  3. package/dist/ServiceStatus.d.ts +6 -0
  4. package/dist/ServiceStatus.d.ts.map +1 -0
  5. package/dist/ServiceStatus.js +35 -0
  6. package/dist/ServiceStatus.js.map +1 -0
  7. package/dist/api/ApiProvider.d.ts +19 -0
  8. package/dist/api/ApiProvider.d.ts.map +1 -0
  9. package/dist/api/ApiProvider.js +18 -0
  10. package/dist/api/ApiProvider.js.map +1 -0
  11. package/dist/api/client.d.ts +83 -0
  12. package/dist/api/client.d.ts.map +1 -0
  13. package/dist/api/client.js +162 -0
  14. package/dist/api/client.js.map +1 -0
  15. package/dist/api/context.d.ts +14 -0
  16. package/dist/api/context.d.ts.map +1 -0
  17. package/dist/api/context.js +20 -0
  18. package/dist/api/context.js.map +1 -0
  19. package/dist/api/errors.d.ts +9 -0
  20. package/dist/api/errors.d.ts.map +1 -0
  21. package/dist/api/errors.js +14 -0
  22. package/dist/api/errors.js.map +1 -0
  23. package/dist/api/health.d.ts +15 -0
  24. package/dist/api/health.d.ts.map +1 -0
  25. package/dist/api/health.js +22 -0
  26. package/dist/api/health.js.map +1 -0
  27. package/dist/api/json.d.ts +3 -0
  28. package/dist/api/json.d.ts.map +1 -0
  29. package/dist/api/json.js +5 -0
  30. package/dist/api/json.js.map +1 -0
  31. package/dist/api/queryClient.d.ts +17 -0
  32. package/dist/api/queryClient.d.ts.map +1 -0
  33. package/dist/api/queryClient.js +33 -0
  34. package/dist/api/queryClient.js.map +1 -0
  35. package/dist/api/resource.d.ts +110 -0
  36. package/dist/api/resource.d.ts.map +1 -0
  37. package/dist/api/resource.js +238 -0
  38. package/dist/api/resource.js.map +1 -0
  39. package/dist/api/resources/account.d.ts +49 -0
  40. package/dist/api/resources/account.d.ts.map +1 -0
  41. package/dist/api/resources/account.js +146 -0
  42. package/dist/api/resources/account.js.map +1 -0
  43. package/dist/api/resources/activities.d.ts +8 -0
  44. package/dist/api/resources/activities.d.ts.map +1 -0
  45. package/dist/api/resources/activities.js +21 -0
  46. package/dist/api/resources/activities.js.map +1 -0
  47. package/dist/api/resources/agentTasks.d.ts +31 -0
  48. package/dist/api/resources/agentTasks.d.ts.map +1 -0
  49. package/dist/api/resources/agentTasks.js +103 -0
  50. package/dist/api/resources/agentTasks.js.map +1 -0
  51. package/dist/api/resources/candidates.d.ts +17 -0
  52. package/dist/api/resources/candidates.d.ts.map +1 -0
  53. package/dist/api/resources/candidates.js +40 -0
  54. package/dist/api/resources/candidates.js.map +1 -0
  55. package/dist/api/resources/companies.d.ts +22 -0
  56. package/dist/api/resources/companies.d.ts.map +1 -0
  57. package/dist/api/resources/companies.js +36 -0
  58. package/dist/api/resources/companies.js.map +1 -0
  59. package/dist/api/resources/dashboard.d.ts +8 -0
  60. package/dist/api/resources/dashboard.d.ts.map +1 -0
  61. package/dist/api/resources/dashboard.js +27 -0
  62. package/dist/api/resources/dashboard.js.map +1 -0
  63. package/dist/api/resources/deals.d.ts +30 -0
  64. package/dist/api/resources/deals.d.ts.map +1 -0
  65. package/dist/api/resources/deals.js +38 -0
  66. package/dist/api/resources/deals.js.map +1 -0
  67. package/dist/api/resources/decisions.d.ts +13 -0
  68. package/dist/api/resources/decisions.d.ts.map +1 -0
  69. package/dist/api/resources/decisions.js +38 -0
  70. package/dist/api/resources/decisions.js.map +1 -0
  71. package/dist/api/resources/forms.d.ts +82 -0
  72. package/dist/api/resources/forms.d.ts.map +1 -0
  73. package/dist/api/resources/forms.js +129 -0
  74. package/dist/api/resources/forms.js.map +1 -0
  75. package/dist/api/resources/handbookPages.d.ts +33 -0
  76. package/dist/api/resources/handbookPages.d.ts.map +1 -0
  77. package/dist/api/resources/handbookPages.js +49 -0
  78. package/dist/api/resources/handbookPages.js.map +1 -0
  79. package/dist/api/resources/importJobs.d.ts +72 -0
  80. package/dist/api/resources/importJobs.d.ts.map +1 -0
  81. package/dist/api/resources/importJobs.js +145 -0
  82. package/dist/api/resources/importJobs.js.map +1 -0
  83. package/dist/api/resources/invites.d.ts +19 -0
  84. package/dist/api/resources/invites.d.ts.map +1 -0
  85. package/dist/api/resources/invites.js +78 -0
  86. package/dist/api/resources/invites.js.map +1 -0
  87. package/dist/api/resources/mcpTools.d.ts +8 -0
  88. package/dist/api/resources/mcpTools.d.ts.map +1 -0
  89. package/dist/api/resources/mcpTools.js +23 -0
  90. package/dist/api/resources/mcpTools.js.map +1 -0
  91. package/dist/api/resources/members.d.ts +40 -0
  92. package/dist/api/resources/members.d.ts.map +1 -0
  93. package/dist/api/resources/members.js +67 -0
  94. package/dist/api/resources/members.js.map +1 -0
  95. package/dist/api/resources/moduleSettings.d.ts +14 -0
  96. package/dist/api/resources/moduleSettings.d.ts.map +1 -0
  97. package/dist/api/resources/moduleSettings.js +43 -0
  98. package/dist/api/resources/moduleSettings.js.map +1 -0
  99. package/dist/api/resources/mutation.d.ts +18 -0
  100. package/dist/api/resources/mutation.d.ts.map +1 -0
  101. package/dist/api/resources/mutation.js +12 -0
  102. package/dist/api/resources/mutation.js.map +1 -0
  103. package/dist/api/resources/notes.d.ts +14 -0
  104. package/dist/api/resources/notes.d.ts.map +1 -0
  105. package/dist/api/resources/notes.js +39 -0
  106. package/dist/api/resources/notes.js.map +1 -0
  107. package/dist/api/resources/opportunities.d.ts +29 -0
  108. package/dist/api/resources/opportunities.d.ts.map +1 -0
  109. package/dist/api/resources/opportunities.js +38 -0
  110. package/dist/api/resources/opportunities.js.map +1 -0
  111. package/dist/api/resources/partnerships.d.ts +33 -0
  112. package/dist/api/resources/partnerships.d.ts.map +1 -0
  113. package/dist/api/resources/partnerships.js +39 -0
  114. package/dist/api/resources/partnerships.js.map +1 -0
  115. package/dist/api/resources/people.d.ts +22 -0
  116. package/dist/api/resources/people.d.ts.map +1 -0
  117. package/dist/api/resources/people.js +36 -0
  118. package/dist/api/resources/people.js.map +1 -0
  119. package/dist/api/resources/pipelineStages.d.ts +22 -0
  120. package/dist/api/resources/pipelineStages.d.ts.map +1 -0
  121. package/dist/api/resources/pipelineStages.js +61 -0
  122. package/dist/api/resources/pipelineStages.js.map +1 -0
  123. package/dist/api/resources/planItems.d.ts +31 -0
  124. package/dist/api/resources/planItems.d.ts.map +1 -0
  125. package/dist/api/resources/planItems.js +60 -0
  126. package/dist/api/resources/planItems.js.map +1 -0
  127. package/dist/api/resources/positions.d.ts +23 -0
  128. package/dist/api/resources/positions.d.ts.map +1 -0
  129. package/dist/api/resources/positions.js +31 -0
  130. package/dist/api/resources/positions.js.map +1 -0
  131. package/dist/api/resources/raises.d.ts +30 -0
  132. package/dist/api/resources/raises.d.ts.map +1 -0
  133. package/dist/api/resources/raises.js +38 -0
  134. package/dist/api/resources/raises.js.map +1 -0
  135. package/dist/api/resources/roles.d.ts +20 -0
  136. package/dist/api/resources/roles.d.ts.map +1 -0
  137. package/dist/api/resources/roles.js +31 -0
  138. package/dist/api/resources/roles.js.map +1 -0
  139. package/dist/api/resources/search.d.ts +12 -0
  140. package/dist/api/resources/search.d.ts.map +1 -0
  141. package/dist/api/resources/search.js +37 -0
  142. package/dist/api/resources/search.js.map +1 -0
  143. package/dist/api/resources/session.d.ts +58 -0
  144. package/dist/api/resources/session.d.ts.map +1 -0
  145. package/dist/api/resources/session.js +157 -0
  146. package/dist/api/resources/session.js.map +1 -0
  147. package/dist/api/resources/webhooks.d.ts +45 -0
  148. package/dist/api/resources/webhooks.d.ts.map +1 -0
  149. package/dist/api/resources/webhooks.js +106 -0
  150. package/dist/api/resources/webhooks.js.map +1 -0
  151. package/dist/api/resources/workspace.d.ts +20 -0
  152. package/dist/api/resources/workspace.d.ts.map +1 -0
  153. package/dist/api/resources/workspace.js +63 -0
  154. package/dist/api/resources/workspace.js.map +1 -0
  155. package/dist/app/KelpieApp.d.ts +18 -0
  156. package/dist/app/KelpieApp.d.ts.map +1 -0
  157. package/dist/app/KelpieApp.js +59 -0
  158. package/dist/app/KelpieApp.js.map +1 -0
  159. package/dist/app/SessionGate.d.ts +14 -0
  160. package/dist/app/SessionGate.d.ts.map +1 -0
  161. package/dist/app/SessionGate.js +33 -0
  162. package/dist/app/SessionGate.js.map +1 -0
  163. package/dist/components/ActivitiesPanel.d.ts +28 -0
  164. package/dist/components/ActivitiesPanel.d.ts.map +1 -0
  165. package/dist/components/ActivitiesPanel.js +75 -0
  166. package/dist/components/ActivitiesPanel.js.map +1 -0
  167. package/dist/components/AgentTasks.d.ts +16 -0
  168. package/dist/components/AgentTasks.d.ts.map +1 -0
  169. package/dist/components/AgentTasks.js +166 -0
  170. package/dist/components/AgentTasks.js.map +1 -0
  171. package/dist/components/Chip.d.ts +10 -0
  172. package/dist/components/Chip.d.ts.map +1 -0
  173. package/dist/components/Chip.js +21 -0
  174. package/dist/components/Chip.js.map +1 -0
  175. package/dist/components/CopyButton.d.ts +7 -0
  176. package/dist/components/CopyButton.d.ts.map +1 -0
  177. package/dist/components/CopyButton.js +30 -0
  178. package/dist/components/CopyButton.js.map +1 -0
  179. package/dist/components/DataTable.d.ts +36 -0
  180. package/dist/components/DataTable.d.ts.map +1 -0
  181. package/dist/components/DataTable.js +43 -0
  182. package/dist/components/DataTable.js.map +1 -0
  183. package/dist/components/DecisionsPanel.d.ts +14 -0
  184. package/dist/components/DecisionsPanel.d.ts.map +1 -0
  185. package/dist/components/DecisionsPanel.js +73 -0
  186. package/dist/components/DecisionsPanel.js.map +1 -0
  187. package/dist/components/DeleteRecord.d.ts +19 -0
  188. package/dist/components/DeleteRecord.d.ts.map +1 -0
  189. package/dist/components/DeleteRecord.js +22 -0
  190. package/dist/components/DeleteRecord.js.map +1 -0
  191. package/dist/components/EntitySearch.d.ts +33 -0
  192. package/dist/components/EntitySearch.d.ts.map +1 -0
  193. package/dist/components/EntitySearch.js +111 -0
  194. package/dist/components/EntitySearch.js.map +1 -0
  195. package/dist/components/ErrorBoundary.d.ts +21 -0
  196. package/dist/components/ErrorBoundary.d.ts.map +1 -0
  197. package/dist/components/ErrorBoundary.js +26 -0
  198. package/dist/components/ErrorBoundary.js.map +1 -0
  199. package/dist/components/InlineEdit.d.ts +37 -0
  200. package/dist/components/InlineEdit.d.ts.map +1 -0
  201. package/dist/components/InlineEdit.js +77 -0
  202. package/dist/components/InlineEdit.js.map +1 -0
  203. package/dist/components/KanbanBoard.d.ts +24 -0
  204. package/dist/components/KanbanBoard.d.ts.map +1 -0
  205. package/dist/components/KanbanBoard.js +92 -0
  206. package/dist/components/KanbanBoard.js.map +1 -0
  207. package/dist/components/MarkdownView.d.ts +4 -0
  208. package/dist/components/MarkdownView.d.ts.map +1 -0
  209. package/dist/components/MarkdownView.js +45 -0
  210. package/dist/components/MarkdownView.js.map +1 -0
  211. package/dist/components/NotesPanel.d.ts +17 -0
  212. package/dist/components/NotesPanel.d.ts.map +1 -0
  213. package/dist/components/NotesPanel.js +53 -0
  214. package/dist/components/NotesPanel.js.map +1 -0
  215. package/dist/components/PageHeader.d.ts +20 -0
  216. package/dist/components/PageHeader.d.ts.map +1 -0
  217. package/dist/components/PageHeader.js +15 -0
  218. package/dist/components/PageHeader.js.map +1 -0
  219. package/dist/components/PhonesField.d.ts +7 -0
  220. package/dist/components/PhonesField.d.ts.map +1 -0
  221. package/dist/components/PhonesField.js +92 -0
  222. package/dist/components/PhonesField.js.map +1 -0
  223. package/dist/components/PlanAttention.d.ts +40 -0
  224. package/dist/components/PlanAttention.d.ts.map +1 -0
  225. package/dist/components/PlanAttention.js +86 -0
  226. package/dist/components/PlanAttention.js.map +1 -0
  227. package/dist/components/PlanPanel.d.ts +18 -0
  228. package/dist/components/PlanPanel.d.ts.map +1 -0
  229. package/dist/components/PlanPanel.js +102 -0
  230. package/dist/components/PlanPanel.js.map +1 -0
  231. package/dist/components/QueryState.d.ts +24 -0
  232. package/dist/components/QueryState.d.ts.map +1 -0
  233. package/dist/components/QueryState.js +34 -0
  234. package/dist/components/QueryState.js.map +1 -0
  235. package/dist/components/RecordTabs.d.ts +16 -0
  236. package/dist/components/RecordTabs.d.ts.map +1 -0
  237. package/dist/components/RecordTabs.js +15 -0
  238. package/dist/components/RecordTabs.js.map +1 -0
  239. package/dist/components/SectionHeader.d.ts +15 -0
  240. package/dist/components/SectionHeader.d.ts.map +1 -0
  241. package/dist/components/SectionHeader.js +14 -0
  242. package/dist/components/SectionHeader.js.map +1 -0
  243. package/dist/components/SegmentedControl.d.ts +13 -0
  244. package/dist/components/SegmentedControl.d.ts.map +1 -0
  245. package/dist/components/SegmentedControl.js +14 -0
  246. package/dist/components/SegmentedControl.js.map +1 -0
  247. package/dist/components/Shell.d.ts +2 -0
  248. package/dist/components/Shell.d.ts.map +1 -0
  249. package/dist/components/Shell.js +143 -0
  250. package/dist/components/Shell.js.map +1 -0
  251. package/dist/components/SidebarField.d.ts +8 -0
  252. package/dist/components/SidebarField.d.ts.map +1 -0
  253. package/dist/components/SidebarField.js +6 -0
  254. package/dist/components/SidebarField.js.map +1 -0
  255. package/dist/components/SocialProfilesField.d.ts +8 -0
  256. package/dist/components/SocialProfilesField.d.ts.map +1 -0
  257. package/dist/components/SocialProfilesField.js +176 -0
  258. package/dist/components/SocialProfilesField.js.map +1 -0
  259. package/dist/components/StageSettings.d.ts +16 -0
  260. package/dist/components/StageSettings.d.ts.map +1 -0
  261. package/dist/components/StageSettings.js +107 -0
  262. package/dist/components/StageSettings.js.map +1 -0
  263. package/dist/components/SummaryBlock.d.ts +12 -0
  264. package/dist/components/SummaryBlock.d.ts.map +1 -0
  265. package/dist/components/SummaryBlock.js +12 -0
  266. package/dist/components/SummaryBlock.js.map +1 -0
  267. package/dist/index.d.ts +90 -0
  268. package/dist/index.d.ts.map +1 -0
  269. package/dist/index.js +55 -0
  270. package/dist/index.js.map +1 -0
  271. package/dist/lib/dates.d.ts +26 -0
  272. package/dist/lib/dates.d.ts.map +1 -0
  273. package/dist/lib/dates.js +71 -0
  274. package/dist/lib/dates.js.map +1 -0
  275. package/dist/lib/money.d.ts +7 -0
  276. package/dist/lib/money.d.ts.map +1 -0
  277. package/dist/lib/money.js +13 -0
  278. package/dist/lib/money.js.map +1 -0
  279. package/dist/lib/names.d.ts +9 -0
  280. package/dist/lib/names.d.ts.map +1 -0
  281. package/dist/lib/names.js +13 -0
  282. package/dist/lib/names.js.map +1 -0
  283. package/dist/lib/plan.d.ts +67 -0
  284. package/dist/lib/plan.d.ts.map +1 -0
  285. package/dist/lib/plan.js +96 -0
  286. package/dist/lib/plan.js.map +1 -0
  287. package/dist/lib/theme.d.ts +19 -0
  288. package/dist/lib/theme.d.ts.map +1 -0
  289. package/dist/lib/theme.js +30 -0
  290. package/dist/lib/theme.js.map +1 -0
  291. package/dist/pages/CompaniesPage.d.ts +2 -0
  292. package/dist/pages/CompaniesPage.d.ts.map +1 -0
  293. package/dist/pages/CompaniesPage.js +77 -0
  294. package/dist/pages/CompaniesPage.js.map +1 -0
  295. package/dist/pages/CompanyDetail.d.ts +2 -0
  296. package/dist/pages/CompanyDetail.d.ts.map +1 -0
  297. package/dist/pages/CompanyDetail.js +177 -0
  298. package/dist/pages/CompanyDetail.js.map +1 -0
  299. package/dist/pages/DealDetail.d.ts +2 -0
  300. package/dist/pages/DealDetail.d.ts.map +1 -0
  301. package/dist/pages/DealDetail.js +192 -0
  302. package/dist/pages/DealDetail.js.map +1 -0
  303. package/dist/pages/DealStageSettingsPage.d.ts +7 -0
  304. package/dist/pages/DealStageSettingsPage.d.ts.map +1 -0
  305. package/dist/pages/DealStageSettingsPage.js +38 -0
  306. package/dist/pages/DealStageSettingsPage.js.map +1 -0
  307. package/dist/pages/DealsPage.d.ts +2 -0
  308. package/dist/pages/DealsPage.d.ts.map +1 -0
  309. package/dist/pages/DealsPage.js +177 -0
  310. package/dist/pages/DealsPage.js.map +1 -0
  311. package/dist/pages/DecisionsPage.d.ts +2 -0
  312. package/dist/pages/DecisionsPage.d.ts.map +1 -0
  313. package/dist/pages/DecisionsPage.js +121 -0
  314. package/dist/pages/DecisionsPage.js.map +1 -0
  315. package/dist/pages/FormDetail.d.ts +2 -0
  316. package/dist/pages/FormDetail.d.ts.map +1 -0
  317. package/dist/pages/FormDetail.js +56 -0
  318. package/dist/pages/FormDetail.js.map +1 -0
  319. package/dist/pages/FormsPage.d.ts +2 -0
  320. package/dist/pages/FormsPage.d.ts.map +1 -0
  321. package/dist/pages/FormsPage.js +67 -0
  322. package/dist/pages/FormsPage.js.map +1 -0
  323. package/dist/pages/FundraisingPage.d.ts +2 -0
  324. package/dist/pages/FundraisingPage.d.ts.map +1 -0
  325. package/dist/pages/FundraisingPage.js +187 -0
  326. package/dist/pages/FundraisingPage.js.map +1 -0
  327. package/dist/pages/HiringPage.d.ts +9 -0
  328. package/dist/pages/HiringPage.d.ts.map +1 -0
  329. package/dist/pages/HiringPage.js +73 -0
  330. package/dist/pages/HiringPage.js.map +1 -0
  331. package/dist/pages/NotFoundPage.d.ts +10 -0
  332. package/dist/pages/NotFoundPage.d.ts.map +1 -0
  333. package/dist/pages/NotFoundPage.js +14 -0
  334. package/dist/pages/NotFoundPage.js.map +1 -0
  335. package/dist/pages/OpportunitiesPage.d.ts +2 -0
  336. package/dist/pages/OpportunitiesPage.d.ts.map +1 -0
  337. package/dist/pages/OpportunitiesPage.js +184 -0
  338. package/dist/pages/OpportunitiesPage.js.map +1 -0
  339. package/dist/pages/OpportunityDetail.d.ts +2 -0
  340. package/dist/pages/OpportunityDetail.d.ts.map +1 -0
  341. package/dist/pages/OpportunityDetail.js +132 -0
  342. package/dist/pages/OpportunityDetail.js.map +1 -0
  343. package/dist/pages/OpportunityStageSettingsPage.d.ts +3 -0
  344. package/dist/pages/OpportunityStageSettingsPage.d.ts.map +1 -0
  345. package/dist/pages/OpportunityStageSettingsPage.js +34 -0
  346. package/dist/pages/OpportunityStageSettingsPage.js.map +1 -0
  347. package/dist/pages/PartnershipDetail.d.ts +2 -0
  348. package/dist/pages/PartnershipDetail.d.ts.map +1 -0
  349. package/dist/pages/PartnershipDetail.js +179 -0
  350. package/dist/pages/PartnershipDetail.js.map +1 -0
  351. package/dist/pages/PartnershipStageSettingsPage.d.ts +3 -0
  352. package/dist/pages/PartnershipStageSettingsPage.d.ts.map +1 -0
  353. package/dist/pages/PartnershipStageSettingsPage.js +34 -0
  354. package/dist/pages/PartnershipStageSettingsPage.js.map +1 -0
  355. package/dist/pages/PartnershipsPage.d.ts +2 -0
  356. package/dist/pages/PartnershipsPage.d.ts.map +1 -0
  357. package/dist/pages/PartnershipsPage.js +182 -0
  358. package/dist/pages/PartnershipsPage.js.map +1 -0
  359. package/dist/pages/PeoplePage.d.ts +10 -0
  360. package/dist/pages/PeoplePage.d.ts.map +1 -0
  361. package/dist/pages/PeoplePage.js +71 -0
  362. package/dist/pages/PeoplePage.js.map +1 -0
  363. package/dist/pages/PersonDetail.d.ts +2 -0
  364. package/dist/pages/PersonDetail.d.ts.map +1 -0
  365. package/dist/pages/PersonDetail.js +193 -0
  366. package/dist/pages/PersonDetail.js.map +1 -0
  367. package/dist/pages/PlanningPage.d.ts +2 -0
  368. package/dist/pages/PlanningPage.d.ts.map +1 -0
  369. package/dist/pages/PlanningPage.js +112 -0
  370. package/dist/pages/PlanningPage.js.map +1 -0
  371. package/dist/pages/RaiseDetail.d.ts +2 -0
  372. package/dist/pages/RaiseDetail.d.ts.map +1 -0
  373. package/dist/pages/RaiseDetail.js +198 -0
  374. package/dist/pages/RaiseDetail.js.map +1 -0
  375. package/dist/pages/RaiseStageSettingsPage.d.ts +3 -0
  376. package/dist/pages/RaiseStageSettingsPage.d.ts.map +1 -0
  377. package/dist/pages/RaiseStageSettingsPage.js +34 -0
  378. package/dist/pages/RaiseStageSettingsPage.js.map +1 -0
  379. package/dist/pages/RoleDetail.d.ts +2 -0
  380. package/dist/pages/RoleDetail.d.ts.map +1 -0
  381. package/dist/pages/RoleDetail.js +177 -0
  382. package/dist/pages/RoleDetail.js.map +1 -0
  383. package/dist/pages/SearchPage.d.ts +2 -0
  384. package/dist/pages/SearchPage.d.ts.map +1 -0
  385. package/dist/pages/SearchPage.js +51 -0
  386. package/dist/pages/SearchPage.js.map +1 -0
  387. package/dist/pages/account/AccountLayout.d.ts +2 -0
  388. package/dist/pages/account/AccountLayout.d.ts.map +1 -0
  389. package/dist/pages/account/AccountLayout.js +25 -0
  390. package/dist/pages/account/AccountLayout.js.map +1 -0
  391. package/dist/pages/account/Field.d.ts +8 -0
  392. package/dist/pages/account/Field.d.ts.map +1 -0
  393. package/dist/pages/account/Field.js +6 -0
  394. package/dist/pages/account/Field.js.map +1 -0
  395. package/dist/pages/account/PreferencesPage.d.ts +2 -0
  396. package/dist/pages/account/PreferencesPage.d.ts.map +1 -0
  397. package/dist/pages/account/PreferencesPage.js +92 -0
  398. package/dist/pages/account/PreferencesPage.js.map +1 -0
  399. package/dist/pages/account/ProfilePage.d.ts +14 -0
  400. package/dist/pages/account/ProfilePage.d.ts.map +1 -0
  401. package/dist/pages/account/ProfilePage.js +71 -0
  402. package/dist/pages/account/ProfilePage.js.map +1 -0
  403. package/dist/pages/account/SecurityPage.d.ts +11 -0
  404. package/dist/pages/account/SecurityPage.d.ts.map +1 -0
  405. package/dist/pages/account/SecurityPage.js +78 -0
  406. package/dist/pages/account/SecurityPage.js.map +1 -0
  407. package/dist/pages/admin/DataPage.d.ts +3 -0
  408. package/dist/pages/admin/DataPage.d.ts.map +1 -0
  409. package/dist/pages/admin/DataPage.js +210 -0
  410. package/dist/pages/admin/DataPage.js.map +1 -0
  411. package/dist/pages/admin/McpPage.d.ts +2 -0
  412. package/dist/pages/admin/McpPage.d.ts.map +1 -0
  413. package/dist/pages/admin/McpPage.js +128 -0
  414. package/dist/pages/admin/McpPage.js.map +1 -0
  415. package/dist/pages/admin/ModulesPage.d.ts +2 -0
  416. package/dist/pages/admin/ModulesPage.d.ts.map +1 -0
  417. package/dist/pages/admin/ModulesPage.js +53 -0
  418. package/dist/pages/admin/ModulesPage.js.map +1 -0
  419. package/dist/pages/admin/TeamPage.d.ts +2 -0
  420. package/dist/pages/admin/TeamPage.d.ts.map +1 -0
  421. package/dist/pages/admin/TeamPage.js +99 -0
  422. package/dist/pages/admin/TeamPage.js.map +1 -0
  423. package/dist/pages/admin/WebhookDeliveries.d.ts +4 -0
  424. package/dist/pages/admin/WebhookDeliveries.d.ts.map +1 -0
  425. package/dist/pages/admin/WebhookDeliveries.js +88 -0
  426. package/dist/pages/admin/WebhookDeliveries.js.map +1 -0
  427. package/dist/pages/admin/WebhooksPage.d.ts +2 -0
  428. package/dist/pages/admin/WebhooksPage.d.ts.map +1 -0
  429. package/dist/pages/admin/WebhooksPage.js +152 -0
  430. package/dist/pages/admin/WebhooksPage.js.map +1 -0
  431. package/dist/pages/admin/WorkspaceSettingsPage.d.ts +2 -0
  432. package/dist/pages/admin/WorkspaceSettingsPage.d.ts.map +1 -0
  433. package/dist/pages/admin/WorkspaceSettingsPage.js +117 -0
  434. package/dist/pages/admin/WorkspaceSettingsPage.js.map +1 -0
  435. package/dist/pages/auth/AuthForm.d.ts +46 -0
  436. package/dist/pages/auth/AuthForm.d.ts.map +1 -0
  437. package/dist/pages/auth/AuthForm.js +32 -0
  438. package/dist/pages/auth/AuthForm.js.map +1 -0
  439. package/dist/pages/auth/AuthLayout.d.ts +24 -0
  440. package/dist/pages/auth/AuthLayout.d.ts.map +1 -0
  441. package/dist/pages/auth/AuthLayout.js +19 -0
  442. package/dist/pages/auth/AuthLayout.js.map +1 -0
  443. package/dist/pages/auth/ForgotPasswordPage.d.ts +13 -0
  444. package/dist/pages/auth/ForgotPasswordPage.d.ts.map +1 -0
  445. package/dist/pages/auth/ForgotPasswordPage.js +39 -0
  446. package/dist/pages/auth/ForgotPasswordPage.js.map +1 -0
  447. package/dist/pages/auth/JoinPage.d.ts +12 -0
  448. package/dist/pages/auth/JoinPage.d.ts.map +1 -0
  449. package/dist/pages/auth/JoinPage.js +43 -0
  450. package/dist/pages/auth/JoinPage.js.map +1 -0
  451. package/dist/pages/auth/ResetPasswordPage.d.ts +13 -0
  452. package/dist/pages/auth/ResetPasswordPage.d.ts.map +1 -0
  453. package/dist/pages/auth/ResetPasswordPage.js +58 -0
  454. package/dist/pages/auth/ResetPasswordPage.js.map +1 -0
  455. package/dist/pages/auth/SignInPage.d.ts +2 -0
  456. package/dist/pages/auth/SignInPage.d.ts.map +1 -0
  457. package/dist/pages/auth/SignInPage.js +38 -0
  458. package/dist/pages/auth/SignInPage.js.map +1 -0
  459. package/dist/pages/auth/SignUpPage.d.ts +13 -0
  460. package/dist/pages/auth/SignUpPage.d.ts.map +1 -0
  461. package/dist/pages/auth/SignUpPage.js +43 -0
  462. package/dist/pages/auth/SignUpPage.js.map +1 -0
  463. package/dist/pages/candidateFields.d.ts +22 -0
  464. package/dist/pages/candidateFields.d.ts.map +1 -0
  465. package/dist/pages/candidateFields.js +82 -0
  466. package/dist/pages/candidateFields.js.map +1 -0
  467. package/dist/pages/dashboard/DashboardPage.d.ts +2 -0
  468. package/dist/pages/dashboard/DashboardPage.d.ts.map +1 -0
  469. package/dist/pages/dashboard/DashboardPage.js +40 -0
  470. package/dist/pages/dashboard/DashboardPage.js.map +1 -0
  471. package/dist/pages/dashboard/attention.d.ts +41 -0
  472. package/dist/pages/dashboard/attention.d.ts.map +1 -0
  473. package/dist/pages/dashboard/attention.js +146 -0
  474. package/dist/pages/dashboard/attention.js.map +1 -0
  475. package/dist/pages/dashboard/sections.d.ts +20 -0
  476. package/dist/pages/dashboard/sections.d.ts.map +1 -0
  477. package/dist/pages/dashboard/sections.js +60 -0
  478. package/dist/pages/dashboard/sections.js.map +1 -0
  479. package/dist/pages/fields.d.ts +11 -0
  480. package/dist/pages/fields.d.ts.map +1 -0
  481. package/dist/pages/fields.js +17 -0
  482. package/dist/pages/fields.js.map +1 -0
  483. package/dist/pages/forms/EmbedPanel.d.ts +14 -0
  484. package/dist/pages/forms/EmbedPanel.d.ts.map +1 -0
  485. package/dist/pages/forms/EmbedPanel.js +19 -0
  486. package/dist/pages/forms/EmbedPanel.js.map +1 -0
  487. package/dist/pages/forms/FieldsEditor.d.ts +6 -0
  488. package/dist/pages/forms/FieldsEditor.d.ts.map +1 -0
  489. package/dist/pages/forms/FieldsEditor.js +115 -0
  490. package/dist/pages/forms/FieldsEditor.js.map +1 -0
  491. package/dist/pages/forms/FormSettings.d.ts +6 -0
  492. package/dist/pages/forms/FormSettings.d.ts.map +1 -0
  493. package/dist/pages/forms/FormSettings.js +47 -0
  494. package/dist/pages/forms/FormSettings.js.map +1 -0
  495. package/dist/pages/forms/SubmissionsTable.d.ts +8 -0
  496. package/dist/pages/forms/SubmissionsTable.d.ts.map +1 -0
  497. package/dist/pages/forms/SubmissionsTable.js +91 -0
  498. package/dist/pages/forms/SubmissionsTable.js.map +1 -0
  499. package/dist/pages/forms/fieldList.d.ts +70 -0
  500. package/dist/pages/forms/fieldList.d.ts.map +1 -0
  501. package/dist/pages/forms/fieldList.js +126 -0
  502. package/dist/pages/forms/fieldList.js.map +1 -0
  503. package/dist/pages/forms/template.d.ts +18 -0
  504. package/dist/pages/forms/template.d.ts.map +1 -0
  505. package/dist/pages/forms/template.js +34 -0
  506. package/dist/pages/forms/template.js.map +1 -0
  507. package/dist/pages/handbook/HandbookPage.d.ts +2 -0
  508. package/dist/pages/handbook/HandbookPage.d.ts.map +1 -0
  509. package/dist/pages/handbook/HandbookPage.js +197 -0
  510. package/dist/pages/handbook/HandbookPage.js.map +1 -0
  511. package/dist/pages/handbook/tree.d.ts +62 -0
  512. package/dist/pages/handbook/tree.d.ts.map +1 -0
  513. package/dist/pages/handbook/tree.js +222 -0
  514. package/dist/pages/handbook/tree.js.map +1 -0
  515. package/dist/pages/hiringDirectory.d.ts +60 -0
  516. package/dist/pages/hiringDirectory.d.ts.map +1 -0
  517. package/dist/pages/hiringDirectory.js +81 -0
  518. package/dist/pages/hiringDirectory.js.map +1 -0
  519. package/dist/pages/onboarding/HandbookStepPage.d.ts +14 -0
  520. package/dist/pages/onboarding/HandbookStepPage.d.ts.map +1 -0
  521. package/dist/pages/onboarding/HandbookStepPage.js +29 -0
  522. package/dist/pages/onboarding/HandbookStepPage.js.map +1 -0
  523. package/dist/pages/onboarding/InvitesStepPage.d.ts +2 -0
  524. package/dist/pages/onboarding/InvitesStepPage.d.ts.map +1 -0
  525. package/dist/pages/onboarding/InvitesStepPage.js +77 -0
  526. package/dist/pages/onboarding/InvitesStepPage.js.map +1 -0
  527. package/dist/pages/onboarding/WorkspaceStepPage.d.ts +2 -0
  528. package/dist/pages/onboarding/WorkspaceStepPage.d.ts.map +1 -0
  529. package/dist/pages/onboarding/WorkspaceStepPage.js +72 -0
  530. package/dist/pages/onboarding/WorkspaceStepPage.js.map +1 -0
  531. package/dist/pages/positionDirectory.d.ts +20 -0
  532. package/dist/pages/positionDirectory.d.ts.map +1 -0
  533. package/dist/pages/positionDirectory.js +58 -0
  534. package/dist/pages/positionDirectory.js.map +1 -0
  535. package/dist/registry/UiExtensionProvider.d.ts +12 -0
  536. package/dist/registry/UiExtensionProvider.d.ts.map +1 -0
  537. package/dist/registry/UiExtensionProvider.js +10 -0
  538. package/dist/registry/UiExtensionProvider.js.map +1 -0
  539. package/dist/registry/context.d.ts +31 -0
  540. package/dist/registry/context.d.ts.map +1 -0
  541. package/dist/registry/context.js +45 -0
  542. package/dist/registry/context.js.map +1 -0
  543. package/dist/registry/contributions.d.ts +71 -0
  544. package/dist/registry/contributions.d.ts.map +1 -0
  545. package/dist/registry/contributions.js +25 -0
  546. package/dist/registry/contributions.js.map +1 -0
  547. package/dist/registry/overridable.d.ts +27 -0
  548. package/dist/registry/overridable.d.ts.map +1 -0
  549. package/dist/registry/overridable.js +29 -0
  550. package/dist/registry/overridable.js.map +1 -0
  551. package/dist/registry/registry.d.ts +68 -0
  552. package/dist/registry/registry.d.ts.map +1 -0
  553. package/dist/registry/registry.js +112 -0
  554. package/dist/registry/registry.js.map +1 -0
  555. package/dist/testing/inputs.d.ts +13 -0
  556. package/dist/testing/inputs.d.ts.map +1 -0
  557. package/dist/testing/inputs.js +16 -0
  558. package/dist/testing/inputs.js.map +1 -0
  559. package/dist/testing/stubClient.d.ts +42 -0
  560. package/dist/testing/stubClient.d.ts.map +1 -0
  561. package/dist/testing/stubClient.js +29 -0
  562. package/dist/testing/stubClient.js.map +1 -0
  563. package/package.json +73 -0
  564. package/src/ServiceStatus.tsx +61 -0
  565. package/src/api/ApiProvider.tsx +40 -0
  566. package/src/api/client.ts +267 -0
  567. package/src/api/context.ts +25 -0
  568. package/src/api/errors.ts +14 -0
  569. package/src/api/health.ts +38 -0
  570. package/src/api/json.ts +4 -0
  571. package/src/api/queryClient.ts +35 -0
  572. package/src/api/resource.ts +412 -0
  573. package/src/api/resources/account.ts +220 -0
  574. package/src/api/resources/activities.ts +31 -0
  575. package/src/api/resources/agentTasks.ts +172 -0
  576. package/src/api/resources/candidates.ts +69 -0
  577. package/src/api/resources/companies.ts +72 -0
  578. package/src/api/resources/dashboard.ts +39 -0
  579. package/src/api/resources/deals.ts +82 -0
  580. package/src/api/resources/decisions.ts +60 -0
  581. package/src/api/resources/forms.ts +218 -0
  582. package/src/api/resources/handbookPages.ts +77 -0
  583. package/src/api/resources/importJobs.ts +229 -0
  584. package/src/api/resources/invites.ts +112 -0
  585. package/src/api/resources/mcpTools.ts +28 -0
  586. package/src/api/resources/members.ts +105 -0
  587. package/src/api/resources/moduleSettings.ts +67 -0
  588. package/src/api/resources/mutation.ts +31 -0
  589. package/src/api/resources/notes.ts +62 -0
  590. package/src/api/resources/opportunities.ts +84 -0
  591. package/src/api/resources/partnerships.ts +89 -0
  592. package/src/api/resources/people.ts +72 -0
  593. package/src/api/resources/pipelineStages.ts +93 -0
  594. package/src/api/resources/planItems.ts +103 -0
  595. package/src/api/resources/positions.ts +70 -0
  596. package/src/api/resources/raises.ts +82 -0
  597. package/src/api/resources/roles.ts +65 -0
  598. package/src/api/resources/search.ts +49 -0
  599. package/src/api/resources/session.ts +220 -0
  600. package/src/api/resources/webhooks.ts +157 -0
  601. package/src/api/resources/workspace.ts +81 -0
  602. package/src/app/KelpieApp.tsx +162 -0
  603. package/src/app/SessionGate.tsx +42 -0
  604. package/src/components/ActivitiesPanel.tsx +235 -0
  605. package/src/components/AgentTasks.tsx +473 -0
  606. package/src/components/Chip.tsx +36 -0
  607. package/src/components/CopyButton.tsx +48 -0
  608. package/src/components/DataTable.tsx +209 -0
  609. package/src/components/DecisionsPanel.tsx +233 -0
  610. package/src/components/DeleteRecord.tsx +73 -0
  611. package/src/components/EntitySearch.tsx +268 -0
  612. package/src/components/ErrorBoundary.tsx +58 -0
  613. package/src/components/InlineEdit.tsx +179 -0
  614. package/src/components/KanbanBoard.tsx +234 -0
  615. package/src/components/MarkdownView.tsx +73 -0
  616. package/src/components/NotesPanel.tsx +169 -0
  617. package/src/components/PageHeader.tsx +61 -0
  618. package/src/components/PhonesField.tsx +204 -0
  619. package/src/components/PlanAttention.tsx +249 -0
  620. package/src/components/PlanPanel.tsx +317 -0
  621. package/src/components/QueryState.tsx +83 -0
  622. package/src/components/RecordTabs.tsx +69 -0
  623. package/src/components/SectionHeader.tsx +63 -0
  624. package/src/components/SegmentedControl.tsx +48 -0
  625. package/src/components/Shell.tsx +300 -0
  626. package/src/components/SidebarField.tsx +18 -0
  627. package/src/components/SocialProfilesField.tsx +356 -0
  628. package/src/components/StageSettings.tsx +319 -0
  629. package/src/components/SummaryBlock.tsx +27 -0
  630. package/src/index.ts +190 -0
  631. package/src/lib/dates.ts +90 -0
  632. package/src/lib/money.ts +12 -0
  633. package/src/lib/names.ts +13 -0
  634. package/src/lib/plan.ts +147 -0
  635. package/src/lib/theme.ts +53 -0
  636. package/src/pages/CompaniesPage.tsx +143 -0
  637. package/src/pages/CompanyDetail.tsx +502 -0
  638. package/src/pages/DealDetail.tsx +512 -0
  639. package/src/pages/DealStageSettingsPage.tsx +67 -0
  640. package/src/pages/DealsPage.tsx +342 -0
  641. package/src/pages/DecisionsPage.tsx +211 -0
  642. package/src/pages/FormDetail.tsx +130 -0
  643. package/src/pages/FormsPage.tsx +151 -0
  644. package/src/pages/FundraisingPage.tsx +354 -0
  645. package/src/pages/HiringPage.tsx +169 -0
  646. package/src/pages/NotFoundPage.tsx +27 -0
  647. package/src/pages/OpportunitiesPage.tsx +349 -0
  648. package/src/pages/OpportunityDetail.tsx +337 -0
  649. package/src/pages/OpportunityStageSettingsPage.tsx +63 -0
  650. package/src/pages/PartnershipDetail.tsx +490 -0
  651. package/src/pages/PartnershipStageSettingsPage.tsx +63 -0
  652. package/src/pages/PartnershipsPage.tsx +353 -0
  653. package/src/pages/PeoplePage.tsx +145 -0
  654. package/src/pages/PersonDetail.tsx +526 -0
  655. package/src/pages/PlanningPage.tsx +318 -0
  656. package/src/pages/RaiseDetail.tsx +498 -0
  657. package/src/pages/RaiseStageSettingsPage.tsx +63 -0
  658. package/src/pages/RoleDetail.tsx +455 -0
  659. package/src/pages/SearchPage.tsx +135 -0
  660. package/src/pages/account/AccountLayout.tsx +38 -0
  661. package/src/pages/account/Field.tsx +20 -0
  662. package/src/pages/account/PreferencesPage.tsx +224 -0
  663. package/src/pages/account/ProfilePage.tsx +147 -0
  664. package/src/pages/account/SecurityPage.tsx +237 -0
  665. package/src/pages/admin/DataPage.tsx +772 -0
  666. package/src/pages/admin/McpPage.tsx +404 -0
  667. package/src/pages/admin/ModulesPage.tsx +113 -0
  668. package/src/pages/admin/TeamPage.tsx +386 -0
  669. package/src/pages/admin/WebhookDeliveries.tsx +184 -0
  670. package/src/pages/admin/WebhooksPage.tsx +443 -0
  671. package/src/pages/admin/WorkspaceSettingsPage.tsx +274 -0
  672. package/src/pages/auth/AuthForm.tsx +118 -0
  673. package/src/pages/auth/AuthLayout.tsx +74 -0
  674. package/src/pages/auth/ForgotPasswordPage.tsx +80 -0
  675. package/src/pages/auth/JoinPage.tsx +85 -0
  676. package/src/pages/auth/ResetPasswordPage.tsx +124 -0
  677. package/src/pages/auth/SignInPage.tsx +83 -0
  678. package/src/pages/auth/SignUpPage.tsx +93 -0
  679. package/src/pages/candidateFields.tsx +175 -0
  680. package/src/pages/dashboard/DashboardPage.tsx +108 -0
  681. package/src/pages/dashboard/attention.ts +206 -0
  682. package/src/pages/dashboard/sections.tsx +269 -0
  683. package/src/pages/fields.ts +21 -0
  684. package/src/pages/forms/EmbedPanel.tsx +95 -0
  685. package/src/pages/forms/FieldsEditor.tsx +412 -0
  686. package/src/pages/forms/FormSettings.tsx +159 -0
  687. package/src/pages/forms/SubmissionsTable.tsx +171 -0
  688. package/src/pages/forms/fieldList.ts +209 -0
  689. package/src/pages/forms/template.ts +37 -0
  690. package/src/pages/handbook/HandbookPage.tsx +500 -0
  691. package/src/pages/handbook/tree.ts +327 -0
  692. package/src/pages/hiringDirectory.ts +146 -0
  693. package/src/pages/onboarding/HandbookStepPage.tsx +75 -0
  694. package/src/pages/onboarding/InvitesStepPage.tsx +180 -0
  695. package/src/pages/onboarding/WorkspaceStepPage.tsx +122 -0
  696. package/src/pages/positionDirectory.ts +98 -0
  697. package/src/registry/UiExtensionProvider.tsx +20 -0
  698. package/src/registry/context.ts +67 -0
  699. package/src/registry/contributions.ts +89 -0
  700. package/src/registry/overridable.ts +62 -0
  701. package/src/registry/registry.ts +204 -0
  702. package/src/styles.css +175 -0
  703. package/src/testing/inputs.ts +18 -0
  704. package/src/testing/stubClient.ts +78 -0
@@ -0,0 +1,103 @@
1
+ import { createPlanItemBody, planItemBody, planItemSchema } from '@kelpie/schemas'
2
+ import type {
3
+ CreatePlanItemInput,
4
+ PipelineKind,
5
+ PlanItem,
6
+ PlanItemInput,
7
+ PlanItemStatus,
8
+ } from '@kelpie/schemas'
9
+
10
+ import type { QueryParameters } from '../client.ts'
11
+ import { createResourceHooks } from '../resource.ts'
12
+ import type { ListOptions, MutationResult, RecordListResult, UpdateArguments } from '../resource.ts'
13
+
14
+ /**
15
+ * `/v1/plan_items`: the dated next steps on the four pipelines.
16
+ *
17
+ * Unlike notes, this list is answerable workspace-wide, because the Planning
18
+ * page is exactly that question. `useRecordPlanItems` narrows it to one record's
19
+ * panel and `usePlanItemsForRecords` to a page of them.
20
+ *
21
+ * No `alsoInvalidates`: a plan item write emits no activity and touches no other
22
+ * resource. The one cross-resource effect runs the other way, when deleting a
23
+ * pipeline record takes its plan items with it.
24
+ */
25
+
26
+ const planItems = createResourceHooks<PlanItem, CreatePlanItemInput, PlanItemInput>({
27
+ name: 'planItems',
28
+ path: '/plan_items',
29
+ decode: planItemSchema.parse,
30
+ createBody: createPlanItemBody,
31
+ updateBody: planItemBody,
32
+ })
33
+
34
+ /** The `?limit=` ceiling from `api.md`. A caller asking for a bounded set may ask for all of it. */
35
+ export const MAX_PAGE_SIZE = 200
36
+
37
+ export interface PlanItemFilters {
38
+ readonly targetType?: PipelineKind
39
+ /** The records to read steps for. Repeats on the wire: `?target_id=a&target_id=b`. */
40
+ readonly targetIds?: readonly string[]
41
+ readonly statuses?: readonly PlanItemStatus[]
42
+ /** Inclusive `YYYY-MM-DD` bounds. The calendar asks for one month with the pair. */
43
+ readonly from?: string
44
+ readonly to?: string
45
+ /** Page size. Worth setting only when the filter already bounds the answer. */
46
+ readonly limit?: number
47
+ }
48
+
49
+ function planItemQuery(filters: PlanItemFilters): QueryParameters {
50
+ return {
51
+ target_type: filters.targetType,
52
+ target_id: filters.targetIds,
53
+ status: filters.statuses,
54
+ from: filters.from,
55
+ to: filters.to,
56
+ limit: filters.limit,
57
+ }
58
+ }
59
+
60
+ export function usePlanItems(
61
+ filters: PlanItemFilters = {},
62
+ options: ListOptions = {},
63
+ ): RecordListResult<PlanItem> {
64
+ return planItems.useList(planItemQuery(filters), options)
65
+ }
66
+
67
+ /** One record's plan, in date order: what the panel on a detail page shows. */
68
+ export function useRecordPlanItems(
69
+ targetType: PipelineKind,
70
+ targetId: string,
71
+ ): RecordListResult<PlanItem> {
72
+ return usePlanItems({ targetType, targetIds: [targetId] })
73
+ }
74
+
75
+ /**
76
+ * The plan across a set of records: a Person's or a Company's roll-up.
77
+ *
78
+ * Held back until the ids are known. A list filtered by a set of ids has nothing
79
+ * to ask before then, and asking with the filter omitted would answer with the
80
+ * whole workspace instead of nothing. Ids past the `?target_id=` ceiling are
81
+ * dropped rather than sent, because the request would be a 422 in full.
82
+ */
83
+ export function usePlanItemsForRecords(
84
+ targetType: PipelineKind,
85
+ targetIds: readonly string[],
86
+ ): RecordListResult<PlanItem> {
87
+ return usePlanItems(
88
+ { targetType, targetIds: targetIds.slice(0, MAX_PAGE_SIZE), limit: MAX_PAGE_SIZE },
89
+ { enabled: targetIds.length > 0 },
90
+ )
91
+ }
92
+
93
+ export function useCreatePlanItem(): MutationResult<CreatePlanItemInput, PlanItem> {
94
+ return planItems.useCreate()
95
+ }
96
+
97
+ export function useUpdatePlanItem(): MutationResult<UpdateArguments<PlanItemInput>, PlanItem> {
98
+ return planItems.useUpdate()
99
+ }
100
+
101
+ export function useDeletePlanItem(): MutationResult<string, void> {
102
+ return planItems.useRemove()
103
+ }
@@ -0,0 +1,70 @@
1
+ import { createPositionBody, positionSchema, updatePositionBody } from '@kelpie/schemas'
2
+ import type { CreatePositionInput, Position } from '@kelpie/schemas'
3
+
4
+ import type { QueryParameters } from '../client.ts'
5
+ import { createResourceHooks } from '../resource.ts'
6
+ import type {
7
+ ListOptions,
8
+ MutationResult,
9
+ RecordListResult,
10
+ UpdateArguments,
11
+ } from '../resource.ts'
12
+
13
+ /**
14
+ * `/v1/positions`, the Person↔Company link holding the job title.
15
+ *
16
+ * Only the title is updatable. Re-pointing a link at a different person or
17
+ * company is a delete and a create, which is what the API accepts.
18
+ */
19
+
20
+ export interface PositionTitleUpdate {
21
+ readonly title: string
22
+ }
23
+
24
+ const positions = createResourceHooks<Position, CreatePositionInput, PositionTitleUpdate>({
25
+ name: 'positions',
26
+ path: '/positions',
27
+ decode: positionSchema.parse,
28
+ createBody: createPositionBody,
29
+ updateBody: (input) => updatePositionBody(input.title),
30
+ // `?company_id=` on people and `?person_id=` on companies are lists this join
31
+ // decides the membership of. Without this, linking a person to a company shows
32
+ // the new row with the name still unfetched.
33
+ // Creating one also emits a `linked` activity on both the person and the
34
+ // company, so both timelines are stale too.
35
+ alsoInvalidates: ['people', 'companies', 'activities'],
36
+ })
37
+
38
+ export interface PositionFilters {
39
+ /** Positions held by any of these people. Repeats on the wire. */
40
+ readonly personIds?: readonly string[]
41
+ /** Positions held at any of these companies. Repeats on the wire. */
42
+ readonly companyIds?: readonly string[]
43
+ readonly limit?: number
44
+ }
45
+
46
+ function positionQuery(filters: PositionFilters): QueryParameters {
47
+ return { person_id: filters.personIds, company_id: filters.companyIds, limit: filters.limit }
48
+ }
49
+
50
+ export function usePositions(
51
+ filters: PositionFilters = {},
52
+ options: ListOptions = {},
53
+ ): RecordListResult<Position> {
54
+ return positions.useList(positionQuery(filters), options)
55
+ }
56
+
57
+ export function useCreatePosition(): MutationResult<CreatePositionInput, Position> {
58
+ return positions.useCreate()
59
+ }
60
+
61
+ export function useUpdatePositionTitle(): MutationResult<
62
+ UpdateArguments<PositionTitleUpdate>,
63
+ Position
64
+ > {
65
+ return positions.useUpdate()
66
+ }
67
+
68
+ export function useDeletePosition(): MutationResult<string, void> {
69
+ return positions.useRemove()
70
+ }
@@ -0,0 +1,82 @@
1
+ import { raiseBody, raiseSchema } from '@kelpie/schemas'
2
+ import type { Raise, RaiseInput } from '@kelpie/schemas'
3
+
4
+ import type { QueryParameters } from '../client.ts'
5
+ import { createResourceHooks } from '../resource.ts'
6
+ import type {
7
+ ListOptions,
8
+ MutationResult,
9
+ RecordListResult,
10
+ RecordResult,
11
+ UpdateArguments,
12
+ } from '../resource.ts'
13
+
14
+ /**
15
+ * `/v1/raises`. Create needs a name and a firm; the API lands the raise in the
16
+ * pipeline's first open stage and hands it to the caller as owner.
17
+ */
18
+
19
+ export interface CreateRaiseInput extends RaiseInput {
20
+ readonly name: string
21
+ readonly companyId: string
22
+ }
23
+
24
+ const raises = createResourceHooks<Raise, CreateRaiseInput, RaiseInput>({
25
+ name: 'raises',
26
+ path: '/raises',
27
+ decode: raiseSchema.parse,
28
+ createBody: raiseBody,
29
+ updateBody: raiseBody,
30
+ // Every write here emits an activity server-side, in the same transaction, so
31
+ // a timeline rendered on this record is stale the moment the write lands.
32
+ alsoInvalidates: ['activities'],
33
+ })
34
+
35
+ /** The documented filters on `GET /v1/raises`. */
36
+ export interface RaiseFilters {
37
+ /** Matches the raise's name, summary, tags, and its firm's name. */
38
+ readonly term?: string
39
+ /** Raises with any of these firms. Repeats on the wire. */
40
+ readonly companyIds?: readonly string[]
41
+ /** Raises sitting in any of these stages. Repeats on the wire. */
42
+ readonly stageIds?: readonly string[]
43
+ /** Raises any of these people are key on. Repeats on the wire. */
44
+ readonly personIds?: readonly string[]
45
+ readonly limit?: number
46
+ /** `field` ascending, `-field` descending. Only `name`, `created_at`, `updated_at` are sortable. */
47
+ readonly sort?: string
48
+ }
49
+
50
+ function raiseQuery(filters: RaiseFilters): QueryParameters {
51
+ return {
52
+ q: filters.term,
53
+ company_id: filters.companyIds,
54
+ stage_id: filters.stageIds,
55
+ person_id: filters.personIds,
56
+ limit: filters.limit,
57
+ sort: filters.sort,
58
+ }
59
+ }
60
+
61
+ export function useRaises(
62
+ filters: RaiseFilters = {},
63
+ options: ListOptions = {},
64
+ ): RecordListResult<Raise> {
65
+ return raises.useList(raiseQuery(filters), options)
66
+ }
67
+
68
+ export function useRaise(id: string | undefined): RecordResult<Raise> {
69
+ return raises.useRecord(id)
70
+ }
71
+
72
+ export function useCreateRaise(): MutationResult<CreateRaiseInput, Raise> {
73
+ return raises.useCreate()
74
+ }
75
+
76
+ export function useUpdateRaise(): MutationResult<UpdateArguments<RaiseInput>, Raise> {
77
+ return raises.useUpdate()
78
+ }
79
+
80
+ export function useDeleteRaise(): MutationResult<string, void> {
81
+ return raises.useRemove()
82
+ }
@@ -0,0 +1,65 @@
1
+ import { roleBody, roleSchema } from '@kelpie/schemas'
2
+ import type { Role, RoleInput, RoleStatus } from '@kelpie/schemas'
3
+
4
+ import type { QueryParameters } from '../client.ts'
5
+ import { createResourceHooks } from '../resource.ts'
6
+ import type {
7
+ ListOptions,
8
+ MutationResult,
9
+ RecordListResult,
10
+ RecordResult,
11
+ UpdateArguments,
12
+ } from '../resource.ts'
13
+
14
+ /** `/v1/roles`. Create needs a title; the API opens the role. */
15
+
16
+ export interface CreateRoleInput extends RoleInput {
17
+ readonly title: string
18
+ }
19
+
20
+ const roles = createResourceHooks<Role, CreateRoleInput, RoleInput>({
21
+ name: 'roles',
22
+ path: '/roles',
23
+ decode: roleSchema.parse,
24
+ createBody: roleBody,
25
+ updateBody: roleBody,
26
+ // Deleting a role takes its candidacies with it, and each one files an unlink
27
+ // on a person's timeline, so both caches are stale the moment a role goes.
28
+ alsoInvalidates: ['candidates', 'activities'],
29
+ })
30
+
31
+ /** The documented filters on `GET /v1/roles`. */
32
+ export interface RoleFilters {
33
+ /** Matches the role's title, which is what the mockup's filter box matches. */
34
+ readonly term?: string
35
+ /** Roles in any of these statuses. Repeats on the wire. */
36
+ readonly statuses?: readonly RoleStatus[]
37
+ readonly limit?: number
38
+ }
39
+
40
+ function roleQuery(filters: RoleFilters): QueryParameters {
41
+ return { q: filters.term, status: filters.statuses, limit: filters.limit }
42
+ }
43
+
44
+ export function useRoles(
45
+ filters: RoleFilters = {},
46
+ options: ListOptions = {},
47
+ ): RecordListResult<Role> {
48
+ return roles.useList(roleQuery(filters), options)
49
+ }
50
+
51
+ export function useRole(id: string | undefined): RecordResult<Role> {
52
+ return roles.useRecord(id)
53
+ }
54
+
55
+ export function useCreateRole(): MutationResult<CreateRoleInput, Role> {
56
+ return roles.useCreate()
57
+ }
58
+
59
+ export function useUpdateRole(): MutationResult<UpdateArguments<RoleInput>, Role> {
60
+ return roles.useUpdate()
61
+ }
62
+
63
+ export function useDeleteRole(): MutationResult<string, void> {
64
+ return roles.useRemove()
65
+ }
@@ -0,0 +1,49 @@
1
+ import { searchResultsSchema } from '@kelpie/schemas'
2
+ import type { SearchResults } from '@kelpie/schemas'
3
+ import { useQuery } from '@tanstack/react-query'
4
+
5
+ import { useApiClient } from '../context.ts'
6
+ import { toError } from '../errors.ts'
7
+
8
+ /**
9
+ * `/v1/search`, read-only: nine collections in one request.
10
+ *
11
+ * Not a `createResourceHooks` resource, for the same reason the dashboard is not.
12
+ * There is no collection to page, no id in a path, and no write.
13
+ *
14
+ * Nothing invalidates this key. Results are derived from records other pages own,
15
+ * so listing the writes that could change one would mean naming most of the API.
16
+ * A search is re-run by typing, which is a new key.
17
+ */
18
+
19
+ /** How many results each group carries. The total beside each group stays exact. */
20
+ const GROUP_LIMIT = 10
21
+
22
+ export interface SearchState {
23
+ readonly results: SearchResults | undefined
24
+ readonly isLoading: boolean
25
+ readonly error: Error | null
26
+ }
27
+
28
+ /**
29
+ * @param term What was typed. An empty one asks nothing: the query is disabled
30
+ * rather than sent, because `?q=` is required and a blank one is a 422.
31
+ */
32
+ export function useSearch(term: string): SearchState {
33
+ const client = useApiClient()
34
+ const trimmed = term.trim()
35
+ const enabled = trimmed.length > 0
36
+
37
+ const result = useQuery({
38
+ queryKey: ['search', trimmed],
39
+ queryFn: () => client.get('/search', searchResultsSchema.parse, { q: trimmed, limit: GROUP_LIMIT }),
40
+ enabled,
41
+ })
42
+
43
+ return {
44
+ results: result.data,
45
+ // A disabled query stays pending forever, which is not the same as loading.
46
+ isLoading: result.isPending && enabled,
47
+ error: toError(result.error),
48
+ }
49
+ }
@@ -0,0 +1,220 @@
1
+ import {
2
+ confirmPasswordResetBody,
3
+ createWorkspaceBody,
4
+ logInBody,
5
+ requestPasswordResetBody,
6
+ sessionSchema,
7
+ signUpBody,
8
+ signedInAccountSchema,
9
+ workspaceSchema,
10
+ } from '@kelpie/schemas'
11
+ import type {
12
+ ConfirmPasswordResetInput,
13
+ CreateWorkspaceInput,
14
+ LogInInput,
15
+ RequestPasswordResetInput,
16
+ Session,
17
+ SignUpInput,
18
+ SignedInAccount,
19
+ Workspace,
20
+ } from '@kelpie/schemas'
21
+ import { useMutation, useQuery, useQueryClient } from '@tanstack/react-query'
22
+
23
+ import { ApiError } from '../client.ts'
24
+ import type { ApiClient } from '../client.ts'
25
+ import { useApiClient } from '../context.ts'
26
+ import { toError } from '../errors.ts'
27
+ import type { MutationResult } from '../resource.ts'
28
+ import { asMutationResult } from './mutation.ts'
29
+
30
+ /**
31
+ * Who the browser is signed in as.
32
+ *
33
+ * Not a CRM resource, so it does not go through `createResourceHooks`: there is
34
+ * no list, no id, and a `401` is an answer rather than a failure.
35
+ *
36
+ * Signing in or out changes which workspace every other cached query belongs to,
37
+ * so both clear the whole cache. Leaving one person's People page in the cache
38
+ * for the next person to sign in would be a data leak, not a stale render.
39
+ */
40
+
41
+ const SESSION_KEY = ['session'] as const
42
+
43
+ function sessionQuery(client: ApiClient): {
44
+ queryKey: typeof SESSION_KEY
45
+ queryFn: () => Promise<Session>
46
+ retry: false
47
+ staleTime: 0
48
+ } {
49
+ return {
50
+ queryKey: SESSION_KEY,
51
+ queryFn: () => client.get('/auth/me', sessionSchema.parse),
52
+ // A 401 is the answer "signed out". Retrying it is pointless, and every
53
+ // remount should ask again rather than trust a cached identity.
54
+ retry: false,
55
+ staleTime: 0,
56
+ }
57
+ }
58
+
59
+ export interface SessionState {
60
+ readonly session: Session | undefined
61
+ readonly isLoading: boolean
62
+ /** The service answered `401`. Distinct from a network failure, which is `error`. */
63
+ readonly isSignedOut: boolean
64
+ /** Signed in, but the account has no workspace yet. Every CRM endpoint answers `403` until it does. */
65
+ readonly needsWorkspace: boolean
66
+ readonly error: Error | null
67
+ }
68
+
69
+ export function useSession(): SessionState {
70
+ const client = useApiClient()
71
+ const result = useQuery(sessionQuery(client))
72
+ const isSignedOut = result.error instanceof ApiError && result.error.status === 401
73
+
74
+ return {
75
+ session: result.data,
76
+ isLoading: result.isPending,
77
+ isSignedOut,
78
+ needsWorkspace: result.data !== undefined && result.data.workspaceId === null,
79
+ error: isSignedOut ? null : toError(result.error),
80
+ }
81
+ }
82
+
83
+ export function useLogIn(): MutationResult<LogInInput, SignedInAccount> {
84
+ const client = useApiClient()
85
+ const queryClient = useQueryClient()
86
+ const mutation = useMutation({
87
+ mutationFn: (input: LogInInput) =>
88
+ client.post('/auth/login', logInBody(input), signedInAccountSchema.parse),
89
+ onSuccess: async () => {
90
+ queryClient.clear()
91
+ await queryClient.fetchQuery(sessionQuery(client))
92
+ },
93
+ })
94
+
95
+ return asMutationResult(mutation)
96
+ }
97
+
98
+ /**
99
+ * Creates the account and signs the browser in, because `POST /v1/auth/signup`
100
+ * sets the session cookie itself.
101
+ *
102
+ * The cache is cleared for the same reason sign-in clears it: whatever is in it
103
+ * belongs to whoever was here before.
104
+ */
105
+ export function useSignUp(): MutationResult<SignUpInput, SignedInAccount> {
106
+ const client = useApiClient()
107
+ const queryClient = useQueryClient()
108
+ const mutation = useMutation({
109
+ mutationFn: (input: SignUpInput) =>
110
+ client.post('/auth/signup', signUpBody(input), signedInAccountSchema.parse),
111
+ onSuccess: async () => {
112
+ queryClient.clear()
113
+ await queryClient.fetchQuery(sessionQuery(client))
114
+ },
115
+ })
116
+
117
+ return asMutationResult(mutation)
118
+ }
119
+
120
+ export function useLogOut(): MutationResult<void, void> {
121
+ const client = useApiClient()
122
+ const queryClient = useQueryClient()
123
+ const mutation = useMutation({
124
+ mutationFn: () => client.postEmpty('/auth/logout'),
125
+ // No refetch afterwards. The caller sends the browser to the sign-in page,
126
+ // and the next protected route asks for the session itself.
127
+ onSettled: () => {
128
+ queryClient.clear()
129
+ },
130
+ })
131
+
132
+ return asMutationResult(mutation)
133
+ }
134
+
135
+ /** Where a reset email lands. `ResetPasswordPage` reads the token out of the query string. */
136
+ export function resetUrlTemplate(origin: string): string {
137
+ return `${origin}/reset-password?token={token}`
138
+ }
139
+
140
+ /**
141
+ * Asks for a reset link.
142
+ *
143
+ * Answers `202` whether or not the address is registered, and the page says the
144
+ * same thing either way. A caller that could tell the difference would have an
145
+ * account-existence oracle.
146
+ *
147
+ * Nothing in the cache changes: this signs nobody in and ends no session.
148
+ */
149
+ export function useRequestPasswordReset(): MutationResult<RequestPasswordResetInput, void> {
150
+ const client = useApiClient()
151
+ const mutation = useMutation({
152
+ mutationFn: (input: RequestPasswordResetInput) =>
153
+ client.postEmpty('/auth/password-reset', requestPasswordResetBody(input)),
154
+ })
155
+
156
+ return asMutationResult(mutation)
157
+ }
158
+
159
+ /**
160
+ * Spends a reset token on a new password.
161
+ *
162
+ * The service ends every session the account had, this browser included, so the
163
+ * caller sends the reader to sign in rather than into the app.
164
+ */
165
+ export function useConfirmPasswordReset(): MutationResult<ConfirmPasswordResetInput, void> {
166
+ const client = useApiClient()
167
+ const queryClient = useQueryClient()
168
+ const mutation = useMutation({
169
+ mutationFn: (input: ConfirmPasswordResetInput) =>
170
+ client.postEmpty('/auth/password-reset/confirm', confirmPasswordResetBody(input)),
171
+ onSuccess: () => {
172
+ queryClient.clear()
173
+ },
174
+ })
175
+
176
+ return asMutationResult(mutation)
177
+ }
178
+
179
+ /**
180
+ * Joins the workspace an invitation names.
181
+ *
182
+ * Like creating one, this moves the session, so the whole cache goes: the next
183
+ * page belongs to a different workspace than the one just cached.
184
+ */
185
+ export function useAcceptInvite(): MutationResult<{ readonly token: string }, Workspace> {
186
+ const client = useApiClient()
187
+ const queryClient = useQueryClient()
188
+ const mutation = useMutation({
189
+ mutationFn: ({ token }: { readonly token: string }) =>
190
+ client.post('/invites/accept', { token }, workspaceSchema.parse),
191
+ onSuccess: async () => {
192
+ queryClient.clear()
193
+ await queryClient.fetchQuery(sessionQuery(client))
194
+ },
195
+ })
196
+
197
+ return asMutationResult(mutation)
198
+ }
199
+
200
+ /**
201
+ * Creates the account's first workspace.
202
+ *
203
+ * Signup makes an account and nothing else (`onboarding.md`), so without this a
204
+ * new account reaches the app and gets `403` from every CRM endpoint.
205
+ */
206
+ export function useCreateWorkspace(): MutationResult<CreateWorkspaceInput, Workspace> {
207
+ const client = useApiClient()
208
+ const queryClient = useQueryClient()
209
+ const mutation = useMutation({
210
+ mutationFn: (input: CreateWorkspaceInput) =>
211
+ client.post('/workspaces', createWorkspaceBody(input), workspaceSchema.parse),
212
+ // Creating a workspace moves the session into it, so the session is stale.
213
+ onSuccess: async () => {
214
+ await queryClient.fetchQuery(sessionQuery(client))
215
+ },
216
+ })
217
+
218
+ return asMutationResult(mutation)
219
+ }
220
+