@riverbankcms/sdk 0.148.0 → 0.149.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 (154) hide show
  1. package/README.md +1 -1
  2. package/dist/{PreviewEditorSidebar-DvEPG3Z2.mjs → PreviewEditorSidebar-DBKln68M.mjs} +103 -66
  3. package/dist/{PreviewEditorUI-D6eb6fkx.mjs → PreviewEditorUI-DpRX4Mum.mjs} +3 -6
  4. package/dist/{PreviewQueryProvider-5znTyJuz.mjs → PreviewQueryProvider-C0mndwHB.mjs} +3 -3
  5. package/dist/{SdkPreviewModeRuntime-DJ6utQ_R.mjs → SdkPreviewModeRuntime-DJPmPY-r.mjs} +95 -67
  6. package/dist/{SiteChromeCustomizeContext-CFJYh6vo.mjs → SiteChromeCustomizeContext-JYA0cJ_Z.mjs} +982 -734
  7. package/dist/_dts/api/src/bookingConfig.d.ts +33 -48
  8. package/dist/_dts/api/src/bookingManagementEndpoints.d.ts +2 -6
  9. package/dist/_dts/api/src/bookingOperations.d.ts +5 -7
  10. package/dist/_dts/api/src/bookingRecords.d.ts +15 -11
  11. package/dist/_dts/api/src/bookingRefundOutcomes.d.ts +5 -5
  12. package/dist/_dts/api/src/clientErrorReporting.d.ts +11 -0
  13. package/dist/_dts/api/src/commercePortalEndpoints.d.ts +0 -2
  14. package/dist/_dts/api/src/common/cancellation.d.ts +23 -0
  15. package/dist/_dts/api/src/customerMembershipOutcomes.d.ts +1 -1
  16. package/dist/_dts/api/src/endpoints.d.ts +2 -10
  17. package/dist/_dts/api/src/eventManagementContracts.d.ts +4 -7
  18. package/dist/_dts/api/src/index.d.ts +3 -3
  19. package/dist/_dts/api/src/publicAppointmentBookingContracts.d.ts +2 -2
  20. package/dist/_dts/api/src/publicExperience/commerceEndpoints.d.ts +2 -29
  21. package/dist/_dts/api/src/request.d.ts +1 -1
  22. package/dist/_dts/api/src/sdk-event-upsert.d.ts +1 -1
  23. package/dist/_dts/api/src/sdkPullEventContracts.d.ts +1 -1
  24. package/dist/_dts/api/src/siteOperations.d.ts +6 -2
  25. package/dist/_dts/blocks/src/contracts/index.d.ts +1 -1
  26. package/dist/_dts/blocks/src/contracts/non-block-islands.d.ts +2 -2
  27. package/dist/_dts/blocks/src/contracts/proof-block-islands.d.ts +38 -10
  28. package/dist/_dts/blocks/src/portal/types.d.ts +9 -6
  29. package/dist/_dts/blocks/src/system/blocks/events/shared/schemas.d.ts +24 -24
  30. package/dist/_dts/blocks/src/system/blocks/events/shared/types.d.ts +1 -1
  31. package/dist/_dts/blocks/src/system/blocks/shared/bookingPaymentTerms.d.ts +84 -160
  32. package/dist/_dts/blocks/src/system/blocks/shop.d.ts +2 -2
  33. package/dist/_dts/blocks/src/system/blocks/shop.shared.d.ts +31 -4
  34. package/dist/_dts/blocks/src/system/runtime/api/types/appointments.d.ts +2 -2
  35. package/dist/_dts/blocks/src/system/runtime/api/types/core.d.ts +3 -1
  36. package/dist/_dts/blocks/src/system/runtime/components/registry.client.d.ts +48 -6
  37. package/dist/_dts/blocks/src/system/runtime/components/runtime-backed-blocks.d.ts +24 -3
  38. package/dist/_dts/blocks/src/system/runtime/hooks/useBookingNowIso.d.ts +8 -0
  39. package/dist/_dts/blocks/src/system/runtime/nodes/booking-form.state.d.ts +2 -1
  40. package/dist/_dts/blocks/src/system/runtime/nodes/commerce/shared/display.d.ts +9 -2
  41. package/dist/_dts/blocks/src/system/runtime/nodes/event-details/presentation.d.ts +14 -2
  42. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/PaymentSelectionStep.d.ts +2 -0
  43. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/eventPaymentOptions.d.ts +3 -3
  44. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/useEventRegistrationWizard.d.ts +4 -0
  45. package/dist/_dts/blocks/src/system/runtime/nodes/events/shared/eventCollectionContract.d.ts +24 -24
  46. package/dist/_dts/blocks/src/system/runtime/nodes/shop.interactive.d.ts +41 -6
  47. package/dist/_dts/blocks/src/system/runtime/shared/bookingPaymentOptions.d.ts +7 -2
  48. package/dist/_dts/commerce/src/purchase/bookingPaymentSelection.d.ts +54 -0
  49. package/dist/_dts/commerce/src/purchase/checkoutCommitPlan.d.ts +58 -13
  50. package/dist/_dts/commerce/src/purchase/checkoutErrorCodes.d.ts +1 -1
  51. package/dist/_dts/commerce/src/purchase/checkoutPaymentPlanPlanning.d.ts +16 -21
  52. package/dist/_dts/commerce/src/purchase/checkoutPaymentTerms.d.ts +23 -40
  53. package/dist/_dts/commerce/src/purchase/checkoutSessionMetadata.d.ts +2 -2
  54. package/dist/_dts/commerce/src/purchase/checkoutStripeSessionPlanning.d.ts +5 -4
  55. package/dist/_dts/commerce/src/purchase/index.d.ts +1 -3
  56. package/dist/_dts/commerce/src/purchase/membershipOrderItemMetadata.d.ts +4 -0
  57. package/dist/_dts/commerce/src/purchase/oneTimeCheckoutPlanning.d.ts +9 -4
  58. package/dist/_dts/commerce/src/purchase/orderInstalmentClosure.d.ts +13 -1
  59. package/dist/_dts/commerce/src/purchase/orderInstalmentLifecycle.d.ts +5 -0
  60. package/dist/_dts/commerce/src/purchase/orderItemMetadata.d.ts +3 -1
  61. package/dist/_dts/commerce/src/purchase/orderTypes.d.ts +7 -1
  62. package/dist/_dts/commerce/src/purchase/refundRailSplit.d.ts +1 -1
  63. package/dist/_dts/commerce/src/purchase/stateTransitions.d.ts +2 -2
  64. package/dist/_dts/commerce/src/purchase/stripeMinimumCharge.d.ts +6 -0
  65. package/dist/_dts/commerce/src/purchase/types.d.ts +2 -1
  66. package/dist/_dts/content-editor/src/controller/editLeaseHandover.d.ts +30 -0
  67. package/dist/_dts/content-editor/src/lib/browserStorage.d.ts +5 -0
  68. package/dist/_dts/core/src/booking-flexible-balance.d.ts +2 -2
  69. package/dist/_dts/core/src/booking-instalment-deposit.d.ts +20 -0
  70. package/dist/_dts/core/src/booking-live-payment-terms.d.ts +72 -0
  71. package/dist/_dts/core/src/booking-payment-options.d.ts +24 -0
  72. package/dist/_dts/core/src/booking-payment-schemas.d.ts +522 -0
  73. package/dist/_dts/core/src/branded.d.ts +3 -0
  74. package/dist/_dts/core/src/edit-lease.d.ts +5 -0
  75. package/dist/_dts/core/src/index.d.ts +3 -0
  76. package/dist/_dts/db/src/generated/supabase/database.types.d.ts +297 -36
  77. package/dist/_dts/media-editor/src/MediaPickerDialog.d.ts +3 -1
  78. package/dist/_dts/media-editor/src/MediaPickerMiniDialog.d.ts +10 -0
  79. package/dist/_dts/media-editor/src/index.d.ts +2 -0
  80. package/dist/_dts/preview-next/src/client/preview/PreviewEntryControllerProvider.d.ts +0 -1
  81. package/dist/_dts/preview-next/src/client/preview/PreviewShell.d.ts +1 -1
  82. package/dist/_dts/preview-next/src/client/previewAuthStore.d.ts +7 -0
  83. package/dist/_dts/preview-next/src/constants.d.ts +4 -0
  84. package/dist/_dts/preview-next/src/keepAlive.d.ts +1 -0
  85. package/dist/_dts/sdk/src/rendering/islands/types.d.ts +2 -12
  86. package/dist/_dts/sdk/src/version.d.ts +1 -1
  87. package/dist/_dts/theme-core/src/site-styles/pageDesignIntent.d.ts +0 -5
  88. package/dist/_dts/ui/src/color-picker.d.ts +1 -1
  89. package/dist/_dts/ui/src/palette/useHexDraft.d.ts +7 -0
  90. package/dist/client/{BookingMailingListNote-CzRt2dF_.mjs → BookingMailingListNote-Cr3EeTP5.mjs} +408 -69
  91. package/dist/client/{DemoBookingPortalAccess-mxqwap3f.mjs → DemoBookingPortalAccess-BFGB1Fay.mjs} +2 -2
  92. package/dist/client/{EventCombined.client-CDb11igO.mjs → EventCombined.client-DKYV0_ft.mjs} +6 -6
  93. package/dist/client/{EventListing.client-EgYhzKPa.mjs → EventListing.client-B9UIcEYc.mjs} +2 -2
  94. package/dist/client/{LeafletStaticMap-gtmtaA2b.mjs → LeafletStaticMap-CFLPkP0K.mjs} +1 -1
  95. package/dist/client/{TerminalPanel-DvNUP5ot.mjs → TerminalPanel-JjmgxEsR.mjs} +1 -1
  96. package/dist/client/{ThemedButton-C7CeUJjW.mjs → ThemedButton-CKV1Jh2m.mjs} +1 -1
  97. package/dist/client/{accordion-kjvt49rA.mjs → accordion-DXWIfT3T.mjs} +1 -1
  98. package/dist/client/{bookingForm-pbRZordh.mjs → bookingForm-CjZgHNvv.mjs} +11 -8
  99. package/dist/client/bookings.mjs +424 -320
  100. package/dist/client/{carousel-f4Zbmicv.mjs → carousel-DSLikmvZ.mjs} +1 -1
  101. package/dist/client/{cart-DO20An50.mjs → cart-HDjWReFt.mjs} +3 -3
  102. package/dist/client/{checkout-Du5amDR_.mjs → checkout-CUvRZA3W.mjs} +3 -3
  103. package/dist/client/client.mjs +963 -866
  104. package/dist/client/{context-eW97E945.mjs → context-DFmaZa-Q.mjs} +1 -1
  105. package/dist/client/{dates-jPCirRea.mjs → dates-BBep1JnF.mjs} +2 -2
  106. package/dist/client/{eventCalendar-C2M-iE4j.mjs → eventCalendar-zEobhxo4.mjs} +9 -9
  107. package/dist/client/{eventCombined-W6ns3LHg.mjs → eventCombined-Dp7bz5k-.mjs} +4 -4
  108. package/dist/client/{eventDetails-CR-GT0f0.mjs → eventDetails-FE-zqTt7.mjs} +4 -4
  109. package/dist/client/{eventListing-BK8AfYZz.mjs → eventListing-BMt5snal.mjs} +4 -4
  110. package/dist/client/{eventRegistration-BJSd4KUu.mjs → eventRegistration-O6ZxHfOb.mjs} +67 -342
  111. package/dist/client/{form-BvpfbQaT.mjs → form-DFa1D8vt.mjs} +3 -3
  112. package/dist/client/{headerSection-I5sUQ8x-.mjs → headerSection-CmjHLR-N.mjs} +3 -3
  113. package/dist/client/hooks.mjs +160 -129
  114. package/dist/client/{locationMap-BLvwf9_f.mjs → locationMap-BXKP_lGh.mjs} +3 -3
  115. package/dist/client/{newsletterForm-DrQ2weE8.mjs → newsletterForm-CU-HmxGx.mjs} +3 -3
  116. package/dist/client/{pricing-BES87mrR.mjs → pricing-KEAEsibq.mjs} +1 -1
  117. package/dist/client/{productDetail-Url9jcc5.mjs → productDetail-Ckp7MGnt.mjs} +3 -3
  118. package/dist/client/{productList-DE7ngEZJ.mjs → productList-D91V0sYa.mjs} +3 -3
  119. package/dist/client/{propsDecoder-D1OtGXDV.mjs → propsDecoder-DZd6RJeA.mjs} +155 -77
  120. package/dist/client/rendering/client.mjs +3356 -3192
  121. package/dist/client/rendering/islands.mjs +17 -17
  122. package/dist/client/rendering.mjs +956 -841
  123. package/dist/client/{routeIslandApiConfig-BG9Y-SHg.mjs → routeIslandApiConfig-E1EkhhYY.mjs} +1 -1
  124. package/dist/client/{shop-CJkuySJ3.mjs → shop-4F2jLQPI.mjs} +12 -13
  125. package/dist/client/{shop-commerce-4rKj5n9h.mjs → shop-commerce-BbfCJjB3.mjs} +6 -6
  126. package/dist/client/{shop-commerce-store-Bxm75Pg6.mjs → shop-commerce-store-vicweP2K.mjs} +1 -1
  127. package/dist/client/{shopShared-DpoQDWfz.mjs → shopShared-DlONJt0T.mjs} +4 -4
  128. package/dist/client/{useEventFilters-D8HliSqR.mjs → useEventFilters-COYyL3m7.mjs} +6 -6
  129. package/dist/preview-next/before-render.mjs +15 -22
  130. package/dist/preview-next/client/runtime.mjs +4 -4
  131. package/dist/preview-next/constants.mjs +5 -1
  132. package/dist/preview-next/index.mjs +5 -1
  133. package/dist/preview-next/keepAlive.mjs +149 -82
  134. package/dist/preview-next/middleware.mjs +15 -22
  135. package/dist/{previewAuthStore-BXXF3hhW.mjs → previewAuthStore-BBmV7UsW.mjs} +49 -29
  136. package/dist/{sdk-runtime-C2a05WjL.mjs → sdk-runtime-CwvFFjB-.mjs} +2 -2
  137. package/dist/{separator-CuNhBAhS.mjs → separator-ByL72zUT.mjs} +1 -1
  138. package/dist/server/components.mjs +167 -131
  139. package/dist/server/config-validation.mjs +160 -129
  140. package/dist/server/config.mjs +160 -129
  141. package/dist/server/data.mjs +160 -129
  142. package/dist/server/index.mjs +20 -27
  143. package/dist/server/next.mjs +174 -156
  144. package/dist/server/page-converter.mjs +145 -65
  145. package/dist/server/prebuild.mjs +1 -1
  146. package/dist/server/rendering/server.mjs +169 -131
  147. package/dist/server/rendering.mjs +167 -131
  148. package/dist/server/routing.mjs +165 -118
  149. package/dist/server/server.mjs +167 -154
  150. package/package.json +1 -1
  151. package/dist/_dts/api/src/bookingPaymentTermSchemas.d.ts +0 -123
  152. package/dist/_dts/commerce/src/purchase/checkoutPaymentTermPlanning.d.ts +0 -10
  153. package/dist/_dts/commerce/src/purchase/checkoutValidatedItemPlanning.d.ts +0 -55
  154. package/dist/_dts/commerce/src/purchase/orderInstalmentPayoff.d.ts +0 -24
@@ -357,6 +357,16 @@ function isRecord$9(value) {
357
357
  return typeof value === "object" && value !== null && !Array.isArray(value);
358
358
  }
359
359
  //#endregion
360
+ //#region ../core/src/booking-payment-options.ts
361
+ /** Automatic instalments and a flexible balance cannot share one booking offer. */
362
+ function validateBookingPaymentOptionKinds(kinds) {
363
+ if (kinds.length === 0) return err$1("no_options");
364
+ const uniqueKinds = new Set(kinds);
365
+ if (uniqueKinds.size !== kinds.length) return err$1("duplicate_kind");
366
+ if (uniqueKinds.has("instalment_plan") && uniqueKinds.has("flexible_balance")) return err$1("incompatible_collection_options");
367
+ return ok$1(void 0);
368
+ }
369
+ //#endregion
360
370
  //#region ../core/src/booking-time-zone.ts
361
371
  const TIME_ZONE_VALIDITY_CACHE_LIMIT = 100;
362
372
  const timeZoneValidityCache = /* @__PURE__ */ new Map();
@@ -1817,19 +1827,17 @@ function getBookingServicePaymentSelectionMode(service) {
1817
1827
  if (service?.paymentTermsAvailability?.kind === "pending_stripe_setup") return "pending_stripe_setup";
1818
1828
  const allowedKinds = service?.paymentTerms?.allowedOptions.map((option) => option.kind) ?? [];
1819
1829
  if (allowedKinds.length === 0) return "implicit_upfront";
1820
- if (allowedKinds.length === 1) {
1821
- const onlyKind = allowedKinds[0];
1822
- if (!onlyKind) return "unsupported";
1823
- switch (onlyKind) {
1824
- case "upfront": return "implicit_upfront";
1825
- case "deferred_manual": return "implicit_deferred_manual";
1826
- case "instalment_plan": return "implicit_instalment_plan";
1827
- case "flexible_balance": return "implicit_flexible_balance";
1828
- default: return assertNever$1(onlyKind);
1829
- }
1830
+ if (!validateBookingPaymentOptionKinds(allowedKinds).ok) return "unsupported";
1831
+ if (allowedKinds.length > 1) return "choice_required";
1832
+ const onlyKind = allowedKinds[0];
1833
+ switch (onlyKind) {
1834
+ case "upfront": return "implicit_upfront";
1835
+ case "deferred_manual": return "implicit_deferred_manual";
1836
+ case "instalment_plan": return "implicit_instalment_plan";
1837
+ case "flexible_balance": return "implicit_flexible_balance";
1838
+ case void 0: return "unsupported";
1839
+ default: return assertNever$1(onlyKind);
1830
1840
  }
1831
- if (allowedKinds.length === 2 && allowedKinds.includes("upfront") && (allowedKinds.includes("deferred_manual") || allowedKinds.includes("instalment_plan") || allowedKinds.includes("flexible_balance"))) return "choice_required";
1832
- return "unsupported";
1833
1841
  }
1834
1842
  function resolveDefaultBookingServiceId(formConfig, services) {
1835
1843
  const configuredServiceId = toTrimmedString(formConfig?.settings?.serviceId);
@@ -2146,68 +2154,115 @@ const bookingSourceFormSchema = z.object({
2146
2154
  updatedAt: z.string()
2147
2155
  });
2148
2156
  //#endregion
2149
- //#region ../blocks/src/system/blocks/shared/bookingPaymentTerms.ts
2150
- const bookingDepositRefundPolicySchema = z.enum(["refundable", "non_refundable"]);
2151
- const bookingInstalmentPlanSchema = z.union([
2152
- z.object({
2153
- kind: z.literal("deposit_plus_one_remainder"),
2154
- depositAmountCents: z.number().int().min(0),
2155
- depositRefundability: bookingDepositRefundPolicySchema,
2156
- remainderDueCount: z.number().int().positive(),
2157
- intervalUnit: z.enum([
2158
- "day",
2159
- "week",
2160
- "month"
2161
- ])
2162
- }),
2163
- z.object({
2164
- kind: z.literal("deposit_plus_scheduled_instalments"),
2165
- depositAmountCents: z.number().int().min(0),
2166
- depositRefundability: bookingDepositRefundPolicySchema,
2167
- instalmentCount: z.number().int().positive(),
2168
- intervalCount: z.number().int().positive(),
2169
- intervalUnit: z.enum([
2170
- "day",
2171
- "week",
2172
- "month"
2173
- ])
2174
- }),
2175
- z.object({
2176
- kind: z.literal("equal_scheduled_instalments"),
2177
- instalmentCount: z.number().int().positive(),
2178
- intervalCount: z.number().int().positive(),
2179
- intervalUnit: z.enum([
2180
- "day",
2181
- "week",
2182
- "month"
2183
- ])
2184
- })
2157
+ //#region ../core/src/booking-payment-schemas.ts
2158
+ const stripObject = (shape) => z.object(shape);
2159
+ const strictObject = (shape) => z.strictObject(shape);
2160
+ const depositRefundPolicySchema = z.enum(["refundable", "non_refundable"]);
2161
+ const intervalUnitSchema = z.enum([
2162
+ "day",
2163
+ "week",
2164
+ "month"
2185
2165
  ]);
2186
- const bookingFlexibleBalanceDueDateRuleSchema = z.union([z.object({
2187
- kind: z.literal("relative_to_start_date"),
2188
- daysBeforeStart: z.number().int().positive()
2189
- }), z.object({
2190
- kind: z.literal("fixed_calendar_date"),
2191
- dueAt: z.string().datetime()
2192
- })]);
2193
- const bookingFlexibleBalanceConfigSchema = z.object({
2194
- upfrontAmountCents: z.number().int().min(0),
2195
- dueDateRule: bookingFlexibleBalanceDueDateRuleSchema,
2196
- depositRefundability: bookingDepositRefundPolicySchema
2197
- });
2198
- const blockBookingPaymentCollectionOptionSchema = z.union([
2199
- z.object({ kind: z.literal("upfront") }),
2200
- z.object({ kind: z.literal("deferred_manual") }),
2201
- z.object({
2202
- kind: z.literal("instalment_plan"),
2203
- plan: bookingInstalmentPlanSchema
2204
- }),
2205
- z.object({
2206
- kind: z.literal("flexible_balance"),
2207
- config: bookingFlexibleBalanceConfigSchema
2208
- })
2209
- ]);
2210
- const blockBookingPaymentTermsSchema = z.object({ allowedOptions: z.array(blockBookingPaymentCollectionOptionSchema).min(1) });
2166
+ const nonNegativeIntegerSchema = z.number().int().nonnegative();
2167
+ const positiveIntegerSchema = z.number().int().positive();
2168
+ function createInstalmentPlanSchema(object) {
2169
+ return z.discriminatedUnion("kind", [
2170
+ object({
2171
+ kind: z.literal("deposit_plus_one_remainder"),
2172
+ depositAmountCents: nonNegativeIntegerSchema,
2173
+ depositRefundability: depositRefundPolicySchema,
2174
+ remainderDueCount: positiveIntegerSchema,
2175
+ intervalUnit: intervalUnitSchema
2176
+ }),
2177
+ object({
2178
+ kind: z.literal("deposit_plus_scheduled_instalments"),
2179
+ depositAmountCents: nonNegativeIntegerSchema,
2180
+ depositRefundability: depositRefundPolicySchema,
2181
+ instalmentCount: positiveIntegerSchema,
2182
+ intervalCount: positiveIntegerSchema,
2183
+ intervalUnit: intervalUnitSchema
2184
+ }),
2185
+ object({
2186
+ kind: z.literal("equal_scheduled_instalments"),
2187
+ instalmentCount: positiveIntegerSchema,
2188
+ intervalCount: positiveIntegerSchema,
2189
+ intervalUnit: intervalUnitSchema
2190
+ })
2191
+ ]);
2192
+ }
2193
+ function createFlexibleBalanceSchemas(object) {
2194
+ const dueDateRule = z.discriminatedUnion("kind", [object({
2195
+ kind: z.literal("relative_to_start_date"),
2196
+ daysBeforeStart: positiveIntegerSchema
2197
+ }), object({
2198
+ kind: z.literal("fixed_calendar_date"),
2199
+ dueAt: z.string().datetime()
2200
+ })]);
2201
+ return {
2202
+ dueDateRule,
2203
+ config: object({
2204
+ upfrontAmountCents: nonNegativeIntegerSchema,
2205
+ dueDateRule,
2206
+ depositRefundability: depositRefundPolicySchema
2207
+ })
2208
+ };
2209
+ }
2210
+ const paymentOptionKindsMessages = {
2211
+ no_options: "Choose at least one way for customers to pay.",
2212
+ duplicate_kind: "Choose each payment option only once.",
2213
+ incompatible_collection_options: "Offer instalments or a deposit with the rest paid later, but not both."
2214
+ };
2215
+ function buildBookingPaymentOptionSchemas(object) {
2216
+ const instalmentPlan = createInstalmentPlanSchema(object);
2217
+ const flexibleBalance = createFlexibleBalanceSchemas(object);
2218
+ const paymentCollectionOption = z.discriminatedUnion("kind", [
2219
+ object({ kind: z.literal("upfront") }),
2220
+ object({ kind: z.literal("deferred_manual") }),
2221
+ object({
2222
+ kind: z.literal("instalment_plan"),
2223
+ plan: instalmentPlan
2224
+ }),
2225
+ object({
2226
+ kind: z.literal("flexible_balance"),
2227
+ config: flexibleBalance.config
2228
+ })
2229
+ ]);
2230
+ const paymentTerms = object({ allowedOptions: z.array(paymentCollectionOption) }).superRefine(({ allowedOptions }, ctx) => {
2231
+ const result = validateBookingPaymentOptionKinds(allowedOptions.map(({ kind }) => kind));
2232
+ if (!result.ok) ctx.addIssue({
2233
+ code: "custom",
2234
+ path: ["allowedOptions"],
2235
+ message: paymentOptionKindsMessages[result.error]
2236
+ });
2237
+ });
2238
+ const paymentOptionsChoice = z.discriminatedUnion("source", [z.strictObject({ source: z.literal("default") }), z.strictObject({
2239
+ source: z.literal("custom"),
2240
+ paymentTerms
2241
+ })]);
2242
+ return {
2243
+ depositRefundPolicy: depositRefundPolicySchema,
2244
+ instalmentPlan,
2245
+ flexibleBalanceDueDateRule: flexibleBalance.dueDateRule,
2246
+ flexibleBalanceConfig: flexibleBalance.config,
2247
+ paymentCollectionOption,
2248
+ paymentTerms,
2249
+ paymentOptionsChoice
2250
+ };
2251
+ }
2252
+ function createBookingPaymentOptionSchemas(mode) {
2253
+ return mode === "strict" ? buildBookingPaymentOptionSchemas(strictObject) : buildBookingPaymentOptionSchemas(stripObject);
2254
+ }
2255
+ const bookingPaymentOptionSchemas = createBookingPaymentOptionSchemas("strip");
2256
+ bookingPaymentOptionSchemas.depositRefundPolicy;
2257
+ bookingPaymentOptionSchemas.instalmentPlan;
2258
+ bookingPaymentOptionSchemas.flexibleBalanceDueDateRule;
2259
+ bookingPaymentOptionSchemas.flexibleBalanceConfig;
2260
+ bookingPaymentOptionSchemas.paymentCollectionOption;
2261
+ const bookingPaymentTermsSchema = bookingPaymentOptionSchemas.paymentTerms;
2262
+ bookingPaymentOptionSchemas.paymentOptionsChoice;
2263
+ //#endregion
2264
+ //#region ../blocks/src/system/blocks/shared/bookingPaymentTerms.ts
2265
+ const blockBookingPaymentTermsSchema = bookingPaymentTermsSchema;
2211
2266
  //#endregion
2212
2267
  //#region ../blocks/src/system/runtime/nodes/booking-form.interactive.ts
2213
2268
  const blockBookingPaymentTermsAvailabilitySchema = z.union([z.object({
@@ -8127,7 +8182,7 @@ const publicPassProductCollectionSchema = z.object({ passes: z.array(publicPassP
8127
8182
  /**
8128
8183
  * Public membership product for shop display
8129
8184
  */
8130
- const publicMembershipProductSchema = z.object({
8185
+ const publicMembershipProductFields = {
8131
8186
  id: z.string(),
8132
8187
  name: z.string(),
8133
8188
  description: z.string().nullable(),
@@ -8136,7 +8191,16 @@ const publicMembershipProductSchema = z.object({
8136
8191
  billingInterval: z.enum(["month", "year"]),
8137
8192
  eligibleCategoryIds: z.array(z.string()),
8138
8193
  eligibleCategoryNames: z.array(z.string())
8194
+ };
8195
+ const purchasablePublicMembershipProductSchema = z.object({
8196
+ ...publicMembershipProductFields,
8197
+ purchaseAvailability: z.literal("purchasable")
8139
8198
  });
8199
+ const publicMembershipProductSchema = z.discriminatedUnion("purchaseAvailability", [purchasablePublicMembershipProductSchema, z.object({
8200
+ ...publicMembershipProductFields,
8201
+ purchaseAvailability: z.literal("display_only"),
8202
+ unavailabilityReason: z.literal("online_payments_unavailable")
8203
+ })]);
8140
8204
  const publicMembershipProductCollectionSchema = z.object({ memberships: z.array(publicMembershipProductSchema) });
8141
8205
  //#endregion
8142
8206
  //#region ../blocks/src/system/node/schema.ts
@@ -12340,7 +12404,7 @@ function buildPassesMembershipsDisplay(options) {
12340
12404
  product: pass
12341
12405
  } : {
12342
12406
  kind: "unavailable",
12343
- label: "Online purchasing coming soon."
12407
+ label: "Online purchasing is unavailable."
12344
12408
  }
12345
12409
  };
12346
12410
  });
@@ -12350,7 +12414,14 @@ function buildPassesMembershipsDisplay(options) {
12350
12414
  description: options.showDescriptions ? membership.description : null,
12351
12415
  priceLabel: formatCommercePrice(membership.price, membership.currency),
12352
12416
  intervalLabel: formatInterval(membership.billingInterval),
12353
- actionLabel: options.membershipActionLabel
12417
+ action: membership.purchaseAvailability === "purchasable" ? {
12418
+ kind: "purchase",
12419
+ label: options.membershipActionLabel,
12420
+ product: membership
12421
+ } : {
12422
+ kind: "unavailable",
12423
+ label: "Online purchasing is unavailable."
12424
+ }
12354
12425
  }));
12355
12426
  return {
12356
12427
  kind: "passes-memberships",
@@ -12570,7 +12641,14 @@ const membershipCardDisplaySchema = z.object({
12570
12641
  description: z.string().nullable(),
12571
12642
  priceLabel: z.string(),
12572
12643
  intervalLabel: z.string(),
12573
- actionLabel: z.string()
12644
+ action: z.discriminatedUnion("kind", [z.object({
12645
+ kind: z.literal("purchase"),
12646
+ label: z.string(),
12647
+ product: purchasablePublicMembershipProductSchema
12648
+ }), z.object({
12649
+ kind: z.literal("unavailable"),
12650
+ label: z.string()
12651
+ })])
12574
12652
  });
12575
12653
  const passesMembershipsDisplaySchema = z.object({
12576
12654
  kind: z.literal("passes-memberships"),