@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
@@ -1984,6 +1984,16 @@ function isRecord$11(value) {
1984
1984
  return typeof value === "object" && value !== null && !Array.isArray(value);
1985
1985
  }
1986
1986
  //#endregion
1987
+ //#region ../core/src/booking-payment-options.ts
1988
+ /** Automatic instalments and a flexible balance cannot share one booking offer. */
1989
+ function validateBookingPaymentOptionKinds(kinds) {
1990
+ if (kinds.length === 0) return err("no_options");
1991
+ const uniqueKinds = new Set(kinds);
1992
+ if (uniqueKinds.size !== kinds.length) return err("duplicate_kind");
1993
+ if (uniqueKinds.has("instalment_plan") && uniqueKinds.has("flexible_balance")) return err("incompatible_collection_options");
1994
+ return ok(void 0);
1995
+ }
1996
+ //#endregion
1987
1997
  //#region ../core/src/booking-time-zone.ts
1988
1998
  const TIME_ZONE_VALIDITY_CACHE_LIMIT = 100;
1989
1999
  const timeZoneValidityCache = /* @__PURE__ */ new Map();
@@ -4041,7 +4051,8 @@ const CLIENT_ERROR_REPORT_LIMITS = {
4041
4051
  stack: 8e3,
4042
4052
  digest: 128,
4043
4053
  componentStack: 8e3,
4044
- sourceLocation: 1024
4054
+ sourceLocation: 1024,
4055
+ navigationAgeMs: 6e4
4045
4056
  };
4046
4057
  const clientErrorEventSchema = z.enum([
4047
4058
  "dashboard:route-error",
@@ -4058,7 +4069,17 @@ z.object({
4058
4069
  stack: z.string().max(CLIENT_ERROR_REPORT_LIMITS.stack).nullable(),
4059
4070
  digest: z.string().max(CLIENT_ERROR_REPORT_LIMITS.digest).nullable(),
4060
4071
  componentStack: z.string().max(CLIENT_ERROR_REPORT_LIMITS.componentStack).nullable(),
4061
- sourceLocation: z.string().max(CLIENT_ERROR_REPORT_LIMITS.sourceLocation).nullable()
4072
+ sourceLocation: z.string().max(CLIENT_ERROR_REPORT_LIMITS.sourceLocation).nullable(),
4073
+ navigation: z.object({
4074
+ fromPathname: z.string().regex(/^\/[^?#]*$/).max(CLIENT_ERROR_REPORT_LIMITS.pathname),
4075
+ toPathname: z.string().regex(/^\/[^?#]*$/).max(CLIENT_ERROR_REPORT_LIMITS.pathname),
4076
+ type: z.enum([
4077
+ "push",
4078
+ "replace",
4079
+ "traverse"
4080
+ ]),
4081
+ ageMs: z.number().int().min(0).max(CLIENT_ERROR_REPORT_LIMITS.navigationAgeMs)
4082
+ }).strict().nullable().optional()
4062
4083
  }).strict();
4063
4084
  ({
4064
4085
  ...SITE_LIFECYCLE_ENDPOINT_DEFINITIONS,
@@ -29121,68 +29142,115 @@ const RichTextDocSchema = z.object({
29121
29142
  content: z.array(TipTapNodeSchema)
29122
29143
  }).strict();
29123
29144
  //#endregion
29124
- //#region ../blocks/src/system/blocks/shared/bookingPaymentTerms.ts
29125
- const bookingDepositRefundPolicySchema$1 = z.enum(["refundable", "non_refundable"]);
29126
- const bookingInstalmentPlanSchema$1 = z.union([
29127
- z.object({
29128
- kind: z.literal("deposit_plus_one_remainder"),
29129
- depositAmountCents: z.number().int().min(0),
29130
- depositRefundability: bookingDepositRefundPolicySchema$1,
29131
- remainderDueCount: z.number().int().positive(),
29132
- intervalUnit: z.enum([
29133
- "day",
29134
- "week",
29135
- "month"
29136
- ])
29137
- }),
29138
- z.object({
29139
- kind: z.literal("deposit_plus_scheduled_instalments"),
29140
- depositAmountCents: z.number().int().min(0),
29141
- depositRefundability: bookingDepositRefundPolicySchema$1,
29142
- instalmentCount: z.number().int().positive(),
29143
- intervalCount: z.number().int().positive(),
29144
- intervalUnit: z.enum([
29145
- "day",
29146
- "week",
29147
- "month"
29148
- ])
29149
- }),
29150
- z.object({
29151
- kind: z.literal("equal_scheduled_instalments"),
29152
- instalmentCount: z.number().int().positive(),
29153
- intervalCount: z.number().int().positive(),
29154
- intervalUnit: z.enum([
29155
- "day",
29156
- "week",
29157
- "month"
29158
- ])
29159
- })
29145
+ //#region ../core/src/booking-payment-schemas.ts
29146
+ const stripObject = (shape) => z.object(shape);
29147
+ const strictObject = (shape) => z.strictObject(shape);
29148
+ const depositRefundPolicySchema = z.enum(["refundable", "non_refundable"]);
29149
+ const intervalUnitSchema = z.enum([
29150
+ "day",
29151
+ "week",
29152
+ "month"
29160
29153
  ]);
29161
- const bookingFlexibleBalanceDueDateRuleSchema$1 = z.union([z.object({
29162
- kind: z.literal("relative_to_start_date"),
29163
- daysBeforeStart: z.number().int().positive()
29164
- }), z.object({
29165
- kind: z.literal("fixed_calendar_date"),
29166
- dueAt: z.string().datetime()
29167
- })]);
29168
- const bookingFlexibleBalanceConfigSchema$1 = z.object({
29169
- upfrontAmountCents: z.number().int().min(0),
29170
- dueDateRule: bookingFlexibleBalanceDueDateRuleSchema$1,
29171
- depositRefundability: bookingDepositRefundPolicySchema$1
29172
- });
29173
- const blockBookingPaymentCollectionOptionSchema = z.union([
29174
- z.object({ kind: z.literal("upfront") }),
29175
- z.object({ kind: z.literal("deferred_manual") }),
29176
- z.object({
29177
- kind: z.literal("instalment_plan"),
29178
- plan: bookingInstalmentPlanSchema$1
29179
- }),
29180
- z.object({
29181
- kind: z.literal("flexible_balance"),
29182
- config: bookingFlexibleBalanceConfigSchema$1
29183
- })
29184
- ]);
29185
- const blockBookingPaymentTermsSchema = z.object({ allowedOptions: z.array(blockBookingPaymentCollectionOptionSchema).min(1) });
29154
+ const nonNegativeIntegerSchema = z.number().int().nonnegative();
29155
+ const positiveIntegerSchema = z.number().int().positive();
29156
+ function createInstalmentPlanSchema(object) {
29157
+ return z.discriminatedUnion("kind", [
29158
+ object({
29159
+ kind: z.literal("deposit_plus_one_remainder"),
29160
+ depositAmountCents: nonNegativeIntegerSchema,
29161
+ depositRefundability: depositRefundPolicySchema,
29162
+ remainderDueCount: positiveIntegerSchema,
29163
+ intervalUnit: intervalUnitSchema
29164
+ }),
29165
+ object({
29166
+ kind: z.literal("deposit_plus_scheduled_instalments"),
29167
+ depositAmountCents: nonNegativeIntegerSchema,
29168
+ depositRefundability: depositRefundPolicySchema,
29169
+ instalmentCount: positiveIntegerSchema,
29170
+ intervalCount: positiveIntegerSchema,
29171
+ intervalUnit: intervalUnitSchema
29172
+ }),
29173
+ object({
29174
+ kind: z.literal("equal_scheduled_instalments"),
29175
+ instalmentCount: positiveIntegerSchema,
29176
+ intervalCount: positiveIntegerSchema,
29177
+ intervalUnit: intervalUnitSchema
29178
+ })
29179
+ ]);
29180
+ }
29181
+ function createFlexibleBalanceSchemas(object) {
29182
+ const dueDateRule = z.discriminatedUnion("kind", [object({
29183
+ kind: z.literal("relative_to_start_date"),
29184
+ daysBeforeStart: positiveIntegerSchema
29185
+ }), object({
29186
+ kind: z.literal("fixed_calendar_date"),
29187
+ dueAt: z.string().datetime()
29188
+ })]);
29189
+ return {
29190
+ dueDateRule,
29191
+ config: object({
29192
+ upfrontAmountCents: nonNegativeIntegerSchema,
29193
+ dueDateRule,
29194
+ depositRefundability: depositRefundPolicySchema
29195
+ })
29196
+ };
29197
+ }
29198
+ const paymentOptionKindsMessages = {
29199
+ no_options: "Choose at least one way for customers to pay.",
29200
+ duplicate_kind: "Choose each payment option only once.",
29201
+ incompatible_collection_options: "Offer instalments or a deposit with the rest paid later, but not both."
29202
+ };
29203
+ function buildBookingPaymentOptionSchemas(object) {
29204
+ const instalmentPlan = createInstalmentPlanSchema(object);
29205
+ const flexibleBalance = createFlexibleBalanceSchemas(object);
29206
+ const paymentCollectionOption = z.discriminatedUnion("kind", [
29207
+ object({ kind: z.literal("upfront") }),
29208
+ object({ kind: z.literal("deferred_manual") }),
29209
+ object({
29210
+ kind: z.literal("instalment_plan"),
29211
+ plan: instalmentPlan
29212
+ }),
29213
+ object({
29214
+ kind: z.literal("flexible_balance"),
29215
+ config: flexibleBalance.config
29216
+ })
29217
+ ]);
29218
+ const paymentTerms = object({ allowedOptions: z.array(paymentCollectionOption) }).superRefine(({ allowedOptions }, ctx) => {
29219
+ const result = validateBookingPaymentOptionKinds(allowedOptions.map(({ kind }) => kind));
29220
+ if (!result.ok) ctx.addIssue({
29221
+ code: "custom",
29222
+ path: ["allowedOptions"],
29223
+ message: paymentOptionKindsMessages[result.error]
29224
+ });
29225
+ });
29226
+ const paymentOptionsChoice = z.discriminatedUnion("source", [z.strictObject({ source: z.literal("default") }), z.strictObject({
29227
+ source: z.literal("custom"),
29228
+ paymentTerms
29229
+ })]);
29230
+ return {
29231
+ depositRefundPolicy: depositRefundPolicySchema,
29232
+ instalmentPlan,
29233
+ flexibleBalanceDueDateRule: flexibleBalance.dueDateRule,
29234
+ flexibleBalanceConfig: flexibleBalance.config,
29235
+ paymentCollectionOption,
29236
+ paymentTerms,
29237
+ paymentOptionsChoice
29238
+ };
29239
+ }
29240
+ function createBookingPaymentOptionSchemas(mode) {
29241
+ return mode === "strict" ? buildBookingPaymentOptionSchemas(strictObject) : buildBookingPaymentOptionSchemas(stripObject);
29242
+ }
29243
+ const bookingPaymentOptionSchemas = createBookingPaymentOptionSchemas("strip");
29244
+ bookingPaymentOptionSchemas.depositRefundPolicy;
29245
+ bookingPaymentOptionSchemas.instalmentPlan;
29246
+ bookingPaymentOptionSchemas.flexibleBalanceDueDateRule;
29247
+ bookingPaymentOptionSchemas.flexibleBalanceConfig;
29248
+ bookingPaymentOptionSchemas.paymentCollectionOption;
29249
+ const bookingPaymentTermsSchema = bookingPaymentOptionSchemas.paymentTerms;
29250
+ bookingPaymentOptionSchemas.paymentOptionsChoice;
29251
+ //#endregion
29252
+ //#region ../blocks/src/system/blocks/shared/bookingPaymentTerms.ts
29253
+ const blockBookingPaymentTermsSchema = bookingPaymentTermsSchema;
29186
29254
  //#endregion
29187
29255
  //#region ../blocks/src/system/blocks/shared/bookingConsent.ts
29188
29256
  const blockBookingConsentSchema = z.object({
@@ -29784,7 +29852,7 @@ const publicPassProductCollectionSchema = z.object({ passes: z.array(publicPassP
29784
29852
  /**
29785
29853
  * Public membership product for shop display
29786
29854
  */
29787
- const publicMembershipProductSchema = z.object({
29855
+ const publicMembershipProductFields = {
29788
29856
  id: z.string(),
29789
29857
  name: z.string(),
29790
29858
  description: z.string().nullable(),
@@ -29793,7 +29861,16 @@ const publicMembershipProductSchema = z.object({
29793
29861
  billingInterval: z.enum(["month", "year"]),
29794
29862
  eligibleCategoryIds: z.array(z.string()),
29795
29863
  eligibleCategoryNames: z.array(z.string())
29864
+ };
29865
+ const purchasablePublicMembershipProductSchema = z.object({
29866
+ ...publicMembershipProductFields,
29867
+ purchaseAvailability: z.literal("purchasable")
29796
29868
  });
29869
+ const publicMembershipProductSchema = z.discriminatedUnion("purchaseAvailability", [purchasablePublicMembershipProductSchema, z.object({
29870
+ ...publicMembershipProductFields,
29871
+ purchaseAvailability: z.literal("display_only"),
29872
+ unavailabilityReason: z.literal("online_payments_unavailable")
29873
+ })]);
29797
29874
  const publicMembershipProductCollectionSchema = z.object({ memberships: z.array(publicMembershipProductSchema) });
29798
29875
  //#endregion
29799
29876
  //#region ../blocks/src/system/blocks/event-registration.shared.ts
@@ -35526,7 +35603,7 @@ function buildPassesMembershipsDisplay(options) {
35526
35603
  product: pass
35527
35604
  } : {
35528
35605
  kind: "unavailable",
35529
- label: "Online purchasing coming soon."
35606
+ label: "Online purchasing is unavailable."
35530
35607
  }
35531
35608
  };
35532
35609
  });
@@ -35536,7 +35613,14 @@ function buildPassesMembershipsDisplay(options) {
35536
35613
  description: options.showDescriptions ? membership.description : null,
35537
35614
  priceLabel: formatCommercePrice(membership.price, membership.currency),
35538
35615
  intervalLabel: formatInterval(membership.billingInterval),
35539
- actionLabel: options.membershipActionLabel
35616
+ action: membership.purchaseAvailability === "purchasable" ? {
35617
+ kind: "purchase",
35618
+ label: options.membershipActionLabel,
35619
+ product: membership
35620
+ } : {
35621
+ kind: "unavailable",
35622
+ label: "Online purchasing is unavailable."
35623
+ }
35540
35624
  }));
35541
35625
  return {
35542
35626
  kind: "passes-memberships",
@@ -35756,7 +35840,14 @@ const membershipCardDisplaySchema = z.object({
35756
35840
  description: z.string().nullable(),
35757
35841
  priceLabel: z.string(),
35758
35842
  intervalLabel: z.string(),
35759
- actionLabel: z.string()
35843
+ action: z.discriminatedUnion("kind", [z.object({
35844
+ kind: z.literal("purchase"),
35845
+ label: z.string(),
35846
+ product: purchasablePublicMembershipProductSchema
35847
+ }), z.object({
35848
+ kind: z.literal("unavailable"),
35849
+ label: z.string()
35850
+ })])
35760
35851
  });
35761
35852
  const passesMembershipsDisplaySchema = z.object({
35762
35853
  kind: z.literal("passes-memberships"),
@@ -40103,6 +40194,7 @@ const CANONICAL_REFUND_PLANNER_ERROR_CODES = [
40103
40194
  "refund_failed"
40104
40195
  ];
40105
40196
  const CANONICAL_ADMIN_REFUND_FAILURE_CODES = [
40197
+ "refund_blocked_by_live_payment_terms",
40106
40198
  ...CANONICAL_REFUND_PLANNER_ERROR_CODES,
40107
40199
  "payment_intent_not_found",
40108
40200
  "stripe_error",
@@ -40118,6 +40210,7 @@ const CANONICAL_ADMIN_REFUND_FAILURE_CODES = [
40118
40210
  //#endregion
40119
40211
  //#region ../api/src/bookingRefundOutcomes.ts
40120
40212
  const STANDARD_LINE_ITEM_REFUND_INVALID_CODES = [
40213
+ "refund_blocked_by_live_payment_terms",
40121
40214
  "missing_amount",
40122
40215
  "invalid_amount",
40123
40216
  "amount_exceeds_remaining",
@@ -40480,68 +40573,6 @@ function collectText(node) {
40480
40573
  }
40481
40574
  z.enum(["public", "unlisted"], { error: "visibility must be 'public' or 'unlisted'" });
40482
40575
  //#endregion
40483
- //#region ../api/src/bookingPaymentTermSchemas.ts
40484
- const bookingDepositRefundPolicySchema = z.enum(["refundable", "non_refundable"]);
40485
- const bookingInstalmentPlanSchema = z.discriminatedUnion("kind", [
40486
- z.object({
40487
- kind: z.literal("deposit_plus_one_remainder"),
40488
- depositAmountCents: z.number().int().nonnegative(),
40489
- depositRefundability: bookingDepositRefundPolicySchema,
40490
- remainderDueCount: z.number().int().positive(),
40491
- intervalUnit: z.enum([
40492
- "day",
40493
- "week",
40494
- "month"
40495
- ])
40496
- }),
40497
- z.object({
40498
- kind: z.literal("deposit_plus_scheduled_instalments"),
40499
- depositAmountCents: z.number().int().nonnegative(),
40500
- depositRefundability: bookingDepositRefundPolicySchema,
40501
- instalmentCount: z.number().int().positive(),
40502
- intervalCount: z.number().int().positive(),
40503
- intervalUnit: z.enum([
40504
- "day",
40505
- "week",
40506
- "month"
40507
- ])
40508
- }),
40509
- z.object({
40510
- kind: z.literal("equal_scheduled_instalments"),
40511
- instalmentCount: z.number().int().positive(),
40512
- intervalCount: z.number().int().positive(),
40513
- intervalUnit: z.enum([
40514
- "day",
40515
- "week",
40516
- "month"
40517
- ])
40518
- })
40519
- ]);
40520
- const bookingFlexibleBalanceDueDateRuleSchema = z.discriminatedUnion("kind", [z.object({
40521
- kind: z.literal("relative_to_start_date"),
40522
- daysBeforeStart: z.number().int().positive()
40523
- }), z.object({
40524
- kind: z.literal("fixed_calendar_date"),
40525
- dueAt: z.string().datetime()
40526
- })]);
40527
- const bookingFlexibleBalanceConfigSchema = z.object({
40528
- upfrontAmountCents: z.number().int().nonnegative(),
40529
- dueDateRule: bookingFlexibleBalanceDueDateRuleSchema,
40530
- depositRefundability: bookingDepositRefundPolicySchema
40531
- });
40532
- z.discriminatedUnion("kind", [
40533
- z.object({ kind: z.literal("upfront") }),
40534
- z.object({ kind: z.literal("deferred_manual") }),
40535
- z.object({
40536
- kind: z.literal("instalment_plan"),
40537
- plan: bookingInstalmentPlanSchema
40538
- }),
40539
- z.object({
40540
- kind: z.literal("flexible_balance"),
40541
- config: bookingFlexibleBalanceConfigSchema
40542
- })
40543
- ]);
40544
- //#endregion
40545
40576
  //#region ../api/src/navigationMenuValidation.ts
40546
40577
  function hasChildren(item) {
40547
40578
  return Array.isArray(item.children) && item.children.length > 0;