@riverbankcms/sdk 0.89.1 → 0.90.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 (161) hide show
  1. package/README.md +27 -4
  2. package/dist/{PreviewEditorSidebar-JDR64FEC.mjs → PreviewEditorSidebar-KVXNF3VW.mjs} +3 -3
  3. package/dist/{PreviewEditorUI-67TMJMAF.mjs → PreviewEditorUI-J3JN5Z7T.mjs} +3 -3
  4. package/dist/SdkPreviewModeRuntime-UBL6MSNP.mjs +8 -0
  5. package/dist/_dts/ai/src/contracts/proposals.d.ts +216 -0
  6. package/dist/_dts/altcha/src/AltchaWidget.d.ts +1 -1
  7. package/dist/_dts/api/src/bookingOperations.d.ts +2 -0
  8. package/dist/_dts/api/src/bookingRecords.d.ts +4 -2
  9. package/dist/_dts/api/src/bookings.d.ts +3 -1
  10. package/dist/_dts/api/src/index.d.ts +6 -5
  11. package/dist/_dts/api/src/publicExperienceEndpoints.d.ts +15 -5
  12. package/dist/_dts/api/src/request.d.ts +21 -0
  13. package/dist/_dts/api/src/sdk-event-upsert.d.ts +3 -1
  14. package/dist/_dts/api/src/sdkContracts.d.ts +2 -0
  15. package/dist/_dts/api/src/types.d.ts +3 -1
  16. package/dist/_dts/api/src/url.d.ts +6 -3
  17. package/dist/_dts/block-form/src/utils/visibleWhen.d.ts +1 -0
  18. package/dist/_dts/block-form/src/widgets/RepeaterField/components/RepeaterThumbnailCard.d.ts +5 -1
  19. package/dist/_dts/block-form/src/widgets/RepeaterField/components/RepeaterThumbnailGrid.d.ts +9 -1
  20. package/dist/_dts/block-form/src/widgets/RepeaterField/components/index.d.ts +1 -0
  21. package/dist/_dts/blocks/src/contracts/non-block-islands.d.ts +7 -11
  22. package/dist/_dts/blocks/src/contracts/proof-block-islands.d.ts +6 -0
  23. package/dist/_dts/blocks/src/index.d.ts +2 -1
  24. package/dist/_dts/blocks/src/system/blocks/events/event-calendar.d.ts +14 -6
  25. package/dist/_dts/blocks/src/system/blocks/events/shared/types.d.ts +4 -4
  26. package/dist/_dts/blocks/src/system/blocks/hero.d.ts +0 -2
  27. package/dist/_dts/blocks/src/system/blocks/shop.d.ts +3 -3
  28. package/dist/_dts/blocks/src/system/blocks/shop.shared.d.ts +8 -0
  29. package/dist/_dts/blocks/src/system/constants/events.d.ts +4 -1
  30. package/dist/_dts/blocks/src/system/manifest/schema.d.ts +3 -1
  31. package/dist/_dts/blocks/src/system/runtime/api/index.d.ts +1 -0
  32. package/dist/_dts/blocks/src/system/runtime/api/types.d.ts +17 -5
  33. package/dist/_dts/blocks/src/system/runtime/components/registry.client.d.ts +51 -6
  34. package/dist/_dts/blocks/src/system/runtime/components/runtime-backed-blocks.d.ts +24 -0
  35. package/dist/_dts/blocks/src/system/runtime/nodes/course-registration/useCourseRegistrationWizard.d.ts +2 -2
  36. package/dist/_dts/blocks/src/system/runtime/nodes/event-details/logic.d.ts +1 -17
  37. package/dist/_dts/blocks/src/system/runtime/nodes/event-details.client.d.ts +5 -9
  38. package/dist/_dts/blocks/src/system/runtime/nodes/event-details.server.d.ts +5 -9
  39. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/event-registration.headless.contract.d.ts +2 -1
  40. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/eventPaymentOptions.d.ts +24 -0
  41. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/types.d.ts +5 -0
  42. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/useDiscountCodeUi.d.ts +4 -4
  43. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/useDiscountCodeUi.state.d.ts +50 -0
  44. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/useEventRegistrationWizard.d.ts +2 -2
  45. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration.interactive.d.ts +21 -0
  46. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration.server.d.ts +1 -1
  47. package/dist/_dts/blocks/src/system/runtime/nodes/events/EventCalendar.interactive.d.ts +11 -1
  48. package/dist/_dts/blocks/src/system/runtime/nodes/events/EventCombined.client.d.ts +2 -1
  49. package/dist/_dts/blocks/src/system/runtime/nodes/events/EventCombined.interactive.d.ts +11 -1
  50. package/dist/_dts/blocks/src/system/runtime/nodes/events/shared/calendarViewOptions.d.ts +10 -0
  51. package/dist/_dts/blocks/src/system/runtime/nodes/events/shared/eventProductEligibility.d.ts +24 -0
  52. package/dist/_dts/blocks/src/system/runtime/nodes/shared/contract-schemas.d.ts +5 -2
  53. package/dist/_dts/blocks/src/system/runtime/nodes/shop-checkout-form.d.ts +2 -2
  54. package/dist/_dts/content-model/src/entry-slots/index.d.ts +1 -0
  55. package/dist/_dts/content-model/src/entry-slots/sdkBlocks.d.ts +21 -0
  56. package/dist/_dts/content-model/src/entry-slots/types.d.ts +7 -0
  57. package/dist/_dts/core/src/money-input.d.ts +18 -0
  58. package/dist/_dts/db/src/generated/supabase/database.types.d.ts +50 -0
  59. package/dist/_dts/media-editor/src/MediaEditor.d.ts +2 -1
  60. package/dist/_dts/media-editor/src/fieldUi.d.ts +6 -0
  61. package/dist/_dts/media-editor/src/index.d.ts +1 -1
  62. package/dist/_dts/preview-next/src/client/index.d.ts +1 -0
  63. package/dist/_dts/preview-next/src/client/preview/PreviewShell.d.ts +3 -2
  64. package/dist/_dts/preview-next/src/client/preview/PreviewShellLayout.d.ts +3 -2
  65. package/dist/_dts/preview-next/src/client/preview/PreviewThemedSiteDocument.d.ts +3 -2
  66. package/dist/_dts/preview-next/src/client/preview/SiteChromeEditableSurface.d.ts +2 -2
  67. package/dist/_dts/preview-next/src/client/preview/themeRuntime.d.ts +6 -0
  68. package/dist/_dts/preview-next/src/client/sdk/SdkPreviewMode.d.ts +2 -1
  69. package/dist/_dts/sdk/src/cli/commands/pull-dated-offering-scope.d.ts +10 -0
  70. package/dist/_dts/sdk/src/cli/content/reader.d.ts +12 -5
  71. package/dist/_dts/sdk/src/client/management/types.d.ts +6 -55
  72. package/dist/_dts/sdk/src/components.d.ts +1 -0
  73. package/dist/_dts/sdk/src/config/field-definitions.d.ts +3 -1
  74. package/dist/_dts/sdk/src/contracts/system-block-content.d.ts +3 -1
  75. package/dist/_dts/sdk/src/next/types.d.ts +8 -11
  76. package/dist/_dts/sdk/src/preview-next/client/index.d.ts +1 -1
  77. package/dist/_dts/sdk/src/rendering/blocks-theme-scope.d.ts +2 -1
  78. package/dist/_dts/sdk/src/rendering/components/Layout.d.ts +8 -7
  79. package/dist/_dts/sdk/src/rendering/components/pageShared.d.ts +5 -6
  80. package/dist/_dts/sdk/src/rendering/index.d.ts +1 -0
  81. package/dist/_dts/sdk/src/rendering/server.d.ts +1 -0
  82. package/dist/_dts/sdk/src/rendering/themeRuntime.d.ts +26 -0
  83. package/dist/_dts/sdk/src/version.d.ts +1 -1
  84. package/dist/_dts/site-commands/src/commands.d.ts +18 -0
  85. package/dist/_dts/theme-core/src/ResponsiveScope.d.ts +12 -0
  86. package/dist/_dts/theme-core/src/accordions/types.d.ts +1 -1
  87. package/dist/_dts/theme-core/src/buttons/personalities/types.d.ts +2 -2
  88. package/dist/_dts/theme-core/src/buttons/types.d.ts +5 -5
  89. package/dist/_dts/theme-core/src/cards/types.d.ts +2 -2
  90. package/dist/_dts/theme-core/src/index.d.ts +2 -0
  91. package/dist/_dts/theme-core/src/mock-themes/all.d.ts +21 -21
  92. package/dist/_dts/theme-core/src/schema.d.ts +18 -18
  93. package/dist/_dts/theme-core/src/site-styles/designState.d.ts +2 -2
  94. package/dist/_dts/theme-core/src/site-styles/generatedSchemas.d.ts +2 -2
  95. package/dist/_dts/theme-core/src/site-styles/logoBranding.d.ts +4 -4
  96. package/dist/_dts/theme-core/src/themeRuntime.d.ts +11 -0
  97. package/dist/{chunk-HKJQERFR.mjs → chunk-AEOYWPE4.mjs} +91 -55
  98. package/dist/{chunk-F645A5UV.mjs → chunk-BOQXMCSP.mjs} +129 -101
  99. package/dist/{chunk-ZQRBLCW5.mjs → chunk-GSPFFUVB.mjs} +2 -2
  100. package/dist/{chunk-7YUAXONX.mjs → chunk-PMBB6MQ7.mjs} +1280 -774
  101. package/dist/{chunk-TGBJWKMP.mjs → chunk-RQ3XZ4SJ.mjs} +9 -1
  102. package/dist/{chunk-7N46MZHI.mjs → chunk-UG7I7S7W.mjs} +1 -1
  103. package/dist/cli/index.mjs +899 -531
  104. package/dist/cli/init-docs/content/cli-reference.md +6 -1
  105. package/dist/cli/init-docs/content/content-management.md +27 -0
  106. package/dist/client/{accordion-MUCVNGQ7.mjs → accordion-GXQNWQ6O.mjs} +1 -1
  107. package/dist/client/{bookingForm-PKD6EFIE.mjs → bookingForm-STLUJ36H.mjs} +25 -270
  108. package/dist/client/bookings.mjs +432 -269
  109. package/dist/client/{carousel-3TKQSNJC.mjs → carousel-CVRN6EPP.mjs} +1 -1
  110. package/dist/client/{cart-6XHSZK23.mjs → cart-IYIBA5CL.mjs} +5 -6
  111. package/dist/client/{checkout-FVSPM6FI.mjs → checkout-O3BGM4GS.mjs} +5 -6
  112. package/dist/client/chunk-4RTFGHZN.mjs +433 -0
  113. package/dist/client/{chunk-UQFY4AHX.mjs → chunk-6DPXDOIL.mjs} +65 -28
  114. package/dist/client/{chunk-ZT5XE7FK.mjs → chunk-D3ETC2SU.mjs} +1 -1
  115. package/dist/client/{chunk-CQKKFEQD.mjs → chunk-DAS5CIER.mjs} +274 -105
  116. package/dist/client/{chunk-SDIYSQAY.mjs → chunk-HIHOQGIP.mjs} +2 -3
  117. package/dist/client/{chunk-ZJZZA5EP.mjs → chunk-MFPKS6QS.mjs} +11 -14
  118. package/dist/client/{chunk-EY42X22F.mjs → chunk-NBFRJ5NB.mjs} +156 -4
  119. package/dist/client/{chunk-VGLXACVK.mjs → chunk-VFHZLZAC.mjs} +1 -1
  120. package/dist/client/{chunk-STJ2NCQM.mjs → chunk-WHZQDPBZ.mjs} +19 -1
  121. package/dist/client/{chunk-RSQWWUAD.mjs → chunk-Z62JYS5O.mjs} +3 -3
  122. package/dist/client/client.mjs +3292 -2827
  123. package/dist/client/{courseRegistration-ATZSYDHM.mjs → courseRegistration-2D3ACMJR.mjs} +18 -56
  124. package/dist/client/{eventCalendar-6T2UGKKP.mjs → eventCalendar-QY4UZUFF.mjs} +8 -9
  125. package/dist/client/{eventCombined-Q4VANXVF.mjs → eventCombined-RRCDKJC2.mjs} +8 -9
  126. package/dist/client/{eventDetails-DW37E7VW.mjs → eventDetails-YO335BUT.mjs} +8 -9
  127. package/dist/client/{eventListing-XURTSAUW.mjs → eventListing-PXA6GFQ3.mjs} +8 -9
  128. package/dist/client/{eventRegistration-MRKEVAXW.mjs → eventRegistration-2ZHEDDXO.mjs} +8 -9
  129. package/dist/client/{form-WZZFFGMU.mjs → form-ZS6KX4U2.mjs} +6 -6
  130. package/dist/client/{headerSection-EQYVQBLM.mjs → headerSection-QK5SLIIB.mjs} +2 -2
  131. package/dist/client/hooks.mjs +1084 -1029
  132. package/dist/client/{locationMap-MFF5VAZR.mjs → locationMap-GFNIUD2X.mjs} +2 -2
  133. package/dist/client/{newsletterForm-JQ77UYIE.mjs → newsletterForm-PGLTTCUG.mjs} +4 -4
  134. package/dist/client/{productDetail-25LMT3IZ.mjs → productDetail-OPBE5ZPI.mjs} +5 -6
  135. package/dist/client/{productList-5ABEMKUG.mjs → productList-NI72Q62Z.mjs} +5 -6
  136. package/dist/client/rendering/client.mjs +2692 -2285
  137. package/dist/client/rendering/islands.mjs +18 -18
  138. package/dist/client/rendering.mjs +2611 -2156
  139. package/dist/client/{shop-OMMQZ6YO.mjs → shop-3ZQPEWYI.mjs} +5 -6
  140. package/dist/client/spam-protection.mjs +4 -5
  141. package/dist/preview-next/before-render.mjs +2 -2
  142. package/dist/preview-next/client/runtime.mjs +5 -5
  143. package/dist/{sdk-runtime-WNLBZ3ZH.mjs → sdk-runtime-FSHXCWDS.mjs} +6 -6
  144. package/dist/server/components.mjs +1722 -1453
  145. package/dist/server/config-validation.mjs +1316 -1261
  146. package/dist/server/config.mjs +1316 -1261
  147. package/dist/server/data.mjs +1084 -1029
  148. package/dist/server/index.mjs +135 -100
  149. package/dist/server/navigation.mjs +20 -30
  150. package/dist/server/next.mjs +1782 -1500
  151. package/dist/server/page-converter.mjs +1009 -946
  152. package/dist/server/prebuild.mjs +1 -1
  153. package/dist/server/rendering/server.mjs +1722 -1453
  154. package/dist/server/rendering.mjs +1728 -1459
  155. package/dist/server/routing.mjs +1127 -1045
  156. package/dist/server/server.mjs +1219 -1129
  157. package/dist/server/theme-bridge.mjs +8 -5
  158. package/package.json +2 -2
  159. package/dist/SdkPreviewModeRuntime-ZBEMRV7N.mjs +0 -8
  160. package/dist/client/chunk-LQFDYWPJ.mjs +0 -184
  161. package/dist/client/chunk-ZFHRN6W2.mjs +0 -66
@@ -1,13 +1,12 @@
1
1
  "use client";
2
- import { addPassToCommerceCart, useCommerceCart } from './chunk-VGLXACVK.mjs';
2
+ import { addPassToCommerceCart, useCommerceCart } from './chunk-VFHZLZAC.mjs';
3
3
  import { CarouselNodeClient } from './chunk-7DH35FGA.mjs';
4
- import { useDiscountCodeUi } from './chunk-ZFHRN6W2.mjs';
5
4
  import { buildRouteIslandApiConfig } from './chunk-L4J5Y62O.mjs';
6
- import { createBodyThemePortalRoot, consumeSearchParams, scrollToBlock, TerminalPanel, StateIcon, CheckIcon, CrossIcon, ActionRow, DiscountCodeDisclosure, consumeSearchParam, buildCheckoutReturnUrls } from './chunk-EY42X22F.mjs';
5
+ import { useDiscountCodeUi, createBodyThemePortalRoot, consumeSearchParams, scrollToBlock, TerminalPanel, StateIcon, CheckIcon, CrossIcon, ActionRow, DiscountCodeDisclosure, consumeSearchParam, buildCheckoutReturnUrls } from './chunk-NBFRJ5NB.mjs';
7
6
  import { ModalShell, resolveDedicatedCheckoutPath } from './chunk-WBQG7VJA.mjs';
8
- import { useBlockApi, FeedbackMessage, BlockApiProvider } from './chunk-STJ2NCQM.mjs';
7
+ import { useBlockApi, FeedbackMessage, BlockApiProvider, discountAvailabilityHasDiscounts, discountAvailabilityAllowsManualEntry, getAutoAppliedDiscountPreview } from './chunk-WHZQDPBZ.mjs';
9
8
  import { mountReactIsland } from './chunk-N7PBWBWQ.mjs';
10
- import { themeButtonClassName, formatCommercePrice, formatInterval, getShopDisplayForItems, deriveCommerceCheckoutState, buildProductDetailDisplay, productItemKey, buildProductCartItem, buildProductCardDisplay, assertNever11, reportWorkflowError, clearWorkflowFeedback, unwrapRichTextRoot, createRichTextDocFromMarkdown, isRecord } from './chunk-UQFY4AHX.mjs';
9
+ import { themeButtonClassName, formatCommercePrice, formatInterval, getShopDisplayForItems, deriveCommerceCheckoutState, buildProductDetailDisplay, productItemKey, buildProductCartItem, buildProductCardDisplay, assertNever as assertNever$1, reportWorkflowError, clearWorkflowFeedback, unwrapRichTextRoot, createRichTextDocFromMarkdown, isRecord } from './chunk-6DPXDOIL.mjs';
11
10
  import { assertNever, ok, err, getCurrentResolveImageUrlContext, resolveImageUrlWithContext, ImagePresets } from './chunk-25W2EQUN.mjs';
12
11
  import * as React3 from 'react';
13
12
  import React3__default, { useState, useRef, useCallback, useEffect } from 'react';
@@ -443,7 +442,7 @@ function shopCheckoutReducer(state, action) {
443
442
  notice: action.notice
444
443
  };
445
444
  default:
446
- return assertNever11(action);
445
+ return assertNever$1(action);
447
446
  }
448
447
  }
449
448
 
@@ -574,15 +573,13 @@ function planCartDiscountAvailabilityRequests(checkout) {
574
573
  }));
575
574
  }
576
575
  function aggregateCartDiscountUiState(availability) {
577
- if (!availability.some((item) => item.hasDiscounts)) {
576
+ if (!availability.some(discountAvailabilityHasDiscounts)) {
578
577
  return { type: "unavailable" };
579
578
  }
580
- if (availability.some((item) => item.manualCodeEntryAllowed)) {
579
+ if (availability.some(discountAvailabilityAllowsManualEntry)) {
581
580
  return { type: "manual-allowed" };
582
581
  }
583
- const autoAppliedDiscount = availability.find(
584
- (item) => item.autoAppliedDiscount
585
- )?.autoAppliedDiscount ?? null;
582
+ const autoAppliedDiscount = availability.map(getAutoAppliedDiscountPreview).find((discount) => discount !== null) ?? null;
586
583
  return {
587
584
  type: "auto-only",
588
585
  autoAppliedDiscount
@@ -681,7 +678,7 @@ function discountApplyReducer(state, action) {
681
678
  status: { type: "idle" }
682
679
  };
683
680
  default:
684
- return assertNever11(action);
681
+ return assertNever$1(action);
685
682
  }
686
683
  }
687
684
  function getAppliedDiscountCode(state) {
@@ -712,7 +709,7 @@ function getDiscountApplyFeedback(status, formatPrice) {
712
709
  message: status.message
713
710
  };
714
711
  default:
715
- return assertNever11(status);
712
+ return assertNever$1(status);
716
713
  }
717
714
  }
718
715
  var DISCOUNT_APPLY_MESSAGES = {
@@ -1283,7 +1280,7 @@ function shopPassesMembershipsReducer(state, action) {
1283
1280
  returnNotice: null
1284
1281
  };
1285
1282
  default:
1286
- return assertNever11(action);
1283
+ return assertNever$1(action);
1287
1284
  }
1288
1285
  }
1289
1286
  function getOpenCheckout(state) {
@@ -1,9 +1,161 @@
1
- import { FeedbackMessage } from './chunk-STJ2NCQM.mjs';
2
- import { themeButtonClassName } from './chunk-UQFY4AHX.mjs';
1
+ "use client";
2
+ import { FeedbackMessage, discountAvailabilityHasDiscounts, getAutoAppliedDiscountPreview, discountAvailabilityAllowsManualEntry } from './chunk-WHZQDPBZ.mjs';
3
+ import { themeButtonClassName } from './chunk-6DPXDOIL.mjs';
3
4
  import { formatCurrencyAmount, clsx_default } from './chunk-25W2EQUN.mjs';
4
- import { useId } from 'react';
5
+ import { useReducer, useEffect, useId, useRef } from 'react';
5
6
  import { jsx, jsxs, Fragment } from 'react/jsx-runtime';
6
7
 
8
+ // ../blocks/src/system/runtime/nodes/event-registration/useDiscountCodeUi.state.ts
9
+ var initialDiscountCodeUiState = {
10
+ discountUiOpen: false,
11
+ discountCode: "",
12
+ availability: { tag: "disabled" }
13
+ };
14
+ function getDiscountContextKey(context) {
15
+ if (!context) return "disabled";
16
+ switch (context.type) {
17
+ case "event":
18
+ return [
19
+ context.type,
20
+ context.eventSeriesId,
21
+ context.eventCategoryId ?? "",
22
+ context.ticketsCount ?? ""
23
+ ].join(":");
24
+ case "appointment":
25
+ return [context.type, context.serviceId].join(":");
26
+ case "course":
27
+ return [context.type, context.courseId].join(":");
28
+ case "pass":
29
+ return [context.type, context.passId].join(":");
30
+ case "membership":
31
+ return [context.type, context.membershipId].join(":");
32
+ case "product":
33
+ return [context.type, context.productId, context.productCategoryId ?? ""].join(":");
34
+ }
35
+ }
36
+ function buildDiscountAvailabilityRequestPlan(options) {
37
+ if (!options.discountContext) {
38
+ return { ok: false, key: "disabled" };
39
+ }
40
+ const subtotalCents = options.subtotalCents;
41
+ const key = [
42
+ getDiscountContextKey(options.discountContext),
43
+ subtotalCents ?? ""
44
+ ].join("|");
45
+ return {
46
+ ok: true,
47
+ key,
48
+ request: {
49
+ context: options.discountContext,
50
+ ...subtotalCents !== void 0 ? { subtotalCents } : {}
51
+ }
52
+ };
53
+ }
54
+ function discountAvailabilityStateFromResponse(response) {
55
+ if (!discountAvailabilityHasDiscounts(response)) {
56
+ return { tag: "unavailable" };
57
+ }
58
+ return {
59
+ tag: "available",
60
+ manualCodeEntryAllowed: discountAvailabilityAllowsManualEntry(response),
61
+ autoAppliedDiscount: getAutoAppliedDiscountPreview(response)
62
+ };
63
+ }
64
+ function discountCodeUiReducer(state, event) {
65
+ switch (event.type) {
66
+ case "availability-disabled":
67
+ return initialDiscountCodeUiState;
68
+ case "availability-loading":
69
+ return {
70
+ ...state,
71
+ availability: { tag: "loading" }
72
+ };
73
+ case "availability-loaded": {
74
+ const availability = discountAvailabilityStateFromResponse(event.response);
75
+ if (availability.tag !== "available" || !availability.manualCodeEntryAllowed) {
76
+ return {
77
+ ...state,
78
+ discountUiOpen: false,
79
+ discountCode: "",
80
+ availability
81
+ };
82
+ }
83
+ return {
84
+ ...state,
85
+ availability
86
+ };
87
+ }
88
+ case "availability-failed":
89
+ return {
90
+ ...state,
91
+ discountUiOpen: false,
92
+ discountCode: "",
93
+ availability: { tag: "error" }
94
+ };
95
+ case "discount-code-changed":
96
+ return {
97
+ ...state,
98
+ discountCode: event.code
99
+ };
100
+ case "discount-ui-open-changed":
101
+ return {
102
+ ...state,
103
+ discountUiOpen: event.isOpen
104
+ };
105
+ }
106
+ }
107
+
108
+ // ../blocks/src/system/runtime/nodes/event-registration/useDiscountCodeUi.ts
109
+ function useStableDiscountAvailabilityRequestPlan(options) {
110
+ const nextPlan = buildDiscountAvailabilityRequestPlan(options);
111
+ const planRef = useRef(nextPlan);
112
+ if (planRef.current.key !== nextPlan.key) {
113
+ planRef.current = nextPlan;
114
+ }
115
+ return planRef.current;
116
+ }
117
+ function useDiscountCodeUi(options) {
118
+ const [state, dispatch] = useReducer(
119
+ discountCodeUiReducer,
120
+ initialDiscountCodeUiState
121
+ );
122
+ const requestPlan = useStableDiscountAvailabilityRequestPlan(options);
123
+ useEffect(() => {
124
+ let cancelled = false;
125
+ async function checkDiscountAvailability() {
126
+ if (!requestPlan.ok) {
127
+ dispatch({ type: "availability-disabled" });
128
+ return;
129
+ }
130
+ dispatch({ type: "availability-loading" });
131
+ try {
132
+ const res = await options.api.getDiscountsAvailable(requestPlan.request);
133
+ if (cancelled) return;
134
+ dispatch({ type: "availability-loaded", response: res });
135
+ } catch {
136
+ if (cancelled) return;
137
+ dispatch({ type: "availability-failed" });
138
+ }
139
+ }
140
+ void checkDiscountAvailability();
141
+ return () => {
142
+ cancelled = true;
143
+ };
144
+ }, [options.api, requestPlan]);
145
+ const availability = state.availability;
146
+ const isAvailable = availability.tag === "available";
147
+ const manualCodeEntryAllowed = isAvailable ? availability.manualCodeEntryAllowed : false;
148
+ return {
149
+ discountUiOpen: state.discountUiOpen,
150
+ setDiscountUiOpen: (isOpen) => dispatch({ type: "discount-ui-open-changed", isOpen }),
151
+ discountCode: state.discountCode,
152
+ setDiscountCode: (code) => dispatch({ type: "discount-code-changed", code }),
153
+ discountsAvailable: isAvailable,
154
+ manualCodeEntryAllowed,
155
+ autoAppliedDiscount: isAvailable ? availability.autoAppliedDiscount : null,
156
+ discountsAvailableLoading: availability.tag === "loading"
157
+ };
158
+ }
7
159
  var BLOCK_DISCOUNT_CODE_DISCLOSURE_CLASSES = {
8
160
  "course-registration": {
9
161
  root: "cr-discount",
@@ -504,4 +656,4 @@ function StepIndicator({
504
656
  }) }) });
505
657
  }
506
658
 
507
- export { ActionRow, CheckIcon, ClockIcon, CrossIcon, DiscountCodeDisclosure, LoggedInAsUser, MembershipHero, StateIcon, StepIndicator, TabBarFragment, TerminalPanel, buildCheckoutReturnUrls, consumeSearchParam, consumeSearchParams, createBodyThemePortalRoot, formatPrice, getStepNumber, logoutPortal, scrollToBlock, validateFormData };
659
+ export { ActionRow, CheckIcon, ClockIcon, CrossIcon, DiscountCodeDisclosure, LoggedInAsUser, MembershipHero, StateIcon, StepIndicator, TabBarFragment, TerminalPanel, buildCheckoutReturnUrls, consumeSearchParam, consumeSearchParams, createBodyThemePortalRoot, formatPrice, getStepNumber, logoutPortal, scrollToBlock, useDiscountCodeUi, validateFormData };
@@ -1,4 +1,4 @@
1
- import { EMPTY_COMMERCE_CART_STATE, parseStoredCommerceCartState, reduceCommerceCart, buildPassCartItem } from './chunk-UQFY4AHX.mjs';
1
+ import { EMPTY_COMMERCE_CART_STATE, parseStoredCommerceCartState, reduceCommerceCart, buildPassCartItem } from './chunk-6DPXDOIL.mjs';
2
2
  import * as React from 'react';
3
3
 
4
4
  var EMPTY_STATE = EMPTY_COMMERCE_CART_STATE;
@@ -1159,6 +1159,24 @@ function useBlockApi() {
1159
1159
  }
1160
1160
  return client;
1161
1161
  }
1162
+
1163
+ // ../blocks/src/system/runtime/api/types.ts
1164
+ function discountAvailabilityHasDiscounts(availability) {
1165
+ return availability.type !== "none";
1166
+ }
1167
+ function discountAvailabilityAllowsManualEntry(availability) {
1168
+ return "manualCodeEntryAllowed" in availability && availability.manualCodeEntryAllowed;
1169
+ }
1170
+ function getAutoAppliedDiscountPreview(availability) {
1171
+ switch (availability.type) {
1172
+ case "none":
1173
+ case "manual":
1174
+ return null;
1175
+ case "auto":
1176
+ case "auto_and_manual":
1177
+ return availability.autoAppliedDiscount;
1178
+ }
1179
+ }
1162
1180
  function joinClasses(...parts) {
1163
1181
  return parts.filter((part) => typeof part === "string" && part.length > 0).join(" ");
1164
1182
  }
@@ -1189,4 +1207,4 @@ function FeedbackMessage({
1189
1207
  );
1190
1208
  }
1191
1209
 
1192
- export { BlockApiProvider, FeedbackMessage, useBlockApi };
1210
+ export { BlockApiProvider, FeedbackMessage, discountAvailabilityAllowsManualEntry, discountAvailabilityHasDiscounts, getAutoAppliedDiscountPreview, useBlockApi };
@@ -1,6 +1,6 @@
1
1
  "use client";
2
- import { useBlockApi } from './chunk-STJ2NCQM.mjs';
3
- import { themeButtonClassName, assertNever11 } from './chunk-UQFY4AHX.mjs';
2
+ import { useBlockApi } from './chunk-WHZQDPBZ.mjs';
3
+ import { themeButtonClassName, assertNever } from './chunk-6DPXDOIL.mjs';
4
4
  import { resolvePlanningDateInput, formatBookingPriceDisplay } from './chunk-25W2EQUN.mjs';
5
5
  import { useState, useReducer, useSyncExternalStore, useEffect } from 'react';
6
6
  import { jsxs, jsx } from 'react/jsx-runtime';
@@ -32,7 +32,7 @@ function magicLinkSubmissionReducer(state, action) {
32
32
  case "reset":
33
33
  return initialMagicLinkSubmissionState;
34
34
  default:
35
- return assertNever11(action);
35
+ return assertNever(action);
36
36
  }
37
37
  }
38
38
  function isMagicLinkSubmitting(state) {