@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
@@ -18,6 +18,64 @@ function defineEndpointDefinitions(definitions) {
18
18
  return definitions;
19
19
  }
20
20
  //#endregion
21
+ //#region ../api/src/apiEndpointTypes.ts
22
+ function allowedDemoMutationPolicy() {
23
+ return {
24
+ classification: "allowed",
25
+ publicMessage: ""
26
+ };
27
+ }
28
+ function blockedDemoMutationPolicy(classification, publicMessage) {
29
+ if (publicMessage.trim() === "") throw new Error(`Demo mutation policy ${classification} requires publicMessage.`);
30
+ return {
31
+ classification,
32
+ publicMessage
33
+ };
34
+ }
35
+ //#endregion
36
+ //#region ../api/src/demoMutationPolicies.ts
37
+ const DEMO_MUTATION_BLOCKED_HIDDEN = blockedDemoMutationPolicy("blocked-hidden", "This action is not available in demo sites.");
38
+ const DEMO_MUTATION_BLOCKED_DISABLED = blockedDemoMutationPolicy("blocked-disabled", "This setting is disabled in demo sites.");
39
+ blockedDemoMutationPolicy("internal-only", "This internal operation is not available in demo sites.");
40
+ const DEMO_MUTATION_ALLOWED = allowedDemoMutationPolicy();
41
+ //#endregion
42
+ //#region ../api/src/siteLifecycleEndpoints.ts
43
+ const SITE_LIFECYCLE_ENDPOINT_DEFINITIONS = defineEndpointDefinitions({
44
+ createSite: {
45
+ path: "/sites/manage",
46
+ method: "POST",
47
+ tags: ["site"],
48
+ auth: "user",
49
+ responseKind: "json",
50
+ errors: []
51
+ },
52
+ createSiteManual: {
53
+ path: "/sites/manual",
54
+ method: "POST",
55
+ tags: ["site"],
56
+ auth: "user",
57
+ responseKind: "json",
58
+ errors: []
59
+ },
60
+ updateSite: {
61
+ path: "/sites/manage",
62
+ method: "PUT",
63
+ tags: ["site"],
64
+ auth: "user",
65
+ responseKind: "json",
66
+ errors: []
67
+ },
68
+ deleteSite: {
69
+ path: "/sites/{siteId}",
70
+ method: "DELETE",
71
+ tags: ["site", "site-{siteId}"],
72
+ auth: "user",
73
+ responseKind: "json",
74
+ errors: [],
75
+ demoMutation: DEMO_MUTATION_BLOCKED_HIDDEN
76
+ }
77
+ });
78
+ //#endregion
21
79
  //#region ../api/src/publicNewsletterEndpointDefinitions.ts
22
80
  const PUBLIC_NEWSLETTER_ENDPOINT_DEFINITIONS = defineEndpointDefinitions({
23
81
  subscribeNewsletter: {
@@ -78,27 +136,6 @@ const PUBLIC_NEWSLETTER_ENDPOINT_DEFINITIONS = defineEndpointDefinitions({
78
136
  }
79
137
  });
80
138
  //#endregion
81
- //#region ../api/src/apiEndpointTypes.ts
82
- function allowedDemoMutationPolicy() {
83
- return {
84
- classification: "allowed",
85
- publicMessage: ""
86
- };
87
- }
88
- function blockedDemoMutationPolicy(classification, publicMessage) {
89
- if (publicMessage.trim() === "") throw new Error(`Demo mutation policy ${classification} requires publicMessage.`);
90
- return {
91
- classification,
92
- publicMessage
93
- };
94
- }
95
- //#endregion
96
- //#region ../api/src/demoMutationPolicies.ts
97
- const DEMO_MUTATION_BLOCKED_HIDDEN = blockedDemoMutationPolicy("blocked-hidden", "This action is not available in demo sites.");
98
- const DEMO_MUTATION_BLOCKED_DISABLED = blockedDemoMutationPolicy("blocked-disabled", "This setting is disabled in demo sites.");
99
- blockedDemoMutationPolicy("internal-only", "This internal operation is not available in demo sites.");
100
- const DEMO_MUTATION_ALLOWED = allowedDemoMutationPolicy();
101
- //#endregion
102
139
  //#region ../api/src/cache-tags.ts
103
140
  /**
104
141
  * Tag templates for endpoint definitions (support `{param}` placeholders).
@@ -1125,6 +1162,20 @@ const NEWSLETTER_ENDPOINT_DEFINITIONS = defineEndpointDefinitions({
1125
1162
  responseKind: "json",
1126
1163
  errors: ["auth:forbidden", "server:internal_error"]
1127
1164
  },
1165
+ setMailingListBookingOptIn: {
1166
+ path: "/sites/{siteId}/mailing-list/setup/booking-opt-in",
1167
+ method: "PUT",
1168
+ tags: [TAG_TEMPLATES.site, TAG_TEMPLATES.siteNewsletter],
1169
+ auth: "user",
1170
+ responseKind: "json",
1171
+ demoMutation: DEMO_MUTATION_BLOCKED_DISABLED,
1172
+ errors: [
1173
+ "auth:forbidden",
1174
+ "validation:invalid_input",
1175
+ "resource:conflict",
1176
+ "server:internal_error"
1177
+ ]
1178
+ },
1128
1179
  getMailingListAuthoringContext: {
1129
1180
  path: "/sites/{siteId}/mailing-list/authoring-context",
1130
1181
  method: "GET",
@@ -1540,6 +1591,7 @@ const SDK_EVENT_ENDPOINT_DEFINITIONS = defineEndpointDefinitions({
1540
1591
  responseKind: "json",
1541
1592
  errors: [
1542
1593
  "resource:not_found",
1594
+ "validation:invalid_input",
1543
1595
  "resource:conflict",
1544
1596
  "server:internal_error"
1545
1597
  ]
@@ -1646,6 +1698,19 @@ const CURRENCY_LOCALE_BY_CODE = {
1646
1698
  function resolveCurrencyLocale(currencyCode, override) {
1647
1699
  return override ?? CURRENCY_LOCALE_BY_CODE[currencyCode] ?? "en";
1648
1700
  }
1701
+ function fractionDigitsFor(decimals, exactFormatter) {
1702
+ switch (decimals) {
1703
+ case "exact": return {};
1704
+ case "auto": return {
1705
+ minimumFractionDigits: 0,
1706
+ maximumFractionDigits: exactFormatter.resolvedOptions().maximumFractionDigits
1707
+ };
1708
+ case "whole": return {
1709
+ minimumFractionDigits: 0,
1710
+ maximumFractionDigits: 0
1711
+ };
1712
+ }
1713
+ }
1649
1714
  /**
1650
1715
  * The single currency-amount formatter for the product: minor units in,
1651
1716
  * localized string out.
@@ -1656,6 +1721,13 @@ function resolveCurrencyLocale(currencyCode, override) {
1656
1721
  * own `Intl.NumberFormat`.
1657
1722
  */
1658
1723
  function formatCurrencyAmount(amountCents, currency, options) {
1724
+ return formatCurrencyMajorUnits(amountCents / 100, currency, options);
1725
+ }
1726
+ /**
1727
+ * `formatCurrencyAmount` for an amount already in MAJOR units (29.99 = £29.99),
1728
+ * such as a registrar price. Prefer minor units everywhere else.
1729
+ */
1730
+ function formatCurrencyMajorUnits(amount, currency, options) {
1659
1731
  const currencyCode = currency.toUpperCase();
1660
1732
  const locale = resolveCurrencyLocale(currencyCode, options?.locale);
1661
1733
  try {
@@ -1663,17 +1735,13 @@ function formatCurrencyAmount(amountCents, currency, options) {
1663
1735
  style: "currency",
1664
1736
  currency: currencyCode
1665
1737
  });
1666
- const fractionDigits = options?.decimals === "auto" ? {
1667
- minimumFractionDigits: 0,
1668
- maximumFractionDigits: exactFormatter.resolvedOptions().maximumFractionDigits
1669
- } : {};
1670
1738
  return new Intl.NumberFormat(locale, {
1671
1739
  style: "currency",
1672
1740
  currency: currencyCode,
1673
- ...fractionDigits
1674
- }).format(amountCents / 100);
1741
+ ...fractionDigitsFor(options?.decimals ?? "exact", exactFormatter)
1742
+ }).format(amount);
1675
1743
  } catch {
1676
- return `${(amountCents / 100).toFixed(2)} ${currencyCode}`;
1744
+ return `${amount.toFixed(2)} ${currencyCode}`;
1677
1745
  }
1678
1746
  }
1679
1747
  //#endregion
@@ -2250,17 +2318,35 @@ function parseMailingListRuntimeContext(value) {
2250
2318
  if (!isRecord$8(value)) return invalidRuntimeContext();
2251
2319
  if (value.tag === "not_configured") return ok({ tag: "not_configured" });
2252
2320
  if (value.tag !== "configured") return invalidRuntimeContext();
2321
+ return parseConfiguredRuntimeContext(value);
2322
+ }
2323
+ function parseConfiguredRuntimeContext(value) {
2253
2324
  const revision = parseMailingListSetupRevision(value.revision);
2254
2325
  const form = parseMailingListGlobalForm(value.form);
2255
2326
  const provider = parseRuntimeProvider(value.provider);
2256
- if (revision === null || !form.ok || provider === null) return invalidRuntimeContext();
2327
+ const bookingSignup = parseBookingSignupOffer(value.bookingSignup);
2328
+ if (revision === null || !form.ok || provider === null || bookingSignup === null) return invalidRuntimeContext();
2257
2329
  return ok({
2258
2330
  tag: "configured",
2259
2331
  revision,
2332
+ bookingSignup,
2260
2333
  form: form.value,
2261
2334
  provider
2262
2335
  });
2263
2336
  }
2337
+ function parseBookingSignupOffer(value) {
2338
+ if (value === void 0) return {
2339
+ tag: "unavailable",
2340
+ reason: "disabled"
2341
+ };
2342
+ if (!isRecord$8(value)) return null;
2343
+ if (value.tag === "offered") return { tag: "offered" };
2344
+ if (value.tag === "unavailable" && (value.reason === "disabled" || value.reason === "fields" || value.reason === "destination")) return {
2345
+ tag: "unavailable",
2346
+ reason: value.reason
2347
+ };
2348
+ return null;
2349
+ }
2264
2350
  function parseRuntimeProvider(value) {
2265
2351
  if (!isRecord$8(value)) return null;
2266
2352
  switch (value.provider) {
@@ -3295,28 +3381,6 @@ const EVENT_MANAGEMENT_ENDPOINT_DEFINITIONS = defineEndpointDefinitions({
3295
3381
  "resource:conflict",
3296
3382
  "server:internal_error"
3297
3383
  ]
3298
- },
3299
- /**
3300
- * The Content tab's one write: the short introduction, image and
3301
- * description of an event's page, published without its layout.
3302
- */
3303
- saveEventPageWords: {
3304
- path: "/sites/{siteId}/page-surfaces/{pageSurfaceId}/words",
3305
- method: "PUT",
3306
- tags: [
3307
- TAG_TEMPLATES.siteCollection,
3308
- TAG_TEMPLATES.siteRoutableContent,
3309
- TAG_TEMPLATES.pageSurfaceById
3310
- ],
3311
- auth: "user",
3312
- responseKind: "json",
3313
- errors: [
3314
- "auth:forbidden",
3315
- "validation:invalid_input",
3316
- "resource:not_found",
3317
- "resource:conflict",
3318
- "server:internal_error"
3319
- ]
3320
3384
  }
3321
3385
  });
3322
3386
  //#endregion
@@ -3741,6 +3805,15 @@ const BILLING_ENDPOINT_DEFINITIONS = defineEndpointDefinitions({
3741
3805
  auth: "user",
3742
3806
  responseKind: "json"
3743
3807
  },
3808
+ /** Continue on Free from the onboarding card page; only the attempt's owner. */
3809
+ continueOnboardingOnFree: {
3810
+ path: "/onboarding/attempts/{attemptToken}/plan/free",
3811
+ method: "POST",
3812
+ tags: ["billing"],
3813
+ auth: "user",
3814
+ errors: [],
3815
+ responseKind: "json"
3816
+ },
3744
3817
  createBillingPortalSession: {
3745
3818
  path: "/billing/portal/session",
3746
3819
  method: "POST",
@@ -3750,6 +3823,209 @@ const BILLING_ENDPOINT_DEFINITIONS = defineEndpointDefinitions({
3750
3823
  }
3751
3824
  });
3752
3825
  //#endregion
3826
+ //#region ../api/src/editLeaseEndpoints.ts
3827
+ const path = "/sites/{siteId}/edit-leases/{nodeType}/{nodeId}";
3828
+ const lifecycleErrors = [
3829
+ "auth:lease_required",
3830
+ "auth:forbidden",
3831
+ "resource:not_found",
3832
+ "validation:invalid_input",
3833
+ "server:internal_error"
3834
+ ];
3835
+ const EDIT_LEASE_ENDPOINT_DEFINITIONS = {
3836
+ readEditLease: {
3837
+ path,
3838
+ method: "GET",
3839
+ editLease: "lifecycle",
3840
+ errors: lifecycleErrors,
3841
+ auth: "user",
3842
+ responseKind: "json"
3843
+ },
3844
+ acquireEditLease: {
3845
+ path,
3846
+ method: "POST",
3847
+ editLease: "lifecycle",
3848
+ errors: lifecycleErrors,
3849
+ auth: "user",
3850
+ responseKind: "json"
3851
+ },
3852
+ takeOverEditLease: {
3853
+ path,
3854
+ method: "PUT",
3855
+ editLease: "lifecycle",
3856
+ errors: lifecycleErrors,
3857
+ auth: "user",
3858
+ responseKind: "json"
3859
+ },
3860
+ heartbeatEditLease: {
3861
+ path,
3862
+ method: "PATCH",
3863
+ editLease: "lifecycle",
3864
+ errors: [...lifecycleErrors, "auth:lease_lost"],
3865
+ auth: "user",
3866
+ responseKind: "json"
3867
+ },
3868
+ releaseEditLease: {
3869
+ path,
3870
+ method: "DELETE",
3871
+ editLease: "lifecycle",
3872
+ errors: lifecycleErrors,
3873
+ auth: "user",
3874
+ responseKind: "json"
3875
+ }
3876
+ };
3877
+ //#endregion
3878
+ //#region ../api/src/pageSurfaceEditorEndpoints.ts
3879
+ const surfaceTags = [TAG_TEMPLATES.siteCollection, TAG_TEMPLATES.pageSurfaceById];
3880
+ const PAGE_SURFACE_EDITOR_ENDPOINT_DEFINITIONS = {
3881
+ getPageSurfaceEditorDocument: {
3882
+ path: "/sites/{siteId}/page-surfaces/{pageSurfaceId}/content",
3883
+ method: "GET",
3884
+ errors: [
3885
+ "auth:forbidden",
3886
+ "validation:invalid_input",
3887
+ "resource:not_found",
3888
+ "resource:conflict",
3889
+ "server:internal_error"
3890
+ ],
3891
+ tags: surfaceTags,
3892
+ auth: "user",
3893
+ responseKind: "json"
3894
+ },
3895
+ updatePageSurfaceDraftContent: {
3896
+ editLease: "managed",
3897
+ path: "/sites/{siteId}/page-surfaces/{pageSurfaceId}/content",
3898
+ method: "PUT",
3899
+ errors: [
3900
+ "validation:invalid_input",
3901
+ "resource:not_found",
3902
+ "resource:conflict",
3903
+ "server:internal_error"
3904
+ ],
3905
+ tags: surfaceTags,
3906
+ auth: "user",
3907
+ responseKind: "json"
3908
+ },
3909
+ discardPageSurfaceDraftContent: {
3910
+ editLease: "managed",
3911
+ path: "/sites/{siteId}/page-surfaces/{pageSurfaceId}/content/draft",
3912
+ method: "DELETE",
3913
+ errors: [
3914
+ "validation:invalid_input",
3915
+ "resource:not_found",
3916
+ "resource:conflict",
3917
+ "server:internal_error"
3918
+ ],
3919
+ tags: surfaceTags,
3920
+ auth: "user",
3921
+ responseKind: "json"
3922
+ },
3923
+ updatePageSurfaceRouteMetadata: {
3924
+ editLease: "managed",
3925
+ path: "/sites/{siteId}/page-surfaces/{pageSurfaceId}/metadata",
3926
+ method: "PATCH",
3927
+ errors: [
3928
+ "validation:invalid_input",
3929
+ "resource:not_found",
3930
+ "resource:conflict",
3931
+ "server:internal_error"
3932
+ ],
3933
+ tags: [
3934
+ TAG_TEMPLATES.siteCollection,
3935
+ TAG_TEMPLATES.siteRoutableContent,
3936
+ TAG_TEMPLATES.pageSurfaceById
3937
+ ],
3938
+ auth: "user",
3939
+ responseKind: "json"
3940
+ },
3941
+ publishPageSurface: {
3942
+ editLease: "managed",
3943
+ path: "/sites/{siteId}/page-surfaces/{pageSurfaceId}/publication",
3944
+ method: "POST",
3945
+ errors: [
3946
+ "auth:forbidden",
3947
+ "validation:invalid_input",
3948
+ "resource:not_found",
3949
+ "resource:conflict",
3950
+ "server:internal_error"
3951
+ ],
3952
+ tags: [
3953
+ TAG_TEMPLATES.siteCollection,
3954
+ TAG_TEMPLATES.siteRoutableContent,
3955
+ TAG_TEMPLATES.pageSurfaceById
3956
+ ],
3957
+ auth: "user",
3958
+ responseKind: "json"
3959
+ },
3960
+ saveEventContentTab: {
3961
+ editLease: "managed",
3962
+ path: "/sites/{siteId}/page-surfaces/{pageSurfaceId}/event-content",
3963
+ method: "PUT",
3964
+ errors: [
3965
+ "auth:forbidden",
3966
+ "validation:invalid_input",
3967
+ "resource:not_found",
3968
+ "resource:conflict",
3969
+ "server:internal_error"
3970
+ ],
3971
+ tags: [
3972
+ TAG_TEMPLATES.siteCollection,
3973
+ TAG_TEMPLATES.siteRoutableContent,
3974
+ TAG_TEMPLATES.pageSurfaceById
3975
+ ],
3976
+ auth: "user",
3977
+ responseKind: "json"
3978
+ }
3979
+ };
3980
+ //#endregion
3981
+ //#region ../api/src/bookingPeopleEndpointDefinitions.ts
3982
+ /**
3983
+ * People endpoints (#1356): the People list, its CSV export, and deleting a
3984
+ * person when nothing is attached to them.
3985
+ */
3986
+ const BOOKING_PEOPLE_ENDPOINT_DEFINITIONS = defineEndpointDefinitions({
3987
+ listPeople: {
3988
+ path: "/sites/{siteId}/bookings/people",
3989
+ method: "GET",
3990
+ tags: ["site-{siteId}", "customers-{siteId}"],
3991
+ auth: "user",
3992
+ responseKind: "json",
3993
+ errors: ["server:internal_error"]
3994
+ },
3995
+ exportPeopleCsv: {
3996
+ path: "/sites/{siteId}/bookings/people/export.csv",
3997
+ method: "GET",
3998
+ tags: ["site-{siteId}", "customers-{siteId}"],
3999
+ auth: "user",
4000
+ errors: [],
4001
+ responseKind: "blob"
4002
+ },
4003
+ checkPersonDeletion: {
4004
+ path: "/sites/{siteId}/bookings/people/{personId}/deletion-check",
4005
+ method: "GET",
4006
+ tags: ["site-{siteId}", "customers-{siteId}"],
4007
+ auth: "user",
4008
+ responseKind: "json",
4009
+ errors: [
4010
+ "auth:forbidden",
4011
+ "resource:not_found",
4012
+ "server:internal_error"
4013
+ ]
4014
+ },
4015
+ deletePerson: {
4016
+ path: "/sites/{siteId}/bookings/people/{personId}",
4017
+ method: "DELETE",
4018
+ tags: ["site-{siteId}", "customers-{siteId}"],
4019
+ auth: "user",
4020
+ responseKind: "json",
4021
+ errors: [
4022
+ "auth:forbidden",
4023
+ "resource:not_found",
4024
+ "server:internal_error"
4025
+ ]
4026
+ }
4027
+ });
4028
+ //#endregion
3753
4029
  //#region ../api/src/clientErrorReporting.ts
3754
4030
  const CLIENT_ERROR_REPORT_ENDPOINT_DEFINITIONS = defineEndpointDefinitions({ reportClientError: {
3755
4031
  path: "/client/error-report",
@@ -3785,6 +4061,7 @@ z.object({
3785
4061
  sourceLocation: z.string().max(CLIENT_ERROR_REPORT_LIMITS.sourceLocation).nullable()
3786
4062
  }).strict();
3787
4063
  ({
4064
+ ...SITE_LIFECYCLE_ENDPOINT_DEFINITIONS,
3788
4065
  ...CLIENT_ERROR_REPORT_ENDPOINT_DEFINITIONS,
3789
4066
  ...PUBLIC_NEWSLETTER_ENDPOINT_DEFINITIONS,
3790
4067
  ...ACCOUNT_ENDPOINT_DEFINITIONS,
@@ -3793,12 +4070,14 @@ z.object({
3793
4070
  ...GIFTING_ENDPOINT_DEFINITIONS,
3794
4071
  ...PUBLIC_READ_ENDPOINT_DEFINITIONS,
3795
4072
  ...BILLING_ENDPOINT_DEFINITIONS,
4073
+ ...EDIT_LEASE_ENDPOINT_DEFINITIONS,
4074
+ ...PAGE_SURFACE_EDITOR_ENDPOINT_DEFINITIONS,
3796
4075
  ...SITE_MANAGEMENT_ENDPOINT_DEFINITIONS
3797
4076
  }), 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, {
3798
4077
  ...NEWSLETTER_ENDPOINT_DEFINITIONS,
3799
4078
  ...APPOINTMENT_ENDPOINT_DEFINITIONS,
3800
4079
  ...EVENT_SERIES_REGISTRATION_ENDPOINT_DEFINITIONS
3801
- }, 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 };
4080
+ }, 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 };
3802
4081
  z.object({ refreshToken: z.string().min(1).max(4096) }).strict();
3803
4082
  z.object({
3804
4083
  accessToken: z.string().min(1).max(4096),
@@ -6299,13 +6578,16 @@ const SURFACE_FOREGROUND_CSS_VARS = {
6299
6578
  text: "--rb-surface-text-color",
6300
6579
  heading: "--rb-surface-heading-color",
6301
6580
  link: "--rb-surface-link-color",
6581
+ linkHover: "--rb-surface-link-hover-color",
6302
6582
  supporting: "--rb-surface-supporting-color"
6303
6583
  };
6304
6584
  const DEFAULT_SURFACE_TEXT_COLOR = "rgb(var(--tb-text, 17 24 39))";
6585
+ const DEFAULT_SURFACE_LINK_COLOR = "rgb(var(--tb-primary, var(--tb-text, 17 24 39)))";
6305
6586
  const DEFAULT_ROLE_FALLBACKS = {
6306
6587
  text: DEFAULT_SURFACE_TEXT_COLOR,
6307
6588
  heading: DEFAULT_SURFACE_TEXT_COLOR,
6308
- link: "rgb(var(--tb-primary, var(--tb-text, 17 24 39)))",
6589
+ link: DEFAULT_SURFACE_LINK_COLOR,
6590
+ linkHover: DEFAULT_SURFACE_LINK_COLOR,
6309
6591
  supporting: "rgb(var(--tb-mutedText, 100 116 139))"
6310
6592
  };
6311
6593
  function requireSurfaceColorValue(role, value) {
@@ -6315,10 +6597,12 @@ function requireSurfaceColorValue(role, value) {
6315
6597
  }
6316
6598
  function completeSurfaceForegrounds(input) {
6317
6599
  const text = requireSurfaceColorValue("text", input.text);
6600
+ const link = input.link === void 0 ? text : requireSurfaceColorValue("link", input.link);
6318
6601
  return {
6319
6602
  text,
6320
6603
  heading: input.heading === void 0 ? text : requireSurfaceColorValue("heading", input.heading),
6321
- link: input.link === void 0 ? text : requireSurfaceColorValue("link", input.link),
6604
+ link,
6605
+ linkHover: input.linkHover === void 0 ? link : requireSurfaceColorValue("linkHover", input.linkHover),
6322
6606
  supporting: input.supporting === void 0 ? text : requireSurfaceColorValue("supporting", input.supporting)
6323
6607
  };
6324
6608
  }
@@ -6326,6 +6610,7 @@ function surfaceForegroundValue(role, outsideProviderFallback = DEFAULT_ROLE_FAL
6326
6610
  const roleVariable = SURFACE_FOREGROUND_CSS_VARS[role];
6327
6611
  const fallback = requireSurfaceColorValue("fallback", outsideProviderFallback);
6328
6612
  if (role === "text") return `var(${roleVariable}, ${fallback})`;
6613
+ if (role === "linkHover") return `var(${roleVariable}, ${surfaceForegroundValue("link", fallback)})`;
6329
6614
  return `var(${roleVariable}, var(${SURFACE_FOREGROUND_CSS_VARS.text}, ${fallback}))`;
6330
6615
  }
6331
6616
  function surfaceForegroundValueWithOpacity(role, opacityPercent) {
@@ -6339,9 +6624,25 @@ function surfaceForegroundStyle(input) {
6339
6624
  [SURFACE_FOREGROUND_CSS_VARS.text]: foregrounds.text,
6340
6625
  [SURFACE_FOREGROUND_CSS_VARS.heading]: foregrounds.heading,
6341
6626
  [SURFACE_FOREGROUND_CSS_VARS.link]: foregrounds.link,
6342
- [SURFACE_FOREGROUND_CSS_VARS.supporting]: foregrounds.supporting
6627
+ [SURFACE_FOREGROUND_CSS_VARS.linkHover]: foregrounds.linkHover,
6628
+ [SURFACE_FOREGROUND_CSS_VARS.supporting]: foregrounds.supporting,
6629
+ "--rb-surface-link-hover-decoration": hoverDecoration(input)
6343
6630
  };
6344
6631
  }
6632
+ function surfaceForegroundInputFromResolved(foreground, color) {
6633
+ const { roles } = foreground;
6634
+ return {
6635
+ text: color(roles.text),
6636
+ heading: color(roles.heading),
6637
+ link: color(roles.link),
6638
+ linkHover: color(roles.linkHover),
6639
+ supporting: color(roles.supporting),
6640
+ hoverDecoration: foreground.hoverDecoration
6641
+ };
6642
+ }
6643
+ function hoverDecoration(input) {
6644
+ return input.hoverDecoration ?? "underline";
6645
+ }
6345
6646
  //#endregion
6346
6647
  //#region ../theme-core/src/buttons/constants.ts
6347
6648
  /**
@@ -7096,6 +7397,64 @@ function parseAlpha(source) {
7096
7397
  function isRgbChannel(value) {
7097
7398
  return Number.isFinite(value) && value >= 0 && value <= 255;
7098
7399
  }
7400
+ /**
7401
+ * Derive the hover foreground that belongs with a resolved resting foreground.
7402
+ *
7403
+ * A resting foreground is chosen to be legible against a known surface. A hover
7404
+ * state derived from it stays within a bounded distance of that colour, so it
7405
+ * inherits most of the resting colour's contrast margin instead of asserting
7406
+ * an unrelated brand colour that no one checked against the surface.
7407
+ *
7408
+ * That bounded-distance property is what lets this be used on a transparent
7409
+ * overlay header, where the backdrop is only partly knowable: the scrolled
7410
+ * state composites a 60% glass tint over arbitrary page content, so no
7411
+ * compile-time contrast proof is available there. Staying near a colour that
7412
+ * is already trusted in both states is a weaker claim than a contrast proof,
7413
+ * and it is one this function can actually keep.
7414
+ *
7415
+ * Returns `null` when the resting token is not a plain palette token — an
7416
+ * already-faded or raw value has no well-defined softening, and the caller
7417
+ * should leave hover alone rather than guess.
7418
+ */
7419
+ function deriveForegroundHoverToken(restingToken) {
7420
+ const parts = parseColorTokenParts(restingToken);
7421
+ if (parts.kind !== "token") return null;
7422
+ if (parts.opacityPercent !== null) return null;
7423
+ return parseThemeColorToken(`${parts.token}/85`);
7424
+ }
7425
+ /**
7426
+ * Prefer an authored hover that survives every measured backdrop, then a
7427
+ * checked softening of the resting colour. A null backdrop set represents a
7428
+ * trusted treatment: only an explicit authored hover may change the colour.
7429
+ * When neither option works, retain the resting colour and underline it.
7430
+ */
7431
+ function planForegroundHover(input) {
7432
+ const { restingToken, candidate, palette, backdrops } = input;
7433
+ if (candidate && candidate !== restingToken) {
7434
+ if (backdrops === null || survivesEveryBackdrop(candidate, palette, backdrops)) return {
7435
+ kind: "candidate",
7436
+ token: candidate,
7437
+ decoration: "initial"
7438
+ };
7439
+ }
7440
+ const softened = deriveForegroundHoverToken(restingToken);
7441
+ if (softened && backdrops && survivesEveryBackdrop(softened, palette, backdrops)) return {
7442
+ kind: "softened",
7443
+ token: softened,
7444
+ decoration: "initial"
7445
+ };
7446
+ return {
7447
+ kind: "resting",
7448
+ token: restingToken,
7449
+ decoration: "underline"
7450
+ };
7451
+ }
7452
+ function survivesEveryBackdrop(token, palette, backdrops) {
7453
+ return backdrops.length > 0 && backdrops.every((backdrop) => {
7454
+ const foreground = resolveOpaqueSurfaceHex(token, palette, backdrop);
7455
+ return foreground !== null && contrastRatio(foreground, backdrop) >= 4.5;
7456
+ });
7457
+ }
7099
7458
  //#endregion
7100
7459
  //#region ../theme-core/src/surfaces/resolveSurfaceForeground.ts
7101
7460
  const FALLBACK_TEXT_TOKENS = [
@@ -7142,12 +7501,16 @@ function resolveSurfaceForeground(background, palette, candidates = {}, options
7142
7501
  }
7143
7502
  function foregroundCandidates(background, overrides) {
7144
7503
  return {
7145
- text: overrides.text ?? background?.textColor ?? null,
7146
- heading: overrides.heading ?? background?.headingColor ?? null,
7147
- link: overrides.link ?? background?.linkColor ?? null,
7148
- supporting: overrides.supporting ?? background?.supportingColor ?? null
7504
+ text: candidateOrBackground(overrides.text, background?.textColor),
7505
+ heading: candidateOrBackground(overrides.heading, background?.headingColor),
7506
+ link: candidateOrBackground(overrides.link, background?.linkColor),
7507
+ linkHover: candidateOrBackground(overrides.linkHover),
7508
+ supporting: candidateOrBackground(overrides.supporting, background?.supportingColor)
7149
7509
  };
7150
7510
  }
7511
+ function candidateOrBackground(candidate, backgroundValue) {
7512
+ return candidate ?? backgroundValue ?? null;
7513
+ }
7151
7514
  function resolveDeterministicForeground(backgroundReference, candidates, palette, compositeBase) {
7152
7515
  const backgroundHex = resolveOpaqueSurfaceHex(backgroundReference, palette, compositeBase);
7153
7516
  if (!backgroundHex) return resolveTrustedTreatmentForeground(candidates, palette);
@@ -7159,29 +7522,51 @@ function resolveDeterministicForeground(backgroundReference, candidates, palette
7159
7522
  ...FALLBACK_TEXT_TOKENS
7160
7523
  ], backgroundHex, palette, derivedOnToken ? [derivedOnToken] : []);
7161
7524
  if (!text) return { kind: "unknown" };
7162
- return {
7163
- kind: "known",
7164
- roles: {
7165
- text,
7166
- heading: safeTokenOr(candidates.heading, text, backgroundHex, palette),
7167
- link: safeTokenOr(candidates.link, text, backgroundHex, palette),
7168
- supporting: safeTokenOr(candidates.supporting, text, backgroundHex, palette)
7169
- }
7170
- };
7525
+ return knownForeground({
7526
+ text,
7527
+ heading: safeTokenOr(candidates.heading, text, backgroundHex, palette),
7528
+ link: safeTokenOr(candidates.link, text, backgroundHex, palette),
7529
+ supporting: safeTokenOr(candidates.supporting, text, backgroundHex, palette)
7530
+ }, {
7531
+ kind: "measured",
7532
+ backdropHex: backgroundHex
7533
+ }, candidates.linkHover, palette);
7171
7534
  }
7172
7535
  function resolveTrustedTreatmentForeground(candidates, palette) {
7173
7536
  const text = canonicalToken(candidates.text, palette);
7174
7537
  if (!text) return { kind: "unknown" };
7538
+ return knownForeground({
7539
+ text,
7540
+ heading: canonicalToken(candidates.heading, palette) ?? text,
7541
+ link: canonicalToken(candidates.link, palette) ?? text,
7542
+ supporting: canonicalToken(candidates.supporting, palette) ?? text
7543
+ }, { kind: "trusted-treatment" }, candidates.linkHover, palette);
7544
+ }
7545
+ function knownForeground(roles, provenance, hoverCandidate, palette) {
7546
+ const hover = planForegroundHover({
7547
+ restingToken: roles.link,
7548
+ candidate: canonicalHoverToken(hoverCandidate, palette),
7549
+ palette,
7550
+ backdrops: provenance.kind === "measured" ? [provenance.backdropHex] : null
7551
+ });
7175
7552
  return {
7176
7553
  kind: "known",
7554
+ provenance,
7177
7555
  roles: {
7178
- text,
7179
- heading: canonicalToken(candidates.heading, palette) ?? text,
7180
- link: canonicalToken(candidates.link, palette) ?? text,
7181
- supporting: canonicalToken(candidates.supporting, palette) ?? text
7182
- }
7556
+ ...roles,
7557
+ linkHover: hover.token
7558
+ },
7559
+ hoverDecoration: hover.decoration
7183
7560
  };
7184
7561
  }
7562
+ function canonicalHoverToken(reference, palette) {
7563
+ const token = parseThemeColorToken(reference);
7564
+ if (token) {
7565
+ const parts = parseColorTokenParts(token);
7566
+ if (parts.kind === "token" && resolveConcreteColorHex(parts.token, palette)) return token;
7567
+ }
7568
+ return canonicalToken(reference, palette);
7569
+ }
7185
7570
  function safeTokenOr(candidate, fallback, backgroundHex, palette) {
7186
7571
  return firstSafeToken([candidate], backgroundHex, palette) ?? fallback;
7187
7572
  }
@@ -10121,6 +10506,43 @@ const effectCompositionSchema = z.object({
10121
10506
  /** Effects applied on focus */
10122
10507
  focus: z.array(effectApplicationSchema).optional()
10123
10508
  });
10509
+ const policiesById = {
10510
+ "darken-background": "other",
10511
+ "lighten-background": "other",
10512
+ "fade-background": "other",
10513
+ "opacity-reduce": "other",
10514
+ "animated-gradient": "other",
10515
+ "background-on-hover": "paired-hover",
10516
+ "background-on-hover-alpha": "paired-hover",
10517
+ "border-glow": "other",
10518
+ "drop-shadow": "other",
10519
+ "inner-shadow": "other",
10520
+ "neumorphic-shadow": "other",
10521
+ "outer-glow": "other",
10522
+ "retro-3d-shadow": "other",
10523
+ "scale-up": "other",
10524
+ "scale-down": "other",
10525
+ lift: "other",
10526
+ "press-down": "other",
10527
+ pop: "other",
10528
+ "aurora-glow": "other",
10529
+ "cosmic-stardust": "other",
10530
+ "gradient-border-fill": "other",
10531
+ "animated-gradient-border-fill": "other",
10532
+ "border-bottom-grow": "other",
10533
+ "gradient-text": "other",
10534
+ "text-color-change": "text-colour",
10535
+ "border-color-change": "other",
10536
+ "sketchy-border": "other",
10537
+ "pulse-animation": "other",
10538
+ "nav-underline": "underline",
10539
+ "nav-frosted-base": "other",
10540
+ "nav-frosted-hover": "other",
10541
+ "nav-frosted-active": "other"
10542
+ };
10543
+ function navEffectPolicy(effectId) {
10544
+ return policiesById[effectId] ?? null;
10545
+ }
10124
10546
  //#endregion
10125
10547
  //#region ../theme-core/src/navigation/types.ts
10126
10548
  /**
@@ -10209,6 +10631,16 @@ const navLinkStyleSchema = z.object({
10209
10631
  /** Composable effects */
10210
10632
  effects: effectCompositionSchema.optional()
10211
10633
  });
10634
+ function navLinkHoverColorCandidate(style) {
10635
+ const effect = style?.effects?.hover?.find((item) => navEffectPolicy(item.effectId) === "text-colour");
10636
+ return parseThemeColorToken(effect?.options?.hoverColorToken ?? style?.hoverColorToken);
10637
+ }
10638
+ function navLinkOwnsHoverForeground(style) {
10639
+ return style?.effects?.hover?.some((effect) => navEffectPolicy(effect.effectId) === "paired-hover") ?? false;
10640
+ }
10641
+ function navLinkOwnsUnderline(style) {
10642
+ return style?.effects?.hover?.some((effect) => navEffectPolicy(effect.effectId) === "underline") ?? false;
10643
+ }
10212
10644
  //#endregion
10213
10645
  //#region ../theme-core/src/customCss/validation.ts
10214
10646
  /**
@@ -16397,6 +16829,14 @@ const blockDesignFallback = {
16397
16829
  };
16398
16830
  blockDesignFallback.sectionSurface, blockDesignFallback.contentFrame, blockDesignFallback.sectionHeight, blockDesignFallback.heroLegibility, blockDesignFallback.imageSurfaceTreatment, blockDesignFallback.imageSurfaceMotion, blockDesignFallback.tileTreatment, blockDesignFallback.eventListTreatment, blockDesignFallback.eyebrowTreatment, blockDesignFallback.accordionIconTreatment, blockDesignFallback.composition;
16399
16831
  //#endregion
16832
+ //#region ../theme-core/src/header/rootPaint.ts
16833
+ /** The nav container takes precedence when a floating header also has one. */
16834
+ function headerRootPaint(header) {
16835
+ const navContainerType = header?.navContainer?.type ?? "none";
16836
+ if (navContainerType === "glass" || navContainerType === "pill") return "contained-nav";
16837
+ return header?.variant === "floating" ? "overlay" : "own-surface";
16838
+ }
16839
+ //#endregion
16400
16840
  //#region ../theme-core/src/site-styles/siteChromeBackgrounds.ts
16401
16841
  const siteChromeBackgroundColorTokens = toSiteChromeBackgroundColorTokens(backgroundAppearanceColorTokenNames);
16402
16842
  const quickSiteChromeBackgroundColorTokens = toSiteChromeBackgroundColorTokens(backgroundAppearanceQuickColorTokenNames);
@@ -16576,6 +17016,259 @@ z.object(headerPreferencesShape).omit({
16576
17016
  structure: true
16577
17017
  }).strict();
16578
17018
  //#endregion
17019
+ //#region ../theme-core/src/navigation/presets.ts
17020
+ /**
17021
+ * Built-in nav link style presets
17022
+ *
17023
+ * Each preset uses composable effects to achieve its look.
17024
+ */
17025
+ const NAV_LINK_PRESETS = {
17026
+ /**
17027
+ * Minimal - subtle color change on hover
17028
+ */
17029
+ minimal: {
17030
+ name: "Minimal",
17031
+ typography: "body",
17032
+ fontWeight: "medium",
17033
+ textTransform: "none",
17034
+ italic: false,
17035
+ colorToken: "text",
17036
+ hoverColorToken: "primary",
17037
+ padding: "none",
17038
+ borderRadius: "none",
17039
+ effects: { hover: [{
17040
+ effectId: "text-color-change",
17041
+ options: { hoverColorToken: "primary" }
17042
+ }] }
17043
+ },
17044
+ /**
17045
+ * Underline - static underline appears on hover
17046
+ */
17047
+ underline: {
17048
+ name: "Underline",
17049
+ typography: "body",
17050
+ fontWeight: "medium",
17051
+ textTransform: "none",
17052
+ italic: false,
17053
+ colorToken: "text",
17054
+ padding: "none",
17055
+ borderRadius: "none",
17056
+ effects: { hover: [{
17057
+ effectId: "nav-underline",
17058
+ options: { style: "static" }
17059
+ }] }
17060
+ },
17061
+ /**
17062
+ * Underline Grow - animated underline grows from center on hover
17063
+ */
17064
+ "underline-grow": {
17065
+ name: "Underline Grow",
17066
+ typography: "body",
17067
+ fontWeight: "medium",
17068
+ textTransform: "none",
17069
+ italic: false,
17070
+ colorToken: "text",
17071
+ padding: "none",
17072
+ borderRadius: "none",
17073
+ effects: { hover: [{
17074
+ effectId: "nav-underline",
17075
+ options: { style: "grow" }
17076
+ }] }
17077
+ },
17078
+ /**
17079
+ * Capsule - pill-shaped background on hover
17080
+ */
17081
+ capsule: {
17082
+ name: "Capsule",
17083
+ typography: "body",
17084
+ fontWeight: "medium",
17085
+ textTransform: "none",
17086
+ italic: false,
17087
+ colorToken: "text",
17088
+ padding: "compact",
17089
+ borderRadius: "full",
17090
+ effects: {
17091
+ hover: [{
17092
+ effectId: "background-on-hover-alpha",
17093
+ options: {
17094
+ colorToken: "primary",
17095
+ opacity: 10
17096
+ }
17097
+ }],
17098
+ active: [{
17099
+ effectId: "background-on-hover-alpha",
17100
+ options: {
17101
+ colorToken: "primary",
17102
+ opacity: 15
17103
+ }
17104
+ }]
17105
+ }
17106
+ },
17107
+ /**
17108
+ * Solid - solid background color on hover
17109
+ */
17110
+ solid: {
17111
+ name: "Solid",
17112
+ typography: "body",
17113
+ fontWeight: "medium",
17114
+ textTransform: "none",
17115
+ italic: false,
17116
+ colorToken: "text",
17117
+ padding: "compact",
17118
+ borderRadius: "none",
17119
+ effects: {
17120
+ hover: [{
17121
+ effectId: "background-on-hover",
17122
+ options: {
17123
+ colorToken: "primary",
17124
+ textColorToken: "primaryForeground"
17125
+ }
17126
+ }],
17127
+ active: [{
17128
+ effectId: "background-on-hover",
17129
+ options: {
17130
+ colorToken: "primary",
17131
+ textColorToken: "primaryForeground"
17132
+ }
17133
+ }]
17134
+ }
17135
+ },
17136
+ /**
17137
+ * Scale - gentle scale-up on hover
17138
+ */
17139
+ scale: {
17140
+ name: "Scale",
17141
+ typography: "body",
17142
+ fontWeight: "medium",
17143
+ textTransform: "none",
17144
+ italic: false,
17145
+ colorToken: "text",
17146
+ padding: "none",
17147
+ borderRadius: "none",
17148
+ effects: { hover: [{
17149
+ effectId: "scale-up",
17150
+ options: { scale: 1.05 }
17151
+ }] }
17152
+ },
17153
+ /**
17154
+ * Frosted - semi-transparent glass-like background
17155
+ */
17156
+ frosted: {
17157
+ name: "Frosted",
17158
+ typography: "body",
17159
+ fontWeight: "medium",
17160
+ textTransform: "none",
17161
+ italic: false,
17162
+ colorToken: "text",
17163
+ padding: "compact",
17164
+ borderRadius: "md",
17165
+ effects: {
17166
+ base: [{ effectId: "nav-frosted-base" }],
17167
+ hover: [{ effectId: "nav-frosted-hover" }],
17168
+ active: [{ effectId: "nav-frosted-active" }]
17169
+ }
17170
+ }
17171
+ };
17172
+ /**
17173
+ * Get a nav link style preset by ID
17174
+ */
17175
+ function getNavLinkPreset(presetId) {
17176
+ return NAV_LINK_PRESETS[presetId];
17177
+ }
17178
+ Object.keys(NAV_LINK_PRESETS);
17179
+ //#endregion
17180
+ //#region ../theme-core/src/header/legacyNavLinkStyle.ts
17181
+ function buildLegacyHeaderNavLinkStyle(header, contrastTreatment, navTextSize) {
17182
+ const navStyle = header.navStyle ?? "minimal";
17183
+ const basePreset = getNavLinkPreset(navStyle);
17184
+ if (!basePreset) return null;
17185
+ const style = {
17186
+ ...basePreset,
17187
+ fontWeight: header.navWeight ?? basePreset.fontWeight,
17188
+ colorToken: (header.navColor ?? header.textColor)?.trim() || basePreset.colorToken,
17189
+ ...contrastTreatment ? { contrastTreatment } : {},
17190
+ ...navTextSize ? { textSize: navTextSize } : {}
17191
+ };
17192
+ if (header.navWeight === "bold" && navStyle === "solid") style.textTransform = "uppercase";
17193
+ applyLegacyGlassTreatment(style, header, navStyle);
17194
+ return style;
17195
+ }
17196
+ function applyLegacyGlassTreatment(style, header, navStyle) {
17197
+ if (header.navContainer?.type !== "glass" || navStyle !== "minimal") return;
17198
+ style.borderRadius = "full";
17199
+ style.effects = {
17200
+ ...style.effects,
17201
+ hover: glassStateEffects(10),
17202
+ active: glassStateEffects(18)
17203
+ };
17204
+ }
17205
+ function glassStateEffects(opacity) {
17206
+ return [{
17207
+ effectId: "background-on-hover-alpha",
17208
+ options: {
17209
+ colorToken: "neutral-50",
17210
+ opacity
17211
+ }
17212
+ }, {
17213
+ effectId: "text-color-change",
17214
+ options: { hoverColorToken: "neutral-50" }
17215
+ }];
17216
+ }
17217
+ //#endregion
17218
+ //#region ../theme-core/src/header/openingForegroundProjection.ts
17219
+ function readOpeningForegroundProjection(header) {
17220
+ return header?.__runtimeOpeningForeground ?? null;
17221
+ }
17222
+ //#endregion
17223
+ //#region ../theme-core/src/header/effectiveNavLinkStyle.ts
17224
+ function effectiveHeaderNavLinkStyle(header, contrastTreatment = null, navTextSize = null) {
17225
+ if (!header) return null;
17226
+ if (!header.navLinkStyle) return buildLegacyHeaderNavLinkStyle(header, contrastTreatment, navTextSize);
17227
+ return {
17228
+ ...header.navLinkStyle,
17229
+ ...contrastTreatment ? { contrastTreatment } : {},
17230
+ ...navTextSize ? { textSize: navTextSize } : {}
17231
+ };
17232
+ }
17233
+ function headerForegroundCandidates(header) {
17234
+ if (!header) return {};
17235
+ const style = effectiveHeaderNavLinkStyle(header);
17236
+ return {
17237
+ text: header.textColor ?? header.background?.textColor,
17238
+ link: style?.colorToken ?? header.navColor ?? header.textColor,
17239
+ linkHover: navLinkHoverColorCandidate(style)
17240
+ };
17241
+ }
17242
+ function headerLeafTextColor(header) {
17243
+ if (!header) return "text";
17244
+ return header.textColor ?? header.navColor ?? header.background?.textColor ?? header.navLinkStyle?.colorToken ?? "text";
17245
+ }
17246
+ /** Transparent chrome must reset the whole contract on its own root. */
17247
+ function transparentHeaderForegroundInput(header, palette) {
17248
+ const projection = readOpeningForegroundProjection(header);
17249
+ if (projection?.kind === "known") return surfaceForegroundInputFromResolved(projection, rgbColorValue);
17250
+ return authoredTransparentHeaderForegroundInput(header, palette);
17251
+ }
17252
+ function authoredTransparentHeaderForegroundInput(header, palette) {
17253
+ const text = headerLeafTextColor(header);
17254
+ const style = effectiveHeaderNavLinkStyle(header);
17255
+ const link = style?.colorToken ?? text;
17256
+ const restingToken = parseThemeColorToken(link) ?? parseThemeColorToken("text");
17257
+ if (!restingToken) throw new Error("Built-in text colour token is invalid");
17258
+ const hover = planForegroundHover({
17259
+ restingToken,
17260
+ candidate: navLinkOwnsHoverForeground(style) ? null : navLinkHoverColorCandidate(style),
17261
+ palette,
17262
+ backdrops: null
17263
+ });
17264
+ return {
17265
+ text: rgbColorValue(text),
17266
+ link: rgbColorValue(link),
17267
+ linkHover: rgbColorValue(hover.token),
17268
+ hoverDecoration: navLinkOwnsUnderline(style) ? "initial" : hover.decoration
17269
+ };
17270
+ }
17271
+ //#endregion
16579
17272
  //#region ../theme-core/src/site-styles/pageDesignAuthority.ts
16580
17273
  const nonEmptyStringSchema = z.string().min(1);
16581
17274
  const blockContentVersionIdSchema = nonEmptyStringSchema.transform(asBlockContentVersionId);
@@ -16728,6 +17421,28 @@ z.object({
16728
17421
  motion: z.enum(themeTokenRecipeOptions.motion)
16729
17422
  });
16730
17423
  //#endregion
17424
+ //#region ../theme-core/src/footer/effectiveNavLinkStyle.ts
17425
+ function effectiveFooterNavLinkStyle(footer) {
17426
+ if (!footer) return null;
17427
+ if (footer.navLinkStyle) return footer.navLinkStyle;
17428
+ const basePreset = getNavLinkPreset(footer.navStyle ?? "minimal");
17429
+ if (!basePreset) return null;
17430
+ return {
17431
+ ...basePreset,
17432
+ fontWeight: footer.navWeight ?? basePreset.fontWeight,
17433
+ colorToken: footer.navColor?.trim() || basePreset.colorToken
17434
+ };
17435
+ }
17436
+ function footerForegroundCandidates(footer, proseHoverCandidate) {
17437
+ if (!footer) return {};
17438
+ const style = effectiveFooterNavLinkStyle(footer);
17439
+ return {
17440
+ text: footer.background?.textColor,
17441
+ link: style?.colorToken ?? footer.navColor ?? footer.background?.textColor,
17442
+ linkHover: navLinkOwnsHoverForeground(style) ? proseHoverCandidate : navLinkHoverColorCandidate(style)
17443
+ };
17444
+ }
17445
+ //#endregion
16731
17446
  //#region ../theme-core/src/siteChromeOverlayClearance.ts
16732
17447
  const SITE_CHROME_VISIBLE_HEADER_ATTR = "data-site-chrome-visible-header";
16733
17448
  //#endregion
@@ -19701,33 +20416,28 @@ function resolveBackgroundColorValue(value, context) {
19701
20416
  //#endregion
19702
20417
  //#region ../blocks/src/system/transforms/registry/_utils/surfaceForegroundStyles.ts
19703
20418
  const contextualButtonStylesCache = /* @__PURE__ */ new WeakMap();
19704
- function resolveHeaderLeafTextColor(header) {
19705
- return header?.textColor ?? header?.navColor ?? header?.background?.textColor ?? header?.navLinkStyle?.colorToken ?? "text";
19706
- }
19707
20419
  function resolveHeaderRootForeground(header, palette, isTransparent) {
19708
- if (isTransparent) return { kind: "unknown" };
20420
+ if (isTransparent) return readOpeningForegroundProjection(header) ?? { kind: "unknown" };
19709
20421
  const background = header?.background;
19710
20422
  return resolveSurfaceForeground(background ?? {
19711
20423
  type: "color",
19712
20424
  color: "surface"
19713
- }, palette, {
19714
- text: header?.textColor ?? background?.textColor,
19715
- link: header?.navLinkStyle?.colorToken ?? header?.navColor ?? header?.textColor
19716
- });
20425
+ }, palette, headerForegroundCandidates(header));
20426
+ }
20427
+ function resolveFooterRootForeground(footer, palette, proseHoverCandidate) {
20428
+ return resolveSurfaceForeground(footer?.background ?? {
20429
+ type: "color",
20430
+ color: "surface"
20431
+ }, palette, footerForegroundCandidates(footer, proseHoverCandidate), { compositeBase: "background" });
19717
20432
  }
19718
20433
  function resolveSurfaceForegroundStyles(value, context, options) {
19719
20434
  const input = parseBackgroundContent(value);
19720
- const foreground = input ? resolveSurfaceForeground(input, context.theme.palette, {}, { compositeBase: options?.fallbackToken }) : { kind: "unknown" };
20435
+ const foreground = input ? resolveSurfaceForeground(input, context.theme.palette, { linkHover: context.proseHoverCandidate }, { compositeBase: options?.fallbackToken }) : { kind: "unknown" };
19721
20436
  const buttonStyles = resolveContextualButtonStyles(input, foreground, context, options);
19722
20437
  if (foreground.kind === "unknown") return buttonStyles;
19723
20438
  return {
19724
20439
  ...buttonStyles,
19725
- ...surfaceForegroundStyle({
19726
- text: resolveBackgroundColorValue(foreground.roles.text, context),
19727
- heading: resolveBackgroundColorValue(foreground.roles.heading, context),
19728
- link: resolveBackgroundColorValue(foreground.roles.link, context),
19729
- supporting: resolveBackgroundColorValue(foreground.roles.supporting, context)
19730
- })
20440
+ ...surfaceForegroundStyle(surfaceForegroundInputFromResolved(foreground, (token) => resolveBackgroundColorValue(token, context)))
19731
20441
  };
19732
20442
  }
19733
20443
  function resolveContextualButtonStyles(background, foreground, context, options) {
@@ -25543,10 +26253,7 @@ function resolveBackgroundVisualStyles(backgroundColor, defaultToken = "surface"
25543
26253
  };
25544
26254
  }
25545
26255
  function resolveHeaderVisualStyles(header) {
25546
- const navContainerType = header?.navContainer?.type ?? "none";
25547
- const hasContainedNav = navContainerType === "glass" || navContainerType === "pill";
25548
- const hasOverlayVariant = header?.variant === "floating";
25549
- if (hasContainedNav || hasOverlayVariant) return {
26256
+ if (headerRootPaint(header) !== "own-surface") return {
25550
26257
  backgroundToken: "transparent",
25551
26258
  isTransparent: true
25552
26259
  };
@@ -25557,23 +26264,7 @@ function resolveHeaderVisualStyles(header) {
25557
26264
  }
25558
26265
  function resolvedForegroundStyle(foreground) {
25559
26266
  if (foreground.kind === "unknown") return void 0;
25560
- const { roles } = foreground;
25561
- return surfaceForegroundStyle({
25562
- text: rgbColorValue(roles.text),
25563
- heading: rgbColorValue(roles.heading),
25564
- link: rgbColorValue(roles.link),
25565
- supporting: rgbColorValue(roles.supporting)
25566
- });
25567
- }
25568
- function resolveFooterRootForeground(footer, palette) {
25569
- const background = footer?.background;
25570
- return resolveSurfaceForeground(background ?? {
25571
- type: "color",
25572
- color: "surface"
25573
- }, palette, {
25574
- text: background?.textColor,
25575
- link: footer?.navLinkStyle?.colorToken ?? footer?.navColor ?? background?.textColor
25576
- });
26267
+ return surfaceForegroundStyle(surfaceForegroundInputFromResolved(foreground, rgbColorValue));
25577
26268
  }
25578
26269
  function footerBottomBarBorderWidthStyle(width) {
25579
26270
  if (!width) return void 0;
@@ -25600,8 +26291,7 @@ const headerRootClassTransform = {
25600
26291
  const placement = planSiteChromePlacement(parseHeaderPositioning(content.positioning));
25601
26292
  const header = asPartialObject(value);
25602
26293
  const visuals = resolveHeaderVisualStyles(header);
25603
- const navContainerType = header?.navContainer?.type ?? "none";
25604
- const hasContainedNav = navContainerType === "glass" || navContainerType === "pill";
26294
+ const hasContainedNav = headerRootPaint(header) === "contained-nav";
25605
26295
  const backgroundClass = visuals.isTransparent || hasContainedNav ? "rb-bg-transparent" : null;
25606
26296
  const classes = [config.base, backgroundClass];
25607
26297
  if (!hasContainedNav) {
@@ -25644,7 +26334,7 @@ const headerRootStyleTransform = {
25644
26334
  run: (value, _options, context) => {
25645
26335
  const header = asPartialObject(value);
25646
26336
  const visuals = resolveHeaderVisualStyles(header);
25647
- return mergeStyles(resolvedForegroundStyle(resolveHeaderRootForeground(header, context.theme.palette, visuals.isTransparent)) ?? { color: rgbColorValue(resolveHeaderLeafTextColor(header)) }, borderColorStyle(header?.border?.colorToken ?? "border"));
26337
+ 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"));
25648
26338
  }
25649
26339
  };
25650
26340
  const headerSectionBackgroundTransform = {
@@ -25652,9 +26342,7 @@ const headerSectionBackgroundTransform = {
25652
26342
  kind: "string",
25653
26343
  summary: "Resolve the inner site-header section background token",
25654
26344
  run: (value) => {
25655
- const header = asPartialObject(value);
25656
- const navContainerType = header?.navContainer?.type ?? "none";
25657
- return header?.variant === "floating" || navContainerType === "glass" || navContainerType === "pill" ? "raw:transparent" : "background";
26345
+ return headerRootPaint(asPartialObject(value)) !== "own-surface" ? "raw:transparent" : "background";
25658
26346
  }
25659
26347
  };
25660
26348
  const footerRootStyleTransform = {
@@ -25672,7 +26360,7 @@ const footerRootStyleTransform = {
25672
26360
  styleParts.push(backgroundColorStyle(token));
25673
26361
  }
25674
26362
  }
25675
- styleParts.push(resolvedForegroundStyle(resolveFooterRootForeground(footer, context.theme.palette)));
26363
+ styleParts.push(resolvedForegroundStyle(resolveFooterRootForeground(footer, context.theme.palette, context.proseHoverCandidate)));
25676
26364
  styleParts.push(borderColorStyle("border"));
25677
26365
  return mergeStyles(...styleParts);
25678
26366
  }
@@ -25734,22 +26422,28 @@ const footerBottomBarStyleTransform = {
25734
26422
  run: (value, _options, context) => {
25735
26423
  const footer = asPartialObject(value);
25736
26424
  const bottomBar = footer?.bottomBar;
25737
- const styleParts = [];
25738
- const background = bottomBar?.background;
25739
- if (background?.type === "color") styleParts.push(backgroundColorStyle(background.color ?? "surface"));
25740
- styleParts.push(borderColorStyle(bottomBar?.borderTop?.colorToken ?? "border"), footerBottomBarBorderWidthStyle(bottomBar?.borderTop?.width));
25741
- const foreground = resolveSurfaceForeground(background?.type === "color" ? background : {
25742
- type: "color",
25743
- color: "transparent"
25744
- }, context.theme.palette, {
25745
- text: bottomBar?.textColor,
25746
- link: footer?.bottomTextLinkStyle?.colorToken ?? bottomBar?.textColor
25747
- });
25748
- if (background?.type === "color") styleParts.push(resolvedForegroundStyle(foreground));
25749
- else if (bottomBar?.textColor) styleParts.push(textColorStyle(bottomBar.textColor));
25750
- return mergeStyles(...styleParts);
26425
+ 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));
25751
26426
  }
25752
26427
  };
26428
+ function footerBottomBarForegroundStyle(footer, palette) {
26429
+ if (!footer?.bottomBar) return void 0;
26430
+ const bar = footer.bottomBar;
26431
+ if (bar.background?.type !== "color") return backgroundlessBottomBarForegroundStyle(footer);
26432
+ return resolvedForegroundStyle(resolveSurfaceForeground(bar.background, palette, {
26433
+ text: bar.textColor,
26434
+ link: footer.bottomTextLinkStyle?.colorToken ?? bar.textColor,
26435
+ linkHover: footer.bottomTextLinkStyle?.hoverColorToken
26436
+ }, { compositeBase: measuredFooterBackdrop(footer, palette) }));
26437
+ }
26438
+ function backgroundlessBottomBarForegroundStyle(footer) {
26439
+ if (footer.background?.contentOwner === "site-chrome-editor") return;
26440
+ const textColor = footer.bottomBar?.textColor;
26441
+ return textColor ? textColorStyle(textColor) : void 0;
26442
+ }
26443
+ function measuredFooterBackdrop(footer, palette) {
26444
+ const foreground = resolveFooterRootForeground(footer, palette);
26445
+ return foreground.kind === "known" && foreground.provenance.kind === "measured" ? foreground.provenance.backdropHex : null;
26446
+ }
25753
26447
  const footerSplitMainClassTransform = {
25754
26448
  id: "layout.footerSplitMainClass",
25755
26449
  kind: "string",
@@ -25845,7 +26539,7 @@ function chromeSurfaceTextToken(surface, theme, palette) {
25845
26539
  case "header-root": {
25846
26540
  const header = theme.header;
25847
26541
  const foreground = resolveHeaderRootForeground(header, palette, resolveHeaderVisualStyles(header).isTransparent);
25848
- return foreground.kind === "known" ? foreground.roles.text : resolveHeaderLeafTextColor(header);
26542
+ return foreground.kind === "known" ? foreground.roles.text : headerLeafTextColor(header);
25849
26543
  }
25850
26544
  case "header-mobile-panel": return theme.header?.dropdownStyle?.textColor ?? "text";
25851
26545
  case "footer-root": {
@@ -27926,13 +28620,19 @@ const bookingDescription = richText({}, bind("content.description"), when("conte
27926
28620
  * that hydration never rewrites.
27927
28621
  */
27928
28622
  const bookingWizard = bookingForm(withApiBindings({
28623
+ demoEmailSuppressed: { $bind: {
28624
+ from: "$root.demoEmailSuppressed",
28625
+ fallback: false
28626
+ } },
27929
28627
  portalToken: { $bind: {
27930
28628
  from: "$root.portalToken",
27931
28629
  fallback: null
27932
28630
  } },
27933
28631
  formId: { $bind: { from: "content.formId" } },
27934
28632
  form: { $bind: { from: "data.form" } },
27935
- services: { $bind: { from: "data.services" } }
28633
+ services: { $bind: { from: "data.services" } },
28634
+ mailingList: { $bind: { from: "$root.mailingList" } },
28635
+ siteName: { $bind: { from: "$root.siteName" } }
27936
28636
  }));
27937
28637
  /** Both variants sit in the same section shell; only the inner layout differs. */
27938
28638
  function bookingSection(children) {
@@ -28727,7 +29427,6 @@ const publicEventBaseSchema = z.object({
28727
29427
  description: z.string().nullable(),
28728
29428
  content: z.object({ body: RichTextDocSchema.nullable().optional() }).optional(),
28729
29429
  presentation: z.object({
28730
- cardTitleOverride: z.string().nullable().optional(),
28731
29430
  summary: z.string().nullable().optional(),
28732
29431
  image: mediaSchema.nullable().optional()
28733
29432
  }).optional(),
@@ -28760,6 +29459,7 @@ const publicEventBaseSchema = z.object({
28760
29459
  "archived"
28761
29460
  ]).optional(),
28762
29461
  timeZone: z.string(),
29462
+ siteTimeZone: z.string().optional(),
28763
29463
  pricing: publicEventPricingSchema,
28764
29464
  paymentTerms: blockBookingPaymentTermsSchema,
28765
29465
  cancellationPolicy: z.object({ refunds: z.object({
@@ -29423,6 +30123,7 @@ const EVENT_REGISTRATION_SHELL_STEP_LABELS = [
29423
30123
  ];
29424
30124
  const eventRegistrationPublicEventSchema = z.preprocess(normalizeEventRegistrationEventInput, publicEventSchema);
29425
30125
  const eventRegistrationHydrationSchemaShape = {
30126
+ demoEmailSuppressed: z.boolean().optional(),
29426
30127
  occurrenceContext: occurrenceContextSchema.optional(),
29427
30128
  subject: eventRegistrationPageSurfaceSubjectSchema.nullable().optional(),
29428
30129
  maxTickets: z.string().optional(),
@@ -29434,7 +30135,13 @@ const eventRegistrationHydrationSchemaShape = {
29434
30135
  spamProtectionEnabled: z.boolean().optional(),
29435
30136
  supportEmail: z.string().optional(),
29436
30137
  sitePasses: publicPassProductCollectionSchema.nullable().optional(),
29437
- siteMemberships: publicMembershipProductCollectionSchema.nullable().optional()
30138
+ siteMemberships: publicMembershipProductCollectionSchema.nullable().optional(),
30139
+ mailingList: z.unknown().transform((value) => {
30140
+ if (value === void 0) return void 0;
30141
+ const parsed = parseMailingListRuntimeContext(value);
30142
+ return parsed.ok ? parsed.value : void 0;
30143
+ }),
30144
+ siteName: z.string().optional()
29438
30145
  };
29439
30146
  const eventRegistrationEventSourceSchema = z.discriminatedUnion("kind", [z.object({
29440
30147
  kind: z.literal("loaded"),
@@ -29597,6 +30304,7 @@ const eventRegistrationBlockRuntime = defineClientOwnedBlockRuntime({
29597
30304
  ...eventSource,
29598
30305
  events: [...scopedSourceEvents]
29599
30306
  } : eventSource,
30307
+ demoEmailSuppressed: source.demoEmailSuppressed,
29600
30308
  maxTickets: source.maxTickets ?? void 0,
29601
30309
  showVenue: source.showVenue,
29602
30310
  showCapacity: source.showCapacity,
@@ -29606,7 +30314,9 @@ const eventRegistrationBlockRuntime = defineClientOwnedBlockRuntime({
29606
30314
  spamProtectionEnabled: source.spamProtectionEnabled,
29607
30315
  supportEmail: source.supportEmail,
29608
30316
  sitePasses: source.sitePasses ?? null,
29609
- siteMemberships: source.siteMemberships ?? null
30317
+ siteMemberships: source.siteMemberships ?? null,
30318
+ mailingList: source.mailingList,
30319
+ siteName: source.siteName
29610
30320
  }
29611
30321
  };
29612
30322
  }
@@ -29723,8 +30433,8 @@ const eventRegistrationBlockDefinition = {
29723
30433
  description: "Message shown after successful registration",
29724
30434
  required: false,
29725
30435
  multiline: true,
29726
- defaultValue: "Thank you for registering! Check your email for confirmation details.",
29727
- maxLength: 500
30436
+ maxLength: 500,
30437
+ ui: { placeholder: "Thank you for registering! Check your email for confirmation details." }
29728
30438
  },
29729
30439
  {
29730
30440
  id: "buttonText",
@@ -29745,6 +30455,10 @@ const eventRegistrationBlockDefinition = {
29745
30455
  text({ as: "h2" }, bind("content.heading"), when("content.heading")),
29746
30456
  richText({ className: "rb-prose rb-max-w-none" }, bind("content.description"), when("content.description")),
29747
30457
  eventRegistration(withApiBindings({
30458
+ demoEmailSuppressed: { $bind: {
30459
+ from: "$root.demoEmailSuppressed",
30460
+ fallback: false
30461
+ } },
29748
30462
  readAuthority: { $bind: { from: "$root.readAuthority" } },
29749
30463
  occurrenceContext: { $bind: { from: "$root.occurrenceContext" } },
29750
30464
  subject: { $bind: { from: "$root.subject" } },
@@ -29774,6 +30488,8 @@ const eventRegistrationBlockDefinition = {
29774
30488
  events: { $bind: { from: "data.events" } },
29775
30489
  wholeSeriesRunEvents: { $bind: { from: "data.wholeSeriesRunEvents" } },
29776
30490
  loaderFailures: { $bind: { from: "$root.loaderFailures" } },
30491
+ mailingList: { $bind: { from: "$root.mailingList" } },
30492
+ siteName: { $bind: { from: "$root.siteName" } },
29777
30493
  sitePasses: { $bind: { from: "data.sitePasses" } },
29778
30494
  siteMemberships: { $bind: { from: "data.siteMemberships" } },
29779
30495
  stage: { $bind: {
@@ -34972,6 +35688,7 @@ const shopSourceSchema = z.object({
34972
35688
  memberships: z.array(publicMembershipProductSchema).nullable().optional(),
34973
35689
  products: z.array(publicProductSchema).nullable().optional(),
34974
35690
  siteId: z.string().optional(),
35691
+ demoEmailSuppressed: z.boolean().optional(),
34975
35692
  apiBaseUrl: z.string().optional(),
34976
35693
  readAuthority: browserReadAuthoritySchema.optional(),
34977
35694
  stage: previewStageSchema.optional()
@@ -35091,7 +35808,8 @@ const checkoutDisplaySchema = z.object({
35091
35808
  const passesMembershipsHydrationSchema = z.object({
35092
35809
  memberships: z.array(publicMembershipProductSchema),
35093
35810
  passPurchaseMode: z.enum(["add_to_cart", "buy_now"]),
35094
- buttonVariant: blockButtonRoleSchema
35811
+ buttonVariant: blockButtonRoleSchema,
35812
+ demoEmailSuppressed: z.boolean().optional()
35095
35813
  });
35096
35814
  const productListHydrationSchema = z.object({
35097
35815
  products: z.array(publicProductSchema),
@@ -35113,7 +35831,8 @@ const cartHydrationSchema = z.object({
35113
35831
  });
35114
35832
  const checkoutHydrationSchema = z.object({
35115
35833
  emptyStateText: z.string(),
35116
- submitButtonText: z.string()
35834
+ submitButtonText: z.string(),
35835
+ demoEmailSuppressed: z.boolean().optional()
35117
35836
  });
35118
35837
  const passesMembershipsRenderSchema = z.object({
35119
35838
  display: passesMembershipsDisplaySchema,
@@ -35172,7 +35891,8 @@ const shopBlockRuntime = defineProgressiveBlockRuntime({
35172
35891
  hydration: {
35173
35892
  memberships: source.showMemberships === false ? [] : source.memberships ?? [],
35174
35893
  passPurchaseMode,
35175
- buttonVariant: source.buttonVariant ?? "primary"
35894
+ buttonVariant: source.buttonVariant ?? "primary",
35895
+ demoEmailSuppressed: source.demoEmailSuppressed
35176
35896
  }
35177
35897
  };
35178
35898
  }
@@ -35265,7 +35985,8 @@ const checkoutBlockRuntime = defineClientOwnedBlockRuntime({
35265
35985
  }),
35266
35986
  hydration: {
35267
35987
  emptyStateText: source.emptyStateText ?? "Add something to your cart to continue.",
35268
- submitButtonText: source.submitButtonText ?? "Checkout"
35988
+ submitButtonText: source.submitButtonText ?? "Checkout",
35989
+ demoEmailSuppressed: source.demoEmailSuppressed
35269
35990
  }
35270
35991
  })
35271
35992
  });
@@ -35483,6 +36204,10 @@ const shopBlockDefinition = {
35483
36204
  spacing: "spacious",
35484
36205
  children: sectionContainer([shop(withApiBindings({
35485
36206
  readAuthority: { $bind: { from: "$root.readAuthority" } },
36207
+ demoEmailSuppressed: { $bind: {
36208
+ from: "$root.demoEmailSuppressed",
36209
+ fallback: false
36210
+ } },
35486
36211
  mode: "passes-memberships",
35487
36212
  showPasses: { $bind: {
35488
36213
  from: "content.showPasses",
@@ -36025,6 +36750,10 @@ const checkoutBlockDefinition = {
36025
36750
  baseClass: "",
36026
36751
  spacing: "spacious",
36027
36752
  children: sectionContainer([checkout(withApiBindings({
36753
+ demoEmailSuppressed: { $bind: {
36754
+ from: "$root.demoEmailSuppressed",
36755
+ fallback: false
36756
+ } },
36028
36757
  readAuthority: { $bind: { from: "$root.readAuthority" } },
36029
36758
  mode: "checkout",
36030
36759
  heading: { $bind: {
@@ -36657,65 +37386,67 @@ const editorialSplitLayout = styledSection({
36657
37386
  spacing: "comfortable",
36658
37387
  background: "surface"
36659
37388
  });
36660
- const newsletterSignupBlockDefinition = {
36661
- manifest: createBlockManifest({
36662
- id: "block.newsletter-signup",
36663
- title: "Newsletter Signup",
36664
- titleSource: "title",
36665
- description: "Newsletter subscription form with configurable field presets.",
36666
- category: "interactive",
36667
- contentSource: { kind: "inline" },
36668
- fragments: [{
36669
- fragment: newsletterCopyFragment,
36670
- fieldPriority: 0
36671
- }, {
36672
- fragment: newsletterFormFragment,
36673
- fieldPriority: 1
36674
- }],
36675
- layout: stackedLayout,
36676
- variants: {
36677
- stacked: stackedLayout,
36678
- inline: inlineLayout,
36679
- "editorial-split": editorialSplitLayout
36680
- },
36681
- defaultVariant: "stacked",
36682
- variantOptions: {
36683
- stacked: {
36684
- label: "Stacked",
36685
- description: "Vertical layout with fields stacked"
36686
- },
36687
- inline: {
36688
- label: "Inline",
36689
- description: "Horizontal layout (email + button side by side)"
36690
- },
36691
- "editorial-split": {
36692
- label: "Editorial split",
36693
- description: "Copy and form in balanced side-by-side columns, stacked on mobile."
36694
- }
36695
- },
36696
- styleTokens: {
36697
- background: "surface",
36698
- typography: "body",
36699
- spacing: "md"
37389
+ const newsletterSignupManifest = createBlockManifest({
37390
+ id: "block.newsletter-signup",
37391
+ title: "Newsletter Signup",
37392
+ titleSource: "title",
37393
+ description: "Newsletter subscription form with configurable field presets.",
37394
+ category: "interactive",
37395
+ contentSource: { kind: "inline" },
37396
+ fragments: [{
37397
+ fragment: newsletterCopyFragment,
37398
+ fieldPriority: 0
37399
+ }, {
37400
+ fragment: newsletterFormFragment,
37401
+ fieldPriority: 1
37402
+ }],
37403
+ layout: stackedLayout,
37404
+ variants: {
37405
+ stacked: stackedLayout,
37406
+ inline: inlineLayout,
37407
+ "editorial-split": editorialSplitLayout
37408
+ },
37409
+ defaultVariant: "stacked",
37410
+ variantOptions: {
37411
+ stacked: {
37412
+ label: "Stacked",
37413
+ description: "Vertical layout with fields stacked"
36700
37414
  },
36701
- behaviours: {
36702
- supportsThemeSwitching: true,
36703
- inlineEditing: false,
36704
- animation: false,
36705
- paletteHidden: false
37415
+ inline: {
37416
+ label: "Inline",
37417
+ description: "Horizontal layout (email + button side by side)"
36706
37418
  },
36707
- tags: [
36708
- "newsletter",
36709
- "signup",
36710
- "email",
36711
- "subscribe",
36712
- "subscription",
36713
- "mailchimp",
36714
- "marketing",
36715
- "lead-capture"
36716
- ],
36717
- icon: "Mail"
36718
- }),
37419
+ "editorial-split": {
37420
+ label: "Editorial split",
37421
+ description: "Copy and form in balanced side-by-side columns, stacked on mobile."
37422
+ }
37423
+ },
37424
+ styleTokens: {
37425
+ background: "surface",
37426
+ typography: "body",
37427
+ spacing: "md"
37428
+ },
37429
+ behaviours: {
37430
+ supportsThemeSwitching: true,
37431
+ inlineEditing: false,
37432
+ animation: false,
37433
+ paletteHidden: false
37434
+ },
37435
+ tags: [
37436
+ "newsletter",
37437
+ "signup",
37438
+ "email",
37439
+ "subscribe",
37440
+ "subscription",
37441
+ "mailchimp",
37442
+ "marketing",
37443
+ "lead-capture"
37444
+ ],
37445
+ icon: "Mail"
37446
+ });
37447
+ [...(newsletterSignupManifest.fields ?? []).map((field) => field.id)];
37448
+ const newsletterSignupBlockDefinition = {
37449
+ manifest: newsletterSignupManifest,
36719
37450
  runtime: newsletterFormBlockRuntime
36720
37451
  };
36721
37452
  //#endregion
@@ -38757,7 +39488,8 @@ const BOOKING_FORM_DATA_RESERVED_KEYS = /* @__PURE__ */ new Set([
38757
39488
  "discountCode",
38758
39489
  "selectedSlidingAmountInput",
38759
39490
  "selectedCollectionOptionKind",
38760
- "selectedAppointmentPackageId"
39491
+ "selectedAppointmentPackageId",
39492
+ "mailingListOptIn"
38761
39493
  ]);
38762
39494
  function isBookingFormDataReservedKey(value) {
38763
39495
  return BOOKING_FORM_DATA_RESERVED_KEYS.has(value);