@odla-ai/chapter 0.61.0 → 0.63.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
1
  import * as preact from 'preact';
2
2
  import { ComponentChildren, JSX } from 'preact';
3
- import { d as MemberContentProjection, e as MemberContentPageProjection, b as ChapterCopy, f as ChapterBrand } from '../../copy-context-nsw2DwSK.js';
4
- export { C as ChapterCopyProvider, u as useChapterCopy } from '../../copy-context-nsw2DwSK.js';
3
+ import { e as MemberContentProjection, f as MemberContentPageProjection, P as PortalCopy, g as MemberPageFeatureName, c as ChapterCopy, a as ChapterBrand, h as MemberPageIcon } from '../../copy-context-BNKK7ZDm.js';
4
+ export { C as ChapterCopyProvider, u as useChapterCopy } from '../../copy-context-BNKK7ZDm.js';
5
+ import { ThemeTokenOverrides } from '@odla-ai/ui/components';
5
6
  import { FieldType, FieldConditions } from '@odla-ai/crm';
6
7
 
7
8
  /** A bookable slot: a start instant in epoch milliseconds. */
@@ -105,12 +106,209 @@ interface MemberContentAreaProps {
105
106
  onUpsell?: (tierId: string, page: MemberContentPageProjection) => void;
106
107
  loadingContent?: ComponentChildren;
107
108
  emptyContent?: ComponentChildren;
109
+ /**
110
+ * Render an allowed page of kind `feature` (schema version 2). Without it the
111
+ * area shows the page summary; the packaged MemberPortal renders features itself.
112
+ */
113
+ renderFeature?: (page: MemberContentPageProjection) => ComponentChildren;
108
114
  }
109
115
  /**
110
116
  * Render the exact server-filtered catalog. This component never receives a
111
117
  * restricted body: locked access is a wire-level omission, not a CSS gate.
112
118
  */
113
119
  declare function MemberContentArea(props: MemberContentAreaProps): preact.JSX.Element;
120
+ /** Badge text for a placeholder page: authored, "Coming in <year>", or "Coming soon". */
121
+ declare const placeholderBadge: (page: Pick<MemberContentPageProjection, "placeholder">) => string;
122
+ /** The open state of a placeholder page: badge, optional body, optional disabled action. */
123
+ declare function MemberPlaceholderBody({ page }: {
124
+ page: MemberContentPageProjection;
125
+ }): preact.JSX.Element;
126
+
127
+ /** Where the portal is: Home, Your Profile, or a catalog page by slug. */
128
+ type PortalRoute = {
129
+ kind: "home";
130
+ } | {
131
+ kind: "profile";
132
+ } | {
133
+ kind: "page";
134
+ slug: string;
135
+ };
136
+ /**
137
+ * How portal locations are written. `hash` (`/members/#pass-the-salt`) works on
138
+ * any static host and is the default; `path` (`/members/pass-the-salt`) needs
139
+ * the host to serve the portal for every path under `basePath`.
140
+ */
141
+ interface PortalRouting {
142
+ mode: "hash" | "path";
143
+ basePath: string;
144
+ }
145
+ /** The profile route's reserved segment. Catalog slugs cannot claim it. */
146
+ declare const PROFILE_SEGMENT = "profile";
147
+ /** Read a route from a location. Unknown shapes resolve to Home. */
148
+ declare function routeFromLocation(location: {
149
+ pathname: string;
150
+ hash: string;
151
+ }, routing: PortalRouting): PortalRoute;
152
+ /** Write a route as an href for this routing mode. */
153
+ declare function hrefFor(route: PortalRoute, routing: PortalRouting): string;
154
+ /** Two routes name the same place. */
155
+ declare const sameRoute: (a: PortalRoute, b: PortalRoute) => boolean;
156
+
157
+ /** The identity block `/api/me` returns under `portal`. */
158
+ interface PortalMe {
159
+ memberId: string;
160
+ tier: {
161
+ id: string;
162
+ name: string;
163
+ } | null;
164
+ memberSince: number | null;
165
+ displayName: string;
166
+ firstName: string | null;
167
+ initials: string;
168
+ location: string | null;
169
+ photoUrl: string | null;
170
+ }
171
+ /** The member's photo, or their initials until they upload one. */
172
+ declare function PortalAvatar({ me, className }: {
173
+ me: Pick<PortalMe, "photoUrl" | "initials">;
174
+ className?: string;
175
+ }): preact.JSX.Element;
176
+ /** Tag a nav item shows: lock when locked, then New, then the placeholder's availability. */
177
+ declare function navTag(page: MemberContentPageProjection, copy: PortalCopy): {
178
+ kind: string;
179
+ text: string;
180
+ } | null;
181
+ interface NavProps {
182
+ content: MemberContentProjection;
183
+ me: PortalMe;
184
+ email: string | null;
185
+ route: PortalRoute;
186
+ copy: PortalCopy;
187
+ adminHref?: string | undefined;
188
+ onNavigate: (route: PortalRoute) => void;
189
+ onSignOut: () => void;
190
+ }
191
+ /** The sidebar on wide screens, and the top bar with its menu on phones. */
192
+ declare function PortalNav(props: NavProps & {
193
+ brand: ComponentChildren;
194
+ sidebarTokens?: ThemeTokenOverrides | undefined;
195
+ menuOpen: boolean;
196
+ onToggleMenu: () => void;
197
+ }): preact.JSX.Element;
198
+
199
+ /** Everything a portal page or slot needs from the shell. */
200
+ interface PortalContext {
201
+ api: ApiFn;
202
+ me: PortalMe;
203
+ email: string | null;
204
+ content: MemberContentProjection;
205
+ copy: PortalCopy;
206
+ navigate: (route: PortalRoute) => void;
207
+ hrefFor: (route: PortalRoute) => string;
208
+ upsellHref?: ((tierId: string, page: MemberContentPageProjection) => string | undefined) | undefined;
209
+ reloadMe: () => Promise<void>;
210
+ }
211
+ /** A packaged or host feature: its page, and optionally its Home panel. */
212
+ interface PortalFeature {
213
+ page: (page: MemberContentPageProjection, ctx: PortalContext) => ComponentChildren;
214
+ home?: (page: MemberContentPageProjection, ctx: PortalContext) => ComponentChildren;
215
+ }
216
+ /** Feature renderers by name. */
217
+ type PortalFeatures = Partial<Record<MemberPageFeatureName, PortalFeature>>;
218
+ /** "Included with … membership" pill for a locked page. */
219
+ declare function LockedPill({ page, ctx }: {
220
+ page: MemberContentPageProjection;
221
+ ctx: PortalContext;
222
+ }): preact.JSX.Element;
223
+ /** The upgrade link for a locked page, when the site supplies a destination. */
224
+ declare function UpgradeLink({ page, ctx, variant }: {
225
+ page: MemberContentPageProjection;
226
+ ctx: PortalContext;
227
+ variant?: "accent";
228
+ }): preact.JSX.Element | null;
229
+ /** A locked page: what it is, and how to get it. Its body never reached the browser. */
230
+ declare function LockedScreen({ page, ctx }: {
231
+ page: MemberContentPageProjection;
232
+ ctx: PortalContext;
233
+ }): preact.JSX.Element;
234
+ /** An announced page that is not open yet. */
235
+ declare function PlaceholderScreen({ page }: {
236
+ page: MemberContentPageProjection;
237
+ }): preact.JSX.Element;
238
+ /** Route a catalog page to its screen: locked, placeholder, feature, or Markdown. */
239
+ declare function PortalPage({ page, ctx, features }: {
240
+ page: MemberContentPageProjection;
241
+ ctx: PortalContext;
242
+ features: PortalFeatures;
243
+ }): preact.JSX.Element;
244
+ /** One coming-soon tile. A locked placeholder shows who it is for. */
245
+ declare function PortalTile({ page, ctx }: {
246
+ page: MemberContentPageProjection;
247
+ ctx: PortalContext;
248
+ }): preact.JSX.Element;
249
+ /** Home slots a site can fill or replace. */
250
+ interface PortalHomeSlots {
251
+ /** Above everything, e.g. a banner for a tier with locked pages. */
252
+ top?: (ctx: PortalContext) => ComponentChildren;
253
+ /** Between the feature panels and the coming-soon tiles. */
254
+ middle?: (ctx: PortalContext) => ComponentChildren;
255
+ /** Replace one tile (return undefined to keep the default). */
256
+ tile?: (page: MemberContentPageProjection, ctx: PortalContext) => ComponentChildren | undefined;
257
+ }
258
+ /**
259
+ * Default Home: site slot, then each feature's Home panel in catalog order
260
+ * (locked panels carry an upgrade overlay), then the placeholders as tiles.
261
+ */
262
+ declare function DefaultHome({ ctx, features, slots }: {
263
+ ctx: PortalContext;
264
+ features: PortalFeatures;
265
+ slots: PortalHomeSlots;
266
+ }): preact.JSX.Element;
267
+
268
+ /** The `/api/me` fields the portal reads. `portal` is present for an active member of a portal site. */
269
+ interface PortalMeResponse {
270
+ email: string | null;
271
+ authorized?: boolean;
272
+ superAdmin?: boolean;
273
+ portal: PortalMe;
274
+ }
275
+ /** Props for {@link MemberPortal}. */
276
+ interface MemberPortalProps {
277
+ api: ApiFn;
278
+ me: PortalMeResponse;
279
+ signOut: () => void;
280
+ /** Mark and wordmark for the sidebar and the phone bar. */
281
+ brand: ComponentChildren;
282
+ /** Where admins open the console. Shown only to admins. */
283
+ adminHref?: string;
284
+ routing?: Partial<PortalRouting>;
285
+ /** Token roles for the sidebar island. Without them the theme's `.ui-invert` palette applies. */
286
+ sidebarTokens?: ThemeTokenOverrides;
287
+ copy?: PortalCopy;
288
+ /** A site-owned upgrade destination for a locked page's offer. */
289
+ upsellHref?: (tierId: string, page: MemberContentPageProjection) => string | undefined;
290
+ /** Feature renderers; packaged ones are used unless replaced here. */
291
+ features?: PortalFeatures;
292
+ /** Home slots, or a function that replaces Home entirely. */
293
+ home?: PortalHomeSlots | ((ctx: PortalContext, defaultHome: ComponentChildren) => ComponentChildren);
294
+ /** Profile sections: `middle` before "How you found us", `extras` after it (e.g. a gift seat card). */
295
+ profile?: {
296
+ middle?: (ctx: PortalContext) => ComponentChildren;
297
+ extras?: ComponentChildren;
298
+ };
299
+ /** Reload `/api/me` after the member changes their name or photo. */
300
+ reloadMe?: () => Promise<void>;
301
+ /** Preloaded catalog for previews and tests; skips the fetch. */
302
+ initialContent?: MemberContentProjection;
303
+ /** Start route for previews and server rendering. */
304
+ initialRoute?: PortalRoute;
305
+ }
306
+ /**
307
+ * The signed-in member portal: sidebar (phone menu at 860px and below), header
308
+ * with tier pill and profile button, Home, catalog pages, and Your Profile.
309
+ * Everything gated comes from the server; the portal never decides access.
310
+ */
311
+ declare function MemberPortal(props: MemberPortalProps): preact.JSX.Element;
114
312
 
115
313
  /** Props for {@link MembersArea}. */
116
314
  interface MembersAreaProps {
@@ -127,6 +325,12 @@ interface MembersAreaProps {
127
325
  memberPages?: true | Omit<MemberContentAreaProps, "api">;
128
326
  /** Resolved member-area copy. */
129
327
  copy?: ChapterCopy["members"];
328
+ /**
329
+ * Show an active member the packaged portal (`/api/me` must carry `portal`,
330
+ * i.e. the site enables `memberPortal`). Every other state keeps its screen;
331
+ * gift purchases and the gift seat card move onto Your Profile.
332
+ */
333
+ portal?: Omit<MemberPortalProps, "api" | "me" | "signOut" | "reloadMe">;
130
334
  /** Replace the provisional application card without replacing auth/data load. */
131
335
  renderProvisional?: (context: MemberProvisionalRenderContext) => ComponentChildren;
132
336
  }
@@ -860,4 +1064,223 @@ declare function JourneyFrame({ children }: {
860
1064
  /** A themed application submit control. Pass the disabled state supplied by JoinIsland's renderSubmit slot. */
861
1065
  declare function JoinSubmitButton(props: JSX.ButtonHTMLAttributes<HTMLButtonElement>): JSX.Element;
862
1066
 
863
- export { ADDITIONAL_MEMBER_COPY, type AdditionalMemberCopy, type AdditionalMemberDraft, AdditionalMemberEditor, type AdditionalMemberEditorOptions, type AdditionalMemberEditorProps, type AdditionalMemberFieldNames, AdditionalMemberFields, type AdditionalMemberFieldsProps, type AdditionalMemberOffer, type AdditionalMemberOptions, type ApiFn, BrandStyle, type BrandStyleProps, type CheckoutSeatEditor, type CheckoutSeatEditorContext, type GiftCodeRedeemResult, GiftCodeRedeemer, type GiftCodeRedeemerCopy, type GiftCodeRedeemerProps, GiftOfferCards, type GiftOfferCardsMode, type GiftOfferCardsProps, GiftPurchases, type GiftPurchasesProps, type JoinBookingPreload, type JoinBookingSimulation, type JoinConfig, type JoinFlowState, JoinIsland, type JoinIslandProps, type JoinSimulation, type JoinStepRenderContext, JoinSubmitButton, type JoinSubmitRenderContext, type JoinTier, type JoinTierRenderContext, JourneyFrame, MEMBERSHIP_CARD_TOKEN_DEFAULTS, MemberContentArea, type MemberContentAreaProps, MemberGifts, type MemberProvisionalRenderContext, MemberRestart, MembersArea, type MembersAreaProps, type MembershipCardTokenName, MembershipCards, type MembershipCardsMode, type MembershipCardsProps, NAMED_SEAT_RECIPIENT_WORDS, NamedSeatInvitationLink, type NamedSeatInvitationLinkProps, NamedSeatPurchase, NamedSeatRecipientLine, type PaymentPriceLines, PaymentStep, type PaymentStepProps, type PaymentStepSimulation, type RescheduleProps, Rescheduler, type Slot, SlotPicker, type SlotPickerClasses, type SlotPickerProps, type SubResponse, TierPlaceholder, additionalMemberSelection, dayKey, dayLabel, fmtDate, fmtMoney, fullLabel, groupSlotsByDay, loadJoinResume, membershipApplicationHref, namedSeatInvitationMessage, namedSeatInvitationShareable, namedSeatInvitationUrl, tierNeedsPayment, timeLabel, tzShort, useTierSelection };
1067
+ interface Prompt {
1068
+ prompt: string;
1069
+ answer: string;
1070
+ }
1071
+ /** `GET /api/member/profile`, as the page reads it. */
1072
+ interface MemberProfileView {
1073
+ revision: number;
1074
+ profile: {
1075
+ preferredName: string | null;
1076
+ location: string | null;
1077
+ prompts: Prompt[];
1078
+ introducedByText: string | null;
1079
+ };
1080
+ referredBy?: {
1081
+ name: string;
1082
+ } | null;
1083
+ promptChoices: string[];
1084
+ maxPrompts: number;
1085
+ photos: boolean;
1086
+ }
1087
+ /** "November 2026" for a membership start, in UTC so every viewer reads the same month. */
1088
+ declare const memberMonth: (at: number) => string;
1089
+ /** Starting prompts: the member's answers, or the site's first choices with empty answers. */
1090
+ declare const startingPrompts: (view: Pick<MemberProfileView, "profile" | "promptChoices" | "maxPrompts">) => Prompt[];
1091
+ /** Choosing another prompt adds it, or swaps out the last one when the member is at the limit. */
1092
+ declare function choosePrompt(prompts: Prompt[], prompt: string, max: number): Prompt[];
1093
+ /** Your Profile. Sections between the prompts and "How you found us" come from `middle`; `extras` follow it. */
1094
+ declare function MemberProfilePage({ ctx, middle, extras }: {
1095
+ ctx: PortalContext;
1096
+ middle?: ComponentChildren;
1097
+ extras?: ComponentChildren;
1098
+ }): preact.JSX.Element;
1099
+
1100
+ declare const PATHS: Record<MemberPageIcon | "lock" | "menu" | "close", string[]>;
1101
+ /** One portal icon, decorative unless given a label. */
1102
+ declare function PortalIcon({ name, size, label }: {
1103
+ name: keyof typeof PATHS;
1104
+ size?: number;
1105
+ label?: string;
1106
+ }): preact.JSX.Element;
1107
+
1108
+ /**
1109
+ * Packaged feature renderers, keyed by catalog feature name. A site can
1110
+ * replace any of them through `MemberPortal`'s `features` prop.
1111
+ */
1112
+ declare const PACKAGED_PORTAL_FEATURES: PortalFeatures;
1113
+
1114
+ /** One reading, task or recording before a session. A material without a link stays hidden. */
1115
+ interface CourseMaterial {
1116
+ kind: "read" | "do" | "watch" | "extra";
1117
+ label: string;
1118
+ meta?: string;
1119
+ url?: string;
1120
+ }
1121
+ /** One live session. */
1122
+ interface CourseSession {
1123
+ date: string;
1124
+ startsAt: number;
1125
+ endsAt: number;
1126
+ topic: string;
1127
+ description?: string;
1128
+ materials: CourseMaterial[];
1129
+ }
1130
+ /** A guide shown on the course page. */
1131
+ interface CourseGuide {
1132
+ name: string;
1133
+ role?: string;
1134
+ bio?: string;
1135
+ photoUrl?: string;
1136
+ }
1137
+
1138
+ /** `GET /api/member/courses/:id`, as the portal reads it. */
1139
+ interface MemberCourseView {
1140
+ course: {
1141
+ id: string;
1142
+ title: string;
1143
+ timezone: string;
1144
+ capacity: number;
1145
+ seatsLeft: number;
1146
+ status: "open" | "full" | "closed";
1147
+ content: {
1148
+ basedOn?: string;
1149
+ short?: string;
1150
+ when?: string;
1151
+ start?: string;
1152
+ dates?: string;
1153
+ outcomes?: string[];
1154
+ time?: string;
1155
+ partnerMarkdown?: string;
1156
+ };
1157
+ guides: CourseGuide[];
1158
+ sessions: CourseSession[];
1159
+ toolkit: Array<Omit<CourseMaterial, "kind">>;
1160
+ };
1161
+ enrollment: {
1162
+ status: "enrolled" | "waitlisted" | "pending";
1163
+ waitlistPosition: number | null;
1164
+ } | null;
1165
+ meetUrl?: string;
1166
+ result?: string;
1167
+ }
1168
+ /** Load a course and act on it; every action returns the fresh view. */
1169
+ declare function useCourse(ctx: PortalContext, courseId: string | undefined): {
1170
+ view: MemberCourseView | null;
1171
+ error: string | null;
1172
+ busy: boolean;
1173
+ act: (action: "enroll" | "withdraw") => Promise<void>;
1174
+ };
1175
+ /** The seat line: "18 of 20 seats open", "You're in…", or the waitlist place. */
1176
+ declare function seatLine(view: MemberCourseView, copy: PortalContext["copy"]["course"]): string;
1177
+ /** Reserve, give up (asking first), join or leave the waitlist. */
1178
+ declare function SeatActions({ ctx, course, details }: {
1179
+ ctx: PortalContext;
1180
+ course: ReturnType<typeof useCourse>;
1181
+ details?: () => void;
1182
+ }): preact.JSX.Element;
1183
+ /** The course feature page: overview and seat box, guides, sessions with materials, outcomes and toolkit. */
1184
+ declare function CoursePage({ page, ctx }: {
1185
+ page: MemberContentPageProjection;
1186
+ ctx: PortalContext;
1187
+ }): preact.JSX.Element;
1188
+ /**
1189
+ * The course's Home panel. A locked course draws only from its catalog page
1190
+ * (the course API refuses a tier outside its audience), and the portal lays
1191
+ * the upgrade overlay over it.
1192
+ */
1193
+ declare function CourseHomePanel({ page, ctx }: {
1194
+ page: MemberContentPageProjection;
1195
+ ctx: PortalContext;
1196
+ }): preact.JSX.Element;
1197
+
1198
+ /** `GET /api/member/referrals`, as the portal reads it. */
1199
+ interface MemberReferrals {
1200
+ code: string;
1201
+ link: string;
1202
+ joined: {
1203
+ count: number;
1204
+ names: string[];
1205
+ };
1206
+ inProcess: number;
1207
+ credit: {
1208
+ perFriendCents: number;
1209
+ offNextYearCents: number;
1210
+ } | null;
1211
+ }
1212
+ /** "a Founding Member", "an Associate Member": the article that reads right before a tier name. */
1213
+ declare const articleFor: (word: string) => "a" | "an";
1214
+ /** Values every share template can use. */
1215
+ declare function shareVars(me: PortalMe, referrals: MemberReferrals | null): Record<string, string>;
1216
+ /** LinkedIn's share box, opened with the post and the member's own link. */
1217
+ declare const linkedinShareUrl: (post: string, link: string) => string;
1218
+ /** A mailto: link the member's own mail app opens. Nothing is sent from any server. */
1219
+ declare const mailtoHref: (subject: string, body: string) => string;
1220
+ /** iPhones read the message after `sms:&body=`, other phones after `sms:?body=`. */
1221
+ declare const smsHref: (body: string, ios: boolean) => string;
1222
+ /** Whether this browser is an iPhone or iPad (including iPadOS reporting as a Mac). */
1223
+ declare const isIOS: (nav: {
1224
+ userAgent: string;
1225
+ platform?: string;
1226
+ maxTouchPoints?: number;
1227
+ }) => boolean;
1228
+ /** Load the member's referrals once; null until loaded or when the feature is off. */
1229
+ declare function useMemberReferrals(api: ApiFn): {
1230
+ data: MemberReferrals | null;
1231
+ failed: boolean;
1232
+ };
1233
+
1234
+ /** A button that copies `text` and says so briefly. */
1235
+ declare function CopyButton({ text, label, ctx, variant }: {
1236
+ text: string;
1237
+ label: string;
1238
+ ctx: PortalContext;
1239
+ variant?: "ghost";
1240
+ }): preact.JSX.Element;
1241
+ /** The "Make it official on LinkedIn" card with its dialog. */
1242
+ declare function OfficialCard({ ctx, referrals, example }: {
1243
+ ctx: PortalContext;
1244
+ referrals: MemberReferrals | null;
1245
+ example?: ComponentChildren;
1246
+ }): preact.JSX.Element;
1247
+ /** The post card: a prewritten LinkedIn post carrying the member's own link. */
1248
+ declare function PostCard({ ctx, referrals }: {
1249
+ ctx: PortalContext;
1250
+ referrals: MemberReferrals | null;
1251
+ }): preact.JSX.Element;
1252
+ /** The invite-link card: copy, email or text it. Nothing is sent from any server. */
1253
+ declare function InviteLinkCard({ ctx, referrals }: {
1254
+ ctx: PortalContext;
1255
+ referrals: MemberReferrals | null;
1256
+ }): preact.JSX.Element;
1257
+ /** "Your referrals": joined, in process, and (for dues-paying members on sites with credit) credit off next year. */
1258
+ declare function ReferralsCard({ ctx, referrals }: {
1259
+ ctx: PortalContext;
1260
+ referrals: MemberReferrals | null;
1261
+ }): preact.JSX.Element | null;
1262
+ /** The share feature page (e.g. "Pass the Salt"). */
1263
+ declare function SharePage({ page, ctx, example }: {
1264
+ page: MemberContentPageProjection;
1265
+ ctx: PortalContext;
1266
+ example?: ComponentChildren;
1267
+ }): preact.JSX.Element;
1268
+ /** The share feature's Home block: the official card, the post, and the link. */
1269
+ declare function ShareHome({ ctx }: {
1270
+ ctx: PortalContext;
1271
+ }): preact.JSX.Element;
1272
+ /** The profile's referrals card, loading its own data. */
1273
+ declare function ProfileReferrals({ ctx }: {
1274
+ ctx: PortalContext;
1275
+ }): preact.JSX.Element;
1276
+
1277
+ /**
1278
+ * The invite code from the page's `?ref=`, for visitors whose browser blocks
1279
+ * the referral cookie. The server prefers its cookie and looks the code up
1280
+ * itself; this only forwards what the address carries.
1281
+ */
1282
+ declare function referralFromLocation(search?: string): {
1283
+ referralCode?: string;
1284
+ };
1285
+
1286
+ export { ADDITIONAL_MEMBER_COPY, type AdditionalMemberCopy, type AdditionalMemberDraft, AdditionalMemberEditor, type AdditionalMemberEditorOptions, type AdditionalMemberEditorProps, type AdditionalMemberFieldNames, AdditionalMemberFields, type AdditionalMemberFieldsProps, type AdditionalMemberOffer, type AdditionalMemberOptions, type ApiFn, BrandStyle, type BrandStyleProps, type CheckoutSeatEditor, type CheckoutSeatEditorContext, CopyButton, CourseHomePanel, CoursePage, DefaultHome, type GiftCodeRedeemResult, GiftCodeRedeemer, type GiftCodeRedeemerCopy, type GiftCodeRedeemerProps, GiftOfferCards, type GiftOfferCardsMode, type GiftOfferCardsProps, GiftPurchases, type GiftPurchasesProps, InviteLinkCard, type JoinBookingPreload, type JoinBookingSimulation, type JoinConfig, type JoinFlowState, JoinIsland, type JoinIslandProps, type JoinSimulation, type JoinStepRenderContext, JoinSubmitButton, type JoinSubmitRenderContext, type JoinTier, type JoinTierRenderContext, JourneyFrame, LockedPill, LockedScreen, MEMBERSHIP_CARD_TOKEN_DEFAULTS, MemberContentArea, type MemberContentAreaProps, type MemberCourseView, MemberGifts, MemberPlaceholderBody, MemberPortal, type MemberPortalProps, MemberProfilePage, type MemberProfileView, type MemberProvisionalRenderContext, type MemberReferrals, MemberRestart, MembersArea, type MembersAreaProps, type MembershipCardTokenName, MembershipCards, type MembershipCardsMode, type MembershipCardsProps, NAMED_SEAT_RECIPIENT_WORDS, NamedSeatInvitationLink, type NamedSeatInvitationLinkProps, NamedSeatPurchase, NamedSeatRecipientLine, OfficialCard, PACKAGED_PORTAL_FEATURES, PROFILE_SEGMENT, type PaymentPriceLines, PaymentStep, type PaymentStepProps, type PaymentStepSimulation, PlaceholderScreen, PortalAvatar, type PortalContext, type PortalFeature, type PortalFeatures, type PortalHomeSlots, PortalIcon, type PortalMe, type PortalMeResponse, PortalNav, PortalPage, type PortalRoute, type PortalRouting, PortalTile, PostCard, ProfileReferrals, ReferralsCard, type RescheduleProps, Rescheduler, SeatActions, ShareHome, SharePage, type Slot, SlotPicker, type SlotPickerClasses, type SlotPickerProps, type SubResponse, TierPlaceholder, UpgradeLink, additionalMemberSelection, articleFor, choosePrompt, dayKey, dayLabel, fmtDate, fmtMoney, fullLabel, groupSlotsByDay, hrefFor, isIOS, linkedinShareUrl, loadJoinResume, mailtoHref, memberMonth, membershipApplicationHref, namedSeatInvitationMessage, namedSeatInvitationShareable, namedSeatInvitationUrl, navTag, placeholderBadge, referralFromLocation, routeFromLocation, sameRoute, seatLine, shareVars, smsHref, startingPrompts, tierNeedsPayment, timeLabel, tzShort, useCourse, useMemberReferrals, useTierSelection };
@@ -2,15 +2,25 @@ import {
2
2
  ADDITIONAL_MEMBER_COPY,
3
3
  AdditionalMemberEditor,
4
4
  AdditionalMemberFields,
5
+ CopyButton,
6
+ CourseHomePanel,
7
+ CoursePage,
8
+ DefaultHome,
5
9
  GiftCodeRedeemer,
6
10
  GiftOfferCards,
7
11
  GiftPurchases,
12
+ InviteLinkCard,
8
13
  JoinIsland,
9
14
  JoinSubmitButton,
10
15
  JourneyFrame,
16
+ LockedPill,
17
+ LockedScreen,
11
18
  MEMBERSHIP_CARD_TOKEN_DEFAULTS,
12
19
  MemberContentArea,
13
20
  MemberGifts,
21
+ MemberPlaceholderBody,
22
+ MemberPortal,
23
+ MemberProfilePage,
14
24
  MemberRestart,
15
25
  MembersArea,
16
26
  MembershipCards,
@@ -18,32 +28,66 @@ import {
18
28
  NamedSeatInvitationLink,
19
29
  NamedSeatPurchase,
20
30
  NamedSeatRecipientLine,
31
+ OfficialCard,
32
+ PACKAGED_PORTAL_FEATURES,
33
+ PROFILE_SEGMENT,
21
34
  PaymentStep,
35
+ PlaceholderScreen,
36
+ PortalAvatar,
37
+ PortalIcon,
38
+ PortalNav,
39
+ PortalPage,
40
+ PortalTile,
41
+ PostCard,
42
+ ProfileReferrals,
43
+ ReferralsCard,
22
44
  Rescheduler,
45
+ SeatActions,
46
+ ShareHome,
47
+ SharePage,
23
48
  SlotPicker,
24
49
  TierPlaceholder,
50
+ UpgradeLink,
25
51
  additionalMemberSelection,
26
- dayKey,
27
- dayLabel,
28
- fmtDate,
29
- fmtMoney,
30
- fullLabel,
31
- groupSlotsByDay,
52
+ articleFor,
53
+ choosePrompt,
54
+ hrefFor,
55
+ isIOS,
56
+ linkedinShareUrl,
32
57
  loadJoinResume,
58
+ mailtoHref,
59
+ memberMonth,
33
60
  membershipApplicationHref,
34
61
  namedSeatInvitationMessage,
35
62
  namedSeatInvitationShareable,
36
63
  namedSeatInvitationUrl,
64
+ navTag,
65
+ placeholderBadge,
66
+ referralFromLocation,
67
+ routeFromLocation,
68
+ sameRoute,
69
+ seatLine,
70
+ shareVars,
71
+ smsHref,
72
+ startingPrompts,
37
73
  tierNeedsPayment,
38
- timeLabel,
39
- tzShort,
74
+ useCourse,
75
+ useMemberReferrals,
40
76
  useTierSelection
41
- } from "../../chunk-RTJKUOFE.js";
77
+ } from "../../chunk-QPFJBHHK.js";
42
78
  import {
43
79
  BrandStyle,
44
80
  ChapterCopyProvider,
81
+ dayKey,
82
+ dayLabel,
83
+ fmtDate,
84
+ fmtMoney,
85
+ fullLabel,
86
+ groupSlotsByDay,
87
+ timeLabel,
88
+ tzShort,
45
89
  useChapterCopy
46
- } from "../../chunk-PKVHXKGJ.js";
90
+ } from "../../chunk-OXYMVK2O.js";
47
91
  import "../../chunk-IVXVECKR.js";
48
92
  export {
49
93
  ADDITIONAL_MEMBER_COPY,
@@ -51,15 +95,25 @@ export {
51
95
  AdditionalMemberFields,
52
96
  BrandStyle,
53
97
  ChapterCopyProvider,
98
+ CopyButton,
99
+ CourseHomePanel,
100
+ CoursePage,
101
+ DefaultHome,
54
102
  GiftCodeRedeemer,
55
103
  GiftOfferCards,
56
104
  GiftPurchases,
105
+ InviteLinkCard,
57
106
  JoinIsland,
58
107
  JoinSubmitButton,
59
108
  JourneyFrame,
109
+ LockedPill,
110
+ LockedScreen,
60
111
  MEMBERSHIP_CARD_TOKEN_DEFAULTS,
61
112
  MemberContentArea,
62
113
  MemberGifts,
114
+ MemberPlaceholderBody,
115
+ MemberPortal,
116
+ MemberProfilePage,
63
117
  MemberRestart,
64
118
  MembersArea,
65
119
  MembershipCards,
@@ -67,26 +121,60 @@ export {
67
121
  NamedSeatInvitationLink,
68
122
  NamedSeatPurchase,
69
123
  NamedSeatRecipientLine,
124
+ OfficialCard,
125
+ PACKAGED_PORTAL_FEATURES,
126
+ PROFILE_SEGMENT,
70
127
  PaymentStep,
128
+ PlaceholderScreen,
129
+ PortalAvatar,
130
+ PortalIcon,
131
+ PortalNav,
132
+ PortalPage,
133
+ PortalTile,
134
+ PostCard,
135
+ ProfileReferrals,
136
+ ReferralsCard,
71
137
  Rescheduler,
138
+ SeatActions,
139
+ ShareHome,
140
+ SharePage,
72
141
  SlotPicker,
73
142
  TierPlaceholder,
143
+ UpgradeLink,
74
144
  additionalMemberSelection,
145
+ articleFor,
146
+ choosePrompt,
75
147
  dayKey,
76
148
  dayLabel,
77
149
  fmtDate,
78
150
  fmtMoney,
79
151
  fullLabel,
80
152
  groupSlotsByDay,
153
+ hrefFor,
154
+ isIOS,
155
+ linkedinShareUrl,
81
156
  loadJoinResume,
157
+ mailtoHref,
158
+ memberMonth,
82
159
  membershipApplicationHref,
83
160
  namedSeatInvitationMessage,
84
161
  namedSeatInvitationShareable,
85
162
  namedSeatInvitationUrl,
163
+ navTag,
164
+ placeholderBadge,
165
+ referralFromLocation,
166
+ routeFromLocation,
167
+ sameRoute,
168
+ seatLine,
169
+ shareVars,
170
+ smsHref,
171
+ startingPrompts,
86
172
  tierNeedsPayment,
87
173
  timeLabel,
88
174
  tzShort,
89
175
  useChapterCopy,
176
+ useCourse,
177
+ useMemberReferrals,
90
178
  useTierSelection
91
179
  };
92
180
  //# sourceMappingURL=index.js.map