@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.
@@ -1,7 +1,8 @@
1
- import * as react from 'react';
2
- import { ReactNode } from 'react';
1
+ import * as preact from 'preact';
2
+ import { ComponentChildren, JSX } from 'preact';
3
3
  import { CrmClient, Crm, CrmRecord } from '@odla-ai/crm';
4
- import { C as Chapter } from '../../types-CgWUQ2MH.js';
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?: ReactNode;
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
- render: (ctx: AdminSectionContext) => ReactNode;
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) => ReactNode;
115
- renderAccountMenu?: (props: AdminAccountMenuProps) => ReactNode;
116
- renderWorkspaceNav?: (props: AdminWorkspaceNavProps) => ReactNode;
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) => ReactNode;
136
- renderWorkspaceNav?: (props: AdminWorkspaceNavProps) => ReactNode;
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): react.JSX.Element;
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">): CrmLifecycleAdapter;
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) => ReactNode;
171
- renderMaster?: (context: CrmWorkspaceMasterContext, ctx: AdminSectionContext) => ReactNode;
172
- renderDetailHeader?: (context: CrmWorkspaceRecordContext, ctx: AdminSectionContext) => ReactNode;
173
- renderEmptyDetail?: (context: CrmWorkspaceMasterContext, ctx: AdminSectionContext) => ReactNode;
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): react.JSX.Element | null;
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): react.JSX.Element | null;
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 React state, re-fetching on `refresh()`
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: ReactNode;
278
- }): react.JSX.Element;
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?: ReactNode;
282
- actions?: ReactNode;
283
- children: ReactNode;
284
- }): react.JSX.Element;
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(): react.JSX.Element | null;
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: ReactNode;
290
- }): react.JSX.Element;
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 };
@@ -24,12 +24,16 @@ import {
24
24
  meetingsSection,
25
25
  peopleSection,
26
26
  useAdminResource
27
- } from "../../chunk-IWW5VAAC.js";
28
- import "../../chunk-VZPBTTO3.js";
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
@@ -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 { ApiFn, BrandStyle, BrandStyleProps, JoinConfig, JoinIsland, JoinIslandProps, MembersArea, MembersAreaProps, PaymentStep, PaymentStepProps, RescheduleProps, Rescheduler, Slot, SlotPicker, SlotPickerClasses, SlotPickerProps, dayKey, dayLabel, fmtDate, fmtMoney, fullLabel, groupSlotsByDay, timeLabel, tzShort } from './member/index.js';
3
- import 'react';
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-ILGUJXSB.js";
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-IWW5VAAC.js";
43
+ } from "../chunk-VCC4S6JU.js";
43
44
  import {
44
- BrandStyle
45
- } from "../chunk-VZPBTTO3.js";
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 react from 'react';
2
- import { ReactNode } from 'react';
3
- import { a as ChapterBrand } from '../../types-CgWUQ2MH.js';
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>): react.JSX.Element;
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?: ReactNode;
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): react.JSX.Element;
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): react.JSX.Element;
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: ReactNode;
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): react.JSX.Element;
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): react.JSX.Element;
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): react.JSX.Element | null;
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 };
@@ -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-ILGUJXSB.js";
16
+ } from "../../chunk-OYXNI6VR.js";
16
17
  import {
17
- BrandStyle
18
- } from "../../chunk-VZPBTTO3.js";
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