@riverbankcms/sdk 0.96.0 → 0.99.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 (208) hide show
  1. package/README.md +20 -1
  2. package/dist/{PreviewEditorSidebar-46VT4QVU.mjs → PreviewEditorSidebar-TPOKCCKY.mjs} +3 -3
  3. package/dist/{PreviewEditorUI-JD75GE5F.mjs → PreviewEditorUI-Y347GLC2.mjs} +3 -3
  4. package/dist/SdkPreviewModeRuntime-OGTXRQ4M.mjs +8 -0
  5. package/dist/_dts/ai/src/contracts/proposals.d.ts +36 -36
  6. package/dist/_dts/api/src/billing.d.ts +2 -0
  7. package/dist/_dts/api/src/bookingManagementEndpoints.d.ts +35 -1
  8. package/dist/_dts/api/src/bookingOperations.d.ts +246 -0
  9. package/dist/_dts/api/src/commercePortalEndpoints.d.ts +5 -1
  10. package/dist/_dts/api/src/contentRuntime.d.ts +109 -40
  11. package/dist/_dts/api/src/endpoints.d.ts +88 -0
  12. package/dist/_dts/api/src/index.d.ts +3 -2
  13. package/dist/_dts/api/src/public/endpoints.d.ts +1 -1
  14. package/dist/_dts/api/src/publicExperienceEndpoints.d.ts +10 -0
  15. package/dist/_dts/api/src/sdkContracts.d.ts +2 -0
  16. package/dist/_dts/api/src/siteManagementEndpoints.d.ts +2 -1
  17. package/dist/_dts/api/src/siteOperations.d.ts +65 -1
  18. package/dist/_dts/api/src/siteRuntimeEndpoints.d.ts +7 -1
  19. package/dist/_dts/billing/src/site-arrangements.d.ts +151 -0
  20. package/dist/_dts/billing/src/subscriptions/store.d.ts +2 -0
  21. package/dist/_dts/block-form/src/widgets/RepeaterField/utils/resolveThumbnail.d.ts +2 -1
  22. package/dist/_dts/blocks/src/PageRenderer.d.ts +8 -1
  23. package/dist/_dts/blocks/src/bindings/types.d.ts +0 -4
  24. package/dist/_dts/blocks/src/client/site-chrome.d.ts +7 -0
  25. package/dist/_dts/blocks/src/contracts/index.d.ts +1 -0
  26. package/dist/_dts/blocks/src/contracts/proof-block-islands.d.ts +12 -12
  27. package/dist/_dts/blocks/src/primitives/content/primitives.d.ts +4 -0
  28. package/dist/_dts/blocks/src/system/blocks/events/shared/index.d.ts +1 -0
  29. package/dist/_dts/blocks/src/system/blocks/events/shared/layout.d.ts +2 -0
  30. package/dist/_dts/blocks/src/system/blocks/index.d.ts +1 -0
  31. package/dist/_dts/blocks/src/system/blocks/weekly-slot-availability.d.ts +34 -0
  32. package/dist/_dts/blocks/src/system/componentFactory.d.ts +1 -0
  33. package/dist/_dts/blocks/src/system/constants/blockKinds.d.ts +1 -1
  34. package/dist/_dts/blocks/src/system/customize/facets.d.ts +2 -2
  35. package/dist/_dts/blocks/src/system/data/loaderEndpoints.d.ts +1 -1
  36. package/dist/_dts/blocks/src/system/data/prefetchBlockData.d.ts +4 -1
  37. package/dist/_dts/blocks/src/system/node/builder.d.ts +2 -0
  38. package/dist/_dts/blocks/src/system/node/schema.d.ts +13 -0
  39. package/dist/_dts/blocks/src/system/node/validation-constants.d.ts +1 -1
  40. package/dist/_dts/blocks/src/system/registry.d.ts +1 -0
  41. package/dist/_dts/blocks/src/system/runtime/api/client.d.ts +2 -1
  42. package/dist/_dts/blocks/src/system/runtime/api/endpoints.d.ts +8 -0
  43. package/dist/_dts/blocks/src/system/runtime/api/types.d.ts +24 -0
  44. package/dist/_dts/blocks/src/system/runtime/components/booking/DatePicker.d.ts +6 -2
  45. package/dist/_dts/blocks/src/system/runtime/components/booking/SuccessMessage.d.ts +3 -1
  46. package/dist/_dts/blocks/src/system/runtime/components/booking/TimeSlotSelector.d.ts +10 -4
  47. package/dist/_dts/blocks/src/system/runtime/components/registry.client.d.ts +6 -0
  48. package/dist/_dts/blocks/src/system/runtime/hooks/useAppointmentCheckoutVerification.d.ts +7 -0
  49. package/dist/_dts/blocks/src/system/runtime/hooks/useAvailableSlots.d.ts +2 -2
  50. package/dist/_dts/blocks/src/system/runtime/hooks/useHeadlessBookingFlow.state.d.ts +2 -2
  51. package/dist/_dts/blocks/src/system/runtime/hooks/useHeadlessEventRegistrationFlow.d.ts +4 -0
  52. package/dist/_dts/blocks/src/system/runtime/hooks/usePaymentVerification.d.ts +5 -0
  53. package/dist/_dts/blocks/src/system/runtime/nodes/booking-form.headless.state.d.ts +11 -0
  54. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/StepIndicator.d.ts +3 -1
  55. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/hooks.d.ts +14 -0
  56. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/useEventRegistrationSubmit.d.ts +8 -2
  57. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/useEventRegistrationWizard.d.ts +133 -2
  58. package/dist/_dts/blocks/src/system/runtime/nodes/weekly-slot-availability.client.controller.d.ts +3 -0
  59. package/dist/_dts/blocks/src/system/runtime/nodes/weekly-slot-availability.client.d.ts +9 -0
  60. package/dist/_dts/blocks/src/system/runtime/nodes/weekly-slot-availability.client.state.d.ts +14 -0
  61. package/dist/_dts/blocks/src/system/runtime/nodes/weekly-slot-availability.server.d.ts +10 -0
  62. package/dist/_dts/blocks/src/system/runtime/nodes/weekly-slot-availability.view.d.ts +11 -0
  63. package/dist/_dts/blocks/src/system/runtime/resolver.d.ts +31 -1
  64. package/dist/_dts/blocks/src/system/runtime/shared/components/FeedbackMessage.d.ts +2 -1
  65. package/dist/_dts/blocks/src/system/runtime/{nodes/event-registration → shared/components}/SelectableOptionCard.d.ts +11 -2
  66. package/dist/_dts/blocks/src/system/runtime/shared/components/StepIndicator.d.ts +16 -5
  67. package/dist/_dts/blocks/src/system/runtime/shared/components/index.d.ts +2 -0
  68. package/dist/_dts/blocks/src/system/runtime/shared/index.d.ts +2 -2
  69. package/dist/_dts/blocks/src/system/runtime/shared/useWaitlistClaim.d.ts +5 -0
  70. package/dist/_dts/blocks/src/utils/date-formatting.d.ts +18 -2
  71. package/dist/_dts/content-editor/src/primitives/PreviewInlineTextEditor.d.ts +1 -1
  72. package/dist/_dts/content-editor/src/primitives/PreviewRichTextEditor.d.ts +1 -1
  73. package/dist/_dts/content-model/src/templates/defaults.d.ts +5 -5
  74. package/dist/_dts/content-model/src/templates/types.d.ts +2 -6
  75. package/dist/_dts/core/src/branded.d.ts +8 -0
  76. package/dist/_dts/db/src/generated/supabase/database.types.d.ts +767 -20
  77. package/dist/_dts/field-primitives/src/bindings/index.d.ts +8 -0
  78. package/dist/_dts/sdk/src/__mocks__/next-cache.d.ts +1 -1
  79. package/dist/_dts/sdk/src/cli/commands/push/publishGuidance.d.ts +15 -0
  80. package/dist/_dts/sdk/src/cli/commands/push/scopes/commandBackedDatedOfferingScope.d.ts +2 -1
  81. package/dist/_dts/sdk/src/cli/commands/push/scopes/types.d.ts +3 -1
  82. package/dist/_dts/sdk/src/cli/commands/push/stale-resolution.d.ts +9 -3
  83. package/dist/_dts/sdk/src/cli/commands/push/workflowPlan.d.ts +34 -0
  84. package/dist/_dts/sdk/src/cli/commands/push.d.ts +13 -0
  85. package/dist/_dts/sdk/src/cli/commands/setup.d.ts +2 -0
  86. package/dist/_dts/sdk/src/cli/config-loader.d.ts +2 -0
  87. package/dist/_dts/sdk/src/cli/content/metadataStore.d.ts +29 -0
  88. package/dist/_dts/sdk/src/cli/content/reader.d.ts +16 -14
  89. package/dist/_dts/sdk/src/cli/content/writer.d.ts +6 -4
  90. package/dist/_dts/sdk/src/cli/env-scope.d.ts +2 -0
  91. package/dist/_dts/sdk/src/cli/helpers.d.ts +6 -7
  92. package/dist/_dts/sdk/src/cli/merge-remote/entryMergePush.d.ts +2 -0
  93. package/dist/_dts/sdk/src/cli/merge-remote/entryMergeReport.d.ts +6 -18
  94. package/dist/_dts/sdk/src/cli/merge-remote/entrySnapshots.d.ts +2 -4
  95. package/dist/_dts/sdk/src/cli/merge-remote/pageMergePush.d.ts +2 -0
  96. package/dist/_dts/sdk/src/cli/merge-remote/pageMergeReport.d.ts +6 -18
  97. package/dist/_dts/sdk/src/cli/merge-remote/pageSnapshots.d.ts +2 -4
  98. package/dist/_dts/sdk/src/cli/merge-remote/sharedBaseSnapshots.d.ts +32 -0
  99. package/dist/_dts/sdk/src/cli/merge-remote/sharedMergePlan.d.ts +27 -0
  100. package/dist/_dts/sdk/src/cli/merge-remote/sharedMergeReport.d.ts +63 -0
  101. package/dist/_dts/sdk/src/cli/push-config.d.ts +13 -2
  102. package/dist/_dts/sdk/src/cli/setup/setupPlan.d.ts +51 -0
  103. package/dist/_dts/sdk/src/cli/site-commands/commandRuntime.d.ts +21 -0
  104. package/dist/_dts/sdk/src/client/index.d.ts +6 -0
  105. package/dist/_dts/sdk/src/client/runtimeCachePolicy.d.ts +1 -1
  106. package/dist/_dts/sdk/src/client/types.d.ts +18 -2
  107. package/dist/_dts/sdk/src/config/types.d.ts +1 -1
  108. package/dist/_dts/sdk/src/config/validation.d.ts +3 -0
  109. package/dist/_dts/sdk/src/contracts/bindings.d.ts +3 -7
  110. package/dist/_dts/sdk/src/contracts/system-block-content.d.ts +13 -0
  111. package/dist/_dts/sdk/src/data/prefetchBlockData.d.ts +6 -1
  112. package/dist/_dts/sdk/src/next/route-outcome-proxy.d.ts +3 -3
  113. package/dist/_dts/sdk/src/next/types.d.ts +19 -0
  114. package/dist/_dts/sdk/src/prebuild/loader.d.ts +8 -1
  115. package/dist/_dts/sdk/src/public-api/contracts.d.ts +174 -78
  116. package/dist/_dts/sdk/src/public-api/runtime.d.ts +1 -1
  117. package/dist/_dts/sdk/src/rendering/blocks-page-renderer.d.ts +2 -0
  118. package/dist/_dts/sdk/src/rendering/components/pageShared.d.ts +4 -0
  119. package/dist/_dts/sdk/src/rendering/helpers/bindings.d.ts +4 -4
  120. package/dist/_dts/sdk/src/rendering/helpers/loadContent.d.ts +58 -1
  121. package/dist/_dts/sdk/src/rendering/helpers/loadPage.d.ts +8 -0
  122. package/dist/_dts/sdk/src/rendering/hooks/usePage.d.ts +2 -2
  123. package/dist/_dts/sdk/src/rendering/index.d.ts +7 -7
  124. package/dist/_dts/sdk/src/rendering/islands/types.d.ts +18 -66
  125. package/dist/_dts/sdk/src/rendering/overrides.d.ts +2 -0
  126. package/dist/_dts/sdk/src/routing/resolveRoute.d.ts +18 -0
  127. package/dist/_dts/sdk/src/test/apiClient.d.ts +17 -0
  128. package/dist/_dts/sdk/src/test/bunDom.setup.d.ts +1 -0
  129. package/dist/_dts/sdk/src/test/env.d.ts +4 -0
  130. package/dist/_dts/sdk/src/types/block-kinds.d.ts +1 -1
  131. package/dist/_dts/sdk/src/version.d.ts +1 -1
  132. package/dist/_dts/site-commands/src/commands.d.ts +3 -3
  133. package/dist/_dts/theme-core/src/generated/containerResponsiveThemeCss.d.ts +1 -1
  134. package/dist/_dts/theme-core/src/interactive/generateBaseCSS.d.ts +6 -0
  135. package/dist/_dts/theme-core/src/status/contextualColors.d.ts +6 -0
  136. package/dist/_dts/theme-core/src/status/index.d.ts +1 -0
  137. package/dist/{chunk-VHIMXQ7Z.mjs → chunk-4HXF2QLH.mjs} +2 -2
  138. package/dist/{chunk-VTPPVAOL.mjs → chunk-EMJIT3ZJ.mjs} +1 -1
  139. package/dist/{chunk-4TLTV7OB.mjs → chunk-PM7HGDHM.mjs} +2 -2
  140. package/dist/{chunk-XMATDBXO.mjs → chunk-XO34WBBP.mjs} +2139 -1348
  141. package/dist/{chunk-EL55VV6Q.mjs → chunk-YGTTEVUM.mjs} +31 -10
  142. package/dist/{chunk-7ED5UNHL.mjs → chunk-YWTCCOSF.mjs} +117 -0
  143. package/dist/cli/index.mjs +2690 -1503
  144. package/dist/cli/init-docs/content/cli-reference.md +29 -1
  145. package/dist/cli/init-docs/content/getting-started.md +8 -0
  146. package/dist/cli/init-docs/content/workflow-agent-safe-sync.md +3 -1
  147. package/dist/cli/init-docs/content/workflow-preview-mode.md +6 -0
  148. package/dist/cli/init-docs/content/workflow-remote-setup.md +51 -0
  149. package/dist/client/{accordion-GUNXIIZR.mjs → accordion-QSUEYL4L.mjs} +2 -2
  150. package/dist/client/{bookingForm-AOU4VHP5.mjs → bookingForm-QYGAHPDP.mjs} +376 -302
  151. package/dist/client/bookings.mjs +795 -429
  152. package/dist/client/{carousel-4QSX2JPC.mjs → carousel-SM2LEWAU.mjs} +3 -3
  153. package/dist/client/{cart-JKN6C4ZB.mjs → cart-3N3SFKNQ.mjs} +7 -7
  154. package/dist/client/{checkout-YY6YMITW.mjs → checkout-YFAYPKPZ.mjs} +7 -7
  155. package/dist/client/{chunk-SY543WZ3.mjs → chunk-5DLGREUB.mjs} +1 -1
  156. package/dist/client/{chunk-A3YN7M3G.mjs → chunk-CLZ7NBSP.mjs} +147 -75
  157. package/dist/client/{chunk-GWCRCJLB.mjs → chunk-CYJ3MUFP.mjs} +18 -6
  158. package/dist/client/{chunk-JNE6UI6U.mjs → chunk-H3H3ODO7.mjs} +1 -1
  159. package/dist/client/{chunk-CPKMJVBD.mjs → chunk-HPEQ4YWW.mjs} +83 -109
  160. package/dist/client/{chunk-PCHACQEB.mjs → chunk-IIUIKJ4K.mjs} +15 -7
  161. package/dist/client/{chunk-TNGL2WJF.mjs → chunk-IOAHWAQG.mjs} +18 -0
  162. package/dist/client/{chunk-6H27K6AA.mjs → chunk-JTKBF3W2.mjs} +10 -4
  163. package/dist/client/{chunk-OLAOAZEO.mjs → chunk-K7KTSACR.mjs} +1 -1
  164. package/dist/client/{chunk-BFCJZODD.mjs → chunk-R32M5HFS.mjs} +6 -6
  165. package/dist/client/{chunk-VJROUYOQ.mjs → chunk-WEVT46PX.mjs} +3 -3
  166. package/dist/client/{chunk-H7A6PUGM.mjs → chunk-ZU65LTI3.mjs} +1 -1
  167. package/dist/client/client.mjs +5052 -4083
  168. package/dist/client/{courseRegistration-UU2KMPSQ.mjs → courseRegistration-LYBE7VVK.mjs} +7 -7
  169. package/dist/client/{eventCalendar-WIVNS2TM.mjs → eventCalendar-FMTB75X6.mjs} +9 -9
  170. package/dist/client/{eventCombined-P3G5MW4J.mjs → eventCombined-E4LUCJXT.mjs} +9 -9
  171. package/dist/client/{eventDetails-2VHJ2RDG.mjs → eventDetails-GELSRR4Z.mjs} +9 -9
  172. package/dist/client/{eventListing-TGO6JI3R.mjs → eventListing-TB623B6R.mjs} +9 -9
  173. package/dist/client/{eventRegistration-B46HEJES.mjs → eventRegistration-NRIKHXTI.mjs} +9 -9
  174. package/dist/client/{form-VKRTFUNQ.mjs → form-Y4U4IAXE.mjs} +3 -3
  175. package/dist/client/{headerSection-XUX4ZJLO.mjs → headerSection-QSOVV5P7.mjs} +3 -3
  176. package/dist/client/hooks.mjs +1776 -1355
  177. package/dist/client/{locationMap-NQFI5MJO.mjs → locationMap-QYCAHH7H.mjs} +3 -3
  178. package/dist/client/{newsletterForm-P2GETCQK.mjs → newsletterForm-NWHY5TBY.mjs} +3 -3
  179. package/dist/client/{productDetail-7NQ7O5IF.mjs → productDetail-FYDMU2CE.mjs} +7 -7
  180. package/dist/client/{productList-RX6ZJ7BL.mjs → productList-D76CGACQ.mjs} +7 -7
  181. package/dist/client/rendering/client.mjs +2990 -2470
  182. package/dist/client/rendering/islands.mjs +19 -19
  183. package/dist/client/rendering.mjs +3236 -2236
  184. package/dist/client/{shop-BHN5AKY6.mjs → shop-SOUACT5N.mjs} +7 -7
  185. package/dist/preview-next/before-render.mjs +117 -0
  186. package/dist/preview-next/client/runtime.mjs +5 -5
  187. package/dist/preview-next/middleware.mjs +117 -0
  188. package/dist/{sdk-runtime-X2LXQ5IC.mjs → sdk-runtime-XPVE3LBA.mjs} +6 -6
  189. package/dist/server/components.mjs +3115 -2484
  190. package/dist/server/config-template-validation.mjs +6 -2
  191. package/dist/server/config-validation.mjs +1961 -1580
  192. package/dist/server/config.mjs +1961 -1580
  193. package/dist/server/data.mjs +1762 -1352
  194. package/dist/server/index.mjs +266 -33
  195. package/dist/server/next/middleware.mjs +2 -2
  196. package/dist/server/next.mjs +3399 -2504
  197. package/dist/server/page-converter.mjs +1553 -1295
  198. package/dist/server/prebuild-loader.mjs +42 -23
  199. package/dist/server/prebuild.mjs +1 -1
  200. package/dist/server/rendering/server.mjs +3151 -2489
  201. package/dist/server/rendering.mjs +3363 -2555
  202. package/dist/server/routing.mjs +1877 -1388
  203. package/dist/server/server.mjs +2057 -1402
  204. package/dist/server/theme-bridge.mjs +597 -505
  205. package/dist/server/theme.mjs +5 -4
  206. package/dist/styles/index.css +499 -490
  207. package/package.json +6 -4
  208. package/dist/SdkPreviewModeRuntime-MJUSYUFB.mjs +0 -8
@@ -50,6 +50,8 @@ type PageRendererDataContext = {
50
50
  occurrenceContext?: OccurrenceContextData | null;
51
51
  entrySubrouteContext?: EntrySubrouteContextData | null;
52
52
  contentEntry?: Record<string, unknown> | null;
53
+ pageSurface?: Record<string, unknown> | null;
54
+ subject?: unknown;
53
55
  editableRouteMetadataFieldIds?: ReadonlyArray<string> | null;
54
56
  supabaseUrl?: string;
55
57
  mediaAssets?: readonly MediaAssetIndexItem[];
@@ -104,6 +106,10 @@ export type BlockOverrideProps<TContent = Record<string, unknown>> = {
104
106
  entrySubrouteContext?: EntrySubrouteContextData | null;
105
107
  /** Content entry context for template-aware block overrides. */
106
108
  contentEntry?: Record<string, unknown> | null;
109
+ /** Native page-surface context for template-aware block overrides. */
110
+ pageSurface?: Record<string, unknown> | null;
111
+ /** Subject descriptor for native page-surface block overrides. */
112
+ subject?: unknown;
107
113
  /** Supabase project URL (useful for media URL resolution in override components) */
108
114
  supabaseUrl?: string;
109
115
  /** Full image-resolution context including canonical media sidecars. */
@@ -172,6 +178,7 @@ interface PageRendererProps {
172
178
  blockOverrides?: BlockOverrides;
173
179
  sdkConfig?: SdkConfigForRenderer | null;
174
180
  customBlocks?: SdkCustomBlock[];
181
+ previewAuthoring?: ResolverContext['previewAuthoring'];
175
182
  }
176
- export default function PageRenderer({ theme, page, usePlaceholders, dataContext, wrapBlock, registry, themeTokens: providedThemeTokens, routeMap, blockOverrides, sdkConfig, customBlocks, }: PageRendererProps): React.JSX.Element;
183
+ export default function PageRenderer({ theme, page, usePlaceholders, dataContext, wrapBlock, registry, themeTokens: providedThemeTokens, routeMap, blockOverrides, sdkConfig, customBlocks, previewAuthoring, }: PageRendererProps): React.JSX.Element;
177
184
  export {};
@@ -49,10 +49,6 @@ export type BindingContext<TFields extends Record<string, unknown> = Record<stri
49
49
  };
50
50
  /**
51
51
  * Available transform function names.
52
- *
53
- * Keep in sync with:
54
- * - @riverbankcms/sdk `BINDING_TRANSFORMS`
55
- * - @riverbankcms/content-model `TEMPLATE_BINDING_TRANSFORMS`
56
52
  */
57
53
  export declare const TRANSFORMS: {
58
54
  readonly RICHTEXT_FIRST_PARAGRAPH: "richtext.firstParagraph";
@@ -1,5 +1,7 @@
1
1
  import type { ReactNode } from 'react';
2
+ import { buildThemeRuntime as buildThemeRuntimeImpl } from '../../../theme-core/src/runtime/buildThemeRuntime';
2
3
  import type { Theme } from '../../../theme-core/src/schema';
4
+ import { renderBlock as renderBlockImpl } from '../system/componentFactory';
3
5
  export type SiteChromeThemeConfigOverride = Readonly<{
4
6
  header?: Partial<NonNullable<Theme['header']>>;
5
7
  footer?: Partial<NonNullable<Theme['footer']>>;
@@ -16,6 +18,11 @@ export type SiteChromeRenderModel = Readonly<{
16
18
  }>;
17
19
  export type SiteChromeBlockRenderOptions = Readonly<{
18
20
  themeConfigOverrideMode?: 'apply' | 'ignore';
21
+ deps?: SiteChromeBlockRenderDeps;
22
+ }>;
23
+ export type SiteChromeBlockRenderDeps = Readonly<{
24
+ buildThemeRuntime: typeof buildThemeRuntimeImpl;
25
+ renderBlock: typeof renderBlockImpl;
19
26
  }>;
20
27
  export declare function renderSiteChromeBlock(model: SiteChromeRenderModel, surface: 'header' | 'footer', theme: Theme, options?: SiteChromeBlockRenderOptions): ReactNode;
21
28
  export declare function SiteChromeBlockRenderer({ model, surface, theme, }: {
@@ -1,5 +1,6 @@
1
1
  export type { AnyBlockRuntimeDefinition, BlockRenderKind, BlockRuntimeDefinition, ClientOwnedBlockRuntime, Codec, DecodeIssue, DecodeResult, InteractiveBlockRenderKind, InteractiveBlockRuntime, InteractiveRuntimeContracts, ProgressiveBlockRender, ProgressiveBlockRuntime, RuntimeContractsFor, RuntimeDisplay, RuntimeHydration, RuntimeKind, RuntimeRender, RuntimeSource, StaticBlockRuntime, StaticRuntimeContracts, } from './runtime';
2
2
  export type { InteractiveIslandProps } from './islands';
3
+ export type { PublicEvent } from '../system/blocks/events/shared/types';
3
4
  export type { AccordionIslandProps, CarouselIslandProps, EventDetailsContentEntry, EventDetailsIslandProps, EventDetailsOccurrenceContext, HeaderSectionIslandProps, LocationMapIslandProps, } from './non-block-islands';
4
5
  export type { BookingFormConfig, BookingFormDisplay, BookingFormHydration, BookingFormInteractiveIslandProps, BookingFormService, CourseRegistrationDisplay, CourseRegistrationHydration, CourseRegistrationInteractiveIslandProps, CartDisplay, CartHydration, CartInteractiveIslandProps, CartLineDisplay, CheckoutDisplay, CheckoutHydration, CheckoutInteractiveIslandProps, EventCalendarDisplay, EventCalendarHydration, EventCalendarInteractiveIslandProps, EventCombinedDisplay, EventCombinedHydration, EventCombinedInteractiveIslandProps, EventRegistrationDisplay, EventRegistrationHydration, EventRegistrationInteractiveIslandProps, EventListingDisplay, EventListingHydration, EventListingInteractiveIslandProps, FormDisplay, FormHydration, FormInteractiveIslandProps, MembershipCardDisplay, NewsletterFormDisplay, NewsletterFormHydration, NewsletterFormInteractiveIslandProps, PassCardDisplay, PassesMembershipsDisplay, PassesMembershipsHydration, ProductCardDisplay, ProductDetailDisplay, ProductDetailInteractiveIslandProps, ProductDetailHydration, ProductListDisplay, ProductListInteractiveIslandProps, ProductListHydration, ProductVariantOptionDisplay, ShopInteractiveIslandProps, } from './proof-block-islands';
5
6
  export { accordionIslandPropsCodec, carouselIslandPropsCodec, eventDetailsIslandPropsCodec, headerSectionIslandPropsCodec, locationMapIslandPropsCodec, } from './non-block-islands';
@@ -359,7 +359,7 @@ export declare const proofBlockIslandCodecs: {
359
359
  showMap: boolean;
360
360
  showCapacity: boolean;
361
361
  orientation: import("..").CardOrientation;
362
- events: readonly import("..").PublicEvent[];
362
+ events: readonly import(".").PublicEvent[];
363
363
  }>;
364
364
  hydration: Readonly<{
365
365
  siteId: string;
@@ -405,7 +405,7 @@ export declare const proofBlockIslandCodecs: {
405
405
  showMap: boolean;
406
406
  showCapacity: boolean;
407
407
  orientation: import("..").CardOrientation;
408
- events: readonly import("..").PublicEvent[];
408
+ events: readonly import(".").PublicEvent[];
409
409
  }>;
410
410
  hydration: Readonly<{
411
411
  siteId: string;
@@ -442,7 +442,7 @@ export declare const proofBlockIslandCodecs: {
442
442
  kind: "event-calendar";
443
443
  displayMode: import("..").DisplayMode;
444
444
  className: string | null;
445
- events: readonly import("..").PublicEvent[];
445
+ events: readonly import(".").PublicEvent[];
446
446
  listLayout: import("..").EventLayout;
447
447
  listColumns: import("..").ColumnOption;
448
448
  eventsPerPage: import("../system/runtime/nodes/events/shared/listOptions").EventPageSize;
@@ -492,7 +492,7 @@ export declare const proofBlockIslandCodecs: {
492
492
  kind: "event-calendar";
493
493
  displayMode: import("..").DisplayMode;
494
494
  className: string | null;
495
- events: readonly import("..").PublicEvent[];
495
+ events: readonly import(".").PublicEvent[];
496
496
  listLayout: import("..").EventLayout;
497
497
  listColumns: import("..").ColumnOption;
498
498
  eventsPerPage: import("../system/runtime/nodes/events/shared/listOptions").EventPageSize;
@@ -993,7 +993,7 @@ export declare const runtimeIslandCodecs: {
993
993
  display: Readonly<{
994
994
  kind: "event-combined";
995
995
  className: string | null;
996
- events: readonly import("..").PublicEvent[];
996
+ events: readonly import(".").PublicEvent[];
997
997
  listLayout: import("..").EventLayout;
998
998
  listColumns: import("..").ColumnOption;
999
999
  eventsPerPage: import("../system/runtime/nodes/events/shared/listOptions").EventPageSize;
@@ -1042,7 +1042,7 @@ export declare const runtimeIslandCodecs: {
1042
1042
  display: Readonly<{
1043
1043
  kind: "event-combined";
1044
1044
  className: string | null;
1045
- events: readonly import("..").PublicEvent[];
1045
+ events: readonly import(".").PublicEvent[];
1046
1046
  listLayout: import("..").EventLayout;
1047
1047
  listColumns: import("..").ColumnOption;
1048
1048
  eventsPerPage: import("../system/runtime/nodes/events/shared/listOptions").EventPageSize;
@@ -1429,7 +1429,7 @@ export declare const runtimeIslandCodecs: {
1429
1429
  showMap: boolean;
1430
1430
  showCapacity: boolean;
1431
1431
  orientation: import("..").CardOrientation;
1432
- events: readonly import("..").PublicEvent[];
1432
+ events: readonly import(".").PublicEvent[];
1433
1433
  }>;
1434
1434
  hydration: Readonly<{
1435
1435
  siteId: string;
@@ -1475,7 +1475,7 @@ export declare const runtimeIslandCodecs: {
1475
1475
  showMap: boolean;
1476
1476
  showCapacity: boolean;
1477
1477
  orientation: import("..").CardOrientation;
1478
- events: readonly import("..").PublicEvent[];
1478
+ events: readonly import(".").PublicEvent[];
1479
1479
  }>;
1480
1480
  hydration: Readonly<{
1481
1481
  siteId: string;
@@ -1512,7 +1512,7 @@ export declare const runtimeIslandCodecs: {
1512
1512
  kind: "event-calendar";
1513
1513
  displayMode: import("..").DisplayMode;
1514
1514
  className: string | null;
1515
- events: readonly import("..").PublicEvent[];
1515
+ events: readonly import(".").PublicEvent[];
1516
1516
  listLayout: import("..").EventLayout;
1517
1517
  listColumns: import("..").ColumnOption;
1518
1518
  eventsPerPage: import("../system/runtime/nodes/events/shared/listOptions").EventPageSize;
@@ -1562,7 +1562,7 @@ export declare const runtimeIslandCodecs: {
1562
1562
  kind: "event-calendar";
1563
1563
  displayMode: import("..").DisplayMode;
1564
1564
  className: string | null;
1565
- events: readonly import("..").PublicEvent[];
1565
+ events: readonly import(".").PublicEvent[];
1566
1566
  listLayout: import("..").EventLayout;
1567
1567
  listColumns: import("..").ColumnOption;
1568
1568
  eventsPerPage: import("../system/runtime/nodes/events/shared/listOptions").EventPageSize;
@@ -2100,7 +2100,7 @@ export declare const runtimeIslandCodecs: {
2100
2100
  slug: string;
2101
2101
  contentTypeSlug: string;
2102
2102
  }> | null;
2103
- events?: readonly import("..").PublicEvent[] | null;
2103
+ events?: readonly import(".").PublicEvent[] | null;
2104
2104
  showVenue?: boolean;
2105
2105
  showMap?: boolean;
2106
2106
  showOtherDates?: boolean;
@@ -2125,7 +2125,7 @@ export declare const runtimeIslandCodecs: {
2125
2125
  slug: string;
2126
2126
  contentTypeSlug: string;
2127
2127
  }> | null;
2128
- events?: readonly import("..").PublicEvent[] | null;
2128
+ events?: readonly import(".").PublicEvent[] | null;
2129
2129
  showVenue?: boolean;
2130
2130
  showMap?: boolean;
2131
2131
  showOtherDates?: boolean;
@@ -8,6 +8,8 @@ export type TextProps = PrimitiveProps & {
8
8
  path?: string;
9
9
  linkedEntryField?: PreviewLinkedEntryFieldBinding;
10
10
  maxLength?: number;
11
+ placeholder?: string;
12
+ ariaLabel?: string;
11
13
  blockData?: Record<string, unknown> | null;
12
14
  };
13
15
  export type RichTextPrimitiveProps = {
@@ -17,6 +19,8 @@ export type RichTextPrimitiveProps = {
17
19
  linkedEntryField?: PreviewLinkedEntryFieldBinding;
18
20
  doc?: TipTapNode | null;
19
21
  variant?: RichTextVariant;
22
+ placeholder?: string;
23
+ ariaLabel?: string;
20
24
  blockData?: Record<string, unknown> | null;
21
25
  };
22
26
  export type RichTextVariant = "full" | "inline" | "limited" | "media" | "notes";
@@ -5,3 +5,4 @@ export * from './types';
5
5
  export * from './schemas';
6
6
  export * from './fields';
7
7
  export * from './filtering';
8
+ export * from './layout';
@@ -0,0 +1,2 @@
1
+ import type { NodeDefinition } from '../../../node';
2
+ export declare function eventSectionHeaderLayoutNodes(): readonly NodeDefinition[];
@@ -36,6 +36,7 @@ export * from "./feature-cards";
36
36
  export * from "./feature-card-icons";
37
37
  export * from "./media-text";
38
38
  export * from "./appointment-booking";
39
+ export * from "./weekly-slot-availability";
39
40
  export * from "./event-registration";
40
41
  export * from "./event-details";
41
42
  export * from "./course-registration";
@@ -0,0 +1,34 @@
1
+ import { z } from "zod";
2
+ import type { SystemBlockDefinition } from "../registry";
3
+ import { type SectionStylesContent } from "../fields/boxStyles";
4
+ import type { BlockManifest } from "../manifest";
5
+ export declare const weeklySlotAvailabilityManifest: BlockManifest;
6
+ export type WeeklySlotAvailabilityContent = {
7
+ serviceId: string;
8
+ resourceId?: string | null;
9
+ horizonWeeks?: string | null;
10
+ timezone?: string | null;
11
+ heading?: string | null;
12
+ description?: unknown;
13
+ emptyMessage?: string | null;
14
+ ctaText?: string | null;
15
+ ctaUrl?: string | null;
16
+ _sectionStyles?: SectionStylesContent;
17
+ };
18
+ export declare const weeklySlotAvailabilityDataSchema: z.ZodObject<{
19
+ slots: z.ZodArray<z.ZodObject<{
20
+ id: z.ZodString;
21
+ resourceId: z.ZodString;
22
+ weekday: z.ZodNumber;
23
+ weekdayLabel: z.ZodString;
24
+ startTime: z.ZodString;
25
+ endTime: z.ZodString;
26
+ nextDate: z.ZodString;
27
+ availableWeeks: z.ZodNumber;
28
+ }, z.core.$strip>>;
29
+ horizonWeeks: z.ZodNumber;
30
+ timezone: z.ZodString;
31
+ startDate: z.ZodString;
32
+ endDate: z.ZodString;
33
+ }, z.core.$strip>;
34
+ export declare const weeklySlotAvailabilityBlockDefinition: SystemBlockDefinition<WeeklySlotAvailabilityContent>;
@@ -13,6 +13,7 @@ type RenderOptions = {
13
13
  data?: Record<string, unknown>;
14
14
  pathBase?: string;
15
15
  imageResolveContext?: Parameters<typeof resolveTree>[1]["imageResolveContext"];
16
+ previewAuthoring?: Parameters<typeof resolveTree>[1]["previewAuthoring"];
16
17
  };
17
18
  /**
18
19
  * Resolves the layout definition for a block based on its manifest and content.
@@ -1,4 +1,4 @@
1
- export declare const SYSTEM_BLOCK_KINDS: readonly ["block.hero", "block.intro", "block.columns", "block.collection", "block.feature-cards", "block.media-text", "block.cta-full", "block.single-button", "block.body-text", "block.location-map", "block.faq", "block.testimonials", "block.team-members", "block.embed", "block.blog-post", "block.blog-listing", "block.site-header", "block.site-footer", "block.form", "block.contact-newsletter", "block.appointment-booking", "block.event-registration", "block.event-details", "block.course-registration", "block.course-details", "block.event-spotlight", "block.event-listing", "block.event-calendar", "block.offerings-preview", "block.shop", "block.product-list", "block.product-detail", "block.cart", "block.checkout", "block.gifting", "block.newsletter-signup", "block.image-gallery", "block.video-grid", "block.audio-player", "block.file-download"];
1
+ export declare const SYSTEM_BLOCK_KINDS: readonly ["block.hero", "block.intro", "block.columns", "block.collection", "block.feature-cards", "block.media-text", "block.cta-full", "block.single-button", "block.body-text", "block.location-map", "block.faq", "block.testimonials", "block.team-members", "block.embed", "block.blog-post", "block.blog-listing", "block.site-header", "block.site-footer", "block.form", "block.contact-newsletter", "block.appointment-booking", "block.weekly-slot-availability", "block.event-registration", "block.event-details", "block.course-registration", "block.course-details", "block.event-spotlight", "block.event-listing", "block.event-calendar", "block.offerings-preview", "block.shop", "block.product-list", "block.product-detail", "block.cart", "block.checkout", "block.gifting", "block.newsletter-signup", "block.image-gallery", "block.video-grid", "block.audio-player", "block.file-download"];
2
2
  export type SystemBlockKind = (typeof SYSTEM_BLOCK_KINDS)[number];
3
3
  export type CustomBlockKind = `custom.${string}`;
4
4
  export type BlockKind = SystemBlockKind | CustomBlockKind;
@@ -27,7 +27,7 @@ export declare const eventCalendarListLayoutFacet: {
27
27
  readonly label: "List style";
28
28
  readonly values: {
29
29
  value: "compact" | "grid" | "stack";
30
- label: "Compact" | "Stack" | "Grid";
30
+ label: "Stack" | "Grid" | "Compact";
31
31
  }[];
32
32
  readonly defaultValue: "stack";
33
33
  readonly target: {
@@ -41,7 +41,7 @@ export declare const systemCustomizeFacetDefinitions: readonly [{
41
41
  readonly label: "List style";
42
42
  readonly values: {
43
43
  value: "compact" | "grid" | "stack";
44
- label: "Compact" | "Stack" | "Grid";
44
+ label: "Stack" | "Grid" | "Compact";
45
45
  }[];
46
46
  readonly defaultValue: "stack";
47
47
  readonly target: {
@@ -1,3 +1,3 @@
1
- export declare const SUPPORTED_LOADER_ENDPOINTS: readonly ["listPublishedEntries", "getPublishedEntryPreview", "listPublicEvents", "getPublicEventDetails", "listPublicCourses", "listPublicRouteCandidates", "listPublicTeamMembers", "listPublicProducts", "listPublicPasses", "listPublicMemberships", "getPublicFormById", "getPublicBookingServices"];
1
+ export declare const SUPPORTED_LOADER_ENDPOINTS: readonly ["listPublishedEntries", "getPublishedEntryPreview", "listPublicEvents", "getPublicEventDetails", "listPublicCourses", "listPublicRouteCandidates", "listPublicTeamMembers", "listPublicProducts", "listPublicPasses", "listPublicMemberships", "getPublicFormById", "getPublicBookingServices", "getPublicWeeklySlotAvailability"];
2
2
  export type SupportedLoaderEndpoint = typeof SUPPORTED_LOADER_ENDPOINTS[number];
3
3
  export declare function isSupportedLoaderEndpoint(endpoint: string): endpoint is SupportedLoaderEndpoint;
@@ -8,7 +8,8 @@
8
8
  * - Frontend: provide internal API client
9
9
  * - SDK: provide SDK client with endpoint mapping
10
10
  */
11
- import { type BlockDataLoader } from '../registry';
11
+ import { getBlockDefinition as getSystemBlockDefinition, type BlockDataLoader } from '../registry';
12
+ import { resolveParamsBindings as resolveRuntimeParamsBindings } from '../runtime/bindings';
12
13
  import type { PageOutline } from '../../structure/schema';
13
14
  import type { ApiClient, PrefetchContext, ResolvedBlockData } from './types';
14
15
  export type PrefetchBlockDataOptions = {
@@ -40,6 +41,8 @@ export type PrefetchBlockDataOptions = {
40
41
  * @returns Record of data loaders, or undefined if not a custom block
41
42
  */
42
43
  getCustomBlockLoaders?: (blockKind: string) => Record<string, BlockDataLoader> | undefined;
44
+ getBlockDefinition?: typeof getSystemBlockDefinition;
45
+ resolveParamsBindings?: typeof resolveRuntimeParamsBindings;
43
46
  };
44
47
  /**
45
48
  * Core data prefetching logic (framework-agnostic).
@@ -1,4 +1,5 @@
1
1
  import { type Binding, type NodeDefinition } from './schema';
2
+ import type { ConditionalAuthoringPresence } from './schema';
2
3
  import { type NodeProps } from './types';
3
4
  export type NodeModifier = (node: NodeDefinition) => NodeDefinition;
4
5
  export declare function el(type: string, props?: NodeProps | null, children?: Array<NodeDefinition | null | undefined> | null, ...mods: NodeModifier[]): NodeDefinition;
@@ -46,6 +47,7 @@ export declare function bind(from: string, options?: {
46
47
  export declare function when(path: string, options?: {
47
48
  equals?: unknown;
48
49
  not?: boolean;
50
+ authoringPresence?: ConditionalAuthoringPresence;
49
51
  }): NodeModifier;
50
52
  export declare function scopes(entries: Array<{
51
53
  name: string;
@@ -50,6 +50,13 @@ export declare const repeatSchema: z.ZodObject<{
50
50
  }, z.core.$strip>>;
51
51
  }, z.core.$strip>;
52
52
  export type RepeatConfig = z.input<typeof repeatSchema>;
53
+ export declare const conditionalAuthoringPresenceSchema: z.ZodDiscriminatedUnion<[z.ZodObject<{
54
+ kind: z.ZodLiteral<"visitor-only">;
55
+ }, z.core.$strip>, z.ZodObject<{
56
+ kind: z.ZodLiteral<"recover-empty-when-active">;
57
+ placeholder: z.ZodOptional<z.ZodString>;
58
+ }, z.core.$strip>], "kind">;
59
+ export type ConditionalAuthoringPresence = z.input<typeof conditionalAuthoringPresenceSchema>;
53
60
  export declare const conditionSchema: z.ZodObject<{
54
61
  when: z.ZodObject<{
55
62
  from: z.ZodString;
@@ -71,6 +78,12 @@ export declare const conditionSchema: z.ZodObject<{
71
78
  }, z.core.$strip>;
72
79
  equals: z.ZodOptional<z.ZodUnknown>;
73
80
  not: z.ZodDefault<z.ZodBoolean>;
81
+ authoringPresence: z.ZodDefault<z.ZodDiscriminatedUnion<[z.ZodObject<{
82
+ kind: z.ZodLiteral<"visitor-only">;
83
+ }, z.core.$strip>, z.ZodObject<{
84
+ kind: z.ZodLiteral<"recover-empty-when-active">;
85
+ placeholder: z.ZodOptional<z.ZodString>;
86
+ }, z.core.$strip>], "kind">>;
74
87
  }, z.core.$strip>;
75
88
  export type ConditionConfig = z.input<typeof conditionSchema>;
76
89
  export declare const dataScopeSchema: z.ZodObject<{
@@ -11,7 +11,7 @@
11
11
  * SdkCustomBlock.layout definitions. Node types not in this list
12
12
  * will be rejected during validation.
13
13
  */
14
- export declare const ALLOWED_NODE_TYPES: readonly ["div", "figure", "section", "headerSection", "stack", "inline", "grid", "text", "richText", "media", "videoEmbed", "button", "link", "carousel", "accordion", "accordionItem", "form", "booking-form", "event-registration", "event-spotlight", "event-listing", "event-calendar", "offerings-preview", "event-combined", "shop", "product-list", "product-detail", "cart", "checkout", "gifting"];
14
+ export declare const ALLOWED_NODE_TYPES: readonly ["div", "figure", "section", "headerSection", "stack", "inline", "grid", "text", "richText", "media", "videoEmbed", "button", "link", "carousel", "accordion", "accordionItem", "form", "booking-form", "weekly-slot-availability", "event-registration", "event-spotlight", "event-listing", "event-calendar", "offerings-preview", "event-combined", "shop", "product-list", "product-detail", "cart", "checkout", "gifting"];
15
15
  export type AllowedNodeType = (typeof ALLOWED_NODE_TYPES)[number];
16
16
  /**
17
17
  * Valid transform IDs for declarative layouts.
@@ -30,6 +30,7 @@ export type SystemBlockComponentProps<TContent = Record<string, unknown>> = {
30
30
  editableRouteMetadataFieldIds?: ResolverContext['editableRouteMetadataFieldIds'];
31
31
  fragmentRegistry?: ResolverContext['fragmentRegistry'];
32
32
  imageResolveContext?: ResolverContext['imageResolveContext'];
33
+ previewAuthoring?: ResolverContext['previewAuthoring'];
33
34
  };
34
35
  export type SystemBlockComponent<TContent = Record<string, unknown>> = ComponentType<SystemBlockComponentProps<TContent>>;
35
36
  export type BlockDataLoader = {
@@ -3,7 +3,7 @@
3
3
  *
4
4
  * Factory function for creating a typed API client for block client-side API calls.
5
5
  */
6
- import type { BlockApiConfig, FormSubmitRequest, FormSubmitResponse, FormConfigResponse, BookingSubmitRequest, BookingPackageSubmitRequest, BookingSubmitResponse, EligibleAppointmentPackagesResponse, AppointmentBookingStatusRequest, AppointmentBookingStatusResponse, AvailableSlotsRequest, AvailableSlotsResponse, AvailableDatesRequest, AvailableDatesResponse, BookingServicesResponse, BookingServiceResponse, BookingResourcesResponse, PublicEventsRequest, PublicEvent, EventFiltersResponse, EventRegisterRequest, EventRegisterResponse, EventCheckoutRequest, EventCheckoutResponse, EligibilityCheckRequest, EligibilityCheckResponse, EventRegistrationStatusRequest, EventRegistrationStatusResponse, CourseEnrollRequest, CourseEnrollResponse, CourseEligibilityCheckRequest, CourseEligibilityCheckResponse, CourseCheckoutRequest, CourseCheckoutResponse, CourseRegistrationStatusRequest, CourseRegistrationStatusResponse, ResolveWaitlistClaimRequest, ResolveWaitlistClaimResponse, DiscountsAvailableRequest, DiscountsAvailableResponse, DiscountApplyRequest, DiscountApplyResponse, PublicProductsResponse, ShopCheckoutRequest, ShopCheckoutResponse, UnifiedCheckoutRequest, UnifiedCheckoutResponse, PublicGiftingOffersResponse, CreateGiftingCheckoutRequest, CreateGiftingCheckoutResponse, ClaimGiftCardRequest, ClaimGiftCardResponse, PortalMeResponse, CustomerProfile, CustomerOrder, PortalMeUpdateRequest, CustomerPass, CustomerMembership, CustomerEventRegistration, PortalEventTicket, CustomerAppointment, BookingQuestionsTaskDetail, CustomerCourseEnrollment, PortalCredit, PortalOrderCheckoutRequest, PortalOrderCheckoutResponse, PortalDigitalProductAccessResponse, PortalDigitalProductDownloadUrlResponse, PortalDigitalProductsResponse, PortalCancelCourseEnrollmentRequest, PortalCancelCourseEnrollmentResult, PortalCancelAppointmentRequest, PortalCancelAppointmentResult, PortalUpdateAppointmentBookingQuestionsRequest, PortalUpdateCourseBookingQuestionsRequest, PortalUpdateEventBookingQuestionsRequest, PortalCancelEventRegistrationRequest, PortalCancelEventRegistrationResult, PortalTransferEventRegistrationRequest, PortalTransferEventRegistrationResult, PortalRescheduleAppointmentRequest, PortalRescheduleAppointmentResponse, PortalCancelMembershipAtPeriodEndResult, MagicLinkRequest, EventGuest, UpdateEventGuestsRequest, NewsletterSubscribeRequest, NewsletterSubscribeResponse } from './types';
6
+ import type { BlockApiConfig, FormSubmitRequest, FormSubmitResponse, FormConfigResponse, BookingSubmitRequest, BookingPackageSubmitRequest, BookingSubmitResponse, EligibleAppointmentPackagesResponse, AppointmentBookingStatusRequest, AppointmentBookingStatusResponse, AvailableSlotsRequest, AvailableSlotsResponse, WeeklySlotAvailabilityRequest, WeeklySlotAvailabilityResponse, AvailableDatesRequest, AvailableDatesResponse, BookingServicesResponse, BookingServiceResponse, BookingResourcesResponse, PublicEventsRequest, PublicEvent, EventFiltersResponse, EventRegisterRequest, EventRegisterResponse, EventCheckoutRequest, EventCheckoutResponse, EligibilityCheckRequest, EligibilityCheckResponse, EventRegistrationStatusRequest, EventRegistrationStatusResponse, CourseEnrollRequest, CourseEnrollResponse, CourseEligibilityCheckRequest, CourseEligibilityCheckResponse, CourseCheckoutRequest, CourseCheckoutResponse, CourseRegistrationStatusRequest, CourseRegistrationStatusResponse, ResolveWaitlistClaimRequest, ResolveWaitlistClaimResponse, DiscountsAvailableRequest, DiscountsAvailableResponse, DiscountApplyRequest, DiscountApplyResponse, PublicProductsResponse, ShopCheckoutRequest, ShopCheckoutResponse, UnifiedCheckoutRequest, UnifiedCheckoutResponse, PublicGiftingOffersResponse, CreateGiftingCheckoutRequest, CreateGiftingCheckoutResponse, ClaimGiftCardRequest, ClaimGiftCardResponse, PortalMeResponse, CustomerProfile, CustomerOrder, PortalMeUpdateRequest, CustomerPass, CustomerMembership, CustomerEventRegistration, PortalEventTicket, CustomerAppointment, BookingQuestionsTaskDetail, CustomerCourseEnrollment, PortalCredit, PortalOrderCheckoutRequest, PortalOrderCheckoutResponse, PortalDigitalProductAccessResponse, PortalDigitalProductDownloadUrlResponse, PortalDigitalProductsResponse, PortalCancelCourseEnrollmentRequest, PortalCancelCourseEnrollmentResult, PortalCancelAppointmentRequest, PortalCancelAppointmentResult, PortalUpdateAppointmentBookingQuestionsRequest, PortalUpdateCourseBookingQuestionsRequest, PortalUpdateEventBookingQuestionsRequest, PortalCancelEventRegistrationRequest, PortalCancelEventRegistrationResult, PortalTransferEventRegistrationRequest, PortalTransferEventRegistrationResult, PortalRescheduleAppointmentRequest, PortalRescheduleAppointmentResponse, PortalCancelMembershipAtPeriodEndResult, MagicLinkRequest, EventGuest, UpdateEventGuestsRequest, NewsletterSubscribeRequest, NewsletterSubscribeResponse } from './types';
7
7
  type PublicProductCategorySelector = Readonly<{
8
8
  kind: 'category';
9
9
  productCategoryId: string;
@@ -33,6 +33,7 @@ export interface BlockApiClient {
33
33
  }): Promise<EligibleAppointmentPackagesResponse>;
34
34
  getAppointmentBookingStatus(params: Omit<AppointmentBookingStatusRequest, 'siteId'>): Promise<AppointmentBookingStatusResponse>;
35
35
  getAvailableSlots(params: Omit<AvailableSlotsRequest, 'siteId'>): Promise<AvailableSlotsResponse>;
36
+ getWeeklySlotAvailability(params: Omit<WeeklySlotAvailabilityRequest, 'siteId'>): Promise<WeeklySlotAvailabilityResponse>;
36
37
  getAvailableDates(params: Omit<AvailableDatesRequest, 'siteId'>): Promise<AvailableDatesResponse>;
37
38
  getBookingServices(params?: {
38
39
  ids?: string[];
@@ -52,6 +52,10 @@ export declare const BOOKINGS: {
52
52
  path: string;
53
53
  method: "GET";
54
54
  };
55
+ getWeeklySlotAvailability: {
56
+ path: string;
57
+ method: "GET";
58
+ };
55
59
  getAvailableDates: {
56
60
  path: string;
57
61
  method: "GET";
@@ -394,6 +398,10 @@ export declare const ENDPOINTS: {
394
398
  path: string;
395
399
  method: "GET";
396
400
  };
401
+ getWeeklySlotAvailability: {
402
+ path: string;
403
+ method: "GET";
404
+ };
397
405
  getAvailableDates: {
398
406
  path: string;
399
407
  method: "GET";
@@ -192,6 +192,30 @@ export interface TimeSlot {
192
192
  export interface AvailableSlotsResponse {
193
193
  slots: TimeSlot[];
194
194
  }
195
+ export interface WeeklySlotAvailabilityRequest {
196
+ siteId: string;
197
+ serviceId: string;
198
+ resourceId?: string;
199
+ horizonWeeks?: number;
200
+ timezone: string;
201
+ }
202
+ export interface WeeklySlotAvailabilityOption {
203
+ id: string;
204
+ resourceId: string;
205
+ weekday: number;
206
+ weekdayLabel: string;
207
+ startTime: string;
208
+ endTime: string;
209
+ nextDate: string;
210
+ availableWeeks: number;
211
+ }
212
+ export interface WeeklySlotAvailabilityResponse {
213
+ slots: WeeklySlotAvailabilityOption[];
214
+ horizonWeeks: number;
215
+ timezone: string;
216
+ startDate: string;
217
+ endDate: string;
218
+ }
195
219
  export interface AvailableDatesRequest {
196
220
  siteId: string;
197
221
  serviceId: string;
@@ -1,8 +1,10 @@
1
1
  /**
2
2
  * DatePicker Component
3
3
  *
4
- * Displays a dropdown for selecting an appointment date from available dates.
5
- * Supports loading states, empty states, and progressive loading.
4
+ * Selectable grid of available appointment dates rendered as pill buttons
5
+ * (weekday / day / month), with loading, empty and progressive-loading
6
+ * states. Selection uses button-toggle semantics: each pill is a button with
7
+ * aria-pressed and a full accessible date name, inside a labelled group.
6
8
  */
7
9
  import React from 'react';
8
10
  type DatePickerProps = {
@@ -10,6 +12,8 @@ type DatePickerProps = {
10
12
  onChange: (date: string) => void;
11
13
  dateOptions: string[];
12
14
  required?: boolean;
15
+ ariaDescribedBy?: string;
16
+ ariaInvalid?: boolean;
13
17
  isLoading?: boolean;
14
18
  isEmpty?: boolean;
15
19
  hasMore?: boolean;
@@ -1,7 +1,9 @@
1
1
  /**
2
2
  * SuccessMessage Component
3
3
  *
4
- * Displays success message after successful appointment booking.
4
+ * Terminal success state after a completed appointment booking.
5
+ * Rendered on the shared registration-surface (see booking-form.client),
6
+ * using the shared TerminalPanel + StateIcon primitives.
5
7
  */
6
8
  import React from 'react';
7
9
  type SuccessMessageProps = {
@@ -1,16 +1,22 @@
1
1
  /**
2
2
  * TimeSlotSelector Component
3
3
  *
4
- * Displays available time slots for the selected date with loading and empty states.
4
+ * Selectable grid of available time slots for the chosen date, rendered as
5
+ * pill buttons with button-toggle semantics (aria-pressed) inside a labelled
6
+ * group. The timezone is part of each pill's accessible name via the full
7
+ * time format; the visible pill shows the compact time.
5
8
  */
6
9
  import React from 'react';
7
- import type { TimeSlot } from '../../hooks/useAvailableSlots';
10
+ import type { BookingSlotDisplayOption } from '../../hooks/useHeadlessBookingFlow.state';
8
11
  type TimeSlotSelectorProps = {
9
12
  value: string;
10
- onChange: (slotStartTime: string) => void;
11
- slots: TimeSlot[];
13
+ onChange: (slotKey: string) => void;
14
+ slots: readonly BookingSlotDisplayOption[];
12
15
  isLoading: boolean;
16
+ timezone: string;
13
17
  required?: boolean;
18
+ ariaDescribedBy?: string;
19
+ ariaInvalid?: boolean;
14
20
  };
15
21
  export declare const TimeSlotSelector: React.FC<TimeSlotSelectorProps>;
16
22
  export {};
@@ -8,6 +8,7 @@ import { AccordionNode, AccordionItemNode } from '../nodes/accordion';
8
8
  import HeaderSectionNode from '../nodes/header-section.client';
9
9
  import { EventCombinedIslandClient } from '../nodes/events';
10
10
  import { MediaNode } from '../nodes/media.client';
11
+ import WeeklySlotAvailabilityClient from '../nodes/weekly-slot-availability.client';
11
12
  import { runtimeBackedBlockServerEntries, type RuntimeBackedBlockMode, type RuntimeBackedBlockKind, type RuntimeBackedClientBlockEntry, type RuntimeBackedClientComponentProps } from './runtime-backed-blocks';
12
13
  type SourcePropsClientEntry<TProps extends object = object> = Readonly<{
13
14
  kind: 'source-props';
@@ -28,6 +29,7 @@ export type ClientComponentRegistryEntryByKind = Readonly<{
28
29
  'event-details': ExplicitAdapterClientEntry<React.ComponentProps<typeof EventDetailsIslandClient>>;
29
30
  'location-map': ExplicitAdapterClientEntry<React.ComponentProps<typeof LocationMapIslandClient>>;
30
31
  'event-combined': ExplicitAdapterClientEntry<React.ComponentProps<typeof EventCombinedIslandClient>>;
32
+ 'weekly-slot-availability': SourcePropsClientEntry<React.ComponentProps<typeof WeeklySlotAvailabilityClient>>;
31
33
  }>;
32
34
  export type ClientComponentRegistryEntry = ClientComponentRegistryEntryByKind[keyof ClientComponentRegistryEntryByKind];
33
35
  export declare function defineSourcePropsClientEntry<TProps extends object>(component: React.ComponentType<TProps>): SourcePropsClientEntry<TProps>;
@@ -2992,6 +2994,10 @@ export declare const clientComponentRegistryEntries: {
2992
2994
  }>>;
2993
2995
  produces: "client-props" | "island-props";
2994
2996
  }>;
2997
+ readonly 'weekly-slot-availability': Readonly<{
2998
+ kind: "source-props";
2999
+ component: React.ComponentType<import("../nodes/weekly-slot-availability.client").WeeklySlotAvailabilityClientProps>;
3000
+ }>;
2995
3001
  };
2996
3002
  export declare const clientComponentRegistry: ComponentRegistry;
2997
3003
  export {};
@@ -1,4 +1,6 @@
1
+ import { useBlockApi } from "../api";
1
2
  import { type AppointmentCheckoutVerificationState } from "../nodes/booking-form.state";
3
+ import { usePolling } from "./usePolling";
2
4
  export type AppointmentCheckoutVerificationConfig = {
3
5
  sessionId: string;
4
6
  maxAttempts?: number;
@@ -8,4 +10,9 @@ export type AppointmentCheckoutVerificationResult = {
8
10
  state: AppointmentCheckoutVerificationState;
9
11
  retry: () => void;
10
12
  };
13
+ export type AppointmentCheckoutVerificationDeps = Readonly<{
14
+ useBlockApi: typeof useBlockApi;
15
+ usePolling: typeof usePolling;
16
+ }>;
11
17
  export declare function useAppointmentCheckoutVerification(config: AppointmentCheckoutVerificationConfig | null): AppointmentCheckoutVerificationResult;
18
+ export declare function useAppointmentCheckoutVerificationWithDeps(config: AppointmentCheckoutVerificationConfig | null, deps: AppointmentCheckoutVerificationDeps): AppointmentCheckoutVerificationResult;
@@ -6,14 +6,14 @@
6
6
  */
7
7
  import { type TimeSlot } from "../api";
8
8
  export type { TimeSlot };
9
- type UseAvailableSlotsOptions = {
9
+ export type UseAvailableSlotsOptions = {
10
10
  siteId: string;
11
11
  serviceId: string | undefined;
12
12
  resourceId: string | undefined;
13
13
  selectedDate: string;
14
14
  timezone: string;
15
15
  };
16
- type UseAvailableSlotsResult = {
16
+ export type UseAvailableSlotsResult = {
17
17
  slots: TimeSlot[];
18
18
  isLoading: boolean;
19
19
  isRefreshing: boolean;
@@ -1,3 +1,3 @@
1
- export { unsafeAsBookingFieldId, bookingFlowReducer, buildBookingAvailabilityQuery, buildBookingStepPlan, buildBookingSubmitPlan, createBookingBlockApiConfig, createEmptyBookingValidationErrors, createFieldBookingValidationErrors, createFormBookingValidationError, createInitialBookingFlowReducerState, describeUnknownError, deriveBookingFieldViews, deriveBookingFlowSteps, getAppointmentBookingOverrideInput, hasBookingValidationErrors, resolveAppointmentPackagesModel, resolveAvailabilitySelectionInvalidation, resolveHeadlessBookingStatus, resolveHeadlessBookingView, toBookingFormData, toBookingSlotView, toBookingSlotViews, toOptionalAppointmentResourceId, toOptionalAppointmentServiceId, validateBookingField, validateBookingFields, validateBookingStep, } from "../nodes/booking-form.headless.state";
1
+ export { unsafeAsBookingFieldId, bookingFlowReducer, buildBookingAvailabilityQuery, buildBookingStepPlan, buildBookingSubmitPlan, createBookingBlockApiConfig, createEmptyBookingValidationErrors, createFieldBookingValidationErrors, createFormBookingValidationError, createInitialBookingFlowReducerState, deriveBookingSlotDisplayOptions, describeUnknownError, deriveBookingFieldViews, deriveBookingFlowSteps, getAppointmentBookingOverrideInput, hasBookingValidationErrors, resolveAppointmentPackagesModel, resolveAvailabilitySelectionInvalidation, resolveHeadlessBookingStatus, resolveHeadlessBookingView, toBookingFormData, toBookingSlotView, toBookingSlotViews, toOptionalAppointmentResourceId, toOptionalAppointmentServiceId, validateBookingField, validateBookingFields, validateBookingStep, } from "../nodes/booking-form.headless.state";
2
2
  export { formatBookingCentsAsCurrencyInput, getBookingServiceSlidingScale, parseBookingCurrencyInputToCents, } from "../nodes/booking-form.state";
3
- export type { AppointmentBookingOverrideData, AppointmentBookingOverrideInput, AppointmentBookingOverrideInputResult, AppointmentBookingOverridePropsLike, BookingAvailabilityQuery, BookingAppointmentPackagesModel, BookingAppointmentPackagesUnavailableReason, BookingFieldId, BookingFieldValue, BookingFieldView, BookingFlowActionResult, BookingFlowFeedback, BookingFlowStatus, BookingFlowStep, BookingFlowStepId, BookingFlowView, BookingResourceView, BookingSlotSelection, BookingSlotView, BookingSubmitActionResult, BookingSubmitOptions, BookingValidationErrors, DerivedBookingFlowSteps, DeriveBookingFlowStepsInput, LoadState, } from "../nodes/booking-form.headless.state";
3
+ export type { AppointmentBookingOverrideData, AppointmentBookingOverrideInput, AppointmentBookingOverrideInputResult, AppointmentBookingOverridePropsLike, BookingAvailabilityQuery, BookingAppointmentPackagesModel, BookingAppointmentPackagesUnavailableReason, BookingFieldId, BookingFieldValue, BookingFieldView, BookingFlowActionResult, BookingFlowFeedback, BookingFlowStatus, BookingFlowStep, BookingFlowStepId, BookingFlowView, BookingResourceView, BookingSlotDisplayOption, BookingSlotSelection, BookingSlotView, BookingSubmitActionResult, BookingSubmitOptions, BookingValidationErrors, DerivedBookingFlowSteps, DeriveBookingFlowStepsInput, LoadState, } from "../nodes/booking-form.headless.state";
@@ -27,7 +27,11 @@ export type EventRegistrationController = Readonly<{
27
27
  export type EventRegistrationWizardController = Readonly<{
28
28
  wizard: ReturnType<typeof useEventRegistrationWizard>;
29
29
  }>;
30
+ export type EventRegistrationControllerDeps = Readonly<{
31
+ useEventRegistrationWizard: typeof useEventRegistrationWizard;
32
+ }>;
30
33
  export declare function HeadlessEventRegistrationProvider({ config, children, }: HeadlessEventRegistrationProviderProps): React.ReactElement;
31
34
  export declare function useHeadlessEventRegistrationFlow(options: HeadlessEventRegistrationFlowOptions): HeadlessEventRegistrationFlow;
32
35
  export declare function useEventRegistrationController(options: HeadlessEventRegistrationFlowOptions): EventRegistrationController;
36
+ export declare function useEventRegistrationControllerWithDeps(options: HeadlessEventRegistrationFlowOptions, deps: EventRegistrationControllerDeps): EventRegistrationController;
33
37
  export declare function useEventRegistrationWizardController(options: HeadlessEventRegistrationFlowOptions): EventRegistrationWizardController;