@odla-ai/chapter 0.31.3 → 0.32.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-HAhNTZdl.js';
5
- export { C as ChapterCopyProvider, u as useChapterCopy } from '../../copy-context-HAhNTZdl.js';
4
+ import { a as Chapter, b as ChapterCopy } from '../../copy-context-BXBEdp4p.js';
5
+ export { C as ChapterCopyProvider, u as useChapterCopy } from '../../copy-context-BXBEdp4p.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. */
@@ -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, 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-HAhNTZdl.js';
3
- export { ApiFn, BrandStyle, BrandStyleProps, JoinConfig, JoinFlowState, JoinIsland, JoinIslandProps, JoinStepRenderContext, JoinSubmitRenderContext, JoinTier, JoinTierRenderContext, MemberProvisionalRenderContext, MembersArea, MembersAreaProps, PaymentPriceLines, PaymentStep, PaymentStepProps, RescheduleProps, Rescheduler, Slot, SlotPicker, SlotPickerClasses, SlotPickerProps, TierPlaceholder, dayKey, dayLabel, fmtDate, fmtMoney, fullLabel, groupSlotsByDay, loadJoinResume, tierNeedsPayment, timeLabel, tzShort, useTierSelection } from './member/index.js';
2
+ export { C as ChapterCopyProvider, u as useChapterCopy } from '../copy-context-BXBEdp4p.js';
3
+ export { ApiFn, BrandStyle, BrandStyleProps, JoinConfig, JoinFlowState, JoinIsland, JoinIslandProps, JoinStepRenderContext, JoinSubmitRenderContext, JoinTier, JoinTierRenderContext, MemberProvisionalRenderContext, MembersArea, MembersAreaProps, MembershipCards, MembershipCardsMode, MembershipCardsProps, PaymentPriceLines, PaymentStep, PaymentStepProps, RescheduleProps, Rescheduler, Slot, SlotPicker, SlotPickerClasses, SlotPickerProps, 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,7 @@
1
1
  import {
2
2
  JoinIsland,
3
3
  MembersArea,
4
+ MembershipCards,
4
5
  PaymentStep,
5
6
  Rescheduler,
6
7
  SlotPicker,
@@ -12,11 +13,12 @@ import {
12
13
  fullLabel,
13
14
  groupSlotsByDay,
14
15
  loadJoinResume,
16
+ membershipApplicationHref,
15
17
  tierNeedsPayment,
16
18
  timeLabel,
17
19
  tzShort,
18
20
  useTierSelection
19
- } from "../chunk-QWMP6TSM.js";
21
+ } from "../chunk-BBCT7U3D.js";
20
22
  import {
21
23
  AdminNote,
22
24
  AdminPage,
@@ -62,6 +64,7 @@ export {
62
64
  JoinIsland,
63
65
  LeaderNetworkOverview,
64
66
  MembersArea,
67
+ MembershipCards,
65
68
  NetworkRecordsWorkspace,
66
69
  NetworkShareActions,
67
70
  Panel,
@@ -94,6 +97,7 @@ export {
94
97
  loadChapterAdminUser,
95
98
  loadJoinResume,
96
99
  meetingsSection,
100
+ membershipApplicationHref,
97
101
  networkRecordsWorkspace,
98
102
  peopleSection,
99
103
  tierNeedsPayment,
@@ -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-HAhNTZdl.js';
4
- export { C as ChapterCopyProvider, u as useChapterCopy } from '../../copy-context-HAhNTZdl.js';
3
+ import { b as ChapterCopy, c as ChapterBrand } from '../../copy-context-BXBEdp4p.js';
4
+ export { C as ChapterCopyProvider, u as useChapterCopy } from '../../copy-context-BXBEdp4p.js';
5
5
  import '@odla-ai/crm';
6
6
 
7
7
  /** A bookable slot: a start instant in epoch milliseconds. */
@@ -270,6 +270,77 @@ interface JoinIslandProps {
270
270
  * chapter charges) and booking (when a calendar is connected) to confirmation. */
271
271
  declare function JoinIsland(props: JoinIslandProps): JSX.Element;
272
272
 
273
+ /** The first stable, shared Chapter membership-page renderer contract. */
274
+ declare const MEMBERSHIP_PAGE_RENDERER: "membership-cards-v1";
275
+ /** Fixed visual emphasis choices supported by the versioned card renderer. */
276
+ type MembershipTierVariant = "standard" | "featured" | "supporting";
277
+ /** A bounded, token-rendered aside within one membership card. */
278
+ interface MembershipTierCallout {
279
+ label?: string;
280
+ bodyMarkdown: string;
281
+ }
282
+ /** Scarcity copy displayed without changing tier availability or checkout. */
283
+ interface MembershipTierCapacity {
284
+ total: number;
285
+ label?: string;
286
+ }
287
+ /**
288
+ * Presentation attached to one server-authoritative membership tier.
289
+ *
290
+ * Price, free/paid state, identity, and application targeting deliberately do
291
+ * not live here. They are resolved from the public Chapter join config so
292
+ * authored marketing copy can never change what checkout charges.
293
+ */
294
+ interface MembershipTierPresentation {
295
+ tierId: string;
296
+ variant?: MembershipTierVariant;
297
+ badge?: string;
298
+ summaryMarkdown?: string;
299
+ priceEyebrow?: string;
300
+ compareAtPriceCents?: number;
301
+ billingLabel?: string;
302
+ priceNoteMarkdown?: string;
303
+ capacity?: MembershipTierCapacity;
304
+ benefits?: readonly string[];
305
+ callout?: MembershipTierCallout;
306
+ ctaLabel?: string;
307
+ }
308
+ /** A bounded document that can be reviewed once and rendered by any Chapter host. */
309
+ interface MembershipPageDocument {
310
+ schemaVersion: 1;
311
+ renderer: typeof MEMBERSHIP_PAGE_RENDERER;
312
+ tiers: readonly MembershipTierPresentation[];
313
+ footnoteMarkdown?: string;
314
+ }
315
+
316
+ /** Link on public pages, select inside JoinIsland, or remain inert in a CMS preview. */
317
+ type MembershipCardsMode = "link" | "select" | "preview";
318
+ /** Inputs for the canonical membership-card renderer. */
319
+ interface MembershipCardsProps {
320
+ /** Server-authoritative tiers, including the exact amount checkout charges. */
321
+ tiers: readonly JoinTier[];
322
+ /** Reviewed presentation only; it cannot override tier price or identity. */
323
+ document: MembershipPageDocument;
324
+ /** Link to the Chapter application flow. Only the tier query is appended. */
325
+ applicationPath?: string;
326
+ /** Links for a marketing page, buttons for JoinIsland, inert actions in CMS preview. */
327
+ mode?: MembershipCardsMode;
328
+ selectedTierId?: string | null;
329
+ onSelectTier?: (tierId: string) => void;
330
+ className?: string;
331
+ ariaLabel?: string;
332
+ }
333
+ /** Derive a safe same-origin application link for one authoritative tier id. */
334
+ declare function membershipApplicationHref(applicationPath: string | undefined, tierId: string): string;
335
+ /**
336
+ * Render the reviewed membership document against live Chapter tiers.
337
+ *
338
+ * The document controls order and bounded presentation. Names, prices,
339
+ * free/paid state, and application tier ids always come from `tiers`, making
340
+ * the component safe for both a follower's live page and a hub's exact preview.
341
+ */
342
+ declare function MembershipCards(props: MembershipCardsProps): JSX.Element;
343
+
273
344
  /** Props for {@link PaymentStep}. */
274
345
  interface PaymentStepProps {
275
346
  /** The application to attach the subscription to (the capability). */
@@ -309,4 +380,4 @@ interface BrandStyleProps {
309
380
  * there is no brand to theme). */
310
381
  declare function BrandStyle(props: BrandStyleProps): preact.JSX.Element | null;
311
382
 
312
- export { type ApiFn, BrandStyle, type BrandStyleProps, type JoinConfig, type JoinFlowState, JoinIsland, type JoinIslandProps, type JoinStepRenderContext, type JoinSubmitRenderContext, type JoinTier, type JoinTierRenderContext, type MemberProvisionalRenderContext, MembersArea, type MembersAreaProps, type PaymentPriceLines, PaymentStep, type PaymentStepProps, type RescheduleProps, Rescheduler, type Slot, SlotPicker, type SlotPickerClasses, type SlotPickerProps, TierPlaceholder, dayKey, dayLabel, fmtDate, fmtMoney, fullLabel, groupSlotsByDay, loadJoinResume, tierNeedsPayment, timeLabel, tzShort, useTierSelection };
383
+ export { type ApiFn, BrandStyle, type BrandStyleProps, type JoinConfig, type JoinFlowState, JoinIsland, type JoinIslandProps, type JoinStepRenderContext, type JoinSubmitRenderContext, type JoinTier, type JoinTierRenderContext, type MemberProvisionalRenderContext, MembersArea, type MembersAreaProps, MembershipCards, type MembershipCardsMode, type MembershipCardsProps, type PaymentPriceLines, PaymentStep, type PaymentStepProps, type RescheduleProps, Rescheduler, type Slot, SlotPicker, type SlotPickerClasses, type SlotPickerProps, TierPlaceholder, dayKey, dayLabel, fmtDate, fmtMoney, fullLabel, groupSlotsByDay, loadJoinResume, membershipApplicationHref, tierNeedsPayment, timeLabel, tzShort, useTierSelection };
@@ -1,6 +1,7 @@
1
1
  import {
2
2
  JoinIsland,
3
3
  MembersArea,
4
+ MembershipCards,
4
5
  PaymentStep,
5
6
  Rescheduler,
6
7
  SlotPicker,
@@ -12,11 +13,12 @@ import {
12
13
  fullLabel,
13
14
  groupSlotsByDay,
14
15
  loadJoinResume,
16
+ membershipApplicationHref,
15
17
  tierNeedsPayment,
16
18
  timeLabel,
17
19
  tzShort,
18
20
  useTierSelection
19
- } from "../../chunk-QWMP6TSM.js";
21
+ } from "../../chunk-BBCT7U3D.js";
20
22
  import {
21
23
  BrandStyle,
22
24
  ChapterCopyProvider,
@@ -28,6 +30,7 @@ export {
28
30
  ChapterCopyProvider,
29
31
  JoinIsland,
30
32
  MembersArea,
33
+ MembershipCards,
31
34
  PaymentStep,
32
35
  Rescheduler,
33
36
  SlotPicker,
@@ -39,6 +42,7 @@ export {
39
42
  fullLabel,
40
43
  groupSlotsByDay,
41
44
  loadJoinResume,
45
+ membershipApplicationHref,
42
46
  tierNeedsPayment,
43
47
  timeLabel,
44
48
  tzShort,