@riverbankcms/sdk 0.145.0 → 0.146.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 (159) hide show
  1. package/CHANGELOG.md +17 -0
  2. package/dist/{PreviewEditorSidebar-O-V6Pl5a.mjs → PreviewEditorSidebar-kg2r2Fyi.mjs} +4 -4
  3. package/dist/{PreviewEditorUI-1UlX_9cw.mjs → PreviewEditorUI-sWMLp5dT.mjs} +3 -3
  4. package/dist/{PreviewQueryProvider-BxGwdOCV.mjs → PreviewQueryProvider-Cg51xq1w.mjs} +1 -1
  5. package/dist/{SdkPreviewModeRuntime-DYbA_4iv.mjs → SdkPreviewModeRuntime-h2ti3Hch.mjs} +280 -182
  6. package/dist/{SiteChromeCustomizeContext-CNTKQ9nx.mjs → SiteChromeCustomizeContext-DEACFH9m.mjs} +1330 -734
  7. package/dist/_dts/ai/src/contracts/proposals.d.ts +924 -0
  8. package/dist/_dts/ai/src/contracts/siteStyleProposalSchemas.d.ts +84 -0
  9. package/dist/_dts/api/src/bookingConfig.d.ts +8 -1
  10. package/dist/_dts/api/src/bookingManagementEndpoints.d.ts +8 -14
  11. package/dist/_dts/api/src/bookingManagementEventEndpointTypes.d.ts +45 -1
  12. package/dist/_dts/api/src/clientErrorReporting.d.ts +50 -0
  13. package/dist/_dts/api/src/communications.d.ts +20 -4
  14. package/dist/_dts/api/src/contentRuntime.d.ts +3 -7
  15. package/dist/_dts/api/src/endpoints.d.ts +223 -88
  16. package/dist/_dts/api/src/event-visibility.d.ts +20 -0
  17. package/dist/_dts/api/src/eventManagementContracts.d.ts +56 -3
  18. package/dist/_dts/api/src/eventManagementEndpointDefinitions.d.ts +24 -0
  19. package/dist/_dts/api/src/eventPageWords.d.ts +19 -0
  20. package/dist/_dts/api/src/eventSeriesRegistrationEndpointDefinitions.d.ts +14 -0
  21. package/dist/_dts/api/src/index.d.ts +7 -1
  22. package/dist/_dts/api/src/indexCoreTypes.d.ts +1 -1
  23. package/dist/_dts/api/src/indexExtendedTypes.d.ts +1 -1
  24. package/dist/_dts/api/src/launchReadiness.d.ts +20 -2
  25. package/dist/_dts/api/src/launchRequirementPriority.d.ts +3 -0
  26. package/dist/_dts/api/src/newsletterCampaignCommandEndpoints.d.ts +13 -0
  27. package/dist/_dts/api/src/newsletterEndpointDefinitions.d.ts +42 -0
  28. package/dist/_dts/api/src/occurrenceScheduling.d.ts +10 -0
  29. package/dist/_dts/api/src/pageSurfaceEndpoints.d.ts +44 -0
  30. package/dist/_dts/api/src/participantMessaging.d.ts +11 -1
  31. package/dist/_dts/api/src/sdk-event-upsert.d.ts +40 -1
  32. package/dist/_dts/api/src/sdkContracts.d.ts +3 -42
  33. package/dist/_dts/api/src/sdkCourseBooking.d.ts +30 -0
  34. package/dist/_dts/api/src/sdkEventEndpointDefinitions.d.ts +76 -0
  35. package/dist/_dts/api/src/sdkEventLifecycle.d.ts +37 -0
  36. package/dist/_dts/api/src/sdkManagedEventContracts.d.ts +18 -0
  37. package/dist/_dts/api/src/sdkPageDesign.d.ts +388 -0
  38. package/dist/_dts/api/src/sdkPageDesignEndpointDefinitions.d.ts +22 -0
  39. package/dist/_dts/api/src/sdkPullEventContracts.d.ts +46 -0
  40. package/dist/_dts/api/src/siteAddressEndpoints.d.ts +29 -0
  41. package/dist/_dts/api/src/siteManagementEndpointDefinitions.d.ts +49 -0
  42. package/dist/_dts/api/src/siteManagementEndpoints.d.ts +2 -32
  43. package/dist/_dts/api/src/siteOnboarding.d.ts +75 -9
  44. package/dist/_dts/api/src/sitePlatformEndpoints.d.ts +1 -1
  45. package/dist/_dts/api/src/types.d.ts +7 -1
  46. package/dist/_dts/api/src/wholeSeriesRuns.d.ts +14 -0
  47. package/dist/_dts/blocks/src/index.d.ts +2 -0
  48. package/dist/_dts/blocks/src/pageRenderAdmission.d.ts +10 -0
  49. package/dist/_dts/blocks/src/pageRendererContracts.d.ts +3 -1
  50. package/dist/_dts/blocks/src/system/blocks/events/shared/schemas.d.ts +27 -5
  51. package/dist/_dts/blocks/src/system/blocks/events/shared/types.d.ts +14 -1
  52. package/dist/_dts/blocks/src/system/icons/social.d.ts +1 -1
  53. package/dist/_dts/blocks/src/system/registry.d.ts +1 -1
  54. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/eventSourceRecovery.d.ts +1 -0
  55. package/dist/_dts/blocks/src/system/runtime/nodes/events/shared/eventCollectionContract.d.ts +20 -4
  56. package/dist/_dts/blocks/src/system/runtime/nodes/form.fields.d.ts +5 -0
  57. package/dist/_dts/blocks/src/system/runtime/nodes/newsletter-form.block-submission.d.ts +36 -0
  58. package/dist/_dts/blocks/src/system/runtime/nodes/newsletter-form.client.d.ts +1 -1
  59. package/dist/_dts/blocks/src/system/runtime/nodes/newsletter-form.interactive.d.ts +6 -1
  60. package/dist/_dts/blocks/src/system/runtime/nodes/newsletter-form.parts.d.ts +46 -0
  61. package/dist/_dts/blocks/src/system/runtime/nodes/newsletter-form.types.d.ts +2 -1
  62. package/dist/_dts/blocks/src/system/runtime/resolver.d.ts +2 -1
  63. package/dist/_dts/blocks/src/system/runtime/shared/components/CheckboxChoice.d.ts +18 -0
  64. package/dist/_dts/blocks/src/system/runtime/shared/components/index.d.ts +1 -0
  65. package/dist/_dts/content-editor/src/index.d.ts +1 -0
  66. package/dist/_dts/content-editor/src/primitives/previewEditableOutline.d.ts +2 -0
  67. package/dist/_dts/content-editor/src/ui/editorBlockEquality.d.ts +3 -0
  68. package/dist/_dts/content-editor/src/ui/editorSnapshot.d.ts +3 -5
  69. package/dist/_dts/core/src/block-content-identity.d.ts +5 -0
  70. package/dist/_dts/core/src/editor-state.d.ts +2 -7
  71. package/dist/_dts/core/src/index.d.ts +1 -0
  72. package/dist/_dts/core/src/mailing-list-submission.d.ts +3 -1
  73. package/dist/_dts/core/src/public-event-booking-availability.d.ts +20 -1
  74. package/dist/_dts/core/src/public-profile.d.ts +3 -1
  75. package/dist/_dts/db/src/generated/supabase/database.types.d.ts +49 -2
  76. package/dist/_dts/editor-blocks/src/BlockEditor.d.ts +3 -0
  77. package/dist/_dts/editor-blocks/src/block-editor/EmptyState.d.ts +13 -1
  78. package/dist/_dts/editor-blocks/src/block-editor/types.d.ts +2 -8
  79. package/dist/_dts/editor-blocks/src/index.d.ts +1 -0
  80. package/dist/_dts/preview-next/src/client/blocks/composer/types.d.ts +3 -4
  81. package/dist/_dts/preview-next/src/client/preview/PreviewEntryControllerProvider.d.ts +1 -2
  82. package/dist/_dts/sdk/src/next/renderSdkContent.d.ts +0 -1
  83. package/dist/_dts/sdk/src/rendering/blocks-page-renderer.d.ts +2 -2
  84. package/dist/_dts/sdk/src/rendering/components/pageShared.d.ts +2 -2
  85. package/dist/_dts/sdk/src/rendering/helpers/loadContent.d.ts +6 -1
  86. package/dist/_dts/sdk/src/rendering/helpers/loadPage.d.ts +5 -2
  87. package/dist/_dts/sdk/src/rendering/helpers/pageRuntimeSupport.d.ts +6 -1
  88. package/dist/_dts/sdk/src/rendering/helpers/templateContent.d.ts +2 -0
  89. package/dist/_dts/sdk/src/rendering/hooks/useContent.d.ts +5 -1
  90. package/dist/_dts/sdk/src/rendering/hooks/usePage.d.ts +5 -1
  91. package/dist/_dts/sdk/src/version.d.ts +1 -1
  92. package/dist/_dts/surfaces/src/index.d.ts +9 -0
  93. package/dist/_dts/theme-core/src/generated/containerResponsiveThemeCss.d.ts +1 -1
  94. package/dist/_dts/theme-core/src/inputs/checkable.d.ts +42 -0
  95. package/dist/_dts/theme-core/src/inputs/inputGroup.d.ts +19 -0
  96. package/dist/_dts/ui/src/navigation-tabs.d.ts +2 -1
  97. package/dist/client/{BookingConsentAgreement-DlVOmpW4.mjs → BookingConsentAgreement-BQKL045f.mjs} +2 -2
  98. package/dist/client/CheckboxChoice--W2n6yKs.mjs +24 -0
  99. package/dist/client/{DiscountCodeDisclosure-T9q623PQ.mjs → DiscountCodeDisclosure-CsOtjFY7.mjs} +1 -1
  100. package/dist/client/{EventCombined.client-DnsUeONl.mjs → EventCombined.client-BdRjVbhH.mjs} +6 -6
  101. package/dist/client/{EventListing.client-CNBFqJS4.mjs → EventListing.client-DBxC6xOU.mjs} +2 -2
  102. package/dist/client/{LeafletStaticMap-C7higg52.mjs → LeafletStaticMap-mHEJKrTs.mjs} +1 -1
  103. package/dist/client/{ThemedButton-LAJTNrS8.mjs → ThemedButton-CE5KYT6z.mjs} +1 -1
  104. package/dist/client/{accordion-BcNF9TjX.mjs → accordion-BEQNSptH.mjs} +1 -1
  105. package/dist/client/{bookingForm-BUaQ3S03.mjs → bookingForm-AMr-s5vw.mjs} +33 -52
  106. package/dist/client/bookings.mjs +48 -46
  107. package/dist/client/{carousel-CTdF6e0V.mjs → carousel-Bbt_QgJy.mjs} +1 -1
  108. package/dist/client/{cart-pGtyf_XU.mjs → cart-CnWi30zJ.mjs} +3 -3
  109. package/dist/client/{checkout-Da9WSn7Y.mjs → checkout-f3nkWgd4.mjs} +3 -3
  110. package/dist/client/client.mjs +1611 -815
  111. package/dist/client/{context-BFeY_Wbm.mjs → context-Bc8T6pCe.mjs} +1 -1
  112. package/dist/client/{dates-BhwVSxDg.mjs → dates-DUsCEzLb.mjs} +2 -3
  113. package/dist/client/{eventCalendar-BAtdnR4s.mjs → eventCalendar-CKwgXui5.mjs} +9 -9
  114. package/dist/client/{eventCombined-RksA3tRC.mjs → eventCombined-CBAOSTGR.mjs} +4 -4
  115. package/dist/client/{eventDetails-BB9hB4wR.mjs → eventDetails-Dh-_WiBD.mjs} +4 -4
  116. package/dist/client/{eventListing-BpJBkviM.mjs → eventListing-CA3frIH5.mjs} +4 -4
  117. package/dist/client/{eventRegistration-B18jFq_o.mjs → eventRegistration-BHtsgdcg.mjs} +21 -22
  118. package/dist/client/{form-Dodt8Y8t.mjs → form-C2h3YAcg.mjs} +135 -104
  119. package/dist/client/{headerSection-B0qj9ttg.mjs → headerSection-lwMuMTH9.mjs} +3 -3
  120. package/dist/client/hooks.mjs +489 -65
  121. package/dist/client/{locationMap-gn-iMk7a.mjs → locationMap-DJ2bLODV.mjs} +3 -3
  122. package/dist/client/{newsletterForm-oByLdFkr.mjs → newsletterForm-8Pu5K32g.mjs} +203 -101
  123. package/dist/client/{pricing-BOU0_Hai.mjs → pricing-HHx3IgBz.mjs} +1 -1
  124. package/dist/client/{productDetail-D9v1zH2j.mjs → productDetail-C_1odnAf.mjs} +3 -3
  125. package/dist/client/{productList-D-mItx1n.mjs → productList-CtCv-Nmx.mjs} +3 -3
  126. package/dist/client/{propsDecoder-C3TP_z4x.mjs → propsDecoder-Dcgsncxb.mjs} +40 -23
  127. package/dist/client/rendering/client.mjs +490 -457
  128. package/dist/client/rendering/islands.mjs +17 -17
  129. package/dist/client/rendering.mjs +1515 -628
  130. package/dist/client/{routeIslandApiConfig-DzN1W0sq.mjs → routeIslandApiConfig-CWLP7wu3.mjs} +1 -1
  131. package/dist/client/{scrollToBlock-CWs8EIdo.mjs → scrollToBlock-BNgaEUpo.mjs} +1 -1
  132. package/dist/client/{shop-Dufw7N7o.mjs → shop-DQXrQ8kJ.mjs} +7 -7
  133. package/dist/client/{shop-commerce-gklw_hLF.mjs → shop-commerce-B88zmWWo.mjs} +6 -6
  134. package/dist/client/{shop-commerce-store-Sf1eyTaZ.mjs → shop-commerce-store-DtSfkKuX.mjs} +1 -1
  135. package/dist/client/{shopShared-B5nyA41S.mjs → shopShared-cuaONpkJ.mjs} +4 -4
  136. package/dist/client/{useEventFilters-CLL829vy.mjs → useEventFilters-Bukew6Gb.mjs} +6 -6
  137. package/dist/preview-next/before-render.mjs +368 -103
  138. package/dist/preview-next/client/runtime.mjs +4 -4
  139. package/dist/preview-next/editor-base.css +11 -0
  140. package/dist/preview-next/keepAlive.mjs +328 -103
  141. package/dist/preview-next/middleware.mjs +329 -103
  142. package/dist/{previewAuthStore-BxAFlu-j.mjs → previewAuthStore-h5IgbSp4.mjs} +353 -103
  143. package/dist/{sdk-runtime-D0uZFev7.mjs → sdk-runtime-DTc1uIXn.mjs} +2 -2
  144. package/dist/{separator-EvdCAn4V.mjs → separator-BpHS1KZK.mjs} +1 -1
  145. package/dist/server/components.mjs +1376 -331
  146. package/dist/server/config-validation.mjs +405 -27
  147. package/dist/server/config.mjs +405 -27
  148. package/dist/server/data.mjs +405 -27
  149. package/dist/server/index.mjs +370 -104
  150. package/dist/server/next.mjs +1430 -463
  151. package/dist/server/page-converter.mjs +36 -25
  152. package/dist/server/prebuild.mjs +1 -1
  153. package/dist/server/rendering/server.mjs +1374 -331
  154. package/dist/server/rendering.mjs +1436 -364
  155. package/dist/server/routing.mjs +476 -43
  156. package/dist/server/server.mjs +504 -169
  157. package/dist/server/theme-bridge.mjs +467 -111
  158. package/dist/styles/index.css +186 -65
  159. package/package.json +1 -1
@@ -0,0 +1,42 @@
1
+ /**
2
+ * Checkbox and radio CSS shared by the full theme generator and the SDK
3
+ * theme bridge, so both render the same customer-facing controls.
4
+ *
5
+ * Emits:
6
+ * - .form-checkbox / .form-radio: the controls themselves. The tick and dot
7
+ * are drawn with ::before so their colour comes from theme tokens rather
8
+ * than a baked-in SVG.
9
+ * - .form-check: a label row holding a control and its text. The control
10
+ * lines up with the first line of text, so long labels wrap cleanly.
11
+ * - .form-check--tile: a bordered, fully clickable panel for agreements
12
+ * (booking consent, consent fields) that tints when ticked.
13
+ */
14
+ export type CheckableCorners = 'square' | 'soft' | 'rounded' | 'pill';
15
+ export type CheckableCssInput = Readonly<{
16
+ /** Scoped root selector, e.g. `:where([data-theme-scope="x"])`. */
17
+ root: string;
18
+ /** Resolved CSS border width, e.g. `1px`. */
19
+ borderWidth: string;
20
+ /** Resolved CSS colour for the unchecked border. */
21
+ borderColor: string;
22
+ /** Resolved CSS colour for the unchecked fill. */
23
+ background: string;
24
+ /** Input corner style; checkboxes and tiles scale their radius from it. */
25
+ corners: CheckableCorners;
26
+ /**
27
+ * Theme colour token for the checked fill, tile tint and focus outline.
28
+ * Any opacity suffix is dropped (`primary/70` fills with solid primary):
29
+ * the tick's on-token only contrasts with the solid colour.
30
+ */
31
+ accentToken: string;
32
+ /** Resolved CSS colour for an invalid agreement tile. */
33
+ errorColor: string;
34
+ }>;
35
+ /**
36
+ * Colour for the tick/dot drawn on top of the accent fill. Uses the palette's
37
+ * matching "on" token where there is one, falling back to white.
38
+ */
39
+ /** The accent at full strength: `primary/70` becomes `primary`. */
40
+ export declare function solidAccentToken(accentToken: string): string;
41
+ export declare function checkableMarkColor(accentToken: string): string;
42
+ export declare function generateCheckableCss(input: CheckableCssInput): string;
@@ -0,0 +1,19 @@
1
+ /**
2
+ * Input group: a field and an action (usually a themed button) sharing one
3
+ * input-styled shell, e.g. the newsletter email + Sign up row.
4
+ *
5
+ * The shell `.form-input-group` takes the theme's `.form-input` rules (the
6
+ * generators add it to that selector list, plus focus and error), so it
7
+ * follows the site's input background, border, corners and shadow. This file
8
+ * only adds the layout overrides and the borderless inner field.
9
+ */
10
+ export declare const INPUT_GROUP_SELECTOR = ".form-input-group";
11
+ /** Shell focus ring follows the field only, not the button beside it. */
12
+ export declare const INPUT_GROUP_FOCUS_SELECTOR = ".form-input-group:has(> .form-input-group-field:focus-visible)";
13
+ export declare const INPUT_GROUP_ERROR_SELECTOR = ".form-input-group:has(> .form-input-group-field[aria-invalid=\"true\"])";
14
+ /**
15
+ * @param root - scoped root selector
16
+ * @param padding - the theme's input padding shorthand (`block inline`), so the
17
+ * inner field's text sits where a plain input's text would.
18
+ */
19
+ export declare function generateInputGroupCss(root: string, padding: string): string;
@@ -15,6 +15,7 @@ export type NavigationTabsProps = {
15
15
  variant?: NavigationTabsVariant;
16
16
  urlParam?: string;
17
17
  className?: string;
18
+ tabClassName?: string;
18
19
  trailingActions?: React.ReactNode;
19
20
  };
20
21
  /**
@@ -27,7 +28,7 @@ export type NavigationTabsProps = {
27
28
  * - URL synchronization via query param or hash
28
29
  * - Keyboard navigation and ARIA support
29
30
  */
30
- export declare function NavigationTabs({ tabs, activeTab: controlledActiveTab, onTabChange, variant: _variant, urlParam, className, trailingActions, }: NavigationTabsProps): import("react").JSX.Element | null;
31
+ export declare function NavigationTabs({ tabs, activeTab: controlledActiveTab, onTabChange, variant: _variant, urlParam, className, tabClassName, trailingActions, }: NavigationTabsProps): import("react").JSX.Element | null;
31
32
  export type NavigationTabPanelsProps = {
32
33
  tabs: NavigationTab[];
33
34
  activeTab: string;
@@ -1,6 +1,6 @@
1
1
  "use client";
2
- import { _n as formatCurrencyAmount, zt as assertNever$2 } from "./propsDecoder-C3TP_z4x.mjs";
3
- import { a as CheckIcon } from "./scrollToBlock-CWs8EIdo.mjs";
2
+ import { Vt as assertNever$2, yn as formatCurrencyAmount } from "./propsDecoder-Dcgsncxb.mjs";
3
+ import { a as CheckIcon } from "./scrollToBlock-BNgaEUpo.mjs";
4
4
  import { n as RichText } from "./checkoutUrls-CW3-78uu.mjs";
5
5
  import { useCallback, useEffect, useReducer, useRef } from "react";
6
6
  import { Fragment, jsx, jsxs } from "react/jsx-runtime";
@@ -0,0 +1,24 @@
1
+ import { O as clsx } from "./colorStyles-CuJBiS-1.mjs";
2
+ import "react";
3
+ import { jsx, jsxs } from "react/jsx-runtime";
4
+ //#region ../blocks/src/system/runtime/shared/components/CheckboxChoice.tsx
5
+ /**
6
+ * The customer-facing checkbox every block renders. Styling comes from the
7
+ * theme's input CSS (`.form-check`, `.form-checkbox`), so it follows each
8
+ * site's input colours, borders and corners.
9
+ */
10
+ function CheckboxChoice({ label, presentation = "row", className, ...inputProps }) {
11
+ return /* @__PURE__ */ jsxs("label", {
12
+ className: clsx("form-check", presentation === "tile" && "form-check--tile", className),
13
+ children: [/* @__PURE__ */ jsx("input", {
14
+ ...inputProps,
15
+ type: "checkbox",
16
+ className: "form-checkbox"
17
+ }), /* @__PURE__ */ jsx("span", {
18
+ className: "form-check-label",
19
+ children: label
20
+ })]
21
+ });
22
+ }
23
+ //#endregion
24
+ export { CheckboxChoice as t };
@@ -1,5 +1,5 @@
1
1
  "use client";
2
- import { t as ThemedButton } from "./ThemedButton-LAJTNrS8.mjs";
2
+ import { t as ThemedButton } from "./ThemedButton-CE5KYT6z.mjs";
3
3
  import { useId } from "react";
4
4
  import { jsx, jsxs } from "react/jsx-runtime";
5
5
  //#region ../blocks/src/system/runtime/api/types/discounts.ts
@@ -1,11 +1,11 @@
1
1
  "use client";
2
2
  import { O as clsx } from "./colorStyles-CuJBiS-1.mjs";
3
- import { F as calendarMonthKey, G as buildEventRuntimeFilters, I as calendarPageResponseError, K as getEventRuntimeFiltersKey, L as calendarQueryKey, P as calendarMonthDate, Q as MONTH_NAMES, R as calendarWindowBounds, V as planCalendarMonthRanges, W as getBlockApiReadStage, X as getCardOrientation, Z as getContainerClass, ct as shiftCalendarAnchorDate, et as addMonths, it as getOrderedDayNames, nt as formatDateKey, ot as isSameCalendarDay, rn as getLocalScheduleDate, rt as getDayOfWeek, st as isToday, tn as formatLocalScheduleDate, tt as buildCalendarViewport, z as calendarWindowMonths$1 } from "./propsDecoder-C3TP_z4x.mjs";
4
- import { a as EventCardClient, i as EventPaginatedListView, n as useEventPagination, o as EventFilters, r as toError, s as formatEventTeacherLine, t as useEventFilters } from "./useEventFilters-CLL829vy.mjs";
5
- import { o as formatEventRemainingPlaces, p as isEventFull, t as formatEventPrice } from "./pricing-BOU0_Hai.mjs";
6
- import { a as formatTime, d as resolveEventLinkProps, o as groupEventsByDate, s as resolveEventTimeZone, t as formatDate, u as resolveEventCta } from "./dates-BhwVSxDg.mjs";
7
- import { n as useBlockApi } from "./context-BFeY_Wbm.mjs";
8
- import { n as ThemedButtonLink, t as ThemedButton } from "./ThemedButton-LAJTNrS8.mjs";
3
+ import { $ as getContainerClass, B as calendarWindowBounds, I as calendarMonthDate, J as getEventRuntimeFiltersKey, K as getBlockApiReadStage, L as calendarMonthKey, Q as getCardOrientation, R as calendarPageResponseError, U as planCalendarMonthRanges, V as calendarWindowMonths$1, an as getLocalScheduleDate, at as getDayOfWeek, ct as isSameCalendarDay, et as MONTH_NAMES, it as formatDateKey, lt as isToday, nt as addMonths, ot as getOrderedDayNames, q as buildEventRuntimeFilters, rn as formatLocalScheduleDate, rt as buildCalendarViewport, ut as shiftCalendarAnchorDate, z as calendarQueryKey } from "./propsDecoder-Dcgsncxb.mjs";
4
+ import { a as EventCardClient, i as EventPaginatedListView, n as useEventPagination, o as EventFilters, r as toError, s as formatEventTeacherLine, t as useEventFilters } from "./useEventFilters-Bukew6Gb.mjs";
5
+ import { o as formatEventRemainingPlaces, p as isEventFull, t as formatEventPrice } from "./pricing-HHx3IgBz.mjs";
6
+ import { a as formatTime, d as resolveEventLinkProps, o as groupEventsByDate, s as resolveEventTimeZone, t as formatDate, u as resolveEventCta } from "./dates-DUsCEzLb.mjs";
7
+ import { n as useBlockApi } from "./context-Bc8T6pCe.mjs";
8
+ import { n as ThemedButtonLink, t as ThemedButton } from "./ThemedButton-CE5KYT6z.mjs";
9
9
  import { t as createBodyThemePortalRoot } from "./themePortalRoot-AGs4cE7t.mjs";
10
10
  import { t as ModalShell } from "./ModalShell-CqkBvBIC.mjs";
11
11
  import React, { createContext, useCallback, useContext, useEffect, useId, useMemo, useRef, useState } from "react";
@@ -1,6 +1,6 @@
1
1
  "use client";
2
- import { G as buildEventRuntimeFilters } from "./propsDecoder-C3TP_z4x.mjs";
3
- import { i as EventPaginatedListView, n as useEventPagination, o as EventFilters, t as useEventFilters } from "./useEventFilters-CLL829vy.mjs";
2
+ import { q as buildEventRuntimeFilters } from "./propsDecoder-Dcgsncxb.mjs";
3
+ import { i as EventPaginatedListView, n as useEventPagination, o as EventFilters, t as useEventFilters } from "./useEventFilters-Bukew6Gb.mjs";
4
4
  import { useId, useMemo } from "react";
5
5
  import { jsx } from "react/jsx-runtime";
6
6
  //#region ../blocks/src/system/runtime/nodes/events/EventListing.client.tsx
@@ -1,5 +1,5 @@
1
1
  "use client";
2
- import { Rt as isRecord } from "./propsDecoder-C3TP_z4x.mjs";
2
+ import { Bt as isRecord } from "./propsDecoder-Dcgsncxb.mjs";
3
3
  import { useEffect, useRef, useState } from "react";
4
4
  import { jsx } from "react/jsx-runtime";
5
5
  //#region ../blocks/src/system/runtime/nodes/shared/LeafletStaticMap.tsx
@@ -1,5 +1,5 @@
1
1
  import { O as clsx } from "./colorStyles-CuJBiS-1.mjs";
2
- import { gt as themeButtonVariantClassNames, ht as themeButtonSizeClassName } from "./propsDecoder-C3TP_z4x.mjs";
2
+ import { _t as themeButtonSizeClassName, vt as themeButtonVariantClassNames } from "./propsDecoder-Dcgsncxb.mjs";
3
3
  import "react";
4
4
  import { Fragment, jsx, jsxs } from "react/jsx-runtime";
5
5
  //#region ../blocks/src/system/runtime/nodes/spinner.tsx
@@ -1,4 +1,4 @@
1
- import { t as defineIslandPropsDecoder } from "./propsDecoder-C3TP_z4x.mjs";
1
+ import { t as defineIslandPropsDecoder } from "./propsDecoder-Dcgsncxb.mjs";
2
2
  //#region src/rendering/islands/enhancers/accordion.ts
3
3
  const decode = defineIslandPropsDecoder("accordion");
4
4
  function parseDefaultValues(value) {
@@ -1,17 +1,18 @@
1
1
  "use client";
2
2
  import { C as unsafeAsPassId, b as unsafeAsCustomerPassId, v as unsafeAsAppointmentResourceId, x as unsafeAsFormId, y as unsafeAsAppointmentServiceId } from "./colorStyles-CuJBiS-1.mjs";
3
- import { i as buildBookingPaymentSelectionViewModel, n as StepIndicator, r as usePolling, t as BookingConsentAgreement } from "./BookingConsentAgreement-DlVOmpW4.mjs";
4
- import { $t as formatBookingInstant, At as resolveBookingSiteId, Bt as clearWorkflowFeedback, Ct as getBookingServiceSlidingScale, Dt as prepareBookingSubmission, Et as parseBookingCurrencyInputToCents, Ft as BOOKING_FORM_DATA_RESERVED_KEYS, Gt as reportWorkflowSuccess, It as isBookingRequirementConsentFieldId, Mt as toSelectedCollectionOptionKind, Nt as projectSelectedAppointmentConsentIntoForm, Ot as resolveAppointmentCheckoutVerificationState, Pt as resolveSelectedAppointmentConsent, St as getBookingRedirectStateFromLocation, Tt as isBookingServiceSlidingAmountInRange, Ut as okWith, Vt as err, Wt as reportWorkflowError, Yt as addLocalScheduleDays, _n as formatCurrencyAmount, an as resolveBookingTimeZoneId, bt as formatBookingCentsAsCurrencyInput, in as parseBookingLocalDate, jt as resolveDefaultBookingServiceId, kt as resolveBookingPaymentStep, t as defineIslandPropsDecoder, tn as formatLocalScheduleDate, vt as logger, wt as getBookingSuccessMessage, xt as formatBookingSubmissionPreparationError, yt as deriveBookingFormViewState, zt as assertNever } from "./propsDecoder-C3TP_z4x.mjs";
5
- import { n as useBlockApi, t as BlockApiProvider } from "./context-BFeY_Wbm.mjs";
3
+ import { i as buildBookingPaymentSelectionViewModel, n as StepIndicator, r as usePolling, t as BookingConsentAgreement } from "./BookingConsentAgreement-BQKL045f.mjs";
4
+ import { At as resolveAppointmentCheckoutVerificationState, Ct as formatBookingSubmissionPreparationError, Dt as isBookingServiceSlidingAmountInRange, Et as getBookingSuccessMessage, Ft as projectSelectedAppointmentConsentIntoForm, Gt as okWith, Ht as clearWorkflowFeedback, It as resolveSelectedAppointmentConsent, Kt as reportWorkflowError, Lt as BOOKING_FORM_DATA_RESERVED_KEYS, Mt as resolveBookingSiteId, Nt as resolveDefaultBookingServiceId, Ot as parseBookingCurrencyInputToCents, Pt as toSelectedCollectionOptionKind, Rt as isBookingRequirementConsentFieldId, St as formatBookingCentsAsCurrencyInput, Tt as getBookingServiceSlidingScale, Ut as err, Vt as assertNever, Zt as addLocalScheduleDays, bt as logger, jt as resolveBookingPaymentStep, kt as prepareBookingSubmission, on as parseBookingLocalDate, qt as reportWorkflowSuccess, rn as formatLocalScheduleDate, sn as resolveBookingTimeZoneId, t as defineIslandPropsDecoder, tn as formatBookingInstant, wt as getBookingRedirectStateFromLocation, xt as deriveBookingFormViewState, yn as formatCurrencyAmount } from "./propsDecoder-Dcgsncxb.mjs";
5
+ import { n as useBlockApi, t as BlockApiProvider } from "./context-Bc8T6pCe.mjs";
6
6
  import { n as isSpamProtectionEnabled, r as AltchaWidget, t as getChallengeUrl } from "./src-B833rYRr.mjs";
7
- import { a as CheckIcon, i as StateIcon, n as useDiscountCodeUi, r as TerminalPanel, t as scrollToBlock } from "./scrollToBlock-CWs8EIdo.mjs";
8
- import { t as DiscountCodeDisclosure } from "./DiscountCodeDisclosure-T9q623PQ.mjs";
9
- import { i as SpinnerNode, t as ThemedButton } from "./ThemedButton-LAJTNrS8.mjs";
7
+ import { a as CheckIcon, i as StateIcon, n as useDiscountCodeUi, r as TerminalPanel, t as scrollToBlock } from "./scrollToBlock-BNgaEUpo.mjs";
8
+ import { t as DiscountCodeDisclosure } from "./DiscountCodeDisclosure-CsOtjFY7.mjs";
9
+ import { i as SpinnerNode, t as ThemedButton } from "./ThemedButton-CE5KYT6z.mjs";
10
10
  import { t as FeedbackMessage } from "./FeedbackMessage-CtLvvS_d.mjs";
11
11
  import { n as getFieldValidationControlProps, t as FieldValidationMessage } from "./FieldValidationMessage-AYanWFb-.mjs";
12
12
  import { t as buildCheckoutReturnUrls } from "./checkoutUrls-CW3-78uu.mjs";
13
+ import { t as CheckboxChoice } from "./CheckboxChoice--W2n6yKs.mjs";
13
14
  import { t as mountReactIsland } from "./reactMount-SY8AVRof.mjs";
14
- import { t as buildRouteIslandApiConfig } from "./routeIslandApiConfig-DzN1W0sq.mjs";
15
+ import { t as buildRouteIslandApiConfig } from "./routeIslandApiConfig-CWLP7wu3.mjs";
15
16
  import React, { useCallback, useEffect, useLayoutEffect, useMemo, useReducer, useRef, useState } from "react";
16
17
  import { jsx, jsxs } from "react/jsx-runtime";
17
18
  //#region ../core/src/appointment-service-categories.ts
@@ -2812,7 +2813,7 @@ function DefaultFieldInput({ describedBy, error, errorId, field, onBlur, onChang
2812
2813
  case "radio": return /* @__PURE__ */ jsx("div", {
2813
2814
  className: "rb-space-y-2",
2814
2815
  children: field.field.options?.map((option) => /* @__PURE__ */ jsxs("label", {
2815
- className: "rb-flex rb-items-center rb-gap-2 rb-cursor-pointer",
2816
+ className: "form-check",
2816
2817
  children: [/* @__PURE__ */ jsx("input", {
2817
2818
  type: "radio",
2818
2819
  name: field.id,
@@ -2824,7 +2825,7 @@ function DefaultFieldInput({ describedBy, error, errorId, field, onBlur, onChang
2824
2825
  ...validationProps,
2825
2826
  className: "form-radio"
2826
2827
  }), /* @__PURE__ */ jsx("span", {
2827
- className: "rb-caption",
2828
+ className: "form-check-label",
2828
2829
  children: option.label
2829
2830
  })]
2830
2831
  }, option.value))
@@ -2834,47 +2835,20 @@ function DefaultFieldInput({ describedBy, error, errorId, field, onBlur, onChang
2834
2835
  const checkedValues = toStringArray(value);
2835
2836
  return /* @__PURE__ */ jsx("div", {
2836
2837
  className: "rb-space-y-2",
2837
- children: field.field.options.map((option) => /* @__PURE__ */ jsxs("label", {
2838
- className: "rb-flex rb-items-center rb-gap-2 rb-cursor-pointer",
2839
- children: [/* @__PURE__ */ jsx("input", {
2840
- type: "checkbox",
2841
- name: field.id,
2842
- value: option.value,
2843
- checked: checkedValues.includes(option.value),
2844
- onChange: (event) => {
2845
- onChange(event.target.checked ? [...checkedValues, option.value] : checkedValues.filter((item) => item !== option.value));
2846
- },
2847
- onBlur,
2848
- ...validationProps,
2849
- className: "form-checkbox"
2850
- }), /* @__PURE__ */ jsx("span", {
2851
- className: "rb-caption",
2852
- children: option.label
2853
- })]
2838
+ children: field.field.options.map((option) => /* @__PURE__ */ jsx(CheckboxChoice, {
2839
+ name: field.id,
2840
+ value: option.value,
2841
+ checked: checkedValues.includes(option.value),
2842
+ onChange: (event) => {
2843
+ onChange(event.target.checked ? [...checkedValues, option.value] : checkedValues.filter((item) => item !== option.value));
2844
+ },
2845
+ onBlur,
2846
+ ...validationProps,
2847
+ label: option.label
2854
2848
  }, option.value))
2855
2849
  });
2856
2850
  }
2857
- return /* @__PURE__ */ jsxs("label", {
2858
- className: "rb-flex rb-items-center rb-gap-2 rb-cursor-pointer",
2859
- children: [/* @__PURE__ */ jsx("input", {
2860
- type: "checkbox",
2861
- id: field.inputId,
2862
- name: field.id,
2863
- checked: Boolean(value),
2864
- onChange: (event) => onChange(event.target.checked),
2865
- onBlur,
2866
- required: field.required,
2867
- ...validationProps,
2868
- className: "form-checkbox"
2869
- }), /* @__PURE__ */ jsx("span", {
2870
- className: "rb-caption",
2871
- children: field.field.placeholder || field.label
2872
- })]
2873
- });
2874
- case "booking_requirement_consent": return /* @__PURE__ */ jsxs("label", {
2875
- className: "rb-flex rb-items-start rb-gap-2 rb-cursor-pointer",
2876
- children: [/* @__PURE__ */ jsx("input", {
2877
- type: "checkbox",
2851
+ return /* @__PURE__ */ jsx(CheckboxChoice, {
2878
2852
  id: field.inputId,
2879
2853
  name: field.id,
2880
2854
  checked: Boolean(value),
@@ -2882,11 +2856,18 @@ function DefaultFieldInput({ describedBy, error, errorId, field, onBlur, onChang
2882
2856
  onBlur,
2883
2857
  required: field.required,
2884
2858
  ...validationProps,
2885
- className: "form-checkbox rb-mt-0.5"
2886
- }), /* @__PURE__ */ jsx("span", {
2887
- className: "rb-caption",
2888
- children: field.field.checkboxLabel
2889
- })]
2859
+ label: field.field.placeholder || field.label
2860
+ });
2861
+ case "booking_requirement_consent": return /* @__PURE__ */ jsx(CheckboxChoice, {
2862
+ id: field.inputId,
2863
+ name: field.id,
2864
+ checked: Boolean(value),
2865
+ onChange: (event) => onChange(event.target.checked),
2866
+ onBlur,
2867
+ required: field.required,
2868
+ ...validationProps,
2869
+ label: field.field.checkboxLabel,
2870
+ presentation: "tile"
2890
2871
  });
2891
2872
  case "number": return /* @__PURE__ */ jsx("input", {
2892
2873
  ...commonProps,
@@ -7943,6 +7943,7 @@ const publicEventLoaderQuerySchemaShape = {
7943
7943
  seriesSlug: z.string().optional(),
7944
7944
  includeOccurrenceId: z.string().optional(),
7945
7945
  readIntent: z.string().optional(),
7946
+ detailAdmission: z.string().optional(),
7946
7947
  detailLevel: z.string().optional(),
7947
7948
  readProfile: z.string().optional()
7948
7949
  };
@@ -8109,11 +8110,11 @@ const publicEventBookingAvailabilitySchema = z.discriminatedUnion("kind", [z.obj
8109
8110
  "series_archived",
8110
8111
  "parent_archived",
8111
8112
  "parent_inconsistent",
8112
- "not_public",
8113
8113
  "already_started",
8114
8114
  "enrollment_closed"
8115
8115
  ])
8116
8116
  })]);
8117
+ const publicEventBookingClosedDetailSchema = z.discriminatedUnion("kind", [z.object({ kind: z.literal("opensSoon") }), z.object({ kind: z.literal("paused") })]);
8117
8118
  const publicRunSessionSchema = z.object({
8118
8119
  occurrenceId: z.string(),
8119
8120
  startsAt: z.string(),
@@ -8158,6 +8159,7 @@ const publicEventBaseSchema = z.object({
8158
8159
  destination: publicEventDestinationSchema,
8159
8160
  requiresRegistration: z.boolean(),
8160
8161
  bookingAvailability: publicEventBookingAvailabilitySchema,
8162
+ bookingClosedDetail: publicEventBookingClosedDetailSchema.optional(),
8161
8163
  deliveryMode: z.enum([
8162
8164
  "in_person",
8163
8165
  "online",
@@ -14106,6 +14108,26 @@ function BookingConsentAgreement({ agreement, showTitle = true, title, titleId }
14106
14108
  })] });
14107
14109
  }
14108
14110
  //#endregion
14111
+ //#region ../blocks/src/system/runtime/shared/components/CheckboxChoice.tsx
14112
+ /**
14113
+ * The customer-facing checkbox every block renders. Styling comes from the
14114
+ * theme's input CSS (`.form-check`, `.form-checkbox`), so it follows each
14115
+ * site's input colours, borders and corners.
14116
+ */
14117
+ function CheckboxChoice({ label, presentation = "row", className, ...inputProps }) {
14118
+ return /* @__PURE__ */ jsxs("label", {
14119
+ className: clsx("form-check", presentation === "tile" && "form-check--tile", className),
14120
+ children: [/* @__PURE__ */ jsx("input", {
14121
+ ...inputProps,
14122
+ type: "checkbox",
14123
+ className: "form-checkbox"
14124
+ }), /* @__PURE__ */ jsx("span", {
14125
+ className: "form-check-label",
14126
+ children: label
14127
+ })]
14128
+ });
14129
+ }
14130
+ //#endregion
14109
14131
  //#region ../blocks/src/system/runtime/nodes/booking-form.service-choices.tsx
14110
14132
  function optionCardClassName(isSelected) {
14111
14133
  return `rb-option-card${isSelected ? " rb-option-card--selected" : ""}`;
@@ -14691,7 +14713,7 @@ function DefaultFieldInput({ describedBy, error, errorId, field, onBlur, onChang
14691
14713
  case "radio": return /* @__PURE__ */ jsx("div", {
14692
14714
  className: "rb-space-y-2",
14693
14715
  children: field.field.options?.map((option) => /* @__PURE__ */ jsxs("label", {
14694
- className: "rb-flex rb-items-center rb-gap-2 rb-cursor-pointer",
14716
+ className: "form-check",
14695
14717
  children: [/* @__PURE__ */ jsx("input", {
14696
14718
  type: "radio",
14697
14719
  name: field.id,
@@ -14703,7 +14725,7 @@ function DefaultFieldInput({ describedBy, error, errorId, field, onBlur, onChang
14703
14725
  ...validationProps,
14704
14726
  className: "form-radio"
14705
14727
  }), /* @__PURE__ */ jsx("span", {
14706
- className: "rb-caption",
14728
+ className: "form-check-label",
14707
14729
  children: option.label
14708
14730
  })]
14709
14731
  }, option.value))
@@ -14713,47 +14735,20 @@ function DefaultFieldInput({ describedBy, error, errorId, field, onBlur, onChang
14713
14735
  const checkedValues = toStringArray(value);
14714
14736
  return /* @__PURE__ */ jsx("div", {
14715
14737
  className: "rb-space-y-2",
14716
- children: field.field.options.map((option) => /* @__PURE__ */ jsxs("label", {
14717
- className: "rb-flex rb-items-center rb-gap-2 rb-cursor-pointer",
14718
- children: [/* @__PURE__ */ jsx("input", {
14719
- type: "checkbox",
14720
- name: field.id,
14721
- value: option.value,
14722
- checked: checkedValues.includes(option.value),
14723
- onChange: (event) => {
14724
- onChange(event.target.checked ? [...checkedValues, option.value] : checkedValues.filter((item) => item !== option.value));
14725
- },
14726
- onBlur,
14727
- ...validationProps,
14728
- className: "form-checkbox"
14729
- }), /* @__PURE__ */ jsx("span", {
14730
- className: "rb-caption",
14731
- children: option.label
14732
- })]
14738
+ children: field.field.options.map((option) => /* @__PURE__ */ jsx(CheckboxChoice, {
14739
+ name: field.id,
14740
+ value: option.value,
14741
+ checked: checkedValues.includes(option.value),
14742
+ onChange: (event) => {
14743
+ onChange(event.target.checked ? [...checkedValues, option.value] : checkedValues.filter((item) => item !== option.value));
14744
+ },
14745
+ onBlur,
14746
+ ...validationProps,
14747
+ label: option.label
14733
14748
  }, option.value))
14734
14749
  });
14735
14750
  }
14736
- return /* @__PURE__ */ jsxs("label", {
14737
- className: "rb-flex rb-items-center rb-gap-2 rb-cursor-pointer",
14738
- children: [/* @__PURE__ */ jsx("input", {
14739
- type: "checkbox",
14740
- id: field.inputId,
14741
- name: field.id,
14742
- checked: Boolean(value),
14743
- onChange: (event) => onChange(event.target.checked),
14744
- onBlur,
14745
- required: field.required,
14746
- ...validationProps,
14747
- className: "form-checkbox"
14748
- }), /* @__PURE__ */ jsx("span", {
14749
- className: "rb-caption",
14750
- children: field.field.placeholder || field.label
14751
- })]
14752
- });
14753
- case "booking_requirement_consent": return /* @__PURE__ */ jsxs("label", {
14754
- className: "rb-flex rb-items-start rb-gap-2 rb-cursor-pointer",
14755
- children: [/* @__PURE__ */ jsx("input", {
14756
- type: "checkbox",
14751
+ return /* @__PURE__ */ jsx(CheckboxChoice, {
14757
14752
  id: field.inputId,
14758
14753
  name: field.id,
14759
14754
  checked: Boolean(value),
@@ -14761,11 +14756,18 @@ function DefaultFieldInput({ describedBy, error, errorId, field, onBlur, onChang
14761
14756
  onBlur,
14762
14757
  required: field.required,
14763
14758
  ...validationProps,
14764
- className: "form-checkbox rb-mt-0.5"
14765
- }), /* @__PURE__ */ jsx("span", {
14766
- className: "rb-caption",
14767
- children: field.field.checkboxLabel
14768
- })]
14759
+ label: field.field.placeholder || field.label
14760
+ });
14761
+ case "booking_requirement_consent": return /* @__PURE__ */ jsx(CheckboxChoice, {
14762
+ id: field.inputId,
14763
+ name: field.id,
14764
+ checked: Boolean(value),
14765
+ onChange: (event) => onChange(event.target.checked),
14766
+ onBlur,
14767
+ required: field.required,
14768
+ ...validationProps,
14769
+ label: field.field.checkboxLabel,
14770
+ presentation: "tile"
14769
14771
  });
14770
14772
  case "number": return /* @__PURE__ */ jsx("input", {
14771
14773
  ...commonProps,
@@ -1,4 +1,4 @@
1
- import { t as defineIslandPropsDecoder } from "./propsDecoder-C3TP_z4x.mjs";
1
+ import { t as defineIslandPropsDecoder } from "./propsDecoder-Dcgsncxb.mjs";
2
2
  import { t as mountReactIsland } from "./reactMount-SY8AVRof.mjs";
3
3
  import { n as normalizeCarouselProps, t as CarouselNodeClient } from "./carousel.client-jahpU9Vz.mjs";
4
4
  import "react";
@@ -1,6 +1,6 @@
1
- import { t as defineIslandPropsDecoder } from "./propsDecoder-C3TP_z4x.mjs";
2
- import { t as CartController } from "./shop-commerce-gklw_hLF.mjs";
3
- import { t as mountShopBlockIsland } from "./shopShared-B5nyA41S.mjs";
1
+ import { t as defineIslandPropsDecoder } from "./propsDecoder-Dcgsncxb.mjs";
2
+ import { t as CartController } from "./shop-commerce-B88zmWWo.mjs";
3
+ import { t as mountShopBlockIsland } from "./shopShared-cuaONpkJ.mjs";
4
4
  import "react";
5
5
  import { jsx } from "react/jsx-runtime";
6
6
  //#region ../blocks/src/system/runtime/nodes/cart.client.tsx
@@ -1,6 +1,6 @@
1
- import { t as defineIslandPropsDecoder } from "./propsDecoder-C3TP_z4x.mjs";
2
- import { n as CheckoutController } from "./shop-commerce-gklw_hLF.mjs";
3
- import { t as mountShopBlockIsland } from "./shopShared-B5nyA41S.mjs";
1
+ import { t as defineIslandPropsDecoder } from "./propsDecoder-Dcgsncxb.mjs";
2
+ import { n as CheckoutController } from "./shop-commerce-B88zmWWo.mjs";
3
+ import { t as mountShopBlockIsland } from "./shopShared-cuaONpkJ.mjs";
4
4
  import "react";
5
5
  import { jsx } from "react/jsx-runtime";
6
6
  //#region ../blocks/src/system/runtime/nodes/checkout.client.tsx