@riverbankcms/sdk 0.85.0 → 0.89.1

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 (166) hide show
  1. package/dist/{PreviewEditorSidebar-4PH35ZIE.mjs → PreviewEditorSidebar-JDR64FEC.mjs} +3 -3
  2. package/dist/{PreviewEditorUI-WHMCRJGM.mjs → PreviewEditorUI-67TMJMAF.mjs} +3 -3
  3. package/dist/SdkPreviewModeRuntime-ZBEMRV7N.mjs +8 -0
  4. package/dist/_dts/api/src/accessAdmin.d.ts +7 -0
  5. package/dist/_dts/api/src/endpoints.d.ts +66 -14
  6. package/dist/_dts/api/src/index.d.ts +5 -2
  7. package/dist/_dts/api/src/launchReadiness.d.ts +3 -3
  8. package/dist/_dts/api/src/mailchimpIntegration.d.ts +215 -0
  9. package/dist/_dts/api/src/publicExperienceEndpoints.d.ts +35 -15
  10. package/dist/_dts/api/src/siteInfrastructure.d.ts +0 -14
  11. package/dist/_dts/api/src/siteManagementEndpoints.d.ts +5 -1
  12. package/dist/_dts/api/src/siteMembers.d.ts +6 -1
  13. package/dist/_dts/api/src/siteRuntimeEndpoints.d.ts +1 -13
  14. package/dist/_dts/api/src/types.d.ts +7 -4
  15. package/dist/_dts/blocks/src/PageRenderer.d.ts +1 -0
  16. package/dist/_dts/blocks/src/contracts/proof-block-islands.d.ts +4 -0
  17. package/dist/_dts/blocks/src/index.d.ts +2 -1
  18. package/dist/_dts/blocks/src/system/blocks/appointment-booking.d.ts +288 -288
  19. package/dist/_dts/blocks/src/system/blocks/blog-listing.d.ts +288 -288
  20. package/dist/_dts/blocks/src/system/blocks/cart.d.ts +288 -288
  21. package/dist/_dts/blocks/src/system/blocks/checkout.d.ts +288 -288
  22. package/dist/_dts/blocks/src/system/blocks/collection.d.ts +288 -288
  23. package/dist/_dts/blocks/src/system/blocks/events/shared/schemas.d.ts +42 -0
  24. package/dist/_dts/blocks/src/system/blocks/events/shared/types.d.ts +4 -0
  25. package/dist/_dts/blocks/src/system/blocks/faq.d.ts +288 -288
  26. package/dist/_dts/blocks/src/system/blocks/gifting.d.ts +288 -288
  27. package/dist/_dts/blocks/src/system/blocks/location-map.d.ts +1 -1
  28. package/dist/_dts/blocks/src/system/blocks/media-text.d.ts +42 -42
  29. package/dist/_dts/blocks/src/system/blocks/newsletter-signup-destination.d.ts +300 -0
  30. package/dist/_dts/blocks/src/system/blocks/newsletter-signup.d.ts +63 -3
  31. package/dist/_dts/blocks/src/system/blocks/product-detail.d.ts +288 -288
  32. package/dist/_dts/blocks/src/system/blocks/product-list.d.ts +288 -288
  33. package/dist/_dts/blocks/src/system/blocks/shop.d.ts +288 -288
  34. package/dist/_dts/blocks/src/system/fragments/library/newsletterForm.d.ts +53 -1
  35. package/dist/_dts/blocks/src/system/icons/cta.d.ts +3 -3
  36. package/dist/_dts/blocks/src/system/icons/index.d.ts +1 -0
  37. package/dist/_dts/blocks/src/system/icons/registry.d.ts +2 -2
  38. package/dist/_dts/blocks/src/system/icons/semantic.d.ts +3 -3
  39. package/dist/_dts/blocks/src/system/icons/svg.d.ts +72 -0
  40. package/dist/_dts/blocks/src/system/manifest/richTextSchema.d.ts +27 -0
  41. package/dist/_dts/blocks/src/system/manifest/schema.d.ts +23 -23
  42. package/dist/_dts/blocks/src/system/runtime/api/types.d.ts +11 -2
  43. package/dist/_dts/blocks/src/system/runtime/components/registry.client.d.ts +24 -0
  44. package/dist/_dts/blocks/src/system/runtime/components/runtime-backed-blocks.d.ts +12 -0
  45. package/dist/_dts/blocks/src/system/runtime/hooks/loadStateError.d.ts +1 -0
  46. package/dist/_dts/blocks/src/system/runtime/hooks/useAvailableDates.d.ts +1 -1
  47. package/dist/_dts/blocks/src/system/runtime/hooks/useAvailableDates.state.d.ts +55 -0
  48. package/dist/_dts/blocks/src/system/runtime/hooks/useAvailableSlots.state.d.ts +39 -0
  49. package/dist/_dts/blocks/src/system/runtime/hooks/useBookingFormConfig.d.ts +4 -27
  50. package/dist/_dts/blocks/src/system/runtime/hooks/useBookingFormConfig.state.d.ts +40 -0
  51. package/dist/_dts/blocks/src/system/runtime/hooks/useCalendarEvents.state.d.ts +20 -0
  52. package/dist/_dts/blocks/src/system/runtime/hooks/useEventFilters.state.d.ts +31 -0
  53. package/dist/_dts/blocks/src/system/runtime/hooks/useEventPagination.d.ts +3 -3
  54. package/dist/_dts/blocks/src/system/runtime/hooks/useEventPagination.state.d.ts +39 -0
  55. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/types.d.ts +1 -0
  56. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration.interactive.d.ts +4 -0
  57. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration.server.d.ts +1 -1
  58. package/dist/_dts/blocks/src/system/runtime/nodes/events/shared/EventPaginatedListView.client.d.ts +1 -1
  59. package/dist/_dts/blocks/src/system/runtime/nodes/events/shared/utils.d.ts +11 -1
  60. package/dist/_dts/blocks/src/system/runtime/nodes/newsletter-form.client.state.d.ts +24 -2
  61. package/dist/_dts/blocks/src/system/runtime/nodes/newsletter-form.interactive.d.ts +15 -0
  62. package/dist/_dts/blocks/src/system/runtime/nodes/newsletter-form.server.d.ts +1 -1
  63. package/dist/_dts/blocks/src/system/runtime/nodes/newsletter-form.submission.d.ts +32 -0
  64. package/dist/_dts/blocks/src/system/runtime/nodes/newsletter-form.types.d.ts +5 -1
  65. package/dist/_dts/blocks/src/system/runtime/nodes/shared/MagicLinkForm.state.d.ts +24 -0
  66. package/dist/_dts/blocks/src/system/runtime/shared/components/ModalShell.d.ts +5 -1
  67. package/dist/_dts/blocks/src/system/runtime/shared/useWaitlistClaim.state.d.ts +35 -0
  68. package/dist/_dts/blocks/src/system/runtime/shared/utils/formatting.d.ts +1 -1
  69. package/dist/_dts/content-model/src/entry-slots/types.d.ts +54 -0
  70. package/dist/_dts/content-model/src/referenceFields.d.ts +1 -1
  71. package/dist/_dts/core/src/branded.d.ts +7 -0
  72. package/dist/_dts/core/src/currency-format.d.ts +37 -2
  73. package/dist/_dts/core/src/event-pricing.d.ts +24 -0
  74. package/dist/_dts/core/src/index.d.ts +1 -0
  75. package/dist/_dts/core/src/site-route-target.d.ts +40 -0
  76. package/dist/_dts/db/src/generated/supabase/database.types.d.ts +705 -17
  77. package/dist/_dts/editor-blocks/src/widgets/reference/loaders.d.ts +3 -1
  78. package/dist/_dts/media-core/src/fileDomain.d.ts +4 -0
  79. package/dist/_dts/sdk/src/client/runtimeCachePolicy.d.ts +160 -0
  80. package/dist/_dts/sdk/src/client/types.d.ts +35 -1
  81. package/dist/_dts/sdk/src/config/validation.d.ts +3 -0
  82. package/dist/_dts/sdk/src/contracts/system-block-content.d.ts +3 -0
  83. package/dist/_dts/sdk/src/data/prefetchBlockData.d.ts +3 -9
  84. package/dist/_dts/sdk/src/index.d.ts +3 -1
  85. package/dist/_dts/sdk/src/manifest/passes/pass1-fields.d.ts +1 -1
  86. package/dist/_dts/sdk/src/manifest/three-pass-converter.d.ts +7 -18
  87. package/dist/_dts/sdk/src/rendering/blocks-page-renderer.d.ts +2 -0
  88. package/dist/_dts/sdk/src/rendering/components/pageShared.d.ts +3 -1
  89. package/dist/_dts/sdk/src/rendering/helpers/loadContent.d.ts +7 -3
  90. package/dist/_dts/sdk/src/rendering/helpers/loadPage.d.ts +4 -24
  91. package/dist/_dts/sdk/src/rendering/helpers/pageRuntimeSupport.d.ts +45 -0
  92. package/dist/_dts/sdk/src/version.d.ts +1 -1
  93. package/dist/_dts/theme-core/src/generated/containerResponsiveThemeCss.d.ts +1 -1
  94. package/dist/_dts/theme-core/src/mock-themes/all.d.ts +9 -9
  95. package/dist/_dts/theme-core/src/schema.d.ts +11 -11
  96. package/dist/{chunk-PYDHOMEO.mjs → chunk-7N46MZHI.mjs} +1 -1
  97. package/dist/{chunk-ZR2GQK2A.mjs → chunk-7YUAXONX.mjs} +1880 -588
  98. package/dist/{chunk-4QNLOTES.mjs → chunk-F645A5UV.mjs} +76 -14
  99. package/dist/{chunk-OCGTXHSO.mjs → chunk-HKJQERFR.mjs} +7 -7
  100. package/dist/{chunk-NFWGLRZZ.mjs → chunk-TGBJWKMP.mjs} +37 -3
  101. package/dist/{chunk-WFPYN7KA.mjs → chunk-ZQRBLCW5.mjs} +2 -2
  102. package/dist/cli/index.mjs +1075 -126
  103. package/dist/client/{accordion-2UZPBMYM.mjs → accordion-MUCVNGQ7.mjs} +2 -2
  104. package/dist/client/{bookingForm-36CWQUMV.mjs → bookingForm-PKD6EFIE.mjs} +193 -77
  105. package/dist/client/bookings.mjs +487 -197
  106. package/dist/client/{carousel-QH77HR6X.mjs → carousel-3TKQSNJC.mjs} +4 -3
  107. package/dist/client/cart-6XHSZK23.mjs +19 -0
  108. package/dist/client/checkout-FVSPM6FI.mjs +19 -0
  109. package/dist/client/{chunk-ZE5G642V.mjs → chunk-25W2EQUN.mjs} +75 -1
  110. package/dist/client/chunk-6N7YRNYU.mjs +183 -0
  111. package/dist/client/{chunk-4OXKTA3D.mjs → chunk-7DH35FGA.mjs} +2 -2
  112. package/dist/client/{chunk-3C2VTPWI.mjs → chunk-CQKKFEQD.mjs} +363 -66
  113. package/dist/client/{chunk-7UCLJ5SP.mjs → chunk-EY42X22F.mjs} +4 -7
  114. package/dist/client/{chunk-SYIJ5JO2.mjs → chunk-FHU6PFPM.mjs} +1 -1
  115. package/dist/client/{chunk-ZKUO52W3.mjs → chunk-LQFDYWPJ.mjs} +1 -1
  116. package/dist/client/chunk-RSQWWUAD.mjs +390 -0
  117. package/dist/client/{chunk-UDNSI5PY.mjs → chunk-STJ2NCQM.mjs} +2 -3
  118. package/dist/client/{chunk-VGDBVNOO.mjs → chunk-UQFY4AHX.mjs} +511 -406
  119. package/dist/client/{chunk-F5VRX5Y6.mjs → chunk-VGLXACVK.mjs} +1 -1
  120. package/dist/client/{chunk-DVNUDUVT.mjs → chunk-WBQG7VJA.mjs} +4 -1
  121. package/dist/client/{chunk-52CGCQ7B.mjs → chunk-ZJZZA5EP.mjs} +10 -80
  122. package/dist/client/{chunk-XSV6KW4D.mjs → chunk-ZT5XE7FK.mjs} +1 -1
  123. package/dist/client/client.mjs +5820 -4782
  124. package/dist/client/{courseRegistration-TMKU6ABO.mjs → courseRegistration-ATZSYDHM.mjs} +7 -7
  125. package/dist/client/{eventCalendar-G6TI32X6.mjs → eventCalendar-6T2UGKKP.mjs} +11 -11
  126. package/dist/client/{eventCombined-SCKEMNAR.mjs → eventCombined-Q4VANXVF.mjs} +11 -11
  127. package/dist/client/{eventDetails-XPIFXXPK.mjs → eventDetails-DW37E7VW.mjs} +11 -11
  128. package/dist/client/{eventListing-7QFMEMGT.mjs → eventListing-XURTSAUW.mjs} +11 -11
  129. package/dist/client/{eventRegistration-TOODSZUI.mjs → eventRegistration-MRKEVAXW.mjs} +11 -11
  130. package/dist/client/{form-MTCMVCZT.mjs → form-WZZFFGMU.mjs} +3 -3
  131. package/dist/client/{headerSection-Y5TMR3TW.mjs → headerSection-EQYVQBLM.mjs} +4 -4
  132. package/dist/client/hooks.mjs +1700 -1412
  133. package/dist/client/{locationMap-RH2LG7FZ.mjs → locationMap-MFF5VAZR.mjs} +3 -4
  134. package/dist/client/{newsletterForm-PCAIPFMA.mjs → newsletterForm-JQ77UYIE.mjs} +127 -43
  135. package/dist/client/{productDetail-OIGDR4YE.mjs → productDetail-25LMT3IZ.mjs} +9 -9
  136. package/dist/client/{productList-4MA5S2CX.mjs → productList-5ABEMKUG.mjs} +9 -9
  137. package/dist/client/rendering/client.mjs +3884 -3722
  138. package/dist/client/rendering/islands.mjs +19 -19
  139. package/dist/client/rendering.mjs +6774 -6331
  140. package/dist/client/shop-OMMQZ6YO.mjs +21 -0
  141. package/dist/preview-next/before-render.mjs +76 -14
  142. package/dist/preview-next/client/runtime.mjs +5 -5
  143. package/dist/preview-next/editor-chrome.css +56 -9
  144. package/dist/preview-next/middleware.mjs +76 -14
  145. package/dist/{sdk-runtime-QLOCYKVU.mjs → sdk-runtime-WNLBZ3ZH.mjs} +6 -6
  146. package/dist/server/components.mjs +2579 -2548
  147. package/dist/server/config-validation.mjs +1737 -1461
  148. package/dist/server/config.mjs +1737 -1461
  149. package/dist/server/data.mjs +1701 -1413
  150. package/dist/server/index.mjs +1048 -400
  151. package/dist/server/next.mjs +3602 -2858
  152. package/dist/server/page-converter.mjs +2193 -1169
  153. package/dist/server/prebuild.mjs +1 -1
  154. package/dist/server/rendering/server.mjs +2770 -2742
  155. package/dist/server/rendering.mjs +2961 -2886
  156. package/dist/server/routing.mjs +2186 -1508
  157. package/dist/server/server.mjs +2237 -1287
  158. package/dist/server/theme-bridge.mjs +260 -0
  159. package/dist/styles/index.css +258 -0
  160. package/package.json +2 -1
  161. package/dist/SdkPreviewModeRuntime-4FGSVUYI.mjs +0 -8
  162. package/dist/client/cart-X4YK4FTW.mjs +0 -19
  163. package/dist/client/checkout-OM2BEPWD.mjs +0 -19
  164. package/dist/client/chunk-3DTWLTXM.mjs +0 -204
  165. package/dist/client/chunk-I2MMZO53.mjs +0 -6
  166. package/dist/client/shop-WXSYV5QO.mjs +0 -21
@@ -0,0 +1,390 @@
1
+ "use client";
2
+ import { useBlockApi } from './chunk-STJ2NCQM.mjs';
3
+ import { themeButtonClassName, assertNever11 } from './chunk-UQFY4AHX.mjs';
4
+ import { resolvePlanningDateInput, formatBookingPriceDisplay } from './chunk-25W2EQUN.mjs';
5
+ import { useState, useReducer, useSyncExternalStore, useEffect } from 'react';
6
+ import { jsxs, jsx } from 'react/jsx-runtime';
7
+
8
+ // ../blocks/src/system/runtime/nodes/shared/MagicLinkForm.state.ts
9
+ var initialMagicLinkSubmissionState = Object.freeze({
10
+ tag: "idle"
11
+ });
12
+ function magicLinkSubmissionReducer(state, action) {
13
+ switch (action.type) {
14
+ case "submit-started":
15
+ if (state.tag === "submitting") {
16
+ return state;
17
+ }
18
+ return { tag: "submitting" };
19
+ case "submit-succeeded":
20
+ if (state.tag !== "submitting") {
21
+ return state;
22
+ }
23
+ return { tag: "success" };
24
+ case "submit-failed":
25
+ if (state.tag !== "submitting") {
26
+ return state;
27
+ }
28
+ return {
29
+ tag: "error",
30
+ message: action.message
31
+ };
32
+ case "reset":
33
+ return initialMagicLinkSubmissionState;
34
+ default:
35
+ return assertNever11(action);
36
+ }
37
+ }
38
+ function isMagicLinkSubmitting(state) {
39
+ return state.tag === "submitting";
40
+ }
41
+ function getMagicLinkError(state) {
42
+ return state.tag === "error" ? state.message : null;
43
+ }
44
+ function MagicLinkForm({
45
+ initialEmail = "",
46
+ title,
47
+ subtitle,
48
+ buttonText = "Send login link",
49
+ successMessage = "Check your email for a login link to sign in.",
50
+ onSuccess,
51
+ classPrefix = "er",
52
+ compact = false
53
+ }) {
54
+ const api = useBlockApi();
55
+ const [email, setEmail] = useState(initialEmail);
56
+ const [submissionState, dispatchSubmission] = useReducer(
57
+ magicLinkSubmissionReducer,
58
+ initialMagicLinkSubmissionState
59
+ );
60
+ const loading = isMagicLinkSubmitting(submissionState);
61
+ const error = getMagicLinkError(submissionState);
62
+ const handleSubmit = async (e) => {
63
+ e.preventDefault();
64
+ const normalizedEmail = email.trim().toLowerCase();
65
+ if (!normalizedEmail || loading) return;
66
+ dispatchSubmission({ type: "submit-started" });
67
+ try {
68
+ const redirectTo = `${window.location.pathname}${window.location.search}${window.location.hash}`;
69
+ await api.sendMagicLink({
70
+ email: normalizedEmail,
71
+ redirectUrl: `${window.location.origin}/api/portal/callback?redirect_to=${encodeURIComponent(redirectTo)}`
72
+ });
73
+ dispatchSubmission({ type: "submit-succeeded" });
74
+ onSuccess?.();
75
+ } catch (err) {
76
+ console.error("Magic link error:", err);
77
+ dispatchSubmission({
78
+ type: "submit-failed",
79
+ message: getMagicLinkErrorMessage(err)
80
+ });
81
+ }
82
+ };
83
+ const handleReset = () => {
84
+ setEmail("");
85
+ dispatchSubmission({ type: "reset" });
86
+ };
87
+ if (submissionState.tag === "success") {
88
+ return /* @__PURE__ */ jsxs("div", { className: `${classPrefix}-magic-link-success`, children: [
89
+ /* @__PURE__ */ jsx("p", { className: `${classPrefix}-portal-auth-text ${classPrefix}-portal-auth-text--success`, children: successMessage }),
90
+ !compact && /* @__PURE__ */ jsx(
91
+ "button",
92
+ {
93
+ type: "button",
94
+ className: classPrefix === "cp" ? themeButtonClassName({ variant: "secondary", size: "md" }) : `${classPrefix}-modal-btn ${classPrefix}-modal-btn--secondary`,
95
+ onClick: handleReset,
96
+ children: "Try a different email"
97
+ }
98
+ )
99
+ ] });
100
+ }
101
+ return /* @__PURE__ */ jsxs("form", { onSubmit: handleSubmit, className: `${classPrefix}-magic-link-form`, children: [
102
+ title && /* @__PURE__ */ jsx("h3", { className: `${classPrefix}-magic-link-title`, children: title }),
103
+ subtitle && /* @__PURE__ */ jsx("p", { className: `${classPrefix}-portal-auth-text`, children: subtitle }),
104
+ /* @__PURE__ */ jsx(
105
+ "input",
106
+ {
107
+ type: "email",
108
+ className: classPrefix === "cp" ? "cp-input" : `${classPrefix}-form__input`,
109
+ placeholder: "your@email.com",
110
+ value: email,
111
+ onChange: (e) => setEmail(e.target.value),
112
+ autoFocus: !compact,
113
+ required: true,
114
+ disabled: loading
115
+ }
116
+ ),
117
+ error && /* @__PURE__ */ jsx("p", { className: `${classPrefix}-portal-auth-text ${classPrefix}-portal-auth-text--error`, children: error }),
118
+ /* @__PURE__ */ jsx(
119
+ "button",
120
+ {
121
+ type: "submit",
122
+ className: classPrefix === "cp" ? themeButtonClassName({ variant: "primary", size: "md" }) : `${classPrefix}-modal-btn`,
123
+ disabled: !email.trim() || loading,
124
+ children: loading ? "Sending..." : buttonText
125
+ }
126
+ )
127
+ ] });
128
+ }
129
+ function getMagicLinkErrorMessage(error) {
130
+ return error instanceof Error ? error.message : "Failed to send. Please try again.";
131
+ }
132
+
133
+ // ../blocks/src/system/blocks/courses/shared/pricing.ts
134
+ function isSaleWindowOpen(option, now) {
135
+ if (!option.isActive) {
136
+ return false;
137
+ }
138
+ if (option.saleStartsAt && new Date(option.saleStartsAt) > now) {
139
+ return false;
140
+ }
141
+ if (option.saleEndsAt && new Date(option.saleEndsAt) < now) {
142
+ return false;
143
+ }
144
+ return true;
145
+ }
146
+ function toExactOrFreeDisplay(amount, currency) {
147
+ if (amount <= 0) {
148
+ return { kind: "free", currency };
149
+ }
150
+ return { kind: "exact", amount, currency };
151
+ }
152
+ function getSelectableCoursePricingOptionsForNow(course, now) {
153
+ if (!course.pricing || course.pricing.pricingStrategy !== "tiered") {
154
+ return [];
155
+ }
156
+ return [...course.pricing.options].filter((option) => isSaleWindowOpen(option, now)).sort((left, right) => {
157
+ if (left.sortOrder !== right.sortOrder) {
158
+ return left.sortOrder - right.sortOrder;
159
+ }
160
+ if (left.priceAmount !== right.priceAmount) {
161
+ return left.priceAmount - right.priceAmount;
162
+ }
163
+ return left.name.localeCompare(right.name);
164
+ });
165
+ }
166
+ function resolveCoursePricingState(course, selectedPricingOptionId, nowInput = {}) {
167
+ const currency = course.pricing?.currency ?? course.currency;
168
+ if (!course.pricing) {
169
+ const legacyAmount = course.priceCents ?? 0;
170
+ return {
171
+ currency,
172
+ display: toExactOrFreeDisplay(legacyAmount, currency),
173
+ selectableOptions: [],
174
+ requiresSelection: false,
175
+ selectedOption: null,
176
+ selectedPriceAmount: legacyAmount,
177
+ selectedRequiresPayment: legacyAmount > 0,
178
+ hasPaidSelection: legacyAmount > 0,
179
+ hasFreeSelection: legacyAmount <= 0
180
+ };
181
+ }
182
+ switch (course.pricing.pricingStrategy) {
183
+ case "free":
184
+ return {
185
+ currency,
186
+ display: { kind: "free", currency },
187
+ selectableOptions: [],
188
+ requiresSelection: false,
189
+ selectedOption: null,
190
+ selectedPriceAmount: 0,
191
+ selectedRequiresPayment: false,
192
+ hasPaidSelection: false,
193
+ hasFreeSelection: true
194
+ };
195
+ case "single": {
196
+ const amount = course.pricing.singlePriceAmount ?? 0;
197
+ return {
198
+ currency,
199
+ display: toExactOrFreeDisplay(amount, currency),
200
+ selectableOptions: [],
201
+ requiresSelection: false,
202
+ selectedOption: null,
203
+ selectedPriceAmount: amount,
204
+ selectedRequiresPayment: amount > 0,
205
+ hasPaidSelection: amount > 0,
206
+ hasFreeSelection: amount <= 0
207
+ };
208
+ }
209
+ case "tiered": {
210
+ const selectableOptions = getSelectableCoursePricingOptionsForNow(
211
+ course,
212
+ resolvePlanningDateInput(nowInput)
213
+ );
214
+ const selectedOption = (selectedPricingOptionId ? selectableOptions.find((option) => option.id === selectedPricingOptionId) : null) ?? (selectableOptions.length === 1 ? selectableOptions[0] ?? null : null);
215
+ const lowestAmount = selectableOptions.reduce((lowest, option) => {
216
+ if (lowest === null || option.priceAmount < lowest) {
217
+ return option.priceAmount;
218
+ }
219
+ return lowest;
220
+ }, null);
221
+ const display = lowestAmount === null ? { kind: "unavailable", currency } : selectableOptions.length > 1 && lowestAmount > 0 ? { kind: "from", amount: lowestAmount, currency } : toExactOrFreeDisplay(lowestAmount, currency);
222
+ return {
223
+ currency,
224
+ display,
225
+ selectableOptions,
226
+ requiresSelection: selectableOptions.length > 1,
227
+ selectedOption,
228
+ selectedPriceAmount: selectedOption?.priceAmount ?? null,
229
+ selectedRequiresPayment: (selectedOption?.priceAmount ?? 0) > 0,
230
+ hasPaidSelection: selectableOptions.some((option) => option.priceAmount > 0),
231
+ hasFreeSelection: selectableOptions.some((option) => option.priceAmount === 0)
232
+ };
233
+ }
234
+ }
235
+ }
236
+ function formatCoursePriceDisplay(display, locale) {
237
+ return formatBookingPriceDisplay(display, { decimals: "exact", locale });
238
+ }
239
+ function formatCoursePriceAmount(amount, currency, locale) {
240
+ return formatCoursePriceDisplay(
241
+ amount > 0 ? { kind: "exact", amount, currency } : { kind: "free", currency },
242
+ locale
243
+ );
244
+ }
245
+
246
+ // ../blocks/src/system/runtime/shared/useWaitlistClaim.state.ts
247
+ var DEFAULT_WAITLIST_CLAIM_ERROR = "Failed to resolve waitlist claim";
248
+ function createInitialWaitlistClaimState(hasToken) {
249
+ return hasToken ? { kind: "resolving" } : { kind: "idle" };
250
+ }
251
+ function waitlistClaimReducer(_state, action) {
252
+ switch (action.type) {
253
+ case "cleared":
254
+ return { kind: "idle" };
255
+ case "started":
256
+ return { kind: "resolving" };
257
+ case "resolved":
258
+ return { kind: "resolved", claim: action.claim };
259
+ case "failed":
260
+ return action.failure;
261
+ }
262
+ }
263
+ function toWaitlistClaimResolveFailure(error) {
264
+ const message = error instanceof Error ? error.message : DEFAULT_WAITLIST_CLAIM_ERROR;
265
+ if (isUnauthorizedBlockApiError(error)) {
266
+ return { kind: "portal-login-required", message };
267
+ }
268
+ return { kind: "error", message };
269
+ }
270
+ function isUnauthorizedBlockApiError(error) {
271
+ return error instanceof Error && error.name === "BlockApiError" && hasStatus(error) && error.status === 401;
272
+ }
273
+ function hasStatus(value) {
274
+ return typeof value === "object" && value !== null && "status" in value;
275
+ }
276
+ function getWaitlistClaim(state) {
277
+ return state.kind === "resolved" ? state.claim : null;
278
+ }
279
+ function getWaitlistClaimError(state) {
280
+ return state.kind === "error" ? state.message : null;
281
+ }
282
+ function getWaitlistClaimLoginMessage(state) {
283
+ return state.kind === "portal-login-required" ? state.message : null;
284
+ }
285
+ function requiresWaitlistClaimPortalLogin(state) {
286
+ return state.kind === "portal-login-required";
287
+ }
288
+ function isWaitlistClaimLoading(state) {
289
+ return state.kind === "resolving";
290
+ }
291
+
292
+ // ../blocks/src/system/runtime/shared/useWaitlistClaim.ts
293
+ var WAITLIST_CLAIM_LOCATION_EVENT = "riverbank:waitlist-claim-location-change";
294
+ var historyPatched = false;
295
+ function emitWaitlistClaimLocationChange() {
296
+ if (typeof window === "undefined") return;
297
+ window.dispatchEvent(new Event(WAITLIST_CLAIM_LOCATION_EVENT));
298
+ }
299
+ function ensureWaitlistClaimLocationTracking() {
300
+ if (typeof window === "undefined" || historyPatched) {
301
+ return;
302
+ }
303
+ historyPatched = true;
304
+ const history = window.history;
305
+ if (history.__riverbankWaitlistClaimPatched__) {
306
+ return;
307
+ }
308
+ const wrapHistoryMethod = (method) => {
309
+ return function patched(...args) {
310
+ method.apply(this, args);
311
+ emitWaitlistClaimLocationChange();
312
+ };
313
+ };
314
+ try {
315
+ history.pushState = wrapHistoryMethod(history.pushState);
316
+ history.replaceState = wrapHistoryMethod(history.replaceState);
317
+ history.__riverbankWaitlistClaimPatched__ = true;
318
+ } catch {
319
+ }
320
+ window.addEventListener("popstate", emitWaitlistClaimLocationChange);
321
+ }
322
+ function getWaitlistClaimTokenFromUrl() {
323
+ if (typeof window === "undefined") {
324
+ return null;
325
+ }
326
+ const token = new URLSearchParams(window.location.search).get("waitlist_claim")?.trim() ?? "";
327
+ return token.length > 0 ? token : null;
328
+ }
329
+ function subscribeToWaitlistClaimToken(callback) {
330
+ if (typeof window === "undefined") {
331
+ return () => {
332
+ };
333
+ }
334
+ ensureWaitlistClaimLocationTracking();
335
+ window.addEventListener(WAITLIST_CLAIM_LOCATION_EVENT, callback);
336
+ return () => {
337
+ window.removeEventListener(WAITLIST_CLAIM_LOCATION_EVENT, callback);
338
+ };
339
+ }
340
+ function getWaitlistClaimTokenSnapshot() {
341
+ return getWaitlistClaimTokenFromUrl();
342
+ }
343
+ function useWaitlistClaim() {
344
+ const api = useBlockApi();
345
+ const token = useSyncExternalStore(
346
+ subscribeToWaitlistClaimToken,
347
+ getWaitlistClaimTokenSnapshot,
348
+ () => null
349
+ );
350
+ const [state, dispatch] = useReducer(
351
+ waitlistClaimReducer,
352
+ Boolean(token),
353
+ createInitialWaitlistClaimState
354
+ );
355
+ useEffect(() => {
356
+ let cancelled = false;
357
+ async function resolveClaim() {
358
+ if (!token) {
359
+ dispatch({ type: "cleared" });
360
+ return;
361
+ }
362
+ dispatch({ type: "started" });
363
+ try {
364
+ const result = await api.resolveWaitlistClaim({ claimToken: token });
365
+ if (cancelled) return;
366
+ dispatch({ type: "resolved", claim: result });
367
+ } catch (claimError) {
368
+ if (cancelled) return;
369
+ dispatch({
370
+ type: "failed",
371
+ failure: toWaitlistClaimResolveFailure(claimError)
372
+ });
373
+ }
374
+ }
375
+ void resolveClaim();
376
+ return () => {
377
+ cancelled = true;
378
+ };
379
+ }, [api, token]);
380
+ return {
381
+ token,
382
+ claim: getWaitlistClaim(state),
383
+ error: getWaitlistClaimError(state),
384
+ loginMessage: getWaitlistClaimLoginMessage(state),
385
+ requiresPortalLogin: requiresWaitlistClaimPortalLogin(state),
386
+ isLoading: isWaitlistClaimLoading(state)
387
+ };
388
+ }
389
+
390
+ export { MagicLinkForm, formatCoursePriceAmount, formatCoursePriceDisplay, resolveCoursePricingState, useWaitlistClaim };
@@ -915,9 +915,8 @@ function createBlockApi(config) {
915
915
  name: data.name,
916
916
  company: data.company,
917
917
  phone: data.phone,
918
- listId: data.listId,
918
+ target: data.target,
919
919
  tags: data.tags,
920
- blockId: data.blockId,
921
920
  meta: data.meta
922
921
  }
923
922
  });
@@ -1190,4 +1189,4 @@ function FeedbackMessage({
1190
1189
  );
1191
1190
  }
1192
1191
 
1193
- export { BlockApiError, BlockApiProvider, FeedbackMessage, useBlockApi };
1192
+ export { BlockApiProvider, FeedbackMessage, useBlockApi };