@kelpie/ui 0.12.0 → 0.14.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (300) hide show
  1. package/dist/api/resources/attendances.d.ts +13 -0
  2. package/dist/api/resources/attendances.d.ts.map +1 -0
  3. package/dist/api/resources/attendances.js +34 -0
  4. package/dist/api/resources/attendances.js.map +1 -0
  5. package/dist/api/resources/eventAssociations.d.ts +12 -0
  6. package/dist/api/resources/eventAssociations.d.ts.map +1 -0
  7. package/dist/api/resources/eventAssociations.js +25 -0
  8. package/dist/api/resources/eventAssociations.js.map +1 -0
  9. package/dist/api/resources/events.d.ts +17 -0
  10. package/dist/api/resources/events.d.ts.map +1 -0
  11. package/dist/api/resources/events.js +40 -0
  12. package/dist/api/resources/events.js.map +1 -0
  13. package/dist/api/resources/handbookSeed.d.ts +11 -0
  14. package/dist/api/resources/handbookSeed.d.ts.map +1 -0
  15. package/dist/api/resources/handbookSeed.js +43 -0
  16. package/dist/api/resources/handbookSeed.js.map +1 -0
  17. package/dist/api/resources/moduleSettings.d.ts +10 -0
  18. package/dist/api/resources/moduleSettings.d.ts.map +1 -1
  19. package/dist/api/resources/moduleSettings.js +21 -0
  20. package/dist/api/resources/moduleSettings.js.map +1 -1
  21. package/dist/api/resources/planItems.d.ts +4 -4
  22. package/dist/api/resources/planItems.d.ts.map +1 -1
  23. package/dist/api/resources/planItems.js +1 -1
  24. package/dist/api/resources/planItems.js.map +1 -1
  25. package/dist/api/resources/publicConfig.js +3 -3
  26. package/dist/api/resources/sampleData.d.ts.map +1 -1
  27. package/dist/api/resources/sampleData.js +2 -0
  28. package/dist/api/resources/sampleData.js.map +1 -1
  29. package/dist/api/resources/session.d.ts +22 -1
  30. package/dist/api/resources/session.d.ts.map +1 -1
  31. package/dist/api/resources/session.js +43 -1
  32. package/dist/api/resources/session.js.map +1 -1
  33. package/dist/api/resources/workspace.d.ts.map +1 -1
  34. package/dist/api/resources/workspace.js +2 -3
  35. package/dist/api/resources/workspace.js.map +1 -1
  36. package/dist/app/KelpieApp.d.ts.map +1 -1
  37. package/dist/app/KelpieApp.js +5 -1
  38. package/dist/app/KelpieApp.js.map +1 -1
  39. package/dist/components/ActivitiesPanel.d.ts.map +1 -1
  40. package/dist/components/ActivitiesPanel.js +2 -0
  41. package/dist/components/ActivitiesPanel.js.map +1 -1
  42. package/dist/components/AddressesField.d.ts +23 -0
  43. package/dist/components/AddressesField.d.ts.map +1 -0
  44. package/dist/components/AddressesField.js +215 -0
  45. package/dist/components/AddressesField.js.map +1 -0
  46. package/dist/components/CountrySearch.d.ts +16 -0
  47. package/dist/components/CountrySearch.d.ts.map +1 -0
  48. package/dist/components/CountrySearch.js +30 -0
  49. package/dist/components/CountrySearch.js.map +1 -0
  50. package/dist/components/EnvironmentBanner.d.ts +0 -12
  51. package/dist/components/EnvironmentBanner.d.ts.map +1 -1
  52. package/dist/components/EnvironmentBanner.js +21 -6
  53. package/dist/components/EnvironmentBanner.js.map +1 -1
  54. package/dist/components/InlineEdit.d.ts +7 -1
  55. package/dist/components/InlineEdit.d.ts.map +1 -1
  56. package/dist/components/InlineEdit.js +8 -1
  57. package/dist/components/InlineEdit.js.map +1 -1
  58. package/dist/components/LinkedEventsPanel.d.ts +11 -0
  59. package/dist/components/LinkedEventsPanel.d.ts.map +1 -0
  60. package/dist/components/LinkedEventsPanel.js +18 -0
  61. package/dist/components/LinkedEventsPanel.js.map +1 -0
  62. package/dist/components/NotesPanel.d.ts +4 -6
  63. package/dist/components/NotesPanel.d.ts.map +1 -1
  64. package/dist/components/NotesPanel.js +39 -3
  65. package/dist/components/NotesPanel.js.map +1 -1
  66. package/dist/components/PlanAttention.d.ts.map +1 -1
  67. package/dist/components/PlanAttention.js +3 -2
  68. package/dist/components/PlanAttention.js.map +1 -1
  69. package/dist/components/PlanPanel.d.ts +3 -3
  70. package/dist/components/PlanPanel.d.ts.map +1 -1
  71. package/dist/components/Shell.d.ts.map +1 -1
  72. package/dist/components/Shell.js +8 -2
  73. package/dist/components/Shell.js.map +1 -1
  74. package/dist/components/SocialNetworkIcon.d.ts +17 -0
  75. package/dist/components/SocialNetworkIcon.d.ts.map +1 -0
  76. package/dist/components/SocialNetworkIcon.js +39 -0
  77. package/dist/components/SocialNetworkIcon.js.map +1 -0
  78. package/dist/components/SocialProfilesField.d.ts +8 -0
  79. package/dist/components/SocialProfilesField.d.ts.map +1 -1
  80. package/dist/components/SocialProfilesField.js +19 -5
  81. package/dist/components/SocialProfilesField.js.map +1 -1
  82. package/dist/components/TimezoneSearch.d.ts +21 -0
  83. package/dist/components/TimezoneSearch.d.ts.map +1 -0
  84. package/dist/components/TimezoneSearch.js +27 -0
  85. package/dist/components/TimezoneSearch.js.map +1 -0
  86. package/dist/components/WorkspaceSwitcher.d.ts +8 -0
  87. package/dist/components/WorkspaceSwitcher.d.ts.map +1 -0
  88. package/dist/components/WorkspaceSwitcher.js +67 -0
  89. package/dist/components/WorkspaceSwitcher.js.map +1 -0
  90. package/dist/components/environmentTone.d.ts +10 -0
  91. package/dist/components/environmentTone.d.ts.map +1 -0
  92. package/dist/components/environmentTone.js +35 -0
  93. package/dist/components/environmentTone.js.map +1 -0
  94. package/dist/index.d.ts +21 -4
  95. package/dist/index.d.ts.map +1 -1
  96. package/dist/index.js +12 -2
  97. package/dist/index.js.map +1 -1
  98. package/dist/lib/timezones.d.ts +17 -0
  99. package/dist/lib/timezones.d.ts.map +1 -0
  100. package/dist/lib/timezones.js +39 -0
  101. package/dist/lib/timezones.js.map +1 -0
  102. package/dist/pages/CompaniesPage.d.ts.map +1 -1
  103. package/dist/pages/CompaniesPage.js +12 -11
  104. package/dist/pages/CompaniesPage.js.map +1 -1
  105. package/dist/pages/CompanyDetail.d.ts.map +1 -1
  106. package/dist/pages/CompanyDetail.js +23 -12
  107. package/dist/pages/CompanyDetail.js.map +1 -1
  108. package/dist/pages/DealDetail.d.ts.map +1 -1
  109. package/dist/pages/DealDetail.js +5 -1
  110. package/dist/pages/DealDetail.js.map +1 -1
  111. package/dist/pages/DecisionsPage.d.ts.map +1 -1
  112. package/dist/pages/DecisionsPage.js +7 -0
  113. package/dist/pages/DecisionsPage.js.map +1 -1
  114. package/dist/pages/EnquiryDetail.d.ts.map +1 -1
  115. package/dist/pages/EnquiryDetail.js +5 -1
  116. package/dist/pages/EnquiryDetail.js.map +1 -1
  117. package/dist/pages/EventDetail.d.ts +2 -0
  118. package/dist/pages/EventDetail.d.ts.map +1 -0
  119. package/dist/pages/EventDetail.js +332 -0
  120. package/dist/pages/EventDetail.js.map +1 -0
  121. package/dist/pages/EventsPage.d.ts +2 -0
  122. package/dist/pages/EventsPage.d.ts.map +1 -0
  123. package/dist/pages/EventsPage.js +176 -0
  124. package/dist/pages/EventsPage.js.map +1 -0
  125. package/dist/pages/ListDetail.d.ts.map +1 -1
  126. package/dist/pages/ListDetail.js +17 -0
  127. package/dist/pages/ListDetail.js.map +1 -1
  128. package/dist/pages/OpportunityDetail.d.ts.map +1 -1
  129. package/dist/pages/OpportunityDetail.js +5 -1
  130. package/dist/pages/OpportunityDetail.js.map +1 -1
  131. package/dist/pages/PartnershipDetail.d.ts.map +1 -1
  132. package/dist/pages/PartnershipDetail.js +5 -1
  133. package/dist/pages/PartnershipDetail.js.map +1 -1
  134. package/dist/pages/PeoplePage.d.ts.map +1 -1
  135. package/dist/pages/PeoplePage.js +13 -5
  136. package/dist/pages/PeoplePage.js.map +1 -1
  137. package/dist/pages/PersonDetail.d.ts.map +1 -1
  138. package/dist/pages/PersonDetail.js +94 -28
  139. package/dist/pages/PersonDetail.js.map +1 -1
  140. package/dist/pages/PlanningPage.d.ts.map +1 -1
  141. package/dist/pages/PlanningPage.js +6 -3
  142. package/dist/pages/PlanningPage.js.map +1 -1
  143. package/dist/pages/RaiseDetail.d.ts.map +1 -1
  144. package/dist/pages/RaiseDetail.js +5 -1
  145. package/dist/pages/RaiseDetail.js.map +1 -1
  146. package/dist/pages/RoleDetail.d.ts.map +1 -1
  147. package/dist/pages/RoleDetail.js +4 -1
  148. package/dist/pages/RoleDetail.js.map +1 -1
  149. package/dist/pages/SearchPage.d.ts.map +1 -1
  150. package/dist/pages/SearchPage.js +2 -1
  151. package/dist/pages/SearchPage.js.map +1 -1
  152. package/dist/pages/account/PreferencesPage.d.ts.map +1 -1
  153. package/dist/pages/account/PreferencesPage.js +2 -28
  154. package/dist/pages/account/PreferencesPage.js.map +1 -1
  155. package/dist/pages/admin/DataPage.js +10 -9
  156. package/dist/pages/admin/DataPage.js.map +1 -1
  157. package/dist/pages/admin/FieldsPage.js +1 -1
  158. package/dist/pages/admin/FieldsPage.js.map +1 -1
  159. package/dist/pages/admin/ModulesPage.d.ts.map +1 -1
  160. package/dist/pages/admin/ModulesPage.js +1 -0
  161. package/dist/pages/admin/ModulesPage.js.map +1 -1
  162. package/dist/pages/admin/WorkspaceSettingsPage.d.ts +12 -0
  163. package/dist/pages/admin/WorkspaceSettingsPage.d.ts.map +1 -1
  164. package/dist/pages/admin/WorkspaceSettingsPage.js +2 -21
  165. package/dist/pages/admin/WorkspaceSettingsPage.js.map +1 -1
  166. package/dist/pages/auth/AuthLayout.d.ts +5 -4
  167. package/dist/pages/auth/AuthLayout.d.ts.map +1 -1
  168. package/dist/pages/auth/AuthLayout.js +7 -5
  169. package/dist/pages/auth/AuthLayout.js.map +1 -1
  170. package/dist/pages/auth/RegionSwitcher.d.ts +10 -0
  171. package/dist/pages/auth/RegionSwitcher.d.ts.map +1 -0
  172. package/dist/pages/auth/RegionSwitcher.js +28 -0
  173. package/dist/pages/auth/RegionSwitcher.js.map +1 -0
  174. package/dist/pages/auth/SignInPage.d.ts.map +1 -1
  175. package/dist/pages/auth/SignInPage.js +3 -1
  176. package/dist/pages/auth/SignInPage.js.map +1 -1
  177. package/dist/pages/auth/SignUpPage.d.ts.map +1 -1
  178. package/dist/pages/auth/SignUpPage.js +7 -0
  179. package/dist/pages/auth/SignUpPage.js.map +1 -1
  180. package/dist/pages/auth/regionHref.d.ts +6 -0
  181. package/dist/pages/auth/regionHref.d.ts.map +1 -0
  182. package/dist/pages/auth/regionHref.js +8 -0
  183. package/dist/pages/auth/regionHref.js.map +1 -0
  184. package/dist/pages/dashboard/DashboardPage.d.ts +8 -0
  185. package/dist/pages/dashboard/DashboardPage.d.ts.map +1 -1
  186. package/dist/pages/dashboard/DashboardPage.js +5 -13
  187. package/dist/pages/dashboard/DashboardPage.js.map +1 -1
  188. package/dist/pages/dashboard/attention.d.ts +1 -8
  189. package/dist/pages/dashboard/attention.d.ts.map +1 -1
  190. package/dist/pages/dashboard/attention.js +21 -54
  191. package/dist/pages/dashboard/attention.js.map +1 -1
  192. package/dist/pages/dashboard/sections.d.ts.map +1 -1
  193. package/dist/pages/dashboard/sections.js +3 -2
  194. package/dist/pages/dashboard/sections.js.map +1 -1
  195. package/dist/pages/forms/FormActions.d.ts.map +1 -1
  196. package/dist/pages/forms/FormActions.js +7 -3
  197. package/dist/pages/forms/FormActions.js.map +1 -1
  198. package/dist/pages/onboarding/HandbookStepPage.d.ts +4 -8
  199. package/dist/pages/onboarding/HandbookStepPage.d.ts.map +1 -1
  200. package/dist/pages/onboarding/HandbookStepPage.js +13 -13
  201. package/dist/pages/onboarding/HandbookStepPage.js.map +1 -1
  202. package/dist/pages/onboarding/InvitesStepPage.d.ts.map +1 -1
  203. package/dist/pages/onboarding/InvitesStepPage.js +13 -7
  204. package/dist/pages/onboarding/InvitesStepPage.js.map +1 -1
  205. package/dist/pages/onboarding/ModulesStepPage.d.ts +11 -0
  206. package/dist/pages/onboarding/ModulesStepPage.d.ts.map +1 -0
  207. package/dist/pages/onboarding/ModulesStepPage.js +80 -0
  208. package/dist/pages/onboarding/ModulesStepPage.js.map +1 -0
  209. package/dist/pages/onboarding/OnboardingNav.d.ts +17 -0
  210. package/dist/pages/onboarding/OnboardingNav.d.ts.map +1 -0
  211. package/dist/pages/onboarding/OnboardingNav.js +37 -0
  212. package/dist/pages/onboarding/OnboardingNav.js.map +1 -0
  213. package/dist/pages/onboarding/OrganisationStepPage.d.ts +13 -0
  214. package/dist/pages/onboarding/OrganisationStepPage.d.ts.map +1 -0
  215. package/dist/pages/onboarding/OrganisationStepPage.js +59 -0
  216. package/dist/pages/onboarding/OrganisationStepPage.js.map +1 -0
  217. package/dist/pages/onboarding/WorkspaceStepPage.d.ts.map +1 -1
  218. package/dist/pages/onboarding/WorkspaceStepPage.js +25 -20
  219. package/dist/pages/onboarding/WorkspaceStepPage.js.map +1 -1
  220. package/dist/pages/onboarding/handbookTemplates.d.ts +19 -0
  221. package/dist/pages/onboarding/handbookTemplates.d.ts.map +1 -0
  222. package/dist/pages/onboarding/handbookTemplates.js +57 -0
  223. package/dist/pages/onboarding/handbookTemplates.js.map +1 -0
  224. package/dist/pages/onboarding/onboardingModules.d.ts +23 -0
  225. package/dist/pages/onboarding/onboardingModules.d.ts.map +1 -0
  226. package/dist/pages/onboarding/onboardingModules.js +153 -0
  227. package/dist/pages/onboarding/onboardingModules.js.map +1 -0
  228. package/dist/pages/onboarding/onboardingRerun.d.ts +21 -0
  229. package/dist/pages/onboarding/onboardingRerun.d.ts.map +1 -0
  230. package/dist/pages/onboarding/onboardingRerun.js +33 -0
  231. package/dist/pages/onboarding/onboardingRerun.js.map +1 -0
  232. package/package.json +4 -3
  233. package/src/api/resources/attendances.ts +54 -0
  234. package/src/api/resources/eventAssociations.ts +43 -0
  235. package/src/api/resources/events.ts +70 -0
  236. package/src/api/resources/handbookSeed.ts +63 -0
  237. package/src/api/resources/moduleSettings.ts +25 -0
  238. package/src/api/resources/planItems.ts +5 -5
  239. package/src/api/resources/publicConfig.ts +3 -3
  240. package/src/api/resources/sampleData.ts +2 -0
  241. package/src/api/resources/session.ts +59 -0
  242. package/src/api/resources/workspace.ts +2 -3
  243. package/src/app/KelpieApp.tsx +11 -3
  244. package/src/components/ActivitiesPanel.tsx +2 -0
  245. package/src/components/AddressesField.tsx +502 -0
  246. package/src/components/CountrySearch.tsx +71 -0
  247. package/src/components/EnvironmentBanner.tsx +23 -6
  248. package/src/components/InlineEdit.tsx +35 -1
  249. package/src/components/LinkedEventsPanel.tsx +50 -0
  250. package/src/components/NotesPanel.tsx +132 -15
  251. package/src/components/PlanAttention.tsx +5 -4
  252. package/src/components/PlanPanel.tsx +3 -3
  253. package/src/components/Shell.tsx +16 -1
  254. package/src/components/SocialNetworkIcon.tsx +88 -0
  255. package/src/components/SocialProfilesField.tsx +57 -10
  256. package/src/components/TimezoneSearch.tsx +67 -0
  257. package/src/components/WorkspaceSwitcher.tsx +136 -0
  258. package/src/components/environmentTone.ts +40 -0
  259. package/src/index.ts +42 -3
  260. package/src/lib/timezones.ts +43 -0
  261. package/src/pages/CompaniesPage.tsx +14 -13
  262. package/src/pages/CompanyDetail.tsx +59 -27
  263. package/src/pages/DealDetail.tsx +5 -0
  264. package/src/pages/DecisionsPage.tsx +7 -0
  265. package/src/pages/EnquiryDetail.tsx +7 -0
  266. package/src/pages/EventDetail.tsx +794 -0
  267. package/src/pages/EventsPage.tsx +382 -0
  268. package/src/pages/ListDetail.tsx +24 -0
  269. package/src/pages/OpportunityDetail.tsx +7 -0
  270. package/src/pages/PartnershipDetail.tsx +7 -0
  271. package/src/pages/PeoplePage.tsx +18 -5
  272. package/src/pages/PersonDetail.tsx +300 -100
  273. package/src/pages/PlanningPage.tsx +17 -14
  274. package/src/pages/RaiseDetail.tsx +5 -0
  275. package/src/pages/RoleDetail.tsx +8 -0
  276. package/src/pages/SearchPage.tsx +2 -1
  277. package/src/pages/account/PreferencesPage.tsx +2 -37
  278. package/src/pages/admin/DataPage.tsx +63 -21
  279. package/src/pages/admin/FieldsPage.tsx +1 -1
  280. package/src/pages/admin/ModulesPage.tsx +1 -0
  281. package/src/pages/admin/WorkspaceSettingsPage.tsx +10 -33
  282. package/src/pages/auth/AuthLayout.tsx +8 -4
  283. package/src/pages/auth/RegionSwitcher.tsx +56 -0
  284. package/src/pages/auth/SignInPage.tsx +10 -6
  285. package/src/pages/auth/SignUpPage.tsx +25 -0
  286. package/src/pages/auth/regionHref.ts +10 -0
  287. package/src/pages/dashboard/DashboardPage.tsx +16 -48
  288. package/src/pages/dashboard/attention.ts +24 -78
  289. package/src/pages/dashboard/sections.tsx +8 -2
  290. package/src/pages/forms/FormActions.tsx +14 -8
  291. package/src/pages/onboarding/HandbookStepPage.tsx +21 -24
  292. package/src/pages/onboarding/InvitesStepPage.tsx +27 -19
  293. package/src/pages/onboarding/ModulesStepPage.tsx +145 -0
  294. package/src/pages/onboarding/OnboardingNav.tsx +97 -0
  295. package/src/pages/onboarding/OrganisationStepPage.tsx +130 -0
  296. package/src/pages/onboarding/WorkspaceStepPage.tsx +53 -38
  297. package/src/pages/onboarding/handbookTemplates.ts +77 -0
  298. package/src/pages/onboarding/onboardingModules.ts +202 -0
  299. package/src/pages/onboarding/onboardingRerun.ts +41 -0
  300. package/src/styles.css +30 -0
@@ -0,0 +1,59 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { useState } from 'react';
3
+ import { useNavigate, useSearchParams } from 'react-router';
4
+ import { useHandbookPages } from '../../api/resources/handbookPages.js';
5
+ import { useSeedHandbookForWorkspace } from '../../api/resources/handbookSeed.js';
6
+ import { ErrorPanel, LoadingPanel } from '../../components/QueryState.js';
7
+ import { AuthLayout } from '../auth/AuthLayout.js';
8
+ import { handbookTemplateForChoice, ORGANISATION_CHOICES, organisationChoiceFromParam, } from './handbookTemplates.js';
9
+ import { OnboardingNav } from './OnboardingNav.js';
10
+ import { isOnboardingRerun, ONBOARDING_ORG_PARAM, onboardingPath } from './onboardingRerun.js';
11
+ /**
12
+ * Onboarding step 2: organisation type, then seed the starter handbook.
13
+ *
14
+ * The workspace already exists. This step writes pages through
15
+ * `POST /v1/workspaces/:id/handbook/seed`. "Choose later" seeds the original
16
+ * startup handbook. Changing the choice (via Previous) replaces pages only
17
+ * while they are still unedited starter stubs.
18
+ *
19
+ * A rerun still shows the choices, but does not seed or replace handbook
20
+ * pages. Next moves on to modules with those pages left alone.
21
+ */
22
+ export function OrganisationStepPage() {
23
+ const navigate = useNavigate();
24
+ const [searchParams] = useSearchParams();
25
+ const rerun = isOnboardingRerun(searchParams);
26
+ const seedHandbook = useSeedHandbookForWorkspace();
27
+ const { records: pages, isLoading } = useHandbookPages();
28
+ const [choice, setChoice] = useState(() => organisationChoiceFromParam(searchParams.get(ONBOARDING_ORG_PARAM)));
29
+ function goToModules() {
30
+ navigate(onboardingPath('/onboarding/modules', rerun, choice), { replace: true });
31
+ }
32
+ function submit(event) {
33
+ event.preventDefault();
34
+ if (rerun) {
35
+ goToModules();
36
+ return;
37
+ }
38
+ seedHandbook
39
+ .runAsync({
40
+ handbookTemplate: handbookTemplateForChoice(choice),
41
+ replace: pages.length > 0,
42
+ })
43
+ .then(() => {
44
+ goToModules();
45
+ })
46
+ .catch(() => undefined);
47
+ }
48
+ if (!rerun && isLoading) {
49
+ return (_jsx(AuthLayout, { step: 2, title: "What kind of organisation is this?", description: "This picks the starter handbook pages agents read to learn what your company is.", children: _jsx("div", { className: "mt-5", children: _jsx(LoadingPanel, { label: "Loading\u2026" }) }) }));
50
+ }
51
+ return (_jsx(AuthLayout, { step: 2, title: "What kind of organisation is this?", description: rerun
52
+ ? 'Pick a type to continue.'
53
+ : 'This picks the starter handbook pages agents read to learn what your company is.', children: _jsxs("form", { onSubmit: submit, className: "mt-5 space-y-3", children: [_jsx("ul", { className: "grid gap-2 sm:grid-cols-2", children: ORGANISATION_CHOICES.map((option) => (_jsx("li", { className: option.id === 'later' ? 'h-full sm:col-span-2' : 'h-full', children: _jsxs("label", { className: `flex h-full cursor-pointer items-start gap-2 rounded-md border px-3 py-2 text-[12px] ${choice === option.id
54
+ ? 'border-accent bg-accent/5 text-ink'
55
+ : 'border-border bg-surface text-ink'}`, children: [_jsx("input", { type: "radio", name: "organisation-type", value: option.id, checked: choice === option.id, disabled: seedHandbook.isPending, onChange: () => {
56
+ setChoice(option.id);
57
+ }, className: "mt-0.5 h-4 w-4 border-border text-accent focus:ring-accent disabled:opacity-50" }), _jsxs("span", { children: [_jsx("span", { className: "font-medium", children: option.label }), _jsx("span", { className: "mt-0.5 block text-[11px] text-ink-muted", children: option.description })] })] }) }, option.id))) }), seedHandbook.error !== null && _jsx(ErrorPanel, { error: seedHandbook.error }), _jsx(OnboardingNav, { step: 2, nextLabel: "Next", nextPendingLabel: "Preparing handbook\u2026", isPending: seedHandbook.isPending })] }) }));
58
+ }
59
+ //# sourceMappingURL=OrganisationStepPage.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"OrganisationStepPage.js","sourceRoot":"","sources":["../../../src/pages/onboarding/OrganisationStepPage.tsx"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"WorkspaceStepPage.d.ts","sourceRoot":"","sources":["../../../src/pages/onboarding/WorkspaceStepPage.tsx"],"names":[],"mappings":"AA+CA,wBAAgB,iBAAiB,IAAI,KAAK,CAAC,GAAG,CAAC,OAAO,CAsGrD"}
1
+ {"version":3,"file":"WorkspaceStepPage.d.ts","sourceRoot":"","sources":["../../../src/pages/onboarding/WorkspaceStepPage.tsx"],"names":[],"mappings":"AAgDA,wBAAgB,iBAAiB,IAAI,KAAK,CAAC,GAAG,CAAC,OAAO,CAoHrD"}
@@ -1,11 +1,12 @@
1
1
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
2
  import { useState } from 'react';
3
- import { Link, Navigate, useNavigate } from 'react-router';
4
- import { useInstallSampleData } from '../../api/resources/sampleData.js';
3
+ import { Link, Navigate, useNavigate, useSearchParams } from 'react-router';
5
4
  import { useCreateWorkspace, useSession } from '../../api/resources/session.js';
6
5
  import { ErrorPanel } from '../../components/QueryState.js';
7
- import { SubmitButton, TextField } from '../auth/AuthForm.js';
6
+ import { TextField } from '../auth/AuthForm.js';
8
7
  import { AuthLayout } from '../auth/AuthLayout.js';
8
+ import { OnboardingNav } from './OnboardingNav.js';
9
+ import { isOnboardingRerun, ONBOARDING_ORG_PARAM, onboardingPath } from './onboardingRerun.js';
9
10
  /**
10
11
  * Onboarding step 1: the workspace, against `POST /v1/workspaces`.
11
12
  *
@@ -13,9 +14,9 @@ import { AuthLayout } from '../auth/AuthLayout.js';
13
14
  * no workspace, so until this succeeds every CRM endpoint answers `403`, and
14
15
  * `SessionGate` sends anyone in that state here.
15
16
  *
16
- * One request does the whole thing: the service seeds the starter handbook and
17
- * the pipeline stages in the same transaction and moves this session into the
18
- * new workspace. There is nothing to re-login for and nothing to create next.
17
+ * One request creates the workspace, seeds pipeline stages, and moves this
18
+ * session into it. The starter handbook is seeded on step 4 once the reader
19
+ * picks an organisation type.
19
20
  *
20
21
  * It sits outside `SessionGate`, because being sent here *is* what the gate does
21
22
  * with an account that has no workspace, so gating it would loop. That leaves
@@ -42,14 +43,15 @@ function browserTimezone() {
42
43
  }
43
44
  export function WorkspaceStepPage() {
44
45
  const navigate = useNavigate();
45
- const { isSignedOut } = useSession();
46
+ const [searchParams] = useSearchParams();
47
+ const rerun = isOnboardingRerun(searchParams);
48
+ const { isSignedOut, session } = useSession();
46
49
  const createWorkspace = useCreateWorkspace();
47
- const installSampleData = useInstallSampleData();
50
+ const hasWorkspace = session?.workspaceId !== null && session?.workspaceId !== undefined;
48
51
  const [name, setName] = useState('');
49
52
  const [slug, setSlug] = useState('');
50
53
  const [slugEdited, setSlugEdited] = useState(false);
51
54
  const [timezone] = useState(browserTimezone);
52
- const [seedSample, setSeedSample] = useState(false);
53
55
  function changeName(value) {
54
56
  setName(value);
55
57
  if (!slugEdited) {
@@ -64,22 +66,25 @@ export function WorkspaceStepPage() {
64
66
  event.preventDefault();
65
67
  createWorkspace
66
68
  .runAsync({ name: name.trim(), slug: slug.trim(), timezone })
67
- .then(async (workspace) => {
68
- if (seedSample) {
69
- // A refusal here does not block the wizard: the workspace itself is
70
- // already created, and the invites step is what comes next either
71
- // way. The error stays on screen so the reader sees what failed.
72
- await installSampleData
73
- .runAsync({ workspaceId: workspace.id })
74
- .catch(() => undefined);
75
- }
76
- navigate('/onboarding/invites', { replace: true });
69
+ .then(() => {
70
+ navigate('/onboarding/organisation', { replace: true });
77
71
  })
78
72
  .catch(() => undefined);
79
73
  }
80
74
  if (isSignedOut) {
81
75
  return _jsx(Navigate, { to: "/login", replace: true });
82
76
  }
83
- return (_jsx(AuthLayout, { step: 1, title: "Create your workspace", description: "A workspace is your company brain \u2014 CRM records, handbook, and team.", footer: _jsx(Link, { to: "/login", className: "font-medium text-accent hover:underline", children: "Sign in as somebody else" }), children: _jsxs("form", { onSubmit: submit, className: "mt-5 space-y-3", children: [_jsx(TextField, { label: "Workspace name", value: name, onChange: changeName, placeholder: "Acme Labs", autoComplete: "organization", required: true }), _jsx(TextField, { label: "Slug", value: slug, onChange: changeSlug, hint: "Lowercase letters, digits, and hyphens. It appears in URLs.", mono: true, required: true }), _jsxs("p", { className: "text-[11px] text-ink-faint", children: ["Timezone: ", timezone, ". Change it later in Admin \u2192 Workspace."] }), _jsxs("label", { className: "flex items-start gap-2 text-[12px] text-ink", children: [_jsx("input", { type: "checkbox", checked: seedSample, onChange: (event) => setSeedSample(event.target.checked), className: "mt-0.5 h-4 w-4 rounded border-border text-accent focus:ring-accent" }), _jsx("span", { children: "Install sample data \u2014 a small set of companies, people, deals, enquiries, opportunities, fundraising, partnerships, and hiring so the workspace has something to look at. You can delete it later." })] }), createWorkspace.error !== null && _jsx(ErrorPanel, { error: createWorkspace.error }), installSampleData.error !== null && _jsx(ErrorPanel, { error: installSampleData.error }), _jsx(SubmitButton, { label: "Continue", pendingLabel: installSampleData.isPending ? 'Installing sample data…' : 'Creating…', isPending: createWorkspace.isPending || installSampleData.isPending })] }) }));
77
+ /**
78
+ * Previous on a later step lands here after the workspace already exists.
79
+ * Showing the create form again would offer a second POST that this account
80
+ * cannot use. Next is the only action that remains. A rerun keeps the flag
81
+ * so organisation does not seed handbook pages and the review step is skipped.
82
+ */
83
+ if (hasWorkspace) {
84
+ return (_jsx(AuthLayout, { step: 1, title: "Your workspace is ready", description: "Use Next to choose your organisation type and starter handbook.", footer: _jsx(Link, { to: "/login", className: "font-medium text-accent hover:underline", children: "Sign in as somebody else" }), children: _jsx("div", { className: "mt-5", children: _jsx(OnboardingNav, { step: 1, nextLabel: "Next", nextType: "button", onNext: () => {
85
+ navigate(onboardingPath('/onboarding/organisation', rerun, searchParams.get(ONBOARDING_ORG_PARAM)), { replace: true });
86
+ } }) }) }));
87
+ }
88
+ return (_jsx(AuthLayout, { step: 1, title: "Create your workspace", description: "A workspace is your company brain \u2014 CRM records, handbook, and team.", footer: _jsx(Link, { to: "/login", className: "font-medium text-accent hover:underline", children: "Sign in as somebody else" }), children: _jsxs("form", { onSubmit: submit, className: "mt-5 space-y-3", children: [_jsx(TextField, { label: "Workspace name", value: name, onChange: changeName, placeholder: "Acme Labs", autoComplete: "organization", required: true }), _jsx(TextField, { label: "Slug", value: slug, onChange: changeSlug, hint: "Lowercase letters, digits, and hyphens. It appears in URLs.", mono: true, required: true }), _jsxs("p", { className: "text-[11px] text-ink-faint", children: ["Timezone: ", timezone, ". Change it later in Admin \u2192 Workspace."] }), createWorkspace.error !== null && _jsx(ErrorPanel, { error: createWorkspace.error }), _jsx(OnboardingNav, { step: 1, nextLabel: "Next", nextPendingLabel: "Creating\u2026", isPending: createWorkspace.isPending })] }) }));
84
89
  }
85
90
  //# sourceMappingURL=WorkspaceStepPage.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"WorkspaceStepPage.js","sourceRoot":"","sources":["../../../src/pages/onboarding/WorkspaceStepPage.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"WorkspaceStepPage.js","sourceRoot":"","sources":["../../../src/pages/onboarding/WorkspaceStepPage.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,19 @@
1
+ import type { HandbookTemplateId } from '@kelpie/schemas';
2
+ /**
3
+ * Labels and descriptions for the organisation-type step. Page lists live
4
+ * server-side; `later` maps to the startup (original) handbook template.
5
+ */
6
+ export type OrganisationChoiceId = HandbookTemplateId | 'later';
7
+ export interface OrganisationChoice {
8
+ readonly id: OrganisationChoiceId;
9
+ readonly label: string;
10
+ readonly description: string;
11
+ }
12
+ export declare const ORGANISATION_CHOICES: readonly OrganisationChoice[];
13
+ export declare const DEFAULT_ORGANISATION_CHOICE: OrganisationChoiceId;
14
+ export declare function isOrganisationChoiceId(value: string): value is OrganisationChoiceId;
15
+ export declare function organisationChoiceFromParam(value: string | null): OrganisationChoiceId;
16
+ export declare function organisationChoiceLabel(choice: OrganisationChoiceId): string;
17
+ /** `later` seeds the original startup pages. */
18
+ export declare function handbookTemplateForChoice(choice: OrganisationChoiceId): HandbookTemplateId;
19
+ //# sourceMappingURL=handbookTemplates.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"handbookTemplates.d.ts","sourceRoot":"","sources":["../../../src/pages/onboarding/handbookTemplates.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAA;AAEzD;;;GAGG;AAEH,MAAM,MAAM,oBAAoB,GAAG,kBAAkB,GAAG,OAAO,CAAA;AAE/D,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,EAAE,EAAE,oBAAoB,CAAA;IACjC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;IACtB,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAA;CAC7B;AAED,eAAO,MAAM,oBAAoB,EAAE,SAAS,kBAAkB,EAoC7D,CAAA;AAED,eAAO,MAAM,2BAA2B,EAAE,oBAAgC,CAAA;AAE1E,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,MAAM,GAAG,KAAK,IAAI,oBAAoB,CAEnF;AAED,wBAAgB,2BAA2B,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,GAAG,oBAAoB,CAEtF;AAED,wBAAgB,uBAAuB,CAAC,MAAM,EAAE,oBAAoB,GAAG,MAAM,CAQ5E;AAED,gDAAgD;AAChD,wBAAgB,yBAAyB,CAAC,MAAM,EAAE,oBAAoB,GAAG,kBAAkB,CAE1F"}
@@ -0,0 +1,57 @@
1
+ export const ORGANISATION_CHOICES = [
2
+ {
3
+ id: 'startup',
4
+ label: 'Startup',
5
+ description: 'Product company, SaaS, or tech startup.',
6
+ },
7
+ {
8
+ id: 'agency',
9
+ label: 'Agency',
10
+ description: 'Consultancy, design shop, dev shop, or marketing agency.',
11
+ },
12
+ {
13
+ id: 'nonprofit',
14
+ label: 'Nonprofit',
15
+ description: 'Charity, foundation, or social enterprise.',
16
+ },
17
+ {
18
+ id: 'community',
19
+ label: 'Community',
20
+ description: 'Club, association, co-op, or membership organisation.',
21
+ },
22
+ {
23
+ id: 'professional-services',
24
+ label: 'Professional services',
25
+ description: 'Law, accounting, architecture, or advisory practice.',
26
+ },
27
+ {
28
+ id: 'creator',
29
+ label: 'Creator',
30
+ description: 'Solo creator, freelancer, or personal brand.',
31
+ },
32
+ {
33
+ id: 'later',
34
+ label: 'Choose later',
35
+ description: 'Use the standard startup handbook for now. Edit pages any time.',
36
+ },
37
+ ];
38
+ export const DEFAULT_ORGANISATION_CHOICE = 'startup';
39
+ export function isOrganisationChoiceId(value) {
40
+ return ORGANISATION_CHOICES.some((option) => option.id === value);
41
+ }
42
+ export function organisationChoiceFromParam(value) {
43
+ return value !== null && isOrganisationChoiceId(value) ? value : DEFAULT_ORGANISATION_CHOICE;
44
+ }
45
+ export function organisationChoiceLabel(choice) {
46
+ for (const option of ORGANISATION_CHOICES) {
47
+ if (option.id === choice) {
48
+ return option.label;
49
+ }
50
+ }
51
+ return 'Startup';
52
+ }
53
+ /** `later` seeds the original startup pages. */
54
+ export function handbookTemplateForChoice(choice) {
55
+ return choice === 'later' ? 'startup' : choice;
56
+ }
57
+ //# sourceMappingURL=handbookTemplates.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"handbookTemplates.js","sourceRoot":"","sources":["../../../src/pages/onboarding/handbookTemplates.ts"],"names":[],"mappings":"AAeA,MAAM,CAAC,MAAM,oBAAoB,GAAkC;IACjE;QACE,EAAE,EAAE,SAAS;QACb,KAAK,EAAE,SAAS;QAChB,WAAW,EAAE,yCAAyC;KACvD;IACD;QACE,EAAE,EAAE,QAAQ;QACZ,KAAK,EAAE,QAAQ;QACf,WAAW,EAAE,0DAA0D;KACxE;IACD;QACE,EAAE,EAAE,WAAW;QACf,KAAK,EAAE,WAAW;QAClB,WAAW,EAAE,4CAA4C;KAC1D;IACD;QACE,EAAE,EAAE,WAAW;QACf,KAAK,EAAE,WAAW;QAClB,WAAW,EAAE,uDAAuD;KACrE;IACD;QACE,EAAE,EAAE,uBAAuB;QAC3B,KAAK,EAAE,uBAAuB;QAC9B,WAAW,EAAE,sDAAsD;KACpE;IACD;QACE,EAAE,EAAE,SAAS;QACb,KAAK,EAAE,SAAS;QAChB,WAAW,EAAE,8CAA8C;KAC5D;IACD;QACE,EAAE,EAAE,OAAO;QACX,KAAK,EAAE,cAAc;QACrB,WAAW,EAAE,iEAAiE;KAC/E;CACF,CAAA;AAED,MAAM,CAAC,MAAM,2BAA2B,GAAyB,SAAS,CAAA;AAE1E,MAAM,UAAU,sBAAsB,CAAC,KAAa;IAClD,OAAO,oBAAoB,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,EAAE,KAAK,KAAK,CAAC,CAAA;AACnE,CAAC;AAED,MAAM,UAAU,2BAA2B,CAAC,KAAoB;IAC9D,OAAO,KAAK,KAAK,IAAI,IAAI,sBAAsB,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,2BAA2B,CAAA;AAC9F,CAAC;AAED,MAAM,UAAU,uBAAuB,CAAC,MAA4B;IAClE,KAAK,MAAM,MAAM,IAAI,oBAAoB,EAAE,CAAC;QAC1C,IAAI,MAAM,CAAC,EAAE,KAAK,MAAM,EAAE,CAAC;YACzB,OAAO,MAAM,CAAC,KAAK,CAAA;QACrB,CAAC;IACH,CAAC;IAED,OAAO,SAAS,CAAA;AAClB,CAAC;AAED,gDAAgD;AAChD,MAAM,UAAU,yBAAyB,CAAC,MAA4B;IACpE,OAAO,MAAM,KAAK,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM,CAAA;AAChD,CAAC"}
@@ -0,0 +1,23 @@
1
+ import type { OrganisationChoiceId } from './handbookTemplates.ts';
2
+ /**
3
+ * The six optional modules the setup wizard offers. Other toggleable modules
4
+ * stay on; Admin → Modules is where they change later.
5
+ *
6
+ * Ids match the server module catalog (`deals`, `raises`, …). The wizard is
7
+ * what writes the first `workspace_module_settings` rows for these six.
8
+ *
9
+ * Labels stay the domain names. Defaults and explanations follow the
10
+ * organisation type chosen on the previous step (`onboarding.md`).
11
+ */
12
+ export type OnboardingModuleId = 'deals' | 'opportunities' | 'raises' | 'partnerships' | 'events' | 'forms';
13
+ export interface OnboardingModuleChoice {
14
+ readonly id: OnboardingModuleId;
15
+ readonly label: string;
16
+ readonly description: string;
17
+ readonly defaultEnabled: boolean;
18
+ }
19
+ /** Startup catalog. Prefer `onboardingModulesForChoice` when a type is known. */
20
+ export declare const ONBOARDING_MODULES: readonly OnboardingModuleChoice[];
21
+ export declare function onboardingModulesForChoice(choice: OrganisationChoiceId): readonly OnboardingModuleChoice[];
22
+ export declare function defaultOnboardingModuleState(choice?: OrganisationChoiceId): Record<OnboardingModuleId, boolean>;
23
+ //# sourceMappingURL=onboardingModules.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"onboardingModules.d.ts","sourceRoot":"","sources":["../../../src/pages/onboarding/onboardingModules.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAA;AAElE;;;;;;;;;GASG;AAEH,MAAM,MAAM,kBAAkB,GAC1B,OAAO,GACP,eAAe,GACf,QAAQ,GACR,cAAc,GACd,QAAQ,GACR,OAAO,CAAA;AAEX,MAAM,WAAW,sBAAsB;IACrC,QAAQ,CAAC,EAAE,EAAE,kBAAkB,CAAA;IAC/B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;IACtB,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAA;IAC5B,QAAQ,CAAC,cAAc,EAAE,OAAO,CAAA;CACjC;AAyJD,iFAAiF;AACjF,eAAO,MAAM,kBAAkB,EAAE,SAAS,sBAAsB,EAA+B,CAAA;AAE/F,wBAAgB,0BAA0B,CACxC,MAAM,EAAE,oBAAoB,GAC3B,SAAS,sBAAsB,EAAE,CAEnC;AAED,wBAAgB,4BAA4B,CAC1C,MAAM,GAAE,oBAAgC,GACvC,MAAM,CAAC,kBAAkB,EAAE,OAAO,CAAC,CAErC"}
@@ -0,0 +1,153 @@
1
+ const LABELS = {
2
+ deals: 'Deals',
3
+ opportunities: 'Opportunities',
4
+ raises: 'Fundraising',
5
+ partnerships: 'Partnerships',
6
+ events: 'Events',
7
+ forms: 'Forms',
8
+ };
9
+ const MODULE_ORDER = [
10
+ 'deals',
11
+ 'opportunities',
12
+ 'raises',
13
+ 'partnerships',
14
+ 'events',
15
+ 'forms',
16
+ ];
17
+ /** Startup / Choose later — every optional module starts on. */
18
+ const STARTUP = {
19
+ enabled: {
20
+ deals: true,
21
+ opportunities: true,
22
+ raises: true,
23
+ partnerships: true,
24
+ events: true,
25
+ forms: true,
26
+ },
27
+ descriptions: {
28
+ deals: 'Track sales you are trying to close, from first chat to won or lost.',
29
+ opportunities: 'Chase things that are not sales — grants, awards, press, a speaking slot.',
30
+ raises: 'Run a funding round: who you are talking to, and where each one is up to.',
31
+ partnerships: 'Keep tabs on the people you work with long-term, and when to check in next.',
32
+ events: 'Plan meetups, dinners, and webinars, and see who is coming.',
33
+ forms: 'Put a form on your site. New sign-ups land in Kelpie on their own.',
34
+ },
35
+ };
36
+ const AGENCY = {
37
+ enabled: {
38
+ deals: true,
39
+ opportunities: false,
40
+ raises: false,
41
+ partnerships: true,
42
+ events: true,
43
+ forms: true,
44
+ },
45
+ descriptions: {
46
+ deals: 'Track pitches, retainers, and projects you are trying to close.',
47
+ opportunities: 'Chase RFPs, awards, press, and speaking slots that are not billed work.',
48
+ raises: 'Run a funding round: who you are talking to, and where each one is up to.',
49
+ partnerships: 'Keep tabs on subcontractors, channel partners, and when to check in next.',
50
+ events: 'Plan workshops, client dinners, and webinars, and see who is coming.',
51
+ forms: 'Put a form on your site. New enquiries land in Kelpie on their own.',
52
+ },
53
+ };
54
+ const NONPROFIT = {
55
+ enabled: {
56
+ deals: false,
57
+ opportunities: true,
58
+ raises: true,
59
+ partnerships: true,
60
+ events: true,
61
+ forms: true,
62
+ },
63
+ descriptions: {
64
+ deals: 'Track sponsorships or earned-income work you are trying to close.',
65
+ opportunities: 'Chase grants, awards, press, and speaking slots.',
66
+ raises: 'Track who you are raising from, and where each conversation is up to.',
67
+ partnerships: 'Keep tabs on the organisations you work with long-term, and when to check in next.',
68
+ events: 'Plan fundraisers, volunteer days, and community gatherings, and see who is coming.',
69
+ forms: 'Put a form on your site. New supporters land in Kelpie on their own.',
70
+ },
71
+ };
72
+ const COMMUNITY = {
73
+ enabled: {
74
+ deals: false,
75
+ opportunities: true,
76
+ raises: true,
77
+ partnerships: true,
78
+ events: true,
79
+ forms: true,
80
+ },
81
+ descriptions: {
82
+ deals: 'Track sponsorships or paid programmes you are trying to close.',
83
+ opportunities: 'Chase grants, press, and speaking slots that are not membership sales.',
84
+ raises: 'Track who you are raising from, and where each conversation is up to.',
85
+ partnerships: 'Keep tabs on sister organisations and long-term collaborators, and when to check in next.',
86
+ events: 'Plan meetups, dinners, and member gatherings, and see who is coming.',
87
+ forms: 'Put a join or contact form on your site. New sign-ups land in Kelpie on their own.',
88
+ },
89
+ };
90
+ const PROFESSIONAL_SERVICES = {
91
+ enabled: {
92
+ deals: true,
93
+ opportunities: false,
94
+ raises: false,
95
+ partnerships: false,
96
+ events: true,
97
+ forms: true,
98
+ },
99
+ descriptions: {
100
+ deals: 'Track engagements from first conversation to won or lost.',
101
+ opportunities: 'Chase tenders, panels, press, and speaking slots.',
102
+ raises: 'Run a funding round: who you are talking to, and where each one is up to.',
103
+ partnerships: 'Keep tabs on referral sources and when to check in next.',
104
+ events: 'Plan client seminars, dinners, and webinars, and see who is coming.',
105
+ forms: 'Put a form on your site. New enquiries land in Kelpie on their own.',
106
+ },
107
+ };
108
+ const CREATOR = {
109
+ enabled: {
110
+ deals: true,
111
+ opportunities: true,
112
+ raises: false,
113
+ partnerships: false,
114
+ events: false,
115
+ forms: true,
116
+ },
117
+ descriptions: {
118
+ deals: 'Track brand deals and client work from first chat to won or lost.',
119
+ opportunities: 'Chase press, speaking, and other chances that are not billed work.',
120
+ raises: 'Run a funding round: who you are talking to, and where each one is up to.',
121
+ partnerships: 'Keep tabs on the brands you work with long-term, and when to check in next.',
122
+ events: 'Plan meetups, launches, and webinars, and see who is coming.',
123
+ forms: 'Put a form on your site. New enquiries land in Kelpie on their own.',
124
+ },
125
+ };
126
+ const PRESETS = {
127
+ startup: STARTUP,
128
+ agency: AGENCY,
129
+ nonprofit: NONPROFIT,
130
+ community: COMMUNITY,
131
+ 'professional-services': PROFESSIONAL_SERVICES,
132
+ creator: CREATOR,
133
+ };
134
+ function presetForChoice(choice) {
135
+ return choice === 'later' ? STARTUP : PRESETS[choice];
136
+ }
137
+ /** Startup catalog. Prefer `onboardingModulesForChoice` when a type is known. */
138
+ export const ONBOARDING_MODULES = modulesFromPreset(STARTUP);
139
+ export function onboardingModulesForChoice(choice) {
140
+ return modulesFromPreset(presetForChoice(choice));
141
+ }
142
+ export function defaultOnboardingModuleState(choice = 'startup') {
143
+ return { ...presetForChoice(choice).enabled };
144
+ }
145
+ function modulesFromPreset(preset) {
146
+ return MODULE_ORDER.map((id) => ({
147
+ id,
148
+ label: LABELS[id],
149
+ description: preset.descriptions[id],
150
+ defaultEnabled: preset.enabled[id],
151
+ }));
152
+ }
153
+ //# sourceMappingURL=onboardingModules.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"onboardingModules.js","sourceRoot":"","sources":["../../../src/pages/onboarding/onboardingModules.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,21 @@
1
+ /**
2
+ * A finished workspace can walk the wizard again from the account menu.
3
+ *
4
+ * `?rerun=1` marks that path. Organisation still runs so the reader can pick
5
+ * a type, but handbook pages are not seeded or replaced. The handbook review
6
+ * step is skipped: workspace → organisation → modules → invites → dashboard.
7
+ */
8
+ export declare const ONBOARDING_RERUN_PARAM = "rerun";
9
+ export declare const ONBOARDING_RERUN_VALUE = "1";
10
+ /** Organisation type chosen on step 2 — drives module defaults on step 3. */
11
+ export declare const ONBOARDING_ORG_PARAM = "org";
12
+ /** Entry URL the account menu opens for a rerun. */
13
+ export declare const ONBOARDING_RERUN_ENTRY = "/onboarding/workspace?rerun=1";
14
+ export declare function isOnboardingRerun(searchParams: URLSearchParams): boolean;
15
+ /**
16
+ * Keep the rerun flag and the organisation type when moving between onboarding
17
+ * routes. `org` is how the modules step knows which defaults to offer; nothing
18
+ * else is held in the browser (`onboarding.md`).
19
+ */
20
+ export declare function onboardingPath(path: string, rerun: boolean, org?: string | null): string;
21
+ //# sourceMappingURL=onboardingRerun.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"onboardingRerun.d.ts","sourceRoot":"","sources":["../../../src/pages/onboarding/onboardingRerun.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,eAAO,MAAM,sBAAsB,UAAU,CAAA;AAC7C,eAAO,MAAM,sBAAsB,MAAM,CAAA;AAEzC,6EAA6E;AAC7E,eAAO,MAAM,oBAAoB,QAAQ,CAAA;AAEzC,oDAAoD;AACpD,eAAO,MAAM,sBAAsB,kCAA8E,CAAA;AAEjH,wBAAgB,iBAAiB,CAAC,YAAY,EAAE,eAAe,GAAG,OAAO,CAExE;AAED;;;;GAIG;AACH,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,GAAG,CAAC,EAAE,MAAM,GAAG,IAAI,GAAG,MAAM,CAcxF"}
@@ -0,0 +1,33 @@
1
+ /**
2
+ * A finished workspace can walk the wizard again from the account menu.
3
+ *
4
+ * `?rerun=1` marks that path. Organisation still runs so the reader can pick
5
+ * a type, but handbook pages are not seeded or replaced. The handbook review
6
+ * step is skipped: workspace → organisation → modules → invites → dashboard.
7
+ */
8
+ export const ONBOARDING_RERUN_PARAM = 'rerun';
9
+ export const ONBOARDING_RERUN_VALUE = '1';
10
+ /** Organisation type chosen on step 2 — drives module defaults on step 3. */
11
+ export const ONBOARDING_ORG_PARAM = 'org';
12
+ /** Entry URL the account menu opens for a rerun. */
13
+ export const ONBOARDING_RERUN_ENTRY = `/onboarding/workspace?${ONBOARDING_RERUN_PARAM}=${ONBOARDING_RERUN_VALUE}`;
14
+ export function isOnboardingRerun(searchParams) {
15
+ return searchParams.get(ONBOARDING_RERUN_PARAM) === ONBOARDING_RERUN_VALUE;
16
+ }
17
+ /**
18
+ * Keep the rerun flag and the organisation type when moving between onboarding
19
+ * routes. `org` is how the modules step knows which defaults to offer; nothing
20
+ * else is held in the browser (`onboarding.md`).
21
+ */
22
+ export function onboardingPath(path, rerun, org) {
23
+ const params = new URLSearchParams();
24
+ if (rerun) {
25
+ params.set(ONBOARDING_RERUN_PARAM, ONBOARDING_RERUN_VALUE);
26
+ }
27
+ if (org !== undefined && org !== null && org !== '') {
28
+ params.set(ONBOARDING_ORG_PARAM, org);
29
+ }
30
+ const query = params.toString();
31
+ return query === '' ? path : `${path}?${query}`;
32
+ }
33
+ //# sourceMappingURL=onboardingRerun.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"onboardingRerun.js","sourceRoot":"","sources":["../../../src/pages/onboarding/onboardingRerun.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,MAAM,CAAC,MAAM,sBAAsB,GAAG,OAAO,CAAA;AAC7C,MAAM,CAAC,MAAM,sBAAsB,GAAG,GAAG,CAAA;AAEzC,6EAA6E;AAC7E,MAAM,CAAC,MAAM,oBAAoB,GAAG,KAAK,CAAA;AAEzC,oDAAoD;AACpD,MAAM,CAAC,MAAM,sBAAsB,GAAG,yBAAyB,sBAAsB,IAAI,sBAAsB,EAAE,CAAA;AAEjH,MAAM,UAAU,iBAAiB,CAAC,YAA6B;IAC7D,OAAO,YAAY,CAAC,GAAG,CAAC,sBAAsB,CAAC,KAAK,sBAAsB,CAAA;AAC5E,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,cAAc,CAAC,IAAY,EAAE,KAAc,EAAE,GAAmB;IAC9E,MAAM,MAAM,GAAG,IAAI,eAAe,EAAE,CAAA;IAEpC,IAAI,KAAK,EAAE,CAAC;QACV,MAAM,CAAC,GAAG,CAAC,sBAAsB,EAAE,sBAAsB,CAAC,CAAA;IAC5D,CAAC;IAED,IAAI,GAAG,KAAK,SAAS,IAAI,GAAG,KAAK,IAAI,IAAI,GAAG,KAAK,EAAE,EAAE,CAAC;QACpD,MAAM,CAAC,GAAG,CAAC,oBAAoB,EAAE,GAAG,CAAC,CAAA;IACvC,CAAC;IAED,MAAM,KAAK,GAAG,MAAM,CAAC,QAAQ,EAAE,CAAA;IAE/B,OAAO,KAAK,KAAK,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,IAAI,IAAI,KAAK,EAAE,CAAA;AACjD,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@kelpie/ui",
3
- "version": "0.12.0",
3
+ "version": "0.14.0",
4
4
  "description": "React UI for Kelpie: components, pages, API client, and the extension registry an assembly composes modules through.",
5
5
  "keywords": [
6
6
  "kelpie",
@@ -48,11 +48,12 @@
48
48
  "@dnd-kit/core": "^6.3.1",
49
49
  "@dnd-kit/sortable": "^10.0.0",
50
50
  "@dnd-kit/utilities": "^3.2.2",
51
- "@kelpie/schemas": "^0.12.0",
51
+ "@kelpie/schemas": "^0.14.0",
52
52
  "@tanstack/react-query": "^5.101.4",
53
53
  "react-markdown": "^10.1.0",
54
54
  "react-router": "^8.3.0",
55
- "remark-gfm": "^4.0.1"
55
+ "remark-gfm": "^4.0.1",
56
+ "simple-icons": "^16.30.0"
56
57
  },
57
58
  "peerDependencies": {
58
59
  "react": "^19.0.0",
@@ -0,0 +1,54 @@
1
+ import { attendanceBody, attendanceSchema, createAttendanceBody } from '@kelpie/schemas'
2
+ import type { Attendance, AttendanceInput, AttendanceStatus, CreateAttendanceInput } from '@kelpie/schemas'
3
+
4
+ import type { QueryParameters } from '../client.ts'
5
+ import { createResourceHooks } from '../resource.ts'
6
+ import type { ListOptions, MutationResult, RecordListResult, UpdateArguments } from '../resource.ts'
7
+
8
+ /**
9
+ * `/v1/attendances`, the Person↔Event link.
10
+ */
11
+
12
+ const attendances = createResourceHooks<Attendance, CreateAttendanceInput, AttendanceInput>({
13
+ name: 'attendances',
14
+ path: '/attendances',
15
+ decode: attendanceSchema.parse,
16
+ createBody: createAttendanceBody,
17
+ updateBody: attendanceBody,
18
+ alsoInvalidates: ['activities', 'notes', 'events', 'people', 'dashboard'],
19
+ })
20
+
21
+ export interface AttendanceFilters {
22
+ readonly eventIds?: readonly string[] | undefined
23
+ readonly personIds?: readonly string[] | undefined
24
+ readonly statuses?: readonly AttendanceStatus[] | undefined
25
+ readonly limit?: number | undefined
26
+ }
27
+
28
+ function attendanceQuery(filters: AttendanceFilters): QueryParameters {
29
+ return {
30
+ event_id: filters.eventIds,
31
+ person_id: filters.personIds,
32
+ status: filters.statuses,
33
+ limit: filters.limit,
34
+ }
35
+ }
36
+
37
+ export function useAttendances(
38
+ filters: AttendanceFilters = {},
39
+ options: ListOptions = {},
40
+ ): RecordListResult<Attendance> {
41
+ return attendances.useList(attendanceQuery(filters), options)
42
+ }
43
+
44
+ export function useCreateAttendance(): MutationResult<CreateAttendanceInput, Attendance> {
45
+ return attendances.useCreate()
46
+ }
47
+
48
+ export function useUpdateAttendance(): MutationResult<UpdateArguments<AttendanceInput>, Attendance> {
49
+ return attendances.useUpdate()
50
+ }
51
+
52
+ export function useDeleteAttendance(): MutationResult<string, void> {
53
+ return attendances.useRemove()
54
+ }