@kelpie/ui 0.12.0 → 0.13.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.
- package/dist/api/resources/attendances.d.ts +13 -0
- package/dist/api/resources/attendances.d.ts.map +1 -0
- package/dist/api/resources/attendances.js +34 -0
- package/dist/api/resources/attendances.js.map +1 -0
- package/dist/api/resources/eventAssociations.d.ts +12 -0
- package/dist/api/resources/eventAssociations.d.ts.map +1 -0
- package/dist/api/resources/eventAssociations.js +25 -0
- package/dist/api/resources/eventAssociations.js.map +1 -0
- package/dist/api/resources/events.d.ts +17 -0
- package/dist/api/resources/events.d.ts.map +1 -0
- package/dist/api/resources/events.js +40 -0
- package/dist/api/resources/events.js.map +1 -0
- package/dist/api/resources/handbookSeed.d.ts +11 -0
- package/dist/api/resources/handbookSeed.d.ts.map +1 -0
- package/dist/api/resources/handbookSeed.js +43 -0
- package/dist/api/resources/handbookSeed.js.map +1 -0
- package/dist/api/resources/moduleSettings.d.ts +10 -0
- package/dist/api/resources/moduleSettings.d.ts.map +1 -1
- package/dist/api/resources/moduleSettings.js +21 -0
- package/dist/api/resources/moduleSettings.js.map +1 -1
- package/dist/api/resources/planItems.d.ts +4 -4
- package/dist/api/resources/planItems.d.ts.map +1 -1
- package/dist/api/resources/planItems.js +1 -1
- package/dist/api/resources/planItems.js.map +1 -1
- package/dist/api/resources/publicConfig.js +3 -3
- package/dist/api/resources/sampleData.d.ts.map +1 -1
- package/dist/api/resources/sampleData.js +2 -0
- package/dist/api/resources/sampleData.js.map +1 -1
- package/dist/api/resources/session.d.ts +22 -1
- package/dist/api/resources/session.d.ts.map +1 -1
- package/dist/api/resources/session.js +43 -1
- package/dist/api/resources/session.js.map +1 -1
- package/dist/api/resources/workspace.d.ts.map +1 -1
- package/dist/api/resources/workspace.js +2 -3
- package/dist/api/resources/workspace.js.map +1 -1
- package/dist/app/KelpieApp.d.ts.map +1 -1
- package/dist/app/KelpieApp.js +5 -1
- package/dist/app/KelpieApp.js.map +1 -1
- package/dist/components/ActivitiesPanel.d.ts.map +1 -1
- package/dist/components/ActivitiesPanel.js +2 -0
- package/dist/components/ActivitiesPanel.js.map +1 -1
- package/dist/components/AddressesField.d.ts +23 -0
- package/dist/components/AddressesField.d.ts.map +1 -0
- package/dist/components/AddressesField.js +215 -0
- package/dist/components/AddressesField.js.map +1 -0
- package/dist/components/CountrySearch.d.ts +16 -0
- package/dist/components/CountrySearch.d.ts.map +1 -0
- package/dist/components/CountrySearch.js +30 -0
- package/dist/components/CountrySearch.js.map +1 -0
- package/dist/components/EnvironmentBanner.d.ts +0 -12
- package/dist/components/EnvironmentBanner.d.ts.map +1 -1
- package/dist/components/EnvironmentBanner.js +21 -6
- package/dist/components/EnvironmentBanner.js.map +1 -1
- package/dist/components/InlineEdit.d.ts +7 -1
- package/dist/components/InlineEdit.d.ts.map +1 -1
- package/dist/components/InlineEdit.js +8 -1
- package/dist/components/InlineEdit.js.map +1 -1
- package/dist/components/LinkedEventsPanel.d.ts +11 -0
- package/dist/components/LinkedEventsPanel.d.ts.map +1 -0
- package/dist/components/LinkedEventsPanel.js +18 -0
- package/dist/components/LinkedEventsPanel.js.map +1 -0
- package/dist/components/NotesPanel.d.ts +4 -6
- package/dist/components/NotesPanel.d.ts.map +1 -1
- package/dist/components/NotesPanel.js +39 -3
- package/dist/components/NotesPanel.js.map +1 -1
- package/dist/components/PlanAttention.d.ts.map +1 -1
- package/dist/components/PlanAttention.js +3 -2
- package/dist/components/PlanAttention.js.map +1 -1
- package/dist/components/PlanPanel.d.ts +3 -3
- package/dist/components/PlanPanel.d.ts.map +1 -1
- package/dist/components/Shell.d.ts.map +1 -1
- package/dist/components/Shell.js +8 -2
- package/dist/components/Shell.js.map +1 -1
- package/dist/components/SocialNetworkIcon.d.ts +17 -0
- package/dist/components/SocialNetworkIcon.d.ts.map +1 -0
- package/dist/components/SocialNetworkIcon.js +39 -0
- package/dist/components/SocialNetworkIcon.js.map +1 -0
- package/dist/components/SocialProfilesField.d.ts +8 -0
- package/dist/components/SocialProfilesField.d.ts.map +1 -1
- package/dist/components/SocialProfilesField.js +19 -5
- package/dist/components/SocialProfilesField.js.map +1 -1
- package/dist/components/TimezoneSearch.d.ts +21 -0
- package/dist/components/TimezoneSearch.d.ts.map +1 -0
- package/dist/components/TimezoneSearch.js +27 -0
- package/dist/components/TimezoneSearch.js.map +1 -0
- package/dist/components/WorkspaceSwitcher.d.ts +8 -0
- package/dist/components/WorkspaceSwitcher.d.ts.map +1 -0
- package/dist/components/WorkspaceSwitcher.js +67 -0
- package/dist/components/WorkspaceSwitcher.js.map +1 -0
- package/dist/components/environmentTone.d.ts +10 -0
- package/dist/components/environmentTone.d.ts.map +1 -0
- package/dist/components/environmentTone.js +35 -0
- package/dist/components/environmentTone.js.map +1 -0
- package/dist/index.d.ts +21 -4
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +12 -2
- package/dist/index.js.map +1 -1
- package/dist/lib/timezones.d.ts +17 -0
- package/dist/lib/timezones.d.ts.map +1 -0
- package/dist/lib/timezones.js +39 -0
- package/dist/lib/timezones.js.map +1 -0
- package/dist/pages/CompaniesPage.d.ts.map +1 -1
- package/dist/pages/CompaniesPage.js +12 -11
- package/dist/pages/CompaniesPage.js.map +1 -1
- package/dist/pages/CompanyDetail.d.ts.map +1 -1
- package/dist/pages/CompanyDetail.js +23 -12
- package/dist/pages/CompanyDetail.js.map +1 -1
- package/dist/pages/DealDetail.d.ts.map +1 -1
- package/dist/pages/DealDetail.js +5 -1
- package/dist/pages/DealDetail.js.map +1 -1
- package/dist/pages/DecisionsPage.d.ts.map +1 -1
- package/dist/pages/DecisionsPage.js +7 -0
- package/dist/pages/DecisionsPage.js.map +1 -1
- package/dist/pages/EnquiryDetail.d.ts.map +1 -1
- package/dist/pages/EnquiryDetail.js +5 -1
- package/dist/pages/EnquiryDetail.js.map +1 -1
- package/dist/pages/EventDetail.d.ts +2 -0
- package/dist/pages/EventDetail.d.ts.map +1 -0
- package/dist/pages/EventDetail.js +332 -0
- package/dist/pages/EventDetail.js.map +1 -0
- package/dist/pages/EventsPage.d.ts +2 -0
- package/dist/pages/EventsPage.d.ts.map +1 -0
- package/dist/pages/EventsPage.js +176 -0
- package/dist/pages/EventsPage.js.map +1 -0
- package/dist/pages/ListDetail.d.ts.map +1 -1
- package/dist/pages/ListDetail.js +17 -0
- package/dist/pages/ListDetail.js.map +1 -1
- package/dist/pages/OpportunityDetail.d.ts.map +1 -1
- package/dist/pages/OpportunityDetail.js +5 -1
- package/dist/pages/OpportunityDetail.js.map +1 -1
- package/dist/pages/PartnershipDetail.d.ts.map +1 -1
- package/dist/pages/PartnershipDetail.js +5 -1
- package/dist/pages/PartnershipDetail.js.map +1 -1
- package/dist/pages/PeoplePage.d.ts.map +1 -1
- package/dist/pages/PeoplePage.js +13 -5
- package/dist/pages/PeoplePage.js.map +1 -1
- package/dist/pages/PersonDetail.d.ts.map +1 -1
- package/dist/pages/PersonDetail.js +94 -28
- package/dist/pages/PersonDetail.js.map +1 -1
- package/dist/pages/PlanningPage.d.ts.map +1 -1
- package/dist/pages/PlanningPage.js +6 -3
- package/dist/pages/PlanningPage.js.map +1 -1
- package/dist/pages/RaiseDetail.d.ts.map +1 -1
- package/dist/pages/RaiseDetail.js +5 -1
- package/dist/pages/RaiseDetail.js.map +1 -1
- package/dist/pages/RoleDetail.d.ts.map +1 -1
- package/dist/pages/RoleDetail.js +4 -1
- package/dist/pages/RoleDetail.js.map +1 -1
- package/dist/pages/SearchPage.d.ts.map +1 -1
- package/dist/pages/SearchPage.js +2 -1
- package/dist/pages/SearchPage.js.map +1 -1
- package/dist/pages/account/PreferencesPage.d.ts.map +1 -1
- package/dist/pages/account/PreferencesPage.js +2 -28
- package/dist/pages/account/PreferencesPage.js.map +1 -1
- package/dist/pages/admin/DataPage.js +10 -9
- package/dist/pages/admin/DataPage.js.map +1 -1
- package/dist/pages/admin/FieldsPage.js +1 -1
- package/dist/pages/admin/FieldsPage.js.map +1 -1
- package/dist/pages/admin/ModulesPage.d.ts.map +1 -1
- package/dist/pages/admin/ModulesPage.js +1 -0
- package/dist/pages/admin/ModulesPage.js.map +1 -1
- package/dist/pages/admin/WorkspaceSettingsPage.d.ts +12 -0
- package/dist/pages/admin/WorkspaceSettingsPage.d.ts.map +1 -1
- package/dist/pages/admin/WorkspaceSettingsPage.js +2 -21
- package/dist/pages/admin/WorkspaceSettingsPage.js.map +1 -1
- package/dist/pages/auth/AuthLayout.d.ts +5 -4
- package/dist/pages/auth/AuthLayout.d.ts.map +1 -1
- package/dist/pages/auth/AuthLayout.js +7 -5
- package/dist/pages/auth/AuthLayout.js.map +1 -1
- package/dist/pages/auth/RegionSwitcher.d.ts +10 -0
- package/dist/pages/auth/RegionSwitcher.d.ts.map +1 -0
- package/dist/pages/auth/RegionSwitcher.js +28 -0
- package/dist/pages/auth/RegionSwitcher.js.map +1 -0
- package/dist/pages/auth/SignInPage.d.ts.map +1 -1
- package/dist/pages/auth/SignInPage.js +3 -1
- package/dist/pages/auth/SignInPage.js.map +1 -1
- package/dist/pages/auth/SignUpPage.d.ts.map +1 -1
- package/dist/pages/auth/SignUpPage.js +7 -0
- package/dist/pages/auth/SignUpPage.js.map +1 -1
- package/dist/pages/auth/regionHref.d.ts +6 -0
- package/dist/pages/auth/regionHref.d.ts.map +1 -0
- package/dist/pages/auth/regionHref.js +8 -0
- package/dist/pages/auth/regionHref.js.map +1 -0
- package/dist/pages/dashboard/DashboardPage.d.ts +8 -0
- package/dist/pages/dashboard/DashboardPage.d.ts.map +1 -1
- package/dist/pages/dashboard/DashboardPage.js +5 -13
- package/dist/pages/dashboard/DashboardPage.js.map +1 -1
- package/dist/pages/dashboard/attention.d.ts +1 -8
- package/dist/pages/dashboard/attention.d.ts.map +1 -1
- package/dist/pages/dashboard/attention.js +21 -54
- package/dist/pages/dashboard/attention.js.map +1 -1
- package/dist/pages/dashboard/sections.d.ts.map +1 -1
- package/dist/pages/dashboard/sections.js +3 -2
- package/dist/pages/dashboard/sections.js.map +1 -1
- package/dist/pages/forms/FormActions.d.ts.map +1 -1
- package/dist/pages/forms/FormActions.js +7 -3
- package/dist/pages/forms/FormActions.js.map +1 -1
- package/dist/pages/onboarding/HandbookStepPage.d.ts +4 -8
- package/dist/pages/onboarding/HandbookStepPage.d.ts.map +1 -1
- package/dist/pages/onboarding/HandbookStepPage.js +13 -13
- package/dist/pages/onboarding/HandbookStepPage.js.map +1 -1
- package/dist/pages/onboarding/InvitesStepPage.d.ts.map +1 -1
- package/dist/pages/onboarding/InvitesStepPage.js +13 -7
- package/dist/pages/onboarding/InvitesStepPage.js.map +1 -1
- package/dist/pages/onboarding/ModulesStepPage.d.ts +11 -0
- package/dist/pages/onboarding/ModulesStepPage.d.ts.map +1 -0
- package/dist/pages/onboarding/ModulesStepPage.js +80 -0
- package/dist/pages/onboarding/ModulesStepPage.js.map +1 -0
- package/dist/pages/onboarding/OnboardingNav.d.ts +17 -0
- package/dist/pages/onboarding/OnboardingNav.d.ts.map +1 -0
- package/dist/pages/onboarding/OnboardingNav.js +37 -0
- package/dist/pages/onboarding/OnboardingNav.js.map +1 -0
- package/dist/pages/onboarding/OrganisationStepPage.d.ts +13 -0
- package/dist/pages/onboarding/OrganisationStepPage.d.ts.map +1 -0
- package/dist/pages/onboarding/OrganisationStepPage.js +59 -0
- package/dist/pages/onboarding/OrganisationStepPage.js.map +1 -0
- package/dist/pages/onboarding/WorkspaceStepPage.d.ts.map +1 -1
- package/dist/pages/onboarding/WorkspaceStepPage.js +25 -20
- package/dist/pages/onboarding/WorkspaceStepPage.js.map +1 -1
- package/dist/pages/onboarding/handbookTemplates.d.ts +19 -0
- package/dist/pages/onboarding/handbookTemplates.d.ts.map +1 -0
- package/dist/pages/onboarding/handbookTemplates.js +57 -0
- package/dist/pages/onboarding/handbookTemplates.js.map +1 -0
- package/dist/pages/onboarding/onboardingModules.d.ts +23 -0
- package/dist/pages/onboarding/onboardingModules.d.ts.map +1 -0
- package/dist/pages/onboarding/onboardingModules.js +153 -0
- package/dist/pages/onboarding/onboardingModules.js.map +1 -0
- package/dist/pages/onboarding/onboardingRerun.d.ts +21 -0
- package/dist/pages/onboarding/onboardingRerun.d.ts.map +1 -0
- package/dist/pages/onboarding/onboardingRerun.js +33 -0
- package/dist/pages/onboarding/onboardingRerun.js.map +1 -0
- package/package.json +4 -3
- package/src/api/resources/attendances.ts +54 -0
- package/src/api/resources/eventAssociations.ts +43 -0
- package/src/api/resources/events.ts +70 -0
- package/src/api/resources/handbookSeed.ts +63 -0
- package/src/api/resources/moduleSettings.ts +25 -0
- package/src/api/resources/planItems.ts +5 -5
- package/src/api/resources/publicConfig.ts +3 -3
- package/src/api/resources/sampleData.ts +2 -0
- package/src/api/resources/session.ts +59 -0
- package/src/api/resources/workspace.ts +2 -3
- package/src/app/KelpieApp.tsx +11 -3
- package/src/components/ActivitiesPanel.tsx +2 -0
- package/src/components/AddressesField.tsx +502 -0
- package/src/components/CountrySearch.tsx +71 -0
- package/src/components/EnvironmentBanner.tsx +23 -6
- package/src/components/InlineEdit.tsx +35 -1
- package/src/components/LinkedEventsPanel.tsx +50 -0
- package/src/components/NotesPanel.tsx +132 -15
- package/src/components/PlanAttention.tsx +5 -4
- package/src/components/PlanPanel.tsx +3 -3
- package/src/components/Shell.tsx +16 -1
- package/src/components/SocialNetworkIcon.tsx +88 -0
- package/src/components/SocialProfilesField.tsx +57 -10
- package/src/components/TimezoneSearch.tsx +67 -0
- package/src/components/WorkspaceSwitcher.tsx +136 -0
- package/src/components/environmentTone.ts +40 -0
- package/src/index.ts +42 -3
- package/src/lib/timezones.ts +43 -0
- package/src/pages/CompaniesPage.tsx +14 -13
- package/src/pages/CompanyDetail.tsx +59 -27
- package/src/pages/DealDetail.tsx +5 -0
- package/src/pages/DecisionsPage.tsx +7 -0
- package/src/pages/EnquiryDetail.tsx +7 -0
- package/src/pages/EventDetail.tsx +794 -0
- package/src/pages/EventsPage.tsx +382 -0
- package/src/pages/ListDetail.tsx +24 -0
- package/src/pages/OpportunityDetail.tsx +7 -0
- package/src/pages/PartnershipDetail.tsx +7 -0
- package/src/pages/PeoplePage.tsx +18 -5
- package/src/pages/PersonDetail.tsx +300 -100
- package/src/pages/PlanningPage.tsx +17 -14
- package/src/pages/RaiseDetail.tsx +5 -0
- package/src/pages/RoleDetail.tsx +8 -0
- package/src/pages/SearchPage.tsx +2 -1
- package/src/pages/account/PreferencesPage.tsx +2 -37
- package/src/pages/admin/DataPage.tsx +63 -21
- package/src/pages/admin/FieldsPage.tsx +1 -1
- package/src/pages/admin/ModulesPage.tsx +1 -0
- package/src/pages/admin/WorkspaceSettingsPage.tsx +10 -33
- package/src/pages/auth/AuthLayout.tsx +8 -4
- package/src/pages/auth/RegionSwitcher.tsx +56 -0
- package/src/pages/auth/SignInPage.tsx +10 -6
- package/src/pages/auth/SignUpPage.tsx +25 -0
- package/src/pages/auth/regionHref.ts +10 -0
- package/src/pages/dashboard/DashboardPage.tsx +16 -48
- package/src/pages/dashboard/attention.ts +24 -78
- package/src/pages/dashboard/sections.tsx +8 -2
- package/src/pages/forms/FormActions.tsx +14 -8
- package/src/pages/onboarding/HandbookStepPage.tsx +21 -24
- package/src/pages/onboarding/InvitesStepPage.tsx +27 -19
- package/src/pages/onboarding/ModulesStepPage.tsx +145 -0
- package/src/pages/onboarding/OnboardingNav.tsx +97 -0
- package/src/pages/onboarding/OrganisationStepPage.tsx +130 -0
- package/src/pages/onboarding/WorkspaceStepPage.tsx +53 -38
- package/src/pages/onboarding/handbookTemplates.ts +77 -0
- package/src/pages/onboarding/onboardingModules.ts +202 -0
- package/src/pages/onboarding/onboardingRerun.ts +41 -0
- package/src/styles.css +30 -0
|
@@ -7,6 +7,7 @@ import { useDeleteWorkspace, useUpdateWorkspace, useWorkspace, } from '../../api
|
|
|
7
7
|
import { EntitySearch } from '../../components/EntitySearch.js';
|
|
8
8
|
import { PageHeader } from '../../components/PageHeader.js';
|
|
9
9
|
import { ErrorPanel, LoadingPanel } from '../../components/QueryState.js';
|
|
10
|
+
import { TimezoneSearch } from '../../components/TimezoneSearch.js';
|
|
10
11
|
/**
|
|
11
12
|
* Workspace settings, and the one screen that can end a workspace.
|
|
12
13
|
*
|
|
@@ -19,21 +20,6 @@ import { ErrorPanel, LoadingPanel } from '../../components/QueryState.js';
|
|
|
19
20
|
* workspace-wide, and the slug appears in URLs, so committing on each character
|
|
20
21
|
* would be a stream of half-typed addresses.
|
|
21
22
|
*/
|
|
22
|
-
/**
|
|
23
|
-
* The timezones the mockup offered, plus whatever this workspace already holds.
|
|
24
|
-
*
|
|
25
|
-
* A full IANA list belongs in a combo box, which is its own piece of work. An
|
|
26
|
-
* unlisted value must still survive a save, so it joins the list rather than
|
|
27
|
-
* being silently rewritten to the first option.
|
|
28
|
-
*/
|
|
29
|
-
const COMMON_TIMEZONES = [
|
|
30
|
-
'Australia/Sydney',
|
|
31
|
-
'Australia/Melbourne',
|
|
32
|
-
'America/Los_Angeles',
|
|
33
|
-
'America/New_York',
|
|
34
|
-
'Europe/London',
|
|
35
|
-
'UTC',
|
|
36
|
-
];
|
|
37
23
|
export function WorkspaceSettingsPage() {
|
|
38
24
|
const { workspace, isLoading, error } = useWorkspace();
|
|
39
25
|
if (error !== null) {
|
|
@@ -54,9 +40,6 @@ function WorkspaceSettingsForm({ workspace, }) {
|
|
|
54
40
|
const [timezone, setTimezone] = useState(workspace.timezone);
|
|
55
41
|
const [saved, setSaved] = useState(false);
|
|
56
42
|
const canEdit = session?.role === 'owner' || session?.role === 'admin';
|
|
57
|
-
const timezones = COMMON_TIMEZONES.includes(timezone)
|
|
58
|
-
? [...COMMON_TIMEZONES]
|
|
59
|
-
: [timezone, ...COMMON_TIMEZONES];
|
|
60
43
|
function save(event) {
|
|
61
44
|
event.preventDefault();
|
|
62
45
|
setSaved(false);
|
|
@@ -75,9 +58,7 @@ function WorkspaceSettingsForm({ workspace, }) {
|
|
|
75
58
|
setName(event.target.value);
|
|
76
59
|
}, required: true, disabled: !canEdit, className: "w-full max-w-md rounded-md border border-border bg-surface-raised px-3 py-2 text-[13px] outline-none focus:border-accent focus:ring-2 focus:ring-accent/20 disabled:opacity-60" }) }), _jsx(Field, { label: "Slug", hint: "Lowercase letters, digits, and hyphens. It appears in URLs.", children: _jsx("input", { value: slug, onChange: (event) => {
|
|
77
60
|
setSlug(event.target.value);
|
|
78
|
-
}, required: true, disabled: !canEdit, className: "w-full max-w-md rounded-md border border-border bg-surface-raised px-3 py-2 font-mono text-[13px] outline-none focus:border-accent focus:ring-2 focus:ring-accent/20 disabled:opacity-60" }) }), _jsx(Field, { label: "Timezone", children: _jsx("
|
|
79
|
-
setTimezone(event.target.value);
|
|
80
|
-
}, disabled: !canEdit, className: "w-full max-w-md rounded-md border border-border bg-surface-raised px-3 py-2 text-[13px] outline-none focus:border-accent disabled:opacity-60", children: timezones.map((zone) => (_jsx("option", { value: zone, children: zone }, zone))) }) }), update.error !== null && (_jsx("div", { className: "max-w-xl", children: _jsx(ErrorPanel, { error: update.error }) })), canEdit ? (_jsx("button", { type: "submit", disabled: update.isPending, className: "rounded-md bg-accent px-3.5 py-2 text-[12px] font-semibold text-accent-fg transition hover:bg-accent-hover disabled:opacity-50", children: update.isPending ? 'Saving…' : saved ? 'Saved' : 'Save changes' })) : (_jsx("p", { className: "text-[12px] text-ink-muted", children: "Workspace settings are changed by an admin or the owner." }))] }), _jsx(OwnCompanySection, { canEdit: canEdit }), session?.role === 'owner' && _jsx(DangerZone, { slug: workspace.slug })] }));
|
|
61
|
+
}, required: true, disabled: !canEdit, className: "w-full max-w-md rounded-md border border-border bg-surface-raised px-3 py-2 font-mono text-[13px] outline-none focus:border-accent focus:ring-2 focus:ring-accent/20 disabled:opacity-60" }) }), _jsx(Field, { label: "Timezone", children: _jsx("div", { className: "max-w-md", children: _jsx(TimezoneSearch, { value: timezone, onChange: setTimezone, required: true, disabled: !canEdit, size: "md" }) }) }), update.error !== null && (_jsx("div", { className: "max-w-xl", children: _jsx(ErrorPanel, { error: update.error }) })), canEdit ? (_jsx("button", { type: "submit", disabled: update.isPending, className: "rounded-md bg-accent px-3.5 py-2 text-[12px] font-semibold text-accent-fg transition hover:bg-accent-hover disabled:opacity-50", children: update.isPending ? 'Saving…' : saved ? 'Saved' : 'Save changes' })) : (_jsx("p", { className: "text-[12px] text-ink-muted", children: "Workspace settings are changed by an admin or the owner." }))] }), _jsx(OwnCompanySection, { canEdit: canEdit }), session?.role === 'owner' && _jsx(DangerZone, { slug: workspace.slug })] }));
|
|
81
62
|
}
|
|
82
63
|
/**
|
|
83
64
|
* Mark one or more Companies as "us" — the workspace's own organisation.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"WorkspaceSettingsPage.js","sourceRoot":"","sources":["../../../src/pages/admin/WorkspaceSettingsPage.tsx"],"names":[],"mappings":";AACA,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAA;AAEzC,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAA;AAE1C,OAAO,EACL,YAAY,EACZ,gBAAgB,EAChB,gBAAgB,GACjB,MAAM,kCAAkC,CAAA;AACzC,OAAO,EAAE,UAAU,EAAE,MAAM,gCAAgC,CAAA;AAC3D,OAAO,EACL,kBAAkB,EAClB,kBAAkB,EAClB,YAAY,GACb,MAAM,kCAAkC,CAAA;AACzC,OAAO,EAAE,YAAY,EAAE,MAAM,kCAAmC,CAAA;AAEhE,OAAO,EAAE,UAAU,EAAE,MAAM,gCAAiC,CAAA;AAC5D,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,gCAAiC,CAAA;
|
|
1
|
+
{"version":3,"file":"WorkspaceSettingsPage.js","sourceRoot":"","sources":["../../../src/pages/admin/WorkspaceSettingsPage.tsx"],"names":[],"mappings":"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"}
|
|
@@ -1,14 +1,15 @@
|
|
|
1
1
|
import type { ReactNode } from 'react';
|
|
2
2
|
/**
|
|
3
3
|
* The centred card every signed-out page sits in: sign in, signup, the two
|
|
4
|
-
* password-reset pages, and the
|
|
4
|
+
* password-reset pages, and the five onboarding steps.
|
|
5
5
|
*
|
|
6
6
|
* `step` is what makes it an onboarding page. Onboarding is a sequence somebody
|
|
7
7
|
* is part-way through, and a card that does not say where they are in it turns
|
|
8
|
-
*
|
|
8
|
+
* five screens into five unrelated forms. The region switcher stays off
|
|
9
|
+
* those steps: a session already exists on this origin.
|
|
9
10
|
*/
|
|
10
|
-
/** Onboarding, per `onboarding.md`: workspace, invites, handbook. */
|
|
11
|
-
declare const ONBOARDING_STEPS: readonly [1, 2, 3];
|
|
11
|
+
/** Onboarding, per `onboarding.md`: workspace, organisation, modules, invites, handbook. */
|
|
12
|
+
declare const ONBOARDING_STEPS: readonly [1, 2, 3, 4, 5];
|
|
12
13
|
export type OnboardingStep = (typeof ONBOARDING_STEPS)[number];
|
|
13
14
|
export interface AuthLayoutProps {
|
|
14
15
|
readonly title: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AuthLayout.d.ts","sourceRoot":"","sources":["../../../src/pages/auth/AuthLayout.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAA;
|
|
1
|
+
{"version":3,"file":"AuthLayout.d.ts","sourceRoot":"","sources":["../../../src/pages/auth/AuthLayout.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAA;AAKtC;;;;;;;;GAQG;AAEH,4FAA4F;AAC5F,QAAA,MAAM,gBAAgB,YAAI,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAU,CAAA;AAEjD,MAAM,MAAM,cAAc,GAAG,CAAC,OAAO,gBAAgB,CAAC,CAAC,MAAM,CAAC,CAAA;AAE9D,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;IACtB,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAA;IAC7B,iFAAiF;IACjF,QAAQ,CAAC,IAAI,CAAC,EAAE,cAAc,CAAA;IAC9B,QAAQ,CAAC,QAAQ,EAAE,SAAS,CAAA;IAC5B,+DAA+D;IAC/D,QAAQ,CAAC,MAAM,CAAC,EAAE,SAAS,CAAA;CAC5B;AAED,wBAAgB,UAAU,CAAC,EACzB,KAAK,EACL,WAAW,EACX,IAAI,EACJ,QAAQ,EACR,MAAM,GACP,EAAE,eAAe,GAAG,KAAK,CAAC,GAAG,CAAC,OAAO,CAsBrC"}
|
|
@@ -1,17 +1,19 @@
|
|
|
1
1
|
import { Fragment as _Fragment, jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
2
|
import { Link } from 'react-router';
|
|
3
|
+
import { RegionSwitcher } from './RegionSwitcher.js';
|
|
3
4
|
/**
|
|
4
5
|
* The centred card every signed-out page sits in: sign in, signup, the two
|
|
5
|
-
* password-reset pages, and the
|
|
6
|
+
* password-reset pages, and the five onboarding steps.
|
|
6
7
|
*
|
|
7
8
|
* `step` is what makes it an onboarding page. Onboarding is a sequence somebody
|
|
8
9
|
* is part-way through, and a card that does not say where they are in it turns
|
|
9
|
-
*
|
|
10
|
+
* five screens into five unrelated forms. The region switcher stays off
|
|
11
|
+
* those steps: a session already exists on this origin.
|
|
10
12
|
*/
|
|
11
|
-
/** Onboarding, per `onboarding.md`: workspace, invites, handbook. */
|
|
12
|
-
const ONBOARDING_STEPS = [1, 2, 3];
|
|
13
|
+
/** Onboarding, per `onboarding.md`: workspace, organisation, modules, invites, handbook. */
|
|
14
|
+
const ONBOARDING_STEPS = [1, 2, 3, 4, 5];
|
|
13
15
|
export function AuthLayout({ title, description, step, children, footer, }) {
|
|
14
|
-
return (_jsxs("div", { className: "flex min-h-screen flex-col items-center justify-center bg-surface px-4 py-12", children: [_jsx(Link, { to: "/login", className: "mb-8 text-[20px] font-semibold tracking-tight text-ink", children: "Kelpie" }), _jsxs("div", { className: `w-full animate-fade-in rounded-md border border-border p-6 ${step === undefined ? 'max-w-sm' : 'max-w-md'}`, children: [step !== undefined && _jsx(StepProgress, { step: step }), _jsx("h1", { className: "text-[18px] font-semibold tracking-tight text-ink", children: title }), description !== undefined && (_jsx("p", { className: "mt-1 text-[13px] text-ink-muted", children: description })), children, footer !== undefined && _jsx("div", { className: "mt-4 text-center text-[12px]", children: footer })] })] }));
|
|
16
|
+
return (_jsxs("div", { className: "flex min-h-screen flex-col items-center justify-center bg-surface px-4 py-12", children: [_jsx(Link, { to: "/login", className: "mb-8 text-[20px] font-semibold tracking-tight text-ink", children: "Kelpie" }), _jsxs("div", { className: `w-full animate-fade-in rounded-md border border-border p-6 ${step === undefined ? 'max-w-sm' : 'max-w-md'}`, children: [step !== undefined && _jsx(StepProgress, { step: step }), _jsx("h1", { className: "text-[18px] font-semibold tracking-tight text-ink", children: title }), description !== undefined && (_jsx("p", { className: "mt-1 text-[13px] text-ink-muted", children: description })), children, footer !== undefined && _jsx("div", { className: "mt-4 text-center text-[12px]", children: footer })] }), step === undefined && _jsx(RegionSwitcher, {})] }));
|
|
15
17
|
}
|
|
16
18
|
function StepProgress({ step }) {
|
|
17
19
|
return (_jsxs(_Fragment, { children: [_jsx("div", { className: "mb-4 flex items-center gap-2", children: ONBOARDING_STEPS.map((each) => (_jsx("div", { "aria-hidden": true, className: `h-1.5 flex-1 rounded-full ${each <= step ? 'bg-accent' : 'bg-border'}` }, each))) }), _jsxs("p", { className: "mb-1 text-[11px] font-medium tracking-wide text-ink-faint uppercase", children: ["Step ", step, " of ", ONBOARDING_STEPS.length] })] }));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AuthLayout.js","sourceRoot":"","sources":["../../../src/pages/auth/AuthLayout.tsx"],"names":[],"mappings":";AACA,OAAO,EAAE,IAAI,EAAE,MAAM,cAAc,CAAA;AAEnC
|
|
1
|
+
{"version":3,"file":"AuthLayout.js","sourceRoot":"","sources":["../../../src/pages/auth/AuthLayout.tsx"],"names":[],"mappings":";AACA,OAAO,EAAE,IAAI,EAAE,MAAM,cAAc,CAAA;AAEnC,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAsB,CAAA;AAErD;;;;;;;;GAQG;AAEH,4FAA4F;AAC5F,MAAM,gBAAgB,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAU,CAAA;AAcjD,MAAM,UAAU,UAAU,CAAC,EACzB,KAAK,EACL,WAAW,EACX,IAAI,EACJ,QAAQ,EACR,MAAM,GACU;IAChB,OAAO,CACL,eAAK,SAAS,EAAC,8EAA8E,aAC3F,KAAC,IAAI,IAAC,EAAE,EAAC,QAAQ,EAAC,SAAS,EAAC,wDAAwD,uBAE7E,EACP,eACE,SAAS,EAAE,8DACT,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,UACpC,EAAE,aAED,IAAI,KAAK,SAAS,IAAI,KAAC,YAAY,IAAC,IAAI,EAAE,IAAI,GAAI,EACnD,aAAI,SAAS,EAAC,mDAAmD,YAAE,KAAK,GAAM,EAC7E,WAAW,KAAK,SAAS,IAAI,CAC5B,YAAG,SAAS,EAAC,iCAAiC,YAAE,WAAW,GAAK,CACjE,EACA,QAAQ,EACR,MAAM,KAAK,SAAS,IAAI,cAAK,SAAS,EAAC,8BAA8B,YAAE,MAAM,GAAO,IACjF,EACL,IAAI,KAAK,SAAS,IAAI,KAAC,cAAc,KAAG,IACrC,CACP,CAAA;AACH,CAAC;AAED,SAAS,YAAY,CAAC,EAAE,IAAI,EAAqC;IAC/D,OAAO,CACL,8BACE,cAAK,SAAS,EAAC,8BAA8B,YAC1C,gBAAgB,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAC9B,mCAGE,SAAS,EAAE,6BAA6B,IAAI,IAAI,IAAI,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,WAAW,EAAE,IAF7E,IAAI,CAGT,CACH,CAAC,GACE,EACN,aAAG,SAAS,EAAC,qEAAqE,sBAC1E,IAAI,UAAM,gBAAgB,CAAC,MAAM,IACrC,IACH,CACJ,CAAA;AACH,CAAC"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* A region picker for signed-out pages.
|
|
3
|
+
*
|
|
4
|
+
* Hidden unless public config lists two or more origins. Selecting another
|
|
5
|
+
* region leaves this origin: the session cookie is host-scoped, so the
|
|
6
|
+
* browser has to load the other host's login page. Path, query, and hash
|
|
7
|
+
* stay, so `/login?next=` and invite tokens survive the hop.
|
|
8
|
+
*/
|
|
9
|
+
export declare function RegionSwitcher(): React.JSX.Element | null;
|
|
10
|
+
//# sourceMappingURL=RegionSwitcher.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"RegionSwitcher.d.ts","sourceRoot":"","sources":["../../../src/pages/auth/RegionSwitcher.tsx"],"names":[],"mappings":"AAKA;;;;;;;GAOG;AAEH,wBAAgB,cAAc,IAAI,KAAK,CAAC,GAAG,CAAC,OAAO,GAAG,IAAI,CAyCzD"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { usePublicConfig } from '../../api/resources/publicConfig.js';
|
|
3
|
+
import { regionHref } from './regionHref.js';
|
|
4
|
+
/**
|
|
5
|
+
* A region picker for signed-out pages.
|
|
6
|
+
*
|
|
7
|
+
* Hidden unless public config lists two or more origins. Selecting another
|
|
8
|
+
* region leaves this origin: the session cookie is host-scoped, so the
|
|
9
|
+
* browser has to load the other host's login page. Path, query, and hash
|
|
10
|
+
* stay, so `/login?next=` and invite tokens survive the hop.
|
|
11
|
+
*/
|
|
12
|
+
export function RegionSwitcher() {
|
|
13
|
+
const { config } = usePublicConfig();
|
|
14
|
+
const regions = config?.regions ?? [];
|
|
15
|
+
if (regions.length < 2) {
|
|
16
|
+
return null;
|
|
17
|
+
}
|
|
18
|
+
const current = regions.find((region) => region.origin === window.location.origin);
|
|
19
|
+
function change(event) {
|
|
20
|
+
const selected = regions.find((region) => region.id === event.target.value);
|
|
21
|
+
if (selected === undefined || selected.origin === window.location.origin) {
|
|
22
|
+
return;
|
|
23
|
+
}
|
|
24
|
+
window.location.assign(regionHref(selected.origin, window.location));
|
|
25
|
+
}
|
|
26
|
+
return (_jsxs("label", { className: "mt-6 block w-full max-w-sm", children: [_jsx("span", { className: "mb-1.5 block text-[12px] font-medium text-ink", children: "Region" }), _jsxs("select", { className: "w-full rounded-md border border-border bg-transparent px-2 py-1 text-[13px] outline-none focus:border-accent", value: current?.id ?? '', onChange: change, children: [current === undefined && (_jsx("option", { value: "", disabled: true, children: "Select a region" })), regions.map((region) => (_jsx("option", { value: region.id, children: region.label }, region.id)))] })] }));
|
|
27
|
+
}
|
|
28
|
+
//# sourceMappingURL=RegionSwitcher.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"RegionSwitcher.js","sourceRoot":"","sources":["../../../src/pages/auth/RegionSwitcher.tsx"],"names":[],"mappings":";AAEA,OAAO,EAAE,eAAe,EAAE,MAAM,qCAAqC,CAAA;AACrE,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAA;AAE5C;;;;;;;GAOG;AAEH,MAAM,UAAU,cAAc;IAC5B,MAAM,EAAE,MAAM,EAAE,GAAG,eAAe,EAAE,CAAA;IACpC,MAAM,OAAO,GAAG,MAAM,EAAE,OAAO,IAAI,EAAE,CAAA;IAErC,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACvB,OAAO,IAAI,CAAA;IACb,CAAC;IAED,MAAM,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,MAAM,KAAK,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAA;IAElF,SAAS,MAAM,CAAC,KAAqC;QACnD,MAAM,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,EAAE,KAAK,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAA;QAE3E,IAAI,QAAQ,KAAK,SAAS,IAAI,QAAQ,CAAC,MAAM,KAAK,MAAM,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC;YACzE,OAAM;QACR,CAAC;QAED,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,UAAU,CAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAA;IACtE,CAAC;IAED,OAAO,CACL,iBAAO,SAAS,EAAC,4BAA4B,aAC3C,eAAM,SAAS,EAAC,+CAA+C,uBAAc,EAC7E,kBACE,SAAS,EAAC,8GAA8G,EACxH,KAAK,EAAE,OAAO,EAAE,EAAE,IAAI,EAAE,EACxB,QAAQ,EAAE,MAAM,aAEf,OAAO,KAAK,SAAS,IAAI,CACxB,iBAAQ,KAAK,EAAC,EAAE,EAAC,QAAQ,sCAEhB,CACV,EACA,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CACvB,iBAAwB,KAAK,EAAE,MAAM,CAAC,EAAE,YACrC,MAAM,CAAC,KAAK,IADF,MAAM,CAAC,EAAE,CAEb,CACV,CAAC,IACK,IACH,CACT,CAAA;AACH,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SignInPage.d.ts","sourceRoot":"","sources":["../../../src/pages/auth/SignInPage.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"SignInPage.d.ts","sourceRoot":"","sources":["../../../src/pages/auth/SignInPage.tsx"],"names":[],"mappings":"AAYA;;;;;;GAMG;AAEH,wBAAgB,UAAU,IAAI,KAAK,CAAC,GAAG,CAAC,OAAO,CA6D9C"}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
2
|
import { useState } from 'react';
|
|
3
3
|
import { Link, useNavigate, useSearchParams } from 'react-router';
|
|
4
|
+
import { usePublicConfig } from '../../api/resources/publicConfig.js';
|
|
4
5
|
import { useLogIn } from '../../api/resources/session.js';
|
|
5
6
|
import { ErrorPanel } from '../../components/QueryState.js';
|
|
6
7
|
import { SubmitButton, TextField } from './AuthForm.js';
|
|
@@ -18,6 +19,7 @@ export function SignInPage() {
|
|
|
18
19
|
const navigate = useNavigate();
|
|
19
20
|
const [searchParameters] = useSearchParams();
|
|
20
21
|
const logIn = useLogIn();
|
|
22
|
+
const { config } = usePublicConfig();
|
|
21
23
|
const [email, setEmail] = useState('');
|
|
22
24
|
const [password, setPassword] = useState('');
|
|
23
25
|
const next = safeNext(searchParameters.get('next'));
|
|
@@ -28,6 +30,6 @@ export function SignInPage() {
|
|
|
28
30
|
.then(() => navigate(next, { replace: true }))
|
|
29
31
|
.catch(() => undefined);
|
|
30
32
|
}
|
|
31
|
-
return (_jsxs(AuthLayout, { title: "Sign in", footer: _jsxs("div", { className: "flex flex-col gap-1.5", children: [_jsx(Link, { to: "/forgot-password", className: "font-medium text-accent hover:underline", children: "Forgot password?" }), _jsxs("span", { className: "text-ink-muted", children: ["No account?", ' ', _jsx(Link, { to: "/signup", className: "font-medium text-accent hover:underline", children: "Sign up" })] })] }), children: [_jsxs("form", { onSubmit: submit, className: "mt-5 space-y-3", children: [_jsx(TextField, { label: "Email", type: "email", value: email, onChange: setEmail, autoComplete: "email", required: true }), _jsx(TextField, { label: "Password", type: "password", value: password, onChange: setPassword, autoComplete: "current-password", required: true }), logIn.error !== null && _jsx(ErrorPanel, { error: logIn.error }), _jsx(SubmitButton, { label: "Sign in", pendingLabel: "Signing in\u2026", isPending: logIn.isPending })] }), _jsx(AuthMethods, { intent: "login", next: next })] }));
|
|
33
|
+
return (_jsxs(AuthLayout, { title: "Sign in", footer: _jsxs("div", { className: "flex flex-col gap-1.5", children: [_jsx(Link, { to: "/forgot-password", className: "font-medium text-accent hover:underline", children: "Forgot password?" }), config?.signupsEnabled !== false && (_jsxs("span", { className: "text-ink-muted", children: ["No account?", ' ', _jsx(Link, { to: "/signup", className: "font-medium text-accent hover:underline", children: "Sign up" })] }))] }), children: [_jsxs("form", { onSubmit: submit, className: "mt-5 space-y-3", children: [_jsx(TextField, { label: "Email", type: "email", value: email, onChange: setEmail, autoComplete: "email", required: true }), _jsx(TextField, { label: "Password", type: "password", value: password, onChange: setPassword, autoComplete: "current-password", required: true }), logIn.error !== null && _jsx(ErrorPanel, { error: logIn.error }), _jsx(SubmitButton, { label: "Sign in", pendingLabel: "Signing in\u2026", isPending: logIn.isPending })] }), _jsx(AuthMethods, { intent: "login", next: next })] }));
|
|
32
34
|
}
|
|
33
35
|
//# sourceMappingURL=SignInPage.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SignInPage.js","sourceRoot":"","sources":["../../../src/pages/auth/SignInPage.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAA;AAEhC,OAAO,EAAE,IAAI,EAAE,WAAW,EAAE,eAAe,EAAE,MAAM,cAAc,CAAA;AAEjE,OAAO,EAAE,QAAQ,EAAE,MAAM,gCAAgC,CAAA;AACzD,OAAO,EAAE,UAAU,EAAE,MAAM,gCAAiC,CAAA;AAC5D,OAAO,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,eAAgB,CAAA;AACxD,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAkB,CAAA;AAC7C,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAmB,CAAA;AAC/C,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAA;AAExC;;;;;;GAMG;AAEH,MAAM,UAAU,UAAU;IACxB,MAAM,QAAQ,GAAG,WAAW,EAAE,CAAA;IAC9B,MAAM,CAAC,gBAAgB,CAAC,GAAG,eAAe,EAAE,CAAA;IAC5C,MAAM,KAAK,GAAG,QAAQ,EAAE,CAAA;IACxB,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,QAAQ,CAAC,EAAE,CAAC,CAAA;IACtC,MAAM,CAAC,QAAQ,EAAE,WAAW,CAAC,GAAG,QAAQ,CAAC,EAAE,CAAC,CAAA;IAE5C,MAAM,IAAI,GAAG,QAAQ,CAAC,gBAAgB,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAA;IAEnD,SAAS,MAAM,CAAC,KAAgB;QAC9B,KAAK,CAAC,cAAc,EAAE,CAAA;QAEtB,KAAK;aACF,QAAQ,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,IAAI,EAAE,EAAE,QAAQ,EAAE,CAAC;aAC3C,IAAI,CAAC,GAAG,EAAE,CAAC,QAAQ,CAAC,IAAI,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;aAC7C,KAAK,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAA;IAC3B,CAAC;IAED,OAAO,CACL,MAAC,UAAU,IACT,KAAK,EAAC,SAAS,EACf,MAAM,EACJ,eAAK,SAAS,EAAC,uBAAuB,aACpC,KAAC,IAAI,IAAC,EAAE,EAAC,kBAAkB,EAAC,SAAS,EAAC,yCAAyC,iCAExE,
|
|
1
|
+
{"version":3,"file":"SignInPage.js","sourceRoot":"","sources":["../../../src/pages/auth/SignInPage.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAA;AAEhC,OAAO,EAAE,IAAI,EAAE,WAAW,EAAE,eAAe,EAAE,MAAM,cAAc,CAAA;AAEjE,OAAO,EAAE,eAAe,EAAE,MAAM,qCAAqC,CAAA;AACrE,OAAO,EAAE,QAAQ,EAAE,MAAM,gCAAgC,CAAA;AACzD,OAAO,EAAE,UAAU,EAAE,MAAM,gCAAiC,CAAA;AAC5D,OAAO,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,eAAgB,CAAA;AACxD,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAkB,CAAA;AAC7C,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAmB,CAAA;AAC/C,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAA;AAExC;;;;;;GAMG;AAEH,MAAM,UAAU,UAAU;IACxB,MAAM,QAAQ,GAAG,WAAW,EAAE,CAAA;IAC9B,MAAM,CAAC,gBAAgB,CAAC,GAAG,eAAe,EAAE,CAAA;IAC5C,MAAM,KAAK,GAAG,QAAQ,EAAE,CAAA;IACxB,MAAM,EAAE,MAAM,EAAE,GAAG,eAAe,EAAE,CAAA;IACpC,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,QAAQ,CAAC,EAAE,CAAC,CAAA;IACtC,MAAM,CAAC,QAAQ,EAAE,WAAW,CAAC,GAAG,QAAQ,CAAC,EAAE,CAAC,CAAA;IAE5C,MAAM,IAAI,GAAG,QAAQ,CAAC,gBAAgB,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAA;IAEnD,SAAS,MAAM,CAAC,KAAgB;QAC9B,KAAK,CAAC,cAAc,EAAE,CAAA;QAEtB,KAAK;aACF,QAAQ,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,IAAI,EAAE,EAAE,QAAQ,EAAE,CAAC;aAC3C,IAAI,CAAC,GAAG,EAAE,CAAC,QAAQ,CAAC,IAAI,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;aAC7C,KAAK,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAA;IAC3B,CAAC;IAED,OAAO,CACL,MAAC,UAAU,IACT,KAAK,EAAC,SAAS,EACf,MAAM,EACJ,eAAK,SAAS,EAAC,uBAAuB,aACpC,KAAC,IAAI,IAAC,EAAE,EAAC,kBAAkB,EAAC,SAAS,EAAC,yCAAyC,iCAExE,EACN,MAAM,EAAE,cAAc,KAAK,KAAK,IAAI,CACnC,gBAAM,SAAS,EAAC,gBAAgB,4BAClB,GAAG,EACf,KAAC,IAAI,IAAC,EAAE,EAAC,SAAS,EAAC,SAAS,EAAC,yCAAyC,wBAE/D,IACF,CACR,IACG,aAGR,gBAAM,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAC,gBAAgB,aAChD,KAAC,SAAS,IACR,KAAK,EAAC,OAAO,EACb,IAAI,EAAC,OAAO,EACZ,KAAK,EAAE,KAAK,EACZ,QAAQ,EAAE,QAAQ,EAClB,YAAY,EAAC,OAAO,EACpB,QAAQ,SACR,EACF,KAAC,SAAS,IACR,KAAK,EAAC,UAAU,EAChB,IAAI,EAAC,UAAU,EACf,KAAK,EAAE,QAAQ,EACf,QAAQ,EAAE,WAAW,EACrB,YAAY,EAAC,kBAAkB,EAC/B,QAAQ,SACR,EACD,KAAK,CAAC,KAAK,KAAK,IAAI,IAAI,KAAC,UAAU,IAAC,KAAK,EAAE,KAAK,CAAC,KAAK,GAAI,EAC3D,KAAC,YAAY,IAAC,KAAK,EAAC,SAAS,EAAC,YAAY,EAAC,kBAAa,EAAC,SAAS,EAAE,KAAK,CAAC,SAAS,GAAI,IAClF,EACP,KAAC,WAAW,IAAC,MAAM,EAAC,OAAO,EAAC,IAAI,EAAE,IAAI,GAAI,IAC/B,CACd,CAAA;AACH,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SignUpPage.d.ts","sourceRoot":"","sources":["../../../src/pages/auth/SignUpPage.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"SignUpPage.d.ts","sourceRoot":"","sources":["../../../src/pages/auth/SignUpPage.tsx"],"names":[],"mappings":"AAYA;;;;;;;;;;;;GAYG;AACH,wBAAgB,UAAU,IAAI,KAAK,CAAC,GAAG,CAAC,OAAO,CAyG9C"}
|
|
@@ -2,6 +2,7 @@ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
|
2
2
|
import { MINIMUM_PASSWORD_LENGTH } from '@kelpie/schemas';
|
|
3
3
|
import { useState } from 'react';
|
|
4
4
|
import { Link, useNavigate } from 'react-router';
|
|
5
|
+
import { usePublicConfig } from '../../api/resources/publicConfig.js';
|
|
5
6
|
import { useSignUp } from '../../api/resources/session.js';
|
|
6
7
|
import { ErrorPanel } from '../../components/QueryState.js';
|
|
7
8
|
import { SubmitButton, TextField } from './AuthForm.js';
|
|
@@ -23,10 +24,16 @@ import { AuthMethods } from './AuthMethods.js';
|
|
|
23
24
|
export function SignUpPage() {
|
|
24
25
|
const navigate = useNavigate();
|
|
25
26
|
const signUp = useSignUp();
|
|
27
|
+
const { config } = usePublicConfig();
|
|
26
28
|
const [name, setName] = useState('');
|
|
27
29
|
const [email, setEmail] = useState('');
|
|
28
30
|
const [password, setPassword] = useState('');
|
|
29
31
|
const [localError, setLocalError] = useState(null);
|
|
32
|
+
// Undefined (still loading) renders the form, same as the server's own
|
|
33
|
+
// default: a caller that has not thought about it sees no change.
|
|
34
|
+
if (config?.signupsEnabled === false) {
|
|
35
|
+
return (_jsx(AuthLayout, { title: "Signups are closed", footer: _jsxs("span", { className: "text-ink-muted", children: ["Already have an account?", ' ', _jsx(Link, { to: "/login", className: "font-medium text-accent hover:underline", children: "Sign in" })] }), children: _jsx("p", { className: "mt-5 text-ink-muted", children: "This instance is not accepting new accounts right now. If you were invited to a workspace, use the link from your invitation email instead." }) }));
|
|
36
|
+
}
|
|
30
37
|
function submit(event) {
|
|
31
38
|
event.preventDefault();
|
|
32
39
|
// Checked here as well as by the service so the rule is stated before a
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SignUpPage.js","sourceRoot":"","sources":["../../../src/pages/auth/SignUpPage.tsx"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"SignUpPage.js","sourceRoot":"","sources":["../../../src/pages/auth/SignUpPage.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The URL a region switcher navigates to: the other origin, plus the path,
|
|
3
|
+
* query, and hash the reader is already on.
|
|
4
|
+
*/
|
|
5
|
+
export declare function regionHref(origin: string, location: Pick<Location, 'pathname' | 'search' | 'hash'>): string;
|
|
6
|
+
//# sourceMappingURL=regionHref.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"regionHref.d.ts","sourceRoot":"","sources":["../../../src/pages/auth/regionHref.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,wBAAgB,UAAU,CACxB,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE,UAAU,GAAG,QAAQ,GAAG,MAAM,CAAC,GACvD,MAAM,CAER"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The URL a region switcher navigates to: the other origin, plus the path,
|
|
3
|
+
* query, and hash the reader is already on.
|
|
4
|
+
*/
|
|
5
|
+
export function regionHref(origin, location) {
|
|
6
|
+
return `${origin}${location.pathname}${location.search}${location.hash}`;
|
|
7
|
+
}
|
|
8
|
+
//# sourceMappingURL=regionHref.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"regionHref.js","sourceRoot":"","sources":["../../../src/pages/auth/regionHref.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,MAAM,UAAU,UAAU,CACxB,MAAc,EACd,QAAwD;IAExD,OAAO,GAAG,MAAM,GAAG,QAAQ,CAAC,QAAQ,GAAG,QAAQ,CAAC,MAAM,GAAG,QAAQ,CAAC,IAAI,EAAE,CAAA;AAC1E,CAAC"}
|
|
@@ -1,2 +1,10 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The workspace home: what is open, what is late, and what happened lately.
|
|
3
|
+
*
|
|
4
|
+
* One request, not seven. `GET /v1/dashboard` answers the whole page, with the
|
|
5
|
+
* name of every record it points at already resolved, so this file holds no
|
|
6
|
+
* fetching beyond the two directories the shell needs anyway — the workspace,
|
|
7
|
+
* for its name, and the team, to turn an author id into a person.
|
|
8
|
+
*/
|
|
1
9
|
export declare function DashboardPage(): React.JSX.Element;
|
|
2
10
|
//# sourceMappingURL=DashboardPage.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DashboardPage.d.ts","sourceRoot":"","sources":["../../../src/pages/dashboard/DashboardPage.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"DashboardPage.d.ts","sourceRoot":"","sources":["../../../src/pages/dashboard/DashboardPage.tsx"],"names":[],"mappings":"AAYA;;;;;;;GAOG;AAEH,wBAAgB,aAAa,IAAI,KAAK,CAAC,GAAG,CAAC,OAAO,CA+BjD"}
|
|
@@ -6,7 +6,7 @@ import { useWorkspace } from '../../api/resources/workspace.js';
|
|
|
6
6
|
import { AgentTasks } from '../../components/AgentTasks.js';
|
|
7
7
|
import { PageHeader } from '../../components/PageHeader.js';
|
|
8
8
|
import { ErrorPanel, LoadingPanel } from '../../components/QueryState.js';
|
|
9
|
-
import { attentionRows
|
|
9
|
+
import { attentionRows } from './attention.js';
|
|
10
10
|
import { ActivityFeed, AttentionList, DecisionsList, NotesList } from './sections.js';
|
|
11
11
|
/**
|
|
12
12
|
* The workspace home: what is open, what is late, and what happened lately.
|
|
@@ -16,27 +16,19 @@ import { ActivityFeed, AttentionList, DecisionsList, NotesList } from './section
|
|
|
16
16
|
* fetching beyond the two directories the shell needs anyway — the workspace,
|
|
17
17
|
* for its name, and the team, to turn an author id into a person.
|
|
18
18
|
*/
|
|
19
|
-
/** The heading date, written in the workspace's own day rather than the browser's. */
|
|
20
|
-
function briefHeading(dashboard) {
|
|
21
|
-
return new Intl.DateTimeFormat(undefined, {
|
|
22
|
-
weekday: 'long',
|
|
23
|
-
month: 'short',
|
|
24
|
-
day: 'numeric',
|
|
25
|
-
timeZone: dashboard.timezone,
|
|
26
|
-
}).format(dashboard.generatedAt);
|
|
27
|
-
}
|
|
28
19
|
export function DashboardPage() {
|
|
29
20
|
const { dashboard, isLoading, error } = useDashboard();
|
|
30
21
|
const { workspace } = useWorkspace();
|
|
31
22
|
const { nameById } = useMembers();
|
|
32
23
|
const timezone = useTimezone();
|
|
33
|
-
|
|
24
|
+
const workspaceName = workspace?.name ?? 'This workspace';
|
|
25
|
+
return (_jsxs("div", { className: "animate-fade-in", children: [_jsx(PageHeader, { title: "Dashboard", description: "What needs attention across this workspace.", actions: workspace?.id !== undefined ? (_jsx(AgentTasks, { targetType: "workspace", targetId: workspace.id, targetLabel: workspaceName })) : undefined }), error !== null && _jsx(ErrorPanel, { error: error }), isLoading && _jsx(LoadingPanel, { label: "Loading the workspace\u2026" }), dashboard !== undefined && (_jsx(DashboardBody, { dashboard: dashboard, nameById: nameById, timezone: timezone }))] }));
|
|
34
26
|
}
|
|
35
|
-
function DashboardBody({ dashboard,
|
|
27
|
+
function DashboardBody({ dashboard, nameById, timezone, }) {
|
|
36
28
|
// `generatedAt` rather than a fresh `new Date()`: every relative time on the
|
|
37
29
|
// page is then measured from the same instant the counts were, so a tab left
|
|
38
30
|
// open does not creep towards "2 hours ago" on rows that never moved.
|
|
39
31
|
const now = dashboard.generatedAt;
|
|
40
|
-
return (_jsxs("div", { children: [_jsxs("
|
|
32
|
+
return (_jsxs("div", { children: [_jsxs("div", { className: "mb-8 grid gap-8 lg:grid-cols-2", children: [_jsx(AttentionList, { rows: attentionRows(dashboard) }), _jsx(ActivityFeed, { activities: dashboard.recentActivity, nameById: nameById, now: now, timezone: timezone })] }), _jsxs("div", { className: "grid gap-8 lg:grid-cols-2", children: [_jsx(NotesList, { notes: dashboard.recentNotes, nameById: nameById, now: now, timezone: timezone }), _jsx(DecisionsList, { decisions: dashboard.recentDecisions, nameById: nameById, timezone: timezone })] })] }));
|
|
41
33
|
}
|
|
42
34
|
//# sourceMappingURL=DashboardPage.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DashboardPage.js","sourceRoot":"","sources":["../../../src/pages/dashboard/DashboardPage.tsx"],"names":[],"mappings":";AAEA,OAAO,EAAE,WAAW,EAAE,MAAM,gCAAgC,CAAA;AAC5D,OAAO,EAAE,YAAY,EAAE,MAAM,kCAAkC,CAAA;AAC/D,OAAO,EAAE,UAAU,EAAE,MAAM,gCAAgC,CAAA;AAC3D,OAAO,EAAE,YAAY,EAAE,MAAM,kCAAkC,CAAA;AAC/D,OAAO,EAAE,UAAU,EAAE,MAAM,gCAAiC,CAAA;AAC5D,OAAO,EAAE,UAAU,EAAE,MAAM,gCAAiC,CAAA;AAC5D,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,gCAAiC,CAAA;AAC1E,OAAO,EAAE,aAAa,EAAE,
|
|
1
|
+
{"version":3,"file":"DashboardPage.js","sourceRoot":"","sources":["../../../src/pages/dashboard/DashboardPage.tsx"],"names":[],"mappings":";AAEA,OAAO,EAAE,WAAW,EAAE,MAAM,gCAAgC,CAAA;AAC5D,OAAO,EAAE,YAAY,EAAE,MAAM,kCAAkC,CAAA;AAC/D,OAAO,EAAE,UAAU,EAAE,MAAM,gCAAgC,CAAA;AAC3D,OAAO,EAAE,YAAY,EAAE,MAAM,kCAAkC,CAAA;AAC/D,OAAO,EAAE,UAAU,EAAE,MAAM,gCAAiC,CAAA;AAC5D,OAAO,EAAE,UAAU,EAAE,MAAM,gCAAiC,CAAA;AAC5D,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,gCAAiC,CAAA;AAC1E,OAAO,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAA;AAC9C,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,eAAgB,CAAA;AAEtF;;;;;;;GAOG;AAEH,MAAM,UAAU,aAAa;IAC3B,MAAM,EAAE,SAAS,EAAE,SAAS,EAAE,KAAK,EAAE,GAAG,YAAY,EAAE,CAAA;IACtD,MAAM,EAAE,SAAS,EAAE,GAAG,YAAY,EAAE,CAAA;IACpC,MAAM,EAAE,QAAQ,EAAE,GAAG,UAAU,EAAE,CAAA;IACjC,MAAM,QAAQ,GAAG,WAAW,EAAE,CAAA;IAC9B,MAAM,aAAa,GAAG,SAAS,EAAE,IAAI,IAAI,gBAAgB,CAAA;IAEzD,OAAO,CACL,eAAK,SAAS,EAAC,iBAAiB,aAC9B,KAAC,UAAU,IACT,KAAK,EAAC,WAAW,EACjB,WAAW,EAAC,6CAA6C,EACzD,OAAO,EACL,SAAS,EAAE,EAAE,KAAK,SAAS,CAAC,CAAC,CAAC,CAC5B,KAAC,UAAU,IACT,UAAU,EAAC,WAAW,EACtB,QAAQ,EAAE,SAAS,CAAC,EAAE,EACtB,WAAW,EAAE,aAAa,GAC1B,CACH,CAAC,CAAC,CAAC,SAAS,GAEf,EAED,KAAK,KAAK,IAAI,IAAI,KAAC,UAAU,IAAC,KAAK,EAAE,KAAK,GAAI,EAC9C,SAAS,IAAI,KAAC,YAAY,IAAC,KAAK,EAAC,6BAAwB,GAAG,EAE5D,SAAS,KAAK,SAAS,IAAI,CAC1B,KAAC,aAAa,IAAC,SAAS,EAAE,SAAS,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,GAAI,CAChF,IACG,CACP,CAAA;AACH,CAAC;AAED,SAAS,aAAa,CAAC,EACrB,SAAS,EACT,QAAQ,EACR,QAAQ,GAKT;IACC,6EAA6E;IAC7E,6EAA6E;IAC7E,sEAAsE;IACtE,MAAM,GAAG,GAAG,SAAS,CAAC,WAAW,CAAA;IAEjC,OAAO,CACL,0BACE,eAAK,SAAS,EAAC,gCAAgC,aAC7C,KAAC,aAAa,IAAC,IAAI,EAAE,aAAa,CAAC,SAAS,CAAC,GAAI,EACjD,KAAC,YAAY,IACX,UAAU,EAAE,SAAS,CAAC,cAAc,EACpC,QAAQ,EAAE,QAAQ,EAClB,GAAG,EAAE,GAAG,EACR,QAAQ,EAAE,QAAQ,GAClB,IACE,EACN,eAAK,SAAS,EAAC,2BAA2B,aACxC,KAAC,SAAS,IAAC,KAAK,EAAE,SAAS,CAAC,WAAW,EAAE,QAAQ,EAAE,QAAQ,EAAE,GAAG,EAAE,GAAG,EAAE,QAAQ,EAAE,QAAQ,GAAI,EAC7F,KAAC,aAAa,IAAC,SAAS,EAAE,SAAS,CAAC,eAAe,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,GAAI,IAC3F,IACF,CACP,CAAA;AACH,CAAC"}
|
|
@@ -23,7 +23,7 @@ export interface AttentionRow {
|
|
|
23
23
|
readonly href: string | undefined;
|
|
24
24
|
}
|
|
25
25
|
/**
|
|
26
|
-
* The
|
|
26
|
+
* The attention list, most urgent first.
|
|
27
27
|
*
|
|
28
28
|
* The groups are concatenated rather than sorted: each arrives from the API in
|
|
29
29
|
* its own order — plan items soonest first, contacts coldest first — and a
|
|
@@ -31,11 +31,4 @@ export interface AttentionRow {
|
|
|
31
31
|
* a different thing in each.
|
|
32
32
|
*/
|
|
33
33
|
export declare function attentionRows(dashboard: Dashboard): readonly AttentionRow[];
|
|
34
|
-
/**
|
|
35
|
-
* The brief, built from the totals rather than from the rows.
|
|
36
|
-
*
|
|
37
|
-
* A list is capped by the request's limit and a total is not, so counting the
|
|
38
|
-
* rows on screen would understate every workspace with more than a page of them.
|
|
39
|
-
*/
|
|
40
|
-
export declare function briefLines(dashboard: Dashboard): readonly string[];
|
|
41
34
|
//# sourceMappingURL=attention.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"attention.d.ts","sourceRoot":"","sources":["../../../src/pages/dashboard/attention.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,SAAS,EAKT,gBAAgB,EACjB,MAAM,iBAAiB,CAAA;AAExB,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,2BAA2B,CAAA;
|
|
1
|
+
{"version":3,"file":"attention.d.ts","sourceRoot":"","sources":["../../../src/pages/dashboard/attention.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,SAAS,EAKT,gBAAgB,EACjB,MAAM,iBAAiB,CAAA;AAExB,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,2BAA2B,CAAA;AAwCzD,wBAAgB,eAAe,CAAC,UAAU,EAAE,gBAAgB,GAAG,MAAM,CAEpE;AAED;;;GAGG;AACH,wBAAgB,UAAU,CAAC,UAAU,EAAE,gBAAgB,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAI7F;AAED,mEAAmE;AACnE,wBAAgB,iBAAiB,CAAC,IAAI,EAAE;IACtC,QAAQ,CAAC,UAAU,EAAE,gBAAgB,CAAA;IACrC,QAAQ,CAAC,UAAU,EAAE,MAAM,GAAG,IAAI,CAAA;CACnC,GAAG,MAAM,CAIT;AAED,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAA;IACnB,oDAAoD;IACpD,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;IACtB,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAA;IACvB,iDAAiD;IACjD,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;IACrB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;IACtB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;IACvB,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS,CAAA;CAClC;AAoDD;;;;;;;GAOG;AACH,wBAAgB,aAAa,CAAC,SAAS,EAAE,SAAS,GAAG,SAAS,YAAY,EAAE,CAW3E"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import { formatDay } from '../../lib/dates.js';
|
|
1
|
+
import { formatDate, formatDay } from '../../lib/dates.js';
|
|
2
2
|
/**
|
|
3
|
-
* Reading the workspace snapshot as a page: one attention list
|
|
4
|
-
*
|
|
3
|
+
* Reading the workspace snapshot as a page: one attention list from the
|
|
4
|
+
* signals the service already ranked.
|
|
5
5
|
*
|
|
6
6
|
* Pure functions over the decoded response, so the page renders and these are
|
|
7
7
|
* tested separately. Nothing here recomputes a signal: the service already
|
|
@@ -18,6 +18,8 @@ const ROUTES = {
|
|
|
18
18
|
raise: '/fundraising',
|
|
19
19
|
enquiry: '/enquiries',
|
|
20
20
|
candidate: undefined,
|
|
21
|
+
event: '/events',
|
|
22
|
+
attendance: undefined,
|
|
21
23
|
};
|
|
22
24
|
const TARGET_TYPE_LABELS = {
|
|
23
25
|
person: 'Person',
|
|
@@ -28,6 +30,8 @@ const TARGET_TYPE_LABELS = {
|
|
|
28
30
|
raise: 'Fundraising',
|
|
29
31
|
enquiry: 'Enquiry',
|
|
30
32
|
candidate: 'Candidate',
|
|
33
|
+
event: 'Event',
|
|
34
|
+
attendance: 'Attendance',
|
|
31
35
|
};
|
|
32
36
|
export function targetTypeLabel(targetType) {
|
|
33
37
|
return TARGET_TYPE_LABELS[targetType];
|
|
@@ -78,8 +82,20 @@ function staleContactRow(contact) {
|
|
|
78
82
|
href: `/people/${contact.id}`,
|
|
79
83
|
};
|
|
80
84
|
}
|
|
85
|
+
function upcomingEventRow(event, timezone) {
|
|
86
|
+
const where = event.location.length > 0 ? event.location : event.format;
|
|
87
|
+
return {
|
|
88
|
+
id: `event-${event.id}`,
|
|
89
|
+
label: 'Upcoming event',
|
|
90
|
+
tone: 'accent',
|
|
91
|
+
meta: formatDate(event.startsAt, timezone),
|
|
92
|
+
title: event.name,
|
|
93
|
+
detail: `${String(event.attendeeCount)} registered · ${where}`,
|
|
94
|
+
href: `/events/${event.id}`,
|
|
95
|
+
};
|
|
96
|
+
}
|
|
81
97
|
/**
|
|
82
|
-
* The
|
|
98
|
+
* The attention list, most urgent first.
|
|
83
99
|
*
|
|
84
100
|
* The groups are concatenated rather than sorted: each arrives from the API in
|
|
85
101
|
* its own order — plan items soonest first, contacts coldest first — and a
|
|
@@ -93,57 +109,8 @@ export function attentionRows(dashboard) {
|
|
|
93
109
|
...touchpoints.filter((touchpoint) => touchpoint.overdue).map(touchpointRow),
|
|
94
110
|
...dashboard.dueSoonPlanItems.items.map((item) => planItemRow(item, false)),
|
|
95
111
|
...touchpoints.filter((touchpoint) => !touchpoint.overdue).map(touchpointRow),
|
|
112
|
+
...dashboard.upcomingEvents.items.map((item) => upcomingEventRow(item, dashboard.timezone)),
|
|
96
113
|
...dashboard.staleContacts.items.map(staleContactRow),
|
|
97
114
|
];
|
|
98
115
|
}
|
|
99
|
-
function plural(count, singular, pluralForm = `${singular}s`) {
|
|
100
|
-
return `${String(count)} ${count === 1 ? singular : pluralForm}`;
|
|
101
|
-
}
|
|
102
|
-
/**
|
|
103
|
-
* How a count of open records reads mid-sentence.
|
|
104
|
-
*
|
|
105
|
-
* Not `PIPELINE_KIND_LABELS`: that one is nav wording, where a Raise is filed
|
|
106
|
-
* under "Fundraising", and "3 fundraisings" is not a sentence. Written out
|
|
107
|
-
* rather than suffixed, because "opportunitys" is not one either.
|
|
108
|
-
*/
|
|
109
|
-
const OPEN_PIPELINE_NOUNS = {
|
|
110
|
-
enquiry: { one: 'enquiry', many: 'enquiries' },
|
|
111
|
-
deal: { one: 'deal', many: 'deals' },
|
|
112
|
-
opportunity: { one: 'opportunity', many: 'opportunities' },
|
|
113
|
-
raise: { one: 'raise', many: 'raises' },
|
|
114
|
-
partnership: { one: 'partnership', many: 'partnerships' },
|
|
115
|
-
};
|
|
116
|
-
/**
|
|
117
|
-
* The brief, built from the totals rather than from the rows.
|
|
118
|
-
*
|
|
119
|
-
* A list is capped by the request's limit and a total is not, so counting the
|
|
120
|
-
* rows on screen would understate every workspace with more than a page of them.
|
|
121
|
-
*/
|
|
122
|
-
export function briefLines(dashboard) {
|
|
123
|
-
const lines = [];
|
|
124
|
-
if (dashboard.overduePlanItems.total > 0) {
|
|
125
|
-
lines.push(`${plural(dashboard.overduePlanItems.total, 'plan item')} overdue — triage Planning first.`);
|
|
126
|
-
}
|
|
127
|
-
if (dashboard.dueSoonPlanItems.total > 0) {
|
|
128
|
-
lines.push(`${plural(dashboard.dueSoonPlanItems.total, 'plan item')} due in the next ${plural(dashboard.upcomingDays, 'day')}.`);
|
|
129
|
-
}
|
|
130
|
-
if (dashboard.partnershipTouchpoints.total > 0) {
|
|
131
|
-
lines.push(`${plural(dashboard.partnershipTouchpoints.total, 'partnership touchpoint')} at hand.`);
|
|
132
|
-
}
|
|
133
|
-
if (dashboard.staleContacts.total > 0) {
|
|
134
|
-
lines.push(`${plural(dashboard.staleContacts.total, 'contact')} past the ${String(dashboard.staleContactDays)}-day touch threshold.`);
|
|
135
|
-
}
|
|
136
|
-
const open = dashboard.pipelines.filter((pipeline) => pipeline.open > 0);
|
|
137
|
-
if (open.length > 0) {
|
|
138
|
-
lines.push(`Open: ${open
|
|
139
|
-
.map((pipeline) => {
|
|
140
|
-
const noun = OPEN_PIPELINE_NOUNS[pipeline.kind];
|
|
141
|
-
return plural(pipeline.open, noun.one, noun.many);
|
|
142
|
-
})
|
|
143
|
-
.join(', ')}.`);
|
|
144
|
-
}
|
|
145
|
-
return lines.length === 0
|
|
146
|
-
? ['Nothing urgent. Pipeline and relationships look quiet today.']
|
|
147
|
-
: lines;
|
|
148
|
-
}
|
|
149
116
|
//# sourceMappingURL=attention.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"attention.js","sourceRoot":"","sources":["../../../src/pages/dashboard/attention.ts"],"names":[],"mappings":"AAUA,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAA;
|
|
1
|
+
{"version":3,"file":"attention.js","sourceRoot":"","sources":["../../../src/pages/dashboard/attention.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sections.d.ts","sourceRoot":"","sources":["../../../src/pages/dashboard/sections.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAEV,iBAAiB,EACjB,iBAAiB,EACjB,aAAa,EAEd,MAAM,iBAAiB,CAAA;
|
|
1
|
+
{"version":3,"file":"sections.d.ts","sourceRoot":"","sources":["../../../src/pages/dashboard/sections.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAEV,iBAAiB,EACjB,iBAAiB,EACjB,aAAa,EAEd,MAAM,iBAAiB,CAAA;AASxB,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAA;AAyDlD,wBAAgB,aAAa,CAAC,EAAE,IAAI,EAAE,EAAE;IAAE,QAAQ,CAAC,IAAI,EAAE,SAAS,YAAY,EAAE,CAAA;CAAE,GAAG,KAAK,CAAC,GAAG,CAAC,OAAO,CAkCrG;AAED,wBAAgB,YAAY,CAAC,EAC3B,UAAU,EACV,QAAQ,EACR,GAAG,EACH,QAAQ,GACT,EAAE;IACD,QAAQ,CAAC,UAAU,EAAE,SAAS,iBAAiB,EAAE,CAAA;IACjD,QAAQ,CAAC,QAAQ,EAAE,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IAC9C,QAAQ,CAAC,GAAG,EAAE,IAAI,CAAA;IAClB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAA;CAC1B,GAAG,KAAK,CAAC,GAAG,CAAC,OAAO,CAqDpB;AAiBD,wBAAgB,SAAS,CAAC,EACxB,KAAK,EACL,QAAQ,EACR,GAAG,EACH,QAAQ,GACT,EAAE;IACD,QAAQ,CAAC,KAAK,EAAE,SAAS,aAAa,EAAE,CAAA;IACxC,QAAQ,CAAC,QAAQ,EAAE,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IAC9C,QAAQ,CAAC,GAAG,EAAE,IAAI,CAAA;IAClB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAA;CAC1B,GAAG,KAAK,CAAC,GAAG,CAAC,OAAO,CAiCpB;AAED,wBAAgB,aAAa,CAAC,EAC5B,SAAS,EACT,QAAQ,EACR,QAAQ,GACT,EAAE;IACD,QAAQ,CAAC,SAAS,EAAE,SAAS,iBAAiB,EAAE,CAAA;IAChD,QAAQ,CAAC,QAAQ,EAAE,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IAC9C,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAA;CAC1B,GAAG,KAAK,CAAC,GAAG,CAAC,OAAO,CAuCpB"}
|