@riverbankcms/sdk 0.96.0 → 0.98.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 (156) hide show
  1. package/README.md +20 -1
  2. package/dist/{PreviewEditorSidebar-46VT4QVU.mjs → PreviewEditorSidebar-CG3SSJND.mjs} +3 -3
  3. package/dist/{PreviewEditorUI-JD75GE5F.mjs → PreviewEditorUI-RHNGKAAU.mjs} +3 -3
  4. package/dist/SdkPreviewModeRuntime-OV5PNJBB.mjs +8 -0
  5. package/dist/_dts/api/src/bookingManagementEndpoints.d.ts +35 -1
  6. package/dist/_dts/api/src/bookingOperations.d.ts +246 -0
  7. package/dist/_dts/api/src/contentRuntime.d.ts +109 -40
  8. package/dist/_dts/api/src/endpoints.d.ts +80 -0
  9. package/dist/_dts/api/src/index.d.ts +3 -2
  10. package/dist/_dts/api/src/public/endpoints.d.ts +1 -1
  11. package/dist/_dts/api/src/publicExperienceEndpoints.d.ts +10 -0
  12. package/dist/_dts/api/src/sdkContracts.d.ts +2 -0
  13. package/dist/_dts/api/src/siteManagementEndpoints.d.ts +2 -1
  14. package/dist/_dts/api/src/siteRuntimeEndpoints.d.ts +7 -1
  15. package/dist/_dts/blocks/src/PageRenderer.d.ts +2 -1
  16. package/dist/_dts/blocks/src/bindings/types.d.ts +0 -4
  17. package/dist/_dts/blocks/src/client/site-chrome.d.ts +7 -0
  18. package/dist/_dts/blocks/src/contracts/index.d.ts +1 -0
  19. package/dist/_dts/blocks/src/contracts/proof-block-islands.d.ts +12 -12
  20. package/dist/_dts/blocks/src/primitives/content/primitives.d.ts +4 -0
  21. package/dist/_dts/blocks/src/system/blocks/events/shared/index.d.ts +1 -0
  22. package/dist/_dts/blocks/src/system/blocks/events/shared/layout.d.ts +2 -0
  23. package/dist/_dts/blocks/src/system/blocks/index.d.ts +1 -0
  24. package/dist/_dts/blocks/src/system/blocks/weekly-slot-availability.d.ts +34 -0
  25. package/dist/_dts/blocks/src/system/componentFactory.d.ts +1 -0
  26. package/dist/_dts/blocks/src/system/constants/blockKinds.d.ts +1 -1
  27. package/dist/_dts/blocks/src/system/customize/facets.d.ts +2 -2
  28. package/dist/_dts/blocks/src/system/data/loaderEndpoints.d.ts +1 -1
  29. package/dist/_dts/blocks/src/system/data/prefetchBlockData.d.ts +4 -1
  30. package/dist/_dts/blocks/src/system/node/builder.d.ts +2 -0
  31. package/dist/_dts/blocks/src/system/node/schema.d.ts +13 -0
  32. package/dist/_dts/blocks/src/system/node/validation-constants.d.ts +1 -1
  33. package/dist/_dts/blocks/src/system/registry.d.ts +1 -0
  34. package/dist/_dts/blocks/src/system/runtime/api/client.d.ts +2 -1
  35. package/dist/_dts/blocks/src/system/runtime/api/endpoints.d.ts +8 -0
  36. package/dist/_dts/blocks/src/system/runtime/api/types.d.ts +24 -0
  37. package/dist/_dts/blocks/src/system/runtime/components/registry.client.d.ts +6 -0
  38. package/dist/_dts/blocks/src/system/runtime/hooks/useAppointmentCheckoutVerification.d.ts +7 -0
  39. package/dist/_dts/blocks/src/system/runtime/hooks/useAvailableSlots.d.ts +2 -2
  40. package/dist/_dts/blocks/src/system/runtime/hooks/useHeadlessEventRegistrationFlow.d.ts +4 -0
  41. package/dist/_dts/blocks/src/system/runtime/hooks/usePaymentVerification.d.ts +5 -0
  42. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/hooks.d.ts +14 -0
  43. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/useEventRegistrationSubmit.d.ts +8 -2
  44. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/useEventRegistrationWizard.d.ts +133 -2
  45. package/dist/_dts/blocks/src/system/runtime/nodes/weekly-slot-availability.client.controller.d.ts +3 -0
  46. package/dist/_dts/blocks/src/system/runtime/nodes/weekly-slot-availability.client.d.ts +9 -0
  47. package/dist/_dts/blocks/src/system/runtime/nodes/weekly-slot-availability.client.state.d.ts +14 -0
  48. package/dist/_dts/blocks/src/system/runtime/nodes/weekly-slot-availability.server.d.ts +10 -0
  49. package/dist/_dts/blocks/src/system/runtime/nodes/weekly-slot-availability.view.d.ts +11 -0
  50. package/dist/_dts/blocks/src/system/runtime/resolver.d.ts +31 -1
  51. package/dist/_dts/blocks/src/system/runtime/shared/useWaitlistClaim.d.ts +5 -0
  52. package/dist/_dts/blocks/src/utils/date-formatting.d.ts +1 -1
  53. package/dist/_dts/content-editor/src/primitives/PreviewInlineTextEditor.d.ts +1 -1
  54. package/dist/_dts/content-editor/src/primitives/PreviewRichTextEditor.d.ts +1 -1
  55. package/dist/_dts/content-model/src/templates/defaults.d.ts +5 -5
  56. package/dist/_dts/content-model/src/templates/types.d.ts +2 -6
  57. package/dist/_dts/core/src/branded.d.ts +8 -0
  58. package/dist/_dts/db/src/generated/supabase/database.types.d.ts +505 -2
  59. package/dist/_dts/field-primitives/src/bindings/index.d.ts +8 -0
  60. package/dist/_dts/sdk/src/cli/commands/push/publishGuidance.d.ts +15 -0
  61. package/dist/_dts/sdk/src/cli/commands/push/scopes/commandBackedDatedOfferingScope.d.ts +2 -1
  62. package/dist/_dts/sdk/src/cli/commands/push/scopes/types.d.ts +3 -1
  63. package/dist/_dts/sdk/src/cli/commands/push/stale-resolution.d.ts +9 -3
  64. package/dist/_dts/sdk/src/cli/commands/push/workflowPlan.d.ts +34 -0
  65. package/dist/_dts/sdk/src/cli/commands/setup.d.ts +2 -0
  66. package/dist/_dts/sdk/src/cli/config-loader.d.ts +2 -0
  67. package/dist/_dts/sdk/src/cli/content/metadataStore.d.ts +29 -0
  68. package/dist/_dts/sdk/src/cli/content/reader.d.ts +16 -14
  69. package/dist/_dts/sdk/src/cli/content/writer.d.ts +6 -4
  70. package/dist/_dts/sdk/src/cli/env-scope.d.ts +2 -0
  71. package/dist/_dts/sdk/src/cli/helpers.d.ts +6 -7
  72. package/dist/_dts/sdk/src/cli/merge-remote/entryMergePush.d.ts +2 -0
  73. package/dist/_dts/sdk/src/cli/merge-remote/pageMergePush.d.ts +2 -0
  74. package/dist/_dts/sdk/src/cli/push-config.d.ts +13 -2
  75. package/dist/_dts/sdk/src/cli/setup/setupPlan.d.ts +51 -0
  76. package/dist/_dts/sdk/src/cli/site-commands/commandRuntime.d.ts +21 -0
  77. package/dist/_dts/sdk/src/client/runtimeCachePolicy.d.ts +1 -1
  78. package/dist/_dts/sdk/src/client/types.d.ts +18 -2
  79. package/dist/_dts/sdk/src/config/types.d.ts +1 -1
  80. package/dist/_dts/sdk/src/config/validation.d.ts +3 -0
  81. package/dist/_dts/sdk/src/contracts/bindings.d.ts +3 -7
  82. package/dist/_dts/sdk/src/contracts/system-block-content.d.ts +13 -0
  83. package/dist/_dts/sdk/src/next/route-outcome-proxy.d.ts +3 -3
  84. package/dist/_dts/sdk/src/public-api/contracts.d.ts +174 -78
  85. package/dist/_dts/sdk/src/public-api/runtime.d.ts +1 -1
  86. package/dist/_dts/sdk/src/rendering/helpers/bindings.d.ts +4 -4
  87. package/dist/_dts/sdk/src/rendering/helpers/loadContent.d.ts +52 -1
  88. package/dist/_dts/sdk/src/rendering/hooks/usePage.d.ts +2 -2
  89. package/dist/_dts/sdk/src/rendering/islands/types.d.ts +18 -66
  90. package/dist/_dts/sdk/src/types/block-kinds.d.ts +1 -1
  91. package/dist/_dts/sdk/src/version.d.ts +1 -1
  92. package/dist/{chunk-EL55VV6Q.mjs → chunk-6WDBXCPX.mjs} +31 -10
  93. package/dist/{chunk-XMATDBXO.mjs → chunk-DBRI3PQF.mjs} +731 -180
  94. package/dist/{chunk-VHIMXQ7Z.mjs → chunk-H24OU7WG.mjs} +2 -2
  95. package/dist/{chunk-4TLTV7OB.mjs → chunk-PKDPQHB5.mjs} +2 -2
  96. package/dist/{chunk-VTPPVAOL.mjs → chunk-QPXE2OUZ.mjs} +1 -1
  97. package/dist/{chunk-7ED5UNHL.mjs → chunk-V2BYFSPW.mjs} +109 -0
  98. package/dist/cli/index.mjs +2131 -1033
  99. package/dist/cli/init-docs/content/cli-reference.md +29 -1
  100. package/dist/cli/init-docs/content/getting-started.md +8 -0
  101. package/dist/cli/init-docs/content/workflow-agent-safe-sync.md +3 -1
  102. package/dist/cli/init-docs/content/workflow-preview-mode.md +6 -0
  103. package/dist/cli/init-docs/content/workflow-remote-setup.md +51 -0
  104. package/dist/client/{accordion-GUNXIIZR.mjs → accordion-Q2BDNL53.mjs} +1 -1
  105. package/dist/client/{bookingForm-AOU4VHP5.mjs → bookingForm-ZMP4P7EK.mjs} +16 -6
  106. package/dist/client/bookings.mjs +98 -18
  107. package/dist/client/{carousel-4QSX2JPC.mjs → carousel-LW3UXPWO.mjs} +1 -1
  108. package/dist/client/{cart-JKN6C4ZB.mjs → cart-Z6D3KS6K.mjs} +5 -5
  109. package/dist/client/{checkout-YY6YMITW.mjs → checkout-YMT2QJQM.mjs} +5 -5
  110. package/dist/client/{chunk-6H27K6AA.mjs → chunk-26ZBRXFR.mjs} +9 -3
  111. package/dist/client/{chunk-VJROUYOQ.mjs → chunk-DRRQ7QSL.mjs} +2 -2
  112. package/dist/client/{chunk-BFCJZODD.mjs → chunk-ET2MDQQT.mjs} +4 -4
  113. package/dist/client/{chunk-H7A6PUGM.mjs → chunk-HBQEAOG4.mjs} +1 -1
  114. package/dist/client/{chunk-CPKMJVBD.mjs → chunk-IEOECM7U.mjs} +62 -43
  115. package/dist/client/{chunk-TNGL2WJF.mjs → chunk-KDP7ZRZV.mjs} +16 -0
  116. package/dist/client/{chunk-GWCRCJLB.mjs → chunk-R4XK3CKR.mjs} +12 -1
  117. package/dist/client/{chunk-A3YN7M3G.mjs → chunk-SK2BMD22.mjs} +2 -2
  118. package/dist/client/{chunk-SY543WZ3.mjs → chunk-XNTHVZ25.mjs} +1 -1
  119. package/dist/client/client.mjs +3729 -3054
  120. package/dist/client/{courseRegistration-UU2KMPSQ.mjs → courseRegistration-DGKCMC77.mjs} +4 -4
  121. package/dist/client/{eventCalendar-WIVNS2TM.mjs → eventCalendar-74Z2NNFM.mjs} +7 -7
  122. package/dist/client/{eventCombined-P3G5MW4J.mjs → eventCombined-GK2ODOX2.mjs} +7 -7
  123. package/dist/client/{eventDetails-2VHJ2RDG.mjs → eventDetails-MONAGT3N.mjs} +7 -7
  124. package/dist/client/{eventListing-TGO6JI3R.mjs → eventListing-SKGAO6PS.mjs} +7 -7
  125. package/dist/client/{eventRegistration-B46HEJES.mjs → eventRegistration-6KISGXRD.mjs} +7 -7
  126. package/dist/client/{form-VKRTFUNQ.mjs → form-FXPRTXHI.mjs} +2 -2
  127. package/dist/client/{headerSection-XUX4ZJLO.mjs → headerSection-7NAN5WNB.mjs} +2 -2
  128. package/dist/client/hooks.mjs +1661 -1334
  129. package/dist/client/{locationMap-NQFI5MJO.mjs → locationMap-UERN74U4.mjs} +2 -2
  130. package/dist/client/{newsletterForm-P2GETCQK.mjs → newsletterForm-SGWXMJ7U.mjs} +2 -2
  131. package/dist/client/{productDetail-7NQ7O5IF.mjs → productDetail-HN3HWZQZ.mjs} +5 -5
  132. package/dist/client/{productList-RX6ZJ7BL.mjs → productList-YT22Z5UR.mjs} +5 -5
  133. package/dist/client/rendering/client.mjs +2208 -1922
  134. package/dist/client/rendering/islands.mjs +18 -18
  135. package/dist/client/rendering.mjs +1497 -811
  136. package/dist/client/{shop-BHN5AKY6.mjs → shop-TKEDNWUS.mjs} +5 -5
  137. package/dist/preview-next/before-render.mjs +109 -0
  138. package/dist/preview-next/client/runtime.mjs +5 -5
  139. package/dist/preview-next/middleware.mjs +109 -0
  140. package/dist/{sdk-runtime-X2LXQ5IC.mjs → sdk-runtime-LWNYCQF2.mjs} +6 -6
  141. package/dist/server/components.mjs +2351 -1872
  142. package/dist/server/config-template-validation.mjs +6 -2
  143. package/dist/server/config-validation.mjs +1861 -1561
  144. package/dist/server/config.mjs +1861 -1561
  145. package/dist/server/data.mjs +1647 -1331
  146. package/dist/server/index.mjs +208 -9
  147. package/dist/server/next/middleware.mjs +2 -2
  148. package/dist/server/next.mjs +2572 -1878
  149. package/dist/server/page-converter.mjs +1461 -1276
  150. package/dist/server/prebuild.mjs +1 -1
  151. package/dist/server/rendering/server.mjs +2372 -1875
  152. package/dist/server/rendering.mjs +2557 -1941
  153. package/dist/server/routing.mjs +1716 -1353
  154. package/dist/server/server.mjs +1911 -1380
  155. package/package.json +1 -1
  156. package/dist/SdkPreviewModeRuntime-MJUSYUFB.mjs +0 -8
@@ -2362,7 +2362,7 @@ var init_schemas2 = __esm({
2362
2362
 
2363
2363
  // ../blocks/src/system/node/schema.ts
2364
2364
  import { z as z7 } from "zod";
2365
- var transformStepSchema, bindingPathSchema, bindingSchema, repeatSchema, conditionSchema, dataScopeSchema, nodePropsSchema, nodeSchema, nodeTreeSchema, NodeSchema, NodeTreeSchema;
2365
+ var transformStepSchema, bindingPathSchema, bindingSchema, repeatSchema, conditionalAuthoringPresenceSchema, conditionSchema, dataScopeSchema, nodePropsSchema, nodeSchema, nodeTreeSchema, NodeSchema, NodeTreeSchema;
2366
2366
  var init_schema = __esm({
2367
2367
  "../blocks/src/system/node/schema.ts"() {
2368
2368
  "use strict";
@@ -2388,10 +2388,20 @@ var init_schema = __esm({
2388
2388
  direction: z7.enum(["asc", "desc"]).default("asc")
2389
2389
  }).optional()
2390
2390
  });
2391
+ conditionalAuthoringPresenceSchema = z7.discriminatedUnion("kind", [
2392
+ z7.object({ kind: z7.literal("visitor-only") }),
2393
+ z7.object({
2394
+ kind: z7.literal("recover-empty-when-active"),
2395
+ placeholder: z7.string().min(1).optional()
2396
+ })
2397
+ ]);
2391
2398
  conditionSchema = z7.object({
2392
2399
  when: bindingSchema,
2393
2400
  equals: z7.unknown().optional(),
2394
- not: z7.boolean().default(false)
2401
+ not: z7.boolean().default(false),
2402
+ authoringPresence: conditionalAuthoringPresenceSchema.default({
2403
+ kind: "visitor-only"
2404
+ })
2395
2405
  });
2396
2406
  dataScopeSchema = z7.object({
2397
2407
  name: z7.string().min(1),
@@ -2502,7 +2512,8 @@ function when(path, options) {
2502
2512
  $when: {
2503
2513
  when: { from: path },
2504
2514
  ...options?.equals !== void 0 ? { equals: options.equals } : {},
2505
- ...options?.not ? { not: true } : {}
2515
+ ...options?.not ? { not: true } : {},
2516
+ ...options?.authoringPresence ? { authoringPresence: options.authoringPresence } : {}
2506
2517
  }
2507
2518
  });
2508
2519
  }
@@ -18304,6 +18315,41 @@ var init_filtering = __esm({
18304
18315
  }
18305
18316
  });
18306
18317
 
18318
+ // ../blocks/src/system/blocks/events/shared/layout.ts
18319
+ function eventSectionHeaderLayoutNodes() {
18320
+ return [
18321
+ text(
18322
+ { as: "h2" },
18323
+ bind("content.heading"),
18324
+ when("content.heading", {
18325
+ authoringPresence: recoverEmptyHeadingWhenActive
18326
+ })
18327
+ ),
18328
+ richText(
18329
+ { className: "rb-prose rb-max-w-none" },
18330
+ bind("content.description"),
18331
+ when("content.description", {
18332
+ authoringPresence: recoverEmptyDescriptionWhenActive
18333
+ })
18334
+ )
18335
+ ];
18336
+ }
18337
+ var recoverEmptyHeadingWhenActive, recoverEmptyDescriptionWhenActive;
18338
+ var init_layout = __esm({
18339
+ "../blocks/src/system/blocks/events/shared/layout.ts"() {
18340
+ "use strict";
18341
+ init_builder();
18342
+ recoverEmptyHeadingWhenActive = {
18343
+ kind: "recover-empty-when-active",
18344
+ placeholder: "Add heading"
18345
+ };
18346
+ recoverEmptyDescriptionWhenActive = {
18347
+ kind: "recover-empty-when-active",
18348
+ placeholder: "Add description"
18349
+ };
18350
+ }
18351
+ });
18352
+
18307
18353
  // ../blocks/src/system/blocks/events/shared/index.ts
18308
18354
  var init_shared2 = __esm({
18309
18355
  "../blocks/src/system/blocks/events/shared/index.ts"() {
@@ -18312,6 +18358,7 @@ var init_shared2 = __esm({
18312
18358
  init_schemas2();
18313
18359
  init_fields();
18314
18360
  init_filtering();
18361
+ init_layout();
18315
18362
  }
18316
18363
  });
18317
18364
 
@@ -18364,6 +18411,7 @@ var init_validation_constants = __esm({
18364
18411
  // Forms
18365
18412
  "form",
18366
18413
  "booking-form",
18414
+ "weekly-slot-availability",
18367
18415
  // Events
18368
18416
  "event-registration",
18369
18417
  "event-spotlight",
@@ -34162,6 +34210,10 @@ var init_endpoints = __esm({
34162
34210
  path: "/public/bookings/availability/slots",
34163
34211
  method: "GET"
34164
34212
  },
34213
+ getWeeklySlotAvailability: {
34214
+ path: "/public/bookings/weekly-slot-availability",
34215
+ method: "GET"
34216
+ },
34165
34217
  getAvailableDates: {
34166
34218
  path: "/public/bookings/availability/dates",
34167
34219
  method: "GET"
@@ -34702,6 +34754,18 @@ function createBlockApi(config) {
34702
34754
  }
34703
34755
  });
34704
34756
  },
34757
+ async getWeeklySlotAvailability(params) {
34758
+ const sid = requireSiteId();
34759
+ return request(BOOKINGS.getWeeklySlotAvailability, {
34760
+ query: {
34761
+ siteId: sid,
34762
+ serviceId: params.serviceId,
34763
+ resourceId: params.resourceId,
34764
+ horizonWeeks: params.horizonWeeks,
34765
+ timezone: params.timezone
34766
+ }
34767
+ });
34768
+ },
34705
34769
  async getAvailableDates(params) {
34706
34770
  const sid = requireSiteId();
34707
34771
  return request(BOOKINGS.getAvailableDates, {
@@ -41152,7 +41216,13 @@ var init_usePolling = __esm({
41152
41216
  // ../blocks/src/system/runtime/hooks/useAppointmentCheckoutVerification.ts
41153
41217
  import { useMemo as useMemo7 } from "react";
41154
41218
  function useAppointmentCheckoutVerification(config) {
41155
- const api = useBlockApi();
41219
+ return useAppointmentCheckoutVerificationWithDeps(
41220
+ config,
41221
+ appointmentCheckoutVerificationDeps
41222
+ );
41223
+ }
41224
+ function useAppointmentCheckoutVerificationWithDeps(config, deps) {
41225
+ const api = deps.useBlockApi();
41156
41226
  const pollingConfig = useMemo7(() => {
41157
41227
  if (!config) return null;
41158
41228
  return {
@@ -41163,7 +41233,7 @@ function useAppointmentCheckoutVerification(config) {
41163
41233
  interval: config.pollInterval
41164
41234
  };
41165
41235
  }, [api, config]);
41166
- const polling = usePolling(pollingConfig);
41236
+ const polling = deps.usePolling(pollingConfig);
41167
41237
  const state = resolveAppointmentCheckoutVerificationState({
41168
41238
  config,
41169
41239
  pollingStatus: polling.status,
@@ -41175,12 +41245,17 @@ function useAppointmentCheckoutVerification(config) {
41175
41245
  retry: polling.retry
41176
41246
  };
41177
41247
  }
41248
+ var appointmentCheckoutVerificationDeps;
41178
41249
  var init_useAppointmentCheckoutVerification = __esm({
41179
41250
  "../blocks/src/system/runtime/hooks/useAppointmentCheckoutVerification.ts"() {
41180
41251
  "use strict";
41181
41252
  init_api();
41182
41253
  init_booking_form_state();
41183
41254
  init_usePolling();
41255
+ appointmentCheckoutVerificationDeps = {
41256
+ useBlockApi,
41257
+ usePolling
41258
+ };
41184
41259
  }
41185
41260
  });
41186
41261
 
@@ -43714,7 +43789,10 @@ var init_hooks_state = __esm({
43714
43789
  // ../blocks/src/system/runtime/nodes/event-registration/hooks.ts
43715
43790
  import { useState as useState6, useEffect as useEffect10, useCallback as useCallback6, useRef as useRef12, useReducer as useReducer8 } from "react";
43716
43791
  function usePortalAuth() {
43717
- const api = useBlockApi();
43792
+ return usePortalAuthWithDeps(eventRegistrationHooksDeps);
43793
+ }
43794
+ function usePortalAuthWithDeps(deps) {
43795
+ const api = deps.useBlockApi();
43718
43796
  const [authState, setAuthState] = useState6("checking");
43719
43797
  const [profile, setProfile] = useState6(null);
43720
43798
  useEffect10(() => {
@@ -43762,7 +43840,10 @@ function usePortalAuth() {
43762
43840
  };
43763
43841
  }
43764
43842
  function useEligibility(params) {
43765
- const api = useBlockApi();
43843
+ return useEligibilityWithDeps(params, eventRegistrationHooksDeps);
43844
+ }
43845
+ function useEligibilityWithDeps(params, deps) {
43846
+ const api = deps.useBlockApi();
43766
43847
  const ticketSelectionsKey = JSON.stringify(normalizeTicketSelectionLines(params.ticketSelections));
43767
43848
  const [state, dispatch] = useReducer8(
43768
43849
  eligibilityLookupReducer,
@@ -43831,7 +43912,16 @@ function useExistingEventRegistration({
43831
43912
  isAuthenticated,
43832
43913
  occurrenceId
43833
43914
  }) {
43834
- const api = useBlockApi();
43915
+ return useExistingEventRegistrationWithDeps(
43916
+ { isAuthenticated, occurrenceId },
43917
+ eventRegistrationHooksDeps
43918
+ );
43919
+ }
43920
+ function useExistingEventRegistrationWithDeps({
43921
+ isAuthenticated,
43922
+ occurrenceId
43923
+ }, deps) {
43924
+ const api = deps.useBlockApi();
43835
43925
  const [state, dispatch] = useReducer8(
43836
43926
  existingRegistrationLookupReducer,
43837
43927
  initialExistingRegistrationLookupState
@@ -43871,6 +43961,7 @@ function useExistingEventRegistration({
43871
43961
  isLoading: state.tag === "loading"
43872
43962
  };
43873
43963
  }
43964
+ var eventRegistrationHooksDeps;
43874
43965
  var init_hooks = __esm({
43875
43966
  "../blocks/src/system/runtime/nodes/event-registration/hooks.ts"() {
43876
43967
  "use strict";
@@ -43878,6 +43969,9 @@ var init_hooks = __esm({
43878
43969
  init_utils5();
43879
43970
  init_ticketSelectionLines();
43880
43971
  init_hooks_state();
43972
+ eventRegistrationHooksDeps = {
43973
+ useBlockApi
43974
+ };
43881
43975
  }
43882
43976
  });
43883
43977
 
@@ -44197,9 +44291,6 @@ function SlidingScaleAmountField(props2) {
44197
44291
  }
44198
44292
  function TicketTypeQuantityRows(props2) {
44199
44293
  const totalSelectedQuantity = getTicketSelectionTotal(props2.ticketSelections);
44200
- const selectedTicketTypes = props2.ticketTypes.filter(
44201
- (ticketType) => getTicketLineQuantity(props2.ticketSelections, ticketType.id) > 0
44202
- );
44203
44294
  return /* @__PURE__ */ jsxs28("div", { className: "er-ticket-lines", children: [
44204
44295
  /* @__PURE__ */ jsx42("div", { className: "er-ticket-line-list", role: "list", "aria-label": "Tickets", children: props2.ticketTypes.map((ticketType) => {
44205
44296
  const quantity = getTicketLineQuantity(props2.ticketSelections, ticketType.id);
@@ -44258,22 +44349,7 @@ function TicketTypeQuantityRows(props2) {
44258
44349
  availabilityLabel: props2.availableSpots != null ? `${props2.availableSpots} spots available` : null
44259
44350
  }
44260
44351
  ),
44261
- selectedTicketTypes.length > 0 ? /* @__PURE__ */ jsxs28("div", { className: "er-ticket-line-summary", "aria-live": "polite", children: [
44262
- /* @__PURE__ */ jsxs28("div", { className: "er-ticket-line-summary-title", children: [
44263
- totalSelectedQuantity,
44264
- " ticket",
44265
- totalSelectedQuantity === 1 ? "" : "s",
44266
- " selected"
44267
- ] }),
44268
- /* @__PURE__ */ jsx42("ul", { className: "er-ticket-line-summary-list", children: selectedTicketTypes.map((ticketType) => {
44269
- const quantity = getTicketLineQuantity(props2.ticketSelections, ticketType.id);
44270
- return /* @__PURE__ */ jsxs28("li", { children: [
44271
- quantity,
44272
- " x ",
44273
- ticketType.name
44274
- ] }, ticketType.id);
44275
- }) })
44276
- ] }) : props2.hasAvailableTicketTypes ? /* @__PURE__ */ jsx42("p", { className: "er-text er-text--muted", children: "Choose at least one ticket to continue." }) : /* @__PURE__ */ jsx42("p", { className: "er-text er-text--muted", children: "No ticket types are currently available." })
44352
+ totalSelectedQuantity === 0 && props2.hasAvailableTicketTypes ? /* @__PURE__ */ jsx42("p", { className: "er-text er-text--muted", children: "Choose at least one ticket to continue." }) : totalSelectedQuantity === 0 ? /* @__PURE__ */ jsx42("p", { className: "er-text er-text--muted", children: "No ticket types are currently available." }) : null
44277
44353
  ] });
44278
44354
  }
44279
44355
  function getAttendanceModeDetail(attendanceMode) {
@@ -45679,7 +45755,6 @@ function EventRegistrationSummaryBar(props2) {
45679
45755
  const autoAppliedDiscount = wizard.discountCode.trim().length > 0 ? null : wizard.autoAppliedDiscount;
45680
45756
  const autoAppliedDiscountCents = Math.max(0, autoAppliedDiscount?.computedAmountCents ?? 0);
45681
45757
  const discountedTotalCents = Math.max(0, subtotalCents - autoAppliedDiscountCents);
45682
- const selectedLineSummary = (wizard.ticketSelectionSummaryLines ?? []).filter((line) => line.ticketTypeId !== null).map((line) => `${line.quantity} x ${line.label}`).join(", ");
45683
45758
  const selectedDirectPaymentOption = getSelectedDirectPaymentOption({
45684
45759
  wizard,
45685
45760
  totalCents: discountedTotalCents,
@@ -45716,10 +45791,6 @@ function EventRegistrationSummaryBar(props2) {
45716
45791
  /* @__PURE__ */ jsx55("h4", { className: "er-summary-bar-event", children: summaryTitle }),
45717
45792
  /* @__PURE__ */ jsxs39("span", { className: "er-summary-bar-meta", children: [
45718
45793
  summaryDate && formatEventDateTime(summaryDate, { timeZone: summaryTimeZone }),
45719
- selectedLineSummary ? /* @__PURE__ */ jsxs39(Fragment12, { children: [
45720
- " \xB7 ",
45721
- selectedLineSummary
45722
- ] }) : null,
45723
45794
  wizard.step !== "select-event" && wizard.step !== "select-tickets" && wizard.ticketsCount > 0 && /* @__PURE__ */ jsxs39(Fragment12, { children: [
45724
45795
  " \xB7 ",
45725
45796
  wizard.ticketsCount,
@@ -45896,7 +45967,10 @@ function getWaitlistClaimTokenSnapshot() {
45896
45967
  return getWaitlistClaimTokenFromUrl();
45897
45968
  }
45898
45969
  function useWaitlistClaim() {
45899
- const api = useBlockApi();
45970
+ return useWaitlistClaimWithDeps(useWaitlistClaimDeps);
45971
+ }
45972
+ function useWaitlistClaimWithDeps(deps) {
45973
+ const api = deps.useBlockApi();
45900
45974
  const token = useSyncExternalStore2(
45901
45975
  subscribeToWaitlistClaimToken,
45902
45976
  getWaitlistClaimTokenSnapshot,
@@ -45941,7 +46015,7 @@ function useWaitlistClaim() {
45941
46015
  isLoading: isWaitlistClaimLoading(state)
45942
46016
  };
45943
46017
  }
45944
- var WAITLIST_CLAIM_LOCATION_EVENT, historyPatched;
46018
+ var WAITLIST_CLAIM_LOCATION_EVENT, historyPatched, useWaitlistClaimDeps;
45945
46019
  var init_useWaitlistClaim = __esm({
45946
46020
  "../blocks/src/system/runtime/shared/useWaitlistClaim.ts"() {
45947
46021
  "use strict";
@@ -45950,13 +46024,19 @@ var init_useWaitlistClaim = __esm({
45950
46024
  init_useWaitlistClaim_state();
45951
46025
  WAITLIST_CLAIM_LOCATION_EVENT = "riverbank:waitlist-claim-location-change";
45952
46026
  historyPatched = false;
46027
+ useWaitlistClaimDeps = {
46028
+ useBlockApi
46029
+ };
45953
46030
  }
45954
46031
  });
45955
46032
 
45956
46033
  // ../blocks/src/system/runtime/hooks/usePaymentVerification.ts
45957
46034
  import { useMemo as useMemo8 } from "react";
45958
46035
  function usePaymentVerification(config) {
45959
- const api = useBlockApi();
46036
+ return usePaymentVerificationWithDeps(config, paymentVerificationDeps);
46037
+ }
46038
+ function usePaymentVerificationWithDeps(config, deps) {
46039
+ const api = deps.useBlockApi();
45960
46040
  const pollingConfig = useMemo8(() => {
45961
46041
  if (!config) return null;
45962
46042
  return {
@@ -45986,11 +46066,15 @@ function usePaymentVerification(config) {
45986
46066
  retry: polling.retry
45987
46067
  };
45988
46068
  }
46069
+ var paymentVerificationDeps;
45989
46070
  var init_usePaymentVerification = __esm({
45990
46071
  "../blocks/src/system/runtime/hooks/usePaymentVerification.ts"() {
45991
46072
  "use strict";
45992
46073
  init_api();
45993
46074
  init_usePolling();
46075
+ paymentVerificationDeps = {
46076
+ useBlockApi
46077
+ };
45994
46078
  }
45995
46079
  });
45996
46080
 
@@ -46085,6 +46169,9 @@ var init_useEventRegistrationStripeReturn = __esm({
46085
46169
 
46086
46170
  // ../blocks/src/system/runtime/nodes/event-registration/useEventRegistrationSubmit.ts
46087
46171
  function useEventRegistrationSubmit(options) {
46172
+ return useEventRegistrationSubmitWithDeps(options, eventRegistrationSubmitDeps);
46173
+ }
46174
+ function useEventRegistrationSubmitWithDeps(options, deps) {
46088
46175
  return async (method, passId, membershipId, selection, submitOptions) => {
46089
46176
  const submitOccurrenceId = options.registrationTarget?.occurrenceId;
46090
46177
  if (!submitOccurrenceId) {
@@ -46173,7 +46260,7 @@ function useEventRegistrationSubmit(options) {
46173
46260
  }
46174
46261
  const siteId = options.api.config.siteId;
46175
46262
  if (siteId && submitOccurrenceId) {
46176
- savePendingRegistration(siteId, submitOccurrenceId, {
46263
+ deps.savePendingRegistration(siteId, submitOccurrenceId, {
46177
46264
  attendeeId: result.attendeeId,
46178
46265
  formData: options.formData,
46179
46266
  ticketSelections,
@@ -46227,12 +46314,16 @@ function useEventRegistrationSubmit(options) {
46227
46314
  }
46228
46315
  };
46229
46316
  }
46317
+ var eventRegistrationSubmitDeps;
46230
46318
  var init_useEventRegistrationSubmit = __esm({
46231
46319
  "../blocks/src/system/runtime/nodes/event-registration/useEventRegistrationSubmit.ts"() {
46232
46320
  "use strict";
46233
46321
  "use client";
46234
46322
  init_sessionStorage();
46235
46323
  init_ticketSelectionLines();
46324
+ eventRegistrationSubmitDeps = {
46325
+ savePendingRegistration
46326
+ };
46236
46327
  }
46237
46328
  });
46238
46329
 
@@ -46268,6 +46359,9 @@ function getSlidingScaleSelectionMessage(input) {
46268
46359
  return null;
46269
46360
  }
46270
46361
  function useEventRegistrationWizard(options) {
46362
+ return useEventRegistrationWizardWithDeps(options, eventRegistrationWizardDeps);
46363
+ }
46364
+ function useEventRegistrationWizardWithDeps(options, deps) {
46271
46365
  const api = useBlockApi();
46272
46366
  const registrationEvents = useMemo10(
46273
46367
  () => toRegistrationEvents(options.events ?? []),
@@ -46317,8 +46411,8 @@ function useEventRegistrationWizard(options) {
46317
46411
  const [registrationResult, setRegistrationResult] = useState7(null);
46318
46412
  const [errorMessage, setErrorMessage] = useState7("");
46319
46413
  const [altchaSolution, setAltchaSolution] = useState7(null);
46320
- const { authState: portalAuthState, profile: portalProfile } = usePortalAuth();
46321
- const waitlistClaim = useWaitlistClaim();
46414
+ const { authState: portalAuthState, profile: portalProfile } = deps.usePortalAuth();
46415
+ const waitlistClaim = deps.useWaitlistClaim();
46322
46416
  const [showMagicLinkModal, setShowMagicLinkModal] = useState7(false);
46323
46417
  const [pendingAttendeeId, setPendingAttendeeId] = useState7(null);
46324
46418
  const [paymentStepState, setPaymentStepState] = useState7({
@@ -46383,7 +46477,7 @@ function useEventRegistrationWizard(options) {
46383
46477
  if (flowState.ticketsCount === ticketsCount) return;
46384
46478
  dispatchFlow({ type: "set-tickets-count", ticketsCount });
46385
46479
  }, [flowState.ticketsCount, ticketsCount]);
46386
- const eligibilityResult = useEligibility({
46480
+ const eligibilityResult = deps.useEligibility({
46387
46481
  enabled: portalAuthState === "authenticated" || step === "enter-details" || step === "select-payment",
46388
46482
  occurrenceId,
46389
46483
  attendanceMode: selectedAttendanceMode,
@@ -46391,7 +46485,7 @@ function useEventRegistrationWizard(options) {
46391
46485
  selectedSlidingAmount: parseCurrencyInputToCents(selectedSlidingAmountInput),
46392
46486
  email: formData.email
46393
46487
  });
46394
- const existingRegistrationResult = useExistingEventRegistration({
46488
+ const existingRegistrationResult = deps.useExistingEventRegistration({
46395
46489
  isAuthenticated: portalAuthState === "authenticated",
46396
46490
  occurrenceId
46397
46491
  });
@@ -46485,7 +46579,7 @@ function useEventRegistrationWizard(options) {
46485
46579
  useEffect15(() => {
46486
46580
  dispatchFlow({ type: "eligibility-updated", eligibility });
46487
46581
  }, [eligibility]);
46488
- const verification = useEventRegistrationStripeReturn({
46582
+ const verification = deps.useEventRegistrationStripeReturn({
46489
46583
  api,
46490
46584
  events: registrationEvents,
46491
46585
  occurrenceId,
@@ -46749,10 +46843,10 @@ function useEventRegistrationWizard(options) {
46749
46843
  if (discountContext?.type !== "event") return void 0;
46750
46844
  return ticketSelectionSubtotalCents;
46751
46845
  }, [discountContext, ticketSelectionSubtotalCents]);
46752
- const discountUi = useDiscountCodeUi({ api, discountContext, subtotalCents: discountSubtotalCents });
46846
+ const discountUi = deps.useDiscountCodeUi({ api, discountContext, subtotalCents: discountSubtotalCents });
46753
46847
  const selectionMethod = paymentSelection.method;
46754
46848
  const shouldShowDiscountToggle = discountContext !== null && discountUi.manualCodeEntryAllowed && (selectionMethod === "stripe" || selectionMethod === "pass_bundle" || selectionMethod === "membership_bundle");
46755
- const handleSubmit = useEventRegistrationSubmit({
46849
+ const handleSubmit = deps.useEventRegistrationSubmit({
46756
46850
  api,
46757
46851
  registrationTarget,
46758
46852
  selectedAttendanceMode,
@@ -46886,6 +46980,7 @@ function useEventRegistrationWizard(options) {
46886
46980
  handleRetry
46887
46981
  };
46888
46982
  }
46983
+ var eventRegistrationWizardDeps;
46889
46984
  var init_useEventRegistrationWizard = __esm({
46890
46985
  "../blocks/src/system/runtime/nodes/event-registration/useEventRegistrationWizard.ts"() {
46891
46986
  "use strict";
@@ -46907,6 +47002,15 @@ var init_useEventRegistrationWizard = __esm({
46907
47002
  init_event_registration_headless_state();
46908
47003
  init_registrationDerivations();
46909
47004
  init_registrationEventAdapter();
47005
+ eventRegistrationWizardDeps = {
47006
+ usePortalAuth,
47007
+ useEligibility,
47008
+ useExistingEventRegistration,
47009
+ useWaitlistClaim,
47010
+ useEventRegistrationStripeReturn,
47011
+ useEventRegistrationSubmit,
47012
+ useDiscountCodeUi
47013
+ };
46910
47014
  }
46911
47015
  });
46912
47016
 
@@ -63468,6 +63572,183 @@ var appointmentBookingBlockDefinition = {
63468
63572
  }
63469
63573
  };
63470
63574
 
63575
+ // ../blocks/src/system/blocks/weekly-slot-availability.ts
63576
+ init_builder();
63577
+ init_builder();
63578
+ init_styledSection();
63579
+ init_fragments();
63580
+ init_boxStyles2();
63581
+ init_defineBlock();
63582
+ init_api_bindings();
63583
+ import { z as z65 } from "zod";
63584
+ var weeklySlotAvailabilityManifest = createBlockManifest({
63585
+ id: "block.weekly-slot-availability",
63586
+ version: "1.0.0",
63587
+ title: "Weekly Slot Availability",
63588
+ titleSource: "heading",
63589
+ description: "Shows available recurring appointment slot patterns",
63590
+ skipSectionStyles: true,
63591
+ additionalFields: [
63592
+ {
63593
+ id: "serviceId",
63594
+ type: "reference",
63595
+ label: "Appointment service",
63596
+ description: "Choose which appointment service to show availability for",
63597
+ required: true,
63598
+ referenceKind: "appointmentService",
63599
+ allowManualEntry: false,
63600
+ ui: { intent: "behavior" }
63601
+ },
63602
+ {
63603
+ id: "resourceId",
63604
+ type: "reference",
63605
+ label: "Appointment resource",
63606
+ description: "Optionally narrow the availability to one practitioner or room",
63607
+ required: false,
63608
+ referenceKind: "appointmentResource",
63609
+ allowManualEntry: false,
63610
+ ui: { intent: "behavior" }
63611
+ },
63612
+ {
63613
+ id: "horizonWeeks",
63614
+ type: "select",
63615
+ label: "Look ahead",
63616
+ required: false,
63617
+ multiple: false,
63618
+ defaultValue: "4",
63619
+ options: [
63620
+ { value: "1", label: "1 week" },
63621
+ { value: "2", label: "2 weeks" },
63622
+ { value: "4", label: "4 weeks" }
63623
+ ],
63624
+ ui: { intent: "behavior" }
63625
+ },
63626
+ {
63627
+ id: "timezone",
63628
+ type: "text",
63629
+ label: "Timezone",
63630
+ description: "Leave blank to use the visitor timezone when the block loads",
63631
+ required: false,
63632
+ multiline: false,
63633
+ defaultValue: "",
63634
+ maxLength: 64,
63635
+ ui: { intent: "behavior" }
63636
+ },
63637
+ {
63638
+ id: "heading",
63639
+ type: "text",
63640
+ label: "Heading",
63641
+ required: false,
63642
+ multiline: false,
63643
+ defaultValue: "Weekly availability"
63644
+ },
63645
+ {
63646
+ id: "description",
63647
+ type: "richText",
63648
+ label: "Description",
63649
+ required: false
63650
+ },
63651
+ {
63652
+ id: "emptyMessage",
63653
+ type: "text",
63654
+ label: "Empty message",
63655
+ required: false,
63656
+ multiline: true,
63657
+ defaultValue: "No regular weekly openings are currently available.",
63658
+ maxLength: 180
63659
+ },
63660
+ {
63661
+ id: "ctaText",
63662
+ type: "text",
63663
+ label: "Enquiry button text",
63664
+ required: false,
63665
+ multiline: false,
63666
+ defaultValue: "Enquire about this slot",
63667
+ maxLength: 60
63668
+ },
63669
+ {
63670
+ id: "ctaUrl",
63671
+ type: "url",
63672
+ label: "Enquiry URL",
63673
+ required: false,
63674
+ ui: { intent: "behavior" }
63675
+ },
63676
+ sectionStylesField({
63677
+ id: "_sectionStyles",
63678
+ label: "Section styles"
63679
+ })
63680
+ ],
63681
+ styleTokens: { background: "surface", typography: "body", spacing: "md" },
63682
+ behaviours: {
63683
+ supportsThemeSwitching: true,
63684
+ inlineEditing: false,
63685
+ animation: false,
63686
+ paletteHidden: false
63687
+ },
63688
+ category: "interactive",
63689
+ tags: ["booking", "appointment", "calendar", "weekly", "availability"],
63690
+ icon: "CalendarDays",
63691
+ layout: [
63692
+ styledSection({
63693
+ children: sectionContainer([
63694
+ text({ as: "h2" }, bind("content.heading"), when("content.heading")),
63695
+ richText({}, bind("content.description"), when("content.description")),
63696
+ el(
63697
+ "weekly-slot-availability",
63698
+ withApiBindings({
63699
+ serviceId: { $bind: { from: "content.serviceId" } },
63700
+ resourceId: { $bind: { from: "content.resourceId", fallback: null } },
63701
+ horizonWeeks: { $bind: { from: "content.horizonWeeks", fallback: "4" } },
63702
+ timezone: { $bind: { from: "content.timezone", fallback: null } },
63703
+ availability: { $bind: { from: "data.availability", fallback: null } },
63704
+ emptyMessage: { $bind: { from: "content.emptyMessage", fallback: null } },
63705
+ ctaText: { $bind: { from: "content.ctaText", fallback: null } },
63706
+ ctaUrl: { $bind: { from: "content.ctaUrl", fallback: null } }
63707
+ })
63708
+ )
63709
+ ], {
63710
+ gap: "lg"
63711
+ }),
63712
+ baseClass: "",
63713
+ spacing: "spacious"
63714
+ })
63715
+ ]
63716
+ });
63717
+ var weeklySlotAvailabilityOptionSchema = z65.object({
63718
+ id: z65.string(),
63719
+ resourceId: z65.string(),
63720
+ weekday: z65.number(),
63721
+ weekdayLabel: z65.string(),
63722
+ startTime: z65.string(),
63723
+ endTime: z65.string(),
63724
+ nextDate: z65.string(),
63725
+ availableWeeks: z65.number()
63726
+ });
63727
+ var weeklySlotAvailabilityDataSchema = z65.object({
63728
+ slots: z65.array(weeklySlotAvailabilityOptionSchema),
63729
+ horizonWeeks: z65.number(),
63730
+ timezone: z65.string(),
63731
+ startDate: z65.string(),
63732
+ endDate: z65.string()
63733
+ });
63734
+ var weeklySlotAvailabilityBlockDefinition = {
63735
+ manifest: weeklySlotAvailabilityManifest,
63736
+ dataSchemas: { availability: weeklySlotAvailabilityDataSchema.optional() },
63737
+ dataLoaders: {
63738
+ availability: {
63739
+ endpoint: "getPublicWeeklySlotAvailability",
63740
+ params: {
63741
+ siteId: { $bind: { from: "$root.siteId" } },
63742
+ serviceId: { $bind: { from: "content.serviceId" } },
63743
+ resourceId: { $bind: { from: "content.resourceId", fallback: void 0 } },
63744
+ horizonWeeks: { $bind: { from: "content.horizonWeeks", fallback: "4" } },
63745
+ timezone: { $bind: { from: "content.timezone", fallback: void 0 } }
63746
+ },
63747
+ mode: "server"
63748
+ }
63749
+ }
63750
+ };
63751
+
63471
63752
  // ../blocks/src/system/blocks/event-registration.ts
63472
63753
  init_builder();
63473
63754
  init_builder();
@@ -64096,7 +64377,6 @@ init_shared2();
64096
64377
 
64097
64378
  // ../blocks/src/system/blocks/events/event-spotlight.ts
64098
64379
  init_builder();
64099
- init_builder();
64100
64380
  init_styledSection();
64101
64381
  init_fragments();
64102
64382
  init_boxStyles2();
@@ -64152,18 +64432,7 @@ var eventSpotlightFields = [
64152
64432
  var eventSpotlightLayout = [
64153
64433
  styledSection({
64154
64434
  children: sectionContainer([
64155
- // Optional heading
64156
- text(
64157
- { as: "h2" },
64158
- bind("content.heading"),
64159
- when("content.heading")
64160
- ),
64161
- // Optional description
64162
- richText(
64163
- { className: "rb-prose rb-max-w-none" },
64164
- bind("content.description"),
64165
- when("content.description")
64166
- ),
64435
+ ...eventSectionHeaderLayoutNodes(),
64167
64436
  // Event spotlight component
64168
64437
  el("event-spotlight", {
64169
64438
  events: { $bind: { from: "data.events" } },
@@ -64225,7 +64494,6 @@ var eventSpotlightBlockDefinition = {
64225
64494
 
64226
64495
  // ../blocks/src/system/blocks/events/event-listing.ts
64227
64496
  init_builder();
64228
- init_builder();
64229
64497
  init_styledSection();
64230
64498
  init_fragments();
64231
64499
  init_boxStyles2();
@@ -64390,18 +64658,7 @@ var eventListingAdditionalFields = [
64390
64658
  var eventListingLayout = [
64391
64659
  styledSection({
64392
64660
  children: sectionContainer([
64393
- // Optional heading
64394
- text(
64395
- { as: "h2" },
64396
- bind("content.heading"),
64397
- when("content.heading")
64398
- ),
64399
- // Optional description
64400
- richText(
64401
- { className: "rb-prose rb-max-w-none" },
64402
- bind("content.description"),
64403
- when("content.description")
64404
- ),
64661
+ ...eventSectionHeaderLayoutNodes(),
64405
64662
  // Event listing component with pagination
64406
64663
  el("event-listing", withApiBindings({
64407
64664
  events: { $bind: { from: "data.events" } },
@@ -64519,7 +64776,6 @@ var eventListingBlockDefinition = {
64519
64776
  // ../blocks/src/system/blocks/events/event-calendar.ts
64520
64777
  init_schema3();
64521
64778
  init_builder();
64522
- init_builder();
64523
64779
  init_styledSection();
64524
64780
  init_fragments();
64525
64781
  init_boxStyles2();
@@ -64564,14 +64820,7 @@ var eventCalendarLayout = [
64564
64820
  styledSection({
64565
64821
  children: sectionContainer(
64566
64822
  [
64567
- // Optional heading
64568
- text({ as: "h2" }, bind("content.heading"), when("content.heading")),
64569
- // Optional description
64570
- richText(
64571
- { className: "rb-prose rb-max-w-none" },
64572
- bind("content.description"),
64573
- when("content.description")
64574
- ),
64823
+ ...eventSectionHeaderLayoutNodes(),
64575
64824
  // Event calendar component (handles all display modes)
64576
64825
  el(
64577
64826
  "event-calendar",
@@ -65223,7 +65472,7 @@ init_boxStyles2();
65223
65472
  init_defineBlock();
65224
65473
  init_shared2();
65225
65474
  init_shared6();
65226
- import { z as z65 } from "zod";
65475
+ import { z as z66 } from "zod";
65227
65476
 
65228
65477
  // ../blocks/src/system/blocks/offerings-preview/model.ts
65229
65478
  init_src();
@@ -65546,13 +65795,13 @@ function normalizeTextOverride(value) {
65546
65795
  }
65547
65796
 
65548
65797
  // ../blocks/src/system/blocks/offerings-preview/index.ts
65549
- var publicRouteCandidatesSchema = z65.object({
65550
- routes: z65.array(z65.object({
65551
- entityId: z65.string(),
65552
- path: z65.string(),
65553
- title: z65.string(),
65554
- kind: z65.enum(["page", "content"]),
65555
- contentTypeKey: z65.string().nullable().optional()
65798
+ var publicRouteCandidatesSchema = z66.object({
65799
+ routes: z66.array(z66.object({
65800
+ entityId: z66.string(),
65801
+ path: z66.string(),
65802
+ title: z66.string(),
65803
+ kind: z66.enum(["page", "content"]),
65804
+ contentTypeKey: z66.string().nullable().optional()
65556
65805
  }))
65557
65806
  });
65558
65807
  var groupOverrideFields = [
@@ -65955,7 +66204,7 @@ init_builder();
65955
66204
  init_fragments();
65956
66205
  init_defineBlock();
65957
66206
  init_colorStyles();
65958
- import { z as z66 } from "zod";
66207
+ import { z as z67 } from "zod";
65959
66208
  var embedFields = [
65960
66209
  // Section heading
65961
66210
  parseFieldDefinition({
@@ -66186,18 +66435,18 @@ var embedManifest = createBlockManifest({
66186
66435
  spacing: "lg"
66187
66436
  }
66188
66437
  });
66189
- var embedEntrySchema = z66.object({
66190
- id: z66.string(),
66191
- identifier: z66.string(),
66192
- title: z66.string(),
66193
- slug: z66.string().nullable().optional(),
66194
- content: z66.record(z66.string(), z66.unknown()).optional(),
66195
- publishedAt: z66.string().nullable().optional()
66438
+ var embedEntrySchema = z67.object({
66439
+ id: z67.string(),
66440
+ identifier: z67.string(),
66441
+ title: z67.string(),
66442
+ slug: z67.string().nullable().optional(),
66443
+ content: z67.record(z67.string(), z67.unknown()).optional(),
66444
+ publishedAt: z67.string().nullable().optional()
66196
66445
  });
66197
66446
  var embedBlockDefinition = {
66198
66447
  manifest: embedManifest,
66199
66448
  dataSchemas: {
66200
- entries: z66.array(embedEntrySchema).optional()
66449
+ entries: z67.array(embedEntrySchema).optional()
66201
66450
  },
66202
66451
  dataLoaders: {
66203
66452
  entries: {
@@ -67637,7 +67886,7 @@ init_api_bindings();
67637
67886
  init_defineBlock();
67638
67887
  init_shop_interactive();
67639
67888
  init_shared4();
67640
- import { z as z67 } from "zod";
67889
+ import { z as z68 } from "zod";
67641
67890
  var productListManifest = createBlockManifest({
67642
67891
  id: "block.product-list",
67643
67892
  version: "1.0.0",
@@ -67770,7 +68019,7 @@ var productListBlockDefinition = {
67770
68019
  }
67771
68020
  }
67772
68021
  };
67773
- var productListDataSchema = z67.object({
68022
+ var productListDataSchema = z68.object({
67774
68023
  products: publicProductsResponseSchema.optional()
67775
68024
  });
67776
68025
 
@@ -68274,24 +68523,24 @@ init_schema3();
68274
68523
  init_defineBlock();
68275
68524
  init_builder();
68276
68525
  init_fragments();
68277
- import { z as z68 } from "zod";
68526
+ import { z as z69 } from "zod";
68278
68527
  init_media();
68279
68528
  var ITEM_NAME2 = "member";
68280
68529
  var teamMemberPhotoSchema = mediaSchema.refine((media2) => media2.type === "image", {
68281
68530
  message: "Team member photos must be image media"
68282
68531
  }).nullable();
68283
- var teamMemberDataSchema = z68.object({
68284
- _type: z68.literal("teamMember"),
68285
- id: z68.string(),
68286
- name: z68.string(),
68287
- role: z68.string().nullable(),
68288
- roleLabel: z68.string().nullable(),
68289
- bio: z68.string().nullable(),
68290
- summary: z68.string().nullable(),
68532
+ var teamMemberDataSchema = z69.object({
68533
+ _type: z69.literal("teamMember"),
68534
+ id: z69.string(),
68535
+ name: z69.string(),
68536
+ role: z69.string().nullable(),
68537
+ roleLabel: z69.string().nullable(),
68538
+ bio: z69.string().nullable(),
68539
+ summary: z69.string().nullable(),
68291
68540
  photo: teamMemberPhotoSchema,
68292
- profilePath: z68.string().nullable()
68541
+ profilePath: z69.string().nullable()
68293
68542
  });
68294
- var teamMembersDataSchema = z68.array(teamMemberDataSchema);
68543
+ var teamMembersDataSchema = z69.array(teamMemberDataSchema);
68295
68544
  var dynamicSourceWhen = { equals: "site_staff" };
68296
68545
  var manualSourceWhen = { equals: "site_staff", not: true };
68297
68546
  var headingNode = text(
@@ -69273,6 +69522,10 @@ var systemBlockDefinitionsRaw = [
69273
69522
  flow: conversionFlow,
69274
69523
  layoutProfiles: [layoutProfile({ variantKey: "default", family: "form", weight: "standard" })]
69275
69524
  })),
69525
+ withDesignCapability("block.weekly-slot-availability", weeklySlotAvailabilityBlockDefinition, sectionOnly(), defineBlockDesignMetadata({
69526
+ flow: offeringsFlow,
69527
+ layoutProfiles: [layoutProfile({ variantKey: "default", family: "stack", weight: "standard" })]
69528
+ })),
69276
69529
  withDesignCapability("block.event-registration", eventRegistrationBlockDefinition, sectionOnly(), defineBlockDesignMetadata({
69277
69530
  flow: conversionFlow,
69278
69531
  layoutProfiles: [layoutProfile({ variantKey: "default", family: "form", weight: "standard" })]
@@ -70349,6 +70602,7 @@ function isRecord14(value) {
70349
70602
  }
70350
70603
 
70351
70604
  // ../blocks/src/system/runtime/resolver.ts
70605
+ init_richTextSchema();
70352
70606
  init_headingDecoration();
70353
70607
 
70354
70608
  // ../blocks/src/primitives/layout/Section.tsx
@@ -72664,15 +72918,95 @@ function cardTreatmentClass(value) {
72664
72918
  }
72665
72919
  var offerings_preview_default = OfferingsPreviewNode;
72666
72920
 
72921
+ // ../blocks/src/system/runtime/nodes/weekly-slot-availability.view.tsx
72922
+ import { jsx as jsx139, jsxs as jsxs85 } from "react/jsx-runtime";
72923
+ function pluralizeWeeks(count) {
72924
+ return count === 1 ? "1 upcoming week" : `${count} upcoming weeks`;
72925
+ }
72926
+ function buildSlotCtaUrl(ctaUrl, slot) {
72927
+ const placeholderOrigin = "https://weekly-slot-availability.local";
72928
+ const isAbsoluteUrl = /^[a-z][a-z\d+.-]*:/i.test(ctaUrl);
72929
+ try {
72930
+ const parsed = new URL(ctaUrl, placeholderOrigin);
72931
+ parsed.searchParams.set("slotId", slot.id);
72932
+ parsed.searchParams.set("weekday", String(slot.weekday));
72933
+ parsed.searchParams.set("startTime", slot.startTime);
72934
+ parsed.searchParams.set("endTime", slot.endTime);
72935
+ parsed.searchParams.set("resourceId", slot.resourceId);
72936
+ parsed.searchParams.set("nextDate", slot.nextDate);
72937
+ if (isAbsoluteUrl) {
72938
+ return parsed.toString();
72939
+ }
72940
+ return `${parsed.pathname}${parsed.search}${parsed.hash}`;
72941
+ } catch {
72942
+ return ctaUrl;
72943
+ }
72944
+ }
72945
+ function buildSlotCtaLabel(ctaText, slot) {
72946
+ return `${ctaText}: ${slot.weekdayLabel} ${slot.startTime} to ${slot.endTime}`;
72947
+ }
72948
+ function WeeklySlotAvailabilityView({
72949
+ availability,
72950
+ loading = false,
72951
+ error,
72952
+ emptyMessage,
72953
+ ctaText,
72954
+ ctaUrl
72955
+ }) {
72956
+ const slots = availability?.slots ?? [];
72957
+ const resolvedEmptyMessage = emptyMessage ?? "No regular weekly openings are currently available.";
72958
+ const resolvedCtaText = ctaText ?? "Enquire about this slot";
72959
+ const resolvedCtaUrl = typeof ctaUrl === "string" ? ctaUrl.trim() : "";
72960
+ return /* @__PURE__ */ jsxs85("div", { className: "weekly-slot-availability", children: [
72961
+ loading ? /* @__PURE__ */ jsx139("p", { className: "weekly-slot-availability__status", children: "Loading availability..." }) : null,
72962
+ error ? /* @__PURE__ */ jsx139("p", { className: "weekly-slot-availability__status", role: "status", children: error }) : null,
72963
+ !loading && !error && slots.length === 0 ? /* @__PURE__ */ jsx139("p", { className: "weekly-slot-availability__empty", children: resolvedEmptyMessage }) : null,
72964
+ slots.length > 0 ? /* @__PURE__ */ jsx139("ul", { className: "weekly-slot-availability__list", children: slots.map((slot) => /* @__PURE__ */ jsxs85("li", { className: "weekly-slot-availability__item", children: [
72965
+ /* @__PURE__ */ jsxs85("div", { className: "weekly-slot-availability__time", children: [
72966
+ /* @__PURE__ */ jsx139("span", { className: "weekly-slot-availability__weekday", children: slot.weekdayLabel }),
72967
+ /* @__PURE__ */ jsxs85("span", { className: "weekly-slot-availability__range", children: [
72968
+ slot.startTime,
72969
+ " - ",
72970
+ slot.endTime
72971
+ ] })
72972
+ ] }),
72973
+ /* @__PURE__ */ jsxs85("p", { className: "weekly-slot-availability__meta", children: [
72974
+ "Available in ",
72975
+ pluralizeWeeks(slot.availableWeeks),
72976
+ ". Next open date",
72977
+ " ",
72978
+ slot.nextDate,
72979
+ "."
72980
+ ] }),
72981
+ resolvedCtaUrl ? /* @__PURE__ */ jsx139(
72982
+ "a",
72983
+ {
72984
+ className: "weekly-slot-availability__cta",
72985
+ href: buildSlotCtaUrl(resolvedCtaUrl, slot),
72986
+ "aria-label": buildSlotCtaLabel(resolvedCtaText, slot),
72987
+ children: resolvedCtaText
72988
+ }
72989
+ ) : null
72990
+ ] }, slot.id)) }) : null
72991
+ ] });
72992
+ }
72993
+
72994
+ // ../blocks/src/system/runtime/nodes/weekly-slot-availability.server.tsx
72995
+ import { jsx as jsx140 } from "react/jsx-runtime";
72996
+ function WeeklySlotAvailabilitySSR(props2) {
72997
+ return /* @__PURE__ */ jsx140(WeeklySlotAvailabilityView, { ...props2 });
72998
+ }
72999
+ var weekly_slot_availability_server_default = WeeklySlotAvailabilitySSR;
73000
+
72667
73001
  // ../blocks/src/system/runtime/nodes/shop-commerce.server.tsx
72668
73002
  init_buttons();
72669
73003
  init_RichText();
72670
73004
  init_richText_coerce();
72671
73005
  init_view2();
72672
- import { Fragment as Fragment29, jsx as jsx139, jsxs as jsxs85 } from "react/jsx-runtime";
73006
+ import { Fragment as Fragment29, jsx as jsx141, jsxs as jsxs86 } from "react/jsx-runtime";
72673
73007
  function renderServerPendingAction(label, soldOut) {
72674
- return /* @__PURE__ */ jsxs85(Fragment29, { children: [
72675
- /* @__PURE__ */ jsx139(
73008
+ return /* @__PURE__ */ jsxs86(Fragment29, { children: [
73009
+ /* @__PURE__ */ jsx141(
72676
73010
  "button",
72677
73011
  {
72678
73012
  type: "button",
@@ -72682,16 +73016,16 @@ function renderServerPendingAction(label, soldOut) {
72682
73016
  children: soldOut ? "Sold out" : label
72683
73017
  }
72684
73018
  ),
72685
- !soldOut ? /* @__PURE__ */ jsx139("p", { className: "rb-caption status-muted", children: "Cart actions become interactive after page load." }) : null
73019
+ !soldOut ? /* @__PURE__ */ jsx141("p", { className: "rb-caption status-muted", children: "Cart actions become interactive after page load." }) : null
72686
73020
  ] });
72687
73021
  }
72688
73022
  function ProductListServerContent(props2) {
72689
- return /* @__PURE__ */ jsx139(ProductListSectionView, { display: props2.render.display, children: props2.render.display.cards.map((card) => /* @__PURE__ */ jsx139(
73023
+ return /* @__PURE__ */ jsx141(ProductListSectionView, { display: props2.render.display, children: props2.render.display.cards.map((card) => /* @__PURE__ */ jsx141(
72690
73024
  ProductCardView,
72691
73025
  {
72692
73026
  display: card,
72693
73027
  layout: props2.render.display.layout,
72694
- variantControl: /* @__PURE__ */ jsx139(
73028
+ variantControl: /* @__PURE__ */ jsx141(
72695
73029
  VariantSelectView,
72696
73030
  {
72697
73031
  options: card.variantOptions,
@@ -72699,9 +73033,9 @@ function ProductListServerContent(props2) {
72699
73033
  disabled: true
72700
73034
  }
72701
73035
  ),
72702
- actions: /* @__PURE__ */ jsxs85(Fragment29, { children: [
73036
+ actions: /* @__PURE__ */ jsxs86(Fragment29, { children: [
72703
73037
  renderServerPendingAction(card.actionLabel, card.soldOut),
72704
- card.path ? /* @__PURE__ */ jsx139(
73038
+ card.path ? /* @__PURE__ */ jsx141(
72705
73039
  "a",
72706
73040
  {
72707
73041
  href: card.path,
@@ -72715,18 +73049,18 @@ function ProductListServerContent(props2) {
72715
73049
  )) });
72716
73050
  }
72717
73051
  function ProductDetailServerContent(props2) {
72718
- return /* @__PURE__ */ jsx139(
73052
+ return /* @__PURE__ */ jsx141(
72719
73053
  ProductDetailView,
72720
73054
  {
72721
73055
  display: props2.render.display,
72722
- gallery: props2.render.display.state === "ready" ? /* @__PURE__ */ jsx139(
73056
+ gallery: props2.render.display.state === "ready" ? /* @__PURE__ */ jsx141(
72723
73057
  ProductGalleryFrameView,
72724
73058
  {
72725
73059
  gallery: props2.render.display.gallery,
72726
- renderCarousel: (slides) => /* @__PURE__ */ jsx139(CarouselNodeSSR, { slidesToShow: 1, showDots: true, showControls: true, className: "rb-w-full", children: slides })
73060
+ renderCarousel: (slides) => /* @__PURE__ */ jsx141(CarouselNodeSSR, { slidesToShow: 1, showDots: true, showControls: true, className: "rb-w-full", children: slides })
72727
73061
  }
72728
73062
  ) : null,
72729
- variantControl: props2.render.display.state === "ready" ? /* @__PURE__ */ jsx139(
73063
+ variantControl: props2.render.display.state === "ready" ? /* @__PURE__ */ jsx141(
72730
73064
  VariantSelectView,
72731
73065
  {
72732
73066
  options: props2.render.display.variantOptions,
@@ -72738,20 +73072,20 @@ function ProductDetailServerContent(props2) {
72738
73072
  props2.render.display.actionLabel,
72739
73073
  props2.render.display.soldOut
72740
73074
  ) : null,
72741
- body: props2.render.display.state === "ready" && props2.render.display.body ? /* @__PURE__ */ jsx139("div", { className: "rb-prose rb-max-w-none", children: /* @__PURE__ */ jsx139(RichText, { doc: coerceRichTextDoc(props2.render.display.body) }) }) : null
73075
+ body: props2.render.display.state === "ready" && props2.render.display.body ? /* @__PURE__ */ jsx141("div", { className: "rb-prose rb-max-w-none", children: /* @__PURE__ */ jsx141(RichText, { doc: coerceRichTextDoc(props2.render.display.body) }) }) : null
72742
73076
  }
72743
73077
  );
72744
73078
  }
72745
73079
  function CartServerContent(props2) {
72746
- return /* @__PURE__ */ jsx139(CartShellView, { display: props2.render.display });
73080
+ return /* @__PURE__ */ jsx141(CartShellView, { display: props2.render.display });
72747
73081
  }
72748
73082
  function CheckoutServerContent(props2) {
72749
- return /* @__PURE__ */ jsx139(CheckoutShellView, { display: props2.render.display });
73083
+ return /* @__PURE__ */ jsx141(CheckoutShellView, { display: props2.render.display });
72750
73084
  }
72751
73085
 
72752
73086
  // ../blocks/src/system/runtime/nodes/cart.server.tsx
72753
73087
  init_shop_interactive();
72754
- import { jsx as jsx140, jsxs as jsxs86 } from "react/jsx-runtime";
73088
+ import { jsx as jsx142, jsxs as jsxs87 } from "react/jsx-runtime";
72755
73089
  function CartSSR({
72756
73090
  blockId,
72757
73091
  siteId,
@@ -72766,7 +73100,7 @@ function CartSSR({
72766
73100
  stage,
72767
73101
  ...rest
72768
73102
  });
72769
- return /* @__PURE__ */ jsxs86(
73103
+ return /* @__PURE__ */ jsxs87(
72770
73104
  "div",
72771
73105
  {
72772
73106
  className: `shop ${rest.className ?? ""}`.trim(),
@@ -72776,8 +73110,8 @@ function CartSSR({
72776
73110
  "data-site-id": siteId ?? void 0,
72777
73111
  ...getIslandRootProps("cart", blockId),
72778
73112
  children: [
72779
- /* @__PURE__ */ jsx140(IslandPropsScript, { value: islandProps }),
72780
- /* @__PURE__ */ jsx140(CartServerContent, { render: islandProps.render }),
73113
+ /* @__PURE__ */ jsx142(IslandPropsScript, { value: islandProps }),
73114
+ /* @__PURE__ */ jsx142(CartServerContent, { render: islandProps.render }),
72781
73115
  children
72782
73116
  ]
72783
73117
  }
@@ -72787,7 +73121,7 @@ var cart_server_default = CartSSR;
72787
73121
 
72788
73122
  // ../blocks/src/system/runtime/nodes/checkout.server.tsx
72789
73123
  init_shop_interactive();
72790
- import { jsx as jsx141, jsxs as jsxs87 } from "react/jsx-runtime";
73124
+ import { jsx as jsx143, jsxs as jsxs88 } from "react/jsx-runtime";
72791
73125
  function CheckoutSSR({
72792
73126
  blockId,
72793
73127
  siteId,
@@ -72802,7 +73136,7 @@ function CheckoutSSR({
72802
73136
  stage,
72803
73137
  ...rest
72804
73138
  });
72805
- return /* @__PURE__ */ jsxs87(
73139
+ return /* @__PURE__ */ jsxs88(
72806
73140
  "div",
72807
73141
  {
72808
73142
  className: `shop ${rest.className ?? ""}`.trim(),
@@ -72812,8 +73146,8 @@ function CheckoutSSR({
72812
73146
  "data-site-id": siteId ?? void 0,
72813
73147
  ...getIslandRootProps("checkout", blockId),
72814
73148
  children: [
72815
- /* @__PURE__ */ jsx141(IslandPropsScript, { value: islandProps }),
72816
- /* @__PURE__ */ jsx141(CheckoutServerContent, { render: islandProps.render }),
73149
+ /* @__PURE__ */ jsx143(IslandPropsScript, { value: islandProps }),
73150
+ /* @__PURE__ */ jsx143(CheckoutServerContent, { render: islandProps.render }),
72817
73151
  children
72818
73152
  ]
72819
73153
  }
@@ -72823,7 +73157,7 @@ var checkout_server_default = CheckoutSSR;
72823
73157
 
72824
73158
  // ../blocks/src/system/runtime/nodes/course-registration.server.tsx
72825
73159
  init_course_registration_interactive();
72826
- import { jsx as jsx142, jsxs as jsxs88 } from "react/jsx-runtime";
73160
+ import { jsx as jsx144, jsxs as jsxs89 } from "react/jsx-runtime";
72827
73161
  function CourseRegistrationSSR({
72828
73162
  blockId,
72829
73163
  siteId,
@@ -72864,15 +73198,15 @@ function CourseRegistrationSSR({
72864
73198
  buttonVariant,
72865
73199
  stage
72866
73200
  });
72867
- return /* @__PURE__ */ jsxs88(
73201
+ return /* @__PURE__ */ jsxs89(
72868
73202
  "div",
72869
73203
  {
72870
73204
  className: `course-registration ${className ?? ""}`.trim(),
72871
73205
  "data-block": "course-registration",
72872
73206
  ...getIslandRootProps("course-registration", blockId),
72873
73207
  children: [
72874
- /* @__PURE__ */ jsx142(IslandPropsScript, { value: islandProps }),
72875
- /* @__PURE__ */ jsx142("div", { className: "course-registration__summary", children: /* @__PURE__ */ jsx142("strong", { children: islandProps.render.display.summaryButtonText }) }),
73208
+ /* @__PURE__ */ jsx144(IslandPropsScript, { value: islandProps }),
73209
+ /* @__PURE__ */ jsx144("div", { className: "course-registration__summary", children: /* @__PURE__ */ jsx144("strong", { children: islandProps.render.display.summaryButtonText }) }),
72876
73210
  children
72877
73211
  ]
72878
73212
  }
@@ -72882,14 +73216,14 @@ var course_registration_server_default = CourseRegistrationSSR;
72882
73216
 
72883
73217
  // ../blocks/src/system/runtime/nodes/gifting.server.tsx
72884
73218
  init_gifting_interactive();
72885
- import { jsx as jsx143, jsxs as jsxs89 } from "react/jsx-runtime";
73219
+ import { jsx as jsx145, jsxs as jsxs90 } from "react/jsx-runtime";
72886
73220
  function GiftingSSR({ blockId, ...rest }) {
72887
73221
  const islandProps = buildGiftingInteractiveIslandProps(rest);
72888
73222
  const offers = islandProps.render.hydration.offers;
72889
73223
  const hasOffers = Boolean(
72890
73224
  (offers?.giftCards.length ?? 0) > 0 || (offers?.vouchers.length ?? 0) > 0
72891
73225
  );
72892
- return /* @__PURE__ */ jsxs89(
73226
+ return /* @__PURE__ */ jsxs90(
72893
73227
  "section",
72894
73228
  {
72895
73229
  className: rest.className ?? void 0,
@@ -72899,8 +73233,8 @@ function GiftingSSR({ blockId, ...rest }) {
72899
73233
  },
72900
73234
  ...getIslandRootProps("gifting", blockId),
72901
73235
  children: [
72902
- /* @__PURE__ */ jsx143(IslandPropsScript, { value: islandProps }),
72903
- /* @__PURE__ */ jsxs89(
73236
+ /* @__PURE__ */ jsx145(IslandPropsScript, { value: islandProps }),
73237
+ /* @__PURE__ */ jsxs90(
72904
73238
  "div",
72905
73239
  {
72906
73240
  className: "rb-grid",
@@ -72908,14 +73242,14 @@ function GiftingSSR({ blockId, ...rest }) {
72908
73242
  gap: "1.5rem"
72909
73243
  },
72910
73244
  children: [
72911
- /* @__PURE__ */ jsxs89("div", { className: "rb-grid", style: { gap: "0.5rem" }, children: [
72912
- /* @__PURE__ */ jsx143("h2", { style: { fontSize: "clamp(1.75rem, 3vw, 2.5rem)", fontWeight: 700, margin: 0 }, children: islandProps.render.display.heading }),
72913
- islandProps.render.display.intro ? /* @__PURE__ */ jsx143("p", { style: { margin: 0, color: "rgb(var(--tb-text, 17 24 39) / 0.72)" }, children: islandProps.render.display.intro }) : null
73245
+ /* @__PURE__ */ jsxs90("div", { className: "rb-grid", style: { gap: "0.5rem" }, children: [
73246
+ /* @__PURE__ */ jsx145("h2", { style: { fontSize: "clamp(1.75rem, 3vw, 2.5rem)", fontWeight: 700, margin: 0 }, children: islandProps.render.display.heading }),
73247
+ islandProps.render.display.intro ? /* @__PURE__ */ jsx145("p", { style: { margin: 0, color: "rgb(var(--tb-text, 17 24 39) / 0.72)" }, children: islandProps.render.display.intro }) : null
72914
73248
  ] }),
72915
- hasOffers ? /* @__PURE__ */ jsxs89("div", { className: "rb-grid", style: { gap: "1.5rem" }, children: [
72916
- (offers?.giftCards.length ?? 0) > 0 ? /* @__PURE__ */ jsxs89("div", { className: "rb-grid", style: { gap: "1rem" }, children: [
72917
- /* @__PURE__ */ jsx143("h3", { style: { margin: 0, fontSize: "1.25rem", fontWeight: 700 }, children: islandProps.render.display.giftCardsHeading }),
72918
- /* @__PURE__ */ jsx143("div", { className: "rb-grid", style: { gap: "1rem" }, children: offers?.giftCards.map((offer) => /* @__PURE__ */ jsxs89(
73249
+ hasOffers ? /* @__PURE__ */ jsxs90("div", { className: "rb-grid", style: { gap: "1.5rem" }, children: [
73250
+ (offers?.giftCards.length ?? 0) > 0 ? /* @__PURE__ */ jsxs90("div", { className: "rb-grid", style: { gap: "1rem" }, children: [
73251
+ /* @__PURE__ */ jsx145("h3", { style: { margin: 0, fontSize: "1.25rem", fontWeight: 700 }, children: islandProps.render.display.giftCardsHeading }),
73252
+ /* @__PURE__ */ jsx145("div", { className: "rb-grid", style: { gap: "1rem" }, children: offers?.giftCards.map((offer) => /* @__PURE__ */ jsxs90(
72919
73253
  "article",
72920
73254
  {
72921
73255
  style: {
@@ -72925,16 +73259,16 @@ function GiftingSSR({ blockId, ...rest }) {
72925
73259
  background: "rgb(var(--tb-surface, 255 255 255) / 0.92)"
72926
73260
  },
72927
73261
  children: [
72928
- /* @__PURE__ */ jsx143("h4", { style: { margin: 0, fontSize: "1.05rem", fontWeight: 700 }, children: offer.title }),
72929
- offer.description ? /* @__PURE__ */ jsx143("p", { style: { margin: "0.5rem 0 0", color: "rgb(var(--tb-text, 17 24 39) / 0.72)" }, children: offer.description }) : null
73262
+ /* @__PURE__ */ jsx145("h4", { style: { margin: 0, fontSize: "1.05rem", fontWeight: 700 }, children: offer.title }),
73263
+ offer.description ? /* @__PURE__ */ jsx145("p", { style: { margin: "0.5rem 0 0", color: "rgb(var(--tb-text, 17 24 39) / 0.72)" }, children: offer.description }) : null
72930
73264
  ]
72931
73265
  },
72932
73266
  offer.id
72933
73267
  )) })
72934
73268
  ] }) : null,
72935
- (offers?.vouchers.length ?? 0) > 0 ? /* @__PURE__ */ jsxs89("div", { className: "rb-grid", style: { gap: "1rem" }, children: [
72936
- /* @__PURE__ */ jsx143("h3", { style: { margin: 0, fontSize: "1.25rem", fontWeight: 700 }, children: islandProps.render.display.vouchersHeading }),
72937
- /* @__PURE__ */ jsx143("div", { className: "rb-grid", style: { gap: "1rem" }, children: offers?.vouchers.map((offer) => /* @__PURE__ */ jsxs89(
73269
+ (offers?.vouchers.length ?? 0) > 0 ? /* @__PURE__ */ jsxs90("div", { className: "rb-grid", style: { gap: "1rem" }, children: [
73270
+ /* @__PURE__ */ jsx145("h3", { style: { margin: 0, fontSize: "1.25rem", fontWeight: 700 }, children: islandProps.render.display.vouchersHeading }),
73271
+ /* @__PURE__ */ jsx145("div", { className: "rb-grid", style: { gap: "1rem" }, children: offers?.vouchers.map((offer) => /* @__PURE__ */ jsxs90(
72938
73272
  "article",
72939
73273
  {
72940
73274
  style: {
@@ -72944,14 +73278,14 @@ function GiftingSSR({ blockId, ...rest }) {
72944
73278
  background: "rgb(var(--tb-surface, 255 255 255) / 0.92)"
72945
73279
  },
72946
73280
  children: [
72947
- /* @__PURE__ */ jsx143("h4", { style: { margin: 0, fontSize: "1.05rem", fontWeight: 700 }, children: offer.title }),
72948
- offer.description ? /* @__PURE__ */ jsx143("p", { style: { margin: "0.5rem 0 0", color: "rgb(var(--tb-text, 17 24 39) / 0.72)" }, children: offer.description }) : null
73281
+ /* @__PURE__ */ jsx145("h4", { style: { margin: 0, fontSize: "1.05rem", fontWeight: 700 }, children: offer.title }),
73282
+ offer.description ? /* @__PURE__ */ jsx145("p", { style: { margin: "0.5rem 0 0", color: "rgb(var(--tb-text, 17 24 39) / 0.72)" }, children: offer.description }) : null
72949
73283
  ]
72950
73284
  },
72951
73285
  offer.id
72952
73286
  )) })
72953
73287
  ] }) : null
72954
- ] }) : /* @__PURE__ */ jsx143("p", { style: { margin: 0 }, children: islandProps.render.display.emptyStateText })
73288
+ ] }) : /* @__PURE__ */ jsx145("p", { style: { margin: 0 }, children: islandProps.render.display.emptyStateText })
72955
73289
  ]
72956
73290
  }
72957
73291
  )
@@ -72969,7 +73303,7 @@ init_WeekAgendaView();
72969
73303
  init_utils3();
72970
73304
  init_timetableModel();
72971
73305
  init_buttons();
72972
- import { jsx as jsx144, jsxs as jsxs90 } from "react/jsx-runtime";
73306
+ import { jsx as jsx146, jsxs as jsxs91 } from "react/jsx-runtime";
72973
73307
  function assertNeverDisplayMode(value) {
72974
73308
  throw new Error(`Unsupported event-calendar displayMode: ${String(value)}`);
72975
73309
  }
@@ -72981,9 +73315,9 @@ function renderEventCard(event, display) {
72981
73315
  }
72982
73316
  function renderCombinedSsr(display, prefetchedEvents) {
72983
73317
  const listDisplay = buildEventCalendarListingDisplay(display, prefetchedEvents, "event-combined-content");
72984
- return /* @__PURE__ */ jsxs90("div", { className: clsx_default("event-combined", display.className ?? void 0), "data-block": "event-combined", children: [
72985
- /* @__PURE__ */ jsxs90("div", { className: "nav-tabs", role: "tablist", children: [
72986
- /* @__PURE__ */ jsx144(
73318
+ return /* @__PURE__ */ jsxs91("div", { className: clsx_default("event-combined", display.className ?? void 0), "data-block": "event-combined", children: [
73319
+ /* @__PURE__ */ jsxs91("div", { className: "nav-tabs", role: "tablist", children: [
73320
+ /* @__PURE__ */ jsx146(
72987
73321
  "button",
72988
73322
  {
72989
73323
  type: "button",
@@ -72993,7 +73327,7 @@ function renderCombinedSsr(display, prefetchedEvents) {
72993
73327
  children: "List"
72994
73328
  }
72995
73329
  ),
72996
- /* @__PURE__ */ jsx144(
73330
+ /* @__PURE__ */ jsx146(
72997
73331
  "button",
72998
73332
  {
72999
73333
  type: "button",
@@ -73004,7 +73338,7 @@ function renderCombinedSsr(display, prefetchedEvents) {
73004
73338
  }
73005
73339
  )
73006
73340
  ] }),
73007
- /* @__PURE__ */ jsx144(
73341
+ /* @__PURE__ */ jsx146(
73008
73342
  EventListingFrameView,
73009
73343
  {
73010
73344
  display: listDisplay,
@@ -73015,7 +73349,7 @@ function renderCombinedSsr(display, prefetchedEvents) {
73015
73349
  }
73016
73350
  function renderListSsr(display, prefetchedEvents) {
73017
73351
  const listDisplay = buildEventCalendarListingDisplay(display, prefetchedEvents);
73018
- return /* @__PURE__ */ jsx144(
73352
+ return /* @__PURE__ */ jsx146(
73019
73353
  EventListingFrameView,
73020
73354
  {
73021
73355
  display: listDisplay,
@@ -73033,30 +73367,30 @@ function renderCalendarSsr(display) {
73033
73367
  });
73034
73368
  const eventsByDate = groupEventsByDate([...display.events]);
73035
73369
  const dayNames = getOrderedDayNames(display.startOfWeek);
73036
- return /* @__PURE__ */ jsxs90("div", { className: clsx_default("event-calendar", display.className ?? void 0), "data-block": "event-calendar", children: [
73037
- /* @__PURE__ */ jsxs90("div", { className: "event-calendar-header", children: [
73038
- /* @__PURE__ */ jsxs90("div", { className: "event-calendar-nav", children: [
73039
- /* @__PURE__ */ jsx144(
73370
+ return /* @__PURE__ */ jsxs91("div", { className: clsx_default("event-calendar", display.className ?? void 0), "data-block": "event-calendar", children: [
73371
+ /* @__PURE__ */ jsxs91("div", { className: "event-calendar-header", children: [
73372
+ /* @__PURE__ */ jsxs91("div", { className: "event-calendar-nav", children: [
73373
+ /* @__PURE__ */ jsx146(
73040
73374
  "button",
73041
73375
  {
73042
73376
  type: "button",
73043
73377
  className: "event-calendar-nav-btn",
73044
73378
  "aria-label": calendarView === "week" ? "Previous week" : "Previous month",
73045
- children: /* @__PURE__ */ jsx144("svg", { width: "20", height: "20", fill: "none", stroke: "currentColor", strokeWidth: 2, viewBox: "0 0 24 24", children: /* @__PURE__ */ jsx144("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: 2, d: "M15 19l-7-7 7-7" }) })
73379
+ children: /* @__PURE__ */ jsx146("svg", { width: "20", height: "20", fill: "none", stroke: "currentColor", strokeWidth: 2, viewBox: "0 0 24 24", children: /* @__PURE__ */ jsx146("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: 2, d: "M15 19l-7-7 7-7" }) })
73046
73380
  }
73047
73381
  ),
73048
- /* @__PURE__ */ jsx144("h3", { className: "event-calendar-title", children: viewport.title }),
73049
- /* @__PURE__ */ jsx144(
73382
+ /* @__PURE__ */ jsx146("h3", { className: "event-calendar-title", children: viewport.title }),
73383
+ /* @__PURE__ */ jsx146(
73050
73384
  "button",
73051
73385
  {
73052
73386
  type: "button",
73053
73387
  className: "event-calendar-nav-btn",
73054
73388
  "aria-label": calendarView === "week" ? "Next week" : "Next month",
73055
- children: /* @__PURE__ */ jsx144("svg", { width: "20", height: "20", fill: "none", stroke: "currentColor", strokeWidth: 2, viewBox: "0 0 24 24", children: /* @__PURE__ */ jsx144("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: 2, d: "M9 5l7 7-7 7" }) })
73389
+ children: /* @__PURE__ */ jsx146("svg", { width: "20", height: "20", fill: "none", stroke: "currentColor", strokeWidth: 2, viewBox: "0 0 24 24", children: /* @__PURE__ */ jsx146("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: 2, d: "M9 5l7 7-7 7" }) })
73056
73390
  }
73057
73391
  )
73058
73392
  ] }),
73059
- /* @__PURE__ */ jsx144(
73393
+ /* @__PURE__ */ jsx146(
73060
73394
  "button",
73061
73395
  {
73062
73396
  type: "button",
@@ -73068,7 +73402,7 @@ function renderCalendarSsr(display) {
73068
73402
  }
73069
73403
  )
73070
73404
  ] }),
73071
- viewport.kind === "week" ? /* @__PURE__ */ jsx144(
73405
+ viewport.kind === "week" ? /* @__PURE__ */ jsx146(
73072
73406
  WeekAgendaView,
73073
73407
  {
73074
73408
  days: viewport.days,
@@ -73076,9 +73410,9 @@ function renderCalendarSsr(display) {
73076
73410
  emptyMessage: display.emptyMessage,
73077
73411
  showCapacity: display.showCapacity
73078
73412
  }
73079
- ) : /* @__PURE__ */ jsxs90("div", { className: "event-calendar-container", children: [
73080
- /* @__PURE__ */ jsx144("div", { className: "event-calendar-day-headers", children: dayNames.map((day) => /* @__PURE__ */ jsx144("div", { className: "event-calendar-day-header", children: day }, day)) }),
73081
- /* @__PURE__ */ jsx144("div", { className: "event-calendar-grid", children: viewport.days.map((date) => {
73413
+ ) : /* @__PURE__ */ jsxs91("div", { className: "event-calendar-container", children: [
73414
+ /* @__PURE__ */ jsx146("div", { className: "event-calendar-day-headers", children: dayNames.map((day) => /* @__PURE__ */ jsx146("div", { className: "event-calendar-day-header", children: day }, day)) }),
73415
+ /* @__PURE__ */ jsx146("div", { className: "event-calendar-grid", children: viewport.days.map((date) => {
73082
73416
  const dateKey = formatDateKey2(date);
73083
73417
  const dayEvents = eventsByDate.get(dateKey) || [];
73084
73418
  const isCurrentMonth = date.getMonth() === viewDate.getMonth();
@@ -73088,24 +73422,24 @@ function renderCalendarSsr(display) {
73088
73422
  !isCurrentMonth && "event-calendar-day--other-month",
73089
73423
  today && "event-calendar-day--today"
73090
73424
  );
73091
- return /* @__PURE__ */ jsxs90("div", { className: dayClasses, children: [
73092
- /* @__PURE__ */ jsx144("div", { className: "event-calendar-day-number", children: date.getDate() }),
73093
- /* @__PURE__ */ jsxs90("div", { className: "event-calendar-events", children: [
73094
- dayEvents.slice(0, MAX_EVENTS_PER_DAY).map((event) => /* @__PURE__ */ jsxs90(
73425
+ return /* @__PURE__ */ jsxs91("div", { className: dayClasses, children: [
73426
+ /* @__PURE__ */ jsx146("div", { className: "event-calendar-day-number", children: date.getDate() }),
73427
+ /* @__PURE__ */ jsxs91("div", { className: "event-calendar-events", children: [
73428
+ dayEvents.slice(0, MAX_EVENTS_PER_DAY).map((event) => /* @__PURE__ */ jsxs91(
73095
73429
  "a",
73096
73430
  {
73097
73431
  ...resolveEventLinkProps(event),
73098
73432
  className: "event-calendar-event",
73099
73433
  title: `${event.title} at ${formatTime(event.startsAt, { timeZone: getEventTimeZone(event) })}`,
73100
73434
  children: [
73101
- /* @__PURE__ */ jsx144("span", { className: "event-calendar-event-time", children: formatTime(event.startsAt, { timeZone: getEventTimeZone(event) }) }),
73435
+ /* @__PURE__ */ jsx146("span", { className: "event-calendar-event-time", children: formatTime(event.startsAt, { timeZone: getEventTimeZone(event) }) }),
73102
73436
  " ",
73103
- /* @__PURE__ */ jsx144("span", { className: "event-calendar-event-title", children: event.title })
73437
+ /* @__PURE__ */ jsx146("span", { className: "event-calendar-event-title", children: event.title })
73104
73438
  ]
73105
73439
  },
73106
73440
  event.occurrenceId || event.id
73107
73441
  )),
73108
- dayEvents.length > MAX_EVENTS_PER_DAY ? /* @__PURE__ */ jsxs90("div", { className: "event-calendar-more", children: [
73442
+ dayEvents.length > MAX_EVENTS_PER_DAY ? /* @__PURE__ */ jsxs91("div", { className: "event-calendar-more", children: [
73109
73443
  "+",
73110
73444
  dayEvents.length - MAX_EVENTS_PER_DAY,
73111
73445
  " more"
@@ -73114,7 +73448,7 @@ function renderCalendarSsr(display) {
73114
73448
  ] }, dateKey);
73115
73449
  }) })
73116
73450
  ] }),
73117
- viewport.kind === "month" && display.events.length === 0 ? /* @__PURE__ */ jsx144("p", { className: "event-calendar-empty", children: display.emptyMessage }) : null
73451
+ viewport.kind === "month" && display.events.length === 0 ? /* @__PURE__ */ jsx146("p", { className: "event-calendar-empty", children: display.emptyMessage }) : null
73118
73452
  ] });
73119
73453
  }
73120
73454
  function renderTimetableSsr(display) {
@@ -73130,30 +73464,30 @@ function renderTimetableSsr(display) {
73130
73464
  startOfWeek: display.startOfWeek
73131
73465
  });
73132
73466
  const selectedDayKey = model.days.find((day) => day.isToday)?.dateKey ?? model.days[0]?.dateKey ?? "";
73133
- return /* @__PURE__ */ jsxs90("div", { className: clsx_default("event-calendar", "event-calendar--timetable", display.className ?? void 0), "data-block": "event-calendar", children: [
73134
- /* @__PURE__ */ jsxs90("div", { className: "event-calendar-header", children: [
73135
- /* @__PURE__ */ jsxs90("div", { className: "event-calendar-nav", children: [
73136
- /* @__PURE__ */ jsx144(
73467
+ return /* @__PURE__ */ jsxs91("div", { className: clsx_default("event-calendar", "event-calendar--timetable", display.className ?? void 0), "data-block": "event-calendar", children: [
73468
+ /* @__PURE__ */ jsxs91("div", { className: "event-calendar-header", children: [
73469
+ /* @__PURE__ */ jsxs91("div", { className: "event-calendar-nav", children: [
73470
+ /* @__PURE__ */ jsx146(
73137
73471
  "button",
73138
73472
  {
73139
73473
  type: "button",
73140
73474
  className: "event-calendar-nav-btn",
73141
73475
  "aria-label": "Previous week",
73142
- children: /* @__PURE__ */ jsx144("svg", { width: "20", height: "20", fill: "none", stroke: "currentColor", strokeWidth: 2, viewBox: "0 0 24 24", children: /* @__PURE__ */ jsx144("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: 2, d: "M15 19l-7-7 7-7" }) })
73476
+ children: /* @__PURE__ */ jsx146("svg", { width: "20", height: "20", fill: "none", stroke: "currentColor", strokeWidth: 2, viewBox: "0 0 24 24", children: /* @__PURE__ */ jsx146("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: 2, d: "M15 19l-7-7 7-7" }) })
73143
73477
  }
73144
73478
  ),
73145
- /* @__PURE__ */ jsx144("h3", { className: "event-calendar-title", children: viewport.title }),
73146
- /* @__PURE__ */ jsx144(
73479
+ /* @__PURE__ */ jsx146("h3", { className: "event-calendar-title", children: viewport.title }),
73480
+ /* @__PURE__ */ jsx146(
73147
73481
  "button",
73148
73482
  {
73149
73483
  type: "button",
73150
73484
  className: "event-calendar-nav-btn",
73151
73485
  "aria-label": "Next week",
73152
- children: /* @__PURE__ */ jsx144("svg", { width: "20", height: "20", fill: "none", stroke: "currentColor", strokeWidth: 2, viewBox: "0 0 24 24", children: /* @__PURE__ */ jsx144("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: 2, d: "M9 5l7 7-7 7" }) })
73486
+ children: /* @__PURE__ */ jsx146("svg", { width: "20", height: "20", fill: "none", stroke: "currentColor", strokeWidth: 2, viewBox: "0 0 24 24", children: /* @__PURE__ */ jsx146("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: 2, d: "M9 5l7 7-7 7" }) })
73153
73487
  }
73154
73488
  )
73155
73489
  ] }),
73156
- /* @__PURE__ */ jsx144(
73490
+ /* @__PURE__ */ jsx146(
73157
73491
  "button",
73158
73492
  {
73159
73493
  type: "button",
@@ -73165,8 +73499,8 @@ function renderTimetableSsr(display) {
73165
73499
  }
73166
73500
  )
73167
73501
  ] }),
73168
- /* @__PURE__ */ jsxs90("div", { className: "event-timetable", children: [
73169
- /* @__PURE__ */ jsx144("div", { className: "event-timetable-day-selector", "aria-label": "Choose timetable day", children: model.days.map((day) => /* @__PURE__ */ jsx144(
73502
+ /* @__PURE__ */ jsxs91("div", { className: "event-timetable", children: [
73503
+ /* @__PURE__ */ jsx146("div", { className: "event-timetable-day-selector", "aria-label": "Choose timetable day", children: model.days.map((day) => /* @__PURE__ */ jsx146(
73170
73504
  "button",
73171
73505
  {
73172
73506
  type: "button",
@@ -73178,10 +73512,10 @@ function renderTimetableSsr(display) {
73178
73512
  },
73179
73513
  day.dateKey
73180
73514
  )) }),
73181
- /* @__PURE__ */ jsx144("div", { className: "event-timetable-container", children: /* @__PURE__ */ jsxs90("div", { className: "event-timetable-grid", "aria-label": "Weekly timetable", children: [
73182
- /* @__PURE__ */ jsxs90("div", { className: "event-timetable-time-rail", "aria-hidden": "true", children: [
73183
- /* @__PURE__ */ jsx144("div", { className: "event-timetable-day-heading" }),
73184
- /* @__PURE__ */ jsx144("div", { className: "event-timetable-time-body", children: model.hourTicks.map((hour) => /* @__PURE__ */ jsx144(
73515
+ /* @__PURE__ */ jsx146("div", { className: "event-timetable-container", children: /* @__PURE__ */ jsxs91("div", { className: "event-timetable-grid", "aria-label": "Weekly timetable", children: [
73516
+ /* @__PURE__ */ jsxs91("div", { className: "event-timetable-time-rail", "aria-hidden": "true", children: [
73517
+ /* @__PURE__ */ jsx146("div", { className: "event-timetable-day-heading" }),
73518
+ /* @__PURE__ */ jsx146("div", { className: "event-timetable-time-body", children: model.hourTicks.map((hour) => /* @__PURE__ */ jsx146(
73185
73519
  "div",
73186
73520
  {
73187
73521
  className: "event-timetable-time-label",
@@ -73191,7 +73525,7 @@ function renderTimetableSsr(display) {
73191
73525
  hour
73192
73526
  )) })
73193
73527
  ] }),
73194
- model.days.map((day) => /* @__PURE__ */ jsxs90(
73528
+ model.days.map((day) => /* @__PURE__ */ jsxs91(
73195
73529
  "section",
73196
73530
  {
73197
73531
  className: clsx_default(
@@ -73200,17 +73534,17 @@ function renderTimetableSsr(display) {
73200
73534
  ),
73201
73535
  "data-selected": day.dateKey === selectedDayKey ? "true" : "false",
73202
73536
  children: [
73203
- /* @__PURE__ */ jsxs90("h4", { className: "event-timetable-day-heading", children: [
73537
+ /* @__PURE__ */ jsxs91("h4", { className: "event-timetable-day-heading", children: [
73204
73538
  day.label,
73205
- day.isToday ? /* @__PURE__ */ jsx144("span", { className: "event-timetable-today-badge", children: "Today" }) : null
73539
+ day.isToday ? /* @__PURE__ */ jsx146("span", { className: "event-timetable-today-badge", children: "Today" }) : null
73206
73540
  ] }),
73207
- /* @__PURE__ */ jsxs90(
73541
+ /* @__PURE__ */ jsxs91(
73208
73542
  "div",
73209
73543
  {
73210
73544
  className: "event-timetable-day-body",
73211
73545
  style: { "--event-timetable-range-minutes": String(model.rangeMinutes) },
73212
73546
  children: [
73213
- model.hourTicks.map((hour) => /* @__PURE__ */ jsx144(
73547
+ model.hourTicks.map((hour) => /* @__PURE__ */ jsx146(
73214
73548
  "div",
73215
73549
  {
73216
73550
  className: "event-timetable-hour-line",
@@ -73219,7 +73553,7 @@ function renderTimetableSsr(display) {
73219
73553
  },
73220
73554
  hour
73221
73555
  )),
73222
- day.events.length === 0 ? /* @__PURE__ */ jsx144("p", { className: "event-timetable-day-empty", children: "No classes" }) : day.events.map((cell) => /* @__PURE__ */ jsxs90(
73556
+ day.events.length === 0 ? /* @__PURE__ */ jsx146("p", { className: "event-timetable-day-empty", children: "No classes" }) : day.events.map((cell) => /* @__PURE__ */ jsxs91(
73223
73557
  "a",
73224
73558
  {
73225
73559
  ...resolveEventLinkProps(cell.event),
@@ -73233,11 +73567,11 @@ function renderTimetableSsr(display) {
73233
73567
  borderColor: cell.categoryColor
73234
73568
  },
73235
73569
  children: [
73236
- /* @__PURE__ */ jsx144("span", { className: "event-timetable-event-time", children: cell.timeLabel }),
73237
- /* @__PURE__ */ jsx144("span", { className: "event-timetable-event-title", children: cell.event.title }),
73238
- cell.teacherLine ? /* @__PURE__ */ jsx144("span", { className: "event-timetable-event-teacher", children: cell.teacherLine }) : null,
73239
- cell.event.venue ? /* @__PURE__ */ jsx144("span", { className: "event-timetable-event-meta", children: cell.event.venue.name }) : null,
73240
- display.showCapacity && cell.capacityLabel ? /* @__PURE__ */ jsx144(
73570
+ /* @__PURE__ */ jsx146("span", { className: "event-timetable-event-time", children: cell.timeLabel }),
73571
+ /* @__PURE__ */ jsx146("span", { className: "event-timetable-event-title", children: cell.event.title }),
73572
+ cell.teacherLine ? /* @__PURE__ */ jsx146("span", { className: "event-timetable-event-teacher", children: cell.teacherLine }) : null,
73573
+ cell.event.venue ? /* @__PURE__ */ jsx146("span", { className: "event-timetable-event-meta", children: cell.event.venue.name }) : null,
73574
+ display.showCapacity && cell.capacityLabel ? /* @__PURE__ */ jsx146(
73241
73575
  "span",
73242
73576
  {
73243
73577
  className: clsx_default(
@@ -73259,7 +73593,7 @@ function renderTimetableSsr(display) {
73259
73593
  day.dateKey
73260
73594
  ))
73261
73595
  ] }) }),
73262
- !model.hasEvents ? /* @__PURE__ */ jsx144("p", { className: "event-timetable-empty", children: display.emptyMessage }) : null
73596
+ !model.hasEvents ? /* @__PURE__ */ jsx146("p", { className: "event-timetable-empty", children: display.emptyMessage }) : null
73263
73597
  ] })
73264
73598
  ] });
73265
73599
  }
@@ -73295,8 +73629,8 @@ var EventCalendarSSR = (props2) => {
73295
73629
  default:
73296
73630
  content = assertNeverDisplayMode(display.displayMode);
73297
73631
  }
73298
- return /* @__PURE__ */ jsxs90("div", { ...getIslandRootProps("event-calendar", props2.blockId), children: [
73299
- /* @__PURE__ */ jsx144(IslandPropsScript, { value: islandProps }),
73632
+ return /* @__PURE__ */ jsxs91("div", { ...getIslandRootProps("event-calendar", props2.blockId), children: [
73633
+ /* @__PURE__ */ jsx146(IslandPropsScript, { value: islandProps }),
73300
73634
  content
73301
73635
  ] });
73302
73636
  };
@@ -73304,13 +73638,13 @@ var EventCalendarSSR = (props2) => {
73304
73638
  // ../blocks/src/system/runtime/nodes/events/EventListing.server.tsx
73305
73639
  init_EventListing_interactive();
73306
73640
  init_EventListing_view();
73307
- import { jsx as jsx145, jsxs as jsxs91 } from "react/jsx-runtime";
73641
+ import { jsx as jsx147, jsxs as jsxs92 } from "react/jsx-runtime";
73308
73642
  var EventListingSSR = (props2) => {
73309
73643
  const islandProps = buildEventListingInteractiveIslandProps(props2);
73310
73644
  const display = islandProps.render.display;
73311
- return /* @__PURE__ */ jsxs91("div", { ...getIslandRootProps("event-listing", props2.blockId), children: [
73312
- /* @__PURE__ */ jsx145(IslandPropsScript, { value: islandProps }),
73313
- /* @__PURE__ */ jsx145(
73645
+ return /* @__PURE__ */ jsxs92("div", { ...getIslandRootProps("event-listing", props2.blockId), children: [
73646
+ /* @__PURE__ */ jsx147(IslandPropsScript, { value: islandProps }),
73647
+ /* @__PURE__ */ jsx147(
73314
73648
  EventListingFrameView,
73315
73649
  {
73316
73650
  display,
@@ -73323,7 +73657,7 @@ var EventListingSSR = (props2) => {
73323
73657
  // ../blocks/src/system/runtime/nodes/event-registration.server.tsx
73324
73658
  init_event_registration_interactive();
73325
73659
  init_constants3();
73326
- import { jsx as jsx146, jsxs as jsxs92 } from "react/jsx-runtime";
73660
+ import { jsx as jsx148, jsxs as jsxs93 } from "react/jsx-runtime";
73327
73661
  function cx(...classes) {
73328
73662
  return classes.filter((className) => Boolean(className)).join(" ");
73329
73663
  }
@@ -73376,7 +73710,7 @@ function EventRegistrationSSR({
73376
73710
  siteMemberships
73377
73711
  });
73378
73712
  const display = islandProps.render.display;
73379
- return /* @__PURE__ */ jsxs92(
73713
+ return /* @__PURE__ */ jsxs93(
73380
73714
  "div",
73381
73715
  {
73382
73716
  className: `event-registration ${className ?? ""}`.trim(),
@@ -73386,8 +73720,8 @@ function EventRegistrationSSR({
73386
73720
  "data-rb-island-error-class": "event-registration__hydration-error",
73387
73721
  ...getIslandRootProps("event-registration", blockId),
73388
73722
  children: [
73389
- /* @__PURE__ */ jsx146(IslandPropsScript, { value: islandProps }),
73390
- /* @__PURE__ */ jsx146(EventRegistrationShell, { display }),
73723
+ /* @__PURE__ */ jsx148(IslandPropsScript, { value: islandProps }),
73724
+ /* @__PURE__ */ jsx148(EventRegistrationShell, { display }),
73391
73725
  children
73392
73726
  ]
73393
73727
  }
@@ -73396,47 +73730,47 @@ function EventRegistrationSSR({
73396
73730
  function EventRegistrationShell({
73397
73731
  display
73398
73732
  }) {
73399
- return /* @__PURE__ */ jsx146(
73733
+ return /* @__PURE__ */ jsx148(
73400
73734
  "div",
73401
73735
  {
73402
73736
  id: EVENT_REGISTRATION_ANCHOR_ID,
73403
73737
  className: "er-container er-registration-shell",
73404
73738
  "aria-busy": "true",
73405
73739
  role: "status",
73406
- children: /* @__PURE__ */ jsxs92("div", { className: "er-payment-layout er-payment-layout--no-sidebar", children: [
73407
- /* @__PURE__ */ jsxs92("div", { className: "er-payment-layout-main", children: [
73408
- /* @__PURE__ */ jsx146("div", { className: "er-steps-nav er-registration-shell__steps", "aria-hidden": "true", children: /* @__PURE__ */ jsx146("ol", { className: "er-steps", children: display.stepLabels.map((label, index) => {
73740
+ children: /* @__PURE__ */ jsxs93("div", { className: "er-payment-layout er-payment-layout--no-sidebar", children: [
73741
+ /* @__PURE__ */ jsxs93("div", { className: "er-payment-layout-main", children: [
73742
+ /* @__PURE__ */ jsx148("div", { className: "er-steps-nav er-registration-shell__steps", "aria-hidden": "true", children: /* @__PURE__ */ jsx148("ol", { className: "er-steps", children: display.stepLabels.map((label, index) => {
73409
73743
  const isActive = index === 0;
73410
- return /* @__PURE__ */ jsxs92("li", { className: "er-step", children: [
73411
- /* @__PURE__ */ jsx146("span", { className: cx("er-step-circle", isActive && "er-step-circle--active"), children: index + 1 }),
73412
- /* @__PURE__ */ jsx146("span", { className: cx("er-step-label", isActive && "er-step-label--active"), children: label }),
73413
- index < display.stepLabels.length - 1 ? /* @__PURE__ */ jsx146("span", { className: "er-step-connector" }) : null
73744
+ return /* @__PURE__ */ jsxs93("li", { className: "er-step", children: [
73745
+ /* @__PURE__ */ jsx148("span", { className: cx("er-step-circle", isActive && "er-step-circle--active"), children: index + 1 }),
73746
+ /* @__PURE__ */ jsx148("span", { className: cx("er-step-label", isActive && "er-step-label--active"), children: label }),
73747
+ index < display.stepLabels.length - 1 ? /* @__PURE__ */ jsx148("span", { className: "er-step-connector" }) : null
73414
73748
  ] }, label);
73415
73749
  }) }) }),
73416
- /* @__PURE__ */ jsxs92("div", { className: "er-stack", children: [
73417
- /* @__PURE__ */ jsxs92("div", { children: [
73418
- /* @__PURE__ */ jsx146("p", { className: "er-registration-shell__eyebrow", children: "Registration" }),
73419
- /* @__PURE__ */ jsx146("h3", { className: "er-title er-registration-shell__title", children: display.titleText }),
73420
- /* @__PURE__ */ jsx146("p", { className: "er-text er-text--muted er-registration-shell__copy", children: display.bodyText })
73750
+ /* @__PURE__ */ jsxs93("div", { className: "er-stack", children: [
73751
+ /* @__PURE__ */ jsxs93("div", { children: [
73752
+ /* @__PURE__ */ jsx148("p", { className: "er-registration-shell__eyebrow", children: "Registration" }),
73753
+ /* @__PURE__ */ jsx148("h3", { className: "er-title er-registration-shell__title", children: display.titleText }),
73754
+ /* @__PURE__ */ jsx148("p", { className: "er-text er-text--muted er-registration-shell__copy", children: display.bodyText })
73421
73755
  ] }),
73422
- /* @__PURE__ */ jsxs92("div", { className: "er-event-grid er-registration-shell__cards", "aria-hidden": "true", children: [
73423
- /* @__PURE__ */ jsxs92("div", { className: "er-event-card er-registration-shell__card", children: [
73424
- /* @__PURE__ */ jsx146("div", { className: "er-registration-shell__line er-registration-shell__line--lg" }),
73425
- /* @__PURE__ */ jsx146("div", { className: "er-registration-shell__line er-registration-shell__line--sm" })
73756
+ /* @__PURE__ */ jsxs93("div", { className: "er-event-grid er-registration-shell__cards", "aria-hidden": "true", children: [
73757
+ /* @__PURE__ */ jsxs93("div", { className: "er-event-card er-registration-shell__card", children: [
73758
+ /* @__PURE__ */ jsx148("div", { className: "er-registration-shell__line er-registration-shell__line--lg" }),
73759
+ /* @__PURE__ */ jsx148("div", { className: "er-registration-shell__line er-registration-shell__line--sm" })
73426
73760
  ] }),
73427
- /* @__PURE__ */ jsxs92("div", { className: "er-event-card er-registration-shell__card", children: [
73428
- /* @__PURE__ */ jsx146("div", { className: "er-registration-shell__line er-registration-shell__line--md" }),
73429
- /* @__PURE__ */ jsx146("div", { className: "er-registration-shell__line er-registration-shell__line--xs" })
73761
+ /* @__PURE__ */ jsxs93("div", { className: "er-event-card er-registration-shell__card", children: [
73762
+ /* @__PURE__ */ jsx148("div", { className: "er-registration-shell__line er-registration-shell__line--md" }),
73763
+ /* @__PURE__ */ jsx148("div", { className: "er-registration-shell__line er-registration-shell__line--xs" })
73430
73764
  ] })
73431
73765
  ] })
73432
73766
  ] })
73433
73767
  ] }),
73434
- /* @__PURE__ */ jsx146("div", { className: "er-payment-layout-footer", children: /* @__PURE__ */ jsxs92("div", { className: "er-summary-bar er-registration-shell__summary", "aria-hidden": "true", children: [
73435
- /* @__PURE__ */ jsxs92("div", { className: "er-summary-bar-info", children: [
73436
- /* @__PURE__ */ jsx146("div", { className: "er-registration-shell__line er-registration-shell__line--md" }),
73437
- /* @__PURE__ */ jsx146("div", { className: "er-registration-shell__line er-registration-shell__line--xs" })
73768
+ /* @__PURE__ */ jsx148("div", { className: "er-payment-layout-footer", children: /* @__PURE__ */ jsxs93("div", { className: "er-summary-bar er-registration-shell__summary", "aria-hidden": "true", children: [
73769
+ /* @__PURE__ */ jsxs93("div", { className: "er-summary-bar-info", children: [
73770
+ /* @__PURE__ */ jsx148("div", { className: "er-registration-shell__line er-registration-shell__line--md" }),
73771
+ /* @__PURE__ */ jsx148("div", { className: "er-registration-shell__line er-registration-shell__line--xs" })
73438
73772
  ] }),
73439
- /* @__PURE__ */ jsx146("div", { className: "er-registration-shell__button-placeholder", children: display.summaryButtonText })
73773
+ /* @__PURE__ */ jsx148("div", { className: "er-registration-shell__button-placeholder", children: display.summaryButtonText })
73440
73774
  ] }) })
73441
73775
  ] })
73442
73776
  }
@@ -73449,7 +73783,7 @@ init_clsx();
73449
73783
  init_buttons();
73450
73784
  init_FeedbackMessage();
73451
73785
  init_form_interactive();
73452
- import { jsx as jsx147, jsxs as jsxs93 } from "react/jsx-runtime";
73786
+ import { jsx as jsx149, jsxs as jsxs94 } from "react/jsx-runtime";
73453
73787
  var FormNodeSSR = ({
73454
73788
  blockId,
73455
73789
  value,
@@ -73474,9 +73808,9 @@ var FormNodeSSR = ({
73474
73808
  const display = islandProps.render.display;
73475
73809
  const form2 = display.form;
73476
73810
  if (!form2) {
73477
- return /* @__PURE__ */ jsxs93("div", { ...getIslandRootProps("form", blockId), children: [
73478
- /* @__PURE__ */ jsx147(IslandPropsScript, { value: islandProps }),
73479
- /* @__PURE__ */ jsx147(FeedbackMessage, { tone: "warning", className: clsx_default("fb-empty", className), role: "status", children: "Missing or unknown form." })
73811
+ return /* @__PURE__ */ jsxs94("div", { ...getIslandRootProps("form", blockId), children: [
73812
+ /* @__PURE__ */ jsx149(IslandPropsScript, { value: islandProps }),
73813
+ /* @__PURE__ */ jsx149(FeedbackMessage, { tone: "warning", className: clsx_default("fb-empty", className), role: "status", children: "Missing or unknown form." })
73480
73814
  ] });
73481
73815
  }
73482
73816
  const groups = display.groups;
@@ -73486,9 +73820,9 @@ var FormNodeSSR = ({
73486
73820
  const required = Boolean(field.required);
73487
73821
  const type = String(field.type ?? "text");
73488
73822
  if (type === "textarea") {
73489
- return /* @__PURE__ */ jsxs93("div", { className: "fb-field", children: [
73490
- /* @__PURE__ */ jsx147("label", { htmlFor: inputId, className: "form-label", children: label }),
73491
- /* @__PURE__ */ jsx147(
73823
+ return /* @__PURE__ */ jsxs94("div", { className: "fb-field", children: [
73824
+ /* @__PURE__ */ jsx149("label", { htmlFor: inputId, className: "form-label", children: label }),
73825
+ /* @__PURE__ */ jsx149(
73492
73826
  "textarea",
73493
73827
  {
73494
73828
  id: inputId,
@@ -73504,20 +73838,20 @@ var FormNodeSSR = ({
73504
73838
  if (type === "select") {
73505
73839
  const options = field.options ?? [];
73506
73840
  const multiple = Boolean(field.multiple);
73507
- return /* @__PURE__ */ jsxs93("div", { className: "fb-field", children: [
73508
- /* @__PURE__ */ jsx147("label", { htmlFor: inputId, className: "form-label", children: label }),
73509
- /* @__PURE__ */ jsxs93("select", { id: inputId, name: field.id, multiple, required, className: "form-select", children: [
73510
- !multiple && /* @__PURE__ */ jsx147("option", { value: "", children: "Select\u2026" }),
73511
- options.map((opt) => /* @__PURE__ */ jsx147("option", { value: opt.value, children: opt.label }, opt.value))
73841
+ return /* @__PURE__ */ jsxs94("div", { className: "fb-field", children: [
73842
+ /* @__PURE__ */ jsx149("label", { htmlFor: inputId, className: "form-label", children: label }),
73843
+ /* @__PURE__ */ jsxs94("select", { id: inputId, name: field.id, multiple, required, className: "form-select", children: [
73844
+ !multiple && /* @__PURE__ */ jsx149("option", { value: "", children: "Select\u2026" }),
73845
+ options.map((opt) => /* @__PURE__ */ jsx149("option", { value: opt.value, children: opt.label }, opt.value))
73512
73846
  ] })
73513
73847
  ] }, field.id);
73514
73848
  }
73515
73849
  if (type === "radio") {
73516
73850
  const options = field.options ?? [];
73517
- return /* @__PURE__ */ jsxs93("fieldset", { className: "fb-fieldset", children: [
73518
- /* @__PURE__ */ jsx147("legend", { className: "form-label", children: label }),
73519
- options.map((opt) => /* @__PURE__ */ jsxs93("label", { className: "fb-inline form-label", children: [
73520
- /* @__PURE__ */ jsx147(
73851
+ return /* @__PURE__ */ jsxs94("fieldset", { className: "fb-fieldset", children: [
73852
+ /* @__PURE__ */ jsx149("legend", { className: "form-label", children: label }),
73853
+ options.map((opt) => /* @__PURE__ */ jsxs94("label", { className: "fb-inline form-label", children: [
73854
+ /* @__PURE__ */ jsx149(
73521
73855
  "input",
73522
73856
  {
73523
73857
  type: "radio",
@@ -73527,14 +73861,14 @@ var FormNodeSSR = ({
73527
73861
  className: "form-radio"
73528
73862
  }
73529
73863
  ),
73530
- /* @__PURE__ */ jsx147("span", { children: opt.label })
73864
+ /* @__PURE__ */ jsx149("span", { children: opt.label })
73531
73865
  ] }, opt.value))
73532
73866
  ] }, field.id);
73533
73867
  }
73534
73868
  if (type === "checkbox" || type === "consent") {
73535
- return /* @__PURE__ */ jsxs93("label", { className: "fb-inline form-label", children: [
73536
- /* @__PURE__ */ jsx147("input", { type: "checkbox", name: field.id, required, className: "form-checkbox" }),
73537
- /* @__PURE__ */ jsx147("span", { children: label })
73869
+ return /* @__PURE__ */ jsxs94("label", { className: "fb-inline form-label", children: [
73870
+ /* @__PURE__ */ jsx149("input", { type: "checkbox", name: field.id, required, className: "form-checkbox" }),
73871
+ /* @__PURE__ */ jsx149("span", { children: label })
73538
73872
  ] }, field.id);
73539
73873
  }
73540
73874
  const inputType = type === "email" || type === "url" || type === "tel" || type === "number" ? type : "text";
@@ -73548,9 +73882,9 @@ var FormNodeSSR = ({
73548
73882
  if (typeof field.min === "number") extra.min = field.min;
73549
73883
  if (typeof field.max === "number") extra.max = field.max;
73550
73884
  }
73551
- return /* @__PURE__ */ jsxs93("div", { className: "fb-field", children: [
73552
- /* @__PURE__ */ jsx147("label", { htmlFor: inputId, className: "form-label", children: label }),
73553
- /* @__PURE__ */ jsx147(
73885
+ return /* @__PURE__ */ jsxs94("div", { className: "fb-field", children: [
73886
+ /* @__PURE__ */ jsx149("label", { htmlFor: inputId, className: "form-label", children: label }),
73887
+ /* @__PURE__ */ jsx149(
73554
73888
  "input",
73555
73889
  {
73556
73890
  id: inputId,
@@ -73564,9 +73898,9 @@ var FormNodeSSR = ({
73564
73898
  )
73565
73899
  ] }, field.id);
73566
73900
  };
73567
- return /* @__PURE__ */ jsxs93("div", { ...getIslandRootProps("form", blockId), children: [
73568
- /* @__PURE__ */ jsx147(IslandPropsScript, { value: islandProps }),
73569
- /* @__PURE__ */ jsxs93(
73901
+ return /* @__PURE__ */ jsxs94("div", { ...getIslandRootProps("form", blockId), children: [
73902
+ /* @__PURE__ */ jsx149(IslandPropsScript, { value: islandProps }),
73903
+ /* @__PURE__ */ jsxs94(
73570
73904
  "form",
73571
73905
  {
73572
73906
  method: "POST",
@@ -73574,15 +73908,15 @@ var FormNodeSSR = ({
73574
73908
  onSubmit,
73575
73909
  className: clsx_default("fb-form", display.className ?? void 0),
73576
73910
  children: [
73577
- /* @__PURE__ */ jsx147("input", { type: "hidden", name: "form_id", value: form2.id }),
73578
- /* @__PURE__ */ jsx147("input", { type: "text", name: "company", className: "hidden", tabIndex: -1, autoComplete: "off" }),
73911
+ /* @__PURE__ */ jsx149("input", { type: "hidden", name: "form_id", value: form2.id }),
73912
+ /* @__PURE__ */ jsx149("input", { type: "text", name: "company", className: "hidden", tabIndex: -1, autoComplete: "off" }),
73579
73913
  groups.map((group) => {
73580
73914
  if (group.type === "row") {
73581
- return /* @__PURE__ */ jsx147("div", { className: "fb-row fb-row-2", children: group.fields.map(renderField) }, group.key);
73915
+ return /* @__PURE__ */ jsx149("div", { className: "fb-row fb-row-2", children: group.fields.map(renderField) }, group.key);
73582
73916
  }
73583
73917
  return renderField(group.field);
73584
73918
  }),
73585
- /* @__PURE__ */ jsx147("div", { className: "fb-actions", children: /* @__PURE__ */ jsx147("div", { className: "fb-actions-inner", children: /* @__PURE__ */ jsx147(
73919
+ /* @__PURE__ */ jsx149("div", { className: "fb-actions", children: /* @__PURE__ */ jsx149("div", { className: "fb-actions-inner", children: /* @__PURE__ */ jsx149(
73586
73920
  "button",
73587
73921
  {
73588
73922
  type: "submit",
@@ -73604,7 +73938,7 @@ var FormNodeSSR = ({
73604
73938
  init_clsx();
73605
73939
  init_buttons();
73606
73940
  init_newsletter_form_interactive();
73607
- import { jsx as jsx148, jsxs as jsxs94 } from "react/jsx-runtime";
73941
+ import { jsx as jsx150, jsxs as jsxs95 } from "react/jsx-runtime";
73608
73942
  function NewsletterFormSSR({
73609
73943
  blockId,
73610
73944
  siteId,
@@ -73639,12 +73973,12 @@ function NewsletterFormSSR({
73639
73973
  const fields3 = display.fields;
73640
73974
  const renderField = (field) => {
73641
73975
  const inputId = `newsletter_${field.id}`;
73642
- return /* @__PURE__ */ jsxs94("div", { className: "fb-field newsletter-field", children: [
73643
- /* @__PURE__ */ jsxs94("label", { htmlFor: inputId, className: "form-label", children: [
73976
+ return /* @__PURE__ */ jsxs95("div", { className: "fb-field newsletter-field", children: [
73977
+ /* @__PURE__ */ jsxs95("label", { htmlFor: inputId, className: "form-label", children: [
73644
73978
  field.label,
73645
- field.required && /* @__PURE__ */ jsx148("span", { className: "newsletter-required", "aria-hidden": "true", children: "*" })
73979
+ field.required && /* @__PURE__ */ jsx150("span", { className: "newsletter-required", "aria-hidden": "true", children: "*" })
73646
73980
  ] }),
73647
- /* @__PURE__ */ jsx148(
73981
+ /* @__PURE__ */ jsx150(
73648
73982
  "input",
73649
73983
  {
73650
73984
  id: inputId,
@@ -73658,15 +73992,15 @@ function NewsletterFormSSR({
73658
73992
  )
73659
73993
  ] }, field.id);
73660
73994
  };
73661
- return /* @__PURE__ */ jsxs94(
73995
+ return /* @__PURE__ */ jsxs95(
73662
73996
  "div",
73663
73997
  {
73664
73998
  ...getIslandRootProps("newsletter-form", blockId),
73665
73999
  className: clsx_default("newsletter-form-ssr", className),
73666
74000
  children: [
73667
- /* @__PURE__ */ jsx148(IslandPropsScript, { value: islandProps }),
73668
- /* @__PURE__ */ jsxs94("form", { method: "POST", className: "newsletter-form fb-form", children: [
73669
- /* @__PURE__ */ jsx148(
74001
+ /* @__PURE__ */ jsx150(IslandPropsScript, { value: islandProps }),
74002
+ /* @__PURE__ */ jsxs95("form", { method: "POST", className: "newsletter-form fb-form", children: [
74003
+ /* @__PURE__ */ jsx150(
73670
74004
  "input",
73671
74005
  {
73672
74006
  type: "text",
@@ -73677,9 +74011,9 @@ function NewsletterFormSSR({
73677
74011
  "aria-hidden": "true"
73678
74012
  }
73679
74013
  ),
73680
- /* @__PURE__ */ jsxs94("div", { className: "newsletter-form-fields", children: [
74014
+ /* @__PURE__ */ jsxs95("div", { className: "newsletter-form-fields", children: [
73681
74015
  fields3.map(renderField),
73682
- /* @__PURE__ */ jsx148("div", { className: "newsletter-submit", children: /* @__PURE__ */ jsx148(
74016
+ /* @__PURE__ */ jsx150("div", { className: "newsletter-submit", children: /* @__PURE__ */ jsx150(
73683
74017
  "button",
73684
74018
  {
73685
74019
  type: "submit",
@@ -73688,7 +74022,7 @@ function NewsletterFormSSR({
73688
74022
  }
73689
74023
  ) })
73690
74024
  ] }),
73691
- display.privacyNote && /* @__PURE__ */ jsx148("p", { className: "newsletter-privacy-note", children: display.privacyNote })
74025
+ display.privacyNote && /* @__PURE__ */ jsx150("p", { className: "newsletter-privacy-note", children: display.privacyNote })
73692
74026
  ] })
73693
74027
  ]
73694
74028
  }
@@ -73698,7 +74032,7 @@ var newsletter_form_server_default = NewsletterFormSSR;
73698
74032
 
73699
74033
  // ../blocks/src/system/runtime/nodes/product-detail.server.tsx
73700
74034
  init_shop_interactive();
73701
- import { jsx as jsx149, jsxs as jsxs95 } from "react/jsx-runtime";
74035
+ import { jsx as jsx151, jsxs as jsxs96 } from "react/jsx-runtime";
73702
74036
  function ProductDetailSSR({
73703
74037
  blockId,
73704
74038
  siteId,
@@ -73713,7 +74047,7 @@ function ProductDetailSSR({
73713
74047
  stage,
73714
74048
  ...rest
73715
74049
  });
73716
- return /* @__PURE__ */ jsxs95(
74050
+ return /* @__PURE__ */ jsxs96(
73717
74051
  "div",
73718
74052
  {
73719
74053
  className: `shop ${rest.className ?? ""}`.trim(),
@@ -73723,8 +74057,8 @@ function ProductDetailSSR({
73723
74057
  "data-site-id": siteId ?? void 0,
73724
74058
  ...getIslandRootProps("product-detail", blockId),
73725
74059
  children: [
73726
- /* @__PURE__ */ jsx149(IslandPropsScript, { value: islandProps }),
73727
- /* @__PURE__ */ jsx149(ProductDetailServerContent, { render: islandProps.render }),
74060
+ /* @__PURE__ */ jsx151(IslandPropsScript, { value: islandProps }),
74061
+ /* @__PURE__ */ jsx151(ProductDetailServerContent, { render: islandProps.render }),
73728
74062
  children
73729
74063
  ]
73730
74064
  }
@@ -73734,7 +74068,7 @@ var product_detail_server_default = ProductDetailSSR;
73734
74068
 
73735
74069
  // ../blocks/src/system/runtime/nodes/product-list.server.tsx
73736
74070
  init_shop_interactive();
73737
- import { jsx as jsx150, jsxs as jsxs96 } from "react/jsx-runtime";
74071
+ import { jsx as jsx152, jsxs as jsxs97 } from "react/jsx-runtime";
73738
74072
  function ProductListSSR({
73739
74073
  blockId,
73740
74074
  siteId,
@@ -73749,7 +74083,7 @@ function ProductListSSR({
73749
74083
  stage,
73750
74084
  ...rest
73751
74085
  });
73752
- return /* @__PURE__ */ jsxs96(
74086
+ return /* @__PURE__ */ jsxs97(
73753
74087
  "div",
73754
74088
  {
73755
74089
  className: `shop ${rest.className ?? ""}`.trim(),
@@ -73759,8 +74093,8 @@ function ProductListSSR({
73759
74093
  "data-site-id": siteId ?? void 0,
73760
74094
  ...getIslandRootProps("product-list", blockId),
73761
74095
  children: [
73762
- /* @__PURE__ */ jsx150(IslandPropsScript, { value: islandProps }),
73763
- /* @__PURE__ */ jsx150(ProductListServerContent, { render: islandProps.render }),
74096
+ /* @__PURE__ */ jsx152(IslandPropsScript, { value: islandProps }),
74097
+ /* @__PURE__ */ jsx152(ProductListServerContent, { render: islandProps.render }),
73764
74098
  children
73765
74099
  ]
73766
74100
  }
@@ -73772,7 +74106,7 @@ var product_list_server_default = ProductListSSR;
73772
74106
  init_buttons();
73773
74107
  init_view2();
73774
74108
  init_shop_interactive();
73775
- import { jsx as jsx151, jsxs as jsxs97 } from "react/jsx-runtime";
74109
+ import { jsx as jsx153, jsxs as jsxs98 } from "react/jsx-runtime";
73776
74110
  function ShopSSR({
73777
74111
  blockId,
73778
74112
  siteId,
@@ -73789,7 +74123,7 @@ function ShopSSR({
73789
74123
  ...rest
73790
74124
  });
73791
74125
  const render = islandProps.render;
73792
- return /* @__PURE__ */ jsxs97(
74126
+ return /* @__PURE__ */ jsxs98(
73793
74127
  "div",
73794
74128
  {
73795
74129
  className: `shop ${rest.className ?? ""}`.trim(),
@@ -73799,16 +74133,16 @@ function ShopSSR({
73799
74133
  "data-site-id": siteId ?? void 0,
73800
74134
  ...getIslandRootProps("shop", blockId),
73801
74135
  children: [
73802
- /* @__PURE__ */ jsx151(IslandPropsScript, { value: islandProps }),
73803
- /* @__PURE__ */ jsx151(
74136
+ /* @__PURE__ */ jsx153(IslandPropsScript, { value: islandProps }),
74137
+ /* @__PURE__ */ jsx153(
73804
74138
  PassesMembershipsSectionView,
73805
74139
  {
73806
74140
  display: render.display,
73807
- passCards: render.display.passes.map((pass) => /* @__PURE__ */ jsx151(
74141
+ passCards: render.display.passes.map((pass) => /* @__PURE__ */ jsx153(
73808
74142
  PassCardView,
73809
74143
  {
73810
74144
  display: pass,
73811
- action: /* @__PURE__ */ jsx151(
74145
+ action: /* @__PURE__ */ jsx153(
73812
74146
  "button",
73813
74147
  {
73814
74148
  type: "button",
@@ -73821,11 +74155,11 @@ function ShopSSR({
73821
74155
  },
73822
74156
  pass.id
73823
74157
  )),
73824
- membershipCards: render.display.memberships.map((membership) => /* @__PURE__ */ jsx151(
74158
+ membershipCards: render.display.memberships.map((membership) => /* @__PURE__ */ jsx153(
73825
74159
  MembershipCardView,
73826
74160
  {
73827
74161
  display: membership,
73828
- action: /* @__PURE__ */ jsx151(
74162
+ action: /* @__PURE__ */ jsx153(
73829
74163
  "button",
73830
74164
  {
73831
74165
  type: "button",
@@ -73952,6 +74286,7 @@ var serverComponentRegistry = {
73952
74286
  "event-spotlight": EventSpotlight,
73953
74287
  "event-combined": EventCombinedSSR,
73954
74288
  "offerings-preview": offerings_preview_default,
74289
+ "weekly-slot-availability": weekly_slot_availability_server_default,
73955
74290
  ...runtimeBackedBlockServerRegistry
73956
74291
  };
73957
74292
 
@@ -74087,10 +74422,32 @@ function previewEditableTargetToPath(target) {
74087
74422
  return assertNever(target);
74088
74423
  }
74089
74424
  }
74425
+ function previewEditableTargetToFieldKey(target) {
74426
+ if (target.kind !== "block-field") return null;
74427
+ return {
74428
+ kind: "block-field",
74429
+ blockId: blockIdFromEditorPath(target.path),
74430
+ fieldPath: target.fieldPath
74431
+ };
74432
+ }
74433
+ function blockIdFromEditorPath(path) {
74434
+ const match = /^blocks\.([^.]+)\./.exec(path);
74435
+ return match?.[1] ?? "";
74436
+ }
74090
74437
  function previewEditableTargetFieldConstraints(target, context) {
74091
74438
  if (target.kind !== "block-field") return void 0;
74092
74439
  return context.fieldConstraints?.[target.fieldPath] ?? context.fieldConstraints?.[stripNumericPathSegments(target.fieldPath)];
74093
74440
  }
74441
+ function propsWithAuthoringPlaceholder(props2, node) {
74442
+ const authoringPresence = conditionalAuthoringPresenceFor(node.$when?.authoringPresence);
74443
+ if (authoringPresence.kind !== "recover-empty-when-active") return props2;
74444
+ if (!authoringPresence.placeholder || typeof props2.placeholder === "string") return props2;
74445
+ return {
74446
+ ...props2,
74447
+ placeholder: authoringPresence.placeholder,
74448
+ ariaLabel: typeof props2.ariaLabel === "string" ? props2.ariaLabel : authoringPresence.placeholder
74449
+ };
74450
+ }
74094
74451
  function isIdentityBinding(binding) {
74095
74452
  return binding.transforms.length === 0 && binding.fallback === void 0 && binding.coerce === void 0 && binding.pick === "value";
74096
74453
  }
@@ -74315,6 +74672,62 @@ function coerceBindingValue(value, binding) {
74315
74672
  }
74316
74673
  }
74317
74674
  }
74675
+ function conditionalAuthoringPresenceFor(value) {
74676
+ return value ?? { kind: "visitor-only" };
74677
+ }
74678
+ function conditionalValuePresence(nodeType, value) {
74679
+ switch (nodeType) {
74680
+ case "text":
74681
+ return isTextConditionValueEmpty(value) ? { kind: "empty" } : { kind: "present" };
74682
+ case "richText":
74683
+ return isRichTextConditionValueEmpty(value) ? { kind: "empty" } : { kind: "present" };
74684
+ default:
74685
+ return value ? { kind: "present" } : { kind: "empty" };
74686
+ }
74687
+ }
74688
+ function isTextConditionValueEmpty(value) {
74689
+ const inlineText = parseInlineTextFromUnknown(value);
74690
+ if (inlineText.ok) {
74691
+ return inlineTextToPlainText(inlineText.value).trim().length === 0;
74692
+ }
74693
+ if (typeof value === "string") return value.trim().length === 0;
74694
+ if (value === null || value === void 0) return true;
74695
+ return !value;
74696
+ }
74697
+ function isRichTextConditionValueEmpty(value) {
74698
+ const root = unwrapRichTextRoot(value);
74699
+ if (typeof root === "string") return root.trim().length === 0;
74700
+ if (!isTipTapNode(root)) return root === null || root === void 0 || !root;
74701
+ return richTextPlainText(root).trim().length === 0;
74702
+ }
74703
+ function isTipTapNode(value) {
74704
+ return isPlainObject3(value) && typeof value.type === "string";
74705
+ }
74706
+ function richTextPlainText(node) {
74707
+ const ownText = typeof node.text === "string" ? node.text : "";
74708
+ const childText = (node.content ?? []).map(richTextPlainText).join("");
74709
+ return ownText + childText;
74710
+ }
74711
+ function planConditionalNodeRender(input) {
74712
+ if (input.conditionMatched) {
74713
+ return { kind: "render", reason: "condition-passed" };
74714
+ }
74715
+ if (input.authoringPresence.kind !== "recover-empty-when-active" || !input.conditionUsesPresenceSemantics || input.conditionPresence.kind !== "empty") {
74716
+ return { kind: "skip", reason: "condition-failed" };
74717
+ }
74718
+ if (!input.editableTarget) {
74719
+ return { kind: "skip", reason: "not-editable" };
74720
+ }
74721
+ if (!previewAuthoringFieldsEqual(input.editableTarget, input.authoringContext?.activeField ?? null)) {
74722
+ return { kind: "skip", reason: "inactive-authoring-context" };
74723
+ }
74724
+ return { kind: "render", reason: "authoring-presence" };
74725
+ }
74726
+ function previewAuthoringFieldsEqual(left, right) {
74727
+ return Boolean(
74728
+ right && left.kind === right.kind && left.blockId === right.blockId && left.fieldPath === right.fieldPath
74729
+ );
74730
+ }
74318
74731
  function resolveBindingValue(binding, context) {
74319
74732
  const fullPath = binding.from;
74320
74733
  const segments = splitPath(fullPath);
@@ -74379,9 +74792,23 @@ function shouldRenderNode(node, context) {
74379
74792
  const binding = parseBinding(node.$when.when, "$when");
74380
74793
  const value = resolveBindingValue(binding, context);
74381
74794
  const equals = node.$when.equals;
74382
- const matches = typeof equals === "undefined" ? Boolean(value) : value === equals;
74383
- const shouldRender = node.$when.not ? !matches : matches;
74384
- return shouldRender;
74795
+ const conditionPresence = conditionalValuePresence(node.type, value);
74796
+ const usesPresenceSemantics = typeof equals === "undefined" && !node.$when.not;
74797
+ const matches = typeof equals === "undefined" ? conditionPresence.kind === "present" : value === equals;
74798
+ const conditionMatched = node.$when.not ? !matches : matches;
74799
+ const parsedNodeBinding = node.$bind ? parseBinding(node.$bind, "$bind") : void 0;
74800
+ const editableTarget = node.type === "text" || node.type === "richText" ? previewEditableTargetToFieldKey(
74801
+ derivePreviewTextEditableTarget(parsedNodeBinding, context)
74802
+ ) : null;
74803
+ const decision = planConditionalNodeRender({
74804
+ conditionMatched,
74805
+ conditionPresence,
74806
+ conditionUsesPresenceSemantics: usesPresenceSemantics,
74807
+ authoringPresence: conditionalAuthoringPresenceFor(node.$when.authoringPresence),
74808
+ editableTarget,
74809
+ authoringContext: context.previewAuthoring
74810
+ });
74811
+ return decision.kind === "render";
74385
74812
  }
74386
74813
  function applyScopes(node, context) {
74387
74814
  if (!node.$scopes) return context;
@@ -74531,25 +74958,26 @@ function derivePreviewTextEditableTarget(parsedBinding, context) {
74531
74958
  }
74532
74959
  function injectEditorPath(props2, node, parsedBinding, context) {
74533
74960
  if (node.type !== "text" && node.type !== "richText") return props2;
74961
+ const propsWithPlaceholder = propsWithAuthoringPlaceholder(props2, node);
74534
74962
  const linkedEntryField = derivePreviewLinkedEntryFieldBinding(
74535
74963
  node,
74536
74964
  parsedBinding,
74537
74965
  context
74538
74966
  );
74539
74967
  if (linkedEntryField) {
74540
- return { ...props2, linkedEntryField };
74968
+ return { ...propsWithPlaceholder, linkedEntryField };
74541
74969
  }
74542
74970
  const editableTarget = derivePreviewTextEditableTarget(parsedBinding, context);
74543
74971
  const path = previewEditableTargetToPath(editableTarget);
74544
- if (!path) return props2;
74972
+ if (!path) return propsWithPlaceholder;
74545
74973
  if (node.type === "text") {
74546
74974
  const constraints = previewEditableTargetFieldConstraints(
74547
74975
  editableTarget,
74548
74976
  context
74549
74977
  );
74550
- return constraints ? { ...props2, path, ...constraints } : { ...props2, path };
74978
+ return constraints ? { ...propsWithPlaceholder, path, ...constraints } : { ...propsWithPlaceholder, path };
74551
74979
  }
74552
- return { ...props2, path };
74980
+ return { ...propsWithPlaceholder, path };
74553
74981
  }
74554
74982
  function injectMediaSlotPath(props2, node, parsedBinding, context) {
74555
74983
  if (!parsedBinding) return props2;
@@ -74641,7 +75069,8 @@ function resolveNode2(node, context, indexFallback) {
74641
75069
  blockKind: context.blockKind,
74642
75070
  blockContent: context.blockContent,
74643
75071
  ...node.type === "media" && context.imageResolveContext ? { imageResolveContext: context.imageResolveContext } : {},
74644
- fragmentRegistry: context.fragmentRegistry
75072
+ fragmentRegistry: context.fragmentRegistry,
75073
+ previewAuthoring: context.previewAuthoring
74645
75074
  };
74646
75075
  const element = React33.createElement(component, elementProps, ...children);
74647
75076
  if (headingDecorationPlan.kind === "skip") {
@@ -75012,7 +75441,8 @@ function makeDefaultBlockComponent(args) {
75012
75441
  blockBindings,
75013
75442
  editableRouteMetadataFieldIds,
75014
75443
  fragmentRegistry: fragmentRegistry2,
75015
- imageResolveContext
75444
+ imageResolveContext,
75445
+ previewAuthoring
75016
75446
  }) {
75017
75447
  const perfEnv = globalThis.process?.env;
75018
75448
  const perfEnabled = perfEnv?.DEBUG_PERF === "1" && typeof window === "undefined";
@@ -75072,7 +75502,8 @@ function makeDefaultBlockComponent(args) {
75072
75502
  editableRouteMetadataFieldIds,
75073
75503
  fragmentRegistry: fragmentRegistry2,
75074
75504
  fieldConstraints,
75075
- imageResolveContext
75505
+ imageResolveContext,
75506
+ previewAuthoring
75076
75507
  });
75077
75508
  if (perfStart) {
75078
75509
  const durationMs = Date.now() - perfStart;
@@ -79114,7 +79545,7 @@ function sourceLabel(source) {
79114
79545
  // ../blocks/src/PageRenderer.tsx
79115
79546
  init_typeGuards2();
79116
79547
  init_media3();
79117
- import { Fragment as Fragment31, jsx as jsx152, jsxs as jsxs98 } from "react/jsx-runtime";
79548
+ import { Fragment as Fragment31, jsx as jsx154, jsxs as jsxs99 } from "react/jsx-runtime";
79118
79549
  function PageRenderer({
79119
79550
  theme,
79120
79551
  page,
@@ -79126,7 +79557,8 @@ function PageRenderer({
79126
79557
  routeMap,
79127
79558
  blockOverrides,
79128
79559
  sdkConfig,
79129
- customBlocks
79560
+ customBlocks,
79561
+ previewAuthoring
79130
79562
  }) {
79131
79563
  const imageResolveContext = React35.useMemo(
79132
79564
  () => resolvePageRendererImageResolveContext(dataContext),
@@ -79138,12 +79570,12 @@ function PageRenderer({
79138
79570
  ]
79139
79571
  );
79140
79572
  if (!page || page.blocks.length === 0) {
79141
- return /* @__PURE__ */ jsx152("div", { className: "rb-p-6 rb-caption", style: textColorStyle("mutedText"), children: "No blocks found." });
79573
+ return /* @__PURE__ */ jsx154("div", { className: "rb-p-6 rb-caption", style: textColorStyle("mutedText"), children: "No blocks found." });
79142
79574
  }
79143
79575
  const themeTokens = providedThemeTokens ?? buildThemeRuntime(theme).tokens;
79144
79576
  const resolvedRegistry = registry ?? getDefaultComponentRegistry();
79145
79577
  setContextResolveImageUrlContext(imageResolveContext);
79146
- return /* @__PURE__ */ jsx152("div", { children: page.blocks.map((block, index) => {
79578
+ return /* @__PURE__ */ jsx154("div", { children: page.blocks.map((block, index) => {
79147
79579
  const blockPosition = pageBlockPosition(index, page.blocks.length);
79148
79580
  const blockKey = block.id ?? `${block.kind}-${index}`;
79149
79581
  const cleanKind = block.kind.replace(/^block\./, "");
@@ -79165,10 +79597,11 @@ function PageRenderer({
79165
79597
  blockOverrides,
79166
79598
  sdkConfig,
79167
79599
  customBlocks,
79168
- imageResolveContext
79600
+ imageResolveContext,
79601
+ previewAuthoring
79169
79602
  };
79170
79603
  if (!shouldUseWrapper) {
79171
- return /* @__PURE__ */ jsx152(MemoBlockSection, { ...blockSectionProps }, blockKey);
79604
+ return /* @__PURE__ */ jsx154(MemoBlockSection, { ...blockSectionProps }, blockKey);
79172
79605
  }
79173
79606
  const wrapperClassName = [
79174
79607
  `block-${cleanKind}`,
@@ -79176,7 +79609,7 @@ function PageRenderer({
79176
79609
  ].filter(Boolean).join(" ");
79177
79610
  const styleGroup = typeof renderableContent.styleGroup === "string" ? renderableContent.styleGroup : void 0;
79178
79611
  const blockLook = typeof renderableContent.blockLook === "string" ? renderableContent.blockLook : void 0;
79179
- const blockElement = /* @__PURE__ */ jsx152(
79612
+ const blockElement = /* @__PURE__ */ jsx154(
79180
79613
  "div",
79181
79614
  {
79182
79615
  className: wrapperClassName,
@@ -79188,16 +79621,16 @@ function PageRenderer({
79188
79621
  "data-block-look": blockLook,
79189
79622
  "data-page-block-position": blockPosition,
79190
79623
  "data-style-group": styleGroup,
79191
- children: /* @__PURE__ */ jsx152(MemoBlockSection, { ...blockSectionProps })
79624
+ children: /* @__PURE__ */ jsx154(MemoBlockSection, { ...blockSectionProps })
79192
79625
  },
79193
79626
  blockKey
79194
79627
  );
79195
79628
  if (!isSiteStyleTransitionStyleGroup(styleGroup)) {
79196
79629
  return blockElement;
79197
79630
  }
79198
- return /* @__PURE__ */ jsxs98(React35.Fragment, { children: [
79631
+ return /* @__PURE__ */ jsxs99(React35.Fragment, { children: [
79199
79632
  blockElement,
79200
- /* @__PURE__ */ jsx152(
79633
+ /* @__PURE__ */ jsx154(
79201
79634
  "div",
79202
79635
  {
79203
79636
  "aria-hidden": "true",
@@ -79286,7 +79719,8 @@ var MemoBlockSection = React35.memo(
79286
79719
  blockOverrides,
79287
79720
  sdkConfig,
79288
79721
  customBlocks,
79289
- imageResolveContext
79722
+ imageResolveContext,
79723
+ previewAuthoring
79290
79724
  }) {
79291
79725
  const perfEnv = globalThis.process?.env?.DEBUG_PERF;
79292
79726
  const perfStart = perfEnv === "1" && typeof window === "undefined" ? Date.now() : 0;
@@ -79340,8 +79774,8 @@ var MemoBlockSection = React35.memo(
79340
79774
  blockId: block.id ?? null,
79341
79775
  blockKind: block.kind
79342
79776
  };
79343
- const rendered2 = /* @__PURE__ */ jsx152(OverrideComponent, { ...baseProps });
79344
- const node2 = wrapBlock && block.id ? /* @__PURE__ */ jsx152(Fragment31, { children: wrapBlock(block.id, rendered2) }) : /* @__PURE__ */ jsx152(Fragment31, { children: rendered2 });
79777
+ const rendered2 = /* @__PURE__ */ jsx154(OverrideComponent, { ...baseProps });
79778
+ const node2 = wrapBlock && block.id ? /* @__PURE__ */ jsx154(Fragment31, { children: wrapBlock(block.id, rendered2) }) : /* @__PURE__ */ jsx154(Fragment31, { children: rendered2 });
79345
79779
  return finish(node2, {
79346
79780
  outcome: "overrideWithoutDefinition",
79347
79781
  override: true,
@@ -79366,7 +79800,7 @@ var MemoBlockSection = React35.memo(
79366
79800
  const rendered = fallback(
79367
79801
  block.kind.startsWith("custom.") ? `No renderer available for block kind "${block.kind}". The custom block definition was not found (missing manifest).` : `No renderer available for block kind "${block.kind}".`
79368
79802
  );
79369
- const node = wrapBlock && block.id ? /* @__PURE__ */ jsx152(Fragment31, { children: wrapBlock(block.id, rendered) }) : /* @__PURE__ */ jsx152(Fragment31, { children: rendered });
79803
+ const node = wrapBlock && block.id ? /* @__PURE__ */ jsx154(Fragment31, { children: wrapBlock(block.id, rendered) }) : /* @__PURE__ */ jsx154(Fragment31, { children: rendered });
79370
79804
  return finish(node, { outcome: "missingDefinition", override: false });
79371
79805
  }
79372
79806
  const manifestHasLayout = Boolean(definition.manifest.layout) || definition.manifest.variants && Object.keys(definition.manifest.variants).length > 0;
@@ -79388,7 +79822,7 @@ var MemoBlockSection = React35.memo(
79388
79822
  const rendered = fallback(
79389
79823
  block.kind.startsWith("custom.") ? `No renderer available for block kind "${block.kind}". This custom block has no layout/variants, so it must be rendered via blockOverrides["${block.kind}"].` : `No renderer available for block kind "${block.kind}".`
79390
79824
  );
79391
- const node = wrapBlock && block.id ? /* @__PURE__ */ jsx152(Fragment31, { children: wrapBlock(block.id, rendered) }) : /* @__PURE__ */ jsx152(Fragment31, { children: rendered });
79825
+ const node = wrapBlock && block.id ? /* @__PURE__ */ jsx154(Fragment31, { children: wrapBlock(block.id, rendered) }) : /* @__PURE__ */ jsx154(Fragment31, { children: rendered });
79392
79826
  return finish(node, { outcome: "missingLayout", override: false });
79393
79827
  }
79394
79828
  const content = getRenderableContent(block);
@@ -79425,14 +79859,14 @@ var MemoBlockSection = React35.memo(
79425
79859
  const rendered = fallback(
79426
79860
  `Unable to render block kind "${block.kind}".`
79427
79861
  );
79428
- const node = wrapBlock && block.id ? /* @__PURE__ */ jsx152(Fragment31, { children: wrapBlock(block.id, rendered) }) : /* @__PURE__ */ jsx152(Fragment31, { children: rendered });
79862
+ const node = wrapBlock && block.id ? /* @__PURE__ */ jsx154(Fragment31, { children: wrapBlock(block.id, rendered) }) : /* @__PURE__ */ jsx154(Fragment31, { children: rendered });
79429
79863
  return finish(node, { outcome: "invalidPlaceholder", override: false });
79430
79864
  }
79431
79865
  } else {
79432
79866
  const rendered = fallback(
79433
79867
  `Invalid content for block kind "${block.kind}".`
79434
79868
  );
79435
- const node = wrapBlock && block.id ? /* @__PURE__ */ jsx152(Fragment31, { children: wrapBlock(block.id, rendered) }) : /* @__PURE__ */ jsx152(Fragment31, { children: rendered });
79869
+ const node = wrapBlock && block.id ? /* @__PURE__ */ jsx154(Fragment31, { children: wrapBlock(block.id, rendered) }) : /* @__PURE__ */ jsx154(Fragment31, { children: rendered });
79436
79870
  return finish(node, { outcome: "invalidContent", override: false });
79437
79871
  }
79438
79872
  try {
@@ -79470,7 +79904,7 @@ var MemoBlockSection = React35.memo(
79470
79904
  };
79471
79905
  let rendered;
79472
79906
  if (OverrideComponent) {
79473
- rendered = /* @__PURE__ */ jsx152(OverrideComponent, { ...baseProps });
79907
+ rendered = /* @__PURE__ */ jsx154(OverrideComponent, { ...baseProps });
79474
79908
  } else {
79475
79909
  const BlockComponent = getCachedBlockComponent(definition.manifest);
79476
79910
  const pathBase = typeof block.id === "string" && block.id.length > 0 ? `blocks.${block.id}.` : void 0;
@@ -79495,7 +79929,7 @@ var MemoBlockSection = React35.memo(
79495
79929
  };
79496
79930
  const blockBindings = block.bindings;
79497
79931
  const fragmentRegistry2 = getFragmentRegistry();
79498
- rendered = /* @__PURE__ */ jsx152(
79932
+ rendered = /* @__PURE__ */ jsx154(
79499
79933
  BlockComponent,
79500
79934
  {
79501
79935
  ...baseProps,
@@ -79505,32 +79939,33 @@ var MemoBlockSection = React35.memo(
79505
79939
  editableRouteMetadataFieldIds: dataContext?.editableRouteMetadataFieldIds ?? void 0,
79506
79940
  viewModelOverrides: rootContext,
79507
79941
  fragmentRegistry: fragmentRegistry2,
79508
- imageResolveContext: resolvedImageResolveContext
79942
+ imageResolveContext: resolvedImageResolveContext,
79943
+ previewAuthoring
79509
79944
  }
79510
79945
  );
79511
79946
  }
79512
79947
  if (wrapBlock && block.id) {
79513
- return finish(/* @__PURE__ */ jsx152(Fragment31, { children: wrapBlock(block.id, rendered) }), {
79948
+ return finish(/* @__PURE__ */ jsx154(Fragment31, { children: wrapBlock(block.id, rendered) }), {
79514
79949
  override: Boolean(OverrideComponent),
79515
79950
  hasResolvedData
79516
79951
  });
79517
79952
  }
79518
- return finish(/* @__PURE__ */ jsx152(Fragment31, { children: rendered }), {
79953
+ return finish(/* @__PURE__ */ jsx154(Fragment31, { children: rendered }), {
79519
79954
  override: Boolean(OverrideComponent),
79520
79955
  hasResolvedData
79521
79956
  });
79522
79957
  } catch {
79523
79958
  const rendered = usePlaceholders ? fallback(`Unable to render block kind "${block.kind}".`) : fallback(`Invalid content for block kind "${block.kind}".`);
79524
- const node = wrapBlock && block.id ? /* @__PURE__ */ jsx152(Fragment31, { children: wrapBlock(block.id, rendered) }) : /* @__PURE__ */ jsx152(Fragment31, { children: rendered });
79959
+ const node = wrapBlock && block.id ? /* @__PURE__ */ jsx154(Fragment31, { children: wrapBlock(block.id, rendered) }) : /* @__PURE__ */ jsx154(Fragment31, { children: rendered });
79525
79960
  return finish(node, { outcome: "exception", override: false });
79526
79961
  }
79527
79962
  },
79528
79963
  (prev, next) => {
79529
- return prev.block === next.block && prev.registry === next.registry && prev.dataContext === next.dataContext && prev.themeTokens === next.themeTokens && prev.themeConfig === next.themeConfig && prev.routeMap === next.routeMap && prev.usePlaceholders === next.usePlaceholders && prev.wrapBlock === next.wrapBlock && prev.blockOverrides === next.blockOverrides && prev.sdkConfig === next.sdkConfig && prev.customBlocks === next.customBlocks && prev.imageResolveContext === next.imageResolveContext;
79964
+ return prev.block === next.block && prev.registry === next.registry && prev.dataContext === next.dataContext && prev.themeTokens === next.themeTokens && prev.themeConfig === next.themeConfig && prev.routeMap === next.routeMap && prev.usePlaceholders === next.usePlaceholders && prev.wrapBlock === next.wrapBlock && prev.blockOverrides === next.blockOverrides && prev.sdkConfig === next.sdkConfig && prev.customBlocks === next.customBlocks && prev.imageResolveContext === next.imageResolveContext && prev.previewAuthoring === next.previewAuthoring;
79530
79965
  }
79531
79966
  );
79532
79967
  function fallback(message) {
79533
- return /* @__PURE__ */ jsx152("div", { className: "rb-p-6 rb-caption", style: textColorStyle("mutedText"), children: message });
79968
+ return /* @__PURE__ */ jsx154("div", { className: "rb-p-6 rb-caption", style: textColorStyle("mutedText"), children: message });
79534
79969
  }
79535
79970
  function shouldDebugCustomBlocks() {
79536
79971
  try {
@@ -90519,7 +90954,7 @@ var containerResponsiveThemeCss = `/*
90519
90954
  }`;
90520
90955
 
90521
90956
  // ../theme-core/src/ThemeScopeCore.tsx
90522
- import { jsx as jsx153, jsxs as jsxs99 } from "react/jsx-runtime";
90957
+ import { jsx as jsx155, jsxs as jsxs100 } from "react/jsx-runtime";
90523
90958
  function ThemeScopeCore({
90524
90959
  cssVars,
90525
90960
  buttonCss,
@@ -90551,7 +90986,7 @@ function ThemeScopeCore({
90551
90986
  containerType: "inline-size",
90552
90987
  containerName: responsiveScope.containerName
90553
90988
  } : cssVars;
90554
- return /* @__PURE__ */ jsxs99(
90989
+ return /* @__PURE__ */ jsxs100(
90555
90990
  "div",
90556
90991
  {
90557
90992
  className: className ? `theme-scope ${className}` : "theme-scope",
@@ -90560,7 +90995,7 @@ function ThemeScopeCore({
90560
90995
  ...dataAttrs,
90561
90996
  suppressHydrationWarning,
90562
90997
  children: [
90563
- isContainerResponsive && /* @__PURE__ */ jsx153(
90998
+ isContainerResponsive && /* @__PURE__ */ jsx155(
90564
90999
  "style",
90565
91000
  {
90566
91001
  "data-container-responsive-overrides": true,
@@ -90569,70 +91004,70 @@ function ThemeScopeCore({
90569
91004
  }
90570
91005
  }
90571
91006
  ),
90572
- layoutCss && /* @__PURE__ */ jsx153(
91007
+ layoutCss && /* @__PURE__ */ jsx155(
90573
91008
  "style",
90574
91009
  {
90575
91010
  "data-layout-styles": true,
90576
91011
  dangerouslySetInnerHTML: { __html: escapeStyleContent(layoutCss) }
90577
91012
  }
90578
91013
  ),
90579
- buttonCss && /* @__PURE__ */ jsx153(
91014
+ buttonCss && /* @__PURE__ */ jsx155(
90580
91015
  "style",
90581
91016
  {
90582
91017
  "data-button-effects": true,
90583
91018
  dangerouslySetInnerHTML: { __html: escapeStyleContent(buttonCss) }
90584
91019
  }
90585
91020
  ),
90586
- headerCss && /* @__PURE__ */ jsx153(
91021
+ headerCss && /* @__PURE__ */ jsx155(
90587
91022
  "style",
90588
91023
  {
90589
91024
  "data-header-styles": true,
90590
91025
  dangerouslySetInnerHTML: { __html: escapeStyleContent(headerCss) }
90591
91026
  }
90592
91027
  ),
90593
- footerCss && /* @__PURE__ */ jsx153(
91028
+ footerCss && /* @__PURE__ */ jsx155(
90594
91029
  "style",
90595
91030
  {
90596
91031
  "data-footer-styles": true,
90597
91032
  dangerouslySetInnerHTML: { __html: escapeStyleContent(footerCss) }
90598
91033
  }
90599
91034
  ),
90600
- cardCss && /* @__PURE__ */ jsx153(
91035
+ cardCss && /* @__PURE__ */ jsx155(
90601
91036
  "style",
90602
91037
  {
90603
91038
  "data-card-styles": true,
90604
91039
  dangerouslySetInnerHTML: { __html: escapeStyleContent(cardCss) }
90605
91040
  }
90606
91041
  ),
90607
- accordionCss && /* @__PURE__ */ jsx153(
91042
+ accordionCss && /* @__PURE__ */ jsx155(
90608
91043
  "style",
90609
91044
  {
90610
91045
  "data-accordion-styles": true,
90611
91046
  dangerouslySetInnerHTML: { __html: escapeStyleContent(accordionCss) }
90612
91047
  }
90613
91048
  ),
90614
- inputCss && /* @__PURE__ */ jsx153(
91049
+ inputCss && /* @__PURE__ */ jsx155(
90615
91050
  "style",
90616
91051
  {
90617
91052
  "data-input-styles": true,
90618
91053
  dangerouslySetInnerHTML: { __html: escapeStyleContent(inputCss) }
90619
91054
  }
90620
91055
  ),
90621
- statusCss && /* @__PURE__ */ jsx153(
91056
+ statusCss && /* @__PURE__ */ jsx155(
90622
91057
  "style",
90623
91058
  {
90624
91059
  "data-status-styles": true,
90625
91060
  dangerouslySetInnerHTML: { __html: escapeStyleContent(statusCss) }
90626
91061
  }
90627
91062
  ),
90628
- progressCss && /* @__PURE__ */ jsx153(
91063
+ progressCss && /* @__PURE__ */ jsx155(
90629
91064
  "style",
90630
91065
  {
90631
91066
  "data-progress-styles": true,
90632
91067
  dangerouslySetInnerHTML: { __html: escapeStyleContent(progressCss) }
90633
91068
  }
90634
91069
  ),
90635
- typographyCss && /* @__PURE__ */ jsx153(
91070
+ typographyCss && /* @__PURE__ */ jsx155(
90636
91071
  "style",
90637
91072
  {
90638
91073
  "data-typography-styles": true,
@@ -90641,7 +91076,7 @@ function ThemeScopeCore({
90641
91076
  }
90642
91077
  }
90643
91078
  ),
90644
- eventCalendarCss && /* @__PURE__ */ jsx153(
91079
+ eventCalendarCss && /* @__PURE__ */ jsx155(
90645
91080
  "style",
90646
91081
  {
90647
91082
  "data-event-calendar-styles": true,
@@ -90650,14 +91085,14 @@ function ThemeScopeCore({
90650
91085
  }
90651
91086
  }
90652
91087
  ),
90653
- blockVarsCss && /* @__PURE__ */ jsx153(
91088
+ blockVarsCss && /* @__PURE__ */ jsx155(
90654
91089
  "style",
90655
91090
  {
90656
91091
  "data-block-vars-styles": true,
90657
91092
  dangerouslySetInnerHTML: { __html: escapeStyleContent(blockVarsCss) }
90658
91093
  }
90659
91094
  ),
90660
- blockCustomVarsCss && /* @__PURE__ */ jsx153(
91095
+ blockCustomVarsCss && /* @__PURE__ */ jsx155(
90661
91096
  "style",
90662
91097
  {
90663
91098
  "data-block-custom-vars-styles": true,
@@ -90666,7 +91101,7 @@ function ThemeScopeCore({
90666
91101
  }
90667
91102
  }
90668
91103
  ),
90669
- blockCustomCss && /* @__PURE__ */ jsx153(
91104
+ blockCustomCss && /* @__PURE__ */ jsx155(
90670
91105
  "style",
90671
91106
  {
90672
91107
  "data-block-custom-styles": true,
@@ -90675,14 +91110,14 @@ function ThemeScopeCore({
90675
91110
  }
90676
91111
  }
90677
91112
  ),
90678
- atRulesCss && /* @__PURE__ */ jsx153(
91113
+ atRulesCss && /* @__PURE__ */ jsx155(
90679
91114
  "style",
90680
91115
  {
90681
91116
  "data-at-rules-styles": true,
90682
91117
  dangerouslySetInnerHTML: { __html: escapeStyleContent(atRulesCss) }
90683
91118
  }
90684
91119
  ),
90685
- customCss && /* @__PURE__ */ jsx153(
91120
+ customCss && /* @__PURE__ */ jsx155(
90686
91121
  "style",
90687
91122
  {
90688
91123
  "data-custom-theme-styles": true,
@@ -90709,7 +91144,7 @@ function buildThemeDataAttrs(axes, themeId) {
90709
91144
  }
90710
91145
 
90711
91146
  // ../theme-core/src/ThemeScope.tsx
90712
- import { jsx as jsx154 } from "react/jsx-runtime";
91147
+ import { jsx as jsx156 } from "react/jsx-runtime";
90713
91148
  function ThemeScope({
90714
91149
  theme,
90715
91150
  children,
@@ -90719,7 +91154,7 @@ function ThemeScope({
90719
91154
  }) {
90720
91155
  const runtime = buildThemeRuntime(theme, { themeId, responsiveMode });
90721
91156
  const dataAttrs = buildThemeDataAttrs(theme.axes, themeId);
90722
- return /* @__PURE__ */ jsx154(
91157
+ return /* @__PURE__ */ jsx156(
90723
91158
  ThemeScopeCore,
90724
91159
  {
90725
91160
  cssVars: runtime.cssVars,
@@ -90781,10 +91216,10 @@ init_breakpoints();
90781
91216
 
90782
91217
  // ../theme-core/src/ThemeFontLoader.tsx
90783
91218
  import * as React36 from "react";
90784
- import { Fragment as Fragment32, jsx as jsx155, jsxs as jsxs100 } from "react/jsx-runtime";
91219
+ import { Fragment as Fragment32, jsx as jsx157, jsxs as jsxs101 } from "react/jsx-runtime";
90785
91220
 
90786
91221
  // ../theme-core/src/ResponsiveScope.tsx
90787
- import { jsx as jsx156, jsxs as jsxs101 } from "react/jsx-runtime";
91222
+ import { jsx as jsx158, jsxs as jsxs102 } from "react/jsx-runtime";
90788
91223
  function ResponsiveScope({
90789
91224
  children,
90790
91225
  responsiveMode = DEFAULT_THEME_RESPONSIVE_MODE,
@@ -90796,7 +91231,7 @@ function ResponsiveScope({
90796
91231
  containerType: "inline-size",
90797
91232
  containerName: responsiveScope.containerName
90798
91233
  } : {};
90799
- return /* @__PURE__ */ jsxs101(
91234
+ return /* @__PURE__ */ jsxs102(
90800
91235
  "div",
90801
91236
  {
90802
91237
  className: className ? `theme-scope ${className}` : "theme-scope",
@@ -90804,7 +91239,7 @@ function ResponsiveScope({
90804
91239
  "data-rb-responsive-mode": responsiveScope.kind,
90805
91240
  "data-theme-scope": "responsive",
90806
91241
  children: [
90807
- isContainerResponsive && /* @__PURE__ */ jsx156(
91242
+ isContainerResponsive && /* @__PURE__ */ jsx158(
90808
91243
  "style",
90809
91244
  {
90810
91245
  "data-container-responsive-overrides": true,
@@ -90821,40 +91256,40 @@ function ResponsiveScope({
90821
91256
 
90822
91257
  // ../theme-core/src/siteChrome.tsx
90823
91258
  init_types3();
90824
- import { Fragment as Fragment33, jsx as jsx157, jsxs as jsxs102 } from "react/jsx-runtime";
91259
+ import { Fragment as Fragment33, jsx as jsx159, jsxs as jsxs103 } from "react/jsx-runtime";
90825
91260
 
90826
91261
  // ../theme-core/src/runtime/buildThemeRuntimeFromBridge.ts
90827
91262
  init_colorConversion();
90828
- import { z as z69 } from "zod";
91263
+ import { z as z70 } from "zod";
90829
91264
  init_core2();
90830
91265
  init_core3();
90831
- var themeBridgeConfigSchema = z69.object({
90832
- tokens: z69.record(z69.string(), z69.string()),
90833
- typography: z69.object({
90834
- headingFamily: z69.string().optional(),
90835
- bodyFamily: z69.string().optional(),
90836
- headingWeight: z69.number().optional(),
90837
- bodyWeight: z69.number().optional()
91266
+ var themeBridgeConfigSchema = z70.object({
91267
+ tokens: z70.record(z70.string(), z70.string()),
91268
+ typography: z70.object({
91269
+ headingFamily: z70.string().optional(),
91270
+ bodyFamily: z70.string().optional(),
91271
+ headingWeight: z70.number().optional(),
91272
+ bodyWeight: z70.number().optional()
90838
91273
  }).optional(),
90839
- spacing: z69.enum(["comfortable", "standard", "dense"]).optional(),
90840
- corners: z69.enum(["square", "soft", "rounded", "pill"]).optional(),
90841
- shadows: z69.enum(["none", "low", "medium", "high"]).optional(),
90842
- components: z69.object({
90843
- buttons: z69.union([
90844
- z69.boolean(),
90845
- z69.object({
90846
- variants: z69.array(z69.enum(["primary", "secondary", "outline", "ghost"])).optional()
91274
+ spacing: z70.enum(["comfortable", "standard", "dense"]).optional(),
91275
+ corners: z70.enum(["square", "soft", "rounded", "pill"]).optional(),
91276
+ shadows: z70.enum(["none", "low", "medium", "high"]).optional(),
91277
+ components: z70.object({
91278
+ buttons: z70.union([
91279
+ z70.boolean(),
91280
+ z70.object({
91281
+ variants: z70.array(z70.enum(["primary", "secondary", "outline", "ghost"])).optional()
90847
91282
  })
90848
91283
  ]).optional(),
90849
- cards: z69.union([
90850
- z69.boolean(),
90851
- z69.object({
90852
- variants: z69.array(z69.enum(["default", "elevated", "outlined"])).optional()
91284
+ cards: z70.union([
91285
+ z70.boolean(),
91286
+ z70.object({
91287
+ variants: z70.array(z70.enum(["default", "elevated", "outlined"])).optional()
90853
91288
  })
90854
91289
  ]).optional(),
90855
- inputs: z69.boolean().optional()
91290
+ inputs: z70.boolean().optional()
90856
91291
  }).optional(),
90857
- overrides: z69.record(z69.string(), z69.string()).optional()
91292
+ overrides: z70.record(z70.string(), z70.string()).optional()
90858
91293
  }).passthrough();
90859
91294
 
90860
91295
  // ../theme-core/src/index.ts
@@ -90973,7 +91408,7 @@ function ThemeScope2(props2) {
90973
91408
  }
90974
91409
 
90975
91410
  // src/rendering/themeRuntime.tsx
90976
- import { Fragment as Fragment34, jsx as jsx158 } from "react/jsx-runtime";
91411
+ import { Fragment as Fragment34, jsx as jsx160 } from "react/jsx-runtime";
90977
91412
  var defaultLayoutThemeRuntime = {
90978
91413
  kind: "cms-theme"
90979
91414
  };
@@ -91002,18 +91437,18 @@ function renderWithSdkThemeRuntime({
91002
91437
  }) {
91003
91438
  switch (themeRuntime.kind) {
91004
91439
  case "cms-theme":
91005
- return /* @__PURE__ */ jsx158(ThemeScope2, { theme, responsiveMode: themeRuntime.responsiveMode, children });
91440
+ return /* @__PURE__ */ jsx160(ThemeScope2, { theme, responsiveMode: themeRuntime.responsiveMode, children });
91006
91441
  case "responsive-only":
91007
- return /* @__PURE__ */ jsx158(ResponsiveScope, { responsiveMode: themeRuntime.responsiveMode, children });
91442
+ return /* @__PURE__ */ jsx160(ResponsiveScope, { responsiveMode: themeRuntime.responsiveMode, children });
91008
91443
  case "none":
91009
- return /* @__PURE__ */ jsx158(Fragment34, { children });
91444
+ return /* @__PURE__ */ jsx160(Fragment34, { children });
91010
91445
  default:
91011
91446
  return assertNever(themeRuntime);
91012
91447
  }
91013
91448
  }
91014
91449
 
91015
91450
  // src/rendering/components/pageShared.tsx
91016
- import { jsx as jsx159 } from "react/jsx-runtime";
91451
+ import { jsx as jsx161 } from "react/jsx-runtime";
91017
91452
  function toPageHydrationBootstrapConfig(props2) {
91018
91453
  return {
91019
91454
  siteId: props2.siteId,
@@ -91047,7 +91482,7 @@ function PageContent({
91047
91482
  }) {
91048
91483
  const baseTokens = providedTokens ?? buildThemeRuntime2(theme).tokens;
91049
91484
  const themeTokens = sdkConfig?.theme?.palette ? { ...baseTokens, palette: { ...baseTokens.palette, ...sdkConfig.theme.palette } } : baseTokens;
91050
- const content = /* @__PURE__ */ jsx159(
91485
+ const content = /* @__PURE__ */ jsx161(
91051
91486
  PageRenderer2,
91052
91487
  {
91053
91488
  theme,
@@ -91093,12 +91528,12 @@ function PageContent({
91093
91528
  }
91094
91529
 
91095
91530
  // src/rendering/components/Page.tsx
91096
- import { Fragment as Fragment35, jsx as jsx160, jsxs as jsxs103 } from "react/jsx-runtime";
91531
+ import { Fragment as Fragment35, jsx as jsx162, jsxs as jsxs104 } from "react/jsx-runtime";
91097
91532
  var HydratorWithContextProps = BlocksIslandsHydrator;
91098
91533
  function Page(props2) {
91099
- return /* @__PURE__ */ jsxs103(Fragment35, { children: [
91100
- /* @__PURE__ */ jsx160(HydratorWithContextProps, { ...toPageHydrationBootstrapConfig(props2) }),
91101
- /* @__PURE__ */ jsx160(PageContent, { ...props2 })
91534
+ return /* @__PURE__ */ jsxs104(Fragment35, { children: [
91535
+ /* @__PURE__ */ jsx162(HydratorWithContextProps, { ...toPageHydrationBootstrapConfig(props2) }),
91536
+ /* @__PURE__ */ jsx162(PageContent, { ...props2 })
91102
91537
  ] });
91103
91538
  }
91104
91539
 
@@ -91536,7 +91971,7 @@ function buildLogo(logo, fallbackAlt) {
91536
91971
  }
91537
91972
 
91538
91973
  // src/rendering/components/Layout.tsx
91539
- import { Fragment as Fragment36, jsx as jsx161, jsxs as jsxs104 } from "react/jsx-runtime";
91974
+ import { Fragment as Fragment36, jsx as jsx163, jsxs as jsxs105 } from "react/jsx-runtime";
91540
91975
  async function Layout({
91541
91976
  siteData: providedSiteData,
91542
91977
  client,
@@ -91644,7 +92079,7 @@ async function Layout({
91644
92079
  isSdkSite,
91645
92080
  mode: theme.footer?.mode
91646
92081
  });
91647
- const footerBlocksElement = footerPlan.renderFooterBlocks && footerBlocks.length > 0 ? /* @__PURE__ */ jsx161(
92082
+ const footerBlocksElement = footerPlan.renderFooterBlocks && footerBlocks.length > 0 ? /* @__PURE__ */ jsx163(
91648
92083
  PageRenderer2,
91649
92084
  {
91650
92085
  theme,
@@ -91680,14 +92115,14 @@ async function Layout({
91680
92115
  themeConfig: blocksTheme,
91681
92116
  viewModelOverrides
91682
92117
  }) : null;
91683
- footerElement = footerPlan.mode === "default+blocks" ? /* @__PURE__ */ jsxs104(Fragment36, { children: [
92118
+ footerElement = footerPlan.mode === "default+blocks" ? /* @__PURE__ */ jsxs105(Fragment36, { children: [
91684
92119
  footerBlocksElement,
91685
92120
  defaultFooterElement
91686
92121
  ] }) : footerPlan.mode === "blocks" ? footerBlocksElement : footerPlan.mode === "none" ? null : defaultFooterElement;
91687
92122
  } else if (typeof footer === "function") {
91688
92123
  footerElement = footer(footerData);
91689
92124
  }
91690
- const content = /* @__PURE__ */ jsxs104(Fragment36, { children: [
92125
+ const content = /* @__PURE__ */ jsxs105(Fragment36, { children: [
91691
92126
  headerElement,
91692
92127
  children,
91693
92128
  footerElement
@@ -91941,14 +92376,21 @@ function coercePayload(payload) {
91941
92376
 
91942
92377
  // ../blocks/src/system/data/prefetchBlockData.ts
91943
92378
  async function prefetchBlockData(page, context, options) {
91944
- const { apiClient, isValidEndpoint, onError, getCustomBlockLoaders } = options;
92379
+ const {
92380
+ apiClient,
92381
+ isValidEndpoint,
92382
+ onError,
92383
+ getCustomBlockLoaders,
92384
+ getBlockDefinition: getBlockDefinition2 = getBlockDefinition,
92385
+ resolveParamsBindings: resolveParamsBindings2 = resolveParamsBindings
92386
+ } = options;
91945
92387
  const results = {};
91946
92388
  const tasks = [];
91947
92389
  for (const block of page.blocks) {
91948
92390
  const blockId = block.id;
91949
92391
  if (!blockId) continue;
91950
92392
  let loaders;
91951
- const def = getBlockDefinition(block.kind);
92393
+ const def = getBlockDefinition2(block.kind);
91952
92394
  if (def) {
91953
92395
  loaders = normalizeDataLoaders(def);
91954
92396
  } else if (getCustomBlockLoaders) {
@@ -91971,14 +92413,14 @@ async function prefetchBlockData(page, context, options) {
91971
92413
  continue;
91972
92414
  }
91973
92415
  if (typeof loader.when !== "undefined") {
91974
- const resolvedWhen = resolveParamsBindings(loader.when, vm, {
92416
+ const resolvedWhen = resolveParamsBindings2(loader.when, vm, {
91975
92417
  blockKind: block.kind
91976
92418
  });
91977
92419
  if (resolvedWhen !== true) {
91978
92420
  continue;
91979
92421
  }
91980
92422
  }
91981
- const rawParams = resolveParamsBindings(loader.params, vm, {
92423
+ const rawParams = resolveParamsBindings2(loader.params, vm, {
91982
92424
  blockKind: block.kind
91983
92425
  });
91984
92426
  const params = normalizeParams(rawParams);
@@ -92021,7 +92463,8 @@ var SUPPORTED_LOADER_ENDPOINTS = [
92021
92463
  "listPublicPasses",
92022
92464
  "listPublicMemberships",
92023
92465
  "getPublicFormById",
92024
- "getPublicBookingServices"
92466
+ "getPublicBookingServices",
92467
+ "getPublicWeeklySlotAvailability"
92025
92468
  ];
92026
92469
 
92027
92470
  // ../blocks/src/system/data/normalizeLoaderParams.ts
@@ -92061,6 +92504,10 @@ function normalizeLoaderParams(endpoint, params, context) {
92061
92504
  ensureSiteId(out, context);
92062
92505
  return out;
92063
92506
  }
92507
+ if (endpoint === "getPublicWeeklySlotAvailability") {
92508
+ ensureSiteId(out, context);
92509
+ return out;
92510
+ }
92064
92511
  if (endpoint === "listPublicEvents") {
92065
92512
  ensureSiteId(out, context);
92066
92513
  return out;
@@ -93136,6 +93583,94 @@ var ENDPOINT_DEFINITIONS = {
93136
93583
  responseKind: "json",
93137
93584
  errors: ["resource:not_found", "server:internal_error"]
93138
93585
  },
93586
+ listAppointmentReservations: {
93587
+ path: "/sites/{siteId}/bookings/appointment-reservations",
93588
+ method: "GET",
93589
+ auth: "user",
93590
+ responseKind: "json",
93591
+ errors: []
93592
+ },
93593
+ createAppointmentReservation: {
93594
+ path: "/sites/{siteId}/bookings/appointment-reservations",
93595
+ method: "POST",
93596
+ auth: "user",
93597
+ responseKind: "json",
93598
+ errors: [
93599
+ "validation:invalid_input",
93600
+ "resource:not_found",
93601
+ "resource:conflict",
93602
+ "server:internal_error"
93603
+ ]
93604
+ },
93605
+ getAppointmentReservation: {
93606
+ path: "/sites/{siteId}/bookings/appointment-reservations/{reservationId}",
93607
+ method: "GET",
93608
+ auth: "user",
93609
+ responseKind: "json",
93610
+ errors: ["resource:not_found", "server:internal_error"]
93611
+ },
93612
+ updateAppointmentReservation: {
93613
+ path: "/sites/{siteId}/bookings/appointment-reservations/{reservationId}",
93614
+ method: "PUT",
93615
+ auth: "user",
93616
+ responseKind: "json",
93617
+ errors: [
93618
+ "validation:invalid_input",
93619
+ "resource:not_found",
93620
+ "resource:conflict",
93621
+ "server:internal_error"
93622
+ ]
93623
+ },
93624
+ pauseAppointmentReservation: {
93625
+ path: "/sites/{siteId}/bookings/appointment-reservations/{reservationId}/pause",
93626
+ method: "POST",
93627
+ auth: "user",
93628
+ responseKind: "json",
93629
+ errors: ["resource:not_found", "resource:conflict", "server:internal_error"]
93630
+ },
93631
+ resumeAppointmentReservation: {
93632
+ path: "/sites/{siteId}/bookings/appointment-reservations/{reservationId}/resume",
93633
+ method: "POST",
93634
+ auth: "user",
93635
+ responseKind: "json",
93636
+ errors: ["resource:not_found", "resource:conflict", "server:internal_error"]
93637
+ },
93638
+ endAppointmentReservation: {
93639
+ path: "/sites/{siteId}/bookings/appointment-reservations/{reservationId}/end",
93640
+ method: "POST",
93641
+ auth: "user",
93642
+ responseKind: "json",
93643
+ errors: [
93644
+ "validation:invalid_input",
93645
+ "resource:not_found",
93646
+ "resource:conflict",
93647
+ "server:internal_error"
93648
+ ]
93649
+ },
93650
+ previewAppointmentReservationRun: {
93651
+ path: "/sites/{siteId}/bookings/appointment-reservations/{reservationId}/run-preview",
93652
+ method: "POST",
93653
+ auth: "user",
93654
+ responseKind: "json",
93655
+ errors: [
93656
+ "validation:invalid_input",
93657
+ "resource:not_found",
93658
+ "resource:conflict",
93659
+ "server:internal_error"
93660
+ ]
93661
+ },
93662
+ createAppointmentReservationRun: {
93663
+ path: "/sites/{siteId}/bookings/appointment-reservations/{reservationId}/runs",
93664
+ method: "POST",
93665
+ auth: "user",
93666
+ responseKind: "json",
93667
+ errors: [
93668
+ "validation:invalid_input",
93669
+ "resource:not_found",
93670
+ "resource:conflict",
93671
+ "server:internal_error"
93672
+ ]
93673
+ },
93139
93674
  createTeamMemberProfile: {
93140
93675
  path: "/sites/{siteId}/bookings/resources/{resourceId}/profile",
93141
93676
  method: "POST",
@@ -95592,6 +96127,18 @@ var ENDPOINT_DEFINITIONS = {
95592
96127
  responseKind: "json",
95593
96128
  errors: ["validation:invalid_input", "server:internal_error"]
95594
96129
  },
96130
+ resolveRouteDecision: {
96131
+ path: "/sites/{siteId}/route-decision",
96132
+ method: "GET",
96133
+ tags: [
96134
+ TAG_TEMPLATES.siteRoutableContent,
96135
+ TAG_TEMPLATES.siteRedirects,
96136
+ TAG_TEMPLATES.siteRouteOutcomes
96137
+ ],
96138
+ auth: "public",
96139
+ responseKind: "json",
96140
+ errors: ["validation:invalid_input", "server:internal_error"]
96141
+ },
95595
96142
  getPageByPath: {
95596
96143
  path: "/sites/{siteId}/pages",
95597
96144
  method: "GET",
@@ -95730,6 +96277,15 @@ var ENDPOINT_DEFINITIONS = {
95730
96277
  auth: "public",
95731
96278
  responseKind: "json"
95732
96279
  },
96280
+ getPublicWeeklySlotAvailability: {
96281
+ path: "/public/bookings/weekly-slot-availability",
96282
+ method: "GET",
96283
+ revalidate: 60,
96284
+ tags: ["site-{siteId}"],
96285
+ auth: "public",
96286
+ responseKind: "json",
96287
+ errors: []
96288
+ },
95733
96289
  createPublicBookingAppointment: {
95734
96290
  path: "/public/bookings/appointments",
95735
96291
  method: "POST",
@@ -98551,16 +99107,16 @@ var ENDPOINT_DEFINITIONS = {
98551
99107
  };
98552
99108
 
98553
99109
  // ../api/src/accessAdmin.ts
98554
- import { z as z70 } from "zod";
98555
- var managedDomainAddOnPricingSnapshotSchema = z70.object({
98556
- formulaVersion: z70.literal("managed-domain-overage-v1"),
98557
- conversionRule: z70.literal("usd-to-gbp-1-to-1-v1"),
98558
- registrarAnnualCost: z70.number().nonnegative(),
98559
- registrarCurrency: z70.literal("USD"),
98560
- includedAnnualAllowance: z70.number().nonnegative(),
98561
- includedAnnualAllowanceCurrency: z70.literal("USD"),
98562
- monthlyAmountCents: z70.number().int().nonnegative(),
98563
- monthlyCurrency: z70.literal("gbp")
99110
+ import { z as z71 } from "zod";
99111
+ var managedDomainAddOnPricingSnapshotSchema = z71.object({
99112
+ formulaVersion: z71.literal("managed-domain-overage-v1"),
99113
+ conversionRule: z71.literal("usd-to-gbp-1-to-1-v1"),
99114
+ registrarAnnualCost: z71.number().nonnegative(),
99115
+ registrarCurrency: z71.literal("USD"),
99116
+ includedAnnualAllowance: z71.number().nonnegative(),
99117
+ includedAnnualAllowanceCurrency: z71.literal("USD"),
99118
+ monthlyAmountCents: z71.number().int().nonnegative(),
99119
+ monthlyCurrency: z71.literal("gbp")
98564
99120
  });
98565
99121
 
98566
99122
  // ../api/src/media.ts
@@ -98578,60 +99134,60 @@ var SITE_BACKGROUND_ASSET_USES2 = [
98578
99134
  ];
98579
99135
 
98580
99136
  // ../api/src/navigation/contracts.ts
98581
- import { z as z71 } from "zod";
98582
- var portalLinkPayloadSchema = z71.object({
98583
- kind: z71.literal("portal"),
98584
- path: z71.string().trim().startsWith("/").optional(),
98585
- labels: z71.object({
98586
- loggedOut: z71.string().trim().min(1).optional(),
98587
- loggedIn: z71.string().trim().min(1).optional()
99137
+ import { z as z72 } from "zod";
99138
+ var portalLinkPayloadSchema = z72.object({
99139
+ kind: z72.literal("portal"),
99140
+ path: z72.string().trim().startsWith("/").optional(),
99141
+ labels: z72.object({
99142
+ loggedOut: z72.string().trim().min(1).optional(),
99143
+ loggedIn: z72.string().trim().min(1).optional()
98588
99144
  }).optional()
98589
99145
  });
98590
- var cartLinkLabelConfigSchema = z71.discriminatedUnion("kind", [
98591
- z71.object({
98592
- kind: z71.literal("icon-only")
99146
+ var cartLinkLabelConfigSchema = z72.discriminatedUnion("kind", [
99147
+ z72.object({
99148
+ kind: z72.literal("icon-only")
98593
99149
  }),
98594
- z71.object({
98595
- kind: z71.literal("icon-with-label"),
98596
- label: z71.string().trim().min(1)
99150
+ z72.object({
99151
+ kind: z72.literal("icon-with-label"),
99152
+ label: z72.string().trim().min(1)
98597
99153
  })
98598
99154
  ]);
98599
- var cartLinkPayloadSchema = z71.object({
98600
- kind: z71.literal("cart"),
98601
- badge: z71.enum(["show-count", "hidden"]),
99155
+ var cartLinkPayloadSchema = z72.object({
99156
+ kind: z72.literal("cart"),
99157
+ badge: z72.enum(["show-count", "hidden"]),
98602
99158
  label: cartLinkLabelConfigSchema
98603
99159
  });
98604
- var internalLinkPayloadSchema = z71.object({
98605
- kind: z71.literal("internal"),
98606
- routeId: z71.string().uuid(),
98607
- entityId: z71.string().uuid(),
98608
- entityType: z71.enum(["page", "content"]),
98609
- href: z71.string().min(1),
98610
- title: z71.string().min(1),
98611
- typeLabel: z71.string().min(1),
98612
- contentTypeKey: z71.string().nullable().optional(),
98613
- contentTypeName: z71.string().nullable().optional(),
98614
- updatedAt: z71.string().nullable().optional()
99160
+ var internalLinkPayloadSchema = z72.object({
99161
+ kind: z72.literal("internal"),
99162
+ routeId: z72.string().uuid(),
99163
+ entityId: z72.string().uuid(),
99164
+ entityType: z72.enum(["page", "content"]),
99165
+ href: z72.string().min(1),
99166
+ title: z72.string().min(1),
99167
+ typeLabel: z72.string().min(1),
99168
+ contentTypeKey: z72.string().nullable().optional(),
99169
+ contentTypeName: z72.string().nullable().optional(),
99170
+ updatedAt: z72.string().nullable().optional()
98615
99171
  }).passthrough();
98616
- var externalLinkSchema2 = z71.object({
98617
- kind: z71.literal("external"),
99172
+ var externalLinkSchema2 = z72.object({
99173
+ kind: z72.literal("external"),
98618
99174
  // Navigation external links are expected to be absolute URLs.
98619
- href: z71.string().url()
99175
+ href: z72.string().url()
98620
99176
  });
98621
- var customLinkSchema2 = z71.object({
98622
- kind: z71.literal("url"),
98623
- href: z71.string().min(1)
99177
+ var customLinkSchema2 = z72.object({
99178
+ kind: z72.literal("url"),
99179
+ href: z72.string().min(1)
98624
99180
  });
98625
- var pageLinkSchema2 = z71.object({
98626
- kind: z71.literal("page"),
98627
- identifier: z71.string().min(1)
99181
+ var pageLinkSchema2 = z72.object({
99182
+ kind: z72.literal("page"),
99183
+ identifier: z72.string().min(1)
98628
99184
  });
98629
- var entryLinkSchema2 = z71.object({
98630
- kind: z71.literal("entry"),
98631
- contentType: z71.string().min(1),
98632
- identifier: z71.string().min(1)
99185
+ var entryLinkSchema2 = z72.object({
99186
+ kind: z72.literal("entry"),
99187
+ contentType: z72.string().min(1),
99188
+ identifier: z72.string().min(1)
98633
99189
  });
98634
- var linkPayloadSchema = z71.discriminatedUnion("kind", [
99190
+ var linkPayloadSchema = z72.discriminatedUnion("kind", [
98635
99191
  internalLinkPayloadSchema,
98636
99192
  pageLinkSchema2,
98637
99193
  entryLinkSchema2,
@@ -98648,27 +99204,27 @@ var navigationLinkInputSchemaOptions = [
98648
99204
  portalLinkPayloadSchema,
98649
99205
  cartLinkPayloadSchema
98650
99206
  ];
98651
- var navigationLinkInputSchema = z71.discriminatedUnion(
99207
+ var navigationLinkInputSchema = z72.discriminatedUnion(
98652
99208
  "kind",
98653
99209
  navigationLinkInputSchemaOptions
98654
99210
  );
98655
99211
 
98656
99212
  // ../api/src/sdkConfig/contracts.ts
98657
- import { z as z72 } from "zod";
99213
+ import { z as z73 } from "zod";
98658
99214
  function unsafeRetypeZodSchema(schema) {
98659
99215
  return schema;
98660
99216
  }
98661
- var navIdListSchema = z72.preprocess((value) => {
99217
+ var navIdListSchema = z73.preprocess((value) => {
98662
99218
  if (!Array.isArray(value)) return void 0;
98663
99219
  const filtered = value.filter((v) => typeof v === "string" && v.trim().length > 0);
98664
99220
  return filtered.length > 0 ? filtered : void 0;
98665
- }, z72.array(z72.string()).max(200).optional());
98666
- var dashboardNavVisibilityBaseSchema = z72.object({
98667
- mode: z72.enum(["augment", "restrict"]).optional(),
99221
+ }, z73.array(z73.string()).max(200).optional());
99222
+ var dashboardNavVisibilityBaseSchema = z73.object({
99223
+ mode: z73.enum(["augment", "restrict"]).optional(),
98668
99224
  allowIds: navIdListSchema,
98669
99225
  denyIds: navIdListSchema
98670
99226
  }).strip();
98671
- var dashboardNavVisibilityRolesSchema = z72.object({
99227
+ var dashboardNavVisibilityRolesSchema = z73.object({
98672
99228
  administrator: dashboardNavVisibilityBaseSchema.optional(),
98673
99229
  editor: dashboardNavVisibilityBaseSchema.optional(),
98674
99230
  team_member: dashboardNavVisibilityBaseSchema.optional()
@@ -98676,63 +99232,63 @@ var dashboardNavVisibilityRolesSchema = z72.object({
98676
99232
  var dashboardNavVisibilitySchema = dashboardNavVisibilityBaseSchema.extend({
98677
99233
  roles: dashboardNavVisibilityRolesSchema
98678
99234
  }).strip();
98679
- var dashboardNavigationConfigSchema = z72.object({
99235
+ var dashboardNavigationConfigSchema = z73.object({
98680
99236
  siteNav: dashboardNavVisibilitySchema.optional(),
98681
99237
  settingsNav: dashboardNavVisibilitySchema.optional()
98682
99238
  }).strip();
98683
- var dashboardConfigSchema = z72.object({
98684
- previewEditingEnabled: z72.boolean().optional(),
99239
+ var dashboardConfigSchema = z73.object({
99240
+ previewEditingEnabled: z73.boolean().optional(),
98685
99241
  navigation: dashboardNavigationConfigSchema.optional()
98686
99242
  }).strip();
98687
99243
  var fieldDefinitionInputSchema = unsafeRetypeZodSchema(fieldSchema);
98688
99244
  var nodeDefinitionSchema = unsafeRetypeZodSchema(NodeSchema);
98689
- var sdkLoaderEndpointSchema = z72.enum(SUPPORTED_LOADER_ENDPOINTS);
98690
- var loaderFallbackScalarSchema = z72.union([
98691
- z72.string(),
98692
- z72.number(),
98693
- z72.boolean(),
98694
- z72.null()
99245
+ var sdkLoaderEndpointSchema = z73.enum(SUPPORTED_LOADER_ENDPOINTS);
99246
+ var loaderFallbackScalarSchema = z73.union([
99247
+ z73.string(),
99248
+ z73.number(),
99249
+ z73.boolean(),
99250
+ z73.null()
98695
99251
  ]);
98696
- var loaderParamBindingSchema = z72.object({
98697
- $bind: z72.object({
98698
- from: z72.string().min(1, "Binding path is required"),
99252
+ var loaderParamBindingSchema = z73.object({
99253
+ $bind: z73.object({
99254
+ from: z73.string().min(1, "Binding path is required"),
98699
99255
  fallback: loaderFallbackScalarSchema.optional()
98700
99256
  })
98701
99257
  });
98702
- var loaderParamValueSchema = z72.union([
98703
- z72.string(),
98704
- z72.number(),
98705
- z72.boolean(),
99258
+ var loaderParamValueSchema = z73.union([
99259
+ z73.string(),
99260
+ z73.number(),
99261
+ z73.boolean(),
98706
99262
  loaderParamBindingSchema
98707
99263
  ]);
98708
- var sdkConfigLoaderSchema = z72.object({
99264
+ var sdkConfigLoaderSchema = z73.object({
98709
99265
  endpoint: sdkLoaderEndpointSchema,
98710
- params: z72.record(z72.string(), loaderParamValueSchema),
98711
- mode: z72.enum(["server", "client"]).default("server")
99266
+ params: z73.record(z73.string(), loaderParamValueSchema),
99267
+ mode: z73.enum(["server", "client"]).default("server")
98712
99268
  });
98713
- var sdkDataLoadersSchema = z72.record(z72.string(), sdkConfigLoaderSchema).refine((loaders) => Object.keys(loaders).length <= 5, { message: "Maximum 5 data loaders per block" }).optional();
98714
- var sdkCustomBlockIdSchema = z72.string().min(8).regex(/^custom\.[a-z][a-z0-9-]*$/, {
99269
+ var sdkDataLoadersSchema = z73.record(z73.string(), sdkConfigLoaderSchema).refine((loaders) => Object.keys(loaders).length <= 5, { message: "Maximum 5 data loaders per block" }).optional();
99270
+ var sdkCustomBlockIdSchema = z73.string().min(8).regex(/^custom\.[a-z][a-z0-9-]*$/, {
98715
99271
  message: "Block ID must start with 'custom.' followed by lowercase letters, numbers, or hyphens"
98716
99272
  }).transform((value) => value);
98717
- var sdkCustomBlockInputSchema = z72.object({
99273
+ var sdkCustomBlockInputSchema = z73.object({
98718
99274
  id: sdkCustomBlockIdSchema,
98719
- title: z72.string().min(1),
98720
- titleSource: z72.union([z72.string().min(1), z72.array(z72.string().min(1)).min(1)]).optional(),
98721
- description: z72.string().optional(),
99275
+ title: z73.string().min(1),
99276
+ titleSource: z73.union([z73.string().min(1), z73.array(z73.string().min(1)).min(1)]).optional(),
99277
+ description: z73.string().optional(),
98722
99278
  category: blockCategoryEnum,
98723
- icon: z72.string().optional(),
98724
- tags: z72.array(z72.string()).optional(),
99279
+ icon: z73.string().optional(),
99280
+ tags: z73.array(z73.string()).optional(),
98725
99281
  fields: fieldDefinitionInputSchema.array().min(1),
98726
99282
  dataLoaders: sdkDataLoadersSchema,
98727
99283
  layout: NodeSchema.optional(),
98728
- variants: z72.record(z72.string().min(1), NodeSchema).optional(),
98729
- defaultVariant: z72.string().min(1).optional(),
98730
- variantOptions: z72.record(
98731
- z72.string().min(1),
98732
- z72.object({
98733
- label: z72.string().min(1).optional(),
98734
- description: z72.string().min(1).optional(),
98735
- icon: z72.string().min(1).optional()
99284
+ variants: z73.record(z73.string().min(1), NodeSchema).optional(),
99285
+ defaultVariant: z73.string().min(1).optional(),
99286
+ variantOptions: z73.record(
99287
+ z73.string().min(1),
99288
+ z73.object({
99289
+ label: z73.string().min(1).optional(),
99290
+ description: z73.string().min(1).optional(),
99291
+ icon: z73.string().min(1).optional()
98736
99292
  })
98737
99293
  ).optional(),
98738
99294
  previewCustomize: previewCustomizeManifestCurationSchema.optional()
@@ -98743,7 +99299,7 @@ var sdkCustomBlockInputSchema = z72.object({
98743
99299
  const exists = data.fields.some((field) => field.id === source);
98744
99300
  if (!exists) {
98745
99301
  ctx.addIssue({
98746
- code: z72.ZodIssueCode.custom,
99302
+ code: z73.ZodIssueCode.custom,
98747
99303
  message: `titleSource must reference a valid field ID (got "${source}")`,
98748
99304
  path: Array.isArray(data.titleSource) ? ["titleSource", index] : ["titleSource"]
98749
99305
  });
@@ -98752,7 +99308,7 @@ var sdkCustomBlockInputSchema = z72.object({
98752
99308
  }
98753
99309
  if (data.layout && data.variants) {
98754
99310
  ctx.addIssue({
98755
- code: z72.ZodIssueCode.custom,
99311
+ code: z73.ZodIssueCode.custom,
98756
99312
  message: "Custom block must define either `layout` or `variants`, not both",
98757
99313
  path: ["variants"]
98758
99314
  });
@@ -98761,14 +99317,14 @@ var sdkCustomBlockInputSchema = z72.object({
98761
99317
  const keys = Object.keys(data.variants);
98762
99318
  if (keys.length === 0) {
98763
99319
  ctx.addIssue({
98764
- code: z72.ZodIssueCode.custom,
99320
+ code: z73.ZodIssueCode.custom,
98765
99321
  message: "`variants` must contain at least one variant key",
98766
99322
  path: ["variants"]
98767
99323
  });
98768
99324
  }
98769
99325
  if (data.defaultVariant && !Object.prototype.hasOwnProperty.call(data.variants, data.defaultVariant)) {
98770
99326
  ctx.addIssue({
98771
- code: z72.ZodIssueCode.custom,
99327
+ code: z73.ZodIssueCode.custom,
98772
99328
  message: "`defaultVariant` must be a key present in `variants`",
98773
99329
  path: ["defaultVariant"]
98774
99330
  });
@@ -98777,7 +99333,7 @@ var sdkCustomBlockInputSchema = z72.object({
98777
99333
  for (const key of Object.keys(data.variantOptions)) {
98778
99334
  if (!Object.prototype.hasOwnProperty.call(data.variants, key)) {
98779
99335
  ctx.addIssue({
98780
- code: z72.ZodIssueCode.custom,
99336
+ code: z73.ZodIssueCode.custom,
98781
99337
  message: "`variantOptions` key must exist in `variants`",
98782
99338
  path: ["variantOptions", key]
98783
99339
  });
@@ -98786,78 +99342,78 @@ var sdkCustomBlockInputSchema = z72.object({
98786
99342
  }
98787
99343
  }
98788
99344
  });
98789
- var sdkBlockFieldExtensionInputSchema = z72.object({
99345
+ var sdkBlockFieldExtensionInputSchema = z73.object({
98790
99346
  fields: fieldDefinitionInputSchema.array().min(1)
98791
99347
  });
98792
- var sdkBlockFieldExtensionsInputSchema = z72.record(
98793
- z72.string().min(1),
99348
+ var sdkBlockFieldExtensionsInputSchema = z73.record(
99349
+ z73.string().min(1),
98794
99350
  sdkBlockFieldExtensionInputSchema
98795
99351
  );
98796
- var sdkThemePaletteSchema = z72.record(z72.string(), z72.string());
98797
- var sdkThemeConfigSchema = z72.object({
99352
+ var sdkThemePaletteSchema = z73.record(z73.string(), z73.string());
99353
+ var sdkThemeConfigSchema = z73.object({
98798
99354
  palette: sdkThemePaletteSchema
98799
99355
  });
98800
- var sdkSectionBackgroundSchema = z72.object({
98801
- id: z72.string().min(1),
98802
- label: z72.string().min(1),
98803
- token: z72.string().min(1)
99356
+ var sdkSectionBackgroundSchema = z73.object({
99357
+ id: z73.string().min(1),
99358
+ label: z73.string().min(1),
99359
+ token: z73.string().min(1)
98804
99360
  });
98805
- var sdkSectionOptionsConfigSchema = z72.object({
98806
- backgroundColor: z72.boolean().optional(),
98807
- backgroundImage: z72.boolean().optional(),
98808
- backgroundGradient: z72.boolean().optional(),
98809
- spacing: z72.union([z72.array(z72.enum(["compact", "default", "spacious"])), z72.boolean()]).optional(),
98810
- textColor: z72.boolean().optional()
99361
+ var sdkSectionOptionsConfigSchema = z73.object({
99362
+ backgroundColor: z73.boolean().optional(),
99363
+ backgroundImage: z73.boolean().optional(),
99364
+ backgroundGradient: z73.boolean().optional(),
99365
+ spacing: z73.union([z73.array(z73.enum(["compact", "default", "spacious"])), z73.boolean()]).optional(),
99366
+ textColor: z73.boolean().optional()
98811
99367
  });
98812
- var sdkContainerOptionsConfigSchema = z72.object({
98813
- maxWidth: z72.union([z72.array(z72.enum(["narrow", "default", "wide", "full"])), z72.boolean()]).optional(),
98814
- alignment: z72.union([z72.array(z72.enum(["left", "center", "right"])), z72.boolean()]).optional()
99368
+ var sdkContainerOptionsConfigSchema = z73.object({
99369
+ maxWidth: z73.union([z73.array(z73.enum(["narrow", "default", "wide", "full"])), z73.boolean()]).optional(),
99370
+ alignment: z73.union([z73.array(z73.enum(["left", "center", "right"])), z73.boolean()]).optional()
98815
99371
  });
98816
- var sdkSiteStyleConfigSchema = z72.object({
98817
- sectionBackgrounds: z72.array(sdkSectionBackgroundSchema).optional(),
99372
+ var sdkSiteStyleConfigSchema = z73.object({
99373
+ sectionBackgrounds: z73.array(sdkSectionBackgroundSchema).optional(),
98818
99374
  sectionOptions: sdkSectionOptionsConfigSchema.optional(),
98819
99375
  containerOptions: sdkContainerOptionsConfigSchema.optional()
98820
99376
  });
98821
- var sdkSiteLayoutConfigSchema = z72.object({
98822
- footerBlocks: z72.array(
98823
- z72.object({
98824
- id: z72.string().min(1).optional(),
98825
- kind: z72.string().min(1),
98826
- content: z72.record(z72.string(), z72.unknown()).optional()
99377
+ var sdkSiteLayoutConfigSchema = z73.object({
99378
+ footerBlocks: z73.array(
99379
+ z73.object({
99380
+ id: z73.string().min(1).optional(),
99381
+ kind: z73.string().min(1),
99382
+ content: z73.record(z73.string(), z73.unknown()).optional()
98827
99383
  })
98828
99384
  ).optional()
98829
99385
  });
98830
- var sdkFieldSelectOptionSchema = z72.object({
98831
- value: z72.string(),
98832
- label: z72.string()
99386
+ var sdkFieldSelectOptionSchema = z73.object({
99387
+ value: z73.string(),
99388
+ label: z73.string()
98833
99389
  });
98834
- var sdkBlockFieldConfigSchema = z72.object({
98835
- options: z72.array(sdkFieldSelectOptionSchema).optional()
99390
+ var sdkBlockFieldConfigSchema = z73.object({
99391
+ options: z73.array(sdkFieldSelectOptionSchema).optional()
98836
99392
  });
98837
- var sdkBlockFieldOptionsMapSchema = z72.record(
98838
- z72.string().regex(/^(block\.|custom\.)[a-z][a-z0-9-]*$/, {
99393
+ var sdkBlockFieldOptionsMapSchema = z73.record(
99394
+ z73.string().regex(/^(block\.|custom\.)[a-z][a-z0-9-]*$/, {
98839
99395
  message: "Block ID must be 'block.*' or 'custom.*' format"
98840
99396
  }),
98841
- z72.record(z72.string().min(1), sdkBlockFieldConfigSchema)
99397
+ z73.record(z73.string().min(1), sdkBlockFieldConfigSchema)
98842
99398
  ).optional();
98843
- var sdkContentTypeTemplateConfigSchema = z72.object({
98844
- blocks: z72.array(z72.unknown())
99399
+ var sdkContentTypeTemplateConfigSchema = z73.object({
99400
+ blocks: z73.array(z73.unknown())
98845
99401
  }).passthrough();
98846
- var sdkContentTypeOrderingConfigSchema = z72.object({
98847
- mode: z72.enum(["default", "manual"]).optional()
99402
+ var sdkContentTypeOrderingConfigSchema = z73.object({
99403
+ mode: z73.enum(["default", "manual"]).optional()
98848
99404
  }).optional();
98849
- var sdkContentTypeConfigSchema = z72.object({
98850
- key: z72.string().min(1),
98851
- fields: z72.array(z72.unknown()),
99405
+ var sdkContentTypeConfigSchema = z73.object({
99406
+ key: z73.string().min(1),
99407
+ fields: z73.array(z73.unknown()),
98852
99408
  ordering: sdkContentTypeOrderingConfigSchema,
98853
99409
  template: sdkContentTypeTemplateConfigSchema.nullable().optional()
98854
99410
  }).passthrough();
98855
- var sdkContentConfigSchema = z72.object({
98856
- contentTypes: z72.array(sdkContentTypeConfigSchema).optional(),
98857
- pages: z72.array(z72.unknown()).optional(),
98858
- entries: z72.array(z72.unknown()).optional(),
98859
- navigationMenus: z72.array(z72.unknown()).optional(),
98860
- settings: z72.unknown().optional()
99411
+ var sdkContentConfigSchema = z73.object({
99412
+ contentTypes: z73.array(sdkContentTypeConfigSchema).optional(),
99413
+ pages: z73.array(z73.unknown()).optional(),
99414
+ entries: z73.array(z73.unknown()).optional(),
99415
+ navigationMenus: z73.array(z73.unknown()).optional(),
99416
+ settings: z73.unknown().optional()
98861
99417
  }).passthrough();
98862
99418
  var SDK_WORKFLOW_ID_MAX_LENGTH = 120;
98863
99419
  var SDK_WORKFLOW_TITLE_MAX_LENGTH = 120;
@@ -98872,62 +99428,62 @@ var SDK_WORKFLOW_CONFIRMATION_TITLE_MAX_LENGTH = 120;
98872
99428
  var SDK_WORKFLOW_CONFIRMATION_BODY_MAX_LENGTH = 500;
98873
99429
  var SDK_WORKFLOW_ID_PATTERN = /^[a-z][a-z0-9]*(?:[._-][a-z0-9]+)*$/;
98874
99430
  var SDK_WORKFLOW_ENDPOINT_PATTERN = /^\//;
98875
- var sdkWorkflowIdSchema = z72.string().min(1).max(SDK_WORKFLOW_ID_MAX_LENGTH).regex(SDK_WORKFLOW_ID_PATTERN, {
99431
+ var sdkWorkflowIdSchema = z73.string().min(1).max(SDK_WORKFLOW_ID_MAX_LENGTH).regex(SDK_WORKFLOW_ID_PATTERN, {
98876
99432
  message: "Workflow ID must start with a lowercase letter and use lowercase letters, numbers, dots, underscores, or hyphens"
98877
99433
  });
98878
- var sdkWorkflowEndpointSchema = z72.string().min(1).max(SDK_WORKFLOW_ENDPOINT_MAX_LENGTH).regex(SDK_WORKFLOW_ENDPOINT_PATTERN, { message: 'Workflow endpoint must be a site-relative path starting with "/"' });
98879
- var sdkWorkflowManualTriggerSchema = z72.object({
98880
- type: z72.literal("manual")
99434
+ var sdkWorkflowEndpointSchema = z73.string().min(1).max(SDK_WORKFLOW_ENDPOINT_MAX_LENGTH).regex(SDK_WORKFLOW_ENDPOINT_PATTERN, { message: 'Workflow endpoint must be a site-relative path starting with "/"' });
99435
+ var sdkWorkflowManualTriggerSchema = z73.object({
99436
+ type: z73.literal("manual")
98881
99437
  }).strict();
98882
- var sdkWorkflowTriggerFieldSchema = z72.string().trim().min(1).max(SDK_WORKFLOW_TRIGGER_FIELD_MAX_LENGTH).refine((field) => !field.includes("."), {
99438
+ var sdkWorkflowTriggerFieldSchema = z73.string().trim().min(1).max(SDK_WORKFLOW_TRIGGER_FIELD_MAX_LENGTH).refine((field) => !field.includes("."), {
98883
99439
  message: "Workflow trigger fields must be top-level content field IDs, not paths"
98884
99440
  });
98885
- var sdkWorkflowFieldChangedConditionSchema = z72.object({
99441
+ var sdkWorkflowFieldChangedConditionSchema = z73.object({
98886
99442
  field: sdkWorkflowTriggerFieldSchema,
98887
- changed: z72.literal(true)
99443
+ changed: z73.literal(true)
98888
99444
  }).strict();
98889
- var sdkWorkflowFieldEmptyConditionSchema = z72.object({
99445
+ var sdkWorkflowFieldEmptyConditionSchema = z73.object({
98890
99446
  field: sdkWorkflowTriggerFieldSchema,
98891
- isEmpty: z72.boolean()
99447
+ isEmpty: z73.boolean()
98892
99448
  }).strict();
98893
- var sdkWorkflowEntryDraftUpdatedTriggerSchema = z72.object({
98894
- type: z72.literal("entry.draft.updated"),
98895
- when: z72.array(
98896
- z72.union([
99449
+ var sdkWorkflowEntryDraftUpdatedTriggerSchema = z73.object({
99450
+ type: z73.literal("entry.draft.updated"),
99451
+ when: z73.array(
99452
+ z73.union([
98897
99453
  sdkWorkflowFieldChangedConditionSchema,
98898
99454
  sdkWorkflowFieldEmptyConditionSchema
98899
99455
  ])
98900
99456
  ).min(1).max(SDK_WORKFLOW_TRIGGER_CONDITION_MAX_COUNT)
98901
99457
  }).strict();
98902
- var sdkWorkflowTriggerSchema = z72.discriminatedUnion("type", [
99458
+ var sdkWorkflowTriggerSchema = z73.discriminatedUnion("type", [
98903
99459
  sdkWorkflowManualTriggerSchema,
98904
99460
  sdkWorkflowEntryDraftUpdatedTriggerSchema
98905
99461
  ]);
98906
- var sdkWorkflowConfirmationSchema = z72.object({
98907
- title: z72.string().trim().min(1).max(SDK_WORKFLOW_CONFIRMATION_TITLE_MAX_LENGTH),
98908
- body: z72.string().trim().min(1).max(SDK_WORKFLOW_CONFIRMATION_BODY_MAX_LENGTH).optional()
99462
+ var sdkWorkflowConfirmationSchema = z73.object({
99463
+ title: z73.string().trim().min(1).max(SDK_WORKFLOW_CONFIRMATION_TITLE_MAX_LENGTH),
99464
+ body: z73.string().trim().min(1).max(SDK_WORKFLOW_CONFIRMATION_BODY_MAX_LENGTH).optional()
98909
99465
  }).strict();
98910
- var sdkWorkflowConfigSchema = z72.object({
99466
+ var sdkWorkflowConfigSchema = z73.object({
98911
99467
  id: sdkWorkflowIdSchema,
98912
- title: z72.string().trim().min(1).max(SDK_WORKFLOW_TITLE_MAX_LENGTH),
98913
- description: z72.string().trim().min(1).max(SDK_WORKFLOW_DESCRIPTION_MAX_LENGTH).optional(),
98914
- contentType: z72.string().trim().min(1).max(SDK_WORKFLOW_CONTENT_TYPE_MAX_LENGTH),
99468
+ title: z73.string().trim().min(1).max(SDK_WORKFLOW_TITLE_MAX_LENGTH),
99469
+ description: z73.string().trim().min(1).max(SDK_WORKFLOW_DESCRIPTION_MAX_LENGTH).optional(),
99470
+ contentType: z73.string().trim().min(1).max(SDK_WORKFLOW_CONTENT_TYPE_MAX_LENGTH),
98915
99471
  endpoint: sdkWorkflowEndpointSchema,
98916
- triggers: z72.array(sdkWorkflowTriggerSchema).min(1).max(SDK_WORKFLOW_TRIGGER_MAX_COUNT),
99472
+ triggers: z73.array(sdkWorkflowTriggerSchema).min(1).max(SDK_WORKFLOW_TRIGGER_MAX_COUNT),
98917
99473
  confirmation: sdkWorkflowConfirmationSchema.optional()
98918
99474
  }).strict();
98919
- var sdkWorkflowsSchema = z72.array(sdkWorkflowConfigSchema).max(SDK_WORKFLOW_MAX_COUNT, "Maximum 50 workflows per site").refine((workflows) => {
99475
+ var sdkWorkflowsSchema = z73.array(sdkWorkflowConfigSchema).max(SDK_WORKFLOW_MAX_COUNT, "Maximum 50 workflows per site").refine((workflows) => {
98920
99476
  const ids = workflows.map((workflow) => workflow.id);
98921
99477
  return ids.length === new Set(ids).size;
98922
99478
  }, { message: "Workflow IDs must be unique" }).optional();
98923
- var riverbankSiteConfigInputSchema = z72.object({
98924
- siteId: z72.string().uuid(),
98925
- previewUrl: z72.string().url().optional(),
98926
- liveUrl: z72.string().url().optional(),
99479
+ var riverbankSiteConfigInputSchema = z73.object({
99480
+ siteId: z73.string().uuid(),
99481
+ previewUrl: z73.string().url().optional(),
99482
+ liveUrl: z73.string().url().optional(),
98927
99483
  theme: sdkThemeConfigSchema.optional(),
98928
99484
  styles: sdkSiteStyleConfigSchema.optional(),
98929
99485
  layout: sdkSiteLayoutConfigSchema.optional(),
98930
- customBlocks: z72.array(sdkCustomBlockInputSchema).max(100, "Maximum 100 custom blocks per site").refine((blocks) => {
99486
+ customBlocks: z73.array(sdkCustomBlockInputSchema).max(100, "Maximum 100 custom blocks per site").refine((blocks) => {
98931
99487
  const ids = blocks.map((b2) => b2.id);
98932
99488
  return ids.length === new Set(ids).size;
98933
99489
  }, { message: "Block IDs must be unique" }).optional(),
@@ -98935,50 +99491,51 @@ var riverbankSiteConfigInputSchema = z72.object({
98935
99491
  blockFieldExtensions: sdkBlockFieldExtensionsInputSchema.optional(),
98936
99492
  workflows: sdkWorkflowsSchema,
98937
99493
  content: sdkContentConfigSchema.optional(),
98938
- contentDir: z72.string().optional(),
98939
- sync: z72.object({
98940
- existingEntries: z72.enum(["skip", "update"]).optional()
99494
+ contentDir: z73.string().optional(),
99495
+ sync: z73.object({
99496
+ existingEntries: z73.enum(["skip", "update"]).optional()
98941
99497
  }).optional(),
98942
- deploy: z72.object({
98943
- verifyCommand: z72.string().optional(),
98944
- prebuildOutput: z72.string().optional()
99498
+ deploy: z73.object({
99499
+ verifyCommand: z73.string().optional(),
99500
+ prebuildOutput: z73.string().optional()
98945
99501
  }).optional(),
98946
- themeSource: z72.enum(["local", "cms"]).optional(),
98947
- activeTheme: z72.string().optional(),
98948
- enablePortal: z72.boolean().optional(),
99502
+ themeSource: z73.enum(["local", "cms"]).optional(),
99503
+ activeTheme: z73.string().optional(),
99504
+ enablePortal: z73.boolean().optional(),
98949
99505
  dashboard: dashboardConfigSchema.optional()
98950
99506
  }).strict();
98951
- var pushSdkConfigBodySchema = z72.object({
99507
+ var pushSdkConfigBodySchema = z73.object({
98952
99508
  config: riverbankSiteConfigInputSchema,
98953
- forceContentTypes: z72.boolean().optional()
99509
+ forceContentTypes: z73.boolean().optional(),
99510
+ mode: z73.enum(["apply", "preview"]).optional()
98954
99511
  }).strict();
98955
99512
 
98956
99513
  // ../api/src/siteOnboarding.ts
98957
- import { z as z73 } from "zod";
99514
+ import { z as z74 } from "zod";
98958
99515
  var LAUNCH_REQUIREMENT_OVERRIDE_DEFINITIONS = {
98959
99516
  configure_appointments: {
98960
99517
  requirementId: "configure_appointments",
98961
99518
  reason: "launch_anyway"
98962
99519
  }
98963
99520
  };
98964
- var acknowledgeLaunchRequirementRequestSchema = z73.discriminatedUnion(
99521
+ var acknowledgeLaunchRequirementRequestSchema = z74.discriminatedUnion(
98965
99522
  "requirementId",
98966
99523
  [
98967
- z73.object({
98968
- requirementId: z73.literal("review_generated_site")
99524
+ z74.object({
99525
+ requirementId: z74.literal("review_generated_site")
98969
99526
  }),
98970
- z73.object({
98971
- requirementId: z73.literal(
99527
+ z74.object({
99528
+ requirementId: z74.literal(
98972
99529
  LAUNCH_REQUIREMENT_OVERRIDE_DEFINITIONS.configure_appointments.requirementId
98973
99530
  ),
98974
- overrideReason: z73.literal(
99531
+ overrideReason: z74.literal(
98975
99532
  LAUNCH_REQUIREMENT_OVERRIDE_DEFINITIONS.configure_appointments.reason
98976
99533
  )
98977
99534
  })
98978
99535
  ]
98979
99536
  );
98980
- var goLiveSiteRequestSchema = z73.object({
98981
- acceptExtraSiteCharge: z73.boolean().optional()
99537
+ var goLiveSiteRequestSchema = z74.object({
99538
+ acceptExtraSiteCharge: z74.boolean().optional()
98982
99539
  });
98983
99540
 
98984
99541
  // ../surfaces/src/index.ts
@@ -99097,7 +99654,7 @@ var COURSE_ENROLLMENT_REFUND_FAILED_CODES = [
99097
99654
  ];
99098
99655
 
99099
99656
  // ../api/src/bookingVerticals.ts
99100
- import { z as z74 } from "zod";
99657
+ import { z as z75 } from "zod";
99101
99658
  var VERTICAL_IDS = [
99102
99659
  "yoga_wellness",
99103
99660
  "fitness_pt",
@@ -99262,39 +99819,39 @@ function getSiteVerticalConfigIssues(rawConfig, config) {
99262
99819
  }
99263
99820
  return [...issues];
99264
99821
  }
99265
- var VerticalIdSchema = z74.string().trim().transform((value, ctx) => {
99822
+ var VerticalIdSchema = z75.string().trim().transform((value, ctx) => {
99266
99823
  const parsed = parseVerticalId(value);
99267
99824
  if (!parsed) {
99268
99825
  ctx.addIssue({
99269
- code: z74.ZodIssueCode.custom,
99826
+ code: z75.ZodIssueCode.custom,
99270
99827
  message: "Unknown booking vertical"
99271
99828
  });
99272
- return z74.NEVER;
99829
+ return z75.NEVER;
99273
99830
  }
99274
99831
  return parsed;
99275
99832
  });
99276
- var VerticalPresetIdSchema = z74.string().trim().transform((value, ctx) => {
99833
+ var VerticalPresetIdSchema = z75.string().trim().transform((value, ctx) => {
99277
99834
  const parsed = parseVerticalPresetId(value);
99278
99835
  if (!parsed) {
99279
99836
  ctx.addIssue({
99280
- code: z74.ZodIssueCode.custom,
99837
+ code: z75.ZodIssueCode.custom,
99281
99838
  message: "Unknown booking preset"
99282
99839
  });
99283
- return z74.NEVER;
99840
+ return z75.NEVER;
99284
99841
  }
99285
99842
  return parsed;
99286
99843
  });
99287
- var BookingVerticalConfigSchema = z74.object({
99844
+ var BookingVerticalConfigSchema = z75.object({
99288
99845
  verticalId: VerticalIdSchema.nullable(),
99289
- selectedPresetIds: z74.array(VerticalPresetIdSchema).max(20)
99846
+ selectedPresetIds: z75.array(VerticalPresetIdSchema).max(20)
99290
99847
  }).transform((value, ctx) => {
99291
99848
  const resolved = resolveSiteVerticalBookingConfig(value);
99292
99849
  if (resolved.kind === "invalid") {
99293
99850
  ctx.addIssue({
99294
- code: z74.ZodIssueCode.custom,
99851
+ code: z75.ZodIssueCode.custom,
99295
99852
  message: `Invalid booking vertical config: ${resolved.issues.join(", ")}`
99296
99853
  });
99297
- return z74.NEVER;
99854
+ return z75.NEVER;
99298
99855
  }
99299
99856
  return resolved.config;
99300
99857
  });
@@ -99321,51 +99878,51 @@ function isRecord17(value) {
99321
99878
  }
99322
99879
 
99323
99880
  // ../api/src/appointmentSetup.ts
99324
- import { z as z75 } from "zod";
99881
+ import { z as z76 } from "zod";
99325
99882
  var APPOINTMENT_SETUP_MAX_MINUTES = 1440;
99326
- var appointmentSetupRefSchema = z75.discriminatedUnion("kind", [
99327
- z75.object({ kind: z75.literal("existing"), id: z75.string().min(1) }),
99328
- z75.object({ kind: z75.literal("new"), draftId: z75.string().min(1) })
99883
+ var appointmentSetupRefSchema = z76.discriminatedUnion("kind", [
99884
+ z76.object({ kind: z76.literal("existing"), id: z76.string().min(1) }),
99885
+ z76.object({ kind: z76.literal("new"), draftId: z76.string().min(1) })
99329
99886
  ]);
99330
- var appointmentSetupVenueChoiceSchema = z75.discriminatedUnion("kind", [
99331
- z75.object({ kind: z75.literal("none") }),
99332
- z75.object({ kind: z75.literal("existing"), venueId: z75.string().min(1) }),
99333
- z75.object({
99334
- kind: z75.literal("create"),
99335
- draftId: z75.string().min(1),
99336
- title: z75.string().trim().min(1),
99337
- description: z75.string().nullable(),
99338
- timezone: z75.string().trim().min(1).nullable(),
99339
- addressJson: z75.record(z75.string(), z75.unknown()),
99340
- locationJson: z75.object({ lat: z75.number(), lng: z75.number() }).nullable()
99887
+ var appointmentSetupVenueChoiceSchema = z76.discriminatedUnion("kind", [
99888
+ z76.object({ kind: z76.literal("none") }),
99889
+ z76.object({ kind: z76.literal("existing"), venueId: z76.string().min(1) }),
99890
+ z76.object({
99891
+ kind: z76.literal("create"),
99892
+ draftId: z76.string().min(1),
99893
+ title: z76.string().trim().min(1),
99894
+ description: z76.string().nullable(),
99895
+ timezone: z76.string().trim().min(1).nullable(),
99896
+ addressJson: z76.record(z76.string(), z76.unknown()),
99897
+ locationJson: z76.object({ lat: z76.number(), lng: z76.number() }).nullable()
99341
99898
  })
99342
99899
  ]);
99343
- var appointmentSetupPaymentDraftSchema = z75.object({
99344
- priceType: z75.union([z75.literal("free"), z75.literal("paid")])
99345
- });
99346
- var appointmentSetupServiceAssignmentDraftSchema = z75.discriminatedUnion("kind", [
99347
- z75.object({ kind: z75.literal("all_practitioners") }),
99348
- z75.object({
99349
- kind: z75.literal("selected_practitioners"),
99350
- resourceRefs: z75.array(appointmentSetupRefSchema)
99900
+ var appointmentSetupPaymentDraftSchema = z76.object({
99901
+ priceType: z76.union([z76.literal("free"), z76.literal("paid")])
99902
+ });
99903
+ var appointmentSetupServiceAssignmentDraftSchema = z76.discriminatedUnion("kind", [
99904
+ z76.object({ kind: z76.literal("all_practitioners") }),
99905
+ z76.object({
99906
+ kind: z76.literal("selected_practitioners"),
99907
+ resourceRefs: z76.array(appointmentSetupRefSchema)
99351
99908
  })
99352
99909
  ]);
99353
- var appointmentSetupServiceDraftSchema = z75.object({
99910
+ var appointmentSetupServiceDraftSchema = z76.object({
99354
99911
  ref: appointmentSetupRefSchema,
99355
- title: z75.string().trim().min(1),
99356
- description: z75.string().nullable(),
99357
- durationMinutes: z75.number().int().positive().max(APPOINTMENT_SETUP_MAX_MINUTES),
99358
- prepMinutes: z75.number().int().nonnegative().max(APPOINTMENT_SETUP_MAX_MINUTES).default(0),
99359
- cleanupMinutes: z75.number().int().nonnegative().max(APPOINTMENT_SETUP_MAX_MINUTES).default(0),
99360
- priceAmount: z75.number().int().nonnegative().nullable(),
99361
- isActive: z75.boolean(),
99362
- locationType: z75.union([
99363
- z75.literal("virtual"),
99364
- z75.literal("in_person"),
99365
- z75.literal("hybrid")
99912
+ title: z76.string().trim().min(1),
99913
+ description: z76.string().nullable(),
99914
+ durationMinutes: z76.number().int().positive().max(APPOINTMENT_SETUP_MAX_MINUTES),
99915
+ prepMinutes: z76.number().int().nonnegative().max(APPOINTMENT_SETUP_MAX_MINUTES).default(0),
99916
+ cleanupMinutes: z76.number().int().nonnegative().max(APPOINTMENT_SETUP_MAX_MINUTES).default(0),
99917
+ priceAmount: z76.number().int().nonnegative().nullable(),
99918
+ isActive: z76.boolean(),
99919
+ locationType: z76.union([
99920
+ z76.literal("virtual"),
99921
+ z76.literal("in_person"),
99922
+ z76.literal("hybrid")
99366
99923
  ]),
99367
99924
  venue: appointmentSetupVenueChoiceSchema,
99368
- timezone: z75.string().trim().min(1).nullable(),
99925
+ timezone: z76.string().trim().min(1).nullable(),
99369
99926
  payment: appointmentSetupPaymentDraftSchema,
99370
99927
  assignment: appointmentSetupServiceAssignmentDraftSchema
99371
99928
  }).superRefine((service, ctx) => {
@@ -99384,49 +99941,49 @@ var appointmentSetupServiceDraftSchema = z75.object({
99384
99941
  });
99385
99942
  }
99386
99943
  });
99387
- var appointmentSetupPractitionerDraftSchema = z75.object({
99944
+ var appointmentSetupPractitionerDraftSchema = z76.object({
99388
99945
  ref: appointmentSetupRefSchema,
99389
- displayName: z75.string().trim().min(1),
99390
- bio: z75.string().nullable(),
99391
- timezone: z75.string().trim().min(1),
99392
- colorHex: z75.string().nullable()
99393
- });
99394
- var appointmentSetupWeeklyWindowDraftSchema = z75.object({
99395
- weekday: z75.number().int().min(0).max(6),
99396
- startTime: z75.string(),
99397
- endTime: z75.string()
99398
- });
99399
- var appointmentSetupStartTimePolicyDraftSchema = z75.discriminatedUnion("kind", [
99400
- z75.object({ kind: z75.literal("automatic_spacing") }),
99401
- z75.object({
99402
- kind: z75.literal("regular_interval"),
99403
- intervalMinutes: z75.union([
99404
- z75.literal(10),
99405
- z75.literal(15),
99406
- z75.literal(20),
99407
- z75.literal(30),
99408
- z75.literal(45),
99409
- z75.literal(60)
99946
+ displayName: z76.string().trim().min(1),
99947
+ bio: z76.string().nullable(),
99948
+ timezone: z76.string().trim().min(1),
99949
+ colorHex: z76.string().nullable()
99950
+ });
99951
+ var appointmentSetupWeeklyWindowDraftSchema = z76.object({
99952
+ weekday: z76.number().int().min(0).max(6),
99953
+ startTime: z76.string(),
99954
+ endTime: z76.string()
99955
+ });
99956
+ var appointmentSetupStartTimePolicyDraftSchema = z76.discriminatedUnion("kind", [
99957
+ z76.object({ kind: z76.literal("automatic_spacing") }),
99958
+ z76.object({
99959
+ kind: z76.literal("regular_interval"),
99960
+ intervalMinutes: z76.union([
99961
+ z76.literal(10),
99962
+ z76.literal(15),
99963
+ z76.literal(20),
99964
+ z76.literal(30),
99965
+ z76.literal(45),
99966
+ z76.literal(60)
99410
99967
  ])
99411
99968
  })
99412
99969
  ]);
99413
- var appointmentSetupAvailabilityDraftSchema = z75.object({
99414
- kind: z75.literal("weekly_windows"),
99970
+ var appointmentSetupAvailabilityDraftSchema = z76.object({
99971
+ kind: z76.literal("weekly_windows"),
99415
99972
  resourceRef: appointmentSetupRefSchema,
99416
99973
  serviceRef: appointmentSetupRefSchema.nullable(),
99417
- windows: z75.array(appointmentSetupWeeklyWindowDraftSchema),
99974
+ windows: z76.array(appointmentSetupWeeklyWindowDraftSchema),
99418
99975
  startTimePolicy: appointmentSetupStartTimePolicyDraftSchema.optional()
99419
99976
  });
99420
99977
  var APPOINTMENT_DEFAULT_MIN_LEAD_MINUTES_MAX = 28 * 24 * 60;
99421
99978
  var APPOINTMENT_DEFAULT_MAX_BOOKING_NOTICE_MINUTES_MAX = 10 * 365 * 24 * 60;
99422
- var appointmentSetupBookingNoticeSchema = z75.object({
99423
- minLeadMinutes: z75.number().int().nonnegative().max(APPOINTMENT_DEFAULT_MIN_LEAD_MINUTES_MAX),
99424
- maxBookingNoticeMinutes: z75.number().int().nonnegative().max(APPOINTMENT_DEFAULT_MAX_BOOKING_NOTICE_MINUTES_MAX)
99425
- });
99426
- var applyAppointmentSetupRequestSchema = z75.object({
99427
- services: z75.array(appointmentSetupServiceDraftSchema),
99428
- practitioners: z75.array(appointmentSetupPractitionerDraftSchema),
99429
- availability: z75.array(appointmentSetupAvailabilityDraftSchema),
99979
+ var appointmentSetupBookingNoticeSchema = z76.object({
99980
+ minLeadMinutes: z76.number().int().nonnegative().max(APPOINTMENT_DEFAULT_MIN_LEAD_MINUTES_MAX),
99981
+ maxBookingNoticeMinutes: z76.number().int().nonnegative().max(APPOINTMENT_DEFAULT_MAX_BOOKING_NOTICE_MINUTES_MAX)
99982
+ });
99983
+ var applyAppointmentSetupRequestSchema = z76.object({
99984
+ services: z76.array(appointmentSetupServiceDraftSchema),
99985
+ practitioners: z76.array(appointmentSetupPractitionerDraftSchema),
99986
+ availability: z76.array(appointmentSetupAvailabilityDraftSchema),
99430
99987
  bookingNotice: appointmentSetupBookingNoticeSchema
99431
99988
  });
99432
99989
 
@@ -99459,24 +100016,24 @@ var STAFF_CANCELLATION_CONTEXT_CATEGORIES = [
99459
100016
  ];
99460
100017
 
99461
100018
  // ../api/src/siteBanner.ts
99462
- import { z as z76 } from "zod";
100019
+ import { z as z77 } from "zod";
99463
100020
  var SITE_BANNER_SCOPE_VALUES = ["homepage", "all-pages"];
99464
100021
  var SITE_BANNER_TONE_VALUES = ["announcement", "promotion", "notice", "warning"];
99465
100022
  var SITE_BANNER_MAX_TEXT_LENGTH = 320;
99466
100023
  var SITE_BANNER_MAX_PARAGRAPHS = 2;
99467
- var siteBannerScopeSchema = z76.enum(SITE_BANNER_SCOPE_VALUES);
99468
- var siteBannerToneSchema = z76.enum(SITE_BANNER_TONE_VALUES);
99469
- var siteBannerBodySchema = z76.unknown().transform(unwrapRichTextValue);
99470
- var siteBannerCtaSchema = z76.object({
99471
- label: z76.string().trim().min(1),
100024
+ var siteBannerScopeSchema = z77.enum(SITE_BANNER_SCOPE_VALUES);
100025
+ var siteBannerToneSchema = z77.enum(SITE_BANNER_TONE_VALUES);
100026
+ var siteBannerBodySchema = z77.unknown().transform(unwrapRichTextValue);
100027
+ var siteBannerCtaSchema = z77.object({
100028
+ label: z77.string().trim().min(1),
99472
100029
  link: linkPayloadSchema
99473
100030
  });
99474
- var siteBannerSettingsSchema = z76.discriminatedUnion("enabled", [
99475
- z76.object({
99476
- enabled: z76.literal(false)
100031
+ var siteBannerSettingsSchema = z77.discriminatedUnion("enabled", [
100032
+ z77.object({
100033
+ enabled: z77.literal(false)
99477
100034
  }),
99478
- z76.object({
99479
- enabled: z76.literal(true),
100035
+ z77.object({
100036
+ enabled: z77.literal(true),
99480
100037
  scope: siteBannerScopeSchema,
99481
100038
  tone: siteBannerToneSchema,
99482
100039
  body: siteBannerBodySchema,
@@ -99490,7 +100047,7 @@ var siteBannerSettingsInputSchema = siteBannerSettingsSchema.superRefine((value,
99490
100047
  const analysis = analyzeSiteBannerBody(value.body);
99491
100048
  for (const issue2 of analysis.issues) {
99492
100049
  ctx.addIssue({
99493
- code: z76.ZodIssueCode.custom,
100050
+ code: z77.ZodIssueCode.custom,
99494
100051
  path: ["body"],
99495
100052
  message: siteBannerBodyIssueMessage(issue2)
99496
100053
  });
@@ -99752,71 +100309,71 @@ function unsafeAsNavigationMenuIdentifier(identifier) {
99752
100309
  var MAIN_NAVIGATION_MENU_IDENTIFIER = unsafeAsNavigationMenuIdentifier("main");
99753
100310
 
99754
100311
  // ../api/src/aiPlayground.ts
99755
- import { z as z77 } from "zod";
99756
- var Rfc6902PatchOp = z77.discriminatedUnion("op", [
100312
+ import { z as z78 } from "zod";
100313
+ var Rfc6902PatchOp = z78.discriminatedUnion("op", [
99757
100314
  // Standard RFC-6902 operations
99758
- z77.object({
99759
- op: z77.literal("add"),
99760
- path: z77.string(),
99761
- value: z77.unknown()
100315
+ z78.object({
100316
+ op: z78.literal("add"),
100317
+ path: z78.string(),
100318
+ value: z78.unknown()
99762
100319
  }),
99763
- z77.object({
99764
- op: z77.literal("remove"),
99765
- path: z77.string()
100320
+ z78.object({
100321
+ op: z78.literal("remove"),
100322
+ path: z78.string()
99766
100323
  }),
99767
- z77.object({
99768
- op: z77.literal("replace"),
99769
- path: z77.string(),
99770
- value: z77.unknown()
100324
+ z78.object({
100325
+ op: z78.literal("replace"),
100326
+ path: z78.string(),
100327
+ value: z78.unknown()
99771
100328
  }),
99772
- z77.object({
99773
- op: z77.literal("move"),
99774
- from: z77.string(),
99775
- path: z77.string()
100329
+ z78.object({
100330
+ op: z78.literal("move"),
100331
+ from: z78.string(),
100332
+ path: z78.string()
99776
100333
  }),
99777
- z77.object({
99778
- op: z77.literal("copy"),
99779
- from: z77.string(),
99780
- path: z77.string()
100334
+ z78.object({
100335
+ op: z78.literal("copy"),
100336
+ from: z78.string(),
100337
+ path: z78.string()
99781
100338
  }),
99782
100339
  // Block-level operations (Phase 2)
99783
- z77.object({
99784
- op: z77.literal("add_block"),
99785
- blockKind: z77.string(),
99786
- afterBlockId: z77.string().nullable(),
99787
- content: z77.record(z77.string(), z77.unknown()),
99788
- rationale: z77.string()
100340
+ z78.object({
100341
+ op: z78.literal("add_block"),
100342
+ blockKind: z78.string(),
100343
+ afterBlockId: z78.string().nullable(),
100344
+ content: z78.record(z78.string(), z78.unknown()),
100345
+ rationale: z78.string()
99789
100346
  }),
99790
- z77.object({
99791
- op: z77.literal("delete_block"),
99792
- blockId: z77.string(),
99793
- rationale: z77.string()
100347
+ z78.object({
100348
+ op: z78.literal("delete_block"),
100349
+ blockId: z78.string(),
100350
+ rationale: z78.string()
99794
100351
  }),
99795
- z77.object({
99796
- op: z77.literal("reorder_block"),
99797
- blockId: z77.string(),
99798
- afterBlockId: z77.string().nullable(),
99799
- rationale: z77.string()
100352
+ z78.object({
100353
+ op: z78.literal("reorder_block"),
100354
+ blockId: z78.string(),
100355
+ afterBlockId: z78.string().nullable(),
100356
+ rationale: z78.string()
99800
100357
  })
99801
100358
  ]);
99802
- var PlaygroundProposeRequest = z77.object({
99803
- request: z77.string().min(1).max(2e3)
100359
+ var PlaygroundProposeRequest = z78.object({
100360
+ request: z78.string().min(1).max(2e3)
99804
100361
  });
99805
- var MultiPagePatchEnvelope = z77.object({
99806
- pageId: z77.string(),
99807
- blockId: z77.string().optional(),
100362
+ var MultiPagePatchEnvelope = z78.object({
100363
+ pageId: z78.string(),
100364
+ blockId: z78.string().optional(),
99808
100365
  // Not present for page-level ops
99809
- blockKind: z77.string().optional(),
99810
- blockPurpose: z77.string().optional().nullable(),
99811
- ops: z77.array(Rfc6902PatchOp),
99812
- rationale: z77.string(),
99813
- currentContent: z77.record(z77.string(), z77.unknown()).optional()
100366
+ blockKind: z78.string().optional(),
100367
+ blockPurpose: z78.string().optional().nullable(),
100368
+ ops: z78.array(Rfc6902PatchOp),
100369
+ rationale: z78.string(),
100370
+ currentContent: z78.record(z78.string(), z78.unknown()).optional()
99814
100371
  });
99815
- var MultiPageUpdateResponse = z77.object({
99816
- patches: z77.array(MultiPagePatchEnvelope),
99817
- assistantMessage: z77.string(),
99818
- pagesModified: z77.number(),
99819
- toolCallsUsed: z77.number()
100372
+ var MultiPageUpdateResponse = z78.object({
100373
+ patches: z78.array(MultiPagePatchEnvelope),
100374
+ assistantMessage: z78.string(),
100375
+ pagesModified: z78.number(),
100376
+ toolCallsUsed: z78.number()
99820
100377
  });
99821
100378
 
99822
100379
  // src/data/prefetchBlockData.ts
@@ -99898,7 +100455,8 @@ var loaderAdapters = {
99898
100455
  listPublicPasses,
99899
100456
  listPublicMemberships,
99900
100457
  getPublicFormById,
99901
- getPublicBookingServices
100458
+ getPublicBookingServices,
100459
+ getPublicWeeklySlotAvailability
99902
100460
  };
99903
100461
  function readStringParam(params, key) {
99904
100462
  const value = params[key];
@@ -100074,6 +100632,15 @@ async function getPublicBookingServices({ client, params }) {
100074
100632
  ids: readStringParam(params, "ids")
100075
100633
  });
100076
100634
  }
100635
+ async function getPublicWeeklySlotAvailability({ client, params }) {
100636
+ return await client.getPublicWeeklySlotAvailability({
100637
+ siteId: requireStringParam(params, "siteId", "getPublicWeeklySlotAvailability"),
100638
+ serviceId: requireStringParam(params, "serviceId", "getPublicWeeklySlotAvailability"),
100639
+ resourceId: readStringParam(params, "resourceId"),
100640
+ horizonWeeks: parsePositiveIntegerParam(params, "horizonWeeks"),
100641
+ timezone: readStringParam(params, "timezone")
100642
+ });
100643
+ }
100077
100644
  async function prefetchBlockData2(page, context, client, options) {
100078
100645
  const { customBlocks } = options ?? {};
100079
100646
  const customBlockMap = new Map(
@@ -100116,7 +100683,7 @@ async function prefetchBlockData2(page, context, client, options) {
100116
100683
  }
100117
100684
 
100118
100685
  // src/rendering/components/Block.shared.tsx
100119
- import { jsx as jsx162, jsxs as jsxs105 } from "react/jsx-runtime";
100686
+ import { jsx as jsx164, jsxs as jsxs106 } from "react/jsx-runtime";
100120
100687
  function toBlockHydrationBootstrapConfig(props2) {
100121
100688
  return {
100122
100689
  siteId: props2.siteId,
@@ -100125,7 +100692,7 @@ function toBlockHydrationBootstrapConfig(props2) {
100125
100692
  };
100126
100693
  }
100127
100694
  function renderUnknownBlock(blockKind) {
100128
- return /* @__PURE__ */ jsx162("div", { className: "p-4 border border-red-300 bg-red-50 rounded", children: /* @__PURE__ */ jsxs105("p", { className: "text-red-800 font-semibold", children: [
100695
+ return /* @__PURE__ */ jsx164("div", { className: "p-4 border border-red-300 bg-red-50 rounded", children: /* @__PURE__ */ jsxs106("p", { className: "text-red-800 font-semibold", children: [
100129
100696
  "Unknown block type: ",
100130
100697
  blockKind
100131
100698
  ] }) });
@@ -100207,7 +100774,7 @@ function renderBlockOverride({
100207
100774
  runtime,
100208
100775
  resolvedData
100209
100776
  }) {
100210
- return /* @__PURE__ */ jsx162(
100777
+ return /* @__PURE__ */ jsx164(
100211
100778
  OverrideComponent,
100212
100779
  {
100213
100780
  content: props2.content,
@@ -100233,7 +100800,7 @@ function renderManifestBlock({
100233
100800
  const BlockComponent = makeDefaultBlockComponent({ manifest: definition.manifest });
100234
100801
  const registry = getDefaultComponentRegistry();
100235
100802
  const blocksThemeConfig = runtime.blocksTheme;
100236
- return /* @__PURE__ */ jsx162(
100803
+ return /* @__PURE__ */ jsx164(
100237
100804
  BlockComponent,
100238
100805
  {
100239
100806
  blockId: props2.blockId ?? void 0,
@@ -100270,12 +100837,12 @@ async function BlockContent(props2) {
100270
100837
  }
100271
100838
 
100272
100839
  // src/rendering/components/Block.tsx
100273
- import { Fragment as Fragment37, jsx as jsx163, jsxs as jsxs106 } from "react/jsx-runtime";
100840
+ import { Fragment as Fragment37, jsx as jsx165, jsxs as jsxs107 } from "react/jsx-runtime";
100274
100841
  var HydratorWithContextProps2 = BlocksIslandsHydrator;
100275
100842
  function Block(props2) {
100276
- return /* @__PURE__ */ jsxs106(Fragment37, { children: [
100277
- /* @__PURE__ */ jsx163(HydratorWithContextProps2, { ...toBlockHydrationBootstrapConfig(props2) }),
100278
- /* @__PURE__ */ jsx163(BlockContent, { ...props2 })
100843
+ return /* @__PURE__ */ jsxs107(Fragment37, { children: [
100844
+ /* @__PURE__ */ jsx165(HydratorWithContextProps2, { ...toBlockHydrationBootstrapConfig(props2) }),
100845
+ /* @__PURE__ */ jsx165(BlockContent, { ...props2 })
100279
100846
  ] });
100280
100847
  }
100281
100848
 
@@ -100411,7 +100978,16 @@ function sanitizeNullableSdkRuntimeBlockContent(blockKind, content) {
100411
100978
 
100412
100979
  // src/rendering/helpers/loadPage.ts
100413
100980
  async function loadPage(params) {
100414
- const { client, siteId, path, pageId, preview = false, dataLoaderOverrides, searchParams, forceSite } = params;
100981
+ const {
100982
+ client,
100983
+ siteId,
100984
+ path,
100985
+ pageId,
100986
+ preview = false,
100987
+ dataLoaderOverrides,
100988
+ searchParams,
100989
+ forceSite
100990
+ } = params;
100415
100991
  const [site, pageResponse] = await Promise.all([
100416
100992
  client.getSite({ id: siteId, ...forceSite ? { force: true } : {} }),
100417
100993
  client.getPage({ siteId, path, preview })
@@ -100421,6 +100997,11 @@ async function loadPage(params) {
100421
100997
  "This path resolves to a content entry, not a page. Use loadContent() instead, which handles both pages and entries. For entries, loadContent() returns the raw entry data for custom rendering."
100422
100998
  );
100423
100999
  }
101000
+ if ("pageSurface" in pageResponse) {
101001
+ throw new Error(
101002
+ "This path resolves to a page surface, not a page. Use loadContent() instead, which handles pages, entries, and page surfaces."
101003
+ );
101004
+ }
100424
101005
  const { page: pageData } = pageResponse;
100425
101006
  const support = buildSiteRenderSupport(
100426
101007
  site,
@@ -100450,7 +101031,11 @@ async function loadPage(params) {
100450
101031
  );
100451
101032
  let resolvedData = configData;
100452
101033
  if (dataLoaderOverrides && Object.keys(dataLoaderOverrides).length > 0) {
100453
- const codeData = await executeCodeLoaders(pageOutline, prefetchContext, dataLoaderOverrides);
101034
+ const codeData = await executeCodeLoaders(
101035
+ pageOutline,
101036
+ prefetchContext,
101037
+ dataLoaderOverrides
101038
+ );
100454
101039
  resolvedData = mergeLoaderResults(configData, codeData);
100455
101040
  }
100456
101041
  return {
@@ -100470,13 +101055,17 @@ async function loadPage(params) {
100470
101055
  };
100471
101056
  }
100472
101057
 
100473
- // ../blocks/src/bindings/types.ts
100474
- var TRANSFORMS = {
101058
+ // ../field-primitives/src/bindings/index.ts
101059
+ var BINDING_TRANSFORMS = {
100475
101060
  RICHTEXT_FIRST_PARAGRAPH: "richtext.firstParagraph",
100476
101061
  DATE_FORMAT_SHORT: "date.formatShort",
100477
101062
  DATE_FORMAT_LONG: "date.formatLong",
100478
101063
  TEXT_INLINE_TEXT: "text.inlineText"
100479
101064
  };
101065
+ var BINDING_TRANSFORM_VALUES = Object.values(BINDING_TRANSFORMS);
101066
+
101067
+ // ../blocks/src/bindings/types.ts
101068
+ var TRANSFORMS = BINDING_TRANSFORMS;
100480
101069
  var BINDING_SOURCES = ["field", "meta", "literal", "transform", "fallback"];
100481
101070
 
100482
101071
  // ../blocks/src/bindings/index.ts
@@ -100696,7 +101285,20 @@ function isDocWrapper(value) {
100696
101285
  return isRecord2(doc) && typeof doc.type === "string" && doc.type === "doc";
100697
101286
  }
100698
101287
 
101288
+ // src/contracts/bindings.ts
101289
+ var BINDING_TRANSFORM_VALUES2 = BINDING_TRANSFORM_VALUES;
101290
+ var BINDING_TRANSFORM_LIST = BINDING_TRANSFORM_VALUES2.join(", ");
101291
+
101292
+ // src/contracts/rendering.ts
101293
+ var ImagePresets2 = {
101294
+ thumbnail: { width: 200, quality: 80, resize: "contain" },
101295
+ card: { width: 600, quality: 80, resize: "contain" },
101296
+ hero: { width: 1200, quality: 85, resize: "contain" },
101297
+ full: { width: 1920, quality: 85, resize: "contain" }
101298
+ };
101299
+
100699
101300
  // src/rendering/helpers/bindings.ts
101301
+ var isRecord20 = isRecord2;
100700
101302
  var normalizeBindingOutput2 = normalizeBindingOutput;
100701
101303
  var applyBindingsToContent2 = applyBindingsToContent;
100702
101304
 
@@ -100742,14 +101344,30 @@ function getRejectedReason(result) {
100742
101344
  return result.reason;
100743
101345
  }
100744
101346
  async function loadContent(params) {
100745
- const { client, siteId, path, preview = false, forceSite } = params;
101347
+ const {
101348
+ client,
101349
+ siteId,
101350
+ path,
101351
+ preview = false,
101352
+ forceSite,
101353
+ contentContract = "compat"
101354
+ } = params;
100746
101355
  const [siteResult, contentResult] = await Promise.allSettled([
100747
101356
  client.getSite({ id: siteId, ...forceSite ? { force: true } : {} }),
100748
- client.getPage({ siteId, path, preview })
101357
+ client.getPage({
101358
+ siteId,
101359
+ path,
101360
+ preview,
101361
+ ...contentContract === "native" ? { contentContract } : {}
101362
+ })
100749
101363
  ]);
100750
101364
  if (siteResult.status === "rejected" || contentResult.status === "rejected") {
100751
- const failures = [siteResult, contentResult].filter((result) => result.status === "rejected").map(getRejectedReason);
100752
- const upstreamFailure = failures.find((error) => !isContentLoadNotFoundError(error));
101365
+ const failures = [siteResult, contentResult].filter(
101366
+ (result) => result.status === "rejected"
101367
+ ).map(getRejectedReason);
101368
+ const upstreamFailure = failures.find(
101369
+ (error) => !isContentLoadNotFoundError(error)
101370
+ );
100753
101371
  throw upstreamFailure ?? failures[0];
100754
101372
  }
100755
101373
  const site = siteResult.value;
@@ -100763,13 +101381,7 @@ async function loadContent(params) {
100763
101381
  });
100764
101382
  }
100765
101383
  async function loadContentFromContentResponse(params) {
100766
- const {
100767
- client,
100768
- siteId,
100769
- site,
100770
- contentResponse,
100771
- preview = false
100772
- } = params;
101384
+ const { client, siteId, site, contentResponse, preview = false } = params;
100773
101385
  const support = buildSiteRenderSupport(
100774
101386
  site,
100775
101387
  collectMediaAssetSidecar(contentResponse.mediaAssets)
@@ -100830,6 +101442,77 @@ async function loadContentFromContentResponse(params) {
100830
101442
  ...support.mediaAssets ? { mediaAssets: support.mediaAssets } : {}
100831
101443
  };
100832
101444
  }
101445
+ if (isPageSurfaceResponse(contentResponse)) {
101446
+ const pageSurfaceData = contentResponse.pageSurface;
101447
+ const pageSurface = {
101448
+ id: pageSurfaceData.id,
101449
+ routeId: pageSurfaceData.routeId,
101450
+ readinessState: pageSurfaceData.readinessState,
101451
+ subject: pageSurfaceData.subject,
101452
+ title: pageSurfaceData.title,
101453
+ slug: pageSurfaceData.slug,
101454
+ path: pageSurfaceData.path,
101455
+ status: pageSurfaceData.status,
101456
+ publishAt: pageSurfaceData.publishAt,
101457
+ content: pageSurfaceData.content,
101458
+ metaTitle: preview ? pageSurfaceData.draftMetaTitle ?? pageSurfaceData.metaTitle : pageSurfaceData.metaTitle,
101459
+ metaDescription: preview ? pageSurfaceData.draftMetaDescription ?? pageSurfaceData.metaDescription : pageSurfaceData.metaDescription,
101460
+ createdAt: pageSurfaceData.createdAt,
101461
+ updatedAt: pageSurfaceData.updatedAt,
101462
+ contentSource: pageSurfaceData.contentSource
101463
+ };
101464
+ const { templatePage, resolvedData: resolvedData2 } = await processTemplatePage({
101465
+ templates: contentResponse.templates,
101466
+ slotContent: contentResponse.surfaceSlots,
101467
+ bindingContext: {
101468
+ fields: pageSurface.content && typeof pageSurface.content === "object" ? pageSurface.content : {},
101469
+ meta: {
101470
+ id: pageSurface.id,
101471
+ title: pageSurface.title,
101472
+ slug: pageSurface.slug,
101473
+ path: pageSurface.path,
101474
+ publishAt: pageSurface.publishAt,
101475
+ status: pageSurface.status,
101476
+ createdAt: pageSurface.createdAt,
101477
+ updatedAt: pageSurface.updatedAt
101478
+ }
101479
+ },
101480
+ pageName: pageSurface.title || "Page Surface Template",
101481
+ pagePath: pageSurface.path || "/",
101482
+ pagePurpose: "page-surface-template",
101483
+ context: { siteId, preview },
101484
+ client,
101485
+ options: { customBlocks: support.customBlocks }
101486
+ });
101487
+ return {
101488
+ type: "pageSurface",
101489
+ pageSurface,
101490
+ templatePage,
101491
+ resolvedData: resolvedData2,
101492
+ bookingOfferingPresets: support.bookingOfferingPresets,
101493
+ dataContext: {
101494
+ pageSurface: {
101495
+ ...pageSurface.content ?? {},
101496
+ id: pageSurface.id,
101497
+ slug: pageSurface.slug,
101498
+ subject: pageSurface.subject,
101499
+ _pageSurfaceId: pageSurface.id,
101500
+ _pageSurfaceSlug: pageSurface.slug
101501
+ },
101502
+ subject: pageSurface.subject
101503
+ },
101504
+ theme: support.theme,
101505
+ siteId,
101506
+ ...support.customBlocks ? { customBlocks: support.customBlocks } : {},
101507
+ site: support.site,
101508
+ sdkConfig: support.sdkConfig,
101509
+ supabaseUrl: support.supabaseUrl,
101510
+ routeMap: support.routeMap,
101511
+ pagesByIdentifier: support.pagesByIdentifier,
101512
+ entriesByIdentifier: support.entriesByIdentifier,
101513
+ ...support.mediaAssets ? { mediaAssets: support.mediaAssets } : {}
101514
+ };
101515
+ }
100833
101516
  const { page: pageData } = contentResponse;
100834
101517
  const pageRecord = pageData;
100835
101518
  const canonicalPagePath = pageData.path ?? pageRecord.path ?? "/";
@@ -100887,45 +101570,60 @@ async function loadContentFromContentResponse(params) {
100887
101570
  function isEntryResponse(response) {
100888
101571
  return "entry" in response;
100889
101572
  }
101573
+ function isPageSurfaceResponse(response) {
101574
+ return response.type === "pageSurface";
101575
+ }
100890
101576
  async function processEntryTemplate(templates, entrySlots, entry, context, client, options) {
100891
- const template = templates?.[0];
101577
+ return processTemplatePage({
101578
+ templates,
101579
+ slotContent: entrySlots,
101580
+ bindingContext: {
101581
+ fields: entry.content && typeof entry.content === "object" ? entry.content : {},
101582
+ meta: {
101583
+ id: entry.id,
101584
+ title: entry.title,
101585
+ slug: entry.slug,
101586
+ path: entry.path,
101587
+ publishAt: entry.publishAt,
101588
+ status: entry.status,
101589
+ createdAt: entry.createdAt,
101590
+ updatedAt: entry.updatedAt
101591
+ }
101592
+ },
101593
+ pageName: "Entry Template",
101594
+ pagePath: entry.path || "/",
101595
+ pagePurpose: "entry-template",
101596
+ context,
101597
+ client,
101598
+ options
101599
+ });
101600
+ }
101601
+ async function processTemplatePage(input) {
101602
+ const template = input.templates?.[0];
100892
101603
  if (!template || !template.blocks?.length) {
100893
101604
  return { templatePage: null, resolvedData: {} };
100894
101605
  }
100895
- const bindingContext = {
100896
- fields: entry.content && typeof entry.content === "object" ? entry.content : {},
100897
- meta: {
100898
- id: entry.id,
100899
- title: entry.title,
100900
- slug: entry.slug,
100901
- path: entry.path,
100902
- publishAt: entry.publishAt,
100903
- status: entry.status,
100904
- createdAt: entry.createdAt,
100905
- updatedAt: entry.updatedAt
100906
- }
100907
- };
100908
101606
  const blocks = template.blocks.flatMap(
100909
- (block) => resolveTemplateBlockSequence(block, bindingContext, entrySlots)
101607
+ (block) => resolveTemplateBlockSequence(block, input.bindingContext, input.slotContent)
100910
101608
  );
100911
101609
  if (blocks.length === 0) {
100912
101610
  return { templatePage: null, resolvedData: {} };
100913
101611
  }
100914
101612
  const templatePage = {
100915
- name: template.name || "Entry Template",
100916
- path: entry.path || "/",
100917
- purpose: "entry-template",
101613
+ name: template.name || input.pageName,
101614
+ path: input.pagePath,
101615
+ purpose: input.pagePurpose,
100918
101616
  blocks
100919
101617
  };
100920
101618
  const resolvedData = await prefetchBlockData2(
100921
101619
  templatePage,
100922
101620
  {
100923
- siteId: context.siteId,
101621
+ siteId: input.context.siteId,
100924
101622
  pageId: template.id,
100925
- previewStage: context.preview ? "preview" : "published"
101623
+ previewStage: input.context.preview ? "preview" : "published"
100926
101624
  },
100927
- client,
100928
- { customBlocks: options?.customBlocks }
101625
+ input.client,
101626
+ { customBlocks: input.options?.customBlocks }
100929
101627
  );
100930
101628
  return { templatePage, resolvedData };
100931
101629
  }
@@ -100945,7 +101643,9 @@ function resolveTemplateBlock(block, bindingContext) {
100945
101643
  }
100946
101644
  const bindings = block.bindings ?? {};
100947
101645
  const hasBindings = typeof bindings === "object" && Object.keys(bindings).length > 0;
100948
- const resolvedContent = hasBindings ? normalizeBindingOutput2(applyBindingsToContent2(baseContent, bindings, bindingContext)) : baseContent;
101646
+ const resolvedContent = hasBindings ? normalizeBindingOutput2(
101647
+ applyBindingsToContent2(baseContent, bindings, bindingContext)
101648
+ ) : baseContent;
100949
101649
  return {
100950
101650
  id: block.id,
100951
101651
  kind: block.blockKind,
@@ -100953,12 +101653,12 @@ function resolveTemplateBlock(block, bindingContext) {
100953
101653
  content: resolvedContent
100954
101654
  };
100955
101655
  }
100956
- function resolveTemplateBlockSequence(block, bindingContext, entrySlots) {
101656
+ function resolveTemplateBlockSequence(block, bindingContext, slotContent) {
100957
101657
  const slotKey = readEntrySlotKey(block);
100958
101658
  if (slotKey) {
100959
101659
  return selectBlocksForDeclaredEntrySlot({
100960
101660
  declaredSlotKey: slotKey,
100961
- entrySlots: entrySlots ?? []
101661
+ entrySlots: slotContent ?? []
100962
101662
  }).map(mapEntrySlotBlock);
100963
101663
  }
100964
101664
  if (block.blockKind === SYSTEM_ENTRY_SLOT_BLOCK_KIND) {
@@ -100980,7 +101680,7 @@ function mapEntrySlotBlock(block) {
100980
101680
  kind: block.kind,
100981
101681
  purpose: block.purpose,
100982
101682
  orderIndex: block.orderIndex ?? null,
100983
- content: normalizeBindingOutput2(block.content ?? {}),
101683
+ content: normalizeEntrySlotBlockContent(block.content),
100984
101684
  draftContent: normalizeNullableEntrySlotContent(block.draftContent),
100985
101685
  publishedContent: normalizeNullableEntrySlotContent(block.publishedContent)
100986
101686
  };
@@ -100993,31 +101693,17 @@ function mapEntrySlotBlock(block) {
100993
101693
  };
100994
101694
  }
100995
101695
  function normalizeNullableEntrySlotContent(content) {
100996
- return content == null ? null : normalizeBindingOutput2(content);
101696
+ return content == null ? null : normalizeEntrySlotBlockContent(content);
101697
+ }
101698
+ function normalizeEntrySlotBlockContent(content) {
101699
+ const normalized = normalizeBindingOutput2(content ?? {});
101700
+ return isRecord20(normalized) ? normalized : {};
100997
101701
  }
100998
-
100999
- // src/contracts/bindings.ts
101000
- var BINDING_TRANSFORMS = {
101001
- RICHTEXT_FIRST_PARAGRAPH: "richtext.firstParagraph",
101002
- DATE_FORMAT_SHORT: "date.formatShort",
101003
- DATE_FORMAT_LONG: "date.formatLong",
101004
- TEXT_INLINE_TEXT: "text.inlineText"
101005
- };
101006
- var BINDING_TRANSFORM_VALUES = Object.values(BINDING_TRANSFORMS);
101007
- var BINDING_TRANSFORM_LIST = BINDING_TRANSFORM_VALUES.join(", ");
101008
-
101009
- // src/contracts/rendering.ts
101010
- var ImagePresets2 = {
101011
- thumbnail: { width: 200, quality: 80, resize: "contain" },
101012
- card: { width: 600, quality: 80, resize: "contain" },
101013
- hero: { width: 1200, quality: 85, resize: "contain" },
101014
- full: { width: 1920, quality: 85, resize: "contain" }
101015
- };
101016
101702
 
101017
101703
  // src/rendering/primitives/RichText.tsx
101018
- import { jsx as jsx164 } from "react/jsx-runtime";
101704
+ import { jsx as jsx166 } from "react/jsx-runtime";
101019
101705
  function RichText3(props2) {
101020
- return /* @__PURE__ */ jsx164(RichText2, { ...props2 });
101706
+ return /* @__PURE__ */ jsx166(RichText2, { ...props2 });
101021
101707
  }
101022
101708
 
101023
101709
  // src/rendering/image.ts