@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
@@ -2029,6 +2029,16 @@ function isRecord$12(value) {
2029
2029
  return typeof value === "object" && value !== null && !Array.isArray(value);
2030
2030
  }
2031
2031
  //#endregion
2032
+ //#region ../core/src/booking-payment-options.ts
2033
+ /** Automatic instalments and a flexible balance cannot share one booking offer. */
2034
+ function validateBookingPaymentOptionKinds(kinds) {
2035
+ if (kinds.length === 0) return err("no_options");
2036
+ const uniqueKinds = new Set(kinds);
2037
+ if (uniqueKinds.size !== kinds.length) return err("duplicate_kind");
2038
+ if (uniqueKinds.has("instalment_plan") && uniqueKinds.has("flexible_balance")) return err("incompatible_collection_options");
2039
+ return ok(void 0);
2040
+ }
2041
+ //#endregion
2032
2042
  //#region ../core/src/booking-time-zone.ts
2033
2043
  const TIME_ZONE_VALIDITY_CACHE_LIMIT = 100;
2034
2044
  const timeZoneValidityCache = /* @__PURE__ */ new Map();
@@ -4118,7 +4128,8 @@ const CLIENT_ERROR_REPORT_LIMITS = {
4118
4128
  stack: 8e3,
4119
4129
  digest: 128,
4120
4130
  componentStack: 8e3,
4121
- sourceLocation: 1024
4131
+ sourceLocation: 1024,
4132
+ navigationAgeMs: 6e4
4122
4133
  };
4123
4134
  const clientErrorEventSchema = z.enum([
4124
4135
  "dashboard:route-error",
@@ -4135,7 +4146,17 @@ z.object({
4135
4146
  stack: z.string().max(CLIENT_ERROR_REPORT_LIMITS.stack).nullable(),
4136
4147
  digest: z.string().max(CLIENT_ERROR_REPORT_LIMITS.digest).nullable(),
4137
4148
  componentStack: z.string().max(CLIENT_ERROR_REPORT_LIMITS.componentStack).nullable(),
4138
- sourceLocation: z.string().max(CLIENT_ERROR_REPORT_LIMITS.sourceLocation).nullable()
4149
+ sourceLocation: z.string().max(CLIENT_ERROR_REPORT_LIMITS.sourceLocation).nullable(),
4150
+ navigation: z.object({
4151
+ fromPathname: z.string().regex(/^\/[^?#]*$/).max(CLIENT_ERROR_REPORT_LIMITS.pathname),
4152
+ toPathname: z.string().regex(/^\/[^?#]*$/).max(CLIENT_ERROR_REPORT_LIMITS.pathname),
4153
+ type: z.enum([
4154
+ "push",
4155
+ "replace",
4156
+ "traverse"
4157
+ ]),
4158
+ ageMs: z.number().int().min(0).max(CLIENT_ERROR_REPORT_LIMITS.navigationAgeMs)
4159
+ }).strict().nullable().optional()
4139
4160
  }).strict();
4140
4161
  ({
4141
4162
  ...SITE_LIFECYCLE_ENDPOINT_DEFINITIONS,
@@ -29198,68 +29219,115 @@ const RichTextDocSchema = z.object({
29198
29219
  content: z.array(TipTapNodeSchema)
29199
29220
  }).strict();
29200
29221
  //#endregion
29201
- //#region ../blocks/src/system/blocks/shared/bookingPaymentTerms.ts
29202
- const bookingDepositRefundPolicySchema$1 = z.enum(["refundable", "non_refundable"]);
29203
- const bookingInstalmentPlanSchema$1 = z.union([
29204
- z.object({
29205
- kind: z.literal("deposit_plus_one_remainder"),
29206
- depositAmountCents: z.number().int().min(0),
29207
- depositRefundability: bookingDepositRefundPolicySchema$1,
29208
- remainderDueCount: z.number().int().positive(),
29209
- intervalUnit: z.enum([
29210
- "day",
29211
- "week",
29212
- "month"
29213
- ])
29214
- }),
29215
- z.object({
29216
- kind: z.literal("deposit_plus_scheduled_instalments"),
29217
- depositAmountCents: z.number().int().min(0),
29218
- depositRefundability: bookingDepositRefundPolicySchema$1,
29219
- instalmentCount: z.number().int().positive(),
29220
- intervalCount: z.number().int().positive(),
29221
- intervalUnit: z.enum([
29222
- "day",
29223
- "week",
29224
- "month"
29225
- ])
29226
- }),
29227
- z.object({
29228
- kind: z.literal("equal_scheduled_instalments"),
29229
- instalmentCount: z.number().int().positive(),
29230
- intervalCount: z.number().int().positive(),
29231
- intervalUnit: z.enum([
29232
- "day",
29233
- "week",
29234
- "month"
29235
- ])
29236
- })
29222
+ //#region ../core/src/booking-payment-schemas.ts
29223
+ const stripObject = (shape) => z.object(shape);
29224
+ const strictObject = (shape) => z.strictObject(shape);
29225
+ const depositRefundPolicySchema = z.enum(["refundable", "non_refundable"]);
29226
+ const intervalUnitSchema = z.enum([
29227
+ "day",
29228
+ "week",
29229
+ "month"
29237
29230
  ]);
29238
- const bookingFlexibleBalanceDueDateRuleSchema$1 = z.union([z.object({
29239
- kind: z.literal("relative_to_start_date"),
29240
- daysBeforeStart: z.number().int().positive()
29241
- }), z.object({
29242
- kind: z.literal("fixed_calendar_date"),
29243
- dueAt: z.string().datetime()
29244
- })]);
29245
- const bookingFlexibleBalanceConfigSchema$1 = z.object({
29246
- upfrontAmountCents: z.number().int().min(0),
29247
- dueDateRule: bookingFlexibleBalanceDueDateRuleSchema$1,
29248
- depositRefundability: bookingDepositRefundPolicySchema$1
29249
- });
29250
- const blockBookingPaymentCollectionOptionSchema = z.union([
29251
- z.object({ kind: z.literal("upfront") }),
29252
- z.object({ kind: z.literal("deferred_manual") }),
29253
- z.object({
29254
- kind: z.literal("instalment_plan"),
29255
- plan: bookingInstalmentPlanSchema$1
29256
- }),
29257
- z.object({
29258
- kind: z.literal("flexible_balance"),
29259
- config: bookingFlexibleBalanceConfigSchema$1
29260
- })
29261
- ]);
29262
- const blockBookingPaymentTermsSchema = z.object({ allowedOptions: z.array(blockBookingPaymentCollectionOptionSchema).min(1) });
29231
+ const nonNegativeIntegerSchema = z.number().int().nonnegative();
29232
+ const positiveIntegerSchema = z.number().int().positive();
29233
+ function createInstalmentPlanSchema(object) {
29234
+ return z.discriminatedUnion("kind", [
29235
+ object({
29236
+ kind: z.literal("deposit_plus_one_remainder"),
29237
+ depositAmountCents: nonNegativeIntegerSchema,
29238
+ depositRefundability: depositRefundPolicySchema,
29239
+ remainderDueCount: positiveIntegerSchema,
29240
+ intervalUnit: intervalUnitSchema
29241
+ }),
29242
+ object({
29243
+ kind: z.literal("deposit_plus_scheduled_instalments"),
29244
+ depositAmountCents: nonNegativeIntegerSchema,
29245
+ depositRefundability: depositRefundPolicySchema,
29246
+ instalmentCount: positiveIntegerSchema,
29247
+ intervalCount: positiveIntegerSchema,
29248
+ intervalUnit: intervalUnitSchema
29249
+ }),
29250
+ object({
29251
+ kind: z.literal("equal_scheduled_instalments"),
29252
+ instalmentCount: positiveIntegerSchema,
29253
+ intervalCount: positiveIntegerSchema,
29254
+ intervalUnit: intervalUnitSchema
29255
+ })
29256
+ ]);
29257
+ }
29258
+ function createFlexibleBalanceSchemas(object) {
29259
+ const dueDateRule = z.discriminatedUnion("kind", [object({
29260
+ kind: z.literal("relative_to_start_date"),
29261
+ daysBeforeStart: positiveIntegerSchema
29262
+ }), object({
29263
+ kind: z.literal("fixed_calendar_date"),
29264
+ dueAt: z.string().datetime()
29265
+ })]);
29266
+ return {
29267
+ dueDateRule,
29268
+ config: object({
29269
+ upfrontAmountCents: nonNegativeIntegerSchema,
29270
+ dueDateRule,
29271
+ depositRefundability: depositRefundPolicySchema
29272
+ })
29273
+ };
29274
+ }
29275
+ const paymentOptionKindsMessages = {
29276
+ no_options: "Choose at least one way for customers to pay.",
29277
+ duplicate_kind: "Choose each payment option only once.",
29278
+ incompatible_collection_options: "Offer instalments or a deposit with the rest paid later, but not both."
29279
+ };
29280
+ function buildBookingPaymentOptionSchemas(object) {
29281
+ const instalmentPlan = createInstalmentPlanSchema(object);
29282
+ const flexibleBalance = createFlexibleBalanceSchemas(object);
29283
+ const paymentCollectionOption = z.discriminatedUnion("kind", [
29284
+ object({ kind: z.literal("upfront") }),
29285
+ object({ kind: z.literal("deferred_manual") }),
29286
+ object({
29287
+ kind: z.literal("instalment_plan"),
29288
+ plan: instalmentPlan
29289
+ }),
29290
+ object({
29291
+ kind: z.literal("flexible_balance"),
29292
+ config: flexibleBalance.config
29293
+ })
29294
+ ]);
29295
+ const paymentTerms = object({ allowedOptions: z.array(paymentCollectionOption) }).superRefine(({ allowedOptions }, ctx) => {
29296
+ const result = validateBookingPaymentOptionKinds(allowedOptions.map(({ kind }) => kind));
29297
+ if (!result.ok) ctx.addIssue({
29298
+ code: "custom",
29299
+ path: ["allowedOptions"],
29300
+ message: paymentOptionKindsMessages[result.error]
29301
+ });
29302
+ });
29303
+ const paymentOptionsChoice = z.discriminatedUnion("source", [z.strictObject({ source: z.literal("default") }), z.strictObject({
29304
+ source: z.literal("custom"),
29305
+ paymentTerms
29306
+ })]);
29307
+ return {
29308
+ depositRefundPolicy: depositRefundPolicySchema,
29309
+ instalmentPlan,
29310
+ flexibleBalanceDueDateRule: flexibleBalance.dueDateRule,
29311
+ flexibleBalanceConfig: flexibleBalance.config,
29312
+ paymentCollectionOption,
29313
+ paymentTerms,
29314
+ paymentOptionsChoice
29315
+ };
29316
+ }
29317
+ function createBookingPaymentOptionSchemas(mode) {
29318
+ return mode === "strict" ? buildBookingPaymentOptionSchemas(strictObject) : buildBookingPaymentOptionSchemas(stripObject);
29319
+ }
29320
+ const bookingPaymentOptionSchemas = createBookingPaymentOptionSchemas("strip");
29321
+ bookingPaymentOptionSchemas.depositRefundPolicy;
29322
+ bookingPaymentOptionSchemas.instalmentPlan;
29323
+ bookingPaymentOptionSchemas.flexibleBalanceDueDateRule;
29324
+ bookingPaymentOptionSchemas.flexibleBalanceConfig;
29325
+ bookingPaymentOptionSchemas.paymentCollectionOption;
29326
+ const bookingPaymentTermsSchema = bookingPaymentOptionSchemas.paymentTerms;
29327
+ bookingPaymentOptionSchemas.paymentOptionsChoice;
29328
+ //#endregion
29329
+ //#region ../blocks/src/system/blocks/shared/bookingPaymentTerms.ts
29330
+ const blockBookingPaymentTermsSchema = bookingPaymentTermsSchema;
29263
29331
  //#endregion
29264
29332
  //#region ../blocks/src/system/blocks/shared/bookingConsent.ts
29265
29333
  const blockBookingConsentSchema = z.object({
@@ -29861,7 +29929,7 @@ const publicPassProductCollectionSchema = z.object({ passes: z.array(publicPassP
29861
29929
  /**
29862
29930
  * Public membership product for shop display
29863
29931
  */
29864
- const publicMembershipProductSchema = z.object({
29932
+ const publicMembershipProductFields = {
29865
29933
  id: z.string(),
29866
29934
  name: z.string(),
29867
29935
  description: z.string().nullable(),
@@ -29870,7 +29938,16 @@ const publicMembershipProductSchema = z.object({
29870
29938
  billingInterval: z.enum(["month", "year"]),
29871
29939
  eligibleCategoryIds: z.array(z.string()),
29872
29940
  eligibleCategoryNames: z.array(z.string())
29941
+ };
29942
+ const purchasablePublicMembershipProductSchema = z.object({
29943
+ ...publicMembershipProductFields,
29944
+ purchaseAvailability: z.literal("purchasable")
29873
29945
  });
29946
+ const publicMembershipProductSchema = z.discriminatedUnion("purchaseAvailability", [purchasablePublicMembershipProductSchema, z.object({
29947
+ ...publicMembershipProductFields,
29948
+ purchaseAvailability: z.literal("display_only"),
29949
+ unavailabilityReason: z.literal("online_payments_unavailable")
29950
+ })]);
29874
29951
  const publicMembershipProductCollectionSchema = z.object({ memberships: z.array(publicMembershipProductSchema) });
29875
29952
  //#endregion
29876
29953
  //#region ../blocks/src/system/blocks/event-registration.shared.ts
@@ -35603,7 +35680,7 @@ function buildPassesMembershipsDisplay(options) {
35603
35680
  product: pass
35604
35681
  } : {
35605
35682
  kind: "unavailable",
35606
- label: "Online purchasing coming soon."
35683
+ label: "Online purchasing is unavailable."
35607
35684
  }
35608
35685
  };
35609
35686
  });
@@ -35613,7 +35690,14 @@ function buildPassesMembershipsDisplay(options) {
35613
35690
  description: options.showDescriptions ? membership.description : null,
35614
35691
  priceLabel: formatCommercePrice(membership.price, membership.currency),
35615
35692
  intervalLabel: formatInterval(membership.billingInterval),
35616
- actionLabel: options.membershipActionLabel
35693
+ action: membership.purchaseAvailability === "purchasable" ? {
35694
+ kind: "purchase",
35695
+ label: options.membershipActionLabel,
35696
+ product: membership
35697
+ } : {
35698
+ kind: "unavailable",
35699
+ label: "Online purchasing is unavailable."
35700
+ }
35617
35701
  }));
35618
35702
  return {
35619
35703
  kind: "passes-memberships",
@@ -35833,7 +35917,14 @@ const membershipCardDisplaySchema = z.object({
35833
35917
  description: z.string().nullable(),
35834
35918
  priceLabel: z.string(),
35835
35919
  intervalLabel: z.string(),
35836
- actionLabel: z.string()
35920
+ action: z.discriminatedUnion("kind", [z.object({
35921
+ kind: z.literal("purchase"),
35922
+ label: z.string(),
35923
+ product: purchasablePublicMembershipProductSchema
35924
+ }), z.object({
35925
+ kind: z.literal("unavailable"),
35926
+ label: z.string()
35927
+ })])
35837
35928
  });
35838
35929
  const passesMembershipsDisplaySchema = z.object({
35839
35930
  kind: z.literal("passes-memberships"),
@@ -40180,6 +40271,7 @@ const CANONICAL_REFUND_PLANNER_ERROR_CODES = [
40180
40271
  "refund_failed"
40181
40272
  ];
40182
40273
  const CANONICAL_ADMIN_REFUND_FAILURE_CODES = [
40274
+ "refund_blocked_by_live_payment_terms",
40183
40275
  ...CANONICAL_REFUND_PLANNER_ERROR_CODES,
40184
40276
  "payment_intent_not_found",
40185
40277
  "stripe_error",
@@ -40195,6 +40287,7 @@ const CANONICAL_ADMIN_REFUND_FAILURE_CODES = [
40195
40287
  //#endregion
40196
40288
  //#region ../api/src/bookingRefundOutcomes.ts
40197
40289
  const STANDARD_LINE_ITEM_REFUND_INVALID_CODES = [
40290
+ "refund_blocked_by_live_payment_terms",
40198
40291
  "missing_amount",
40199
40292
  "invalid_amount",
40200
40293
  "amount_exceeds_remaining",
@@ -40557,68 +40650,6 @@ function collectText(node) {
40557
40650
  }
40558
40651
  z.enum(["public", "unlisted"], { error: "visibility must be 'public' or 'unlisted'" });
40559
40652
  //#endregion
40560
- //#region ../api/src/bookingPaymentTermSchemas.ts
40561
- const bookingDepositRefundPolicySchema = z.enum(["refundable", "non_refundable"]);
40562
- const bookingInstalmentPlanSchema = z.discriminatedUnion("kind", [
40563
- z.object({
40564
- kind: z.literal("deposit_plus_one_remainder"),
40565
- depositAmountCents: z.number().int().nonnegative(),
40566
- depositRefundability: bookingDepositRefundPolicySchema,
40567
- remainderDueCount: z.number().int().positive(),
40568
- intervalUnit: z.enum([
40569
- "day",
40570
- "week",
40571
- "month"
40572
- ])
40573
- }),
40574
- z.object({
40575
- kind: z.literal("deposit_plus_scheduled_instalments"),
40576
- depositAmountCents: z.number().int().nonnegative(),
40577
- depositRefundability: bookingDepositRefundPolicySchema,
40578
- instalmentCount: z.number().int().positive(),
40579
- intervalCount: z.number().int().positive(),
40580
- intervalUnit: z.enum([
40581
- "day",
40582
- "week",
40583
- "month"
40584
- ])
40585
- }),
40586
- z.object({
40587
- kind: z.literal("equal_scheduled_instalments"),
40588
- instalmentCount: z.number().int().positive(),
40589
- intervalCount: z.number().int().positive(),
40590
- intervalUnit: z.enum([
40591
- "day",
40592
- "week",
40593
- "month"
40594
- ])
40595
- })
40596
- ]);
40597
- const bookingFlexibleBalanceDueDateRuleSchema = z.discriminatedUnion("kind", [z.object({
40598
- kind: z.literal("relative_to_start_date"),
40599
- daysBeforeStart: z.number().int().positive()
40600
- }), z.object({
40601
- kind: z.literal("fixed_calendar_date"),
40602
- dueAt: z.string().datetime()
40603
- })]);
40604
- const bookingFlexibleBalanceConfigSchema = z.object({
40605
- upfrontAmountCents: z.number().int().nonnegative(),
40606
- dueDateRule: bookingFlexibleBalanceDueDateRuleSchema,
40607
- depositRefundability: bookingDepositRefundPolicySchema
40608
- });
40609
- z.discriminatedUnion("kind", [
40610
- z.object({ kind: z.literal("upfront") }),
40611
- z.object({ kind: z.literal("deferred_manual") }),
40612
- z.object({
40613
- kind: z.literal("instalment_plan"),
40614
- plan: bookingInstalmentPlanSchema
40615
- }),
40616
- z.object({
40617
- kind: z.literal("flexible_balance"),
40618
- config: bookingFlexibleBalanceConfigSchema
40619
- })
40620
- ]);
40621
- //#endregion
40622
40653
  //#region ../api/src/navigationMenuValidation.ts
40623
40654
  function hasChildren(item) {
40624
40655
  return Array.isArray(item.children) && item.children.length > 0;