@riverbankcms/sdk 0.146.0 → 0.148.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 (466) hide show
  1. package/CHANGELOG.md +28 -0
  2. package/dist/{PreviewEditorSidebar-kg2r2Fyi.mjs → PreviewEditorSidebar-DvEPG3Z2.mjs} +249 -172
  3. package/dist/{PreviewEditorUI-sWMLp5dT.mjs → PreviewEditorUI-D6eb6fkx.mjs} +68 -60
  4. package/dist/{PreviewQueryProvider-Cg51xq1w.mjs → PreviewQueryProvider-5znTyJuz.mjs} +1 -1
  5. package/dist/{SdkPreviewModeRuntime-h2ti3Hch.mjs → SdkPreviewModeRuntime-DJ6utQ_R.mjs} +1180 -475
  6. package/dist/{SiteChromeCustomizeContext-DEACFH9m.mjs → SiteChromeCustomizeContext-CFJYh6vo.mjs} +199078 -193767
  7. package/dist/_dts/ai/src/contracts/proposals.d.ts +198 -33
  8. package/dist/_dts/ai/src/contracts/siteStyleProposalSchemas.d.ts +18 -3
  9. package/dist/_dts/api/src/accessAdmin.d.ts +0 -4
  10. package/dist/_dts/api/src/accountApi.d.ts +6 -6
  11. package/dist/_dts/api/src/admin.d.ts +22 -22
  12. package/dist/_dts/api/src/aiPatch.d.ts +2 -2
  13. package/dist/_dts/api/src/aiPlayground.d.ts +1 -0
  14. package/dist/_dts/api/src/analytics.d.ts +2 -2
  15. package/dist/_dts/api/src/apiEndpointTypes.d.ts +2 -0
  16. package/dist/_dts/api/src/appointmentSetup.d.ts +2 -2
  17. package/dist/_dts/api/src/auth.d.ts +10 -10
  18. package/dist/_dts/api/src/availability.d.ts +6 -6
  19. package/dist/_dts/api/src/billing.d.ts +42 -15
  20. package/dist/_dts/api/src/billingEndpointDefinitions.d.ts +8 -0
  21. package/dist/_dts/api/src/billingEndpointTypes.d.ts +15 -6
  22. package/dist/_dts/api/src/blocks.d.ts +15 -14
  23. package/dist/_dts/api/src/blocksKeys.d.ts +2 -0
  24. package/dist/_dts/api/src/bookingConfig.d.ts +16 -2
  25. package/dist/_dts/api/src/bookingManagementEndpoints.d.ts +4 -13
  26. package/dist/_dts/api/src/bookingOperations.d.ts +6 -48
  27. package/dist/_dts/api/src/bookingPeople.d.ts +92 -0
  28. package/dist/_dts/api/src/bookingPeopleEndpointDefinitions.d.ts +38 -0
  29. package/dist/_dts/api/src/bookingRecords.d.ts +12 -49
  30. package/dist/_dts/api/src/bookingSettingsSections.d.ts +1 -1
  31. package/dist/_dts/api/src/bookings.d.ts +8 -7
  32. package/dist/_dts/api/src/calendar.d.ts +9 -9
  33. package/dist/_dts/api/src/commercePortalEndpoints.d.ts +7 -6
  34. package/dist/_dts/api/src/common/envelope.d.ts +2 -2
  35. package/dist/_dts/api/src/content-editor.d.ts +2 -2
  36. package/dist/_dts/api/src/contentEntries.d.ts +17 -48
  37. package/dist/_dts/api/src/contentRuntime.d.ts +51 -37
  38. package/dist/_dts/api/src/contentTypes.d.ts +11 -11
  39. package/dist/_dts/api/src/contentVersionHistoryClient.d.ts +6 -6
  40. package/dist/_dts/api/src/documentLifecycle.d.ts +67 -0
  41. package/dist/_dts/api/src/domains.d.ts +16 -16
  42. package/dist/_dts/api/src/editLeaseEndpoints.d.ts +72 -0
  43. package/dist/_dts/api/src/emailSettings.d.ts +4 -4
  44. package/dist/_dts/api/src/endpoints.d.ts +725 -607
  45. package/dist/_dts/api/src/eventEmailTemplates.d.ts +2 -2
  46. package/dist/_dts/api/src/eventManagementContracts.d.ts +48 -8
  47. package/dist/_dts/api/src/eventManagementEndpointDefinitions.d.ts +1 -9
  48. package/dist/_dts/api/src/eventPageWords.d.ts +7 -12
  49. package/dist/_dts/api/src/footerSettings.d.ts +6 -6
  50. package/dist/_dts/api/src/index.d.ts +8 -6
  51. package/dist/_dts/api/src/indexCoreTypes.d.ts +2 -1
  52. package/dist/_dts/api/src/indexExtendedTypes.d.ts +1 -1
  53. package/dist/_dts/api/src/launchReadiness.d.ts +1 -6
  54. package/dist/_dts/api/src/mailingListIntegration.d.ts +6 -0
  55. package/dist/_dts/api/src/navigation/dashboardBookingsNav.d.ts +1 -1
  56. package/dist/_dts/api/src/navigation.d.ts +5 -5
  57. package/dist/_dts/api/src/newsletterEndpointDefinitions.d.ts +15 -0
  58. package/dist/_dts/api/src/occurrenceScheduling.d.ts +19 -0
  59. package/dist/_dts/api/src/pageSurfaceEditorEndpoints.d.ts +55 -0
  60. package/dist/_dts/api/src/pageSurfaceEndpoints.d.ts +28 -7
  61. package/dist/_dts/api/src/pages.d.ts +7 -7
  62. package/dist/_dts/api/src/performance.d.ts +1 -1
  63. package/dist/_dts/api/src/public/index.d.ts +1 -1
  64. package/dist/_dts/api/src/publicAppointmentBookingContracts.d.ts +50 -0
  65. package/dist/_dts/api/src/publicExperience/commerceEndpoints.d.ts +4 -0
  66. package/dist/_dts/api/src/publicExperience/eventEndpoints.d.ts +7 -0
  67. package/dist/_dts/api/src/redirects.d.ts +3 -3
  68. package/dist/_dts/api/src/request.d.ts +10 -1
  69. package/dist/_dts/api/src/resources.d.ts +4 -4
  70. package/dist/_dts/api/src/routes.d.ts +8 -3
  71. package/dist/_dts/api/src/sdk-event-upsert.d.ts +15 -1
  72. package/dist/_dts/api/src/sdkBlockUpsertContracts.d.ts +21 -0
  73. package/dist/_dts/api/src/sdkContracts.d.ts +5 -28
  74. package/dist/_dts/api/src/sdkCourseBooking.d.ts +4 -4
  75. package/dist/_dts/api/src/sdkEventEndpointDefinitions.d.ts +1 -1
  76. package/dist/_dts/api/src/sdkEventOccurrenceRequestContracts.d.ts +43 -0
  77. package/dist/_dts/api/src/sdkManagedEventContracts.d.ts +4 -2
  78. package/dist/_dts/api/src/sdkPullEventContracts.d.ts +8 -1
  79. package/dist/_dts/api/src/seo.d.ts +4 -4
  80. package/dist/_dts/api/src/services.d.ts +4 -4
  81. package/dist/_dts/api/src/siteLifecycleEndpoints.d.ts +61 -0
  82. package/dist/_dts/api/src/siteManagementEndpoints.d.ts +19 -25
  83. package/dist/_dts/api/src/siteMembers.d.ts +10 -10
  84. package/dist/_dts/api/src/siteOnboarding.d.ts +16 -14
  85. package/dist/_dts/api/src/sitePlatformEndpoints.d.ts +7 -3
  86. package/dist/_dts/api/src/siteRuntimeEndpoints.d.ts +5 -12
  87. package/dist/_dts/api/src/siteRuntimeEntry.d.ts +31 -0
  88. package/dist/_dts/billing/src/checkout/platform.d.ts +77 -0
  89. package/dist/_dts/billing/src/components/index.d.ts +25 -40
  90. package/dist/_dts/billing/src/membership/index.d.ts +1 -3
  91. package/dist/_dts/billing/src/plans/entitlements.d.ts +80 -0
  92. package/dist/_dts/billing/src/plans/registry.d.ts +16 -16
  93. package/dist/_dts/billing/src/plans/standing.d.ts +9 -2
  94. package/dist/_dts/billing/src/plans/types.d.ts +5 -15
  95. package/dist/_dts/billing/src/site-arrangements.d.ts +2 -2
  96. package/dist/_dts/billing/src/subscriptions/standingEvidence.d.ts +2 -4
  97. package/dist/_dts/billing/src/subscriptions/store.d.ts +17 -11
  98. package/dist/_dts/block-form/src/backend/store-backend.d.ts +6 -7
  99. package/dist/_dts/block-form/src/backend/types.d.ts +7 -0
  100. package/dist/_dts/block-form/src/widgets/FieldFrame.d.ts +3 -1
  101. package/dist/_dts/blocks/src/PageRenderer.d.ts +3 -4
  102. package/dist/_dts/blocks/src/client/events.d.ts +3 -0
  103. package/dist/_dts/blocks/src/contracts/proof-block-islands.d.ts +24 -4
  104. package/dist/_dts/blocks/src/index.d.ts +1 -1
  105. package/dist/_dts/blocks/src/pageRenderAdmission.d.ts +18 -9
  106. package/dist/_dts/blocks/src/pageRendererContracts.d.ts +4 -0
  107. package/dist/_dts/blocks/src/portal/types.d.ts +0 -2
  108. package/dist/_dts/blocks/src/system/blocks/contact-newsletter.d.ts +2 -1
  109. package/dist/_dts/blocks/src/system/blocks/event-registration.d.ts +3 -1
  110. package/dist/_dts/blocks/src/system/blocks/events/shared/schemas.d.ts +4 -4
  111. package/dist/_dts/blocks/src/system/blocks/events/shared/types.d.ts +6 -1
  112. package/dist/_dts/blocks/src/system/blocks/newsletter-signup.d.ts +4 -1
  113. package/dist/_dts/blocks/src/system/runtime/api/client.d.ts +2 -2
  114. package/dist/_dts/blocks/src/system/runtime/api/index.d.ts +1 -1
  115. package/dist/_dts/blocks/src/system/runtime/api/types/appointments.d.ts +6 -0
  116. package/dist/_dts/blocks/src/system/runtime/api/types/events.d.ts +18 -0
  117. package/dist/_dts/blocks/src/system/runtime/api/types/portal.d.ts +6 -0
  118. package/dist/_dts/blocks/src/system/runtime/api/types/shop.d.ts +4 -0
  119. package/dist/_dts/blocks/src/system/runtime/components/booking/SuccessMessage.d.ts +4 -1
  120. package/dist/_dts/blocks/src/system/runtime/components/registry.client.d.ts +36 -6
  121. package/dist/_dts/blocks/src/system/runtime/components/runtime-backed-blocks.d.ts +18 -3
  122. package/dist/_dts/blocks/src/system/runtime/hooks/useHeadlessBookingFlow.d.ts +11 -0
  123. package/dist/_dts/blocks/src/system/runtime/hooks/useHeadlessEventRegistrationFlow.d.ts +2 -0
  124. package/dist/_dts/blocks/src/system/runtime/hooks/usePaymentVerification.d.ts +2 -1
  125. package/dist/_dts/blocks/src/system/runtime/hooks/usePolling.d.ts +7 -48
  126. package/dist/_dts/blocks/src/system/runtime/nodes/booking-form.checkout-return-context.d.ts +7 -0
  127. package/dist/_dts/blocks/src/system/runtime/nodes/booking-form.completion.d.ts +11 -0
  128. package/dist/_dts/blocks/src/system/runtime/nodes/booking-form.headless.state.d.ts +13 -0
  129. package/dist/_dts/blocks/src/system/runtime/nodes/booking-form.interactive.d.ts +28 -0
  130. package/dist/_dts/blocks/src/system/runtime/nodes/booking-form.mailing-list-choice.d.ts +5 -0
  131. package/dist/_dts/blocks/src/system/runtime/nodes/booking-form.mailing-list-state.d.ts +9 -0
  132. package/dist/_dts/blocks/src/system/runtime/nodes/booking-form.payment-confirmation.d.ts +13 -0
  133. package/dist/_dts/blocks/src/system/runtime/nodes/booking-form.reserved-fields.d.ts +1 -1
  134. package/dist/_dts/blocks/src/system/runtime/nodes/booking-form.server.d.ts +1 -1
  135. package/dist/_dts/blocks/src/system/runtime/nodes/booking-form.state.d.ts +17 -1
  136. package/dist/_dts/blocks/src/system/runtime/nodes/booking-form.submit-actions.d.ts +8 -0
  137. package/dist/_dts/blocks/src/system/runtime/nodes/booking-form.submit-handler.d.ts +9 -0
  138. package/dist/_dts/blocks/src/system/runtime/nodes/booking-form.submit-success.d.ts +9 -0
  139. package/dist/_dts/blocks/src/system/runtime/nodes/booking-runtime-sources.d.ts +4 -0
  140. package/dist/_dts/blocks/src/system/runtime/nodes/checkout.server.d.ts +2 -1
  141. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/AttendeeDetailsStep.d.ts +3 -0
  142. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/EventRegistrationSurface.d.ts +2 -1
  143. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/EventRegistrationWizard.d.ts +5 -0
  144. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/SuccessStep.d.ts +7 -1
  145. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/event-registration.headless.contract.d.ts +3 -0
  146. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/sessionStorage.d.ts +2 -0
  147. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/types.d.ts +8 -0
  148. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/useEventRegistrationSubmit.d.ts +5 -5
  149. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/useEventRegistrationWizard.d.ts +8 -0
  150. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration.interactive.d.ts +18 -5
  151. package/dist/_dts/blocks/src/system/runtime/nodes/events/EventListing.interactive.d.ts +6 -0
  152. package/dist/_dts/blocks/src/system/runtime/nodes/events/domain/dates.d.ts +37 -3
  153. package/dist/_dts/blocks/src/system/runtime/nodes/events/shared/EventCard.client.d.ts +1 -1
  154. package/dist/_dts/blocks/src/system/runtime/nodes/events/shared/EventCard.d.ts +16 -1
  155. package/dist/_dts/blocks/src/system/runtime/nodes/events/shared/eventCardPresentations.d.ts +13 -0
  156. package/dist/_dts/blocks/src/system/runtime/nodes/events/shared/eventCollectionContract.d.ts +5 -5
  157. package/dist/_dts/blocks/src/system/runtime/nodes/newsletter-form.block-submission.d.ts +2 -4
  158. package/dist/_dts/blocks/src/system/runtime/nodes/shared/MagicLinkForm.d.ts +1 -14
  159. package/dist/_dts/blocks/src/system/runtime/nodes/shared/MagicLinkForm.state.d.ts +12 -0
  160. package/dist/_dts/blocks/src/system/runtime/nodes/shop.interactive.d.ts +13 -0
  161. package/dist/_dts/blocks/src/system/runtime/resolver.d.ts +2 -0
  162. package/dist/_dts/blocks/src/system/runtime/shared/components/BookingMailingListNote.d.ts +6 -0
  163. package/dist/_dts/blocks/src/system/runtime/shared/components/DemoBookingPortalAccess.d.ts +22 -0
  164. package/dist/_dts/blocks/src/system/runtime/shared/components/DemoPortalSignInLink.d.ts +4 -0
  165. package/dist/_dts/blocks/src/system/runtime/shared/components/index.d.ts +1 -0
  166. package/dist/_dts/blocks/src/system/runtime/shared/mailingListSignupCopy.d.ts +6 -0
  167. package/dist/_dts/blocks/src/system/runtime/shared/types.d.ts +1 -0
  168. package/dist/_dts/blocks/src/system/runtime/shared/utils/demoBookingPassStorage.d.ts +10 -0
  169. package/dist/_dts/blocks/src/system/runtime/shared/utils/demoPortalMagicLink.d.ts +29 -0
  170. package/dist/_dts/blocks/src/system/transforms/registry/_utils/surfaceForegroundStyles.d.ts +3 -2
  171. package/dist/_dts/blocks/src/system/transforms/registry/core.d.ts +2 -0
  172. package/dist/_dts/blocks/src/system/transforms/registry/layout.d.ts +1 -3
  173. package/dist/_dts/commerce/src/purchase/event-registration-errors.d.ts +4 -0
  174. package/dist/_dts/content-editor/src/components/ContentFieldsForm.d.ts +2 -7
  175. package/dist/_dts/content-editor/src/controller/EditLeaseController.d.ts +39 -0
  176. package/dist/_dts/content-editor/src/controller/EditorWriteGate.d.ts +38 -0
  177. package/dist/_dts/content-editor/src/controller/EntryControllerProvider.d.ts +25 -61
  178. package/dist/_dts/content-editor/src/controller/LinkedEntryLeaseBanner.d.ts +7 -0
  179. package/dist/_dts/content-editor/src/controller/LinkedEntryLeaseControllers.d.ts +14 -0
  180. package/dist/_dts/content-editor/src/controller/deriveEditorUnpublishedState.d.ts +6 -0
  181. package/dist/_dts/content-editor/src/controller/documentValueBaseline.d.ts +25 -0
  182. package/dist/_dts/content-editor/src/controller/editLeaseLossSignal.d.ts +6 -0
  183. package/dist/_dts/content-editor/src/controller/editLeaseNotice.d.ts +28 -0
  184. package/dist/_dts/content-editor/src/controller/editorClientId.d.ts +2 -0
  185. package/dist/_dts/content-editor/src/controller/editorEditability.d.ts +38 -0
  186. package/dist/_dts/content-editor/src/controller/editorLeaseParticipation.d.ts +34 -0
  187. package/dist/_dts/content-editor/src/controller/normalizedMetadataBaseline.d.ts +29 -0
  188. package/dist/_dts/content-editor/src/controller/pageSurfaceDocumentBaselines.d.ts +14 -0
  189. package/dist/_dts/content-editor/src/controller/pageSurfaceLifecycle.d.ts +11 -0
  190. package/dist/_dts/content-editor/src/controller/planDocumentBaselineRefresh.d.ts +19 -0
  191. package/dist/_dts/content-editor/src/controller/readDocumentLeaseBaselines.d.ts +19 -0
  192. package/dist/_dts/content-editor/src/controller/refreshDocumentLeaseBaseline.d.ts +12 -0
  193. package/dist/_dts/content-editor/src/controller/refreshLinkedEntry.d.ts +17 -0
  194. package/dist/_dts/content-editor/src/controller/replayRestoredEditorEffects.d.ts +2 -3
  195. package/dist/_dts/content-editor/src/controller/routeWrites.d.ts +26 -0
  196. package/dist/_dts/content-editor/src/controller/useAutosaveTriggers.d.ts +16 -17
  197. package/dist/_dts/content-editor/src/controller/useBlockedPublishPlan.d.ts +6 -2
  198. package/dist/_dts/content-editor/src/controller/useBlocksList.d.ts +3 -3
  199. package/dist/_dts/content-editor/src/controller/useEntryValueAutosaves.d.ts +21 -0
  200. package/dist/_dts/content-editor/src/controller/useInitialEditorUiStore.d.ts +24 -0
  201. package/dist/_dts/content-editor/src/controller/useServerBaselineReconciliation.d.ts +17 -0
  202. package/dist/_dts/content-editor/src/footerComposerPanelTypes.d.ts +1 -1
  203. package/dist/_dts/content-editor/src/hooks/applyBlockedPublishPlan.d.ts +5 -1
  204. package/dist/_dts/content-editor/src/hooks/blockDraftLifecycle.d.ts +8 -47
  205. package/dist/_dts/content-editor/src/hooks/editLeaseMachine.d.ts +120 -0
  206. package/dist/_dts/content-editor/src/hooks/publishability.d.ts +6 -10
  207. package/dist/_dts/content-editor/src/hooks/useAutosaveStatus.d.ts +3 -0
  208. package/dist/_dts/content-editor/src/hooks/useBlockAutosave.d.ts +5 -15
  209. package/dist/_dts/content-editor/src/hooks/useDebouncedLatestSave.d.ts +7 -5
  210. package/dist/_dts/content-editor/src/hooks/useEditLease.d.ts +28 -0
  211. package/dist/_dts/content-editor/src/hooks/useEntryActions.d.ts +25 -39
  212. package/dist/_dts/content-editor/src/hooks/useEntryMutations.d.ts +17 -19
  213. package/dist/_dts/content-editor/src/hooks/useLinkedEntryAutosave.d.ts +5 -8
  214. package/dist/_dts/content-editor/src/hooks/useValueAutosave.d.ts +64 -0
  215. package/dist/_dts/content-editor/src/hooks/validateBlocksForPublish.d.ts +0 -7
  216. package/dist/_dts/content-editor/src/index.d.ts +26 -7
  217. package/dist/_dts/content-editor/src/linkedEntries/domain.d.ts +12 -0
  218. package/dist/_dts/content-editor/src/linkedEntries/owner.d.ts +9 -0
  219. package/dist/_dts/content-editor/src/liveDrafts/draftProjection.d.ts +66 -0
  220. package/dist/_dts/content-editor/src/liveDrafts/linkedSaveHandovers.d.ts +37 -0
  221. package/dist/_dts/content-editor/src/liveDrafts/remoteDraftOverlay.d.ts +113 -0
  222. package/dist/_dts/content-editor/src/liveDrafts/useLiveDrafts.d.ts +32 -0
  223. package/dist/_dts/content-editor/src/liveDrafts/useRetentionTicks.d.ts +7 -0
  224. package/dist/_dts/content-editor/src/primitives/shared/activePreviewField.d.ts +6 -0
  225. package/dist/_dts/content-editor/src/primitives/shared/storeBinding.d.ts +1 -0
  226. package/dist/_dts/content-editor/src/services/contentEntryServices.d.ts +96 -19
  227. package/dist/_dts/content-editor/src/services/editorApiClient.d.ts +13 -0
  228. package/dist/_dts/content-editor/src/services/index.d.ts +2 -0
  229. package/dist/_dts/content-editor/src/services/pageSurfaceEditorServices.d.ts +23 -0
  230. package/dist/_dts/content-editor/src/sync/flushValues.d.ts +13 -0
  231. package/dist/_dts/content-editor/src/sync/lifecycleFailure.d.ts +51 -0
  232. package/dist/_dts/content-editor/src/sync/runLifecycle.d.ts +64 -0
  233. package/dist/_dts/content-editor/src/sync/schedulerValues.d.ts +27 -0
  234. package/dist/_dts/content-editor/src/sync/sendPlanning.d.ts +104 -0
  235. package/dist/_dts/content-editor/src/sync/valueSync.d.ts +114 -0
  236. package/dist/_dts/content-editor/src/ui/blockCollection.d.ts +8 -0
  237. package/dist/_dts/content-editor/src/ui/documentLifecycle.d.ts +18 -0
  238. package/dist/_dts/content-editor/src/ui/editorLeaseUiState.d.ts +7 -0
  239. package/dist/_dts/content-editor/src/ui/editorRefresh.d.ts +82 -0
  240. package/dist/_dts/content-editor/src/ui/editorSnapshot.d.ts +102 -127
  241. package/dist/_dts/content-editor/src/ui/editorTransactionState.d.ts +1 -1
  242. package/dist/_dts/content-editor/src/ui/editorUiStore.d.ts +126 -72
  243. package/dist/_dts/content-editor/src/ui/editorValueSnapshot.d.ts +18 -0
  244. package/dist/_dts/content-editor/src/ui/serverBlockAdmission.d.ts +26 -0
  245. package/dist/_dts/content-editor/src/ui/stores/autosaveStore.d.ts +16 -27
  246. package/dist/_dts/content-editor/src/ui/stores/blockVersionsStore.d.ts +24 -0
  247. package/dist/_dts/content-editor/src/ui/stores/linkedEntryLeaseStore.d.ts +54 -0
  248. package/dist/_dts/content-editor/src/ui/stores/linkedSaveHandoversStore.d.ts +11 -0
  249. package/dist/_dts/content-editor/src/ui/stores/remoteDraftsStore.d.ts +10 -0
  250. package/dist/_dts/content-editor/src/ui/stores/types.d.ts +63 -3
  251. package/dist/_dts/content-editor/src/useFooterComposerState.d.ts +2 -2
  252. package/dist/_dts/content-editor/src/useFooterNavigationLayout.d.ts +1 -1
  253. package/dist/_dts/content-model/src/content-types/builtin-schemas.d.ts +4 -4
  254. package/dist/_dts/content-model/src/content-types/builtins.d.ts +4 -4
  255. package/dist/_dts/content-model/src/definitions/shared.d.ts +11 -2
  256. package/dist/_dts/content-model/src/entry-slots/index.d.ts +1 -0
  257. package/dist/_dts/content-model/src/entry-slots/serializeAllowedBlocks.d.ts +2 -0
  258. package/dist/_dts/content-model/src/metadataConfig.d.ts +10 -38
  259. package/dist/_dts/content-model/src/templates/defaults.d.ts +0 -1
  260. package/dist/_dts/content-model/src/types.d.ts +0 -1
  261. package/dist/_dts/core/src/block-content-identity.d.ts +49 -1
  262. package/dist/_dts/core/src/branded.d.ts +12 -0
  263. package/dist/_dts/core/src/currency-format.d.ts +8 -2
  264. package/dist/_dts/core/src/demo-lifecycle-status.d.ts +2 -2
  265. package/dist/_dts/core/src/demo-warm-pool-target.d.ts +8 -0
  266. package/dist/_dts/core/src/edit-lease.d.ts +55 -0
  267. package/dist/_dts/core/src/editor-state.d.ts +38 -13
  268. package/dist/_dts/core/src/editor-value-sync.d.ts +79 -0
  269. package/dist/_dts/core/src/html-entities.d.ts +6 -0
  270. package/dist/_dts/core/src/index.d.ts +5 -1
  271. package/dist/_dts/core/src/mailing-list-runtime.d.ts +15 -0
  272. package/dist/_dts/core/src/mailing-list-setup.d.ts +2 -0
  273. package/dist/_dts/core/src/mailing-list-submission.d.ts +6 -0
  274. package/dist/_dts/core/src/navigation-portal-labels.d.ts +9 -0
  275. package/dist/_dts/core/src/participants.d.ts +0 -38
  276. package/dist/_dts/core/src/uuid.d.ts +7 -5
  277. package/dist/_dts/db/src/generated/supabase/database.types.d.ts +261 -175
  278. package/dist/_dts/editor/src/EditorProvider.d.ts +5 -0
  279. package/dist/_dts/editor/src/chrome/EditorChrome.d.ts +14 -0
  280. package/dist/_dts/editor/src/chrome/EditorStatusBar.d.ts +1 -0
  281. package/dist/_dts/editor/src/chrome/statusBarPresentation.d.ts +0 -1
  282. package/dist/_dts/editor/src/index.d.ts +1 -1
  283. package/dist/_dts/editor-blocks/src/BlockEditor.d.ts +10 -9
  284. package/dist/_dts/editor-blocks/src/BlockForm.d.ts +1 -1
  285. package/dist/_dts/editor-blocks/src/block-editor/BlockCard.d.ts +1 -1
  286. package/dist/_dts/editor-blocks/src/block-editor/BlockCardFrame.d.ts +1 -1
  287. package/dist/_dts/editor-blocks/src/block-editor/BlockSettingsModal.d.ts +1 -1
  288. package/dist/_dts/editor-blocks/src/block-editor/actionPresentation.d.ts +1 -0
  289. package/dist/_dts/editor-blocks/src/block-editor/applyExtendedFieldDefaults.d.ts +3 -4
  290. package/dist/_dts/editor-blocks/src/block-editor/blockDraftBaselineSeed.d.ts +4 -8
  291. package/dist/_dts/editor-blocks/src/block-editor/editorBlockItem.d.ts +23 -0
  292. package/dist/_dts/editor-blocks/src/block-editor/generatedIconApplyCoordination.d.ts +2 -7
  293. package/dist/_dts/editor-blocks/src/block-editor/hooks/applyBlockStructureChange.d.ts +4 -0
  294. package/dist/_dts/editor-blocks/src/block-editor/hooks/buildInsertBlockHistoryCommand.d.ts +14 -5
  295. package/dist/_dts/editor-blocks/src/block-editor/hooks/useBlockBaselineSync.d.ts +21 -19
  296. package/dist/_dts/editor-blocks/src/block-editor/hooks/useBlockCreation.d.ts +2 -10
  297. package/dist/_dts/editor-blocks/src/block-editor/hooks/useBlockDuplication.d.ts +8 -16
  298. package/dist/_dts/editor-blocks/src/block-editor/owner.d.ts +6 -16
  299. package/dist/_dts/editor-blocks/src/block-editor/types.d.ts +37 -9
  300. package/dist/_dts/editor-blocks/src/index.d.ts +2 -1
  301. package/dist/_dts/editor-blocks/src/widgets/entry-picker/loaders.d.ts +1 -1
  302. package/dist/_dts/editor-blocks/src/widgets/link/loaders.d.ts +1 -1
  303. package/dist/_dts/editor-blocks/src/widgets/mailing-list-targeting/loaders.d.ts +1 -1
  304. package/dist/_dts/editor-blocks/src/widgets/reference/loaders.d.ts +1 -1
  305. package/dist/_dts/editor-blocks/src/widgets/site-option-picker/loaders.d.ts +3 -2
  306. package/dist/_dts/media-core/src/fileStorage.d.ts +4 -0
  307. package/dist/_dts/media-editor/src/context.d.ts +1 -1
  308. package/dist/_dts/media-editor/src/createMediaEditorProvider.d.ts +1 -2
  309. package/dist/_dts/media-editor/src/provider.d.ts +3 -2
  310. package/dist/_dts/media-react/src/hooks/internal/classification.d.ts +1 -1
  311. package/dist/_dts/media-react/src/hooks/useApiMediaUploader.d.ts +3 -1
  312. package/dist/_dts/preview-next/src/client/blocks/EditablePageRenderer.d.ts +7 -1
  313. package/dist/_dts/preview-next/src/client/blocks/composer/mergeDrafts.d.ts +8 -3
  314. package/dist/_dts/preview-next/src/client/blocks/composer/types.d.ts +10 -6
  315. package/dist/_dts/preview-next/src/client/blocks/linkedEntryRenderOverlay.d.ts +22 -2
  316. package/dist/_dts/preview-next/src/client/blocks/previewProjection/entryFieldRebinding.d.ts +13 -0
  317. package/dist/_dts/preview-next/src/client/blocks/previewProjection/index.d.ts +2 -1
  318. package/dist/_dts/preview-next/src/client/blocks/previewProjection/types.d.ts +11 -1
  319. package/dist/_dts/preview-next/src/client/blocks/renderPrecedence.d.ts +17 -0
  320. package/dist/_dts/preview-next/src/client/blocks/useLinkedSaveHandoverRetention.d.ts +20 -0
  321. package/dist/_dts/preview-next/src/client/index.d.ts +1 -1
  322. package/dist/_dts/preview-next/src/client/preview/EntryEditorPanel.d.ts +2 -1
  323. package/dist/_dts/preview-next/src/client/preview/EntrySlotBlockEditorPanel.d.ts +2 -1
  324. package/dist/_dts/preview-next/src/client/preview/PreviewAccessBanners.d.ts +7 -0
  325. package/dist/_dts/preview-next/src/client/preview/PreviewEditorSidebar.d.ts +2 -1
  326. package/dist/_dts/preview-next/src/client/preview/PreviewEntryControllerProvider.d.ts +24 -14
  327. package/dist/_dts/preview-next/src/client/preview/PreviewLeaseEditingMode.d.ts +2 -0
  328. package/dist/_dts/preview-next/src/client/preview/PreviewShell.d.ts +9 -2
  329. package/dist/_dts/preview-next/src/client/preview/PreviewShellLayout.d.ts +1 -0
  330. package/dist/_dts/preview-next/src/client/preview/previewCustomizeAutosave.d.ts +5 -0
  331. package/dist/_dts/preview-next/src/client/preview/previewCustomizeWorkflowState.d.ts +3 -4
  332. package/dist/_dts/preview-next/src/client/preview/sdkConfig.d.ts +1 -0
  333. package/dist/_dts/preview-next/src/client/preview/usePreviewCustomizeWorkflowState.d.ts +4 -0
  334. package/dist/_dts/realtime/src/client.d.ts +3 -0
  335. package/dist/_dts/realtime/src/draftChannel.d.ts +91 -0
  336. package/dist/_dts/realtime/src/drafts.d.ts +210 -0
  337. package/dist/_dts/realtime/src/index.d.ts +3 -0
  338. package/dist/_dts/realtime/src/leaseChangeSubscriptions.d.ts +8 -0
  339. package/dist/_dts/realtime/src/types.d.ts +113 -0
  340. package/dist/_dts/realtime/src/useDraftChannel.d.ts +34 -0
  341. package/dist/_dts/realtime/src/useSiteRealtimeReload.d.ts +27 -0
  342. package/dist/_dts/sdk/src/public-api/contracts.d.ts +6 -55
  343. package/dist/_dts/sdk/src/rendering/blocks-page-renderer.d.ts +2 -0
  344. package/dist/_dts/sdk/src/rendering/components/pageShared.d.ts +2 -0
  345. package/dist/_dts/sdk/src/rendering/helpers/loadPage.d.ts +1 -1
  346. package/dist/_dts/sdk/src/rendering/helpers/pageRuntimeSupport.d.ts +4 -2
  347. package/dist/_dts/sdk/src/version.d.ts +1 -1
  348. package/dist/_dts/surfaces/src/index.d.ts +1 -0
  349. package/dist/_dts/theme-core/src/buttons/effects/types.d.ts +1 -1
  350. package/dist/_dts/theme-core/src/footer/effectiveNavLinkStyle.d.ts +13 -0
  351. package/dist/_dts/theme-core/src/footer/index.d.ts +1 -0
  352. package/dist/_dts/theme-core/src/generated/containerResponsiveThemeCss.d.ts +1 -1
  353. package/dist/_dts/theme-core/src/header/effectiveNavLinkStyle.d.ts +17 -0
  354. package/dist/_dts/theme-core/src/header/generateHeaderLogoStyles.d.ts +15 -0
  355. package/dist/_dts/theme-core/src/header/generateHeaderNavLinkStyles.d.ts +4 -0
  356. package/dist/_dts/theme-core/src/header/index.d.ts +3 -0
  357. package/dist/_dts/theme-core/src/header/legacyNavLinkStyle.d.ts +1 -1
  358. package/dist/_dts/theme-core/src/header/openingForegroundProjection.d.ts +7 -0
  359. package/dist/_dts/theme-core/src/header/rootPaint.d.ts +4 -0
  360. package/dist/_dts/theme-core/src/navigation/effectPolicy.d.ts +38 -0
  361. package/dist/_dts/theme-core/src/navigation/generateNavLinkCSS.d.ts +4 -0
  362. package/dist/_dts/theme-core/src/navigation/types.d.ts +4 -0
  363. package/dist/_dts/theme-core/src/site-styles/accessibleSurfaces.d.ts +1 -1
  364. package/dist/_dts/theme-core/src/site-styles/designState.d.ts +2 -2
  365. package/dist/_dts/theme-core/src/surfaces/foregroundContract.d.ts +7 -0
  366. package/dist/_dts/theme-core/src/surfaces/foregroundInteraction.d.ts +29 -22
  367. package/dist/_dts/theme-core/src/surfaces/foregroundRoles.d.ts +10 -2
  368. package/dist/_dts/theme-core/src/surfaces/resolveSurfaceForeground.d.ts +9 -0
  369. package/dist/_dts/theme-core/src/utils/cssDeclarations.d.ts +2 -0
  370. package/dist/_dts/ui/src/badge.d.ts +2 -1
  371. package/dist/_dts/ui/src/button.d.ts +1 -1
  372. package/dist/_dts/ui/src/combobox-keys.d.ts +23 -0
  373. package/dist/_dts/ui/src/combobox-rows.d.ts +34 -0
  374. package/dist/_dts/ui/src/combobox.d.ts +26 -1
  375. package/dist/_dts/ui/src/date-picker.d.ts +5 -8
  376. package/dist/_dts/ui/src/editor-item-card.d.ts +1 -0
  377. package/dist/_dts/ui/src/field-trigger.d.ts +39 -0
  378. package/dist/_dts/ui/src/fieldControl.d.ts +27 -0
  379. package/dist/_dts/ui/src/index.d.ts +4 -1
  380. package/dist/_dts/ui/src/native-select.d.ts +8 -0
  381. package/dist/_dts/ui/src/popover.d.ts +7 -1
  382. package/dist/_dts/ui/src/segmented-control.d.ts +4 -0
  383. package/dist/_dts/ui/src/surface.d.ts +1 -1
  384. package/dist/client/{BookingConsentAgreement-BQKL045f.mjs → BookingMailingListNote-CzRt2dF_.mjs} +110 -97
  385. package/dist/client/{CheckboxChoice--W2n6yKs.mjs → CheckboxChoice-B33MqoUo.mjs} +1 -1
  386. package/dist/client/DemoBookingPortalAccess-mxqwap3f.mjs +344 -0
  387. package/dist/client/{EventCombined.client-BdRjVbhH.mjs → EventCombined.client-CDb11igO.mjs} +7 -7
  388. package/dist/client/{EventListing.client-DBxC6xOU.mjs → EventListing.client-EgYhzKPa.mjs} +2 -2
  389. package/dist/client/{LeafletStaticMap-mHEJKrTs.mjs → LeafletStaticMap-gtmtaA2b.mjs} +1 -1
  390. package/dist/client/{scrollToBlock-BNgaEUpo.mjs → TerminalPanel-DvNUP5ot.mjs} +77 -77
  391. package/dist/client/{ThemedButton-CE5KYT6z.mjs → ThemedButton-C7CeUJjW.mjs} +2 -2
  392. package/dist/client/{accordion-BEQNSptH.mjs → accordion-kjvt49rA.mjs} +1 -1
  393. package/dist/client/{bookingForm-AMr-s5vw.mjs → bookingForm-pbRZordh.mjs} +411 -141
  394. package/dist/client/bookings.mjs +966 -396
  395. package/dist/client/{carousel-Bbt_QgJy.mjs → carousel-f4Zbmicv.mjs} +2 -2
  396. package/dist/client/{carousel.client-jahpU9Vz.mjs → carousel.client-A2lG-9od.mjs} +1 -1
  397. package/dist/client/{cart-CnWi30zJ.mjs → cart-DO20An50.mjs} +3 -3
  398. package/dist/client/{checkout-f3nkWgd4.mjs → checkout-Du5amDR_.mjs} +3 -3
  399. package/dist/client/{checkoutUrls-CW3-78uu.mjs → checkoutUrls-CXhko2Rv.mjs} +1 -1
  400. package/dist/client/client.mjs +3837 -2202
  401. package/dist/client/{colorStyles-CuJBiS-1.mjs → colorStyles-j5U9v5JA.mjs} +5 -1
  402. package/dist/client/{context-Bc8T6pCe.mjs → context-eW97E945.mjs} +4 -3
  403. package/dist/client/{dates-DUsCEzLb.mjs → dates-jPCirRea.mjs} +56 -11
  404. package/dist/client/{eventCalendar-CKwgXui5.mjs → eventCalendar-C2M-iE4j.mjs} +10 -10
  405. package/dist/client/{eventCombined-CBAOSTGR.mjs → eventCombined-W6ns3LHg.mjs} +4 -4
  406. package/dist/client/{eventDetails-Dh-_WiBD.mjs → eventDetails-CR-GT0f0.mjs} +4 -4
  407. package/dist/client/{eventListing-CA3frIH5.mjs → eventListing-BK8AfYZz.mjs} +4 -4
  408. package/dist/client/{eventRegistration-BHtsgdcg.mjs → eventRegistration-BJSd4KUu.mjs} +461 -266
  409. package/dist/client/{form-C2h3YAcg.mjs → form-BvpfbQaT.mjs} +5 -5
  410. package/dist/client/{headerSection-lwMuMTH9.mjs → headerSection-I5sUQ8x-.mjs} +3 -3
  411. package/dist/client/hooks.mjs +909 -163
  412. package/dist/client/{locationMap-DJ2bLODV.mjs → locationMap-BLvwf9_f.mjs} +4 -4
  413. package/dist/client/{FieldValidationMessage-AYanWFb-.mjs → mailingListSignupCopy-DZSHZrm6.mjs} +14 -1
  414. package/dist/client/{media-BtJ37tzS.mjs → media-Cl38iOMI.mjs} +11 -4
  415. package/dist/client/{newsletterForm-8Pu5K32g.mjs → newsletterForm-DrQ2weE8.mjs} +6 -6
  416. package/dist/client/{pricing-HHx3IgBz.mjs → pricing-BES87mrR.mjs} +1 -1
  417. package/dist/client/{productDetail-C_1odnAf.mjs → productDetail-Url9jcc5.mjs} +3 -3
  418. package/dist/client/{productList-CtCv-Nmx.mjs → productList-DE7ngEZJ.mjs} +3 -3
  419. package/dist/client/{propsDecoder-Dcgsncxb.mjs → propsDecoder-D1OtGXDV.mjs} +140 -22
  420. package/dist/client/rendering/client.mjs +2366 -997
  421. package/dist/client/rendering/islands.mjs +19 -19
  422. package/dist/client/rendering.mjs +4607 -2884
  423. package/dist/client/{routeIslandApiConfig-CWLP7wu3.mjs → routeIslandApiConfig-BG9Y-SHg.mjs} +1 -1
  424. package/dist/client/{shop-DQXrQ8kJ.mjs → shop-CJkuySJ3.mjs} +126 -79
  425. package/dist/client/{shop-commerce-B88zmWWo.mjs → shop-commerce-4rKj5n9h.mjs} +26 -14
  426. package/dist/client/{shop-commerce-store-DtSfkKuX.mjs → shop-commerce-store-Bxm75Pg6.mjs} +1 -1
  427. package/dist/client/{shopShared-cuaONpkJ.mjs → shopShared-DpoQDWfz.mjs} +5 -5
  428. package/dist/client/{useEventFilters-Bukew6Gb.mjs → useEventFilters-D8HliSqR.mjs} +33 -18
  429. package/dist/preview-next/before-render.mjs +314 -133
  430. package/dist/preview-next/client/runtime.mjs +4 -4
  431. package/dist/preview-next/editor-base.css +53 -2
  432. package/dist/preview-next/editor-chrome.css +7 -4
  433. package/dist/preview-next/keepAlive.mjs +314 -133
  434. package/dist/preview-next/middleware.mjs +314 -133
  435. package/dist/{previewAuthStore-h5IgbSp4.mjs → previewAuthStore-BXXF3hhW.mjs} +316 -133
  436. package/dist/{sdk-runtime-DTc1uIXn.mjs → sdk-runtime-C2a05WjL.mjs} +2 -2
  437. package/dist/{separator-BpHS1KZK.mjs → separator-CuNhBAhS.mjs} +1 -1
  438. package/dist/server/components.mjs +6888 -6157
  439. package/dist/server/config-validation.mjs +931 -199
  440. package/dist/server/config.mjs +931 -199
  441. package/dist/server/data.mjs +929 -198
  442. package/dist/server/index.mjs +317 -134
  443. package/dist/server/navigation.mjs +13 -2
  444. package/dist/server/next.mjs +5003 -4340
  445. package/dist/server/page-converter.mjs +160 -78
  446. package/dist/server/prebuild.mjs +1 -1
  447. package/dist/server/rendering/server.mjs +6421 -5687
  448. package/dist/server/rendering.mjs +7683 -6933
  449. package/dist/server/routing.mjs +1035 -338
  450. package/dist/server/server.mjs +946 -256
  451. package/dist/server/theme-bridge.mjs +66 -17
  452. package/dist/server/theme.mjs +5 -1
  453. package/dist/styles/index.css +32 -4
  454. package/package.json +1 -1
  455. package/dist/_dts/billing/src/plans/display.d.ts +0 -15
  456. package/dist/_dts/content-editor/src/controller/buildBlockPublishedBaselines.d.ts +0 -4
  457. package/dist/_dts/content-editor/src/controller/buildPublishSuccessTransition.d.ts +0 -16
  458. package/dist/_dts/content-editor/src/controller/driver.d.ts +0 -14
  459. package/dist/_dts/content-editor/src/controller/seedDraftBaselinesFromBlocks.d.ts +0 -7
  460. package/dist/_dts/content-editor/src/controller/useEntrySyncHelpers.d.ts +0 -29
  461. package/dist/_dts/content-editor/src/hooks/autosaveScopePlanning.d.ts +0 -26
  462. package/dist/_dts/content-editor/src/hooks/useSimpleAutosave.d.ts +0 -64
  463. package/dist/_dts/content-editor/src/hooks/useStoreAutosave.d.ts +0 -48
  464. package/dist/_dts/content-editor/src/types.d.ts +0 -44
  465. package/dist/_dts/core/src/participant-identity.d.ts +0 -135
  466. package/dist/client/DiscountCodeDisclosure-CsOtjFY7.mjs +0 -137
@@ -63,6 +63,64 @@ function defineEndpointDefinitions(definitions) {
63
63
  return definitions;
64
64
  }
65
65
  //#endregion
66
+ //#region ../api/src/apiEndpointTypes.ts
67
+ function allowedDemoMutationPolicy() {
68
+ return {
69
+ classification: "allowed",
70
+ publicMessage: ""
71
+ };
72
+ }
73
+ function blockedDemoMutationPolicy(classification, publicMessage) {
74
+ if (publicMessage.trim() === "") throw new Error(`Demo mutation policy ${classification} requires publicMessage.`);
75
+ return {
76
+ classification,
77
+ publicMessage
78
+ };
79
+ }
80
+ //#endregion
81
+ //#region ../api/src/demoMutationPolicies.ts
82
+ const DEMO_MUTATION_BLOCKED_HIDDEN = blockedDemoMutationPolicy("blocked-hidden", "This action is not available in demo sites.");
83
+ const DEMO_MUTATION_BLOCKED_DISABLED = blockedDemoMutationPolicy("blocked-disabled", "This setting is disabled in demo sites.");
84
+ blockedDemoMutationPolicy("internal-only", "This internal operation is not available in demo sites.");
85
+ const DEMO_MUTATION_ALLOWED = allowedDemoMutationPolicy();
86
+ //#endregion
87
+ //#region ../api/src/siteLifecycleEndpoints.ts
88
+ const SITE_LIFECYCLE_ENDPOINT_DEFINITIONS = defineEndpointDefinitions({
89
+ createSite: {
90
+ path: "/sites/manage",
91
+ method: "POST",
92
+ tags: ["site"],
93
+ auth: "user",
94
+ responseKind: "json",
95
+ errors: []
96
+ },
97
+ createSiteManual: {
98
+ path: "/sites/manual",
99
+ method: "POST",
100
+ tags: ["site"],
101
+ auth: "user",
102
+ responseKind: "json",
103
+ errors: []
104
+ },
105
+ updateSite: {
106
+ path: "/sites/manage",
107
+ method: "PUT",
108
+ tags: ["site"],
109
+ auth: "user",
110
+ responseKind: "json",
111
+ errors: []
112
+ },
113
+ deleteSite: {
114
+ path: "/sites/{siteId}",
115
+ method: "DELETE",
116
+ tags: ["site", "site-{siteId}"],
117
+ auth: "user",
118
+ responseKind: "json",
119
+ errors: [],
120
+ demoMutation: DEMO_MUTATION_BLOCKED_HIDDEN
121
+ }
122
+ });
123
+ //#endregion
66
124
  //#region ../api/src/publicNewsletterEndpointDefinitions.ts
67
125
  const PUBLIC_NEWSLETTER_ENDPOINT_DEFINITIONS = defineEndpointDefinitions({
68
126
  subscribeNewsletter: {
@@ -123,27 +181,6 @@ const PUBLIC_NEWSLETTER_ENDPOINT_DEFINITIONS = defineEndpointDefinitions({
123
181
  }
124
182
  });
125
183
  //#endregion
126
- //#region ../api/src/apiEndpointTypes.ts
127
- function allowedDemoMutationPolicy() {
128
- return {
129
- classification: "allowed",
130
- publicMessage: ""
131
- };
132
- }
133
- function blockedDemoMutationPolicy(classification, publicMessage) {
134
- if (publicMessage.trim() === "") throw new Error(`Demo mutation policy ${classification} requires publicMessage.`);
135
- return {
136
- classification,
137
- publicMessage
138
- };
139
- }
140
- //#endregion
141
- //#region ../api/src/demoMutationPolicies.ts
142
- const DEMO_MUTATION_BLOCKED_HIDDEN = blockedDemoMutationPolicy("blocked-hidden", "This action is not available in demo sites.");
143
- const DEMO_MUTATION_BLOCKED_DISABLED = blockedDemoMutationPolicy("blocked-disabled", "This setting is disabled in demo sites.");
144
- blockedDemoMutationPolicy("internal-only", "This internal operation is not available in demo sites.");
145
- const DEMO_MUTATION_ALLOWED = allowedDemoMutationPolicy();
146
- //#endregion
147
184
  //#region ../api/src/cache-tags.ts
148
185
  /**
149
186
  * Tag templates for endpoint definitions (support `{param}` placeholders).
@@ -1170,6 +1207,20 @@ const NEWSLETTER_ENDPOINT_DEFINITIONS = defineEndpointDefinitions({
1170
1207
  responseKind: "json",
1171
1208
  errors: ["auth:forbidden", "server:internal_error"]
1172
1209
  },
1210
+ setMailingListBookingOptIn: {
1211
+ path: "/sites/{siteId}/mailing-list/setup/booking-opt-in",
1212
+ method: "PUT",
1213
+ tags: [TAG_TEMPLATES.site, TAG_TEMPLATES.siteNewsletter],
1214
+ auth: "user",
1215
+ responseKind: "json",
1216
+ demoMutation: DEMO_MUTATION_BLOCKED_DISABLED,
1217
+ errors: [
1218
+ "auth:forbidden",
1219
+ "validation:invalid_input",
1220
+ "resource:conflict",
1221
+ "server:internal_error"
1222
+ ]
1223
+ },
1173
1224
  getMailingListAuthoringContext: {
1174
1225
  path: "/sites/{siteId}/mailing-list/authoring-context",
1175
1226
  method: "GET",
@@ -1585,6 +1636,7 @@ const SDK_EVENT_ENDPOINT_DEFINITIONS = defineEndpointDefinitions({
1585
1636
  responseKind: "json",
1586
1637
  errors: [
1587
1638
  "resource:not_found",
1639
+ "validation:invalid_input",
1588
1640
  "resource:conflict",
1589
1641
  "server:internal_error"
1590
1642
  ]
@@ -1691,6 +1743,19 @@ const CURRENCY_LOCALE_BY_CODE = {
1691
1743
  function resolveCurrencyLocale(currencyCode, override) {
1692
1744
  return override ?? CURRENCY_LOCALE_BY_CODE[currencyCode] ?? "en";
1693
1745
  }
1746
+ function fractionDigitsFor(decimals, exactFormatter) {
1747
+ switch (decimals) {
1748
+ case "exact": return {};
1749
+ case "auto": return {
1750
+ minimumFractionDigits: 0,
1751
+ maximumFractionDigits: exactFormatter.resolvedOptions().maximumFractionDigits
1752
+ };
1753
+ case "whole": return {
1754
+ minimumFractionDigits: 0,
1755
+ maximumFractionDigits: 0
1756
+ };
1757
+ }
1758
+ }
1694
1759
  /**
1695
1760
  * The single currency-amount formatter for the product: minor units in,
1696
1761
  * localized string out.
@@ -1701,6 +1766,13 @@ function resolveCurrencyLocale(currencyCode, override) {
1701
1766
  * own `Intl.NumberFormat`.
1702
1767
  */
1703
1768
  function formatCurrencyAmount(amountCents, currency, options) {
1769
+ return formatCurrencyMajorUnits(amountCents / 100, currency, options);
1770
+ }
1771
+ /**
1772
+ * `formatCurrencyAmount` for an amount already in MAJOR units (29.99 = £29.99),
1773
+ * such as a registrar price. Prefer minor units everywhere else.
1774
+ */
1775
+ function formatCurrencyMajorUnits(amount, currency, options) {
1704
1776
  const currencyCode = currency.toUpperCase();
1705
1777
  const locale = resolveCurrencyLocale(currencyCode, options?.locale);
1706
1778
  try {
@@ -1708,17 +1780,13 @@ function formatCurrencyAmount(amountCents, currency, options) {
1708
1780
  style: "currency",
1709
1781
  currency: currencyCode
1710
1782
  });
1711
- const fractionDigits = options?.decimals === "auto" ? {
1712
- minimumFractionDigits: 0,
1713
- maximumFractionDigits: exactFormatter.resolvedOptions().maximumFractionDigits
1714
- } : {};
1715
1783
  return new Intl.NumberFormat(locale, {
1716
1784
  style: "currency",
1717
1785
  currency: currencyCode,
1718
- ...fractionDigits
1719
- }).format(amountCents / 100);
1786
+ ...fractionDigitsFor(options?.decimals ?? "exact", exactFormatter)
1787
+ }).format(amount);
1720
1788
  } catch {
1721
- return `${(amountCents / 100).toFixed(2)} ${currencyCode}`;
1789
+ return `${amount.toFixed(2)} ${currencyCode}`;
1722
1790
  }
1723
1791
  }
1724
1792
  //#endregion
@@ -2327,17 +2395,35 @@ function parseMailingListRuntimeContext(value) {
2327
2395
  if (!isRecord$8(value)) return invalidRuntimeContext();
2328
2396
  if (value.tag === "not_configured") return ok({ tag: "not_configured" });
2329
2397
  if (value.tag !== "configured") return invalidRuntimeContext();
2398
+ return parseConfiguredRuntimeContext(value);
2399
+ }
2400
+ function parseConfiguredRuntimeContext(value) {
2330
2401
  const revision = parseMailingListSetupRevision(value.revision);
2331
2402
  const form = parseMailingListGlobalForm(value.form);
2332
2403
  const provider = parseRuntimeProvider(value.provider);
2333
- if (revision === null || !form.ok || provider === null) return invalidRuntimeContext();
2404
+ const bookingSignup = parseBookingSignupOffer(value.bookingSignup);
2405
+ if (revision === null || !form.ok || provider === null || bookingSignup === null) return invalidRuntimeContext();
2334
2406
  return ok({
2335
2407
  tag: "configured",
2336
2408
  revision,
2409
+ bookingSignup,
2337
2410
  form: form.value,
2338
2411
  provider
2339
2412
  });
2340
2413
  }
2414
+ function parseBookingSignupOffer(value) {
2415
+ if (value === void 0) return {
2416
+ tag: "unavailable",
2417
+ reason: "disabled"
2418
+ };
2419
+ if (!isRecord$8(value)) return null;
2420
+ if (value.tag === "offered") return { tag: "offered" };
2421
+ if (value.tag === "unavailable" && (value.reason === "disabled" || value.reason === "fields" || value.reason === "destination")) return {
2422
+ tag: "unavailable",
2423
+ reason: value.reason
2424
+ };
2425
+ return null;
2426
+ }
2341
2427
  function parseRuntimeProvider(value) {
2342
2428
  if (!isRecord$8(value)) return null;
2343
2429
  switch (value.provider) {
@@ -3372,28 +3458,6 @@ const EVENT_MANAGEMENT_ENDPOINT_DEFINITIONS = defineEndpointDefinitions({
3372
3458
  "resource:conflict",
3373
3459
  "server:internal_error"
3374
3460
  ]
3375
- },
3376
- /**
3377
- * The Content tab's one write: the short introduction, image and
3378
- * description of an event's page, published without its layout.
3379
- */
3380
- saveEventPageWords: {
3381
- path: "/sites/{siteId}/page-surfaces/{pageSurfaceId}/words",
3382
- method: "PUT",
3383
- tags: [
3384
- TAG_TEMPLATES.siteCollection,
3385
- TAG_TEMPLATES.siteRoutableContent,
3386
- TAG_TEMPLATES.pageSurfaceById
3387
- ],
3388
- auth: "user",
3389
- responseKind: "json",
3390
- errors: [
3391
- "auth:forbidden",
3392
- "validation:invalid_input",
3393
- "resource:not_found",
3394
- "resource:conflict",
3395
- "server:internal_error"
3396
- ]
3397
3461
  }
3398
3462
  });
3399
3463
  //#endregion
@@ -3818,6 +3882,15 @@ const BILLING_ENDPOINT_DEFINITIONS = defineEndpointDefinitions({
3818
3882
  auth: "user",
3819
3883
  responseKind: "json"
3820
3884
  },
3885
+ /** Continue on Free from the onboarding card page; only the attempt's owner. */
3886
+ continueOnboardingOnFree: {
3887
+ path: "/onboarding/attempts/{attemptToken}/plan/free",
3888
+ method: "POST",
3889
+ tags: ["billing"],
3890
+ auth: "user",
3891
+ errors: [],
3892
+ responseKind: "json"
3893
+ },
3821
3894
  createBillingPortalSession: {
3822
3895
  path: "/billing/portal/session",
3823
3896
  method: "POST",
@@ -3827,6 +3900,209 @@ const BILLING_ENDPOINT_DEFINITIONS = defineEndpointDefinitions({
3827
3900
  }
3828
3901
  });
3829
3902
  //#endregion
3903
+ //#region ../api/src/editLeaseEndpoints.ts
3904
+ const path = "/sites/{siteId}/edit-leases/{nodeType}/{nodeId}";
3905
+ const lifecycleErrors = [
3906
+ "auth:lease_required",
3907
+ "auth:forbidden",
3908
+ "resource:not_found",
3909
+ "validation:invalid_input",
3910
+ "server:internal_error"
3911
+ ];
3912
+ const EDIT_LEASE_ENDPOINT_DEFINITIONS = {
3913
+ readEditLease: {
3914
+ path,
3915
+ method: "GET",
3916
+ editLease: "lifecycle",
3917
+ errors: lifecycleErrors,
3918
+ auth: "user",
3919
+ responseKind: "json"
3920
+ },
3921
+ acquireEditLease: {
3922
+ path,
3923
+ method: "POST",
3924
+ editLease: "lifecycle",
3925
+ errors: lifecycleErrors,
3926
+ auth: "user",
3927
+ responseKind: "json"
3928
+ },
3929
+ takeOverEditLease: {
3930
+ path,
3931
+ method: "PUT",
3932
+ editLease: "lifecycle",
3933
+ errors: lifecycleErrors,
3934
+ auth: "user",
3935
+ responseKind: "json"
3936
+ },
3937
+ heartbeatEditLease: {
3938
+ path,
3939
+ method: "PATCH",
3940
+ editLease: "lifecycle",
3941
+ errors: [...lifecycleErrors, "auth:lease_lost"],
3942
+ auth: "user",
3943
+ responseKind: "json"
3944
+ },
3945
+ releaseEditLease: {
3946
+ path,
3947
+ method: "DELETE",
3948
+ editLease: "lifecycle",
3949
+ errors: lifecycleErrors,
3950
+ auth: "user",
3951
+ responseKind: "json"
3952
+ }
3953
+ };
3954
+ //#endregion
3955
+ //#region ../api/src/pageSurfaceEditorEndpoints.ts
3956
+ const surfaceTags = [TAG_TEMPLATES.siteCollection, TAG_TEMPLATES.pageSurfaceById];
3957
+ const PAGE_SURFACE_EDITOR_ENDPOINT_DEFINITIONS = {
3958
+ getPageSurfaceEditorDocument: {
3959
+ path: "/sites/{siteId}/page-surfaces/{pageSurfaceId}/content",
3960
+ method: "GET",
3961
+ errors: [
3962
+ "auth:forbidden",
3963
+ "validation:invalid_input",
3964
+ "resource:not_found",
3965
+ "resource:conflict",
3966
+ "server:internal_error"
3967
+ ],
3968
+ tags: surfaceTags,
3969
+ auth: "user",
3970
+ responseKind: "json"
3971
+ },
3972
+ updatePageSurfaceDraftContent: {
3973
+ editLease: "managed",
3974
+ path: "/sites/{siteId}/page-surfaces/{pageSurfaceId}/content",
3975
+ method: "PUT",
3976
+ errors: [
3977
+ "validation:invalid_input",
3978
+ "resource:not_found",
3979
+ "resource:conflict",
3980
+ "server:internal_error"
3981
+ ],
3982
+ tags: surfaceTags,
3983
+ auth: "user",
3984
+ responseKind: "json"
3985
+ },
3986
+ discardPageSurfaceDraftContent: {
3987
+ editLease: "managed",
3988
+ path: "/sites/{siteId}/page-surfaces/{pageSurfaceId}/content/draft",
3989
+ method: "DELETE",
3990
+ errors: [
3991
+ "validation:invalid_input",
3992
+ "resource:not_found",
3993
+ "resource:conflict",
3994
+ "server:internal_error"
3995
+ ],
3996
+ tags: surfaceTags,
3997
+ auth: "user",
3998
+ responseKind: "json"
3999
+ },
4000
+ updatePageSurfaceRouteMetadata: {
4001
+ editLease: "managed",
4002
+ path: "/sites/{siteId}/page-surfaces/{pageSurfaceId}/metadata",
4003
+ method: "PATCH",
4004
+ errors: [
4005
+ "validation:invalid_input",
4006
+ "resource:not_found",
4007
+ "resource:conflict",
4008
+ "server:internal_error"
4009
+ ],
4010
+ tags: [
4011
+ TAG_TEMPLATES.siteCollection,
4012
+ TAG_TEMPLATES.siteRoutableContent,
4013
+ TAG_TEMPLATES.pageSurfaceById
4014
+ ],
4015
+ auth: "user",
4016
+ responseKind: "json"
4017
+ },
4018
+ publishPageSurface: {
4019
+ editLease: "managed",
4020
+ path: "/sites/{siteId}/page-surfaces/{pageSurfaceId}/publication",
4021
+ method: "POST",
4022
+ errors: [
4023
+ "auth:forbidden",
4024
+ "validation:invalid_input",
4025
+ "resource:not_found",
4026
+ "resource:conflict",
4027
+ "server:internal_error"
4028
+ ],
4029
+ tags: [
4030
+ TAG_TEMPLATES.siteCollection,
4031
+ TAG_TEMPLATES.siteRoutableContent,
4032
+ TAG_TEMPLATES.pageSurfaceById
4033
+ ],
4034
+ auth: "user",
4035
+ responseKind: "json"
4036
+ },
4037
+ saveEventContentTab: {
4038
+ editLease: "managed",
4039
+ path: "/sites/{siteId}/page-surfaces/{pageSurfaceId}/event-content",
4040
+ method: "PUT",
4041
+ errors: [
4042
+ "auth:forbidden",
4043
+ "validation:invalid_input",
4044
+ "resource:not_found",
4045
+ "resource:conflict",
4046
+ "server:internal_error"
4047
+ ],
4048
+ tags: [
4049
+ TAG_TEMPLATES.siteCollection,
4050
+ TAG_TEMPLATES.siteRoutableContent,
4051
+ TAG_TEMPLATES.pageSurfaceById
4052
+ ],
4053
+ auth: "user",
4054
+ responseKind: "json"
4055
+ }
4056
+ };
4057
+ //#endregion
4058
+ //#region ../api/src/bookingPeopleEndpointDefinitions.ts
4059
+ /**
4060
+ * People endpoints (#1356): the People list, its CSV export, and deleting a
4061
+ * person when nothing is attached to them.
4062
+ */
4063
+ const BOOKING_PEOPLE_ENDPOINT_DEFINITIONS = defineEndpointDefinitions({
4064
+ listPeople: {
4065
+ path: "/sites/{siteId}/bookings/people",
4066
+ method: "GET",
4067
+ tags: ["site-{siteId}", "customers-{siteId}"],
4068
+ auth: "user",
4069
+ responseKind: "json",
4070
+ errors: ["server:internal_error"]
4071
+ },
4072
+ exportPeopleCsv: {
4073
+ path: "/sites/{siteId}/bookings/people/export.csv",
4074
+ method: "GET",
4075
+ tags: ["site-{siteId}", "customers-{siteId}"],
4076
+ auth: "user",
4077
+ errors: [],
4078
+ responseKind: "blob"
4079
+ },
4080
+ checkPersonDeletion: {
4081
+ path: "/sites/{siteId}/bookings/people/{personId}/deletion-check",
4082
+ method: "GET",
4083
+ tags: ["site-{siteId}", "customers-{siteId}"],
4084
+ auth: "user",
4085
+ responseKind: "json",
4086
+ errors: [
4087
+ "auth:forbidden",
4088
+ "resource:not_found",
4089
+ "server:internal_error"
4090
+ ]
4091
+ },
4092
+ deletePerson: {
4093
+ path: "/sites/{siteId}/bookings/people/{personId}",
4094
+ method: "DELETE",
4095
+ tags: ["site-{siteId}", "customers-{siteId}"],
4096
+ auth: "user",
4097
+ responseKind: "json",
4098
+ errors: [
4099
+ "auth:forbidden",
4100
+ "resource:not_found",
4101
+ "server:internal_error"
4102
+ ]
4103
+ }
4104
+ });
4105
+ //#endregion
3830
4106
  //#region ../api/src/clientErrorReporting.ts
3831
4107
  const CLIENT_ERROR_REPORT_ENDPOINT_DEFINITIONS = defineEndpointDefinitions({ reportClientError: {
3832
4108
  path: "/client/error-report",
@@ -3862,6 +4138,7 @@ z.object({
3862
4138
  sourceLocation: z.string().max(CLIENT_ERROR_REPORT_LIMITS.sourceLocation).nullable()
3863
4139
  }).strict();
3864
4140
  ({
4141
+ ...SITE_LIFECYCLE_ENDPOINT_DEFINITIONS,
3865
4142
  ...CLIENT_ERROR_REPORT_ENDPOINT_DEFINITIONS,
3866
4143
  ...PUBLIC_NEWSLETTER_ENDPOINT_DEFINITIONS,
3867
4144
  ...ACCOUNT_ENDPOINT_DEFINITIONS,
@@ -3870,12 +4147,14 @@ z.object({
3870
4147
  ...GIFTING_ENDPOINT_DEFINITIONS,
3871
4148
  ...PUBLIC_READ_ENDPOINT_DEFINITIONS,
3872
4149
  ...BILLING_ENDPOINT_DEFINITIONS,
4150
+ ...EDIT_LEASE_ENDPOINT_DEFINITIONS,
4151
+ ...PAGE_SURFACE_EDITOR_ENDPOINT_DEFINITIONS,
3873
4152
  ...SITE_MANAGEMENT_ENDPOINT_DEFINITIONS
3874
4153
  }), TAG_TEMPLATES.siteCollection, TAG_TEMPLATES.siteTheme, TAG_TEMPLATES.siteCollection, { ...SITE_API_KEY_ENDPOINT_DEFINITIONS }, TAG_TEMPLATES.site, TAG_TEMPLATES.siteBookingSettings, TAG_TEMPLATES.site, TAG_TEMPLATES.siteBookingSettings, TAG_TEMPLATES.site, TAG_TEMPLATES.siteEmailSettings, TAG_TEMPLATES.site, TAG_TEMPLATES.siteEmailSettings, TAG_TEMPLATES.site, TAG_TEMPLATES.siteEmailSettings, TAG_TEMPLATES.site, TAG_TEMPLATES.siteEmailSettings, {
3875
4154
  ...NEWSLETTER_ENDPOINT_DEFINITIONS,
3876
4155
  ...APPOINTMENT_ENDPOINT_DEFINITIONS,
3877
4156
  ...EVENT_SERIES_REGISTRATION_ENDPOINT_DEFINITIONS
3878
- }, TAG_TEMPLATES.siteCollection, TAG_TEMPLATES.siteById, TAG_TEMPLATES.siteBySlug, TAG_TEMPLATES.siteByDomain, TAG_TEMPLATES.siteCollection, TAG_TEMPLATES.siteById, TAG_TEMPLATES.siteBySlug, TAG_TEMPLATES.siteByDomain, TAG_TEMPLATES.siteCollection, TAG_TEMPLATES.pageSurfaceById, TAG_TEMPLATES.siteCollection, TAG_TEMPLATES.pageSurfaceById, TAG_TEMPLATES.siteCollection, TAG_TEMPLATES.siteRoutableContent, TAG_TEMPLATES.pageSurfaceById, TAG_TEMPLATES.siteCollection, TAG_TEMPLATES.siteRoutableContent, TAG_TEMPLATES.pageSurfaceById, TAG_TEMPLATES.workflowRunById, TAG_TEMPLATES.siteCollection, TAG_TEMPLATES.siteRoutableContent, TAG_TEMPLATES.routeById, TAG_TEMPLATES.site, TAG_TEMPLATES.siteSettings, TAG_TEMPLATES.siteCollection, TAG_TEMPLATES.site, TAG_TEMPLATES.siteSettings, TAG_TEMPLATES.siteCollection, TAG_TEMPLATES.site, TAG_TEMPLATES.siteSettings, TAG_TEMPLATES.siteCollection, TAG_TEMPLATES.site, TAG_TEMPLATES.site, TAG_TEMPLATES.siteSettings, TAG_TEMPLATES.site, TAG_TEMPLATES.siteSettings, TAG_TEMPLATES.site, TAG_TEMPLATES.siteSettings, TAG_TEMPLATES.site, TAG_TEMPLATES.siteSettings, TAG_TEMPLATES.site, TAG_TEMPLATES.siteSettings, TAG_TEMPLATES.site, TAG_TEMPLATES.siteSettings, TAG_TEMPLATES.site, TAG_TEMPLATES.siteSettings, TAG_TEMPLATES.site, TAG_TEMPLATES.siteSettings, TAG_TEMPLATES.site, TAG_TEMPLATES.siteSettings, TAG_TEMPLATES.site, TAG_TEMPLATES.siteSettings, TAG_TEMPLATES.site, TAG_TEMPLATES.siteSettings, TAG_TEMPLATES.site, TAG_TEMPLATES.siteSettings, TAG_TEMPLATES.site, TAG_TEMPLATES.siteSettings, TAG_TEMPLATES.site, TAG_TEMPLATES.siteSettings, TAG_TEMPLATES.site, TAG_TEMPLATES.siteSettings, TAG_TEMPLATES.site, TAG_TEMPLATES.siteSettings, TAG_TEMPLATES.site, TAG_TEMPLATES.siteSettings, TAG_TEMPLATES.site, TAG_TEMPLATES.siteSettings, TAG_TEMPLATES.site, TAG_TEMPLATES.siteSettings, TAG_TEMPLATES.site, TAG_TEMPLATES.siteSettings, TAG_TEMPLATES.site, TAG_TEMPLATES.siteSettings, TAG_TEMPLATES.site, TAG_TEMPLATES.siteSettings, TAG_TEMPLATES.site, TAG_TEMPLATES.siteSettings, TAG_TEMPLATES.site, TAG_TEMPLATES.siteSettings, TAG_TEMPLATES.site, TAG_TEMPLATES.siteSettings, TAG_TEMPLATES.site, TAG_TEMPLATES.siteSettings, TAG_TEMPLATES.siteCollection, TAG_TEMPLATES.siteNavigation, TAG_TEMPLATES.siteCollection, TAG_TEMPLATES.siteNavigation, TAG_TEMPLATES.navigationMenuById, TAG_TEMPLATES.siteCollection, TAG_TEMPLATES.siteNavigation, TAG_TEMPLATES.navigationMenuById, TAG_TEMPLATES.siteCollection, TAG_TEMPLATES.siteNavigation, TAG_TEMPLATES.navigationMenuById, TAG_TEMPLATES.navigationItemById, TAG_TEMPLATES.siteCollection, TAG_TEMPLATES.siteNavigation, TAG_TEMPLATES.navigationMenuById, TAG_TEMPLATES.navigationItemById, TAG_TEMPLATES.siteCollection, TAG_TEMPLATES.siteNavigation, TAG_TEMPLATES.navigationMenuById, TAG_TEMPLATES.siteRoutableContent, TAG_TEMPLATES.siteRoutableContent, TAG_TEMPLATES.siteRoutableContent, TAG_TEMPLATES.siteSettings, TAG_TEMPLATES.publicEvents, TAG_TEMPLATES.publicBookingServices, TAG_TEMPLATES.siteCollection, TAG_TEMPLATES.siteTheme, TAG_TEMPLATES.siteCollection, TAG_TEMPLATES.siteTheme, TAG_TEMPLATES.siteCollection, TAG_TEMPLATES.siteTheme, TAG_TEMPLATES.siteCollection, TAG_TEMPLATES.pageSurfaceById, TAG_TEMPLATES.siteCollection, TAG_TEMPLATES.pageSurfaceById, TAG_TEMPLATES.siteCollection, TAG_TEMPLATES.pageSurfaceById, TAG_TEMPLATES.siteCollection, TAG_TEMPLATES.pageSurfaceById, TAG_TEMPLATES.siteRoutableContent, TAG_TEMPLATES.pageById, TAG_TEMPLATES.siteRoutableContent, TAG_TEMPLATES.pageById, TAG_TEMPLATES.siteRoutableContent, TAG_TEMPLATES.pageById, TAG_TEMPLATES.siteRoutableContent, TAG_TEMPLATES.pageById, TAG_TEMPLATES.siteRoutableContent, TAG_TEMPLATES.pageById, TAG_TEMPLATES.siteRoutableContent, TAG_TEMPLATES.pageById, TAG_TEMPLATES.siteRoutableContent, TAG_TEMPLATES.pageById, TAG_TEMPLATES.siteRoutableContent, TAG_TEMPLATES.pageById, TAG_TEMPLATES.siteRoutableContent, TAG_TEMPLATES.pageById, TAG_TEMPLATES.siteRoutableContent, TAG_TEMPLATES.siteRoutableContent, TAG_TEMPLATES.siteRedirects, TAG_TEMPLATES.siteRouteOutcomes, TAG_TEMPLATES.siteRoutableContent, TAG_TEMPLATES.siteRedirects, TAG_TEMPLATES.siteRouteOutcomes, TAG_TEMPLATES.siteRoutableContent, TAG_TEMPLATES.siteForms, TAG_TEMPLATES.siteForms, TAG_TEMPLATES.siteForms, TAG_TEMPLATES.siteForms, TAG_TEMPLATES.siteForms, TAG_TEMPLATES.siteForms, TAG_TEMPLATES.formSubmissionsBySlug, TAG_TEMPLATES.siteForms, TAG_TEMPLATES.formSubmissionsBySlug, TAG_TEMPLATES.siteForms, TAG_TEMPLATES.formSubmissionsBySlug, TAG_TEMPLATES.siteForms, { ...PUBLIC_BOOKING_AVAILABILITY_ENDPOINT_DEFINITIONS }, TAG_TEMPLATES.publicEventFilters, TAG_TEMPLATES.publicEvents, TAG_TEMPLATES.publicShop, TAG_TEMPLATES.publicCheckout, TAG_TEMPLATES.siteRoutableContent, { ...PUBLIC_EVENT_CHECKOUT_ENDPOINT_DEFINITIONS }, TAG_TEMPLATES.publicEvents, TAG_TEMPLATES.publicEvents, { ...EVENT_MANAGEMENT_ENDPOINT_DEFINITIONS }, { ...SDK_MEDIA_ENDPOINT_DEFINITIONS }, { ...SDK_ENDPOINT_DEFINITIONS }, { ...SDK_PAGE_DESIGN_ENDPOINT_DEFINITIONS }, { ...SDK_EVENT_ENDPOINT_DEFINITIONS }, { ...SDK_ENTRY_READ_ENDPOINTS };
4157
+ }, TAG_TEMPLATES.siteCollection, TAG_TEMPLATES.siteById, TAG_TEMPLATES.siteBySlug, TAG_TEMPLATES.siteByDomain, TAG_TEMPLATES.siteCollection, TAG_TEMPLATES.siteById, TAG_TEMPLATES.siteBySlug, TAG_TEMPLATES.siteByDomain, TAG_TEMPLATES.workflowRunById, TAG_TEMPLATES.siteCollection, TAG_TEMPLATES.siteRoutableContent, TAG_TEMPLATES.routeById, TAG_TEMPLATES.site, TAG_TEMPLATES.siteSettings, TAG_TEMPLATES.siteCollection, TAG_TEMPLATES.site, TAG_TEMPLATES.siteSettings, TAG_TEMPLATES.siteCollection, TAG_TEMPLATES.site, TAG_TEMPLATES.siteSettings, TAG_TEMPLATES.siteCollection, TAG_TEMPLATES.site, TAG_TEMPLATES.site, TAG_TEMPLATES.siteSettings, TAG_TEMPLATES.site, TAG_TEMPLATES.siteSettings, TAG_TEMPLATES.site, TAG_TEMPLATES.siteSettings, TAG_TEMPLATES.site, TAG_TEMPLATES.siteSettings, TAG_TEMPLATES.site, TAG_TEMPLATES.siteSettings, TAG_TEMPLATES.site, TAG_TEMPLATES.siteSettings, TAG_TEMPLATES.site, TAG_TEMPLATES.siteSettings, TAG_TEMPLATES.site, TAG_TEMPLATES.siteSettings, TAG_TEMPLATES.site, TAG_TEMPLATES.siteSettings, TAG_TEMPLATES.site, TAG_TEMPLATES.siteSettings, TAG_TEMPLATES.site, TAG_TEMPLATES.siteSettings, TAG_TEMPLATES.site, TAG_TEMPLATES.siteSettings, TAG_TEMPLATES.site, TAG_TEMPLATES.siteSettings, TAG_TEMPLATES.site, TAG_TEMPLATES.siteSettings, TAG_TEMPLATES.site, TAG_TEMPLATES.siteSettings, TAG_TEMPLATES.site, TAG_TEMPLATES.siteSettings, TAG_TEMPLATES.site, TAG_TEMPLATES.siteSettings, TAG_TEMPLATES.site, TAG_TEMPLATES.siteSettings, TAG_TEMPLATES.site, TAG_TEMPLATES.siteSettings, TAG_TEMPLATES.site, TAG_TEMPLATES.siteSettings, TAG_TEMPLATES.site, TAG_TEMPLATES.siteSettings, TAG_TEMPLATES.site, TAG_TEMPLATES.siteSettings, TAG_TEMPLATES.site, TAG_TEMPLATES.siteSettings, TAG_TEMPLATES.site, TAG_TEMPLATES.siteSettings, TAG_TEMPLATES.site, TAG_TEMPLATES.siteSettings, TAG_TEMPLATES.site, TAG_TEMPLATES.siteSettings, TAG_TEMPLATES.siteCollection, TAG_TEMPLATES.siteNavigation, TAG_TEMPLATES.siteCollection, TAG_TEMPLATES.siteNavigation, TAG_TEMPLATES.navigationMenuById, TAG_TEMPLATES.siteCollection, TAG_TEMPLATES.siteNavigation, TAG_TEMPLATES.navigationMenuById, TAG_TEMPLATES.siteCollection, TAG_TEMPLATES.siteNavigation, TAG_TEMPLATES.navigationMenuById, TAG_TEMPLATES.navigationItemById, TAG_TEMPLATES.siteCollection, TAG_TEMPLATES.siteNavigation, TAG_TEMPLATES.navigationMenuById, TAG_TEMPLATES.navigationItemById, TAG_TEMPLATES.siteCollection, TAG_TEMPLATES.siteNavigation, TAG_TEMPLATES.navigationMenuById, TAG_TEMPLATES.siteRoutableContent, TAG_TEMPLATES.siteRoutableContent, TAG_TEMPLATES.siteRoutableContent, TAG_TEMPLATES.siteSettings, TAG_TEMPLATES.publicEvents, TAG_TEMPLATES.publicBookingServices, TAG_TEMPLATES.siteCollection, TAG_TEMPLATES.siteTheme, TAG_TEMPLATES.siteCollection, TAG_TEMPLATES.siteTheme, TAG_TEMPLATES.siteCollection, TAG_TEMPLATES.siteTheme, TAG_TEMPLATES.siteCollection, TAG_TEMPLATES.pageSurfaceById, TAG_TEMPLATES.siteCollection, TAG_TEMPLATES.pageSurfaceById, TAG_TEMPLATES.siteCollection, TAG_TEMPLATES.pageSurfaceById, TAG_TEMPLATES.siteCollection, TAG_TEMPLATES.pageSurfaceById, TAG_TEMPLATES.siteRoutableContent, TAG_TEMPLATES.pageById, TAG_TEMPLATES.siteRoutableContent, TAG_TEMPLATES.pageById, TAG_TEMPLATES.siteRoutableContent, TAG_TEMPLATES.pageById, TAG_TEMPLATES.siteRoutableContent, TAG_TEMPLATES.pageById, TAG_TEMPLATES.siteRoutableContent, TAG_TEMPLATES.pageById, TAG_TEMPLATES.siteRoutableContent, TAG_TEMPLATES.pageById, TAG_TEMPLATES.siteRoutableContent, TAG_TEMPLATES.pageById, TAG_TEMPLATES.siteRoutableContent, TAG_TEMPLATES.pageById, TAG_TEMPLATES.siteRoutableContent, TAG_TEMPLATES.pageById, TAG_TEMPLATES.siteRoutableContent, TAG_TEMPLATES.siteRoutableContent, TAG_TEMPLATES.siteRedirects, TAG_TEMPLATES.siteRouteOutcomes, TAG_TEMPLATES.siteRoutableContent, TAG_TEMPLATES.siteRedirects, TAG_TEMPLATES.siteRouteOutcomes, TAG_TEMPLATES.siteRoutableContent, TAG_TEMPLATES.siteForms, TAG_TEMPLATES.siteForms, TAG_TEMPLATES.siteForms, TAG_TEMPLATES.siteForms, TAG_TEMPLATES.siteForms, TAG_TEMPLATES.siteForms, TAG_TEMPLATES.formSubmissionsBySlug, TAG_TEMPLATES.siteForms, TAG_TEMPLATES.formSubmissionsBySlug, TAG_TEMPLATES.siteForms, TAG_TEMPLATES.formSubmissionsBySlug, TAG_TEMPLATES.siteForms, { ...PUBLIC_BOOKING_AVAILABILITY_ENDPOINT_DEFINITIONS }, TAG_TEMPLATES.publicEventFilters, TAG_TEMPLATES.publicEvents, TAG_TEMPLATES.publicShop, TAG_TEMPLATES.publicCheckout, TAG_TEMPLATES.siteRoutableContent, { ...PUBLIC_EVENT_CHECKOUT_ENDPOINT_DEFINITIONS }, TAG_TEMPLATES.publicEvents, TAG_TEMPLATES.publicEvents, { ...EVENT_MANAGEMENT_ENDPOINT_DEFINITIONS }, { ...BOOKING_PEOPLE_ENDPOINT_DEFINITIONS }, { ...SDK_MEDIA_ENDPOINT_DEFINITIONS }, { ...SDK_ENDPOINT_DEFINITIONS }, { ...SDK_PAGE_DESIGN_ENDPOINT_DEFINITIONS }, { ...SDK_EVENT_ENDPOINT_DEFINITIONS }, { ...SDK_ENTRY_READ_ENDPOINTS };
3879
4158
  z.object({ refreshToken: z.string().min(1).max(4096) }).strict();
3880
4159
  z.object({
3881
4160
  accessToken: z.string().min(1).max(4096),
@@ -6376,13 +6655,16 @@ const SURFACE_FOREGROUND_CSS_VARS = {
6376
6655
  text: "--rb-surface-text-color",
6377
6656
  heading: "--rb-surface-heading-color",
6378
6657
  link: "--rb-surface-link-color",
6658
+ linkHover: "--rb-surface-link-hover-color",
6379
6659
  supporting: "--rb-surface-supporting-color"
6380
6660
  };
6381
6661
  const DEFAULT_SURFACE_TEXT_COLOR = "rgb(var(--tb-text, 17 24 39))";
6662
+ const DEFAULT_SURFACE_LINK_COLOR = "rgb(var(--tb-primary, var(--tb-text, 17 24 39)))";
6382
6663
  const DEFAULT_ROLE_FALLBACKS = {
6383
6664
  text: DEFAULT_SURFACE_TEXT_COLOR,
6384
6665
  heading: DEFAULT_SURFACE_TEXT_COLOR,
6385
- link: "rgb(var(--tb-primary, var(--tb-text, 17 24 39)))",
6666
+ link: DEFAULT_SURFACE_LINK_COLOR,
6667
+ linkHover: DEFAULT_SURFACE_LINK_COLOR,
6386
6668
  supporting: "rgb(var(--tb-mutedText, 100 116 139))"
6387
6669
  };
6388
6670
  function requireSurfaceColorValue(role, value) {
@@ -6392,10 +6674,12 @@ function requireSurfaceColorValue(role, value) {
6392
6674
  }
6393
6675
  function completeSurfaceForegrounds(input) {
6394
6676
  const text = requireSurfaceColorValue("text", input.text);
6677
+ const link = input.link === void 0 ? text : requireSurfaceColorValue("link", input.link);
6395
6678
  return {
6396
6679
  text,
6397
6680
  heading: input.heading === void 0 ? text : requireSurfaceColorValue("heading", input.heading),
6398
- link: input.link === void 0 ? text : requireSurfaceColorValue("link", input.link),
6681
+ link,
6682
+ linkHover: input.linkHover === void 0 ? link : requireSurfaceColorValue("linkHover", input.linkHover),
6399
6683
  supporting: input.supporting === void 0 ? text : requireSurfaceColorValue("supporting", input.supporting)
6400
6684
  };
6401
6685
  }
@@ -6403,6 +6687,7 @@ function surfaceForegroundValue(role, outsideProviderFallback = DEFAULT_ROLE_FAL
6403
6687
  const roleVariable = SURFACE_FOREGROUND_CSS_VARS[role];
6404
6688
  const fallback = requireSurfaceColorValue("fallback", outsideProviderFallback);
6405
6689
  if (role === "text") return `var(${roleVariable}, ${fallback})`;
6690
+ if (role === "linkHover") return `var(${roleVariable}, ${surfaceForegroundValue("link", fallback)})`;
6406
6691
  return `var(${roleVariable}, var(${SURFACE_FOREGROUND_CSS_VARS.text}, ${fallback}))`;
6407
6692
  }
6408
6693
  function surfaceForegroundValueWithOpacity(role, opacityPercent) {
@@ -6416,9 +6701,25 @@ function surfaceForegroundStyle(input) {
6416
6701
  [SURFACE_FOREGROUND_CSS_VARS.text]: foregrounds.text,
6417
6702
  [SURFACE_FOREGROUND_CSS_VARS.heading]: foregrounds.heading,
6418
6703
  [SURFACE_FOREGROUND_CSS_VARS.link]: foregrounds.link,
6419
- [SURFACE_FOREGROUND_CSS_VARS.supporting]: foregrounds.supporting
6704
+ [SURFACE_FOREGROUND_CSS_VARS.linkHover]: foregrounds.linkHover,
6705
+ [SURFACE_FOREGROUND_CSS_VARS.supporting]: foregrounds.supporting,
6706
+ "--rb-surface-link-hover-decoration": hoverDecoration(input)
6707
+ };
6708
+ }
6709
+ function surfaceForegroundInputFromResolved(foreground, color) {
6710
+ const { roles } = foreground;
6711
+ return {
6712
+ text: color(roles.text),
6713
+ heading: color(roles.heading),
6714
+ link: color(roles.link),
6715
+ linkHover: color(roles.linkHover),
6716
+ supporting: color(roles.supporting),
6717
+ hoverDecoration: foreground.hoverDecoration
6420
6718
  };
6421
6719
  }
6720
+ function hoverDecoration(input) {
6721
+ return input.hoverDecoration ?? "underline";
6722
+ }
6422
6723
  //#endregion
6423
6724
  //#region ../theme-core/src/buttons/constants.ts
6424
6725
  /**
@@ -7173,6 +7474,64 @@ function parseAlpha(source) {
7173
7474
  function isRgbChannel(value) {
7174
7475
  return Number.isFinite(value) && value >= 0 && value <= 255;
7175
7476
  }
7477
+ /**
7478
+ * Derive the hover foreground that belongs with a resolved resting foreground.
7479
+ *
7480
+ * A resting foreground is chosen to be legible against a known surface. A hover
7481
+ * state derived from it stays within a bounded distance of that colour, so it
7482
+ * inherits most of the resting colour's contrast margin instead of asserting
7483
+ * an unrelated brand colour that no one checked against the surface.
7484
+ *
7485
+ * That bounded-distance property is what lets this be used on a transparent
7486
+ * overlay header, where the backdrop is only partly knowable: the scrolled
7487
+ * state composites a 60% glass tint over arbitrary page content, so no
7488
+ * compile-time contrast proof is available there. Staying near a colour that
7489
+ * is already trusted in both states is a weaker claim than a contrast proof,
7490
+ * and it is one this function can actually keep.
7491
+ *
7492
+ * Returns `null` when the resting token is not a plain palette token — an
7493
+ * already-faded or raw value has no well-defined softening, and the caller
7494
+ * should leave hover alone rather than guess.
7495
+ */
7496
+ function deriveForegroundHoverToken(restingToken) {
7497
+ const parts = parseColorTokenParts(restingToken);
7498
+ if (parts.kind !== "token") return null;
7499
+ if (parts.opacityPercent !== null) return null;
7500
+ return parseThemeColorToken(`${parts.token}/85`);
7501
+ }
7502
+ /**
7503
+ * Prefer an authored hover that survives every measured backdrop, then a
7504
+ * checked softening of the resting colour. A null backdrop set represents a
7505
+ * trusted treatment: only an explicit authored hover may change the colour.
7506
+ * When neither option works, retain the resting colour and underline it.
7507
+ */
7508
+ function planForegroundHover(input) {
7509
+ const { restingToken, candidate, palette, backdrops } = input;
7510
+ if (candidate && candidate !== restingToken) {
7511
+ if (backdrops === null || survivesEveryBackdrop(candidate, palette, backdrops)) return {
7512
+ kind: "candidate",
7513
+ token: candidate,
7514
+ decoration: "initial"
7515
+ };
7516
+ }
7517
+ const softened = deriveForegroundHoverToken(restingToken);
7518
+ if (softened && backdrops && survivesEveryBackdrop(softened, palette, backdrops)) return {
7519
+ kind: "softened",
7520
+ token: softened,
7521
+ decoration: "initial"
7522
+ };
7523
+ return {
7524
+ kind: "resting",
7525
+ token: restingToken,
7526
+ decoration: "underline"
7527
+ };
7528
+ }
7529
+ function survivesEveryBackdrop(token, palette, backdrops) {
7530
+ return backdrops.length > 0 && backdrops.every((backdrop) => {
7531
+ const foreground = resolveOpaqueSurfaceHex(token, palette, backdrop);
7532
+ return foreground !== null && contrastRatio(foreground, backdrop) >= 4.5;
7533
+ });
7534
+ }
7176
7535
  //#endregion
7177
7536
  //#region ../theme-core/src/surfaces/resolveSurfaceForeground.ts
7178
7537
  const FALLBACK_TEXT_TOKENS = [
@@ -7219,12 +7578,16 @@ function resolveSurfaceForeground(background, palette, candidates = {}, options
7219
7578
  }
7220
7579
  function foregroundCandidates(background, overrides) {
7221
7580
  return {
7222
- text: overrides.text ?? background?.textColor ?? null,
7223
- heading: overrides.heading ?? background?.headingColor ?? null,
7224
- link: overrides.link ?? background?.linkColor ?? null,
7225
- supporting: overrides.supporting ?? background?.supportingColor ?? null
7581
+ text: candidateOrBackground(overrides.text, background?.textColor),
7582
+ heading: candidateOrBackground(overrides.heading, background?.headingColor),
7583
+ link: candidateOrBackground(overrides.link, background?.linkColor),
7584
+ linkHover: candidateOrBackground(overrides.linkHover),
7585
+ supporting: candidateOrBackground(overrides.supporting, background?.supportingColor)
7226
7586
  };
7227
7587
  }
7588
+ function candidateOrBackground(candidate, backgroundValue) {
7589
+ return candidate ?? backgroundValue ?? null;
7590
+ }
7228
7591
  function resolveDeterministicForeground(backgroundReference, candidates, palette, compositeBase) {
7229
7592
  const backgroundHex = resolveOpaqueSurfaceHex(backgroundReference, palette, compositeBase);
7230
7593
  if (!backgroundHex) return resolveTrustedTreatmentForeground(candidates, palette);
@@ -7236,29 +7599,51 @@ function resolveDeterministicForeground(backgroundReference, candidates, palette
7236
7599
  ...FALLBACK_TEXT_TOKENS
7237
7600
  ], backgroundHex, palette, derivedOnToken ? [derivedOnToken] : []);
7238
7601
  if (!text) return { kind: "unknown" };
7239
- return {
7240
- kind: "known",
7241
- roles: {
7242
- text,
7243
- heading: safeTokenOr(candidates.heading, text, backgroundHex, palette),
7244
- link: safeTokenOr(candidates.link, text, backgroundHex, palette),
7245
- supporting: safeTokenOr(candidates.supporting, text, backgroundHex, palette)
7246
- }
7247
- };
7602
+ return knownForeground({
7603
+ text,
7604
+ heading: safeTokenOr(candidates.heading, text, backgroundHex, palette),
7605
+ link: safeTokenOr(candidates.link, text, backgroundHex, palette),
7606
+ supporting: safeTokenOr(candidates.supporting, text, backgroundHex, palette)
7607
+ }, {
7608
+ kind: "measured",
7609
+ backdropHex: backgroundHex
7610
+ }, candidates.linkHover, palette);
7248
7611
  }
7249
7612
  function resolveTrustedTreatmentForeground(candidates, palette) {
7250
7613
  const text = canonicalToken(candidates.text, palette);
7251
7614
  if (!text) return { kind: "unknown" };
7615
+ return knownForeground({
7616
+ text,
7617
+ heading: canonicalToken(candidates.heading, palette) ?? text,
7618
+ link: canonicalToken(candidates.link, palette) ?? text,
7619
+ supporting: canonicalToken(candidates.supporting, palette) ?? text
7620
+ }, { kind: "trusted-treatment" }, candidates.linkHover, palette);
7621
+ }
7622
+ function knownForeground(roles, provenance, hoverCandidate, palette) {
7623
+ const hover = planForegroundHover({
7624
+ restingToken: roles.link,
7625
+ candidate: canonicalHoverToken(hoverCandidate, palette),
7626
+ palette,
7627
+ backdrops: provenance.kind === "measured" ? [provenance.backdropHex] : null
7628
+ });
7252
7629
  return {
7253
7630
  kind: "known",
7631
+ provenance,
7254
7632
  roles: {
7255
- text,
7256
- heading: canonicalToken(candidates.heading, palette) ?? text,
7257
- link: canonicalToken(candidates.link, palette) ?? text,
7258
- supporting: canonicalToken(candidates.supporting, palette) ?? text
7259
- }
7633
+ ...roles,
7634
+ linkHover: hover.token
7635
+ },
7636
+ hoverDecoration: hover.decoration
7260
7637
  };
7261
7638
  }
7639
+ function canonicalHoverToken(reference, palette) {
7640
+ const token = parseThemeColorToken(reference);
7641
+ if (token) {
7642
+ const parts = parseColorTokenParts(token);
7643
+ if (parts.kind === "token" && resolveConcreteColorHex(parts.token, palette)) return token;
7644
+ }
7645
+ return canonicalToken(reference, palette);
7646
+ }
7262
7647
  function safeTokenOr(candidate, fallback, backgroundHex, palette) {
7263
7648
  return firstSafeToken([candidate], backgroundHex, palette) ?? fallback;
7264
7649
  }
@@ -10198,6 +10583,43 @@ const effectCompositionSchema = z.object({
10198
10583
  /** Effects applied on focus */
10199
10584
  focus: z.array(effectApplicationSchema).optional()
10200
10585
  });
10586
+ const policiesById = {
10587
+ "darken-background": "other",
10588
+ "lighten-background": "other",
10589
+ "fade-background": "other",
10590
+ "opacity-reduce": "other",
10591
+ "animated-gradient": "other",
10592
+ "background-on-hover": "paired-hover",
10593
+ "background-on-hover-alpha": "paired-hover",
10594
+ "border-glow": "other",
10595
+ "drop-shadow": "other",
10596
+ "inner-shadow": "other",
10597
+ "neumorphic-shadow": "other",
10598
+ "outer-glow": "other",
10599
+ "retro-3d-shadow": "other",
10600
+ "scale-up": "other",
10601
+ "scale-down": "other",
10602
+ lift: "other",
10603
+ "press-down": "other",
10604
+ pop: "other",
10605
+ "aurora-glow": "other",
10606
+ "cosmic-stardust": "other",
10607
+ "gradient-border-fill": "other",
10608
+ "animated-gradient-border-fill": "other",
10609
+ "border-bottom-grow": "other",
10610
+ "gradient-text": "other",
10611
+ "text-color-change": "text-colour",
10612
+ "border-color-change": "other",
10613
+ "sketchy-border": "other",
10614
+ "pulse-animation": "other",
10615
+ "nav-underline": "underline",
10616
+ "nav-frosted-base": "other",
10617
+ "nav-frosted-hover": "other",
10618
+ "nav-frosted-active": "other"
10619
+ };
10620
+ function navEffectPolicy(effectId) {
10621
+ return policiesById[effectId] ?? null;
10622
+ }
10201
10623
  //#endregion
10202
10624
  //#region ../theme-core/src/navigation/types.ts
10203
10625
  /**
@@ -10286,6 +10708,16 @@ const navLinkStyleSchema = z.object({
10286
10708
  /** Composable effects */
10287
10709
  effects: effectCompositionSchema.optional()
10288
10710
  });
10711
+ function navLinkHoverColorCandidate(style) {
10712
+ const effect = style?.effects?.hover?.find((item) => navEffectPolicy(item.effectId) === "text-colour");
10713
+ return parseThemeColorToken(effect?.options?.hoverColorToken ?? style?.hoverColorToken);
10714
+ }
10715
+ function navLinkOwnsHoverForeground(style) {
10716
+ return style?.effects?.hover?.some((effect) => navEffectPolicy(effect.effectId) === "paired-hover") ?? false;
10717
+ }
10718
+ function navLinkOwnsUnderline(style) {
10719
+ return style?.effects?.hover?.some((effect) => navEffectPolicy(effect.effectId) === "underline") ?? false;
10720
+ }
10289
10721
  //#endregion
10290
10722
  //#region ../theme-core/src/customCss/validation.ts
10291
10723
  /**
@@ -16474,6 +16906,14 @@ const blockDesignFallback = {
16474
16906
  };
16475
16907
  blockDesignFallback.sectionSurface, blockDesignFallback.contentFrame, blockDesignFallback.sectionHeight, blockDesignFallback.heroLegibility, blockDesignFallback.imageSurfaceTreatment, blockDesignFallback.imageSurfaceMotion, blockDesignFallback.tileTreatment, blockDesignFallback.eventListTreatment, blockDesignFallback.eyebrowTreatment, blockDesignFallback.accordionIconTreatment, blockDesignFallback.composition;
16476
16908
  //#endregion
16909
+ //#region ../theme-core/src/header/rootPaint.ts
16910
+ /** The nav container takes precedence when a floating header also has one. */
16911
+ function headerRootPaint(header) {
16912
+ const navContainerType = header?.navContainer?.type ?? "none";
16913
+ if (navContainerType === "glass" || navContainerType === "pill") return "contained-nav";
16914
+ return header?.variant === "floating" ? "overlay" : "own-surface";
16915
+ }
16916
+ //#endregion
16477
16917
  //#region ../theme-core/src/site-styles/siteChromeBackgrounds.ts
16478
16918
  const siteChromeBackgroundColorTokens = toSiteChromeBackgroundColorTokens(backgroundAppearanceColorTokenNames);
16479
16919
  const quickSiteChromeBackgroundColorTokens = toSiteChromeBackgroundColorTokens(backgroundAppearanceQuickColorTokenNames);
@@ -16653,6 +17093,259 @@ z.object(headerPreferencesShape).omit({
16653
17093
  structure: true
16654
17094
  }).strict();
16655
17095
  //#endregion
17096
+ //#region ../theme-core/src/navigation/presets.ts
17097
+ /**
17098
+ * Built-in nav link style presets
17099
+ *
17100
+ * Each preset uses composable effects to achieve its look.
17101
+ */
17102
+ const NAV_LINK_PRESETS = {
17103
+ /**
17104
+ * Minimal - subtle color change on hover
17105
+ */
17106
+ minimal: {
17107
+ name: "Minimal",
17108
+ typography: "body",
17109
+ fontWeight: "medium",
17110
+ textTransform: "none",
17111
+ italic: false,
17112
+ colorToken: "text",
17113
+ hoverColorToken: "primary",
17114
+ padding: "none",
17115
+ borderRadius: "none",
17116
+ effects: { hover: [{
17117
+ effectId: "text-color-change",
17118
+ options: { hoverColorToken: "primary" }
17119
+ }] }
17120
+ },
17121
+ /**
17122
+ * Underline - static underline appears on hover
17123
+ */
17124
+ underline: {
17125
+ name: "Underline",
17126
+ typography: "body",
17127
+ fontWeight: "medium",
17128
+ textTransform: "none",
17129
+ italic: false,
17130
+ colorToken: "text",
17131
+ padding: "none",
17132
+ borderRadius: "none",
17133
+ effects: { hover: [{
17134
+ effectId: "nav-underline",
17135
+ options: { style: "static" }
17136
+ }] }
17137
+ },
17138
+ /**
17139
+ * Underline Grow - animated underline grows from center on hover
17140
+ */
17141
+ "underline-grow": {
17142
+ name: "Underline Grow",
17143
+ typography: "body",
17144
+ fontWeight: "medium",
17145
+ textTransform: "none",
17146
+ italic: false,
17147
+ colorToken: "text",
17148
+ padding: "none",
17149
+ borderRadius: "none",
17150
+ effects: { hover: [{
17151
+ effectId: "nav-underline",
17152
+ options: { style: "grow" }
17153
+ }] }
17154
+ },
17155
+ /**
17156
+ * Capsule - pill-shaped background on hover
17157
+ */
17158
+ capsule: {
17159
+ name: "Capsule",
17160
+ typography: "body",
17161
+ fontWeight: "medium",
17162
+ textTransform: "none",
17163
+ italic: false,
17164
+ colorToken: "text",
17165
+ padding: "compact",
17166
+ borderRadius: "full",
17167
+ effects: {
17168
+ hover: [{
17169
+ effectId: "background-on-hover-alpha",
17170
+ options: {
17171
+ colorToken: "primary",
17172
+ opacity: 10
17173
+ }
17174
+ }],
17175
+ active: [{
17176
+ effectId: "background-on-hover-alpha",
17177
+ options: {
17178
+ colorToken: "primary",
17179
+ opacity: 15
17180
+ }
17181
+ }]
17182
+ }
17183
+ },
17184
+ /**
17185
+ * Solid - solid background color on hover
17186
+ */
17187
+ solid: {
17188
+ name: "Solid",
17189
+ typography: "body",
17190
+ fontWeight: "medium",
17191
+ textTransform: "none",
17192
+ italic: false,
17193
+ colorToken: "text",
17194
+ padding: "compact",
17195
+ borderRadius: "none",
17196
+ effects: {
17197
+ hover: [{
17198
+ effectId: "background-on-hover",
17199
+ options: {
17200
+ colorToken: "primary",
17201
+ textColorToken: "primaryForeground"
17202
+ }
17203
+ }],
17204
+ active: [{
17205
+ effectId: "background-on-hover",
17206
+ options: {
17207
+ colorToken: "primary",
17208
+ textColorToken: "primaryForeground"
17209
+ }
17210
+ }]
17211
+ }
17212
+ },
17213
+ /**
17214
+ * Scale - gentle scale-up on hover
17215
+ */
17216
+ scale: {
17217
+ name: "Scale",
17218
+ typography: "body",
17219
+ fontWeight: "medium",
17220
+ textTransform: "none",
17221
+ italic: false,
17222
+ colorToken: "text",
17223
+ padding: "none",
17224
+ borderRadius: "none",
17225
+ effects: { hover: [{
17226
+ effectId: "scale-up",
17227
+ options: { scale: 1.05 }
17228
+ }] }
17229
+ },
17230
+ /**
17231
+ * Frosted - semi-transparent glass-like background
17232
+ */
17233
+ frosted: {
17234
+ name: "Frosted",
17235
+ typography: "body",
17236
+ fontWeight: "medium",
17237
+ textTransform: "none",
17238
+ italic: false,
17239
+ colorToken: "text",
17240
+ padding: "compact",
17241
+ borderRadius: "md",
17242
+ effects: {
17243
+ base: [{ effectId: "nav-frosted-base" }],
17244
+ hover: [{ effectId: "nav-frosted-hover" }],
17245
+ active: [{ effectId: "nav-frosted-active" }]
17246
+ }
17247
+ }
17248
+ };
17249
+ /**
17250
+ * Get a nav link style preset by ID
17251
+ */
17252
+ function getNavLinkPreset(presetId) {
17253
+ return NAV_LINK_PRESETS[presetId];
17254
+ }
17255
+ Object.keys(NAV_LINK_PRESETS);
17256
+ //#endregion
17257
+ //#region ../theme-core/src/header/legacyNavLinkStyle.ts
17258
+ function buildLegacyHeaderNavLinkStyle(header, contrastTreatment, navTextSize) {
17259
+ const navStyle = header.navStyle ?? "minimal";
17260
+ const basePreset = getNavLinkPreset(navStyle);
17261
+ if (!basePreset) return null;
17262
+ const style = {
17263
+ ...basePreset,
17264
+ fontWeight: header.navWeight ?? basePreset.fontWeight,
17265
+ colorToken: (header.navColor ?? header.textColor)?.trim() || basePreset.colorToken,
17266
+ ...contrastTreatment ? { contrastTreatment } : {},
17267
+ ...navTextSize ? { textSize: navTextSize } : {}
17268
+ };
17269
+ if (header.navWeight === "bold" && navStyle === "solid") style.textTransform = "uppercase";
17270
+ applyLegacyGlassTreatment(style, header, navStyle);
17271
+ return style;
17272
+ }
17273
+ function applyLegacyGlassTreatment(style, header, navStyle) {
17274
+ if (header.navContainer?.type !== "glass" || navStyle !== "minimal") return;
17275
+ style.borderRadius = "full";
17276
+ style.effects = {
17277
+ ...style.effects,
17278
+ hover: glassStateEffects(10),
17279
+ active: glassStateEffects(18)
17280
+ };
17281
+ }
17282
+ function glassStateEffects(opacity) {
17283
+ return [{
17284
+ effectId: "background-on-hover-alpha",
17285
+ options: {
17286
+ colorToken: "neutral-50",
17287
+ opacity
17288
+ }
17289
+ }, {
17290
+ effectId: "text-color-change",
17291
+ options: { hoverColorToken: "neutral-50" }
17292
+ }];
17293
+ }
17294
+ //#endregion
17295
+ //#region ../theme-core/src/header/openingForegroundProjection.ts
17296
+ function readOpeningForegroundProjection(header) {
17297
+ return header?.__runtimeOpeningForeground ?? null;
17298
+ }
17299
+ //#endregion
17300
+ //#region ../theme-core/src/header/effectiveNavLinkStyle.ts
17301
+ function effectiveHeaderNavLinkStyle(header, contrastTreatment = null, navTextSize = null) {
17302
+ if (!header) return null;
17303
+ if (!header.navLinkStyle) return buildLegacyHeaderNavLinkStyle(header, contrastTreatment, navTextSize);
17304
+ return {
17305
+ ...header.navLinkStyle,
17306
+ ...contrastTreatment ? { contrastTreatment } : {},
17307
+ ...navTextSize ? { textSize: navTextSize } : {}
17308
+ };
17309
+ }
17310
+ function headerForegroundCandidates(header) {
17311
+ if (!header) return {};
17312
+ const style = effectiveHeaderNavLinkStyle(header);
17313
+ return {
17314
+ text: header.textColor ?? header.background?.textColor,
17315
+ link: style?.colorToken ?? header.navColor ?? header.textColor,
17316
+ linkHover: navLinkHoverColorCandidate(style)
17317
+ };
17318
+ }
17319
+ function headerLeafTextColor(header) {
17320
+ if (!header) return "text";
17321
+ return header.textColor ?? header.navColor ?? header.background?.textColor ?? header.navLinkStyle?.colorToken ?? "text";
17322
+ }
17323
+ /** Transparent chrome must reset the whole contract on its own root. */
17324
+ function transparentHeaderForegroundInput(header, palette) {
17325
+ const projection = readOpeningForegroundProjection(header);
17326
+ if (projection?.kind === "known") return surfaceForegroundInputFromResolved(projection, rgbColorValue);
17327
+ return authoredTransparentHeaderForegroundInput(header, palette);
17328
+ }
17329
+ function authoredTransparentHeaderForegroundInput(header, palette) {
17330
+ const text = headerLeafTextColor(header);
17331
+ const style = effectiveHeaderNavLinkStyle(header);
17332
+ const link = style?.colorToken ?? text;
17333
+ const restingToken = parseThemeColorToken(link) ?? parseThemeColorToken("text");
17334
+ if (!restingToken) throw new Error("Built-in text colour token is invalid");
17335
+ const hover = planForegroundHover({
17336
+ restingToken,
17337
+ candidate: navLinkOwnsHoverForeground(style) ? null : navLinkHoverColorCandidate(style),
17338
+ palette,
17339
+ backdrops: null
17340
+ });
17341
+ return {
17342
+ text: rgbColorValue(text),
17343
+ link: rgbColorValue(link),
17344
+ linkHover: rgbColorValue(hover.token),
17345
+ hoverDecoration: navLinkOwnsUnderline(style) ? "initial" : hover.decoration
17346
+ };
17347
+ }
17348
+ //#endregion
16656
17349
  //#region ../theme-core/src/site-styles/pageDesignAuthority.ts
16657
17350
  const nonEmptyStringSchema = z.string().min(1);
16658
17351
  const blockContentVersionIdSchema = nonEmptyStringSchema.transform(asBlockContentVersionId);
@@ -16805,6 +17498,28 @@ z.object({
16805
17498
  motion: z.enum(themeTokenRecipeOptions.motion)
16806
17499
  });
16807
17500
  //#endregion
17501
+ //#region ../theme-core/src/footer/effectiveNavLinkStyle.ts
17502
+ function effectiveFooterNavLinkStyle(footer) {
17503
+ if (!footer) return null;
17504
+ if (footer.navLinkStyle) return footer.navLinkStyle;
17505
+ const basePreset = getNavLinkPreset(footer.navStyle ?? "minimal");
17506
+ if (!basePreset) return null;
17507
+ return {
17508
+ ...basePreset,
17509
+ fontWeight: footer.navWeight ?? basePreset.fontWeight,
17510
+ colorToken: footer.navColor?.trim() || basePreset.colorToken
17511
+ };
17512
+ }
17513
+ function footerForegroundCandidates(footer, proseHoverCandidate) {
17514
+ if (!footer) return {};
17515
+ const style = effectiveFooterNavLinkStyle(footer);
17516
+ return {
17517
+ text: footer.background?.textColor,
17518
+ link: style?.colorToken ?? footer.navColor ?? footer.background?.textColor,
17519
+ linkHover: navLinkOwnsHoverForeground(style) ? proseHoverCandidate : navLinkHoverColorCandidate(style)
17520
+ };
17521
+ }
17522
+ //#endregion
16808
17523
  //#region ../theme-core/src/siteChromeOverlayClearance.ts
16809
17524
  const SITE_CHROME_VISIBLE_HEADER_ATTR = "data-site-chrome-visible-header";
16810
17525
  //#endregion
@@ -19778,33 +20493,28 @@ function resolveBackgroundColorValue(value, context) {
19778
20493
  //#endregion
19779
20494
  //#region ../blocks/src/system/transforms/registry/_utils/surfaceForegroundStyles.ts
19780
20495
  const contextualButtonStylesCache = /* @__PURE__ */ new WeakMap();
19781
- function resolveHeaderLeafTextColor(header) {
19782
- return header?.textColor ?? header?.navColor ?? header?.background?.textColor ?? header?.navLinkStyle?.colorToken ?? "text";
19783
- }
19784
20496
  function resolveHeaderRootForeground(header, palette, isTransparent) {
19785
- if (isTransparent) return { kind: "unknown" };
20497
+ if (isTransparent) return readOpeningForegroundProjection(header) ?? { kind: "unknown" };
19786
20498
  const background = header?.background;
19787
20499
  return resolveSurfaceForeground(background ?? {
19788
20500
  type: "color",
19789
20501
  color: "surface"
19790
- }, palette, {
19791
- text: header?.textColor ?? background?.textColor,
19792
- link: header?.navLinkStyle?.colorToken ?? header?.navColor ?? header?.textColor
19793
- });
20502
+ }, palette, headerForegroundCandidates(header));
20503
+ }
20504
+ function resolveFooterRootForeground(footer, palette, proseHoverCandidate) {
20505
+ return resolveSurfaceForeground(footer?.background ?? {
20506
+ type: "color",
20507
+ color: "surface"
20508
+ }, palette, footerForegroundCandidates(footer, proseHoverCandidate), { compositeBase: "background" });
19794
20509
  }
19795
20510
  function resolveSurfaceForegroundStyles(value, context, options) {
19796
20511
  const input = parseBackgroundContent(value);
19797
- const foreground = input ? resolveSurfaceForeground(input, context.theme.palette, {}, { compositeBase: options?.fallbackToken }) : { kind: "unknown" };
20512
+ const foreground = input ? resolveSurfaceForeground(input, context.theme.palette, { linkHover: context.proseHoverCandidate }, { compositeBase: options?.fallbackToken }) : { kind: "unknown" };
19798
20513
  const buttonStyles = resolveContextualButtonStyles(input, foreground, context, options);
19799
20514
  if (foreground.kind === "unknown") return buttonStyles;
19800
20515
  return {
19801
20516
  ...buttonStyles,
19802
- ...surfaceForegroundStyle({
19803
- text: resolveBackgroundColorValue(foreground.roles.text, context),
19804
- heading: resolveBackgroundColorValue(foreground.roles.heading, context),
19805
- link: resolveBackgroundColorValue(foreground.roles.link, context),
19806
- supporting: resolveBackgroundColorValue(foreground.roles.supporting, context)
19807
- })
20517
+ ...surfaceForegroundStyle(surfaceForegroundInputFromResolved(foreground, (token) => resolveBackgroundColorValue(token, context)))
19808
20518
  };
19809
20519
  }
19810
20520
  function resolveContextualButtonStyles(background, foreground, context, options) {
@@ -25620,10 +26330,7 @@ function resolveBackgroundVisualStyles(backgroundColor, defaultToken = "surface"
25620
26330
  };
25621
26331
  }
25622
26332
  function resolveHeaderVisualStyles(header) {
25623
- const navContainerType = header?.navContainer?.type ?? "none";
25624
- const hasContainedNav = navContainerType === "glass" || navContainerType === "pill";
25625
- const hasOverlayVariant = header?.variant === "floating";
25626
- if (hasContainedNav || hasOverlayVariant) return {
26333
+ if (headerRootPaint(header) !== "own-surface") return {
25627
26334
  backgroundToken: "transparent",
25628
26335
  isTransparent: true
25629
26336
  };
@@ -25634,23 +26341,7 @@ function resolveHeaderVisualStyles(header) {
25634
26341
  }
25635
26342
  function resolvedForegroundStyle(foreground) {
25636
26343
  if (foreground.kind === "unknown") return void 0;
25637
- const { roles } = foreground;
25638
- return surfaceForegroundStyle({
25639
- text: rgbColorValue(roles.text),
25640
- heading: rgbColorValue(roles.heading),
25641
- link: rgbColorValue(roles.link),
25642
- supporting: rgbColorValue(roles.supporting)
25643
- });
25644
- }
25645
- function resolveFooterRootForeground(footer, palette) {
25646
- const background = footer?.background;
25647
- return resolveSurfaceForeground(background ?? {
25648
- type: "color",
25649
- color: "surface"
25650
- }, palette, {
25651
- text: background?.textColor,
25652
- link: footer?.navLinkStyle?.colorToken ?? footer?.navColor ?? background?.textColor
25653
- });
26344
+ return surfaceForegroundStyle(surfaceForegroundInputFromResolved(foreground, rgbColorValue));
25654
26345
  }
25655
26346
  function footerBottomBarBorderWidthStyle(width) {
25656
26347
  if (!width) return void 0;
@@ -25677,8 +26368,7 @@ const headerRootClassTransform = {
25677
26368
  const placement = planSiteChromePlacement(parseHeaderPositioning(content.positioning));
25678
26369
  const header = asPartialObject(value);
25679
26370
  const visuals = resolveHeaderVisualStyles(header);
25680
- const navContainerType = header?.navContainer?.type ?? "none";
25681
- const hasContainedNav = navContainerType === "glass" || navContainerType === "pill";
26371
+ const hasContainedNav = headerRootPaint(header) === "contained-nav";
25682
26372
  const backgroundClass = visuals.isTransparent || hasContainedNav ? "rb-bg-transparent" : null;
25683
26373
  const classes = [config.base, backgroundClass];
25684
26374
  if (!hasContainedNav) {
@@ -25721,7 +26411,7 @@ const headerRootStyleTransform = {
25721
26411
  run: (value, _options, context) => {
25722
26412
  const header = asPartialObject(value);
25723
26413
  const visuals = resolveHeaderVisualStyles(header);
25724
- return mergeStyles(resolvedForegroundStyle(resolveHeaderRootForeground(header, context.theme.palette, visuals.isTransparent)) ?? { color: rgbColorValue(resolveHeaderLeafTextColor(header)) }, borderColorStyle(header?.border?.colorToken ?? "border"));
26414
+ return mergeStyles(resolvedForegroundStyle(resolveHeaderRootForeground(header, context.theme.palette, visuals.isTransparent)) ?? (visuals.isTransparent ? surfaceForegroundStyle(transparentHeaderForegroundInput(header, context.theme.palette)) : { color: rgbColorValue(headerLeafTextColor(header)) }), borderColorStyle(header?.border?.colorToken ?? "border"));
25725
26415
  }
25726
26416
  };
25727
26417
  const headerSectionBackgroundTransform = {
@@ -25729,9 +26419,7 @@ const headerSectionBackgroundTransform = {
25729
26419
  kind: "string",
25730
26420
  summary: "Resolve the inner site-header section background token",
25731
26421
  run: (value) => {
25732
- const header = asPartialObject(value);
25733
- const navContainerType = header?.navContainer?.type ?? "none";
25734
- return header?.variant === "floating" || navContainerType === "glass" || navContainerType === "pill" ? "raw:transparent" : "background";
26422
+ return headerRootPaint(asPartialObject(value)) !== "own-surface" ? "raw:transparent" : "background";
25735
26423
  }
25736
26424
  };
25737
26425
  const footerRootStyleTransform = {
@@ -25749,7 +26437,7 @@ const footerRootStyleTransform = {
25749
26437
  styleParts.push(backgroundColorStyle(token));
25750
26438
  }
25751
26439
  }
25752
- styleParts.push(resolvedForegroundStyle(resolveFooterRootForeground(footer, context.theme.palette)));
26440
+ styleParts.push(resolvedForegroundStyle(resolveFooterRootForeground(footer, context.theme.palette, context.proseHoverCandidate)));
25753
26441
  styleParts.push(borderColorStyle("border"));
25754
26442
  return mergeStyles(...styleParts);
25755
26443
  }
@@ -25811,22 +26499,28 @@ const footerBottomBarStyleTransform = {
25811
26499
  run: (value, _options, context) => {
25812
26500
  const footer = asPartialObject(value);
25813
26501
  const bottomBar = footer?.bottomBar;
25814
- const styleParts = [];
25815
- const background = bottomBar?.background;
25816
- if (background?.type === "color") styleParts.push(backgroundColorStyle(background.color ?? "surface"));
25817
- styleParts.push(borderColorStyle(bottomBar?.borderTop?.colorToken ?? "border"), footerBottomBarBorderWidthStyle(bottomBar?.borderTop?.width));
25818
- const foreground = resolveSurfaceForeground(background?.type === "color" ? background : {
25819
- type: "color",
25820
- color: "transparent"
25821
- }, context.theme.palette, {
25822
- text: bottomBar?.textColor,
25823
- link: footer?.bottomTextLinkStyle?.colorToken ?? bottomBar?.textColor
25824
- });
25825
- if (background?.type === "color") styleParts.push(resolvedForegroundStyle(foreground));
25826
- else if (bottomBar?.textColor) styleParts.push(textColorStyle(bottomBar.textColor));
25827
- return mergeStyles(...styleParts);
26502
+ return mergeStyles(bottomBar?.background?.type === "color" ? backgroundColorStyle(bottomBar.background.color ?? "surface") : void 0, borderColorStyle(bottomBar?.borderTop?.colorToken ?? "border"), footerBottomBarBorderWidthStyle(bottomBar?.borderTop?.width), footerBottomBarForegroundStyle(footer, context.theme.palette));
25828
26503
  }
25829
26504
  };
26505
+ function footerBottomBarForegroundStyle(footer, palette) {
26506
+ if (!footer?.bottomBar) return void 0;
26507
+ const bar = footer.bottomBar;
26508
+ if (bar.background?.type !== "color") return backgroundlessBottomBarForegroundStyle(footer);
26509
+ return resolvedForegroundStyle(resolveSurfaceForeground(bar.background, palette, {
26510
+ text: bar.textColor,
26511
+ link: footer.bottomTextLinkStyle?.colorToken ?? bar.textColor,
26512
+ linkHover: footer.bottomTextLinkStyle?.hoverColorToken
26513
+ }, { compositeBase: measuredFooterBackdrop(footer, palette) }));
26514
+ }
26515
+ function backgroundlessBottomBarForegroundStyle(footer) {
26516
+ if (footer.background?.contentOwner === "site-chrome-editor") return;
26517
+ const textColor = footer.bottomBar?.textColor;
26518
+ return textColor ? textColorStyle(textColor) : void 0;
26519
+ }
26520
+ function measuredFooterBackdrop(footer, palette) {
26521
+ const foreground = resolveFooterRootForeground(footer, palette);
26522
+ return foreground.kind === "known" && foreground.provenance.kind === "measured" ? foreground.provenance.backdropHex : null;
26523
+ }
25830
26524
  const footerSplitMainClassTransform = {
25831
26525
  id: "layout.footerSplitMainClass",
25832
26526
  kind: "string",
@@ -25922,7 +26616,7 @@ function chromeSurfaceTextToken(surface, theme, palette) {
25922
26616
  case "header-root": {
25923
26617
  const header = theme.header;
25924
26618
  const foreground = resolveHeaderRootForeground(header, palette, resolveHeaderVisualStyles(header).isTransparent);
25925
- return foreground.kind === "known" ? foreground.roles.text : resolveHeaderLeafTextColor(header);
26619
+ return foreground.kind === "known" ? foreground.roles.text : headerLeafTextColor(header);
25926
26620
  }
25927
26621
  case "header-mobile-panel": return theme.header?.dropdownStyle?.textColor ?? "text";
25928
26622
  case "footer-root": {
@@ -28003,13 +28697,19 @@ const bookingDescription = richText({}, bind("content.description"), when("conte
28003
28697
  * that hydration never rewrites.
28004
28698
  */
28005
28699
  const bookingWizard = bookingForm(withApiBindings({
28700
+ demoEmailSuppressed: { $bind: {
28701
+ from: "$root.demoEmailSuppressed",
28702
+ fallback: false
28703
+ } },
28006
28704
  portalToken: { $bind: {
28007
28705
  from: "$root.portalToken",
28008
28706
  fallback: null
28009
28707
  } },
28010
28708
  formId: { $bind: { from: "content.formId" } },
28011
28709
  form: { $bind: { from: "data.form" } },
28012
- services: { $bind: { from: "data.services" } }
28710
+ services: { $bind: { from: "data.services" } },
28711
+ mailingList: { $bind: { from: "$root.mailingList" } },
28712
+ siteName: { $bind: { from: "$root.siteName" } }
28013
28713
  }));
28014
28714
  /** Both variants sit in the same section shell; only the inner layout differs. */
28015
28715
  function bookingSection(children) {
@@ -28804,7 +29504,6 @@ const publicEventBaseSchema = z.object({
28804
29504
  description: z.string().nullable(),
28805
29505
  content: z.object({ body: RichTextDocSchema.nullable().optional() }).optional(),
28806
29506
  presentation: z.object({
28807
- cardTitleOverride: z.string().nullable().optional(),
28808
29507
  summary: z.string().nullable().optional(),
28809
29508
  image: mediaSchema.nullable().optional()
28810
29509
  }).optional(),
@@ -28837,6 +29536,7 @@ const publicEventBaseSchema = z.object({
28837
29536
  "archived"
28838
29537
  ]).optional(),
28839
29538
  timeZone: z.string(),
29539
+ siteTimeZone: z.string().optional(),
28840
29540
  pricing: publicEventPricingSchema,
28841
29541
  paymentTerms: blockBookingPaymentTermsSchema,
28842
29542
  cancellationPolicy: z.object({ refunds: z.object({
@@ -29500,6 +30200,7 @@ const EVENT_REGISTRATION_SHELL_STEP_LABELS = [
29500
30200
  ];
29501
30201
  const eventRegistrationPublicEventSchema = z.preprocess(normalizeEventRegistrationEventInput, publicEventSchema);
29502
30202
  const eventRegistrationHydrationSchemaShape = {
30203
+ demoEmailSuppressed: z.boolean().optional(),
29503
30204
  occurrenceContext: occurrenceContextSchema.optional(),
29504
30205
  subject: eventRegistrationPageSurfaceSubjectSchema.nullable().optional(),
29505
30206
  maxTickets: z.string().optional(),
@@ -29511,7 +30212,13 @@ const eventRegistrationHydrationSchemaShape = {
29511
30212
  spamProtectionEnabled: z.boolean().optional(),
29512
30213
  supportEmail: z.string().optional(),
29513
30214
  sitePasses: publicPassProductCollectionSchema.nullable().optional(),
29514
- siteMemberships: publicMembershipProductCollectionSchema.nullable().optional()
30215
+ siteMemberships: publicMembershipProductCollectionSchema.nullable().optional(),
30216
+ mailingList: z.unknown().transform((value) => {
30217
+ if (value === void 0) return void 0;
30218
+ const parsed = parseMailingListRuntimeContext(value);
30219
+ return parsed.ok ? parsed.value : void 0;
30220
+ }),
30221
+ siteName: z.string().optional()
29515
30222
  };
29516
30223
  const eventRegistrationEventSourceSchema = z.discriminatedUnion("kind", [z.object({
29517
30224
  kind: z.literal("loaded"),
@@ -29674,6 +30381,7 @@ const eventRegistrationBlockRuntime = defineClientOwnedBlockRuntime({
29674
30381
  ...eventSource,
29675
30382
  events: [...scopedSourceEvents]
29676
30383
  } : eventSource,
30384
+ demoEmailSuppressed: source.demoEmailSuppressed,
29677
30385
  maxTickets: source.maxTickets ?? void 0,
29678
30386
  showVenue: source.showVenue,
29679
30387
  showCapacity: source.showCapacity,
@@ -29683,7 +30391,9 @@ const eventRegistrationBlockRuntime = defineClientOwnedBlockRuntime({
29683
30391
  spamProtectionEnabled: source.spamProtectionEnabled,
29684
30392
  supportEmail: source.supportEmail,
29685
30393
  sitePasses: source.sitePasses ?? null,
29686
- siteMemberships: source.siteMemberships ?? null
30394
+ siteMemberships: source.siteMemberships ?? null,
30395
+ mailingList: source.mailingList,
30396
+ siteName: source.siteName
29687
30397
  }
29688
30398
  };
29689
30399
  }
@@ -29800,8 +30510,8 @@ const eventRegistrationBlockDefinition = {
29800
30510
  description: "Message shown after successful registration",
29801
30511
  required: false,
29802
30512
  multiline: true,
29803
- defaultValue: "Thank you for registering! Check your email for confirmation details.",
29804
- maxLength: 500
30513
+ maxLength: 500,
30514
+ ui: { placeholder: "Thank you for registering! Check your email for confirmation details." }
29805
30515
  },
29806
30516
  {
29807
30517
  id: "buttonText",
@@ -29822,6 +30532,10 @@ const eventRegistrationBlockDefinition = {
29822
30532
  text({ as: "h2" }, bind("content.heading"), when("content.heading")),
29823
30533
  richText({ className: "rb-prose rb-max-w-none" }, bind("content.description"), when("content.description")),
29824
30534
  eventRegistration(withApiBindings({
30535
+ demoEmailSuppressed: { $bind: {
30536
+ from: "$root.demoEmailSuppressed",
30537
+ fallback: false
30538
+ } },
29825
30539
  readAuthority: { $bind: { from: "$root.readAuthority" } },
29826
30540
  occurrenceContext: { $bind: { from: "$root.occurrenceContext" } },
29827
30541
  subject: { $bind: { from: "$root.subject" } },
@@ -29851,6 +30565,8 @@ const eventRegistrationBlockDefinition = {
29851
30565
  events: { $bind: { from: "data.events" } },
29852
30566
  wholeSeriesRunEvents: { $bind: { from: "data.wholeSeriesRunEvents" } },
29853
30567
  loaderFailures: { $bind: { from: "$root.loaderFailures" } },
30568
+ mailingList: { $bind: { from: "$root.mailingList" } },
30569
+ siteName: { $bind: { from: "$root.siteName" } },
29854
30570
  sitePasses: { $bind: { from: "data.sitePasses" } },
29855
30571
  siteMemberships: { $bind: { from: "data.siteMemberships" } },
29856
30572
  stage: { $bind: {
@@ -35049,6 +35765,7 @@ const shopSourceSchema = z.object({
35049
35765
  memberships: z.array(publicMembershipProductSchema).nullable().optional(),
35050
35766
  products: z.array(publicProductSchema).nullable().optional(),
35051
35767
  siteId: z.string().optional(),
35768
+ demoEmailSuppressed: z.boolean().optional(),
35052
35769
  apiBaseUrl: z.string().optional(),
35053
35770
  readAuthority: browserReadAuthoritySchema.optional(),
35054
35771
  stage: previewStageSchema.optional()
@@ -35168,7 +35885,8 @@ const checkoutDisplaySchema = z.object({
35168
35885
  const passesMembershipsHydrationSchema = z.object({
35169
35886
  memberships: z.array(publicMembershipProductSchema),
35170
35887
  passPurchaseMode: z.enum(["add_to_cart", "buy_now"]),
35171
- buttonVariant: blockButtonRoleSchema
35888
+ buttonVariant: blockButtonRoleSchema,
35889
+ demoEmailSuppressed: z.boolean().optional()
35172
35890
  });
35173
35891
  const productListHydrationSchema = z.object({
35174
35892
  products: z.array(publicProductSchema),
@@ -35190,7 +35908,8 @@ const cartHydrationSchema = z.object({
35190
35908
  });
35191
35909
  const checkoutHydrationSchema = z.object({
35192
35910
  emptyStateText: z.string(),
35193
- submitButtonText: z.string()
35911
+ submitButtonText: z.string(),
35912
+ demoEmailSuppressed: z.boolean().optional()
35194
35913
  });
35195
35914
  const passesMembershipsRenderSchema = z.object({
35196
35915
  display: passesMembershipsDisplaySchema,
@@ -35249,7 +35968,8 @@ const shopBlockRuntime = defineProgressiveBlockRuntime({
35249
35968
  hydration: {
35250
35969
  memberships: source.showMemberships === false ? [] : source.memberships ?? [],
35251
35970
  passPurchaseMode,
35252
- buttonVariant: source.buttonVariant ?? "primary"
35971
+ buttonVariant: source.buttonVariant ?? "primary",
35972
+ demoEmailSuppressed: source.demoEmailSuppressed
35253
35973
  }
35254
35974
  };
35255
35975
  }
@@ -35342,7 +36062,8 @@ const checkoutBlockRuntime = defineClientOwnedBlockRuntime({
35342
36062
  }),
35343
36063
  hydration: {
35344
36064
  emptyStateText: source.emptyStateText ?? "Add something to your cart to continue.",
35345
- submitButtonText: source.submitButtonText ?? "Checkout"
36065
+ submitButtonText: source.submitButtonText ?? "Checkout",
36066
+ demoEmailSuppressed: source.demoEmailSuppressed
35346
36067
  }
35347
36068
  })
35348
36069
  });
@@ -35560,6 +36281,10 @@ const shopBlockDefinition = {
35560
36281
  spacing: "spacious",
35561
36282
  children: sectionContainer([shop(withApiBindings({
35562
36283
  readAuthority: { $bind: { from: "$root.readAuthority" } },
36284
+ demoEmailSuppressed: { $bind: {
36285
+ from: "$root.demoEmailSuppressed",
36286
+ fallback: false
36287
+ } },
35563
36288
  mode: "passes-memberships",
35564
36289
  showPasses: { $bind: {
35565
36290
  from: "content.showPasses",
@@ -36102,6 +36827,10 @@ const checkoutBlockDefinition = {
36102
36827
  baseClass: "",
36103
36828
  spacing: "spacious",
36104
36829
  children: sectionContainer([checkout(withApiBindings({
36830
+ demoEmailSuppressed: { $bind: {
36831
+ from: "$root.demoEmailSuppressed",
36832
+ fallback: false
36833
+ } },
36105
36834
  readAuthority: { $bind: { from: "$root.readAuthority" } },
36106
36835
  mode: "checkout",
36107
36836
  heading: { $bind: {
@@ -36734,65 +37463,67 @@ const editorialSplitLayout = styledSection({
36734
37463
  spacing: "comfortable",
36735
37464
  background: "surface"
36736
37465
  });
36737
- const newsletterSignupBlockDefinition = {
36738
- manifest: createBlockManifest({
36739
- id: "block.newsletter-signup",
36740
- title: "Newsletter Signup",
36741
- titleSource: "title",
36742
- description: "Newsletter subscription form with configurable field presets.",
36743
- category: "interactive",
36744
- contentSource: { kind: "inline" },
36745
- fragments: [{
36746
- fragment: newsletterCopyFragment,
36747
- fieldPriority: 0
36748
- }, {
36749
- fragment: newsletterFormFragment,
36750
- fieldPriority: 1
36751
- }],
36752
- layout: stackedLayout,
36753
- variants: {
36754
- stacked: stackedLayout,
36755
- inline: inlineLayout,
36756
- "editorial-split": editorialSplitLayout
36757
- },
36758
- defaultVariant: "stacked",
36759
- variantOptions: {
36760
- stacked: {
36761
- label: "Stacked",
36762
- description: "Vertical layout with fields stacked"
36763
- },
36764
- inline: {
36765
- label: "Inline",
36766
- description: "Horizontal layout (email + button side by side)"
36767
- },
36768
- "editorial-split": {
36769
- label: "Editorial split",
36770
- description: "Copy and form in balanced side-by-side columns, stacked on mobile."
36771
- }
36772
- },
36773
- styleTokens: {
36774
- background: "surface",
36775
- typography: "body",
36776
- spacing: "md"
37466
+ const newsletterSignupManifest = createBlockManifest({
37467
+ id: "block.newsletter-signup",
37468
+ title: "Newsletter Signup",
37469
+ titleSource: "title",
37470
+ description: "Newsletter subscription form with configurable field presets.",
37471
+ category: "interactive",
37472
+ contentSource: { kind: "inline" },
37473
+ fragments: [{
37474
+ fragment: newsletterCopyFragment,
37475
+ fieldPriority: 0
37476
+ }, {
37477
+ fragment: newsletterFormFragment,
37478
+ fieldPriority: 1
37479
+ }],
37480
+ layout: stackedLayout,
37481
+ variants: {
37482
+ stacked: stackedLayout,
37483
+ inline: inlineLayout,
37484
+ "editorial-split": editorialSplitLayout
37485
+ },
37486
+ defaultVariant: "stacked",
37487
+ variantOptions: {
37488
+ stacked: {
37489
+ label: "Stacked",
37490
+ description: "Vertical layout with fields stacked"
36777
37491
  },
36778
- behaviours: {
36779
- supportsThemeSwitching: true,
36780
- inlineEditing: false,
36781
- animation: false,
36782
- paletteHidden: false
37492
+ inline: {
37493
+ label: "Inline",
37494
+ description: "Horizontal layout (email + button side by side)"
36783
37495
  },
36784
- tags: [
36785
- "newsletter",
36786
- "signup",
36787
- "email",
36788
- "subscribe",
36789
- "subscription",
36790
- "mailchimp",
36791
- "marketing",
36792
- "lead-capture"
36793
- ],
36794
- icon: "Mail"
36795
- }),
37496
+ "editorial-split": {
37497
+ label: "Editorial split",
37498
+ description: "Copy and form in balanced side-by-side columns, stacked on mobile."
37499
+ }
37500
+ },
37501
+ styleTokens: {
37502
+ background: "surface",
37503
+ typography: "body",
37504
+ spacing: "md"
37505
+ },
37506
+ behaviours: {
37507
+ supportsThemeSwitching: true,
37508
+ inlineEditing: false,
37509
+ animation: false,
37510
+ paletteHidden: false
37511
+ },
37512
+ tags: [
37513
+ "newsletter",
37514
+ "signup",
37515
+ "email",
37516
+ "subscribe",
37517
+ "subscription",
37518
+ "mailchimp",
37519
+ "marketing",
37520
+ "lead-capture"
37521
+ ],
37522
+ icon: "Mail"
37523
+ });
37524
+ [...(newsletterSignupManifest.fields ?? []).map((field) => field.id)];
37525
+ const newsletterSignupBlockDefinition = {
37526
+ manifest: newsletterSignupManifest,
36796
37527
  runtime: newsletterFormBlockRuntime
36797
37528
  };
36798
37529
  //#endregion
@@ -38834,7 +39565,8 @@ const BOOKING_FORM_DATA_RESERVED_KEYS = /* @__PURE__ */ new Set([
38834
39565
  "discountCode",
38835
39566
  "selectedSlidingAmountInput",
38836
39567
  "selectedCollectionOptionKind",
38837
- "selectedAppointmentPackageId"
39568
+ "selectedAppointmentPackageId",
39569
+ "mailingListOptIn"
38838
39570
  ]);
38839
39571
  function isBookingFormDataReservedKey(value) {
38840
39572
  return BOOKING_FORM_DATA_RESERVED_KEYS.has(value);