@odla-ai/chapter 0.22.0 → 0.23.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/README.md +112 -41
- package/dist/chunk-NTZSXAFT.js +411 -0
- package/dist/chunk-NTZSXAFT.js.map +1 -0
- package/dist/{chunk-ILGUJXSB.js → chunk-OYXNI6VR.js} +275 -93
- package/dist/chunk-OYXNI6VR.js.map +1 -0
- package/dist/{chunk-IWW5VAAC.js → chunk-VCC4S6JU.js} +230 -202
- package/dist/chunk-VCC4S6JU.js.map +1 -0
- package/dist/{types-CgWUQ2MH.d.ts → copy-context-pDogTR4x.d.ts} +78 -20
- package/dist/index.cjs +322 -3
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +90 -24
- package/dist/index.d.ts +90 -24
- package/dist/index.js +322 -3
- package/dist/index.js.map +1 -1
- package/dist/ui/admin/index.d.ts +31 -28
- package/dist/ui/admin/index.js +8 -3
- package/dist/ui/index.d.ts +3 -3
- package/dist/ui/index.js +11 -5
- package/dist/ui/member/index.d.ts +128 -12
- package/dist/ui/member/index.js +10 -4
- package/dist/worker/index.cjs +180 -130
- package/dist/worker/index.cjs.map +1 -1
- package/dist/worker/index.d.cts +67 -19
- package/dist/worker/index.d.ts +67 -19
- package/dist/worker/index.js +180 -130
- package/dist/worker/index.js.map +1 -1
- package/package.json +11 -11
- package/runbooks/adopt-existing.md +23 -5
- package/runbooks/greenfield.md +95 -15
- package/dist/chunk-ILGUJXSB.js.map +0 -1
- package/dist/chunk-IWW5VAAC.js.map +0 -1
- package/dist/chunk-VZPBTTO3.js +0 -91
- package/dist/chunk-VZPBTTO3.js.map +0 -1
package/dist/ui/admin/index.d.ts
CHANGED
|
@@ -1,7 +1,8 @@
|
|
|
1
|
-
import * as
|
|
2
|
-
import {
|
|
1
|
+
import * as preact from 'preact';
|
|
2
|
+
import { ComponentChildren, JSX } from 'preact';
|
|
3
3
|
import { CrmClient, Crm, CrmRecord } from '@odla-ai/crm';
|
|
4
|
-
import {
|
|
4
|
+
import { a as Chapter, b as ChapterCopy } from '../../copy-context-pDogTR4x.js';
|
|
5
|
+
export { C as ChapterCopyProvider, u as useChapterCopy } from '../../copy-context-pDogTR4x.js';
|
|
5
6
|
import { CrmLifecycleAdapter, CrmWorkspaceMasterContext, CrmWorkspaceRecordContext, RecordPanelTab } from '@odla-ai/crm/ui';
|
|
6
7
|
|
|
7
8
|
/** Normalized public auth configuration consumed by the Clerk gate. */
|
|
@@ -36,7 +37,7 @@ declare function loadChapterAdminUser(adapter: ChapterAdminAuthAdapter, apiBase:
|
|
|
36
37
|
type Brand = {
|
|
37
38
|
name: string;
|
|
38
39
|
badge?: string;
|
|
39
|
-
wordmark?:
|
|
40
|
+
wordmark?: ComponentChildren;
|
|
40
41
|
};
|
|
41
42
|
|
|
42
43
|
/** Typed URL state for the admin's nested in-page workspaces. */
|
|
@@ -80,7 +81,9 @@ interface AdminWorkspace {
|
|
|
80
81
|
label: string;
|
|
81
82
|
/** Canonical nested view used when a workspace is opened without one. */
|
|
82
83
|
defaultViewId?: string;
|
|
83
|
-
|
|
84
|
+
/** Optional named @odla-ai/ui accent scoped to this workspace's content. */
|
|
85
|
+
accent?: string;
|
|
86
|
+
render: (ctx: AdminSectionContext) => ComponentChildren;
|
|
84
87
|
}
|
|
85
88
|
/** Legacy name for a top-level workspace. @deprecated Use AdminWorkspace. */
|
|
86
89
|
type AdminSection = AdminWorkspace;
|
|
@@ -111,9 +114,9 @@ interface AdminShellProps {
|
|
|
111
114
|
currentUser?: Record<string, unknown>;
|
|
112
115
|
routing?: AdminRouting;
|
|
113
116
|
chrome?: AdminChrome;
|
|
114
|
-
renderHeader?: (props: AdminAccountMenuProps) =>
|
|
115
|
-
renderAccountMenu?: (props: AdminAccountMenuProps) =>
|
|
116
|
-
renderWorkspaceNav?: (props: AdminWorkspaceNavProps) =>
|
|
117
|
+
renderHeader?: (props: AdminAccountMenuProps) => ComponentChildren;
|
|
118
|
+
renderAccountMenu?: (props: AdminAccountMenuProps) => ComponentChildren;
|
|
119
|
+
renderWorkspaceNav?: (props: AdminWorkspaceNavProps) => ComponentChildren;
|
|
117
120
|
}
|
|
118
121
|
|
|
119
122
|
/** Configuration for the Clerk-gated, brand-scoped Chapter admin console. */
|
|
@@ -132,13 +135,13 @@ interface ChapterAdminProps {
|
|
|
132
135
|
/** Default embedded. Standalone adds packaged global chrome. */
|
|
133
136
|
chrome?: AdminChrome;
|
|
134
137
|
renderHeader?: AdminShellProps["renderHeader"];
|
|
135
|
-
renderAccountMenu?: (props: AdminAccountMenuProps) =>
|
|
136
|
-
renderWorkspaceNav?: (props: AdminWorkspaceNavProps) =>
|
|
138
|
+
renderAccountMenu?: (props: AdminAccountMenuProps) => ComponentChildren;
|
|
139
|
+
renderWorkspaceNav?: (props: AdminWorkspaceNavProps) => ComponentChildren;
|
|
137
140
|
/** Adapt existing config/current-user endpoints without rewriting auth. */
|
|
138
141
|
auth?: ChapterAdminAuthAdapter;
|
|
139
142
|
}
|
|
140
143
|
/** Render the complete authenticated admin application from one Chapter config. */
|
|
141
|
-
declare function ChapterAdmin(props: ChapterAdminProps):
|
|
144
|
+
declare function ChapterAdmin(props: ChapterAdminProps): preact.JSX.Element;
|
|
142
145
|
|
|
143
146
|
/** Default follower grammar: three workspaces with nested operational views. */
|
|
144
147
|
declare function defaultAdminWorkspaces(chapter: Chapter): AdminWorkspace[];
|
|
@@ -147,7 +150,7 @@ declare function defaultAdminWorkspaces(chapter: Chapter): AdminWorkspace[];
|
|
|
147
150
|
declare function defaultAdminSections(chapter: Chapter): AdminSection[];
|
|
148
151
|
|
|
149
152
|
/** Application-authoritative stage transitions used by Chapter collections. */
|
|
150
|
-
declare function applicationLifecycleAdapter(ctx: Pick<AdminSectionContext, "getToken"
|
|
153
|
+
declare function applicationLifecycleAdapter(ctx: Pick<AdminSectionContext, "getToken">, copy?: ChapterCopy["admin"]["records"]): CrmLifecycleAdapter;
|
|
151
154
|
|
|
152
155
|
/** Configuration for the person-collection compatibility preset. */
|
|
153
156
|
interface PeopleSectionOptions {
|
|
@@ -167,10 +170,10 @@ interface CollectionSectionOptions {
|
|
|
167
170
|
networkSharing?: boolean;
|
|
168
171
|
lifecycleAdapter?: (CrmLifecycleAdapter | ((ctx: AdminSectionContext) => CrmLifecycleAdapter));
|
|
169
172
|
requireLifecycleAdapter?: boolean;
|
|
170
|
-
renderSummary?: (context: CrmWorkspaceMasterContext, ctx: AdminSectionContext) =>
|
|
171
|
-
renderMaster?: (context: CrmWorkspaceMasterContext, ctx: AdminSectionContext) =>
|
|
172
|
-
renderDetailHeader?: (context: CrmWorkspaceRecordContext, ctx: AdminSectionContext) =>
|
|
173
|
-
renderEmptyDetail?: (context: CrmWorkspaceMasterContext, ctx: AdminSectionContext) =>
|
|
173
|
+
renderSummary?: (context: CrmWorkspaceMasterContext, ctx: AdminSectionContext) => ComponentChildren;
|
|
174
|
+
renderMaster?: (context: CrmWorkspaceMasterContext, ctx: AdminSectionContext) => ComponentChildren;
|
|
175
|
+
renderDetailHeader?: (context: CrmWorkspaceRecordContext, ctx: AdminSectionContext) => ComponentChildren;
|
|
176
|
+
renderEmptyDetail?: (context: CrmWorkspaceMasterContext, ctx: AdminSectionContext) => ComponentChildren;
|
|
174
177
|
hrefForRecord?: (record: CrmRecord, ctx: AdminSectionContext) => string;
|
|
175
178
|
extendRecordTabs?: (tabs: readonly RecordPanelTab[], context: CrmWorkspaceRecordContext) => readonly RecordPanelTab[];
|
|
176
179
|
}
|
|
@@ -245,7 +248,7 @@ interface RecordActionsProps {
|
|
|
245
248
|
}
|
|
246
249
|
/** The role/approve/refund controls for one person record. Renders only the
|
|
247
250
|
* actions the record supports. */
|
|
248
|
-
declare function RecordActions({ getToken, record, roles, onChanged }: RecordActionsProps):
|
|
251
|
+
declare function RecordActions({ getToken, record, roles, onChanged }: RecordActionsProps): preact.JSX.Element | null;
|
|
249
252
|
|
|
250
253
|
/** Props for {@link NetworkShareActions}. */
|
|
251
254
|
interface NetworkShareActionsProps {
|
|
@@ -255,7 +258,7 @@ interface NetworkShareActionsProps {
|
|
|
255
258
|
}
|
|
256
259
|
/** Render follower delivery buttons when this chapter configured network
|
|
257
260
|
* targets. Targets with an explicit type allowlist hide incompatible records. */
|
|
258
|
-
declare function NetworkShareActions(props: NetworkShareActionsProps):
|
|
261
|
+
declare function NetworkShareActions(props: NetworkShareActionsProps): preact.JSX.Element | null;
|
|
259
262
|
|
|
260
263
|
/** Fetch a JSON `/api/admin/*` route with the admin bearer token. Throws on a
|
|
261
264
|
* non-2xx (the body's `error`, else the status). */
|
|
@@ -268,25 +271,25 @@ interface AdminResource<T> {
|
|
|
268
271
|
/** Re-fetch (e.g. after a mutation). */
|
|
269
272
|
refresh: () => void;
|
|
270
273
|
}
|
|
271
|
-
/** Load a `/api/admin/*` GET route into
|
|
274
|
+
/** Load a `/api/admin/*` GET route into Preact state, re-fetching on `refresh()`
|
|
272
275
|
* or when `path` changes. */
|
|
273
276
|
declare function useAdminResource<T = unknown>(getToken: () => Promise<string | null>, path: string): AdminResource<T>;
|
|
274
277
|
|
|
275
278
|
/** The centered content column every admin section renders into. */
|
|
276
279
|
declare function AdminPage({ children }: {
|
|
277
|
-
children:
|
|
278
|
-
}):
|
|
280
|
+
children: ComponentChildren;
|
|
281
|
+
}): JSX.Element;
|
|
279
282
|
/** An odla-ui `.panel` card with an optional heading + trailing actions. */
|
|
280
283
|
declare function Panel({ title, actions, children }: {
|
|
281
|
-
title?:
|
|
282
|
-
actions?:
|
|
283
|
-
children:
|
|
284
|
-
}):
|
|
284
|
+
title?: ComponentChildren;
|
|
285
|
+
actions?: ComponentChildren;
|
|
286
|
+
children: ComponentChildren;
|
|
287
|
+
}): JSX.Element;
|
|
285
288
|
/** A loud banner when the odla-ui theme token layer is missing. */
|
|
286
|
-
declare function ThemeWarning():
|
|
289
|
+
declare function ThemeWarning(): JSX.Element | null;
|
|
287
290
|
/** A centered status line for loading / empty / error states. */
|
|
288
291
|
declare function AdminNote({ children }: {
|
|
289
|
-
children:
|
|
290
|
-
}):
|
|
292
|
+
children: ComponentChildren;
|
|
293
|
+
}): JSX.Element;
|
|
291
294
|
|
|
292
295
|
export { type AdminAccountMenuProps, type AdminChrome, AdminNote, AdminPage, type AdminResource, type AdminRouteState, type AdminRouteTarget, type AdminRouting, type AdminSection, type AdminSectionContext, type AdminWorkspace, type AdminWorkspaceNavProps, type AvailabilitySectionOptions, type BillingSectionOptions, ChapterAdmin, type ChapterAdminAuthAdapter, type ChapterAdminAuthConfig, type ChapterAdminAuthLoadContext, type ChapterAdminProps, type ChapterAdminUser, type CollectionSectionOptions, type DashboardSectionOptions, type EmailSectionOptions, type MeetingsSectionOptions, NetworkShareActions, type NetworkShareActionsProps, Panel, type PeopleSectionOptions, RecordActions, type RecordActionsProps, ThemeWarning, adminFetch, adminRouteFromUrl, adminRouteHref, adminSectionFromUrl, adminSectionHref, applicationLifecycleAdapter, availabilitySection, billingSection, collectionSection, dashboardSection, defaultAdminSections, defaultAdminWorkspaces, emailSection, loadChapterAdminConfig, loadChapterAdminUser, meetingsSection, peopleSection, useAdminResource };
|
package/dist/ui/admin/index.js
CHANGED
|
@@ -24,12 +24,16 @@ import {
|
|
|
24
24
|
meetingsSection,
|
|
25
25
|
peopleSection,
|
|
26
26
|
useAdminResource
|
|
27
|
-
} from "../../chunk-
|
|
28
|
-
import
|
|
27
|
+
} from "../../chunk-VCC4S6JU.js";
|
|
28
|
+
import {
|
|
29
|
+
ChapterCopyProvider,
|
|
30
|
+
useChapterCopy
|
|
31
|
+
} from "../../chunk-NTZSXAFT.js";
|
|
29
32
|
export {
|
|
30
33
|
AdminNote,
|
|
31
34
|
AdminPage,
|
|
32
35
|
ChapterAdmin,
|
|
36
|
+
ChapterCopyProvider,
|
|
33
37
|
NetworkShareActions,
|
|
34
38
|
Panel,
|
|
35
39
|
RecordActions,
|
|
@@ -51,6 +55,7 @@ export {
|
|
|
51
55
|
loadChapterAdminUser,
|
|
52
56
|
meetingsSection,
|
|
53
57
|
peopleSection,
|
|
54
|
-
useAdminResource
|
|
58
|
+
useAdminResource,
|
|
59
|
+
useChapterCopy
|
|
55
60
|
};
|
|
56
61
|
//# sourceMappingURL=index.js.map
|
package/dist/ui/index.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
export { AdminAccountMenuProps, AdminChrome, AdminNote, AdminPage, AdminResource, AdminRouteState, AdminRouteTarget, AdminRouting, AdminSection, AdminSectionContext, AdminWorkspace, AdminWorkspaceNavProps, AvailabilitySectionOptions, BillingSectionOptions, ChapterAdmin, ChapterAdminAuthAdapter, ChapterAdminAuthConfig, ChapterAdminAuthLoadContext, ChapterAdminProps, ChapterAdminUser, CollectionSectionOptions, DashboardSectionOptions, EmailSectionOptions, MeetingsSectionOptions, NetworkShareActions, NetworkShareActionsProps, Panel, PeopleSectionOptions, RecordActions, RecordActionsProps, ThemeWarning, adminFetch, adminRouteFromUrl, adminRouteHref, adminSectionFromUrl, adminSectionHref, applicationLifecycleAdapter, availabilitySection, billingSection, collectionSection, dashboardSection, defaultAdminSections, defaultAdminWorkspaces, emailSection, loadChapterAdminConfig, loadChapterAdminUser, meetingsSection, peopleSection, useAdminResource } from './admin/index.js';
|
|
2
|
-
export {
|
|
3
|
-
|
|
2
|
+
export { C as ChapterCopyProvider, u as useChapterCopy } from '../copy-context-pDogTR4x.js';
|
|
3
|
+
export { ApiFn, BrandStyle, BrandStyleProps, JoinConfig, JoinFlowState, JoinIsland, JoinIslandProps, JoinStepRenderContext, JoinSubmitRenderContext, MemberProvisionalRenderContext, MembersArea, MembersAreaProps, PaymentPriceLines, PaymentStep, PaymentStepProps, RescheduleProps, Rescheduler, Slot, SlotPicker, SlotPickerClasses, SlotPickerProps, dayKey, dayLabel, fmtDate, fmtMoney, fullLabel, groupSlotsByDay, loadJoinResume, timeLabel, tzShort } from './member/index.js';
|
|
4
|
+
import 'preact';
|
|
4
5
|
import '@odla-ai/crm';
|
|
5
|
-
import '../types-CgWUQ2MH.js';
|
|
6
6
|
import '@odla-ai/crm/ui';
|
package/dist/ui/index.js
CHANGED
|
@@ -10,9 +10,10 @@ import {
|
|
|
10
10
|
fmtMoney,
|
|
11
11
|
fullLabel,
|
|
12
12
|
groupSlotsByDay,
|
|
13
|
+
loadJoinResume,
|
|
13
14
|
timeLabel,
|
|
14
15
|
tzShort
|
|
15
|
-
} from "../chunk-
|
|
16
|
+
} from "../chunk-OYXNI6VR.js";
|
|
16
17
|
import {
|
|
17
18
|
AdminNote,
|
|
18
19
|
AdminPage,
|
|
@@ -39,15 +40,18 @@ import {
|
|
|
39
40
|
meetingsSection,
|
|
40
41
|
peopleSection,
|
|
41
42
|
useAdminResource
|
|
42
|
-
} from "../chunk-
|
|
43
|
+
} from "../chunk-VCC4S6JU.js";
|
|
43
44
|
import {
|
|
44
|
-
BrandStyle
|
|
45
|
-
|
|
45
|
+
BrandStyle,
|
|
46
|
+
ChapterCopyProvider,
|
|
47
|
+
useChapterCopy
|
|
48
|
+
} from "../chunk-NTZSXAFT.js";
|
|
46
49
|
export {
|
|
47
50
|
AdminNote,
|
|
48
51
|
AdminPage,
|
|
49
52
|
BrandStyle,
|
|
50
53
|
ChapterAdmin,
|
|
54
|
+
ChapterCopyProvider,
|
|
51
55
|
JoinIsland,
|
|
52
56
|
MembersArea,
|
|
53
57
|
NetworkShareActions,
|
|
@@ -78,10 +82,12 @@ export {
|
|
|
78
82
|
groupSlotsByDay,
|
|
79
83
|
loadChapterAdminConfig,
|
|
80
84
|
loadChapterAdminUser,
|
|
85
|
+
loadJoinResume,
|
|
81
86
|
meetingsSection,
|
|
82
87
|
peopleSection,
|
|
83
88
|
timeLabel,
|
|
84
89
|
tzShort,
|
|
85
|
-
useAdminResource
|
|
90
|
+
useAdminResource,
|
|
91
|
+
useChapterCopy
|
|
86
92
|
};
|
|
87
93
|
//# sourceMappingURL=index.js.map
|
|
@@ -1,6 +1,7 @@
|
|
|
1
|
-
import * as
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
1
|
+
import * as preact from 'preact';
|
|
2
|
+
import { ComponentChildren, JSX } from 'preact';
|
|
3
|
+
import { b as ChapterCopy, c as ChapterBrand } from '../../copy-context-pDogTR4x.js';
|
|
4
|
+
export { C as ChapterCopyProvider, u as useChapterCopy } from '../../copy-context-pDogTR4x.js';
|
|
4
5
|
import '@odla-ai/crm';
|
|
5
6
|
|
|
6
7
|
/** A bookable slot: a start instant in epoch milliseconds. */
|
|
@@ -54,12 +55,34 @@ interface SlotPickerProps<T extends Slot = Slot> {
|
|
|
54
55
|
/** A day-chips + time-grid slot picker. Presentational and `onPick`-driven: it
|
|
55
56
|
* owns only the active-day selection; the caller owns slot data, the chosen
|
|
56
57
|
* slot, and booking. Shared by the join booking step and the member reschedule. */
|
|
57
|
-
declare function SlotPicker<T extends Slot = Slot>(props: SlotPickerProps<T>):
|
|
58
|
+
declare function SlotPicker<T extends Slot = Slot>(props: SlotPickerProps<T>): preact.JSX.Element;
|
|
58
59
|
|
|
59
60
|
/** Issue an authenticated request and parse the JSON response. Throws on a
|
|
60
61
|
* non-2xx status (the islands catch and surface a friendly message). */
|
|
61
62
|
type ApiFn = <T = unknown>(path: string, opts?: RequestInit) => Promise<T>;
|
|
62
63
|
|
|
64
|
+
/** The stable, non-meeting fields of an application (safe to expose to its own
|
|
65
|
+
* owner). */
|
|
66
|
+
interface ApplicationSummary {
|
|
67
|
+
id: string;
|
|
68
|
+
firstName: string | null;
|
|
69
|
+
lastName: string | null;
|
|
70
|
+
email: string | null;
|
|
71
|
+
status: string;
|
|
72
|
+
createdAt: number | null;
|
|
73
|
+
meetingLink: string | null;
|
|
74
|
+
paid: boolean;
|
|
75
|
+
renewalAt: number | null;
|
|
76
|
+
canceled: boolean;
|
|
77
|
+
}
|
|
78
|
+
/** A summary plus the reconciled meeting fields — the `application` the member
|
|
79
|
+
* area renders. */
|
|
80
|
+
interface MemberApplication extends ApplicationSummary {
|
|
81
|
+
meetingAt: number | null;
|
|
82
|
+
meetUrl: string | null;
|
|
83
|
+
timezone: string;
|
|
84
|
+
}
|
|
85
|
+
|
|
63
86
|
/** Props for {@link MembersArea}. */
|
|
64
87
|
interface MembersAreaProps {
|
|
65
88
|
api: ApiFn;
|
|
@@ -70,11 +93,23 @@ interface MembersAreaProps {
|
|
|
70
93
|
/** Where an accountless member goes to apply. Default "/join.html". */
|
|
71
94
|
applyHref?: string;
|
|
72
95
|
/** What a full (non-provisional) member sees below the account header. */
|
|
73
|
-
memberContent?:
|
|
96
|
+
memberContent?: ComponentChildren;
|
|
97
|
+
/** Resolved member-area copy. */
|
|
98
|
+
copy?: ChapterCopy["members"];
|
|
99
|
+
/** Replace the provisional application card without replacing auth/data load. */
|
|
100
|
+
renderProvisional?: (context: MemberProvisionalRenderContext) => ComponentChildren;
|
|
101
|
+
}
|
|
102
|
+
/** Data and actions supplied to a site's provisional-member render slot. */
|
|
103
|
+
interface MemberProvisionalRenderContext {
|
|
104
|
+
api: ApiFn;
|
|
105
|
+
application: MemberApplication | null;
|
|
106
|
+
applyHref: string;
|
|
107
|
+
reload: () => Promise<void>;
|
|
108
|
+
defaultContent: ComponentChildren;
|
|
74
109
|
}
|
|
75
110
|
/** The signed-in member area. Loads /api/me on mount and renders the account
|
|
76
111
|
* header plus the provisional application card or the full-member content. */
|
|
77
|
-
declare function MembersArea(props: MembersAreaProps):
|
|
112
|
+
declare function MembersArea(props: MembersAreaProps): preact.JSX.Element;
|
|
78
113
|
|
|
79
114
|
/** Props for {@link Rescheduler}. */
|
|
80
115
|
interface RescheduleProps {
|
|
@@ -85,10 +120,12 @@ interface RescheduleProps {
|
|
|
85
120
|
onRescheduled: () => void | Promise<void>;
|
|
86
121
|
/** Link text to open the picker (e.g. "Choose a time" for a first booking). */
|
|
87
122
|
label?: string;
|
|
123
|
+
/** Resolved rescheduling copy. */
|
|
124
|
+
copy?: ChapterCopy["members"]["reschedule"];
|
|
88
125
|
}
|
|
89
126
|
/** A collapsed "change your time" link that expands into a {@link SlotPicker} and
|
|
90
127
|
* rebooks on pick. Degrades to a message when scheduling is unavailable. */
|
|
91
|
-
declare function Rescheduler(props: RescheduleProps):
|
|
128
|
+
declare function Rescheduler(props: RescheduleProps): preact.JSX.Element;
|
|
92
129
|
|
|
93
130
|
/** The public join config (the shape `GET /api/join-config` returns). */
|
|
94
131
|
interface JoinConfig {
|
|
@@ -96,19 +133,82 @@ interface JoinConfig {
|
|
|
96
133
|
name: string;
|
|
97
134
|
paymentsReady: boolean;
|
|
98
135
|
refundPolicyText?: string;
|
|
136
|
+
/** Resolved copy for the packaged join flow. */
|
|
137
|
+
copy?: ChapterCopy["join"];
|
|
99
138
|
}
|
|
139
|
+
/** Server-validated state used to resume a join journey after a redirect. */
|
|
140
|
+
type JoinFlowState = {
|
|
141
|
+
step: "form";
|
|
142
|
+
} | {
|
|
143
|
+
step: "payment";
|
|
144
|
+
applicationId: string;
|
|
145
|
+
} | {
|
|
146
|
+
step: "paymentPending";
|
|
147
|
+
applicationId: string;
|
|
148
|
+
} | {
|
|
149
|
+
step: "booking";
|
|
150
|
+
applicationId: string;
|
|
151
|
+
} | {
|
|
152
|
+
step: "done";
|
|
153
|
+
applicationId: string;
|
|
154
|
+
booked: {
|
|
155
|
+
startAt: number;
|
|
156
|
+
timezone: string;
|
|
157
|
+
};
|
|
158
|
+
};
|
|
159
|
+
/** Canonical flow state supplied to a site's per-step heading render slot. */
|
|
160
|
+
interface JoinStepRenderContext {
|
|
161
|
+
state: JoinFlowState;
|
|
162
|
+
applicationId?: string;
|
|
163
|
+
}
|
|
164
|
+
/** Submission state supplied to a site's submit-control render slot. */
|
|
165
|
+
interface JoinSubmitRenderContext {
|
|
166
|
+
submitting: boolean;
|
|
167
|
+
disabled: boolean;
|
|
168
|
+
}
|
|
169
|
+
/** Load canonical server state for a capability-bearing application id. */
|
|
170
|
+
declare function loadJoinResume(applicationId: string, fetcher?: typeof fetch): Promise<JoinFlowState>;
|
|
100
171
|
/** Props for {@link JoinIsland}. */
|
|
101
172
|
interface JoinIslandProps {
|
|
102
173
|
config: JoinConfig;
|
|
103
174
|
/** The site's application form fields — inputs with `name` attributes; their
|
|
104
175
|
* values are collected via FormData and posted to /api/applications. */
|
|
105
|
-
children:
|
|
176
|
+
children: ComponentChildren;
|
|
106
177
|
/** Where the confirmation links after booking. Default "/members/". */
|
|
107
178
|
membersHref?: string;
|
|
179
|
+
/** Resolved join copy. Defaults to `config.copy`, then the nearest provider. */
|
|
180
|
+
copy?: ChapterCopy["join"];
|
|
181
|
+
/** Trusted initial state produced by the server, never raw URL parameters. */
|
|
182
|
+
initialState?: JoinFlowState;
|
|
183
|
+
/** Resolve redirect/query state against the server before resuming the flow. */
|
|
184
|
+
loadResume?: () => Promise<JoinFlowState | null>;
|
|
185
|
+
/** Render a heading or other site-owned framing above each packaged step. */
|
|
186
|
+
renderStepHeader?: (context: JoinStepRenderContext) => ComponentChildren;
|
|
187
|
+
/** Replace the packaged completion card while retaining flow orchestration. */
|
|
188
|
+
renderDone?: (context: Extract<JoinFlowState, {
|
|
189
|
+
step: "done";
|
|
190
|
+
}> & {
|
|
191
|
+
membersHref: string;
|
|
192
|
+
}) => ComponentChildren;
|
|
193
|
+
/** Replace the submit control without replacing the application form. */
|
|
194
|
+
renderSubmit?: (context: JoinSubmitRenderContext) => ComponentChildren;
|
|
195
|
+
/** Additional host validation gate for the submit action. */
|
|
196
|
+
submitDisabled?: boolean;
|
|
197
|
+
/** Stripe Elements presentation and site-owned payment content. */
|
|
198
|
+
payment?: {
|
|
199
|
+
appearance?: Record<string, unknown>;
|
|
200
|
+
fonts?: readonly Record<string, unknown>[];
|
|
201
|
+
renderPriceLines?: (lines: {
|
|
202
|
+
standardCents: number;
|
|
203
|
+
discountCents: number;
|
|
204
|
+
dueTodayCents: number;
|
|
205
|
+
}) => ComponentChildren;
|
|
206
|
+
children?: ComponentChildren;
|
|
207
|
+
};
|
|
108
208
|
}
|
|
109
209
|
/** The signup island. Renders the site's form, then drives payment (when the
|
|
110
210
|
* chapter charges) and booking (when a calendar is connected) to confirmation. */
|
|
111
|
-
declare function JoinIsland(props: JoinIslandProps):
|
|
211
|
+
declare function JoinIsland(props: JoinIslandProps): JSX.Element;
|
|
112
212
|
|
|
113
213
|
/** Props for {@link PaymentStep}. */
|
|
114
214
|
interface PaymentStepProps {
|
|
@@ -118,10 +218,26 @@ interface PaymentStepProps {
|
|
|
118
218
|
refundPolicyText: string;
|
|
119
219
|
/** Called once the payment succeeds (or is processing) — advance to booking. */
|
|
120
220
|
onPaid: () => void;
|
|
221
|
+
/** Stripe Elements appearance passed through without Chapter reinterpretation. */
|
|
222
|
+
appearance?: Record<string, unknown>;
|
|
223
|
+
/** Stripe Elements custom-font descriptors. */
|
|
224
|
+
fonts?: readonly Record<string, unknown>[];
|
|
225
|
+
/** Resolved payment-step copy. */
|
|
226
|
+
copy?: ChapterCopy["join"]["payment"];
|
|
227
|
+
/** Render the server-returned membership price breakdown. */
|
|
228
|
+
renderPriceLines?: (lines: PaymentPriceLines) => ComponentChildren;
|
|
229
|
+
/** Site-owned trust, security, or explanatory content. */
|
|
230
|
+
children?: ComponentChildren;
|
|
231
|
+
}
|
|
232
|
+
/** Server-authoritative membership amounts supplied to the payment price slot. */
|
|
233
|
+
interface PaymentPriceLines {
|
|
234
|
+
standardCents: number;
|
|
235
|
+
discountCents: number;
|
|
236
|
+
dueTodayCents: number;
|
|
121
237
|
}
|
|
122
238
|
/** The card-entry step: acknowledge the refund policy → create the subscription
|
|
123
239
|
* → mount Stripe Elements → confirm. */
|
|
124
|
-
declare function PaymentStep(props: PaymentStepProps):
|
|
240
|
+
declare function PaymentStep(props: PaymentStepProps): preact.JSX.Element;
|
|
125
241
|
|
|
126
242
|
/** Props for {@link BrandStyle}. */
|
|
127
243
|
interface BrandStyleProps {
|
|
@@ -131,6 +247,6 @@ interface BrandStyleProps {
|
|
|
131
247
|
}
|
|
132
248
|
/** Render a chapter's brand tokens as an inline <style> block (or nothing when
|
|
133
249
|
* there is no brand to theme). */
|
|
134
|
-
declare function BrandStyle(props: BrandStyleProps):
|
|
250
|
+
declare function BrandStyle(props: BrandStyleProps): preact.JSX.Element | null;
|
|
135
251
|
|
|
136
|
-
export { type ApiFn, BrandStyle, type BrandStyleProps, type JoinConfig, JoinIsland, type JoinIslandProps, MembersArea, type MembersAreaProps, PaymentStep, type PaymentStepProps, type RescheduleProps, Rescheduler, type Slot, SlotPicker, type SlotPickerClasses, type SlotPickerProps, dayKey, dayLabel, fmtDate, fmtMoney, fullLabel, groupSlotsByDay, timeLabel, tzShort };
|
|
252
|
+
export { type ApiFn, BrandStyle, type BrandStyleProps, type JoinConfig, type JoinFlowState, JoinIsland, type JoinIslandProps, type JoinStepRenderContext, type JoinSubmitRenderContext, type MemberProvisionalRenderContext, MembersArea, type MembersAreaProps, type PaymentPriceLines, PaymentStep, type PaymentStepProps, type RescheduleProps, Rescheduler, type Slot, SlotPicker, type SlotPickerClasses, type SlotPickerProps, dayKey, dayLabel, fmtDate, fmtMoney, fullLabel, groupSlotsByDay, loadJoinResume, timeLabel, tzShort };
|
package/dist/ui/member/index.js
CHANGED
|
@@ -10,14 +10,18 @@ import {
|
|
|
10
10
|
fmtMoney,
|
|
11
11
|
fullLabel,
|
|
12
12
|
groupSlotsByDay,
|
|
13
|
+
loadJoinResume,
|
|
13
14
|
timeLabel,
|
|
14
15
|
tzShort
|
|
15
|
-
} from "../../chunk-
|
|
16
|
+
} from "../../chunk-OYXNI6VR.js";
|
|
16
17
|
import {
|
|
17
|
-
BrandStyle
|
|
18
|
-
|
|
18
|
+
BrandStyle,
|
|
19
|
+
ChapterCopyProvider,
|
|
20
|
+
useChapterCopy
|
|
21
|
+
} from "../../chunk-NTZSXAFT.js";
|
|
19
22
|
export {
|
|
20
23
|
BrandStyle,
|
|
24
|
+
ChapterCopyProvider,
|
|
21
25
|
JoinIsland,
|
|
22
26
|
MembersArea,
|
|
23
27
|
PaymentStep,
|
|
@@ -29,7 +33,9 @@ export {
|
|
|
29
33
|
fmtMoney,
|
|
30
34
|
fullLabel,
|
|
31
35
|
groupSlotsByDay,
|
|
36
|
+
loadJoinResume,
|
|
32
37
|
timeLabel,
|
|
33
|
-
tzShort
|
|
38
|
+
tzShort,
|
|
39
|
+
useChapterCopy
|
|
34
40
|
};
|
|
35
41
|
//# sourceMappingURL=index.js.map
|