@riverbankcms/sdk 0.75.0 → 0.76.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 (87) hide show
  1. package/README.md +2 -0
  2. package/dist/{PreviewEditorSidebar-U2IHCBYN.mjs → PreviewEditorSidebar-X2HWXFOL.mjs} +171 -88
  3. package/dist/{PreviewEditorUI-ZGH2RQNP.mjs → PreviewEditorUI-AQXIXPOH.mjs} +2 -2
  4. package/dist/SdkPreviewModeRuntime-ZQNDCASH.mjs +8 -0
  5. package/dist/_dts/api/src/bookingOperations.d.ts +12 -0
  6. package/dist/_dts/api/src/index.d.ts +1 -1
  7. package/dist/_dts/api/src/publicExperienceEndpoints.d.ts +11 -3
  8. package/dist/_dts/block-form/src/blockDraftSaveability.d.ts +0 -1
  9. package/dist/_dts/block-form/src/client/index.d.ts +1 -1
  10. package/dist/_dts/block-form/src/manifest/utils.d.ts +24 -0
  11. package/dist/_dts/blocks/src/client/events.d.ts +3 -1
  12. package/dist/_dts/blocks/src/contracts/proof-block-islands.d.ts +4 -4
  13. package/dist/_dts/blocks/src/system/runtime/components/registry.client.d.ts +6 -6
  14. package/dist/_dts/blocks/src/system/runtime/components/runtime-backed-blocks.d.ts +3 -3
  15. package/dist/_dts/blocks/src/system/runtime/nodes/booking-form.interactive.d.ts +3 -27
  16. package/dist/_dts/blocks/src/system/runtime/nodes/booking-runtime-sources.d.ts +163 -0
  17. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration.interactive.d.ts +5 -5
  18. package/dist/_dts/blocks/src/system/runtime/shared/components/BookingOptionCompactRow.d.ts +29 -0
  19. package/dist/_dts/blocks/src/system/runtime/shared/components/BookingOptionList.d.ts +13 -0
  20. package/dist/_dts/blocks/src/system/runtime/shared/components/index.d.ts +4 -0
  21. package/dist/_dts/blocks/src/system/runtime/shared/index.d.ts +4 -3
  22. package/dist/_dts/blocks/src/system/runtime/shared/utils/bookingRoute.d.ts +20 -0
  23. package/dist/_dts/blocks/src/system/runtime/shared/utils/index.d.ts +2 -1
  24. package/dist/_dts/blocks/src/system/types/link.d.ts +12 -0
  25. package/dist/_dts/editor-blocks/src/BlockEditor.d.ts +2 -0
  26. package/dist/_dts/editor-blocks/src/block-editor/BlockCard.d.ts +3 -1
  27. package/dist/_dts/editor-blocks/src/block-editor/BlockCardHeader.d.ts +3 -1
  28. package/dist/_dts/editor-blocks/src/block-editor/BlockSettingsModal.d.ts +5 -1
  29. package/dist/_dts/editor-blocks/src/block-editor/SortableBlockItem.d.ts +2 -0
  30. package/dist/_dts/editor-blocks/src/block-editor/actionControlMode.d.ts +2 -0
  31. package/dist/_dts/editor-blocks/src/index.d.ts +1 -1
  32. package/dist/_dts/preview-next/src/client/preview/themeOverlay.d.ts +21 -3
  33. package/dist/_dts/sdk/src/components.d.ts +2 -2
  34. package/dist/_dts/sdk/src/rendering/index.d.ts +2 -2
  35. package/dist/_dts/sdk/src/rendering/overrideResolution.d.ts +6 -0
  36. package/dist/_dts/sdk/src/rendering/overrides.d.ts +21 -1
  37. package/dist/_dts/sdk/src/rendering/server.d.ts +4 -3
  38. package/dist/_dts/sdk/src/version.d.ts +1 -1
  39. package/dist/{chunk-GFE74WRD.mjs → chunk-LYI7TEMH.mjs} +188 -90
  40. package/dist/{chunk-BGMNDF6T.mjs → chunk-Q4OLG66B.mjs} +7 -7
  41. package/dist/{chunk-RWXQBRQZ.mjs → chunk-TW2Y4RR5.mjs} +69 -14
  42. package/dist/{chunk-ZSHFGFUG.mjs → chunk-V5VORNEJ.mjs} +1 -1
  43. package/dist/cli/index.mjs +1 -1
  44. package/dist/client/{accordion-T2UD2ZTH.mjs → accordion-2YHIBOZH.mjs} +1 -1
  45. package/dist/client/{bookingForm-GUP75FKN.mjs → bookingForm-35IBDWAS.mjs} +3 -13
  46. package/dist/client/bookings.mjs +11 -11
  47. package/dist/client/{carousel-2NQA6V57.mjs → carousel-K6XG7NZQ.mjs} +1 -1
  48. package/dist/client/{cart-5TFIAFDS.mjs → cart-HCFYUTTU.mjs} +4 -4
  49. package/dist/client/{checkout-TP4WAHZE.mjs → checkout-J3U4XR7K.mjs} +4 -4
  50. package/dist/client/{chunk-FU2QRZMX.mjs → chunk-7UOSCYY4.mjs} +71 -24
  51. package/dist/client/{chunk-ZLMS67RR.mjs → chunk-BOIHIU7E.mjs} +1 -1
  52. package/dist/client/{chunk-CY2ZTSE5.mjs → chunk-FGUIVT2B.mjs} +1 -1
  53. package/dist/client/{chunk-WJXXNDSE.mjs → chunk-J227A3CQ.mjs} +1 -1
  54. package/dist/client/{chunk-NWOUL6JY.mjs → chunk-PFBX3IQL.mjs} +3 -3
  55. package/dist/client/{chunk-VUAOE3AG.mjs → chunk-SNSWVZEP.mjs} +4 -4
  56. package/dist/client/client.mjs +2261 -2279
  57. package/dist/client/{courseRegistration-5DPU6PDY.mjs → courseRegistration-ZBXS7VGI.mjs} +3 -3
  58. package/dist/client/{eventCalendar-F3GZGTEF.mjs → eventCalendar-EQQZHJBA.mjs} +5 -5
  59. package/dist/client/{eventCombined-BQOB6QMY.mjs → eventCombined-JCFTGBFQ.mjs} +5 -5
  60. package/dist/client/{eventDetails-PEM2EJWE.mjs → eventDetails-HLUTQSYY.mjs} +5 -5
  61. package/dist/client/{eventListing-YMIQPVME.mjs → eventListing-FG4MICVB.mjs} +5 -5
  62. package/dist/client/{eventRegistration-4I6ZNDUF.mjs → eventRegistration-GUEB7LBT.mjs} +5 -5
  63. package/dist/client/{form-ZJVAYZ6G.mjs → form-YQEW4YIT.mjs} +1 -1
  64. package/dist/client/{headerSection-TOT5MGTF.mjs → headerSection-GTR3TTRM.mjs} +2 -2
  65. package/dist/client/{locationMap-J66NZREU.mjs → locationMap-SPC7VGUH.mjs} +1 -1
  66. package/dist/client/{newsletterForm-ET2XUMRO.mjs → newsletterForm-4IW5BLID.mjs} +1 -1
  67. package/dist/client/{productDetail-C2XIH7C5.mjs → productDetail-KP5H2WJO.mjs} +4 -4
  68. package/dist/client/{productList-T2AZLFTP.mjs → productList-3M3M72XZ.mjs} +4 -4
  69. package/dist/client/rendering/client.mjs +3132 -3147
  70. package/dist/client/rendering/islands.mjs +18 -18
  71. package/dist/client/rendering.mjs +3344 -3354
  72. package/dist/client/{shop-UZ6IUZXD.mjs → shop-ACQKVGOM.mjs} +4 -4
  73. package/dist/preview-next/chrome.css +1 -1
  74. package/dist/preview-next/client/runtime.mjs +3 -3
  75. package/dist/preview-next/editor-base.css +2 -148
  76. package/dist/preview-next/editor-chrome.css +179 -0
  77. package/dist/{sdk-runtime-JCUQM63Y.mjs → sdk-runtime-K7HNB4U2.mjs} +4 -4
  78. package/dist/server/components.mjs +939 -891
  79. package/dist/server/index.mjs +1 -1
  80. package/dist/server/next.mjs +887 -840
  81. package/dist/server/prebuild.mjs +1 -1
  82. package/dist/server/rendering/server.mjs +951 -894
  83. package/dist/server/rendering.mjs +944 -896
  84. package/dist/server/server.mjs +1 -1
  85. package/package.json +1 -1
  86. package/dist/SdkPreviewModeRuntime-MTUGBTLQ.mjs +0 -8
  87. /package/dist/client/{chunk-2PHQZ666.mjs → chunk-JEZECJ3W.mjs} +0 -0
@@ -1,8 +1,8 @@
1
1
  "use client";
2
2
  import { useOptionalPreviewLayout, PreviewQueryProvider } from './chunk-Z7JLNTJR.mjs';
3
- import { PreviewThemeOverlayProvider, resolveSiteStyleAccess, usePreviewThemeOverlay, createOptimisticActionRunner, resolveStyleConfiguratorInitialSnapshot, createStyleConfiguratorState, syncStyleConfiguratorState, buildSiteChromeLookModels, markApplyFailed, markApplySaved, markApplySaving, planSiteChromeLookSelection, previewHeaderLook, previewFooterLook, cycleSiteChromeLookId, resolvePreviewDashboardSetupHandoff, buildPreviewDashboardSetupUrl, resolvePreviewSetupBannerModel, sanitizeDashboardPath } from './chunk-RWXQBRQZ.mjs';
4
- import { resolvePreviewChromeSurface, getPreviewSidebarTab, onPreviewSidebarOpenRequest, getPreviewChromeSurfaceDataProps, PREVIEW_CHROME_THEME_CLASS_NAME, setPreviewSidebarTab, PreviewPageDesignEditorStateProvider, usePreviewPageDesignEditorState, PREVIEW_SURFACE_PARAM } from './chunk-ZSHFGFUG.mjs';
5
- import { clientComponentRegistry, deriveLaunchReadiness, DEFAULT_LAUNCH_READINESS_INPUT, planSiteDocument, useEditorUiStore, SiteDocumentLayout, ResizableSplitPane, BlockApiProvider, EditorProvider, getCuratedSiteStyle, compileSiteThemeFromSelections, useEditor, createRoutingHelpers, createSnapshotFromPageRecord, EntryControllerProvider, useEntryEditorController, useEditorUiStoreInstance, surfaceResolutionContextFromTheme, asEditorBlockId, EditableBlockProvider, asDesignBlockId, PageRenderer, ThemeScope, FixedBottomSurface, Button, unwrapResponse, X, ChevronLeft, ChevronRight, RotateCcw, PreviewRichTextEditor, RichText, PreviewTextEditor, Text, Dialog, DialogContent, DialogHeader, DialogTitle, DialogDescription, DialogFooter, buildEditorModelRuntimeFieldsByBlockId, applyCompiledRuntimeFieldsToContent, assertNever2, getBlockDefinition, systemCustomizeFacetDefinitionsForBlock, systemCustomizeFacetAppliesToLayoutVariant, systemCustomizeFacetCurrentValue, systemCustomizeFacetLabelForValue, systemCustomizeFacetNextValue, assertNever } from './chunk-GFE74WRD.mjs';
3
+ import { PreviewThemeOverlayProvider, resolveSiteStyleAccess, usePreviewThemeOverlay, createOptimisticActionRunner, resolveStyleConfiguratorInitialSnapshot, createStyleConfiguratorState, syncStyleConfiguratorState, buildSiteChromeLookModels, markApplyFailed, markApplySaved, markApplySaving, planSiteChromeLookSelection, previewHeaderLook, previewFooterLook, cycleSiteChromeLookId, resolvePreviewDashboardSetupHandoff, buildPreviewDashboardSetupUrl, resolvePreviewSetupBannerModel, sanitizeDashboardPath } from './chunk-TW2Y4RR5.mjs';
4
+ import { resolvePreviewChromeSurface, getPreviewSidebarTab, onPreviewSidebarOpenRequest, getPreviewChromeSurfaceDataProps, PREVIEW_CHROME_THEME_CLASS_NAME, setPreviewSidebarTab, PreviewPageDesignEditorStateProvider, usePreviewPageDesignEditorState, PREVIEW_SURFACE_PARAM } from './chunk-V5VORNEJ.mjs';
5
+ import { clientComponentRegistry, deriveLaunchReadiness, DEFAULT_LAUNCH_READINESS_INPUT, planSiteDocument, useEditorUiStore, SiteDocumentLayout, ResizableSplitPane, BlockApiProvider, EditorProvider, getCuratedSiteStyle, compileSiteThemeFromSelections, useEditor, createRoutingHelpers, createSnapshotFromPageRecord, EntryControllerProvider, useEntryEditorController, useEditorUiStoreInstance, surfaceResolutionContextFromTheme, asEditorBlockId, EditableBlockProvider, asDesignBlockId, PageRenderer, ThemeScope, FixedBottomSurface, Button, unwrapResponse, X, ChevronLeft, ChevronRight, RotateCcw, PreviewRichTextEditor, RichText, PreviewTextEditor, Text, Dialog, DialogContent, DialogHeader, DialogTitle, DialogDescription, DialogFooter, buildEditorModelRuntimeFieldsByBlockId, applyCompiledRuntimeFieldsToContent, assertNever2, getBlockDefinition, systemCustomizeFacetDefinitionsForBlock, systemCustomizeFacetAppliesToLayoutVariant, systemCustomizeFacetCurrentValue, systemCustomizeFacetLabelForValue, systemCustomizeFacetNextValue, assertNever } from './chunk-LYI7TEMH.mjs';
6
6
  import { API_ENDPOINTS, createBearerAPIClient, isPreviewRuntimeSessionEditable, DEFAULT_SURFACE_ID, initPreviewAuth, usePreviewAuth, usePreviewAuthFetch, markPreviewAuthExpired, usePreviewToken, parseSurfaceId } from './chunk-VX7B5VAC.mjs';
7
7
  import React7, { createContext, useMemo, useState, useEffect, useRef, useCallback, useId, useReducer } from 'react';
8
8
  import { jsx, jsxs, Fragment } from 'react/jsx-runtime';
@@ -2366,7 +2366,7 @@ function SiteChromeCustomizeProvider({
2366
2366
  const runner = runnerRef.current;
2367
2367
  return () => {
2368
2368
  runner.invalidate();
2369
- setOverrideTheme(null);
2369
+ setOverrideTheme(null, { source: "site-chrome" });
2370
2370
  };
2371
2371
  }, [setOverrideTheme]);
2372
2372
  const lookModels = useMemo(() => {
@@ -2420,7 +2420,7 @@ function SiteChromeCustomizeProvider({
2420
2420
  });
2421
2421
  void runnerRef.current.run({
2422
2422
  optimistic: () => {
2423
- setOverrideTheme(compiled.theme);
2423
+ setOverrideTheme(compiled.theme, { source: "site-chrome" });
2424
2424
  setState((latest) => {
2425
2425
  if (!latest) return latest;
2426
2426
  return markApplySaving({ ...latest, previewed: nextSnapshot });
@@ -2532,11 +2532,11 @@ function SiteChromeCustomizeProvider({
2532
2532
  }
2533
2533
  var previewContainerResponsiveEnabled = process.env.NEXT_PUBLIC_ENABLE_PREVIEW_CONTAINER_RESPONSIVE !== "false";
2534
2534
  var PreviewEditorSidebar = React7.lazy(async () => {
2535
- const mod = await import('./PreviewEditorSidebar-U2IHCBYN.mjs');
2535
+ const mod = await import('./PreviewEditorSidebar-X2HWXFOL.mjs');
2536
2536
  return { default: mod.PreviewEditorSidebar };
2537
2537
  });
2538
2538
  var PreviewEditorUI = React7.lazy(async () => {
2539
- const mod = await import('./PreviewEditorUI-ZGH2RQNP.mjs');
2539
+ const mod = await import('./PreviewEditorUI-AQXIXPOH.mjs');
2540
2540
  return { default: mod.PreviewEditorUI };
2541
2541
  });
2542
2542
  var previewPaneContainmentStyle = {
@@ -1,5 +1,5 @@
1
1
  "use client";
2
- import { compileSiteThemeFromSelections, footerLookCatalog, headerLookCatalog, footerLookRejectionReasonLabel, headerLookRejectionReasonLabel, writePlanForLookCustomizationCommand, siteStyleIdFromTheme, getCuratedSiteStyle } from './chunk-GFE74WRD.mjs';
2
+ import { compileSiteThemeFromSelections, footerLookCatalog, headerLookCatalog, footerLookRejectionReasonLabel, headerLookRejectionReasonLabel, writePlanForLookCustomizationCommand, siteStyleIdFromTheme, getCuratedSiteStyle } from './chunk-LYI7TEMH.mjs';
3
3
  import { createContext, useState, useRef, useCallback, useEffect, useMemo, useContext } from 'react';
4
4
  import { jsx } from 'react/jsx-runtime';
5
5
 
@@ -368,50 +368,105 @@ function applyRfc6902Patch(base, ops) {
368
368
  return next;
369
369
  }
370
370
  var PreviewThemeOverlayContext = createContext(null);
371
+ var NO_THEME_OVERLAY = { kind: "none" };
371
372
  function isDebugEnabled() {
372
373
  return process.env.NEXT_PUBLIC_AI_ASSISTANT_DEBUG === "1";
373
374
  }
374
375
  function PreviewThemeOverlayProvider({ baseTheme, children }) {
375
- const [overlayOps, setOverlayOps] = useState(null);
376
- const [overrideTheme, setOverrideTheme] = useState(null);
376
+ const [overlay, setOverlay] = useState(NO_THEME_OVERLAY);
377
377
  const previousBaseThemeRef = useRef(null);
378
- const clearOverlay = useCallback(() => {
379
- setOverlayOps(null);
380
- setOverrideTheme(null);
378
+ const overlayOps = overlay.kind === "patch" ? [...overlay.ops] : null;
379
+ const overlayOpsSource = overlay.kind === "patch" ? overlay.source : null;
380
+ const overrideTheme = overlay.kind === "theme" ? overlay.theme : null;
381
+ const overrideThemeSource = overlay.kind === "theme" ? overlay.source : null;
382
+ const setOverlayOps = useCallback(
383
+ (ops, options) => {
384
+ setOverlay((current) => {
385
+ if (ops === null) {
386
+ if (current.kind !== "patch") return current;
387
+ if (options?.source && current.source !== options.source) return current;
388
+ return NO_THEME_OVERLAY;
389
+ }
390
+ return {
391
+ kind: "patch",
392
+ source: options?.source ?? "unknown",
393
+ ops
394
+ };
395
+ });
396
+ },
397
+ []
398
+ );
399
+ const setOverrideTheme = useCallback(
400
+ (theme, options) => {
401
+ setOverlay((current) => {
402
+ if (theme === null) {
403
+ if (current.kind !== "theme") return current;
404
+ if (options?.source && current.source !== options.source) return current;
405
+ return NO_THEME_OVERLAY;
406
+ }
407
+ return {
408
+ kind: "theme",
409
+ source: options?.source ?? "unknown",
410
+ theme
411
+ };
412
+ });
413
+ },
414
+ []
415
+ );
416
+ const clearOverlay = useCallback((options) => {
417
+ setOverlay((current) => {
418
+ const source = options?.source;
419
+ if (current.kind === "none") return current;
420
+ if (source && current.source !== source) return current;
421
+ return NO_THEME_OVERLAY;
422
+ });
381
423
  }, []);
382
424
  useEffect(() => {
383
425
  if (previousBaseThemeRef.current && previousBaseThemeRef.current !== baseTheme) {
384
- setOverlayOps(null);
385
- setOverrideTheme(null);
426
+ setOverlay(NO_THEME_OVERLAY);
386
427
  }
387
428
  previousBaseThemeRef.current = baseTheme;
388
429
  }, [baseTheme]);
389
430
  const effectiveTheme = useMemo(() => {
390
- if (overrideTheme) return overrideTheme;
391
- if (!overlayOps || overlayOps.length === 0) return baseTheme;
431
+ if (overlay.kind === "theme") return overlay.theme;
432
+ if (overlay.kind !== "patch" || overlay.ops.length === 0) return baseTheme;
392
433
  try {
393
- return applyRfc6902Patch(baseTheme, overlayOps);
434
+ return applyRfc6902Patch(baseTheme, [...overlay.ops]);
394
435
  } catch (error) {
395
436
  if (isDebugEnabled()) {
396
437
  console.warn("[preview-theme-overlay] failed to apply theme overlay patch", {
397
438
  error: error instanceof Error ? error.message : String(error),
398
- overlayOps
439
+ overlayOps: overlay.ops
399
440
  });
400
441
  }
401
442
  return baseTheme;
402
443
  }
403
- }, [baseTheme, overlayOps, overrideTheme]);
444
+ }, [baseTheme, overlay]);
404
445
  const value = useMemo(
405
446
  () => ({
406
447
  baseTheme,
448
+ overlay,
407
449
  overlayOps,
450
+ overlayOpsSource,
408
451
  setOverlayOps,
409
452
  overrideTheme,
453
+ overrideThemeSource,
410
454
  setOverrideTheme,
411
455
  effectiveTheme,
412
456
  clearOverlay
413
457
  }),
414
- [baseTheme, clearOverlay, effectiveTheme, overlayOps, overrideTheme]
458
+ [
459
+ baseTheme,
460
+ clearOverlay,
461
+ effectiveTheme,
462
+ overlay,
463
+ overlayOps,
464
+ overlayOpsSource,
465
+ overrideTheme,
466
+ overrideThemeSource,
467
+ setOverlayOps,
468
+ setOverrideTheme
469
+ ]
415
470
  );
416
471
  return /* @__PURE__ */ jsx(PreviewThemeOverlayContext.Provider, { value, children });
417
472
  }
@@ -1,5 +1,5 @@
1
1
  "use client";
2
- import { assertNever2, useOptionalEditorUiStoreInstance, getPageDesignEditorState, PAGE_DESIGN_EDITOR_STATE_FETCH_ERROR_MESSAGE, useDebouncedLatestSave, applyPageDesignEditorAction, asEditorBlockId, asEditorBlockValues, resolvePreviewSidebarTab, systemCustomizeFacetDefinitionForBlock, systemCustomizeFacetRollbackContentPatch, systemCustomizeFacetApplyContentPatch, createHistoryState, redoHistory, undoHistory, pushHistoryEntry, canRedoHistory, canUndoHistory, planPageDesignLayoutLookCompatibility } from './chunk-GFE74WRD.mjs';
2
+ import { assertNever2, useOptionalEditorUiStoreInstance, getPageDesignEditorState, PAGE_DESIGN_EDITOR_STATE_FETCH_ERROR_MESSAGE, useDebouncedLatestSave, applyPageDesignEditorAction, asEditorBlockId, asEditorBlockValues, resolvePreviewSidebarTab, systemCustomizeFacetDefinitionForBlock, systemCustomizeFacetRollbackContentPatch, systemCustomizeFacetApplyContentPatch, createHistoryState, redoHistory, undoHistory, pushHistoryEntry, canRedoHistory, canUndoHistory, planPageDesignLayoutLookCompatibility } from './chunk-LYI7TEMH.mjs';
3
3
  import { ApiRequestError, resolveSurfaceDocumentAttributes, SURFACE_DOCUMENT_DATA_ATTRIBUTE, SURFACE_IDS } from './chunk-VX7B5VAC.mjs';
4
4
  import { createContext, useState, useRef, useEffect, useMemo, useContext } from 'react';
5
5
  import { jsx } from 'react/jsx-runtime';
@@ -54508,7 +54508,7 @@ var SimpleCache = class {
54508
54508
  };
54509
54509
 
54510
54510
  // src/version.ts
54511
- var SDK_VERSION = "0.75.0";
54511
+ var SDK_VERSION = "0.76.0";
54512
54512
 
54513
54513
  // src/client/error.ts
54514
54514
  var RiverbankApiError = class _RiverbankApiError extends Error {
@@ -1,4 +1,4 @@
1
- import { defineIslandPropsDecoder } from './chunk-FU2QRZMX.mjs';
1
+ import { defineIslandPropsDecoder } from './chunk-7UOSCYY4.mjs';
2
2
  import './chunk-PMAIXMAB.mjs';
3
3
 
4
4
  // src/rendering/islands/enhancers/accordion.ts
@@ -1,28 +1,18 @@
1
1
  "use client";
2
2
  import { DiscountCodeSection } from './chunk-OJPZEZU2.mjs';
3
- import { useDiscountCodeUi, usePolling } from './chunk-WJXXNDSE.mjs';
3
+ import { useDiscountCodeUi, usePolling } from './chunk-J227A3CQ.mjs';
4
4
  import { SpinnerNode } from './chunk-TQ5MSPDX.mjs';
5
- import { scrollToBlock, buildCheckoutReturnUrls, formatPrice } from './chunk-2PHQZ666.mjs';
5
+ import { scrollToBlock, buildCheckoutReturnUrls, formatPrice } from './chunk-JEZECJ3W.mjs';
6
6
  import { FieldValidationMessage, getFieldValidationControlProps } from './chunk-3DCJ45Z2.mjs';
7
7
  import './chunk-3PEDD5KJ.mjs';
8
8
  import { isSpamProtectionEnabled, getChallengeUrl, AltchaWidget } from './chunk-YLMKMCSJ.mjs';
9
9
  import { BlockApiProvider, useBlockApi, FeedbackMessage } from './chunk-M3L3KYYR.mjs';
10
10
  import { mountReactIsland } from './chunk-N7PBWBWQ.mjs';
11
- import { defineIslandPropsDecoder, resolveBookingSiteId, resolveDefaultBookingServiceId, getBookingRedirectStateFromLocation, deriveBookingFormViewState, getBookingSuccessMessage, resolveAppointmentCheckoutVerificationState, themeButtonClassName, toSelectedCollectionOptionKind, assertNever, prepareBookingSubmission, formatBookingSubmissionPreparationError, resolveBookingPaymentStep, BOOKING_FORM_DATA_RESERVED_KEYS, okWith, err } from './chunk-FU2QRZMX.mjs';
11
+ import { defineIslandPropsDecoder, resolveBookingSiteId, resolveDefaultBookingServiceId, getBookingRedirectStateFromLocation, deriveBookingFormViewState, logger, getBookingSuccessMessage, resolveAppointmentCheckoutVerificationState, themeButtonClassName, toSelectedCollectionOptionKind, assertNever, prepareBookingSubmission, formatBookingSubmissionPreparationError, resolveBookingPaymentStep, BOOKING_FORM_DATA_RESERVED_KEYS, okWith, err } from './chunk-7UOSCYY4.mjs';
12
12
  import { resolveBookingTimeZoneId, DEFAULT_BOOKING_TIME_ZONE, asFormId, asAppointmentResourceId, asCustomerPassId, asAppointmentServiceId, formatLocalScheduleDate, addLocalScheduleDays, parseBookingLocalDate, resolveFlexibleBalanceInitialPaymentCents, resolveFlexibleBalanceDueAt, getBookingInstalmentDepositRefundability, asPassId, splitAmountWithRemainderInFirst, addIntervalPreservingMonthAnchor, clampConfiguredAmount, getBookingInstalmentPlanIntervalCount, omitZeroAmountFutureRows, formatBookingInstant } from './chunk-PMAIXMAB.mjs';
13
13
  import React2, { useRef, useState, useMemo, useReducer, useEffect, useCallback, useLayoutEffect } from 'react';
14
14
  import { jsx, jsxs, Fragment } from 'react/jsx-runtime';
15
15
 
16
- // ../logger/src/noop.ts
17
- var noop = () => {
18
- };
19
- var logger = {
20
- debug: noop,
21
- info: noop,
22
- warn: noop,
23
- error: noop,
24
- withFields: (_) => logger
25
- };
26
16
  var SuccessMessage = ({
27
17
  message,
28
18
  resourceName,
@@ -5797,6 +5797,17 @@ function getBookingSuccessMessage(successMessage) {
5797
5797
  return successMessage?.trim() || "Your appointment has been booked! Check your email for confirmation.";
5798
5798
  }
5799
5799
 
5800
+ // ../logger/src/noop.ts
5801
+ var noop = () => {
5802
+ };
5803
+ var logger = {
5804
+ debug: noop,
5805
+ info: noop,
5806
+ warn: noop,
5807
+ error: noop,
5808
+ withFields: (_) => logger
5809
+ };
5810
+
5800
5811
  // ../theme-core/src/inputs/types.ts
5801
5812
  import { z as z6 } from "zod";
5802
5813
  var inputSystemSchema = z6.object({
@@ -6157,17 +6168,6 @@ function FeedbackMessage({
6157
6168
  // ../blocks/src/system/runtime/nodes/booking-form.client.tsx
6158
6169
  import React3, { useRef as useRef7, useState as useState6 } from "react";
6159
6170
 
6160
- // ../logger/src/noop.ts
6161
- var noop = () => {
6162
- };
6163
- var logger = {
6164
- debug: noop,
6165
- info: noop,
6166
- warn: noop,
6167
- error: noop,
6168
- withFields: (_) => logger
6169
- };
6170
-
6171
6171
  // ../altcha/src/AltchaWidget.tsx
6172
6172
  import { useEffect, useRef, useState } from "react";
6173
6173
  import { jsx as jsx4 } from "react/jsx-runtime";
@@ -1,7 +1,7 @@
1
1
  import { normalizeCarouselProps, CarouselNodeClient } from './chunk-II7O4XN3.mjs';
2
2
  import './chunk-RTZ3JKKX.mjs';
3
3
  import { mountReactIsland } from './chunk-N7PBWBWQ.mjs';
4
- import { defineIslandPropsDecoder } from './chunk-FU2QRZMX.mjs';
4
+ import { defineIslandPropsDecoder } from './chunk-7UOSCYY4.mjs';
5
5
  import './chunk-PMAIXMAB.mjs';
6
6
  import { jsx } from 'react/jsx-runtime';
7
7
 
@@ -1,14 +1,14 @@
1
- import { mountShopBlockIsland, CartClient } from './chunk-NWOUL6JY.mjs';
2
- import './chunk-ZLMS67RR.mjs';
1
+ import { mountShopBlockIsland, CartClient } from './chunk-PFBX3IQL.mjs';
2
+ import './chunk-BOIHIU7E.mjs';
3
3
  import './chunk-II7O4XN3.mjs';
4
4
  import './chunk-I2MMZO53.mjs';
5
5
  import './chunk-RTZ3JKKX.mjs';
6
- import './chunk-2PHQZ666.mjs';
6
+ import './chunk-JEZECJ3W.mjs';
7
7
  import './chunk-3DCJ45Z2.mjs';
8
8
  import './chunk-3PEDD5KJ.mjs';
9
9
  import './chunk-M3L3KYYR.mjs';
10
10
  import './chunk-N7PBWBWQ.mjs';
11
- import { defineIslandPropsDecoder } from './chunk-FU2QRZMX.mjs';
11
+ import { defineIslandPropsDecoder } from './chunk-7UOSCYY4.mjs';
12
12
  import './chunk-PMAIXMAB.mjs';
13
13
 
14
14
  // src/rendering/islands/enhancers/cart.tsx
@@ -1,14 +1,14 @@
1
- import { mountShopBlockIsland, CheckoutClient } from './chunk-NWOUL6JY.mjs';
2
- import './chunk-ZLMS67RR.mjs';
1
+ import { mountShopBlockIsland, CheckoutClient } from './chunk-PFBX3IQL.mjs';
2
+ import './chunk-BOIHIU7E.mjs';
3
3
  import './chunk-II7O4XN3.mjs';
4
4
  import './chunk-I2MMZO53.mjs';
5
5
  import './chunk-RTZ3JKKX.mjs';
6
- import './chunk-2PHQZ666.mjs';
6
+ import './chunk-JEZECJ3W.mjs';
7
7
  import './chunk-3DCJ45Z2.mjs';
8
8
  import './chunk-3PEDD5KJ.mjs';
9
9
  import './chunk-M3L3KYYR.mjs';
10
10
  import './chunk-N7PBWBWQ.mjs';
11
- import { defineIslandPropsDecoder } from './chunk-FU2QRZMX.mjs';
11
+ import { defineIslandPropsDecoder } from './chunk-7UOSCYY4.mjs';
12
12
  import './chunk-PMAIXMAB.mjs';
13
13
 
14
14
  // src/rendering/islands/enhancers/checkout.tsx
@@ -4255,7 +4255,18 @@ function getBookingSuccessMessage(successMessage) {
4255
4255
  return successMessage?.trim() || "Your appointment has been booked! Check your email for confirmation.";
4256
4256
  }
4257
4257
 
4258
- // ../blocks/src/system/runtime/nodes/booking-form.interactive.ts
4258
+ // ../logger/src/noop.ts
4259
+ var noop = () => {
4260
+ };
4261
+ var logger = {
4262
+ debug: noop,
4263
+ info: noop,
4264
+ warn: noop,
4265
+ error: noop,
4266
+ withFields: (_) => logger
4267
+ };
4268
+
4269
+ // ../blocks/src/system/runtime/nodes/booking-runtime-sources.ts
4259
4270
  var bookingFieldOptionSchema = z.object({
4260
4271
  value: z.string(),
4261
4272
  label: z.string()
@@ -4309,6 +4320,8 @@ var bookingSourceFormSchema = z.object({
4309
4320
  createdAt: z.string(),
4310
4321
  updatedAt: z.string()
4311
4322
  });
4323
+
4324
+ // ../blocks/src/system/runtime/nodes/booking-form.interactive.ts
4312
4325
  var blockBookingPaymentTermsAvailabilitySchema = z.union([
4313
4326
  z.object({
4314
4327
  kind: z.literal("available"),
@@ -5601,6 +5614,37 @@ function pickReadableTextColor(background) {
5601
5614
  return "rgb(var(--tb-onAccent, 255 255 255))";
5602
5615
  }
5603
5616
  }
5617
+ function BookingOptionCompactRow({
5618
+ option,
5619
+ buttonVariant = "primary"
5620
+ }) {
5621
+ const primaryMeta = option.primaryMeta?.filter((item) => item.length > 0) ?? [];
5622
+ const secondaryMeta = option.secondaryMeta?.filter((item) => item.label.length > 0) ?? [];
5623
+ const buttonClass = themeButtonClassName({ variant: buttonVariant, size: "sm" });
5624
+ return /* @__PURE__ */ jsxs("div", { className: "event-compact-row", children: [
5625
+ /* @__PURE__ */ jsxs("div", { className: "event-compact-row-content", children: [
5626
+ /* @__PURE__ */ jsxs("div", { className: "event-compact-row-top", children: [
5627
+ /* @__PURE__ */ jsx("span", { className: "event-compact-row-title", children: option.title }),
5628
+ primaryMeta.length > 0 && /* @__PURE__ */ jsx("span", { className: "event-compact-row-datetime", children: primaryMeta.join(" \xB7 ") })
5629
+ ] }),
5630
+ /* @__PURE__ */ jsxs("div", { className: "event-compact-row-bottom", children: [
5631
+ secondaryMeta.map((item) => /* @__PURE__ */ jsxs(
5632
+ "span",
5633
+ {
5634
+ className: item.className,
5635
+ children: [
5636
+ item.icon,
5637
+ item.label
5638
+ ]
5639
+ },
5640
+ item.id ?? `${item.className ?? "meta"}:${item.label}`
5641
+ )),
5642
+ option.priceLabel && /* @__PURE__ */ jsx("span", { className: "event-compact-row-price", children: option.priceLabel })
5643
+ ] })
5644
+ ] }),
5645
+ option.action.kind === "status" ? /* @__PURE__ */ jsx("span", { className: "event-compact-row-status", children: option.action.label }) : /* @__PURE__ */ jsx("a", { href: option.action.href, className: `${buttonClass} event-compact-row-cta`, children: option.action.label })
5646
+ ] });
5647
+ }
5604
5648
  var EventCompactRow = ({
5605
5649
  event,
5606
5650
  buttonVariant = "primary",
@@ -5612,28 +5656,31 @@ var EventCompactRow = ({
5612
5656
  const price = formatEventPrice(event);
5613
5657
  const teacherLine = formatEventTeacherLine(event);
5614
5658
  const cta = resolveEventCta(event, buttonText);
5615
- const buttonClass = themeButtonClassName({ variant: buttonVariant, size: "sm" });
5616
- return /* @__PURE__ */ jsxs("div", { className: "event-compact-row", children: [
5617
- /* @__PURE__ */ jsxs("div", { className: "event-compact-row-content", children: [
5618
- /* @__PURE__ */ jsxs("div", { className: "event-compact-row-top", children: [
5619
- /* @__PURE__ */ jsx("span", { className: "event-compact-row-title", children: event.title }),
5620
- /* @__PURE__ */ jsxs("span", { className: "event-compact-row-datetime", children: [
5621
- formattedDate,
5622
- " \xB7 ",
5623
- formattedTime
5624
- ] })
5625
- ] }),
5626
- /* @__PURE__ */ jsxs("div", { className: "event-compact-row-bottom", children: [
5627
- event.venue && /* @__PURE__ */ jsxs("span", { className: "event-compact-row-venue", children: [
5628
- /* @__PURE__ */ jsx(MapPinIcon, { className: "rb-shrink-0" }),
5629
- event.venue.name
5630
- ] }),
5631
- teacherLine && /* @__PURE__ */ jsx("span", { className: "event-compact-row-teacher", children: teacherLine }),
5632
- /* @__PURE__ */ jsx("span", { className: "event-compact-row-price", children: price })
5633
- ] })
5634
- ] }),
5635
- cta.hidden ? /* @__PURE__ */ jsx("span", { className: "event-compact-row-status", children: cta.label }) : /* @__PURE__ */ jsx("a", { href: cta.href, className: `${buttonClass} event-compact-row-cta`, children: cta.label })
5636
- ] });
5659
+ const option = {
5660
+ id: event.occurrenceId ?? event.id,
5661
+ title: event.title,
5662
+ primaryMeta: [formattedDate, formattedTime],
5663
+ secondaryMeta: [
5664
+ ...event.venue ? [
5665
+ {
5666
+ id: "venue",
5667
+ label: event.venue.name,
5668
+ icon: /* @__PURE__ */ jsx(MapPinIcon, { className: "rb-shrink-0" }),
5669
+ className: "event-compact-row-venue"
5670
+ }
5671
+ ] : [],
5672
+ ...teacherLine ? [
5673
+ {
5674
+ id: "teacher",
5675
+ label: teacherLine,
5676
+ className: "event-compact-row-teacher"
5677
+ }
5678
+ ] : []
5679
+ ],
5680
+ priceLabel: price,
5681
+ action: cta.hidden ? { kind: "status", label: cta.label } : { kind: "action", label: cta.label, href: cta.href }
5682
+ };
5683
+ return /* @__PURE__ */ jsx(BookingOptionCompactRow, { buttonVariant, option });
5637
5684
  };
5638
5685
  var EmptyState = ({
5639
5686
  message = "No upcoming events scheduled.",
@@ -7614,4 +7661,4 @@ function defineIslandPropsDecoder(kind) {
7614
7661
  };
7615
7662
  }
7616
7663
 
7617
- export { BOOKING_FORM_DATA_RESERVED_KEYS, DateTimeTile, EMPTY_COMMERCE_CART_STATE, EmptyState, EventCard, EventCompactRow, MAX_EVENTS_PER_DAY, MONTH_NAMES, addMonths, assertNever, buildCartDisplay, buildEventCalendarListingRender, buildPassCartItem, buildProductCardDisplay, buildProductCartItem, buildProductDetailDisplay, buildTimetableModel, defineIslandPropsDecoder, deriveBookingFormViewState, err, formatBookingSubmissionPreparationError, formatCalendarTitle, formatCommercePrice, formatCoursePriceAmount, formatCoursePriceDisplay, formatDate, formatDateKey, formatEventDateParts, formatEventPrice, formatEventTeacherLine, formatInterval, formatTime, getBookingRedirectStateFromLocation, getBookingSuccessMessage, getCardOrientation, getContainerClass, getEventAvailability, getMonthCalendarDays, getOrderedDayNames, getShopDisplayForItems, getThreeMonthRange, getWeekCalendarDays, groupEventsByDate, isEventContentType, isToday, normalizeEventBlockKind, normalizeIdList, ok, okWith, parseStoredCommerceCartState, prepareBookingSubmission, productItemKey, reduceCommerceCart, resolveAppointmentCheckoutVerificationState, resolveBookingPaymentStep, resolveBookingSiteId, resolveCoursePricingState, resolveDefaultBookingServiceId, themeButtonClassName, toSelectedCollectionOptionKind };
7664
+ export { BOOKING_FORM_DATA_RESERVED_KEYS, DateTimeTile, EMPTY_COMMERCE_CART_STATE, EmptyState, EventCard, EventCompactRow, MAX_EVENTS_PER_DAY, MONTH_NAMES, addMonths, assertNever, buildCartDisplay, buildEventCalendarListingRender, buildPassCartItem, buildProductCardDisplay, buildProductCartItem, buildProductDetailDisplay, buildTimetableModel, defineIslandPropsDecoder, deriveBookingFormViewState, err, formatBookingSubmissionPreparationError, formatCalendarTitle, formatCommercePrice, formatCoursePriceAmount, formatCoursePriceDisplay, formatDate, formatDateKey, formatEventDateParts, formatEventPrice, formatEventTeacherLine, formatInterval, formatTime, getBookingRedirectStateFromLocation, getBookingSuccessMessage, getCardOrientation, getContainerClass, getEventAvailability, getMonthCalendarDays, getOrderedDayNames, getShopDisplayForItems, getThreeMonthRange, getWeekCalendarDays, groupEventsByDate, isEventContentType, isToday, logger, normalizeEventBlockKind, normalizeIdList, ok, okWith, parseStoredCommerceCartState, prepareBookingSubmission, productItemKey, reduceCommerceCart, resolveAppointmentCheckoutVerificationState, resolveBookingPaymentStep, resolveBookingSiteId, resolveCoursePricingState, resolveDefaultBookingServiceId, themeButtonClassName, toSelectedCollectionOptionKind };
@@ -1,4 +1,4 @@
1
- import { EMPTY_COMMERCE_CART_STATE, parseStoredCommerceCartState, reduceCommerceCart, buildPassCartItem } from './chunk-FU2QRZMX.mjs';
1
+ import { EMPTY_COMMERCE_CART_STATE, parseStoredCommerceCartState, reduceCommerceCart, buildPassCartItem } from './chunk-7UOSCYY4.mjs';
2
2
  import * as React from 'react';
3
3
 
4
4
  var EMPTY_STATE = EMPTY_COMMERCE_CART_STATE;
@@ -1,6 +1,6 @@
1
1
  "use client";
2
2
  import { useBlockApi, BlockApiError } from './chunk-M3L3KYYR.mjs';
3
- import { themeButtonClassName } from './chunk-FU2QRZMX.mjs';
3
+ import { themeButtonClassName } from './chunk-7UOSCYY4.mjs';
4
4
  import { useState, useSyncExternalStore, useEffect } from 'react';
5
5
  import { jsxs, jsx } from 'react/jsx-runtime';
6
6
 
@@ -1,5 +1,5 @@
1
1
  "use client";
2
- import { assertNever } from './chunk-FU2QRZMX.mjs';
2
+ import { assertNever } from './chunk-7UOSCYY4.mjs';
3
3
  import { useState, useEffect, useReducer, useRef, useCallback } from 'react';
4
4
 
5
5
  function useDiscountCodeUi(options) {
@@ -1,12 +1,12 @@
1
1
  "use client";
2
- import { addPassToCommerceCart, useCommerceCart } from './chunk-ZLMS67RR.mjs';
2
+ import { addPassToCommerceCart, useCommerceCart } from './chunk-BOIHIU7E.mjs';
3
3
  import { CarouselNodeClient } from './chunk-II7O4XN3.mjs';
4
4
  import { isRecord } from './chunk-I2MMZO53.mjs';
5
- import { createBodyThemePortalRoot, consumeSearchParams, scrollToBlock, TerminalPanel, StateIcon, CheckIcon, CrossIcon, ActionRow, consumeSearchParam, buildCheckoutReturnUrls } from './chunk-2PHQZ666.mjs';
5
+ import { createBodyThemePortalRoot, consumeSearchParams, scrollToBlock, TerminalPanel, StateIcon, CheckIcon, CrossIcon, ActionRow, consumeSearchParam, buildCheckoutReturnUrls } from './chunk-JEZECJ3W.mjs';
6
6
  import { ModalShell, resolveDedicatedCheckoutPath } from './chunk-3PEDD5KJ.mjs';
7
7
  import { useBlockApi, FeedbackMessage, BlockApiProvider } from './chunk-M3L3KYYR.mjs';
8
8
  import { mountReactIsland } from './chunk-N7PBWBWQ.mjs';
9
- import { themeButtonClassName, formatCommercePrice, formatInterval, getShopDisplayForItems, buildProductDetailDisplay, productItemKey, buildProductCartItem, buildProductCardDisplay, assertNever } from './chunk-FU2QRZMX.mjs';
9
+ import { themeButtonClassName, formatCommercePrice, formatInterval, getShopDisplayForItems, buildProductDetailDisplay, productItemKey, buildProductCartItem, buildProductCardDisplay, assertNever } from './chunk-7UOSCYY4.mjs';
10
10
  import { getCurrentResolveImageUrlContext, resolveImageUrlWithContext, ImagePresets } from './chunk-PMAIXMAB.mjs';
11
11
  import * as React3 from 'react';
12
12
  import React3__default, { useState, useRef, useCallback, useEffect } from 'react';
@@ -1,15 +1,15 @@
1
1
  "use client";
2
2
  import { LeafletStaticMap } from './chunk-F7LHOKEH.mjs';
3
- import { MagicLinkForm, useWaitlistClaim } from './chunk-CY2ZTSE5.mjs';
3
+ import { MagicLinkForm, useWaitlistClaim } from './chunk-FGUIVT2B.mjs';
4
4
  import { CreditCard, Ticket, Star, Sparkles } from './chunk-RTZ3JKKX.mjs';
5
- import { useDiscountCodeUi, usePolling } from './chunk-WJXXNDSE.mjs';
5
+ import { useDiscountCodeUi, usePolling } from './chunk-J227A3CQ.mjs';
6
6
  import { SpinnerNode } from './chunk-TQ5MSPDX.mjs';
7
- import { TabBarFragment, logoutPortal, StepIndicator, TerminalPanel, StateIcon, formatPrice, CrossIcon, ClockIcon, consumeSearchParam, LoggedInAsUser, CheckIcon } from './chunk-2PHQZ666.mjs';
7
+ import { TabBarFragment, logoutPortal, StepIndicator, TerminalPanel, StateIcon, formatPrice, CrossIcon, ClockIcon, consumeSearchParam, LoggedInAsUser, CheckIcon } from './chunk-JEZECJ3W.mjs';
8
8
  import { getFieldValidationControlProps, FieldValidationMessage } from './chunk-3DCJ45Z2.mjs';
9
9
  import { ModalShell } from './chunk-3PEDD5KJ.mjs';
10
10
  import { isSpamProtectionEnabled, AltchaWidget, getChallengeUrl } from './chunk-YLMKMCSJ.mjs';
11
11
  import { useBlockApi, FeedbackMessage } from './chunk-M3L3KYYR.mjs';
12
- import { buildEventCalendarListingRender, getWeekCalendarDays, formatCalendarTitle, groupEventsByDate, getOrderedDayNames, getMonthCalendarDays, formatDateKey, themeButtonClassName, normalizeEventBlockKind, EventCompactRow, EmptyState, getContainerClass, getCardOrientation, addMonths, getThreeMonthRange, isToday, MAX_EVENTS_PER_DAY, formatTime, resolveCoursePricingState, formatEventDateParts, formatCoursePriceAmount, DateTimeTile, normalizeIdList, EventCard, buildTimetableModel, formatDate, isEventContentType, formatCoursePriceDisplay, MONTH_NAMES, formatEventPrice, getEventAvailability, formatEventTeacherLine, assertNever } from './chunk-FU2QRZMX.mjs';
12
+ import { buildEventCalendarListingRender, getWeekCalendarDays, formatCalendarTitle, groupEventsByDate, getOrderedDayNames, getMonthCalendarDays, formatDateKey, themeButtonClassName, normalizeEventBlockKind, EventCompactRow, EmptyState, getContainerClass, getCardOrientation, addMonths, getThreeMonthRange, isToday, MAX_EVENTS_PER_DAY, formatTime, resolveCoursePricingState, formatEventDateParts, formatCoursePriceAmount, DateTimeTile, normalizeIdList, EventCard, buildTimetableModel, formatDate, isEventContentType, formatCoursePriceDisplay, MONTH_NAMES, formatEventPrice, getEventAvailability, formatEventTeacherLine, assertNever } from './chunk-7UOSCYY4.mjs';
13
13
  import { getBookingLocalDateKey, toScheduledBookingDateTime, toBookingTimeZone, formatBookingDateTime, formatBookingDate, formatBookingTime } from './chunk-PMAIXMAB.mjs';
14
14
  import { createContext, useId, useMemo, useState, useRef, useEffect, useCallback, useContext, useReducer } from 'react';
15
15
  import { jsx, jsxs, Fragment } from 'react/jsx-runtime';