@odla-ai/chapter 0.35.0 → 0.37.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,8 +1,8 @@
1
1
  import * as preact from 'preact';
2
2
  import { ComponentChildren, JSX } from 'preact';
3
3
  import { CrmClient, Crm, CrmRecord } from '@odla-ai/crm';
4
- import { a as Chapter, b as ChapterCopy } from '../../copy-context-c1tqPXOR.js';
5
- export { C as ChapterCopyProvider, u as useChapterCopy } from '../../copy-context-c1tqPXOR.js';
4
+ import { a as Chapter, b as ChapterCopy, M as MemberContentDocument, E as EffectiveMemberContent, c as MemberContentTierAuthority } from '../../copy-context-Pbs3keLx.js';
5
+ export { C as ChapterCopyProvider, u as useChapterCopy } from '../../copy-context-Pbs3keLx.js';
6
6
  import { CrmLifecycleAdapter, CrmWorkspaceMasterContext, CrmWorkspaceRecordContext, RecordPanelTab } from '@odla-ai/crm/ui';
7
7
 
8
8
  /** Normalized public auth configuration consumed by the Clerk gate. */
@@ -286,6 +286,37 @@ declare function LeaderNetworkOverview({ ctx }: {
286
286
  ctx: AdminSectionContext;
287
287
  }): preact.JSX.Element;
288
288
 
289
+ /** Audited Chapter-admin surface for local decisions and effective Parent rows. */
290
+ declare function AdmissionGrantsWorkspace(props: {
291
+ getToken: () => Promise<string | null>;
292
+ }): JSX.Element;
293
+ /** Create the standard Chapter admission workspace definition. */
294
+ declare function admissionGrantsWorkspace(label?: string): AdminWorkspace;
295
+
296
+ /** Admin-safe inventory of inherited content, local content, tiers, and composition state. */
297
+ interface AdminMemberContentData {
298
+ parent: {
299
+ revision: number;
300
+ digest: string;
301
+ document: MemberContentDocument;
302
+ } | null;
303
+ chapter: {
304
+ revision: number;
305
+ document: MemberContentDocument;
306
+ } | null;
307
+ effective: EffectiveMemberContent;
308
+ tiers: MemberContentTierAuthority[];
309
+ localAuthoring: boolean;
310
+ }
311
+ /** Agent-friendly editor with read-only inherited inventory and one local JSON contract. */
312
+ declare function MemberContentAdmin({ ctx, initialData, }: {
313
+ ctx: AdminSectionContext;
314
+ /** Exact preloaded state for package-identical previews and SSR tests. */
315
+ initialData?: AdminMemberContentData;
316
+ }): preact.JSX.Element;
317
+ /** Reusable nested admin section for the standard Settings workspace. */
318
+ declare function memberContentSection(): AdminSection;
319
+
289
320
  /** Fetch a JSON `/api/admin/*` route with the admin bearer token. Throws on a
290
321
  * non-2xx (the body's `error`, else the status). */
291
322
  declare function adminFetch<T = unknown>(getToken: () => Promise<string | null>, path: string, init?: RequestInit): Promise<T>;
@@ -318,4 +349,4 @@ declare function AdminNote({ children }: {
318
349
  children: ComponentChildren;
319
350
  }): JSX.Element;
320
351
 
321
- 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, LeaderNetworkOverview, type MeetingsSectionOptions, NetworkRecordsWorkspace, 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, networkRecordsWorkspace, peopleSection, useAdminResource };
352
+ export { type AdminAccountMenuProps, type AdminChrome, type AdminMemberContentData, AdminNote, AdminPage, type AdminResource, type AdminRouteState, type AdminRouteTarget, type AdminRouting, type AdminSection, type AdminSectionContext, type AdminWorkspace, type AdminWorkspaceNavProps, AdmissionGrantsWorkspace, type AvailabilitySectionOptions, type BillingSectionOptions, ChapterAdmin, type ChapterAdminAuthAdapter, type ChapterAdminAuthConfig, type ChapterAdminAuthLoadContext, type ChapterAdminProps, type ChapterAdminUser, type CollectionSectionOptions, type DashboardSectionOptions, type EmailSectionOptions, LeaderNetworkOverview, type MeetingsSectionOptions, MemberContentAdmin, NetworkRecordsWorkspace, NetworkShareActions, type NetworkShareActionsProps, Panel, type PeopleSectionOptions, RecordActions, type RecordActionsProps, ThemeWarning, adminFetch, adminRouteFromUrl, adminRouteHref, adminSectionFromUrl, adminSectionHref, admissionGrantsWorkspace, applicationLifecycleAdapter, availabilitySection, billingSection, collectionSection, dashboardSection, defaultAdminSections, defaultAdminWorkspaces, emailSection, loadChapterAdminConfig, loadChapterAdminUser, meetingsSection, memberContentSection, networkRecordsWorkspace, peopleSection, useAdminResource };
@@ -1,8 +1,10 @@
1
1
  import {
2
2
  AdminNote,
3
3
  AdminPage,
4
+ AdmissionGrantsWorkspace,
4
5
  ChapterAdmin,
5
6
  LeaderNetworkOverview,
7
+ MemberContentAdmin,
6
8
  NetworkRecordsWorkspace,
7
9
  NetworkShareActions,
8
10
  Panel,
@@ -13,6 +15,7 @@ import {
13
15
  adminRouteHref,
14
16
  adminSectionFromUrl,
15
17
  adminSectionHref,
18
+ admissionGrantsWorkspace,
16
19
  applicationLifecycleAdapter,
17
20
  availabilitySection,
18
21
  billingSection,
@@ -24,20 +27,23 @@ import {
24
27
  loadChapterAdminConfig,
25
28
  loadChapterAdminUser,
26
29
  meetingsSection,
30
+ memberContentSection,
27
31
  networkRecordsWorkspace,
28
32
  peopleSection,
29
33
  useAdminResource
30
- } from "../../chunk-TXE5ZDI4.js";
34
+ } from "../../chunk-SI3JHSEX.js";
31
35
  import {
32
36
  ChapterCopyProvider,
33
37
  useChapterCopy
34
- } from "../../chunk-JAWTIROV.js";
38
+ } from "../../chunk-IAWBE5PX.js";
35
39
  export {
36
40
  AdminNote,
37
41
  AdminPage,
42
+ AdmissionGrantsWorkspace,
38
43
  ChapterAdmin,
39
44
  ChapterCopyProvider,
40
45
  LeaderNetworkOverview,
46
+ MemberContentAdmin,
41
47
  NetworkRecordsWorkspace,
42
48
  NetworkShareActions,
43
49
  Panel,
@@ -48,6 +54,7 @@ export {
48
54
  adminRouteHref,
49
55
  adminSectionFromUrl,
50
56
  adminSectionHref,
57
+ admissionGrantsWorkspace,
51
58
  applicationLifecycleAdapter,
52
59
  availabilitySection,
53
60
  billingSection,
@@ -59,6 +66,7 @@ export {
59
66
  loadChapterAdminConfig,
60
67
  loadChapterAdminUser,
61
68
  meetingsSection,
69
+ memberContentSection,
62
70
  networkRecordsWorkspace,
63
71
  peopleSection,
64
72
  useAdminResource,
@@ -1,6 +1,6 @@
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, LeaderNetworkOverview, MeetingsSectionOptions, NetworkRecordsWorkspace, NetworkShareActions, NetworkShareActionsProps, Panel, PeopleSectionOptions, RecordActions, RecordActionsProps, ThemeWarning, adminFetch, adminRouteFromUrl, adminRouteHref, adminSectionFromUrl, adminSectionHref, applicationLifecycleAdapter, availabilitySection, billingSection, collectionSection, dashboardSection, defaultAdminSections, defaultAdminWorkspaces, emailSection, loadChapterAdminConfig, loadChapterAdminUser, meetingsSection, networkRecordsWorkspace, peopleSection, useAdminResource } from './admin/index.js';
2
- export { C as ChapterCopyProvider, u as useChapterCopy } from '../copy-context-c1tqPXOR.js';
3
- export { ApiFn, BrandStyle, BrandStyleProps, JoinBookingSimulation, JoinConfig, JoinFlowState, JoinIsland, JoinIslandProps, JoinSimulation, JoinStepRenderContext, JoinSubmitRenderContext, JoinTier, JoinTierRenderContext, MEMBERSHIP_CARD_TOKEN_DEFAULTS, MemberProvisionalRenderContext, MembersArea, MembersAreaProps, MembershipCardTokenName, MembershipCards, MembershipCardsMode, MembershipCardsProps, PaymentPriceLines, PaymentStep, PaymentStepProps, PaymentStepSimulation, RescheduleProps, Rescheduler, Slot, SlotPicker, SlotPickerClasses, SlotPickerProps, TierPlaceholder, dayKey, dayLabel, fmtDate, fmtMoney, fullLabel, groupSlotsByDay, loadJoinResume, membershipApplicationHref, tierNeedsPayment, timeLabel, tzShort, useTierSelection } from './member/index.js';
1
+ export { AdminAccountMenuProps, AdminChrome, AdminMemberContentData, AdminNote, AdminPage, AdminResource, AdminRouteState, AdminRouteTarget, AdminRouting, AdminSection, AdminSectionContext, AdminWorkspace, AdminWorkspaceNavProps, AdmissionGrantsWorkspace, AvailabilitySectionOptions, BillingSectionOptions, ChapterAdmin, ChapterAdminAuthAdapter, ChapterAdminAuthConfig, ChapterAdminAuthLoadContext, ChapterAdminProps, ChapterAdminUser, CollectionSectionOptions, DashboardSectionOptions, EmailSectionOptions, LeaderNetworkOverview, MeetingsSectionOptions, MemberContentAdmin, NetworkRecordsWorkspace, NetworkShareActions, NetworkShareActionsProps, Panel, PeopleSectionOptions, RecordActions, RecordActionsProps, ThemeWarning, adminFetch, adminRouteFromUrl, adminRouteHref, adminSectionFromUrl, adminSectionHref, admissionGrantsWorkspace, applicationLifecycleAdapter, availabilitySection, billingSection, collectionSection, dashboardSection, defaultAdminSections, defaultAdminWorkspaces, emailSection, loadChapterAdminConfig, loadChapterAdminUser, meetingsSection, memberContentSection, networkRecordsWorkspace, peopleSection, useAdminResource } from './admin/index.js';
2
+ export { C as ChapterCopyProvider, u as useChapterCopy } from '../copy-context-Pbs3keLx.js';
3
+ export { ApiFn, BrandStyle, BrandStyleProps, GiftOfferCards, GiftOfferCardsMode, GiftOfferCardsProps, JoinBookingSimulation, JoinConfig, JoinFlowState, JoinIsland, JoinIslandProps, JoinSimulation, JoinStepRenderContext, JoinSubmitRenderContext, JoinTier, JoinTierRenderContext, MEMBERSHIP_CARD_TOKEN_DEFAULTS, MemberContentArea, MemberContentAreaProps, MemberGifts, MemberProvisionalRenderContext, MembersArea, MembersAreaProps, MembershipCardTokenName, MembershipCards, MembershipCardsMode, MembershipCardsProps, PaymentPriceLines, PaymentStep, PaymentStepProps, PaymentStepSimulation, RescheduleProps, Rescheduler, Slot, SlotPicker, SlotPickerClasses, SlotPickerProps, SubResponse, TierPlaceholder, dayKey, dayLabel, fmtDate, fmtMoney, fullLabel, groupSlotsByDay, loadJoinResume, membershipApplicationHref, tierNeedsPayment, timeLabel, tzShort, useTierSelection } from './member/index.js';
4
4
  import 'preact';
5
5
  import '@odla-ai/crm';
6
6
  import '@odla-ai/crm/ui';
package/dist/ui/index.js CHANGED
@@ -1,6 +1,9 @@
1
1
  import {
2
+ GiftOfferCards,
2
3
  JoinIsland,
3
4
  MEMBERSHIP_CARD_TOKEN_DEFAULTS,
5
+ MemberContentArea,
6
+ MemberGifts,
4
7
  MembersArea,
5
8
  MembershipCards,
6
9
  PaymentStep,
@@ -19,12 +22,14 @@ import {
19
22
  timeLabel,
20
23
  tzShort,
21
24
  useTierSelection
22
- } from "../chunk-UJIVBGL5.js";
25
+ } from "../chunk-BIYWPPH6.js";
23
26
  import {
24
27
  AdminNote,
25
28
  AdminPage,
29
+ AdmissionGrantsWorkspace,
26
30
  ChapterAdmin,
27
31
  LeaderNetworkOverview,
32
+ MemberContentAdmin,
28
33
  NetworkRecordsWorkspace,
29
34
  NetworkShareActions,
30
35
  Panel,
@@ -35,6 +40,7 @@ import {
35
40
  adminRouteHref,
36
41
  adminSectionFromUrl,
37
42
  adminSectionHref,
43
+ admissionGrantsWorkspace,
38
44
  applicationLifecycleAdapter,
39
45
  availabilitySection,
40
46
  billingSection,
@@ -46,25 +52,31 @@ import {
46
52
  loadChapterAdminConfig,
47
53
  loadChapterAdminUser,
48
54
  meetingsSection,
55
+ memberContentSection,
49
56
  networkRecordsWorkspace,
50
57
  peopleSection,
51
58
  useAdminResource
52
- } from "../chunk-TXE5ZDI4.js";
59
+ } from "../chunk-SI3JHSEX.js";
53
60
  import {
54
61
  BrandStyle,
55
62
  ChapterCopyProvider,
56
63
  useChapterCopy
57
- } from "../chunk-JAWTIROV.js";
64
+ } from "../chunk-IAWBE5PX.js";
58
65
  import "../chunk-IVXVECKR.js";
59
66
  export {
60
67
  AdminNote,
61
68
  AdminPage,
69
+ AdmissionGrantsWorkspace,
62
70
  BrandStyle,
63
71
  ChapterAdmin,
64
72
  ChapterCopyProvider,
73
+ GiftOfferCards,
65
74
  JoinIsland,
66
75
  LeaderNetworkOverview,
67
76
  MEMBERSHIP_CARD_TOKEN_DEFAULTS,
77
+ MemberContentAdmin,
78
+ MemberContentArea,
79
+ MemberGifts,
68
80
  MembersArea,
69
81
  MembershipCards,
70
82
  NetworkRecordsWorkspace,
@@ -81,6 +93,7 @@ export {
81
93
  adminRouteHref,
82
94
  adminSectionFromUrl,
83
95
  adminSectionHref,
96
+ admissionGrantsWorkspace,
84
97
  applicationLifecycleAdapter,
85
98
  availabilitySection,
86
99
  billingSection,
@@ -99,6 +112,7 @@ export {
99
112
  loadChapterAdminUser,
100
113
  loadJoinResume,
101
114
  meetingsSection,
115
+ memberContentSection,
102
116
  membershipApplicationHref,
103
117
  networkRecordsWorkspace,
104
118
  peopleSection,
@@ -1,7 +1,7 @@
1
1
  import * as preact from 'preact';
2
2
  import { ComponentChildren, JSX } from 'preact';
3
- import { b as ChapterCopy, c as ChapterBrand } from '../../copy-context-c1tqPXOR.js';
4
- export { C as ChapterCopyProvider, u as useChapterCopy } from '../../copy-context-c1tqPXOR.js';
3
+ import { d as MemberContentProjection, e as MemberContentPageProjection, b as ChapterCopy, f as ChapterBrand } from '../../copy-context-Pbs3keLx.js';
4
+ export { C as ChapterCopyProvider, u as useChapterCopy } from '../../copy-context-Pbs3keLx.js';
5
5
  import '@odla-ai/crm';
6
6
 
7
7
  /** A bookable slot: a start instant in epoch milliseconds. */
@@ -74,6 +74,8 @@ interface ApplicationSummary {
74
74
  paid: boolean;
75
75
  renewalAt: number | null;
76
76
  canceled: boolean;
77
+ /** Server-authoritative membership tier selected on this application. */
78
+ tierId: string | null;
77
79
  }
78
80
  /** A summary plus the reconciled meeting fields — the `application` the member
79
81
  * area renders. */
@@ -83,6 +85,27 @@ interface MemberApplication extends ApplicationSummary {
83
85
  timezone: string;
84
86
  }
85
87
 
88
+ /** Inputs for the stock authenticated member-content navigator. */
89
+ interface MemberContentAreaProps {
90
+ api: ApiFn;
91
+ /** Defaults to the package-owned `/api/member-content` projection. */
92
+ path?: string;
93
+ initialPageId?: string;
94
+ /** Exact preloaded projection for SSR, tests, or package-identical previews. */
95
+ initialData?: MemberContentProjection;
96
+ /** Return a host-owned upgrade URL. Omit to render an informational offer. */
97
+ upsellHref?: (tierId: string, page: MemberContentPageProjection) => string | undefined;
98
+ /** Optional action for a host-owned upgrade journey. */
99
+ onUpsell?: (tierId: string, page: MemberContentPageProjection) => void;
100
+ loadingContent?: ComponentChildren;
101
+ emptyContent?: ComponentChildren;
102
+ }
103
+ /**
104
+ * Render the exact server-filtered catalog. This component never receives a
105
+ * restricted body: locked access is a wire-level omission, not a CSS gate.
106
+ */
107
+ declare function MemberContentArea(props: MemberContentAreaProps): preact.JSX.Element;
108
+
86
109
  /** Props for {@link MembersArea}. */
87
110
  interface MembersAreaProps {
88
111
  api: ApiFn;
@@ -94,6 +117,8 @@ interface MembersAreaProps {
94
117
  applyHref?: string;
95
118
  /** What a full (non-provisional) member sees below the account header. */
96
119
  memberContent?: ComponentChildren;
120
+ /** Opt into the standard server-filtered member-page navigator. */
121
+ memberPages?: true | Omit<MemberContentAreaProps, "api">;
97
122
  /** Resolved member-area copy. */
98
123
  copy?: ChapterCopy["members"];
99
124
  /** Replace the provisional application card without replacing auth/data load. */
@@ -140,7 +165,12 @@ interface PaymentStepProps {
140
165
  /** Refund-policy copy the applicant must acknowledge to start payment. */
141
166
  refundPolicyText: string;
142
167
  /** Called once the payment succeeds (or is processing) — advance to booking. */
143
- onPaid: () => void;
168
+ onPaid: (result: {
169
+ gift: boolean;
170
+ giftCode?: string;
171
+ }) => void;
172
+ /** Override checkout creation for authenticated member gift purchases. */
173
+ startCheckout?: () => Promise<SubResponse>;
144
174
  /** Stripe Elements appearance passed through without Chapter reinterpretation. */
145
175
  appearance?: Record<string, unknown>;
146
176
  /** Stripe Elements custom-font descriptors. */
@@ -168,6 +198,14 @@ interface PaymentPriceLines {
168
198
  interface PaymentStepSimulation {
169
199
  lineItems: PaymentPriceLines;
170
200
  }
201
+ /** Checkout setup response shared by membership and gift Payment Element flows. */
202
+ interface SubResponse {
203
+ clientSecret?: string;
204
+ publishableKey?: string | null;
205
+ lineItems?: PaymentPriceLines;
206
+ gift?: boolean;
207
+ giftCode?: string;
208
+ }
171
209
  /** The card-entry step: acknowledge the refund policy → create the subscription
172
210
  * → mount Stripe Elements → confirm. */
173
211
  declare function PaymentStep(props: PaymentStepProps): preact.JSX.Element;
@@ -238,6 +276,32 @@ declare function TierPlaceholder(context: JoinTierRenderContext): ComponentChild
238
276
  */
239
277
  declare function tierNeedsPayment(selected: JoinTier | null, paymentsReady: boolean): boolean;
240
278
 
279
+ /** Membership tier or standalone entitlement fulfilled by redemption. */
280
+ type GiftOfferTarget = {
281
+ type: "tier";
282
+ tierId: string;
283
+ } | {
284
+ type: "entitlement";
285
+ entitlementKey: string;
286
+ };
287
+ /** Server-authored gift SKU; provider identifiers never reach public config. */
288
+ interface GiftOffer {
289
+ id: string;
290
+ target: GiftOfferTarget;
291
+ billingMode: "one_time" | "subscription";
292
+ stripePriceId: string;
293
+ priceCents: number;
294
+ currency: string;
295
+ redemptionLifetimeHours: number;
296
+ activeFrom?: number;
297
+ activeUntil?: number;
298
+ title: string;
299
+ description: string;
300
+ ctaLabel: string;
301
+ }
302
+ /** Provider-free gift offer shape rendered by Chapter and exact CMS previews. */
303
+ type PublicGiftOffer = Omit<GiftOffer, "stripePriceId" | "target">;
304
+
241
305
  /** The public join config (the shape `GET /api/join-config` returns). */
242
306
  interface JoinConfig {
243
307
  id: string;
@@ -249,6 +313,7 @@ interface JoinConfig {
249
313
  tiers?: readonly JoinTier[];
250
314
  /** Resolved copy for the packaged join flow. */
251
315
  copy?: ChapterCopy["join"];
316
+ giftOffers?: readonly PublicGiftOffer[];
252
317
  }
253
318
  /** Server-validated state used to resume a join journey after a redirect. */
254
319
  type JoinFlowState = {
@@ -262,6 +327,14 @@ type JoinFlowState = {
262
327
  } | {
263
328
  step: "booking";
264
329
  applicationId: string;
330
+ } | {
331
+ step: "accepted";
332
+ applicationId: string;
333
+ } | {
334
+ step: "gift";
335
+ applicationId: string;
336
+ claimId?: string;
337
+ code?: string;
265
338
  } | {
266
339
  step: "done";
267
340
  applicationId: string;
@@ -301,12 +374,24 @@ interface JoinIslandProps {
301
374
  }> & {
302
375
  membersHref: string;
303
376
  }) => ComponentChildren;
377
+ /** Replace the no-interview acceptance card while retaining orchestration. */
378
+ renderAccepted?: (context: Extract<JoinFlowState, {
379
+ step: "accepted";
380
+ }> & {
381
+ membersHref: string;
382
+ }) => ComponentChildren;
383
+ /** Replace the one-time gift-code card while retaining capability recovery. */
384
+ renderGift?: (context: Extract<JoinFlowState, {
385
+ step: "gift";
386
+ }>) => ComponentChildren;
304
387
  /** Replace the submit control without replacing the application form. */
305
388
  renderSubmit?: (context: JoinSubmitRenderContext) => ComponentChildren;
306
389
  /** Render the site's tier chooser; the fallback is intentionally unstyled. */
307
390
  renderTiers?: (context: JoinTierRenderContext) => ComponentChildren;
308
391
  /** Preselect a tier when it is offered. */
309
392
  initialTierId?: string;
393
+ /** Preselect a gift offer instead of self-membership. */
394
+ initialGiftOfferId?: string;
310
395
  /** Additional host validation gate for the submit action. */
311
396
  submitDisabled?: boolean;
312
397
  /** Stripe Elements presentation and site-owned payment content. */
@@ -326,9 +411,8 @@ interface JoinIslandProps {
326
411
 
327
412
  /** Load canonical server state for a capability-bearing application id. */
328
413
  declare function loadJoinResume(applicationId: string, fetcher?: typeof fetch): Promise<JoinFlowState>;
329
- /** The signup island. Renders the site's form, keeps one application
330
- * `submissionId` across ambiguous retries, then drives payment (when the
331
- * chapter charges) and booking (when a calendar is connected) to confirmation. */
414
+
415
+ /** Signup island with stable retries and server-driven payment/booking continuation. */
332
416
  declare function JoinIsland(props: JoinIslandProps): JSX.Element;
333
417
 
334
418
  /** The first stable, shared Chapter membership-page renderer contract. */
@@ -417,6 +501,26 @@ declare function membershipApplicationHref(applicationPath: string | undefined,
417
501
  */
418
502
  declare function MembershipCards(props: MembershipCardsProps): JSX.Element;
419
503
 
504
+ /** Interactive live selection or inert exact-preview rendering. */
505
+ type GiftOfferCardsMode = "select" | "preview";
506
+ /** Public provider-free offer-card renderer inputs. */
507
+ interface GiftOfferCardsProps {
508
+ offers: readonly PublicGiftOffer[];
509
+ mode?: GiftOfferCardsMode;
510
+ selectedOfferId?: string | null;
511
+ onSelect?: (offerId: string) => void;
512
+ ariaLabel?: string;
513
+ }
514
+ /** Exact Chapter gift-offer renderer shared by live signup, members, and CMS preview. */
515
+ declare function GiftOfferCards(props: GiftOfferCardsProps): JSX.Element;
516
+
517
+ /** Authenticated buyer ledger, checkout, code rotation, and beneficiary redemption. */
518
+ declare function MemberGifts(props: {
519
+ api: ApiFn;
520
+ copy: ChapterCopy["members"]["gifts"];
521
+ paymentCopy: ChapterCopy["join"]["payment"];
522
+ }): preact.JSX.Element | null;
523
+
420
524
  /** Props for {@link BrandStyle}. */
421
525
  interface BrandStyleProps {
422
526
  brand: ChapterBrand | undefined;
@@ -427,4 +531,4 @@ interface BrandStyleProps {
427
531
  * there is no brand to theme). */
428
532
  declare function BrandStyle(props: BrandStyleProps): preact.JSX.Element | null;
429
533
 
430
- export { type ApiFn, BrandStyle, type BrandStyleProps, type JoinBookingSimulation, type JoinConfig, type JoinFlowState, JoinIsland, type JoinIslandProps, type JoinSimulation, type JoinStepRenderContext, type JoinSubmitRenderContext, type JoinTier, type JoinTierRenderContext, MEMBERSHIP_CARD_TOKEN_DEFAULTS, type MemberProvisionalRenderContext, MembersArea, type MembersAreaProps, type MembershipCardTokenName, MembershipCards, type MembershipCardsMode, type MembershipCardsProps, type PaymentPriceLines, PaymentStep, type PaymentStepProps, type PaymentStepSimulation, type RescheduleProps, Rescheduler, type Slot, SlotPicker, type SlotPickerClasses, type SlotPickerProps, TierPlaceholder, dayKey, dayLabel, fmtDate, fmtMoney, fullLabel, groupSlotsByDay, loadJoinResume, membershipApplicationHref, tierNeedsPayment, timeLabel, tzShort, useTierSelection };
534
+ export { type ApiFn, BrandStyle, type BrandStyleProps, GiftOfferCards, type GiftOfferCardsMode, type GiftOfferCardsProps, type JoinBookingSimulation, type JoinConfig, type JoinFlowState, JoinIsland, type JoinIslandProps, type JoinSimulation, type JoinStepRenderContext, type JoinSubmitRenderContext, type JoinTier, type JoinTierRenderContext, MEMBERSHIP_CARD_TOKEN_DEFAULTS, MemberContentArea, type MemberContentAreaProps, MemberGifts, type MemberProvisionalRenderContext, MembersArea, type MembersAreaProps, type MembershipCardTokenName, MembershipCards, type MembershipCardsMode, type MembershipCardsProps, type PaymentPriceLines, PaymentStep, type PaymentStepProps, type PaymentStepSimulation, type RescheduleProps, Rescheduler, type Slot, SlotPicker, type SlotPickerClasses, type SlotPickerProps, type SubResponse, TierPlaceholder, dayKey, dayLabel, fmtDate, fmtMoney, fullLabel, groupSlotsByDay, loadJoinResume, membershipApplicationHref, tierNeedsPayment, timeLabel, tzShort, useTierSelection };
@@ -1,6 +1,9 @@
1
1
  import {
2
+ GiftOfferCards,
2
3
  JoinIsland,
3
4
  MEMBERSHIP_CARD_TOKEN_DEFAULTS,
5
+ MemberContentArea,
6
+ MemberGifts,
4
7
  MembersArea,
5
8
  MembershipCards,
6
9
  PaymentStep,
@@ -19,18 +22,21 @@ import {
19
22
  timeLabel,
20
23
  tzShort,
21
24
  useTierSelection
22
- } from "../../chunk-UJIVBGL5.js";
25
+ } from "../../chunk-BIYWPPH6.js";
23
26
  import {
24
27
  BrandStyle,
25
28
  ChapterCopyProvider,
26
29
  useChapterCopy
27
- } from "../../chunk-JAWTIROV.js";
30
+ } from "../../chunk-IAWBE5PX.js";
28
31
  import "../../chunk-IVXVECKR.js";
29
32
  export {
30
33
  BrandStyle,
31
34
  ChapterCopyProvider,
35
+ GiftOfferCards,
32
36
  JoinIsland,
33
37
  MEMBERSHIP_CARD_TOKEN_DEFAULTS,
38
+ MemberContentArea,
39
+ MemberGifts,
34
40
  MembersArea,
35
41
  MembershipCards,
36
42
  PaymentStep,