@riverbankcms/sdk 0.126.0 → 0.128.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.
Files changed (212) hide show
  1. package/dist/{PreviewEditorSidebar-DcYJxTgc.mjs → PreviewEditorSidebar-Dbvb7GIr.mjs} +64 -68
  2. package/dist/{PreviewEditorUI-Ctt1yTJr.mjs → PreviewEditorUI-e9O9l20X.mjs} +3 -3
  3. package/dist/{PreviewQueryProvider-DgFDIwvK.mjs → PreviewQueryProvider-B1kbhaJD.mjs} +1 -1
  4. package/dist/SdkPreviewModeRuntime-BZHt6e9w.mjs +11006 -0
  5. package/dist/{SiteChromeCustomizeContext-C87qlKWw.mjs → SiteChromeCustomizeContext-CvuGbHJX.mjs} +51247 -20733
  6. package/dist/_dts/ai/src/contracts/proposals.d.ts +486 -36
  7. package/dist/_dts/api/src/bookingClosures.d.ts +19 -3
  8. package/dist/_dts/api/src/bookingManagementEndpoints.d.ts +4 -3
  9. package/dist/_dts/api/src/bookingRecords.d.ts +0 -13
  10. package/dist/_dts/api/src/commercePortalEndpoints.d.ts +2 -2
  11. package/dist/_dts/api/src/communications.d.ts +2 -1
  12. package/dist/_dts/api/src/contactFormSummary.d.ts +15 -0
  13. package/dist/_dts/api/src/contentRuntime.d.ts +3 -10
  14. package/dist/_dts/api/src/endpoints.d.ts +1 -1
  15. package/dist/_dts/api/src/footerSettings.d.ts +11 -0
  16. package/dist/_dts/api/src/index.d.ts +2 -1
  17. package/dist/_dts/api/src/occurrenceScheduling.d.ts +48 -0
  18. package/dist/_dts/api/src/participantMessaging.d.ts +5 -3
  19. package/dist/_dts/api/src/publicExperience/siteEndpoints.d.ts +7 -0
  20. package/dist/_dts/api/src/sdkContracts.d.ts +7 -5
  21. package/dist/_dts/api/src/siteOperations.d.ts +12 -3
  22. package/dist/_dts/api/src/sitePlatformEndpoints.d.ts +3 -2
  23. package/dist/_dts/block-form/src/backend/store-backend.d.ts +2 -1
  24. package/dist/_dts/block-form/src/blockDraftSaveability.d.ts +1 -0
  25. package/dist/_dts/blocks/src/client/form.d.ts +1 -0
  26. package/dist/_dts/blocks/src/client/newsletter-form.d.ts +1 -0
  27. package/dist/_dts/blocks/src/client/site-chrome.d.ts +1 -0
  28. package/dist/_dts/blocks/src/contracts/proof-block-islands.d.ts +4 -8
  29. package/dist/_dts/blocks/src/index.d.ts +3 -2
  30. package/dist/_dts/blocks/src/lib/media.d.ts +267 -0
  31. package/dist/_dts/blocks/src/rendering/server.d.ts +1 -1
  32. package/dist/_dts/blocks/src/system/blocks/event-registration.d.ts +41 -0
  33. package/dist/_dts/blocks/src/system/blocks/newsletter-signup-destination.d.ts +14 -23
  34. package/dist/_dts/blocks/src/system/blocks/newsletter-signup.d.ts +1 -1
  35. package/dist/_dts/blocks/src/system/blocks/site-footer-runtime.d.ts +109 -23
  36. package/dist/_dts/blocks/src/system/constants/buttonRoles.d.ts +0 -13
  37. package/dist/_dts/blocks/src/system/data/loaderEndpoints.d.ts +1 -1
  38. package/dist/_dts/blocks/src/system/runtime/components/registry.client.d.ts +42 -108
  39. package/dist/_dts/blocks/src/system/runtime/components/runtime-backed-blocks.d.ts +21 -54
  40. package/dist/_dts/blocks/src/system/runtime/nodes/event-details/logic.d.ts +1 -1
  41. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/registrationSurface.d.ts +26 -0
  42. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/types.d.ts +8 -0
  43. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration.interactive.d.ts +21 -0
  44. package/dist/_dts/blocks/src/system/runtime/nodes/events/shared/eventCollectionContract.d.ts +4 -4
  45. package/dist/_dts/blocks/src/system/runtime/nodes/mergeResolveImageUrlContexts.d.ts +7 -0
  46. package/dist/_dts/blocks/src/system/runtime/nodes/newsletter-form.interactive.d.ts +29 -78
  47. package/dist/_dts/blocks/src/system/runtime/nodes/newsletter-form.server.d.ts +1 -1
  48. package/dist/_dts/blocks/src/system/runtime/nodes/newsletter-form.submission.d.ts +3 -6
  49. package/dist/_dts/blocks/src/system/runtime/nodes/newsletter-form.types.d.ts +27 -8
  50. package/dist/_dts/blocks/src/system/runtime/nodes/shared/contract-schemas.d.ts +2 -2
  51. package/dist/_dts/content-editor/src/FooterComposerOverview.d.ts +21 -0
  52. package/dist/_dts/content-editor/src/FooterComposerPanel.d.ts +3 -1
  53. package/dist/_dts/content-editor/src/FooterEngagementEditorFields.d.ts +31 -0
  54. package/dist/_dts/content-editor/src/FooterEngagementEditorPanel.d.ts +17 -0
  55. package/dist/_dts/content-editor/src/footerComposer.d.ts +3 -0
  56. package/dist/_dts/content-editor/src/footerEngagementDraft.d.ts +57 -0
  57. package/dist/_dts/content-editor/src/footerEngagementEditor.d.ts +11 -0
  58. package/dist/_dts/content-editor/src/footerPreviewRuntime.d.ts +13 -0
  59. package/dist/_dts/content-editor/src/index.d.ts +1 -0
  60. package/dist/_dts/content-editor/src/ui/blockValidationManifestRegistry.d.ts +17 -0
  61. package/dist/_dts/content-editor/src/ui/blockValidationView.d.ts +1 -1
  62. package/dist/_dts/content-editor/src/ui/editorUiStore.d.ts +4 -0
  63. package/dist/_dts/content-editor/src/useFooterComposerState.d.ts +35 -0
  64. package/dist/_dts/core/src/footer-arrangement.d.ts +2 -0
  65. package/dist/_dts/core/src/footer-composition-types.d.ts +118 -0
  66. package/dist/_dts/core/src/footer-composition.d.ts +7 -116
  67. package/dist/_dts/core/src/footer-engagement.d.ts +30 -0
  68. package/dist/_dts/core/src/index.d.ts +4 -0
  69. package/dist/_dts/core/src/newsletter-signup-destination.d.ts +38 -0
  70. package/dist/_dts/db/src/generated/supabase/database.types.d.ts +200 -159
  71. package/dist/_dts/db/src/index.d.ts +1 -0
  72. package/dist/_dts/db/src/schemas/forms.d.ts +72 -2
  73. package/dist/_dts/db/src/schemas/standard-contact.d.ts +114 -0
  74. package/dist/_dts/editor-blocks/src/BlockEditor.d.ts +4 -0
  75. package/dist/_dts/editor-blocks/src/block-editor/hooks/useBlockValidationManifests.d.ts +26 -0
  76. package/dist/_dts/editor-blocks/src/widgets/rich-text/imageInsert.d.ts +3 -3
  77. package/dist/_dts/media-editor/src/MediaEditor.d.ts +2 -2
  78. package/dist/_dts/media-editor/src/context.d.ts +1 -2
  79. package/dist/_dts/media-editor/src/index.d.ts +3 -1
  80. package/dist/_dts/media-editor/src/mediaSelection.d.ts +32 -0
  81. package/dist/_dts/media-editor/src/types.d.ts +3 -1
  82. package/dist/_dts/media-editor/src/useMediaSelection.d.ts +26 -0
  83. package/dist/_dts/preview-next/src/client/blocks/previewBatchLoaderParams.d.ts +6 -0
  84. package/dist/_dts/preview-next/src/client/index.d.ts +2 -0
  85. package/dist/_dts/preview-next/src/client/preview/EntryEditorPanel.d.ts +2 -5
  86. package/dist/_dts/preview-next/src/client/preview/EntrySlotBlockEditorPanel.d.ts +2 -5
  87. package/dist/_dts/preview-next/src/client/preview/HeaderMenuControls.d.ts +12 -0
  88. package/dist/_dts/preview-next/src/client/preview/PageBlockEditorPanel.d.ts +2 -5
  89. package/dist/_dts/preview-next/src/client/preview/PreviewEditorSidebar.d.ts +2 -4
  90. package/dist/_dts/preview-next/src/client/preview/PreviewShell.d.ts +13 -2
  91. package/dist/_dts/preview-next/src/client/preview/PreviewShellLayout.d.ts +8 -4
  92. package/dist/_dts/preview-next/src/client/preview/SiteChromeCustomizeContext.d.ts +4 -49
  93. package/dist/_dts/preview-next/src/client/preview/headerInteractionPaletteSurfaceState.d.ts +8 -0
  94. package/dist/_dts/preview-next/src/client/preview/previewThemeRoles.d.ts +15 -0
  95. package/dist/_dts/preview-next/src/client/preview/siteChromeCustomizeTypes.d.ts +54 -0
  96. package/dist/_dts/preview-next/src/client/preview/siteChromeLookRows.d.ts +13 -3
  97. package/dist/_dts/preview-next/src/client/preview/siteChromeNavQuickControlHistory.d.ts +3 -0
  98. package/dist/_dts/preview-next/src/client/preview/siteChromeQuickControlHistoryState.d.ts +6 -3
  99. package/dist/_dts/preview-next/src/client/widgets/widgetOverrides.d.ts +6 -5
  100. package/dist/_dts/sdk/src/cli/commands/push/execute/footer.d.ts +9 -0
  101. package/dist/_dts/sdk/src/cli/content/footerFile.d.ts +10 -0
  102. package/dist/_dts/sdk/src/cli/content/reader.d.ts +3 -5
  103. package/dist/_dts/sdk/src/cli/site-commands/footerCommands.d.ts +15 -3
  104. package/dist/_dts/sdk/src/client/combineAbortSignals.d.ts +2 -0
  105. package/dist/_dts/sdk/src/client/management/types.d.ts +6 -15
  106. package/dist/_dts/sdk/src/client/types.d.ts +10 -2
  107. package/dist/_dts/sdk/src/client/wholeSeriesReadOperations.d.ts +11 -0
  108. package/dist/_dts/sdk/src/config/types.d.ts +1 -1
  109. package/dist/_dts/sdk/src/config/validation.d.ts +3 -0
  110. package/dist/_dts/sdk/src/contracts/event-registration-content.d.ts +16 -0
  111. package/dist/_dts/sdk/src/contracts/system-block-content.d.ts +4 -15
  112. package/dist/_dts/sdk/src/public-api/contracts.d.ts +4 -18
  113. package/dist/_dts/sdk/src/public-api/teamMemberContracts.d.ts +17 -0
  114. package/dist/_dts/sdk/src/public-api/wholeSeriesContracts.d.ts +2 -0
  115. package/dist/_dts/sdk/src/rendering/blocks-page-renderer.d.ts +7 -0
  116. package/dist/_dts/sdk/src/rendering/index.d.ts +5 -3
  117. package/dist/_dts/sdk/src/rendering/islands/types.d.ts +2 -2
  118. package/dist/_dts/sdk/src/rendering/mediaAssets.d.ts +8 -2
  119. package/dist/_dts/sdk/src/version.d.ts +1 -1
  120. package/dist/_dts/site-commands/src/commandContract.d.ts +8 -1
  121. package/dist/_dts/site-commands/src/commands.d.ts +16 -2
  122. package/dist/_dts/theme-core/src/buttons/effects/presets/background.d.ts +1 -1
  123. package/dist/_dts/theme-core/src/buttons/styles/registry.d.ts +0 -18
  124. package/dist/_dts/theme-core/src/buttons/types.d.ts +1 -3
  125. package/dist/_dts/theme-core/src/header/containerSchema.d.ts +20 -0
  126. package/dist/_dts/theme-core/src/header/generateHeaderCss.d.ts +1 -1
  127. package/dist/_dts/theme-core/src/header/interactionPalette.d.ts +14 -0
  128. package/dist/_dts/theme-core/src/header/legacyNavLinkStyle.d.ts +3 -0
  129. package/dist/_dts/theme-core/src/header/paintTargets.d.ts +31 -0
  130. package/dist/_dts/theme-core/src/header/scrollTreatment.d.ts +11 -0
  131. package/dist/_dts/theme-core/src/header/surfaceRules.d.ts +8 -0
  132. package/dist/_dts/theme-core/src/mock-themes/all.d.ts +15 -0
  133. package/dist/_dts/theme-core/src/palette/colors.d.ts +1 -1
  134. package/dist/_dts/theme-core/src/schema.d.ts +67 -19
  135. package/dist/_dts/theme-core/src/site-styles/appearancePresetCatalog.d.ts +3 -51
  136. package/dist/_dts/theme-core/src/site-styles/appearancePresetTypes.d.ts +4 -11
  137. package/dist/_dts/theme-core/src/site-styles/blockAppearancePresets.d.ts +3 -51
  138. package/dist/_dts/theme-core/src/site-styles/headerInteractionPalette.d.ts +32 -0
  139. package/dist/_dts/theme-core/src/site-styles/headerLooks.d.ts +19 -106
  140. package/dist/_dts/theme-core/src/site-styles/headerOpeningForeground.d.ts +22 -0
  141. package/dist/_dts/theme-core/src/site-styles/headerOpeningSection.d.ts +2 -0
  142. package/dist/_dts/theme-core/src/site-styles/headerStyleParts.d.ts +4 -0
  143. package/dist/_dts/theme-core/src/site-styles/index.d.ts +3 -0
  144. package/dist/_dts/theme-core/src/site-styles/lookOptionGroups.d.ts +24 -0
  145. package/dist/_dts/theme-core/src/site-styles/lookResolution.d.ts +1 -2
  146. package/dist/_dts/theme-core/src/site-styles/pageDesignEditorModel.d.ts +4 -22
  147. package/dist/_dts/theme-core/src/site-styles/pageDesignEditorOptions.d.ts +21 -0
  148. package/dist/_dts/theme-core/src/site-styles/previewCompiler.d.ts +1 -1
  149. package/dist/_dts/theme-core/src/site-styles/siteChromeNavPreferences.d.ts +4 -1
  150. package/dist/cli/index.mjs +6272 -5706
  151. package/dist/client/{courseRegistration-BcemLAdN.mjs → CourseRegistrationWizard-xRmA7REV.mjs} +329 -49
  152. package/dist/client/{DiscountCodeDisclosure-DS0AuFWW.mjs → DiscountCodeDisclosure-B9vriL5C.mjs} +1 -1
  153. package/dist/client/{EventCombined.client-DtMxLr7q.mjs → EventCombined.client-BgVnVTlz.mjs} +2 -2
  154. package/dist/client/{EventListing.client-BdLSRNg1.mjs → EventListing.client-CqdsO7jO.mjs} +2 -2
  155. package/dist/client/{LeafletStaticMap-BrpC6vsT.mjs → LeafletStaticMap-CKPxot9M.mjs} +1 -1
  156. package/dist/client/{StepIndicator-CBYPFVoy.mjs → StepIndicator-DGCYuBJ1.mjs} +2 -2
  157. package/dist/client/{accordion-BqqwPJWM.mjs → accordion-BfN5Eqd-.mjs} +1 -1
  158. package/dist/client/{bookingForm-SneP3yxC.mjs → bookingForm-DOvCpBFP.mjs} +5 -5
  159. package/dist/client/bookings.mjs +126 -23
  160. package/dist/client/{carousel-BTIR9L3I.mjs → carousel-DPNmiH0f.mjs} +1 -1
  161. package/dist/client/{cart-bqiqd8SX.mjs → cart--egVXlrR.mjs} +3 -3
  162. package/dist/client/{checkout-WbTFV5v4.mjs → checkout-DywWtMcq.mjs} +3 -3
  163. package/dist/client/client.mjs +6111 -5794
  164. package/dist/client/courseRegistration-Dk9qFVwt.mjs +46 -0
  165. package/dist/client/{eventCalendar-CsxIw0V_.mjs → eventCalendar-Bkz2HjlS.mjs} +4 -4
  166. package/dist/client/{eventCombined-B6XMoHfa.mjs → eventCombined-D4kipYWg.mjs} +2 -2
  167. package/dist/client/{eventDetails-BJaoPPfo.mjs → eventDetails-Dz_5ix2Q.mjs} +56 -35
  168. package/dist/client/{eventListing-DgwdYHRT.mjs → eventListing-D0vm-zST.mjs} +2 -2
  169. package/dist/client/{eventRegistration-C0O3folu.mjs → eventRegistration-Cw1E4Q4p.mjs} +58 -6
  170. package/dist/client/{form-Bk9txGFt.mjs → form-C2Zf1n3K.mjs} +1 -1
  171. package/dist/client/{headerSection-yIBt0yTv.mjs → headerSection-CP05gzdc.mjs} +2 -2
  172. package/dist/client/hooks.mjs +1013 -935
  173. package/dist/client/{locationMap-C-3KIpv-.mjs → locationMap-Cl3x9PYJ.mjs} +2 -2
  174. package/dist/client/{newsletterForm-CzB8g8h2.mjs → newsletterForm-DyEJoClm.mjs} +26 -20
  175. package/dist/client/{pricing-C1QeDes_.mjs → pricing-DGuNR1W4.mjs} +1 -1
  176. package/dist/client/{productDetail-w7SBp5uc.mjs → productDetail-Cq-HrGew.mjs} +3 -3
  177. package/dist/client/{productList-D0tGKHGf.mjs → productList-DbB3jwqd.mjs} +3 -3
  178. package/dist/client/{propsDecoder-Bcin2DB3.mjs → propsDecoder-CiTuhUwY.mjs} +257 -142
  179. package/dist/client/rendering/client.mjs +1342 -1122
  180. package/dist/client/rendering/islands.mjs +18 -18
  181. package/dist/client/rendering.mjs +6622 -6321
  182. package/dist/client/{scrollToBlock-h-o_STf_.mjs → scrollToBlock-CShkRqab.mjs} +1 -1
  183. package/dist/client/{shop-BGzmL8O_.mjs → shop-Cu4Ib-ZA.mjs} +5 -5
  184. package/dist/client/{shop-commerce-lX8QxjX-.mjs → shop-commerce-BzpsOdh7.mjs} +4 -4
  185. package/dist/client/{shop-commerce-store-CEurARtu.mjs → shop-commerce-store-DaE7Fhj8.mjs} +1 -1
  186. package/dist/client/{shopShared-DXxH8xxw.mjs → shopShared-cF0c20vB.mjs} +2 -2
  187. package/dist/client/{useEventFilters-B591g9vd.mjs → useEventFilters-QZ3HMgaJ.mjs} +2 -2
  188. package/dist/client/{usePolling-BvnChV4m.mjs → usePolling-BKf0GcE-.mjs} +2 -2
  189. package/dist/preview-next/before-render.mjs +1 -1
  190. package/dist/preview-next/client/runtime.mjs +4 -4
  191. package/dist/preview-next/middleware.mjs +1 -1
  192. package/dist/{previewAuthStore-Dev9CdG9.mjs → previewAuthStore-BesgU5Xu.mjs} +1 -1
  193. package/dist/{sdk-runtime-M__i3Jce.mjs → sdk-runtime-Cn_QSCOg.mjs} +2 -2
  194. package/dist/{separator-VSlnI9bc.mjs → separator-CEoGABRc.mjs} +1 -1
  195. package/dist/server/components.mjs +1750 -1614
  196. package/dist/server/config-validation.mjs +1010 -935
  197. package/dist/server/config.mjs +1010 -935
  198. package/dist/server/data.mjs +1013 -935
  199. package/dist/server/index.mjs +40 -16
  200. package/dist/server/next.mjs +1790 -1632
  201. package/dist/server/page-converter.mjs +1012 -938
  202. package/dist/server/prebuild.mjs +1 -1
  203. package/dist/server/rendering/server.mjs +1746 -1601
  204. package/dist/server/rendering.mjs +1759 -1615
  205. package/dist/server/routing.mjs +1123 -975
  206. package/dist/server/server.mjs +1053 -951
  207. package/dist/server/theme-bridge.mjs +151 -118
  208. package/dist/server/theme.mjs +111 -23
  209. package/package.json +1 -1
  210. package/dist/SdkPreviewModeRuntime-CvW1vdQ4.mjs +0 -39468
  211. package/dist/_dts/editor-blocks/src/widgets/rich-text/ensureRichTextImageAssetIdentifier.d.ts +0 -8
  212. package/dist/client/MagicLinkForm-Bt3IuLMy.mjs +0 -327
@@ -1,8 +0,0 @@
1
- import type { ApiClient } from '../../../../api/src/request';
2
- import type { MediaAssetWithLabels } from '@riverbankcms/media-storage-supabase';
3
- type EnsureRichTextImageAssetIdentifierArgs = {
4
- apiClient: ApiClient;
5
- asset: MediaAssetWithLabels;
6
- };
7
- export declare function ensureRichTextImageAssetIdentifier({ apiClient, asset, }: EnsureRichTextImageAssetIdentifierArgs): Promise<MediaAssetWithLabels>;
8
- export {};
@@ -1,327 +0,0 @@
1
- "use client";
2
- import { X as themeButtonClassName, yt as assertNever } from "./propsDecoder-Bcin2DB3.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 };