@riverbankcms/sdk 0.127.0 → 0.129.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 +33 -0
- package/dist/{PreviewEditorSidebar-BXtfF7tp.mjs → PreviewEditorSidebar-B43CJ0g_.mjs} +9 -33
- package/dist/{PreviewEditorUI-Dou73Q0K.mjs → PreviewEditorUI-DHirVkeM.mjs} +3 -3
- package/dist/{PreviewQueryProvider-DgFDIwvK.mjs → PreviewQueryProvider-B1kbhaJD.mjs} +1 -1
- package/dist/SdkPreviewModeRuntime-BJumZy1B.mjs +11209 -0
- package/dist/{SiteChromeCustomizeContext-DZiDBAYu.mjs → SiteChromeCustomizeContext-D9SlpwEj.mjs} +31757 -1621
- package/dist/_dts/ai/src/contracts/proposals.d.ts +288 -36
- package/dist/_dts/api/src/bookingClosures.d.ts +19 -3
- package/dist/_dts/api/src/bookingManagementEndpoints.d.ts +4 -3
- package/dist/_dts/api/src/bookingRecords.d.ts +0 -13
- package/dist/_dts/api/src/commercePortalEndpoints.d.ts +2 -2
- package/dist/_dts/api/src/communications.d.ts +2 -1
- package/dist/_dts/api/src/contactFormSummary.d.ts +15 -0
- package/dist/_dts/api/src/contentRuntime.d.ts +2 -5
- package/dist/_dts/api/src/endpoints.d.ts +1 -1
- package/dist/_dts/api/src/footerSettings.d.ts +11 -0
- package/dist/_dts/api/src/index.d.ts +2 -1
- package/dist/_dts/api/src/occurrenceScheduling.d.ts +48 -0
- package/dist/_dts/api/src/participantMessaging.d.ts +5 -3
- package/dist/_dts/api/src/publicExperience/siteEndpoints.d.ts +7 -0
- package/dist/_dts/api/src/sdkContracts.d.ts +7 -5
- package/dist/_dts/api/src/siteOperations.d.ts +12 -3
- package/dist/_dts/api/src/sitePlatformEndpoints.d.ts +3 -2
- package/dist/_dts/blocks/src/PageRenderer.d.ts +20 -10
- package/dist/_dts/blocks/src/client/form.d.ts +1 -0
- package/dist/_dts/blocks/src/client/newsletter-form.d.ts +1 -0
- package/dist/_dts/blocks/src/client/site-chrome.d.ts +1 -0
- package/dist/_dts/blocks/src/contracts/proof-block-islands.d.ts +4 -8
- package/dist/_dts/blocks/src/index.d.ts +2 -1
- package/dist/_dts/blocks/src/pageRendererBoundaries.d.ts +30 -0
- package/dist/_dts/blocks/src/pageRenderingMode.d.ts +37 -0
- package/dist/_dts/blocks/src/rendering/server.d.ts +1 -1
- package/dist/_dts/blocks/src/server.d.ts +1 -1
- package/dist/_dts/blocks/src/system/blocks/event-registration.d.ts +41 -0
- package/dist/_dts/blocks/src/system/blocks/newsletter-signup-destination.d.ts +14 -23
- package/dist/_dts/blocks/src/system/blocks/newsletter-signup.d.ts +1 -1
- package/dist/_dts/blocks/src/system/blocks/site-footer-runtime.d.ts +109 -23
- package/dist/_dts/blocks/src/system/data/loaderEndpoints.d.ts +1 -1
- package/dist/_dts/blocks/src/system/runtime/components/registry.client.d.ts +42 -108
- package/dist/_dts/blocks/src/system/runtime/components/runtime-backed-blocks.d.ts +21 -54
- package/dist/_dts/blocks/src/system/runtime/nodes/event-details/logic.d.ts +1 -1
- package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/registrationSurface.d.ts +26 -0
- package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/types.d.ts +8 -0
- package/dist/_dts/blocks/src/system/runtime/nodes/event-registration.interactive.d.ts +21 -0
- package/dist/_dts/blocks/src/system/runtime/nodes/newsletter-form.interactive.d.ts +29 -78
- package/dist/_dts/blocks/src/system/runtime/nodes/newsletter-form.server.d.ts +1 -1
- package/dist/_dts/blocks/src/system/runtime/nodes/newsletter-form.submission.d.ts +3 -6
- package/dist/_dts/blocks/src/system/runtime/nodes/newsletter-form.types.d.ts +27 -8
- package/dist/_dts/content-editor/src/FooterComposerOverview.d.ts +21 -0
- package/dist/_dts/content-editor/src/FooterComposerPanel.d.ts +3 -1
- package/dist/_dts/content-editor/src/FooterEngagementEditorFields.d.ts +31 -0
- package/dist/_dts/content-editor/src/FooterEngagementEditorPanel.d.ts +17 -0
- package/dist/_dts/content-editor/src/footerComposer.d.ts +3 -0
- package/dist/_dts/content-editor/src/footerEngagementDraft.d.ts +57 -0
- package/dist/_dts/content-editor/src/footerEngagementEditor.d.ts +11 -0
- package/dist/_dts/content-editor/src/footerPreviewRuntime.d.ts +13 -0
- package/dist/_dts/content-editor/src/index.d.ts +1 -0
- package/dist/_dts/content-editor/src/useFooterComposerState.d.ts +35 -0
- package/dist/_dts/core/src/footer-arrangement.d.ts +2 -0
- package/dist/_dts/core/src/footer-composition-types.d.ts +118 -0
- package/dist/_dts/core/src/footer-composition.d.ts +7 -116
- package/dist/_dts/core/src/footer-engagement.d.ts +30 -0
- package/dist/_dts/core/src/index.d.ts +4 -0
- package/dist/_dts/core/src/newsletter-signup-destination.d.ts +38 -0
- package/dist/_dts/db/src/generated/supabase/database.types.d.ts +73 -6
- package/dist/_dts/db/src/index.d.ts +1 -0
- package/dist/_dts/db/src/schemas/forms.d.ts +72 -2
- package/dist/_dts/db/src/schemas/standard-contact.d.ts +114 -0
- package/dist/_dts/preview-next/src/client/blocks/pageDesignRuntimePreview.d.ts +2 -0
- package/dist/_dts/preview-next/src/client/blocks/previewBatchLoaderParams.d.ts +6 -0
- package/dist/_dts/preview-next/src/client/index.d.ts +47 -47
- package/dist/_dts/preview-next/src/client/preview/EntryEditorPanel.d.ts +2 -5
- package/dist/_dts/preview-next/src/client/preview/EntrySlotBlockEditorPanel.d.ts +2 -5
- package/dist/_dts/preview-next/src/client/preview/PageBlockEditorPanel.d.ts +2 -5
- package/dist/_dts/preview-next/src/client/preview/PreviewEditorSidebar.d.ts +2 -4
- package/dist/_dts/preview-next/src/client/preview/PreviewShell.d.ts +19 -7
- package/dist/_dts/preview-next/src/client/preview/PreviewShellLayout.d.ts +30 -23
- package/dist/_dts/preview-next/src/client/preview/PreviewThemedSiteDocument.d.ts +18 -5
- package/dist/_dts/preview-next/src/client/preview/themeRuntime.d.ts +9 -0
- package/dist/_dts/preview-next/src/client/sdk/SdkPreviewMode.d.ts +21 -6
- package/dist/_dts/preview-next/src/client/sdk-runtime.d.ts +8 -8
- package/dist/_dts/preview-next/src/client/widgets/widgetOverrides.d.ts +6 -5
- package/dist/_dts/sdk/src/cli/commands/push/execute/footer.d.ts +9 -0
- package/dist/_dts/sdk/src/cli/content/footerFile.d.ts +10 -0
- package/dist/_dts/sdk/src/cli/content/reader.d.ts +3 -5
- package/dist/_dts/sdk/src/cli/site-commands/footerCommands.d.ts +15 -3
- package/dist/_dts/sdk/src/client/combineAbortSignals.d.ts +2 -0
- package/dist/_dts/sdk/src/client/management/types.d.ts +6 -15
- package/dist/_dts/sdk/src/client/types.d.ts +10 -2
- package/dist/_dts/sdk/src/client/wholeSeriesReadOperations.d.ts +11 -0
- package/dist/_dts/sdk/src/config/types.d.ts +1 -1
- package/dist/_dts/sdk/src/config/validation.d.ts +3 -0
- package/dist/_dts/sdk/src/contracts/event-registration-content.d.ts +16 -0
- package/dist/_dts/sdk/src/contracts/system-block-content.d.ts +4 -15
- package/dist/_dts/sdk/src/next/catch-all.d.ts +6 -0
- package/dist/_dts/sdk/src/next/index.d.ts +2 -1
- package/dist/_dts/sdk/src/next/renderSdkContent.d.ts +33 -0
- package/dist/_dts/sdk/src/next/types.d.ts +23 -9
- package/dist/_dts/sdk/src/preview-next/before-render.d.ts +4 -6
- package/dist/_dts/sdk/src/preview-next/client/index.d.ts +3 -3
- package/dist/_dts/sdk/src/preview-next/client/runtime.d.ts +1 -1
- package/dist/_dts/sdk/src/public-api/contracts.d.ts +4 -18
- package/dist/_dts/sdk/src/public-api/teamMemberContracts.d.ts +17 -0
- package/dist/_dts/sdk/src/public-api/wholeSeriesContracts.d.ts +2 -0
- package/dist/_dts/sdk/src/rendering/blocks-page-renderer.d.ts +32 -3
- package/dist/_dts/sdk/src/rendering/components/Block.shared.d.ts +13 -2
- package/dist/_dts/sdk/src/rendering/components/Layout.d.ts +31 -18
- package/dist/_dts/sdk/src/rendering/components/pageShared.d.ts +20 -9
- package/dist/_dts/sdk/src/rendering/index.d.ts +8 -4
- package/dist/_dts/sdk/src/rendering/mediaAssets.d.ts +8 -2
- package/dist/_dts/sdk/src/rendering/renderingMode.d.ts +23 -0
- package/dist/_dts/sdk/src/rendering/server.d.ts +5 -3
- package/dist/_dts/sdk/src/rendering/themeRuntime.d.ts +6 -0
- package/dist/_dts/sdk/src/version.d.ts +1 -1
- package/dist/_dts/site-commands/src/commandContract.d.ts +8 -1
- package/dist/_dts/site-commands/src/commands.d.ts +16 -2
- package/dist/_dts/theme-core/src/header/paintTargets.d.ts +10 -4
- package/dist/_dts/theme-core/src/header/surfaceRules.d.ts +2 -3
- package/dist/cli/index.mjs +5535 -4835
- package/dist/cli/init-docs/content/workflow-preview-mode.md +24 -11
- package/dist/client/{courseRegistration-DTEYWL6Z.mjs → CourseRegistrationWizard-xRmA7REV.mjs} +329 -49
- package/dist/client/{DiscountCodeDisclosure-BDFRp8Y7.mjs → DiscountCodeDisclosure-B9vriL5C.mjs} +1 -1
- package/dist/client/{EventCombined.client-DJgF1_lf.mjs → EventCombined.client-BgVnVTlz.mjs} +2 -2
- package/dist/client/{EventListing.client-CnWGNjOr.mjs → EventListing.client-CqdsO7jO.mjs} +2 -2
- package/dist/client/{LeafletStaticMap-BISs9Bl7.mjs → LeafletStaticMap-CKPxot9M.mjs} +1 -1
- package/dist/client/{StepIndicator-D8gVYkK-.mjs → StepIndicator-DGCYuBJ1.mjs} +2 -2
- package/dist/client/{accordion-DFDajgDz.mjs → accordion-BfN5Eqd-.mjs} +1 -1
- package/dist/client/{bookingForm-Bdqj9-52.mjs → bookingForm-DOvCpBFP.mjs} +5 -5
- package/dist/client/{carousel-Cvqf-kN8.mjs → carousel-DPNmiH0f.mjs} +1 -1
- package/dist/client/{cart-CuH2TJXP.mjs → cart--egVXlrR.mjs} +3 -3
- package/dist/client/{checkout-CMNPpejZ.mjs → checkout-DywWtMcq.mjs} +3 -3
- package/dist/client/client.mjs +5324 -4942
- package/dist/client/courseRegistration-Dk9qFVwt.mjs +46 -0
- package/dist/client/{eventCalendar-BW-XoxZ0.mjs → eventCalendar-Bkz2HjlS.mjs} +4 -4
- package/dist/client/{eventCombined-Bpn7s0y9.mjs → eventCombined-D4kipYWg.mjs} +2 -2
- package/dist/client/{eventDetails-D2uUSTMH.mjs → eventDetails-Dz_5ix2Q.mjs} +56 -35
- package/dist/client/{eventListing-CVr1c094.mjs → eventListing-D0vm-zST.mjs} +2 -2
- package/dist/client/{eventRegistration-Dv4AvkMw.mjs → eventRegistration-Cw1E4Q4p.mjs} +58 -6
- package/dist/client/{form-DxdKf9fs.mjs → form-C2Zf1n3K.mjs} +1 -1
- package/dist/client/{headerSection-BaXI5Sro.mjs → headerSection-CP05gzdc.mjs} +2 -2
- package/dist/client/hooks.mjs +212 -61
- package/dist/client/{locationMap-BEtW2fKz.mjs → locationMap-Cl3x9PYJ.mjs} +2 -2
- package/dist/client/{newsletterForm-BKKs0S4R.mjs → newsletterForm-DyEJoClm.mjs} +26 -20
- package/dist/client/{pricing-ClkqcElA.mjs → pricing-DGuNR1W4.mjs} +1 -1
- package/dist/client/{productDetail-H-ru8dyy.mjs → productDetail-Cq-HrGew.mjs} +3 -3
- package/dist/client/{productList-Buyi5c0C.mjs → productList-DbB3jwqd.mjs} +3 -3
- package/dist/client/{propsDecoder-BF7i6Ijg.mjs → propsDecoder-CiTuhUwY.mjs} +130 -87
- package/dist/client/rendering/client.mjs +416 -208
- package/dist/client/rendering/islands.mjs +18 -18
- package/dist/client/rendering.mjs +6026 -5596
- package/dist/client/{scrollToBlock-D_7t8yWb.mjs → scrollToBlock-CShkRqab.mjs} +1 -1
- package/dist/client/{shop-CF7SZQNX.mjs → shop-Cu4Ib-ZA.mjs} +5 -5
- package/dist/client/{shop-commerce-DA7_Rq5p.mjs → shop-commerce-BzpsOdh7.mjs} +4 -4
- package/dist/client/{shop-commerce-store-BmLqW7Gh.mjs → shop-commerce-store-DaE7Fhj8.mjs} +1 -1
- package/dist/client/{shopShared-WL-E1znM.mjs → shopShared-cF0c20vB.mjs} +2 -2
- package/dist/client/{useEventFilters-rc8VLeLV.mjs → useEventFilters-QZ3HMgaJ.mjs} +2 -2
- package/dist/client/{usePolling-1ncrfd4S.mjs → usePolling-BKf0GcE-.mjs} +2 -2
- package/dist/preview-next/before-render.mjs +11 -4
- package/dist/preview-next/client/runtime.mjs +4 -4
- package/dist/preview-next/middleware.mjs +1 -1
- package/dist/{previewAuthStore-Dev9CdG9.mjs → previewAuthStore-BesgU5Xu.mjs} +1 -1
- package/dist/{sdk-runtime-BnrCCFJq.mjs → sdk-runtime-CfZd5pAm.mjs} +2 -2
- package/dist/{separator-CFvBx2yl.mjs → separator-DkTe68HE.mjs} +1 -1
- package/dist/server/components.mjs +950 -639
- package/dist/server/config-validation.mjs +209 -61
- package/dist/server/config.mjs +209 -61
- package/dist/server/data.mjs +212 -61
- package/dist/server/index.mjs +40 -16
- package/dist/server/next.mjs +1181 -835
- package/dist/server/page-converter.mjs +211 -64
- package/dist/server/prebuild.mjs +1 -1
- package/dist/server/rendering/server.mjs +974 -637
- package/dist/server/rendering.mjs +980 -644
- package/dist/server/routing.mjs +254 -80
- package/dist/server/server.mjs +252 -77
- package/package.json +1 -1
- package/dist/SdkPreviewModeRuntime-B0HPXr-l.mjs +0 -39546
- package/dist/client/MagicLinkForm-b5E_HoG9.mjs +0 -327
|
@@ -1,327 +0,0 @@
|
|
|
1
|
-
"use client";
|
|
2
|
-
import { X as themeButtonClassName, yt as assertNever } from "./propsDecoder-BF7i6Ijg.mjs";
|
|
3
|
-
import { n as useBlockApi } from "./context-CJz1Vlsz.mjs";
|
|
4
|
-
import { useEffect, useReducer, useState, useSyncExternalStore } from "react";
|
|
5
|
-
import { Fragment, jsx, jsxs } from "react/jsx-runtime";
|
|
6
|
-
//#region ../blocks/src/system/runtime/shared/components/ClockIcon.tsx
|
|
7
|
-
function ClockIcon({ className, strokeWidth = 2 }) {
|
|
8
|
-
return /* @__PURE__ */ jsx("svg", {
|
|
9
|
-
fill: "none",
|
|
10
|
-
strokeLinecap: "round",
|
|
11
|
-
strokeLinejoin: "round",
|
|
12
|
-
strokeWidth,
|
|
13
|
-
viewBox: "0 0 24 24",
|
|
14
|
-
stroke: "currentColor",
|
|
15
|
-
className,
|
|
16
|
-
width: "1em",
|
|
17
|
-
height: "1em",
|
|
18
|
-
"aria-hidden": "true",
|
|
19
|
-
children: /* @__PURE__ */ jsx("path", { d: "M12 8v4l3 3m6-3a9 9 0 11-18 0 9 9 0 0118 0z" })
|
|
20
|
-
});
|
|
21
|
-
}
|
|
22
|
-
//#endregion
|
|
23
|
-
//#region ../blocks/src/system/runtime/shared/components/LoggedInAsUser.tsx
|
|
24
|
-
/**
|
|
25
|
-
* Displays the logged-in user's email with an optional logout link.
|
|
26
|
-
*
|
|
27
|
-
* Used in registration forms when the email field is locked due to portal authentication.
|
|
28
|
-
* Shows: "Logged in as {email} — Not you? Log out"
|
|
29
|
-
*/
|
|
30
|
-
function LoggedInAsUser({ email, onLogout, classPrefix }) {
|
|
31
|
-
return /* @__PURE__ */ jsxs("p", {
|
|
32
|
-
className: `${classPrefix}-logged-in-hint`,
|
|
33
|
-
children: [
|
|
34
|
-
"Logged in as ",
|
|
35
|
-
email,
|
|
36
|
-
onLogout && /* @__PURE__ */ jsxs(Fragment, { children: [" — ", /* @__PURE__ */ jsx("button", {
|
|
37
|
-
type: "button",
|
|
38
|
-
className: `${classPrefix}-link`,
|
|
39
|
-
onClick: onLogout,
|
|
40
|
-
children: "Not you? Log out"
|
|
41
|
-
})] })
|
|
42
|
-
]
|
|
43
|
-
});
|
|
44
|
-
}
|
|
45
|
-
//#endregion
|
|
46
|
-
//#region ../blocks/src/system/runtime/shared/useWaitlistClaim.state.ts
|
|
47
|
-
const DEFAULT_WAITLIST_CLAIM_ERROR = "Failed to resolve waitlist claim";
|
|
48
|
-
function createInitialWaitlistClaimState(hasToken) {
|
|
49
|
-
return hasToken ? { kind: "resolving" } : { kind: "idle" };
|
|
50
|
-
}
|
|
51
|
-
function waitlistClaimReducer(_state, action) {
|
|
52
|
-
switch (action.type) {
|
|
53
|
-
case "cleared": return { kind: "idle" };
|
|
54
|
-
case "started": return { kind: "resolving" };
|
|
55
|
-
case "resolved": return {
|
|
56
|
-
kind: "resolved",
|
|
57
|
-
claim: action.claim
|
|
58
|
-
};
|
|
59
|
-
case "failed": return action.failure;
|
|
60
|
-
}
|
|
61
|
-
}
|
|
62
|
-
function toWaitlistClaimResolveFailure(error) {
|
|
63
|
-
const message = error instanceof Error ? error.message : DEFAULT_WAITLIST_CLAIM_ERROR;
|
|
64
|
-
if (isUnauthorizedBlockApiError(error)) return {
|
|
65
|
-
kind: "portal-login-required",
|
|
66
|
-
message
|
|
67
|
-
};
|
|
68
|
-
return {
|
|
69
|
-
kind: "error",
|
|
70
|
-
message
|
|
71
|
-
};
|
|
72
|
-
}
|
|
73
|
-
function isUnauthorizedBlockApiError(error) {
|
|
74
|
-
return error instanceof Error && error.name === "BlockApiError" && hasStatus(error) && error.status === 401;
|
|
75
|
-
}
|
|
76
|
-
function hasStatus(value) {
|
|
77
|
-
return typeof value === "object" && value !== null && "status" in value;
|
|
78
|
-
}
|
|
79
|
-
function getWaitlistClaim(state) {
|
|
80
|
-
return state.kind === "resolved" ? state.claim : null;
|
|
81
|
-
}
|
|
82
|
-
function getWaitlistClaimError(state) {
|
|
83
|
-
return state.kind === "error" ? state.message : null;
|
|
84
|
-
}
|
|
85
|
-
function getWaitlistClaimLoginMessage(state) {
|
|
86
|
-
return state.kind === "portal-login-required" ? state.message : null;
|
|
87
|
-
}
|
|
88
|
-
function requiresWaitlistClaimPortalLogin(state) {
|
|
89
|
-
return state.kind === "portal-login-required";
|
|
90
|
-
}
|
|
91
|
-
function isWaitlistClaimLoading(state) {
|
|
92
|
-
return state.kind === "resolving";
|
|
93
|
-
}
|
|
94
|
-
//#endregion
|
|
95
|
-
//#region ../blocks/src/system/runtime/shared/useWaitlistClaim.ts
|
|
96
|
-
const WAITLIST_CLAIM_LOCATION_EVENT = "riverbank:waitlist-claim-location-change";
|
|
97
|
-
let historyPatched = false;
|
|
98
|
-
function emitWaitlistClaimLocationChange() {
|
|
99
|
-
if (typeof window === "undefined") return;
|
|
100
|
-
window.dispatchEvent(new Event(WAITLIST_CLAIM_LOCATION_EVENT));
|
|
101
|
-
}
|
|
102
|
-
function ensureWaitlistClaimLocationTracking() {
|
|
103
|
-
if (typeof window === "undefined" || historyPatched) return;
|
|
104
|
-
historyPatched = true;
|
|
105
|
-
const history = window.history;
|
|
106
|
-
if (history.__riverbankWaitlistClaimPatched__) return;
|
|
107
|
-
const wrapHistoryMethod = (method) => {
|
|
108
|
-
return function patched(...args) {
|
|
109
|
-
method.apply(this, args);
|
|
110
|
-
emitWaitlistClaimLocationChange();
|
|
111
|
-
};
|
|
112
|
-
};
|
|
113
|
-
try {
|
|
114
|
-
history.pushState = wrapHistoryMethod(history.pushState);
|
|
115
|
-
history.replaceState = wrapHistoryMethod(history.replaceState);
|
|
116
|
-
history.__riverbankWaitlistClaimPatched__ = true;
|
|
117
|
-
} catch {}
|
|
118
|
-
window.addEventListener("popstate", emitWaitlistClaimLocationChange);
|
|
119
|
-
}
|
|
120
|
-
function getWaitlistClaimTokenFromUrl() {
|
|
121
|
-
if (typeof window === "undefined") return null;
|
|
122
|
-
const token = new URLSearchParams(window.location.search).get("waitlist_claim")?.trim() ?? "";
|
|
123
|
-
return token.length > 0 ? token : null;
|
|
124
|
-
}
|
|
125
|
-
const useWaitlistClaimDeps = { useBlockApi };
|
|
126
|
-
function subscribeToWaitlistClaimToken(callback) {
|
|
127
|
-
if (typeof window === "undefined") return () => {};
|
|
128
|
-
ensureWaitlistClaimLocationTracking();
|
|
129
|
-
window.addEventListener(WAITLIST_CLAIM_LOCATION_EVENT, callback);
|
|
130
|
-
return () => {
|
|
131
|
-
window.removeEventListener(WAITLIST_CLAIM_LOCATION_EVENT, callback);
|
|
132
|
-
};
|
|
133
|
-
}
|
|
134
|
-
function getWaitlistClaimTokenSnapshot() {
|
|
135
|
-
return getWaitlistClaimTokenFromUrl();
|
|
136
|
-
}
|
|
137
|
-
function useWaitlistClaim() {
|
|
138
|
-
return useWaitlistClaimWithDeps(useWaitlistClaimDeps);
|
|
139
|
-
}
|
|
140
|
-
function useWaitlistClaimWithDeps(deps) {
|
|
141
|
-
const api = deps.useBlockApi();
|
|
142
|
-
const token = useSyncExternalStore(subscribeToWaitlistClaimToken, getWaitlistClaimTokenSnapshot, () => null);
|
|
143
|
-
const [state, dispatch] = useReducer(waitlistClaimReducer, Boolean(token), createInitialWaitlistClaimState);
|
|
144
|
-
useEffect(() => {
|
|
145
|
-
let cancelled = false;
|
|
146
|
-
async function resolveClaim() {
|
|
147
|
-
if (!token) {
|
|
148
|
-
dispatch({ type: "cleared" });
|
|
149
|
-
return;
|
|
150
|
-
}
|
|
151
|
-
dispatch({ type: "started" });
|
|
152
|
-
try {
|
|
153
|
-
const result = await api.resolveWaitlistClaim({ claimToken: token });
|
|
154
|
-
if (cancelled) return;
|
|
155
|
-
dispatch({
|
|
156
|
-
type: "resolved",
|
|
157
|
-
claim: result
|
|
158
|
-
});
|
|
159
|
-
} catch (claimError) {
|
|
160
|
-
if (cancelled) return;
|
|
161
|
-
dispatch({
|
|
162
|
-
type: "failed",
|
|
163
|
-
failure: toWaitlistClaimResolveFailure(claimError)
|
|
164
|
-
});
|
|
165
|
-
}
|
|
166
|
-
}
|
|
167
|
-
resolveClaim();
|
|
168
|
-
return () => {
|
|
169
|
-
cancelled = true;
|
|
170
|
-
};
|
|
171
|
-
}, [api, token]);
|
|
172
|
-
return {
|
|
173
|
-
token,
|
|
174
|
-
claim: getWaitlistClaim(state),
|
|
175
|
-
error: getWaitlistClaimError(state),
|
|
176
|
-
loginMessage: getWaitlistClaimLoginMessage(state),
|
|
177
|
-
requiresPortalLogin: requiresWaitlistClaimPortalLogin(state),
|
|
178
|
-
isLoading: isWaitlistClaimLoading(state)
|
|
179
|
-
};
|
|
180
|
-
}
|
|
181
|
-
//#endregion
|
|
182
|
-
//#region ../blocks/src/system/runtime/shared/utils/portalLogout.ts
|
|
183
|
-
/**
|
|
184
|
-
* Portal Logout Utility
|
|
185
|
-
*
|
|
186
|
-
* Logout from the customer portal by POSTing to the logout endpoint.
|
|
187
|
-
* Uses a hidden form because the httpOnly cookie can only be cleared server-side.
|
|
188
|
-
*/
|
|
189
|
-
/**
|
|
190
|
-
* Logout from the customer portal.
|
|
191
|
-
*
|
|
192
|
-
* @param anchorId - The anchor ID to redirect back to after logout
|
|
193
|
-
*/
|
|
194
|
-
function logoutPortal(anchorId) {
|
|
195
|
-
const form = document.createElement("form");
|
|
196
|
-
form.method = "POST";
|
|
197
|
-
form.action = "/api/portal/logout";
|
|
198
|
-
const redirectInput = document.createElement("input");
|
|
199
|
-
redirectInput.type = "hidden";
|
|
200
|
-
redirectInput.name = "redirect_to";
|
|
201
|
-
redirectInput.value = `${window.location.pathname}#${anchorId}`;
|
|
202
|
-
form.appendChild(redirectInput);
|
|
203
|
-
document.body.appendChild(form);
|
|
204
|
-
form.submit();
|
|
205
|
-
}
|
|
206
|
-
//#endregion
|
|
207
|
-
//#region ../blocks/src/system/runtime/nodes/shared/MagicLinkForm.state.ts
|
|
208
|
-
const initialMagicLinkSubmissionState = Object.freeze({ tag: "idle" });
|
|
209
|
-
function magicLinkSubmissionReducer(state, action) {
|
|
210
|
-
switch (action.type) {
|
|
211
|
-
case "submit-started":
|
|
212
|
-
if (state.tag === "submitting") return state;
|
|
213
|
-
return { tag: "submitting" };
|
|
214
|
-
case "submit-succeeded":
|
|
215
|
-
if (state.tag !== "submitting") return state;
|
|
216
|
-
return { tag: "success" };
|
|
217
|
-
case "submit-failed":
|
|
218
|
-
if (state.tag !== "submitting") return state;
|
|
219
|
-
return {
|
|
220
|
-
tag: "error",
|
|
221
|
-
message: action.message
|
|
222
|
-
};
|
|
223
|
-
case "reset": return initialMagicLinkSubmissionState;
|
|
224
|
-
default: return assertNever(action);
|
|
225
|
-
}
|
|
226
|
-
}
|
|
227
|
-
function isMagicLinkSubmitting(state) {
|
|
228
|
-
return state.tag === "submitting";
|
|
229
|
-
}
|
|
230
|
-
function getMagicLinkError(state) {
|
|
231
|
-
return state.tag === "error" ? state.message : null;
|
|
232
|
-
}
|
|
233
|
-
//#endregion
|
|
234
|
-
//#region ../blocks/src/system/runtime/nodes/shared/MagicLinkForm.tsx
|
|
235
|
-
/**
|
|
236
|
-
* Reusable magic link login form.
|
|
237
|
-
* Used by Customer Portal and Event Registration blocks.
|
|
238
|
-
*/
|
|
239
|
-
function MagicLinkForm({ initialEmail = "", title, subtitle, buttonText = "Send login link", successMessage = "Check your email for a login link to sign in.", onSuccess, classPrefix = "er", compact = false }) {
|
|
240
|
-
const api = useBlockApi();
|
|
241
|
-
const [email, setEmail] = useState(initialEmail);
|
|
242
|
-
const [submissionState, dispatchSubmission] = useReducer(magicLinkSubmissionReducer, initialMagicLinkSubmissionState);
|
|
243
|
-
const loading = isMagicLinkSubmitting(submissionState);
|
|
244
|
-
const error = getMagicLinkError(submissionState);
|
|
245
|
-
const handleSubmit = async (e) => {
|
|
246
|
-
e.preventDefault();
|
|
247
|
-
const normalizedEmail = email.trim().toLowerCase();
|
|
248
|
-
if (!normalizedEmail || loading) return;
|
|
249
|
-
dispatchSubmission({ type: "submit-started" });
|
|
250
|
-
try {
|
|
251
|
-
const redirectTo = `${window.location.pathname}${window.location.search}${window.location.hash}`;
|
|
252
|
-
await api.sendMagicLink({
|
|
253
|
-
email: normalizedEmail,
|
|
254
|
-
redirectUrl: `${window.location.origin}/api/portal/callback?redirect_to=${encodeURIComponent(redirectTo)}`
|
|
255
|
-
});
|
|
256
|
-
dispatchSubmission({ type: "submit-succeeded" });
|
|
257
|
-
onSuccess?.();
|
|
258
|
-
} catch (err) {
|
|
259
|
-
console.error("Magic link error:", err);
|
|
260
|
-
dispatchSubmission({
|
|
261
|
-
type: "submit-failed",
|
|
262
|
-
message: getMagicLinkErrorMessage(err)
|
|
263
|
-
});
|
|
264
|
-
}
|
|
265
|
-
};
|
|
266
|
-
const handleReset = () => {
|
|
267
|
-
setEmail("");
|
|
268
|
-
dispatchSubmission({ type: "reset" });
|
|
269
|
-
};
|
|
270
|
-
if (submissionState.tag === "success") return /* @__PURE__ */ jsxs("div", {
|
|
271
|
-
className: `${classPrefix}-magic-link-success`,
|
|
272
|
-
children: [/* @__PURE__ */ jsx("p", {
|
|
273
|
-
className: `${classPrefix}-portal-auth-text ${classPrefix}-portal-auth-text--success`,
|
|
274
|
-
children: successMessage
|
|
275
|
-
}), !compact && /* @__PURE__ */ jsx("button", {
|
|
276
|
-
type: "button",
|
|
277
|
-
className: classPrefix === "cp" ? themeButtonClassName({
|
|
278
|
-
variant: "secondary",
|
|
279
|
-
size: "md"
|
|
280
|
-
}) : `${classPrefix}-modal-btn ${classPrefix}-modal-btn--secondary`,
|
|
281
|
-
onClick: handleReset,
|
|
282
|
-
children: "Try a different email"
|
|
283
|
-
})]
|
|
284
|
-
});
|
|
285
|
-
return /* @__PURE__ */ jsxs("form", {
|
|
286
|
-
onSubmit: handleSubmit,
|
|
287
|
-
className: `${classPrefix}-magic-link-form`,
|
|
288
|
-
children: [
|
|
289
|
-
title && /* @__PURE__ */ jsx("h3", {
|
|
290
|
-
className: `${classPrefix}-magic-link-title`,
|
|
291
|
-
children: title
|
|
292
|
-
}),
|
|
293
|
-
subtitle && /* @__PURE__ */ jsx("p", {
|
|
294
|
-
className: `${classPrefix}-portal-auth-text`,
|
|
295
|
-
children: subtitle
|
|
296
|
-
}),
|
|
297
|
-
/* @__PURE__ */ jsx("input", {
|
|
298
|
-
type: "email",
|
|
299
|
-
className: classPrefix === "cp" ? "cp-input" : `${classPrefix}-form__input`,
|
|
300
|
-
placeholder: "your@email.com",
|
|
301
|
-
value: email,
|
|
302
|
-
onChange: (e) => setEmail(e.target.value),
|
|
303
|
-
autoFocus: !compact,
|
|
304
|
-
required: true,
|
|
305
|
-
disabled: loading
|
|
306
|
-
}),
|
|
307
|
-
error && /* @__PURE__ */ jsx("p", {
|
|
308
|
-
className: `${classPrefix}-portal-auth-text ${classPrefix}-portal-auth-text--error`,
|
|
309
|
-
children: error
|
|
310
|
-
}),
|
|
311
|
-
/* @__PURE__ */ jsx("button", {
|
|
312
|
-
type: "submit",
|
|
313
|
-
className: classPrefix === "cp" ? themeButtonClassName({
|
|
314
|
-
variant: "primary",
|
|
315
|
-
size: "md"
|
|
316
|
-
}) : `${classPrefix}-modal-btn`,
|
|
317
|
-
disabled: !email.trim() || loading,
|
|
318
|
-
children: loading ? "Sending..." : buttonText
|
|
319
|
-
})
|
|
320
|
-
]
|
|
321
|
-
});
|
|
322
|
-
}
|
|
323
|
-
function getMagicLinkErrorMessage(error) {
|
|
324
|
-
return error instanceof Error ? error.message : "Failed to send. Please try again.";
|
|
325
|
-
}
|
|
326
|
-
//#endregion
|
|
327
|
-
export { ClockIcon as a, LoggedInAsUser as i, logoutPortal as n, useWaitlistClaim as r, MagicLinkForm as t };
|