@riverbankcms/sdk 0.146.0 → 0.147.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 (195) hide show
  1. package/CHANGELOG.md +12 -0
  2. package/dist/{PreviewEditorSidebar-kg2r2Fyi.mjs → PreviewEditorSidebar-DtpB3_sS.mjs} +51 -33
  3. package/dist/{PreviewEditorUI-sWMLp5dT.mjs → PreviewEditorUI-DxTLgaHo.mjs} +3 -3
  4. package/dist/{PreviewQueryProvider-Cg51xq1w.mjs → PreviewQueryProvider-Dd4dxOiU.mjs} +1 -1
  5. package/dist/{SdkPreviewModeRuntime-h2ti3Hch.mjs → SdkPreviewModeRuntime-DMMNCngt.mjs} +39 -12
  6. package/dist/{SiteChromeCustomizeContext-DEACFH9m.mjs → SiteChromeCustomizeContext-DQXZXiqS.mjs} +2499 -1682
  7. package/dist/_dts/ai/src/contracts/proposals.d.ts +198 -0
  8. package/dist/_dts/ai/src/contracts/siteStyleProposalSchemas.d.ts +18 -0
  9. package/dist/_dts/api/src/accountApi.d.ts +5 -5
  10. package/dist/_dts/api/src/bookingConfig.d.ts +16 -0
  11. package/dist/_dts/api/src/bookingManagementEndpoints.d.ts +4 -13
  12. package/dist/_dts/api/src/bookingOperations.d.ts +2 -44
  13. package/dist/_dts/api/src/bookingPeople.d.ts +92 -0
  14. package/dist/_dts/api/src/bookingPeopleEndpointDefinitions.d.ts +38 -0
  15. package/dist/_dts/api/src/bookingRecords.d.ts +11 -49
  16. package/dist/_dts/api/src/bookingSettingsSections.d.ts +1 -1
  17. package/dist/_dts/api/src/bookings.d.ts +1 -0
  18. package/dist/_dts/api/src/endpoints.d.ts +587 -561
  19. package/dist/_dts/api/src/eventManagementContracts.d.ts +23 -8
  20. package/dist/_dts/api/src/eventManagementEndpointDefinitions.d.ts +1 -1
  21. package/dist/_dts/api/src/index.d.ts +3 -2
  22. package/dist/_dts/api/src/indexCoreTypes.d.ts +1 -1
  23. package/dist/_dts/api/src/launchReadiness.d.ts +1 -6
  24. package/dist/_dts/api/src/mailingListIntegration.d.ts +6 -0
  25. package/dist/_dts/api/src/navigation/dashboardBookingsNav.d.ts +1 -1
  26. package/dist/_dts/api/src/newsletterEndpointDefinitions.d.ts +15 -0
  27. package/dist/_dts/api/src/occurrenceScheduling.d.ts +19 -0
  28. package/dist/_dts/api/src/publicAppointmentBookingContracts.d.ts +48 -0
  29. package/dist/_dts/api/src/publicExperience/eventEndpoints.d.ts +7 -0
  30. package/dist/_dts/api/src/sdk-event-upsert.d.ts +15 -0
  31. package/dist/_dts/api/src/sdkCourseBooking.d.ts +4 -4
  32. package/dist/_dts/api/src/siteLifecycleEndpoints.d.ts +61 -0
  33. package/dist/_dts/api/src/siteManagementEndpoints.d.ts +5 -18
  34. package/dist/_dts/api/src/siteOnboarding.d.ts +2 -14
  35. package/dist/_dts/blocks/src/PageRenderer.d.ts +3 -4
  36. package/dist/_dts/blocks/src/contracts/proof-block-islands.d.ts +8 -0
  37. package/dist/_dts/blocks/src/index.d.ts +1 -1
  38. package/dist/_dts/blocks/src/pageRenderAdmission.d.ts +22 -4
  39. package/dist/_dts/blocks/src/pageRendererContracts.d.ts +2 -0
  40. package/dist/_dts/blocks/src/system/blocks/newsletter-signup.d.ts +4 -1
  41. package/dist/_dts/blocks/src/system/runtime/api/types/appointments.d.ts +4 -0
  42. package/dist/_dts/blocks/src/system/runtime/api/types/events.d.ts +12 -0
  43. package/dist/_dts/blocks/src/system/runtime/components/registry.client.d.ts +12 -0
  44. package/dist/_dts/blocks/src/system/runtime/components/runtime-backed-blocks.d.ts +6 -0
  45. package/dist/_dts/blocks/src/system/runtime/hooks/useHeadlessBookingFlow.d.ts +8 -0
  46. package/dist/_dts/blocks/src/system/runtime/hooks/useHeadlessEventRegistrationFlow.d.ts +2 -0
  47. package/dist/_dts/blocks/src/system/runtime/nodes/booking-form.completion.d.ts +9 -0
  48. package/dist/_dts/blocks/src/system/runtime/nodes/booking-form.headless.state.d.ts +9 -0
  49. package/dist/_dts/blocks/src/system/runtime/nodes/booking-form.interactive.d.ts +19 -0
  50. package/dist/_dts/blocks/src/system/runtime/nodes/booking-form.mailing-list-choice.d.ts +5 -0
  51. package/dist/_dts/blocks/src/system/runtime/nodes/booking-form.mailing-list-note.d.ts +3 -0
  52. package/dist/_dts/blocks/src/system/runtime/nodes/booking-form.mailing-list-state.d.ts +9 -0
  53. package/dist/_dts/blocks/src/system/runtime/nodes/booking-form.reserved-fields.d.ts +1 -1
  54. package/dist/_dts/blocks/src/system/runtime/nodes/booking-form.server.d.ts +1 -1
  55. package/dist/_dts/blocks/src/system/runtime/nodes/booking-form.state.d.ts +2 -0
  56. package/dist/_dts/blocks/src/system/runtime/nodes/booking-form.submit-handler.d.ts +8 -0
  57. package/dist/_dts/blocks/src/system/runtime/nodes/booking-form.submit-success.d.ts +9 -0
  58. package/dist/_dts/blocks/src/system/runtime/nodes/booking-runtime-sources.d.ts +3 -0
  59. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/AttendeeDetailsStep.d.ts +3 -0
  60. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/SuccessStep.d.ts +3 -0
  61. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/event-registration.headless.contract.d.ts +3 -0
  62. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/sessionStorage.d.ts +2 -0
  63. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/types.d.ts +6 -0
  64. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/useEventRegistrationSubmit.d.ts +3 -0
  65. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/useEventRegistrationWizard.d.ts +8 -0
  66. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration.interactive.d.ts +9 -0
  67. package/dist/_dts/blocks/src/system/runtime/nodes/newsletter-form.block-submission.d.ts +2 -4
  68. package/dist/_dts/blocks/src/system/runtime/resolver.d.ts +2 -0
  69. package/dist/_dts/blocks/src/system/runtime/shared/components/BookingMailingListNote.d.ts +6 -0
  70. package/dist/_dts/blocks/src/system/runtime/shared/mailingListSignupCopy.d.ts +6 -0
  71. package/dist/_dts/blocks/src/system/runtime/shared/types.d.ts +1 -0
  72. package/dist/_dts/blocks/src/system/transforms/registry/_utils/surfaceForegroundStyles.d.ts +3 -2
  73. package/dist/_dts/blocks/src/system/transforms/registry/core.d.ts +2 -0
  74. package/dist/_dts/blocks/src/system/transforms/registry/layout.d.ts +1 -3
  75. package/dist/_dts/core/src/index.d.ts +1 -1
  76. package/dist/_dts/core/src/mailing-list-runtime.d.ts +15 -0
  77. package/dist/_dts/core/src/mailing-list-setup.d.ts +2 -0
  78. package/dist/_dts/core/src/mailing-list-submission.d.ts +6 -0
  79. package/dist/_dts/core/src/navigation-portal-labels.d.ts +9 -0
  80. package/dist/_dts/core/src/participants.d.ts +0 -38
  81. package/dist/_dts/db/src/generated/supabase/database.types.d.ts +102 -22
  82. package/dist/_dts/editor-blocks/src/block-editor/actionPresentation.d.ts +1 -0
  83. package/dist/_dts/preview-next/src/client/blocks/EditablePageRenderer.d.ts +7 -1
  84. package/dist/_dts/preview-next/src/client/blocks/composer/types.d.ts +4 -3
  85. package/dist/_dts/sdk/src/rendering/blocks-page-renderer.d.ts +1 -0
  86. package/dist/_dts/sdk/src/rendering/components/pageShared.d.ts +1 -0
  87. package/dist/_dts/sdk/src/rendering/helpers/loadPage.d.ts +1 -1
  88. package/dist/_dts/sdk/src/rendering/helpers/pageRuntimeSupport.d.ts +2 -2
  89. package/dist/_dts/sdk/src/version.d.ts +1 -1
  90. package/dist/_dts/theme-core/src/buttons/effects/types.d.ts +1 -1
  91. package/dist/_dts/theme-core/src/footer/effectiveNavLinkStyle.d.ts +13 -0
  92. package/dist/_dts/theme-core/src/footer/index.d.ts +1 -0
  93. package/dist/_dts/theme-core/src/generated/containerResponsiveThemeCss.d.ts +1 -1
  94. package/dist/_dts/theme-core/src/header/effectiveNavLinkStyle.d.ts +17 -0
  95. package/dist/_dts/theme-core/src/header/generateHeaderLogoStyles.d.ts +15 -0
  96. package/dist/_dts/theme-core/src/header/generateHeaderNavLinkStyles.d.ts +4 -0
  97. package/dist/_dts/theme-core/src/header/index.d.ts +3 -0
  98. package/dist/_dts/theme-core/src/header/legacyNavLinkStyle.d.ts +1 -1
  99. package/dist/_dts/theme-core/src/header/openingForegroundProjection.d.ts +7 -0
  100. package/dist/_dts/theme-core/src/header/rootPaint.d.ts +4 -0
  101. package/dist/_dts/theme-core/src/navigation/effectPolicy.d.ts +38 -0
  102. package/dist/_dts/theme-core/src/navigation/generateNavLinkCSS.d.ts +4 -0
  103. package/dist/_dts/theme-core/src/navigation/types.d.ts +4 -0
  104. package/dist/_dts/theme-core/src/site-styles/accessibleSurfaces.d.ts +1 -1
  105. package/dist/_dts/theme-core/src/surfaces/foregroundContract.d.ts +7 -0
  106. package/dist/_dts/theme-core/src/surfaces/foregroundInteraction.d.ts +29 -22
  107. package/dist/_dts/theme-core/src/surfaces/foregroundRoles.d.ts +10 -2
  108. package/dist/_dts/theme-core/src/surfaces/resolveSurfaceForeground.d.ts +9 -0
  109. package/dist/_dts/theme-core/src/utils/cssDeclarations.d.ts +2 -0
  110. package/dist/_dts/ui/src/badge.d.ts +2 -1
  111. package/dist/_dts/ui/src/button.d.ts +1 -1
  112. package/dist/_dts/ui/src/combobox-keys.d.ts +23 -0
  113. package/dist/_dts/ui/src/combobox-rows.d.ts +34 -0
  114. package/dist/_dts/ui/src/combobox.d.ts +26 -1
  115. package/dist/_dts/ui/src/date-picker.d.ts +5 -8
  116. package/dist/_dts/ui/src/editor-item-card.d.ts +1 -0
  117. package/dist/_dts/ui/src/field-trigger.d.ts +39 -0
  118. package/dist/_dts/ui/src/fieldControl.d.ts +27 -0
  119. package/dist/_dts/ui/src/index.d.ts +4 -1
  120. package/dist/_dts/ui/src/native-select.d.ts +8 -0
  121. package/dist/_dts/ui/src/popover.d.ts +7 -1
  122. package/dist/_dts/ui/src/segmented-control.d.ts +4 -0
  123. package/dist/_dts/ui/src/surface.d.ts +1 -1
  124. package/dist/client/{BookingConsentAgreement-BQKL045f.mjs → BookingMailingListNote-1n4Ch_u_.mjs} +15 -4
  125. package/dist/client/{CheckboxChoice--W2n6yKs.mjs → CheckboxChoice-B33MqoUo.mjs} +1 -1
  126. package/dist/client/{DiscountCodeDisclosure-CsOtjFY7.mjs → DiscountCodeDisclosure-CKJtz0mY.mjs} +1 -1
  127. package/dist/client/{EventCombined.client-BdRjVbhH.mjs → EventCombined.client-C0pgma9y.mjs} +7 -7
  128. package/dist/client/{EventListing.client-DBxC6xOU.mjs → EventListing.client-4fhLOvHP.mjs} +2 -2
  129. package/dist/client/{LeafletStaticMap-mHEJKrTs.mjs → LeafletStaticMap-DScC4F3w.mjs} +1 -1
  130. package/dist/client/{scrollToBlock-BNgaEUpo.mjs → TerminalPanel-B5ZUsYhe.mjs} +77 -77
  131. package/dist/client/{ThemedButton-CE5KYT6z.mjs → ThemedButton-DoVIV1Ao.mjs} +2 -2
  132. package/dist/client/{accordion-BEQNSptH.mjs → accordion-CoT5g7zo.mjs} +1 -1
  133. package/dist/client/{bookingForm-AMr-s5vw.mjs → bookingForm-BWxB46xD.mjs} +226 -106
  134. package/dist/client/bookings.mjs +367 -188
  135. package/dist/client/{carousel-Bbt_QgJy.mjs → carousel-DtNYWFd3.mjs} +2 -2
  136. package/dist/client/{carousel.client-jahpU9Vz.mjs → carousel.client-A2lG-9od.mjs} +1 -1
  137. package/dist/client/{cart-CnWi30zJ.mjs → cart-z4qZih1Y.mjs} +3 -3
  138. package/dist/client/{checkout-f3nkWgd4.mjs → checkout-DpL7euFH.mjs} +3 -3
  139. package/dist/client/{checkoutUrls-CW3-78uu.mjs → checkoutUrls-BEfR7kVu.mjs} +1 -1
  140. package/dist/client/client.mjs +2125 -1420
  141. package/dist/client/{colorStyles-CuJBiS-1.mjs → colorStyles-j5U9v5JA.mjs} +5 -1
  142. package/dist/client/{context-Bc8T6pCe.mjs → context-C8TinPJc.mjs} +1 -1
  143. package/dist/client/{dates-DUsCEzLb.mjs → dates-vwwxTeB0.mjs} +2 -2
  144. package/dist/client/{eventCalendar-CKwgXui5.mjs → eventCalendar-DIbHfJXO.mjs} +10 -10
  145. package/dist/client/{eventCombined-CBAOSTGR.mjs → eventCombined-DoGMJ6cg.mjs} +4 -4
  146. package/dist/client/{eventDetails-Dh-_WiBD.mjs → eventDetails-BjN9v6a1.mjs} +4 -4
  147. package/dist/client/{eventListing-CA3frIH5.mjs → eventListing-DajjWgOv.mjs} +4 -4
  148. package/dist/client/{eventRegistration-BHtsgdcg.mjs → eventRegistration-DMq9gMA-.mjs} +109 -41
  149. package/dist/client/{form-C2h3YAcg.mjs → form-Qf6qTbos.mjs} +5 -5
  150. package/dist/client/{headerSection-lwMuMTH9.mjs → headerSection-D7qJrqFX.mjs} +3 -3
  151. package/dist/client/hooks.mjs +661 -116
  152. package/dist/client/{locationMap-DJ2bLODV.mjs → locationMap-CCF9-t_0.mjs} +4 -4
  153. package/dist/client/{FieldValidationMessage-AYanWFb-.mjs → mailingListSignupCopy-DZSHZrm6.mjs} +14 -1
  154. package/dist/client/{media-BtJ37tzS.mjs → media-CwBGetqC.mjs} +1 -1
  155. package/dist/client/{newsletterForm-8Pu5K32g.mjs → newsletterForm-DzCLSP4S.mjs} +6 -6
  156. package/dist/client/{pricing-HHx3IgBz.mjs → pricing-Cgxv2KLC.mjs} +1 -1
  157. package/dist/client/{productDetail-C_1odnAf.mjs → productDetail-ru9w5GHx.mjs} +3 -3
  158. package/dist/client/{productList-CtCv-Nmx.mjs → productList-zaapKSl-.mjs} +3 -3
  159. package/dist/client/{propsDecoder-Dcgsncxb.mjs → propsDecoder-CwvvNOHx.mjs} +52 -6
  160. package/dist/client/rendering/client.mjs +951 -369
  161. package/dist/client/rendering/islands.mjs +19 -19
  162. package/dist/client/rendering.mjs +2153 -1393
  163. package/dist/client/{routeIslandApiConfig-CWLP7wu3.mjs → routeIslandApiConfig-BwVFo0Y4.mjs} +1 -1
  164. package/dist/client/{shop-commerce-B88zmWWo.mjs → shop-commerce-De7gEnkA.mjs} +8 -8
  165. package/dist/client/{shop-commerce-store-DtSfkKuX.mjs → shop-commerce-store-B3MCxIBW.mjs} +1 -1
  166. package/dist/client/{shop-DQXrQ8kJ.mjs → shop-mktkXvbV.mjs} +7 -7
  167. package/dist/client/{shopShared-cuaONpkJ.mjs → shopShared-TqExh235.mjs} +5 -5
  168. package/dist/client/{useEventFilters-Bukew6Gb.mjs → useEventFilters-n_OjkIjX.mjs} +8 -8
  169. package/dist/preview-next/before-render.mjs +122 -50
  170. package/dist/preview-next/client/runtime.mjs +4 -4
  171. package/dist/preview-next/editor-base.css +53 -2
  172. package/dist/preview-next/editor-chrome.css +7 -4
  173. package/dist/preview-next/keepAlive.mjs +122 -50
  174. package/dist/preview-next/middleware.mjs +122 -50
  175. package/dist/{previewAuthStore-h5IgbSp4.mjs → previewAuthStore-C_EHQ5XA.mjs} +122 -50
  176. package/dist/{sdk-runtime-DTc1uIXn.mjs → sdk-runtime-BIkJg5y1.mjs} +2 -2
  177. package/dist/{separator-BpHS1KZK.mjs → separator-C9qDP95Z.mjs} +1 -1
  178. package/dist/server/components.mjs +25345 -24942
  179. package/dist/server/config-validation.mjs +711 -163
  180. package/dist/server/config.mjs +711 -163
  181. package/dist/server/data.mjs +709 -162
  182. package/dist/server/index.mjs +123 -51
  183. package/dist/server/navigation.mjs +13 -2
  184. package/dist/server/next.mjs +4538 -4169
  185. package/dist/server/page-converter.mjs +107 -64
  186. package/dist/server/prebuild.mjs +1 -1
  187. package/dist/server/rendering/server.mjs +2509 -2104
  188. package/dist/server/rendering.mjs +25526 -25104
  189. package/dist/server/routing.mjs +750 -289
  190. package/dist/server/server.mjs +671 -148
  191. package/dist/server/theme-bridge.mjs +66 -17
  192. package/dist/server/theme.mjs +5 -1
  193. package/dist/styles/index.css +32 -4
  194. package/package.json +1 -1
  195. package/dist/_dts/core/src/participant-identity.d.ts +0 -135
@@ -1149,9 +1149,6 @@ var init_assertNever = __esmMin((() => {}));
1149
1149
  //#region ../core/src/participants.ts
1150
1150
  var init_participants = __esmMin((() => {}));
1151
1151
  //#endregion
1152
- //#region ../core/src/participant-identity.ts
1153
- var init_participant_identity = __esmMin((() => {}));
1154
- //#endregion
1155
1152
  //#region ../core/src/public-url-validation.ts
1156
1153
  var init_public_url_validation = __esmMin((() => {}));
1157
1154
  //#endregion
@@ -1370,17 +1367,35 @@ function parseMailingListRuntimeContext(value) {
1370
1367
  if (!isRecord$13(value)) return invalidRuntimeContext();
1371
1368
  if (value.tag === "not_configured") return ok$1({ tag: "not_configured" });
1372
1369
  if (value.tag !== "configured") return invalidRuntimeContext();
1370
+ return parseConfiguredRuntimeContext(value);
1371
+ }
1372
+ function parseConfiguredRuntimeContext(value) {
1373
1373
  const revision = parseMailingListSetupRevision(value.revision);
1374
1374
  const form = parseMailingListGlobalForm(value.form);
1375
1375
  const provider = parseRuntimeProvider(value.provider);
1376
- if (revision === null || !form.ok || provider === null) return invalidRuntimeContext();
1376
+ const bookingSignup = parseBookingSignupOffer(value.bookingSignup);
1377
+ if (revision === null || !form.ok || provider === null || bookingSignup === null) return invalidRuntimeContext();
1377
1378
  return ok$1({
1378
1379
  tag: "configured",
1379
1380
  revision,
1381
+ bookingSignup,
1380
1382
  form: form.value,
1381
1383
  provider
1382
1384
  });
1383
1385
  }
1386
+ function parseBookingSignupOffer(value) {
1387
+ if (value === void 0) return {
1388
+ tag: "unavailable",
1389
+ reason: "disabled"
1390
+ };
1391
+ if (!isRecord$13(value)) return null;
1392
+ if (value.tag === "offered") return { tag: "offered" };
1393
+ if (value.tag === "unavailable" && (value.reason === "disabled" || value.reason === "fields" || value.reason === "destination")) return {
1394
+ tag: "unavailable",
1395
+ reason: value.reason
1396
+ };
1397
+ return null;
1398
+ }
1384
1399
  function parseRuntimeProvider(value) {
1385
1400
  if (!isRecord$13(value)) return null;
1386
1401
  switch (value.provider) {
@@ -2094,6 +2109,9 @@ var init_booking_verticals = __esmMin((() => {
2094
2109
  //#region ../core/src/navigation-locations.ts
2095
2110
  var init_navigation_locations = __esmMin((() => {}));
2096
2111
  //#endregion
2112
+ //#region ../core/src/navigation-portal-labels.ts
2113
+ var init_navigation_portal_labels = __esmMin((() => {}));
2114
+ //#endregion
2097
2115
  //#region ../core/src/event-preset-vocabulary.ts
2098
2116
  var init_event_preset_vocabulary = __esmMin((() => {}));
2099
2117
  //#endregion
@@ -2137,7 +2155,6 @@ var init_src$4 = __esmMin((() => {
2137
2155
  init_sensitive_collection();
2138
2156
  init_assertNever();
2139
2157
  init_participants();
2140
- init_participant_identity();
2141
2158
  init_public_url_validation();
2142
2159
  init_public_profile();
2143
2160
  init_public_experience();
@@ -2176,6 +2193,7 @@ var init_src$4 = __esmMin((() => {
2176
2193
  init_booking_verticals();
2177
2194
  init_event_series_behaviour();
2178
2195
  init_navigation_locations();
2196
+ init_navigation_portal_labels();
2179
2197
  init_event_preset_vocabulary();
2180
2198
  init_event_catalogue();
2181
2199
  }));
@@ -3490,9 +3508,6 @@ var init_onColor = __esmMin((() => {}));
3490
3508
  //#region ../theme-core/src/palette/expandPalette.ts
3491
3509
  var init_expandPalette = __esmMin((() => {}));
3492
3510
  //#endregion
3493
- //#region ../theme-core/src/surfaces/foregroundRoles.ts
3494
- var init_foregroundRoles = __esmMin((() => {}));
3495
- //#endregion
3496
3511
  //#region ../theme-core/src/surfaces/foregroundContract.ts
3497
3512
  function requireSurfaceColorValue(role, value) {
3498
3513
  const normalized = value.trim();
@@ -3501,10 +3516,12 @@ function requireSurfaceColorValue(role, value) {
3501
3516
  }
3502
3517
  function completeSurfaceForegrounds(input) {
3503
3518
  const text = requireSurfaceColorValue("text", input.text);
3519
+ const link = input.link === void 0 ? text : requireSurfaceColorValue("link", input.link);
3504
3520
  return {
3505
3521
  text,
3506
3522
  heading: input.heading === void 0 ? text : requireSurfaceColorValue("heading", input.heading),
3507
- link: input.link === void 0 ? text : requireSurfaceColorValue("link", input.link),
3523
+ link,
3524
+ linkHover: input.linkHover === void 0 ? link : requireSurfaceColorValue("linkHover", input.linkHover),
3508
3525
  supporting: input.supporting === void 0 ? text : requireSurfaceColorValue("supporting", input.supporting)
3509
3526
  };
3510
3527
  }
@@ -3512,6 +3529,7 @@ function surfaceForegroundValue(role, outsideProviderFallback = DEFAULT_ROLE_FAL
3512
3529
  const roleVariable = SURFACE_FOREGROUND_CSS_VARS[role];
3513
3530
  const fallback = requireSurfaceColorValue("fallback", outsideProviderFallback);
3514
3531
  if (role === "text") return `var(${roleVariable}, ${fallback})`;
3532
+ if (role === "linkHover") return `var(${roleVariable}, ${surfaceForegroundValue("link", fallback)})`;
3515
3533
  return `var(${roleVariable}, var(${SURFACE_FOREGROUND_CSS_VARS.text}, ${fallback}))`;
3516
3534
  }
3517
3535
  function surfaceForegroundValueWithOpacity(role, opacityPercent) {
@@ -3525,15 +3543,32 @@ function surfaceForegroundStyle(input) {
3525
3543
  [SURFACE_FOREGROUND_CSS_VARS.text]: foregrounds.text,
3526
3544
  [SURFACE_FOREGROUND_CSS_VARS.heading]: foregrounds.heading,
3527
3545
  [SURFACE_FOREGROUND_CSS_VARS.link]: foregrounds.link,
3528
- [SURFACE_FOREGROUND_CSS_VARS.supporting]: foregrounds.supporting
3546
+ [SURFACE_FOREGROUND_CSS_VARS.linkHover]: foregrounds.linkHover,
3547
+ [SURFACE_FOREGROUND_CSS_VARS.supporting]: foregrounds.supporting,
3548
+ "--rb-surface-link-hover-decoration": hoverDecoration(input)
3549
+ };
3550
+ }
3551
+ function surfaceForegroundInputFromResolved(foreground, color) {
3552
+ const { roles } = foreground;
3553
+ return {
3554
+ text: color(roles.text),
3555
+ heading: color(roles.heading),
3556
+ link: color(roles.link),
3557
+ linkHover: color(roles.linkHover),
3558
+ supporting: color(roles.supporting),
3559
+ hoverDecoration: foreground.hoverDecoration
3529
3560
  };
3530
3561
  }
3562
+ function hoverDecoration(input) {
3563
+ return input.hoverDecoration ?? "underline";
3564
+ }
3531
3565
  var SURFACE_FOREGROUND_CSS_VARS, DEFAULT_SURFACE_TEXT_COLOR, DEFAULT_SURFACE_LINK_COLOR, DEFAULT_SURFACE_SUPPORTING_COLOR, DEFAULT_ROLE_FALLBACKS;
3532
3566
  var init_foregroundContract = __esmMin((() => {
3533
3567
  SURFACE_FOREGROUND_CSS_VARS = {
3534
3568
  text: "--rb-surface-text-color",
3535
3569
  heading: "--rb-surface-heading-color",
3536
3570
  link: "--rb-surface-link-color",
3571
+ linkHover: "--rb-surface-link-hover-color",
3537
3572
  supporting: "--rb-surface-supporting-color"
3538
3573
  };
3539
3574
  DEFAULT_SURFACE_TEXT_COLOR = "rgb(var(--tb-text, 17 24 39))";
@@ -3543,6 +3578,7 @@ var init_foregroundContract = __esmMin((() => {
3543
3578
  text: DEFAULT_SURFACE_TEXT_COLOR,
3544
3579
  heading: DEFAULT_SURFACE_TEXT_COLOR,
3545
3580
  link: DEFAULT_SURFACE_LINK_COLOR,
3581
+ linkHover: DEFAULT_SURFACE_LINK_COLOR,
3546
3582
  supporting: DEFAULT_SURFACE_SUPPORTING_COLOR
3547
3583
  };
3548
3584
  }));
@@ -4377,11 +4413,6 @@ var init_tokens = __esmMin((() => {
4377
4413
  init_resolver$2();
4378
4414
  }));
4379
4415
  //#endregion
4380
- //#region ../theme-core/src/surfaces/foregroundInteraction.ts
4381
- var init_foregroundInteraction = __esmMin((() => {
4382
- init_tokens();
4383
- }));
4384
- //#endregion
4385
4416
  //#region ../theme-core/src/palette/utils/opaqueSurfaceColor.ts
4386
4417
  /** Resolve an opaque colour, compositing alpha against an explicit underlay. */
4387
4418
  function resolveOpaqueSurfaceHex(reference, palette, underlayReference) {
@@ -4449,6 +4480,75 @@ var init_opaqueSurfaceColor = __esmMin((() => {
4449
4480
  init_colorConversion();
4450
4481
  }));
4451
4482
  //#endregion
4483
+ //#region ../theme-core/src/surfaces/foregroundInteraction.ts
4484
+ /**
4485
+ * Derive the hover foreground that belongs with a resolved resting foreground.
4486
+ *
4487
+ * A resting foreground is chosen to be legible against a known surface. A hover
4488
+ * state derived from it stays within a bounded distance of that colour, so it
4489
+ * inherits most of the resting colour's contrast margin instead of asserting
4490
+ * an unrelated brand colour that no one checked against the surface.
4491
+ *
4492
+ * That bounded-distance property is what lets this be used on a transparent
4493
+ * overlay header, where the backdrop is only partly knowable: the scrolled
4494
+ * state composites a 60% glass tint over arbitrary page content, so no
4495
+ * compile-time contrast proof is available there. Staying near a colour that
4496
+ * is already trusted in both states is a weaker claim than a contrast proof,
4497
+ * and it is one this function can actually keep.
4498
+ *
4499
+ * Returns `null` when the resting token is not a plain palette token — an
4500
+ * already-faded or raw value has no well-defined softening, and the caller
4501
+ * should leave hover alone rather than guess.
4502
+ */
4503
+ function deriveForegroundHoverToken(restingToken) {
4504
+ const parts = parseColorTokenParts(restingToken);
4505
+ if (parts.kind !== "token") return null;
4506
+ if (parts.opacityPercent !== null) return null;
4507
+ return parseThemeColorToken(`${parts.token}/85`);
4508
+ }
4509
+ /**
4510
+ * Prefer an authored hover that survives every measured backdrop, then a
4511
+ * checked softening of the resting colour. A null backdrop set represents a
4512
+ * trusted treatment: only an explicit authored hover may change the colour.
4513
+ * When neither option works, retain the resting colour and underline it.
4514
+ */
4515
+ function planForegroundHover(input) {
4516
+ const { restingToken, candidate, palette, backdrops } = input;
4517
+ if (candidate && candidate !== restingToken) {
4518
+ if (backdrops === null || survivesEveryBackdrop(candidate, palette, backdrops)) return {
4519
+ kind: "candidate",
4520
+ token: candidate,
4521
+ decoration: "initial"
4522
+ };
4523
+ }
4524
+ const softened = deriveForegroundHoverToken(restingToken);
4525
+ if (softened && backdrops && survivesEveryBackdrop(softened, palette, backdrops)) return {
4526
+ kind: "softened",
4527
+ token: softened,
4528
+ decoration: "initial"
4529
+ };
4530
+ return {
4531
+ kind: "resting",
4532
+ token: restingToken,
4533
+ decoration: "underline"
4534
+ };
4535
+ }
4536
+ function survivesEveryBackdrop(token, palette, backdrops) {
4537
+ return backdrops.length > 0 && backdrops.every((backdrop) => {
4538
+ const foreground = resolveOpaqueSurfaceHex(token, palette, backdrop);
4539
+ return foreground !== null && contrastRatio(foreground, backdrop) >= 4.5;
4540
+ });
4541
+ }
4542
+ var init_foregroundInteraction = __esmMin((() => {
4543
+ init_contrast();
4544
+ init_colorTokenParts();
4545
+ init_tokens();
4546
+ init_opaqueSurfaceColor();
4547
+ }));
4548
+ //#endregion
4549
+ //#region ../theme-core/src/surfaces/foregroundRoles.ts
4550
+ var init_foregroundRoles = __esmMin((() => {}));
4551
+ //#endregion
4452
4552
  //#region ../theme-core/src/surfaces/resolveSurfaceForeground.ts
4453
4553
  /**
4454
4554
  * Resolve the complete foreground contract for an effective page/section or
@@ -4474,12 +4574,16 @@ function resolveSurfaceForeground(background, palette, candidates = {}, options
4474
4574
  }
4475
4575
  function foregroundCandidates(background, overrides) {
4476
4576
  return {
4477
- text: overrides.text ?? background?.textColor ?? null,
4478
- heading: overrides.heading ?? background?.headingColor ?? null,
4479
- link: overrides.link ?? background?.linkColor ?? null,
4480
- supporting: overrides.supporting ?? background?.supportingColor ?? null
4577
+ text: candidateOrBackground(overrides.text, background?.textColor),
4578
+ heading: candidateOrBackground(overrides.heading, background?.headingColor),
4579
+ link: candidateOrBackground(overrides.link, background?.linkColor),
4580
+ linkHover: candidateOrBackground(overrides.linkHover),
4581
+ supporting: candidateOrBackground(overrides.supporting, background?.supportingColor)
4481
4582
  };
4482
4583
  }
4584
+ function candidateOrBackground(candidate, backgroundValue) {
4585
+ return candidate ?? backgroundValue ?? null;
4586
+ }
4483
4587
  function resolveDeterministicForeground(backgroundReference, candidates, palette, compositeBase) {
4484
4588
  const backgroundHex = resolveOpaqueSurfaceHex(backgroundReference, palette, compositeBase);
4485
4589
  if (!backgroundHex) return resolveTrustedTreatmentForeground(candidates, palette);
@@ -4491,29 +4595,51 @@ function resolveDeterministicForeground(backgroundReference, candidates, palette
4491
4595
  ...FALLBACK_TEXT_TOKENS
4492
4596
  ], backgroundHex, palette, derivedOnToken ? [derivedOnToken] : []);
4493
4597
  if (!text) return { kind: "unknown" };
4494
- return {
4495
- kind: "known",
4496
- roles: {
4497
- text,
4498
- heading: safeTokenOr(candidates.heading, text, backgroundHex, palette),
4499
- link: safeTokenOr(candidates.link, text, backgroundHex, palette),
4500
- supporting: safeTokenOr(candidates.supporting, text, backgroundHex, palette)
4501
- }
4502
- };
4598
+ return knownForeground({
4599
+ text,
4600
+ heading: safeTokenOr(candidates.heading, text, backgroundHex, palette),
4601
+ link: safeTokenOr(candidates.link, text, backgroundHex, palette),
4602
+ supporting: safeTokenOr(candidates.supporting, text, backgroundHex, palette)
4603
+ }, {
4604
+ kind: "measured",
4605
+ backdropHex: backgroundHex
4606
+ }, candidates.linkHover, palette);
4503
4607
  }
4504
4608
  function resolveTrustedTreatmentForeground(candidates, palette) {
4505
4609
  const text = canonicalToken(candidates.text, palette);
4506
4610
  if (!text) return { kind: "unknown" };
4611
+ return knownForeground({
4612
+ text,
4613
+ heading: canonicalToken(candidates.heading, palette) ?? text,
4614
+ link: canonicalToken(candidates.link, palette) ?? text,
4615
+ supporting: canonicalToken(candidates.supporting, palette) ?? text
4616
+ }, { kind: "trusted-treatment" }, candidates.linkHover, palette);
4617
+ }
4618
+ function knownForeground(roles, provenance, hoverCandidate, palette) {
4619
+ const hover = planForegroundHover({
4620
+ restingToken: roles.link,
4621
+ candidate: canonicalHoverToken(hoverCandidate, palette),
4622
+ palette,
4623
+ backdrops: provenance.kind === "measured" ? [provenance.backdropHex] : null
4624
+ });
4507
4625
  return {
4508
4626
  kind: "known",
4627
+ provenance,
4509
4628
  roles: {
4510
- text,
4511
- heading: canonicalToken(candidates.heading, palette) ?? text,
4512
- link: canonicalToken(candidates.link, palette) ?? text,
4513
- supporting: canonicalToken(candidates.supporting, palette) ?? text
4514
- }
4629
+ ...roles,
4630
+ linkHover: hover.token
4631
+ },
4632
+ hoverDecoration: hover.decoration
4515
4633
  };
4516
4634
  }
4635
+ function canonicalHoverToken(reference, palette) {
4636
+ const token = parseThemeColorToken(reference);
4637
+ if (token) {
4638
+ const parts = parseColorTokenParts(token);
4639
+ if (parts.kind === "token" && resolveConcreteColorHex(parts.token, palette)) return token;
4640
+ }
4641
+ return canonicalToken(reference, palette);
4642
+ }
4517
4643
  function safeTokenOr(candidate, fallback, backgroundHex, palette) {
4518
4644
  return firstSafeToken([candidate], backgroundHex, palette) ?? fallback;
4519
4645
  }
@@ -4561,6 +4687,7 @@ var init_resolveSurfaceForeground = __esmMin((() => {
4561
4687
  init_opaqueSurfaceColor();
4562
4688
  init_colorTokenParts();
4563
4689
  init_themeColorTokens();
4690
+ init_foregroundInteraction();
4564
4691
  FALLBACK_TEXT_TOKENS = [
4565
4692
  "text",
4566
4693
  "primaryForeground",
@@ -7606,16 +7733,70 @@ var init_baseSchema = __esmMin((() => {
7606
7733
  });
7607
7734
  }));
7608
7735
  //#endregion
7736
+ //#region ../theme-core/src/navigation/effectPolicy.ts
7737
+ function navEffectPolicy(effectId) {
7738
+ return policiesById[effectId] ?? null;
7739
+ }
7740
+ var NAV_EFFECT_POLICIES, policiesById;
7741
+ var init_effectPolicy = __esmMin((() => {
7742
+ NAV_EFFECT_POLICIES = {
7743
+ "darken-background": "other",
7744
+ "lighten-background": "other",
7745
+ "fade-background": "other",
7746
+ "opacity-reduce": "other",
7747
+ "animated-gradient": "other",
7748
+ "background-on-hover": "paired-hover",
7749
+ "background-on-hover-alpha": "paired-hover",
7750
+ "border-glow": "other",
7751
+ "drop-shadow": "other",
7752
+ "inner-shadow": "other",
7753
+ "neumorphic-shadow": "other",
7754
+ "outer-glow": "other",
7755
+ "retro-3d-shadow": "other",
7756
+ "scale-up": "other",
7757
+ "scale-down": "other",
7758
+ lift: "other",
7759
+ "press-down": "other",
7760
+ pop: "other",
7761
+ "aurora-glow": "other",
7762
+ "cosmic-stardust": "other",
7763
+ "gradient-border-fill": "other",
7764
+ "animated-gradient-border-fill": "other",
7765
+ "border-bottom-grow": "other",
7766
+ "gradient-text": "other",
7767
+ "text-color-change": "text-colour",
7768
+ "border-color-change": "other",
7769
+ "sketchy-border": "other",
7770
+ "pulse-animation": "other",
7771
+ "nav-underline": "underline",
7772
+ "nav-frosted-base": "other",
7773
+ "nav-frosted-hover": "other",
7774
+ "nav-frosted-active": "other"
7775
+ };
7776
+ policiesById = NAV_EFFECT_POLICIES;
7777
+ }));
7778
+ //#endregion
7609
7779
  //#region ../theme-core/src/navigation/types.ts
7610
7780
  /**
7611
7781
  * Navigation Link Style Types
7612
7782
  *
7613
7783
  * Schema and types for composable nav link styling used by header and footer.
7614
7784
  */
7785
+ function navLinkHoverColorCandidate(style) {
7786
+ const effect = style?.effects?.hover?.find((item) => navEffectPolicy(item.effectId) === "text-colour");
7787
+ return parseThemeColorToken(effect?.options?.hoverColorToken ?? style?.hoverColorToken);
7788
+ }
7789
+ function navLinkOwnsHoverForeground(style) {
7790
+ return style?.effects?.hover?.some((effect) => navEffectPolicy(effect.effectId) === "paired-hover") ?? false;
7791
+ }
7792
+ function navLinkOwnsUnderline(style) {
7793
+ return style?.effects?.hover?.some((effect) => navEffectPolicy(effect.effectId) === "underline") ?? false;
7794
+ }
7615
7795
  var navLinkPaddingSchema, navLinkPaddingXSchema, navLinkBorderRadiusSchema, navLinkTextSizeSchema, navLinkLetterSpacingSchema, navLinkContrastTreatmentSchema, navLinkStyleSchema;
7616
7796
  var init_types$8 = __esmMin((() => {
7617
7797
  init_baseSchema();
7618
7798
  init_themeColorTokens();
7799
+ init_effectPolicy();
7619
7800
  navLinkPaddingSchema = z.enum([
7620
7801
  "none",
7621
7802
  "compact",
@@ -9757,6 +9938,71 @@ function defineEndpointDefinitions(definitions) {
9757
9938
  }
9758
9939
  var init_defineEndpointDefinitions = __esmMin((() => {}));
9759
9940
  //#endregion
9941
+ //#region ../api/src/apiEndpointTypes.ts
9942
+ function allowedDemoMutationPolicy() {
9943
+ return {
9944
+ classification: "allowed",
9945
+ publicMessage: ""
9946
+ };
9947
+ }
9948
+ function blockedDemoMutationPolicy(classification, publicMessage) {
9949
+ if (publicMessage.trim() === "") throw new Error(`Demo mutation policy ${classification} requires publicMessage.`);
9950
+ return {
9951
+ classification,
9952
+ publicMessage
9953
+ };
9954
+ }
9955
+ var init_apiEndpointTypes = __esmMin((() => {})), DEMO_MUTATION_BLOCKED_HIDDEN, DEMO_MUTATION_BLOCKED_DISABLED, DEMO_MUTATION_ALLOWED;
9956
+ var init_demoMutationPolicies = __esmMin((() => {
9957
+ init_apiEndpointTypes();
9958
+ DEMO_MUTATION_BLOCKED_HIDDEN = blockedDemoMutationPolicy("blocked-hidden", "This action is not available in demo sites.");
9959
+ DEMO_MUTATION_BLOCKED_DISABLED = blockedDemoMutationPolicy("blocked-disabled", "This setting is disabled in demo sites.");
9960
+ blockedDemoMutationPolicy("internal-only", "This internal operation is not available in demo sites.");
9961
+ DEMO_MUTATION_ALLOWED = allowedDemoMutationPolicy();
9962
+ }));
9963
+ //#endregion
9964
+ //#region ../api/src/siteLifecycleEndpoints.ts
9965
+ var SITE_LIFECYCLE_ENDPOINT_DEFINITIONS;
9966
+ var init_siteLifecycleEndpoints = __esmMin((() => {
9967
+ init_defineEndpointDefinitions();
9968
+ init_demoMutationPolicies();
9969
+ SITE_LIFECYCLE_ENDPOINT_DEFINITIONS = defineEndpointDefinitions({
9970
+ createSite: {
9971
+ path: "/sites/manage",
9972
+ method: "POST",
9973
+ tags: ["site"],
9974
+ auth: "user",
9975
+ responseKind: "json",
9976
+ errors: []
9977
+ },
9978
+ createSiteManual: {
9979
+ path: "/sites/manual",
9980
+ method: "POST",
9981
+ tags: ["site"],
9982
+ auth: "user",
9983
+ responseKind: "json",
9984
+ errors: []
9985
+ },
9986
+ updateSite: {
9987
+ path: "/sites/manage",
9988
+ method: "PUT",
9989
+ tags: ["site"],
9990
+ auth: "user",
9991
+ responseKind: "json",
9992
+ errors: []
9993
+ },
9994
+ deleteSite: {
9995
+ path: "/sites/{siteId}",
9996
+ method: "DELETE",
9997
+ tags: ["site", "site-{siteId}"],
9998
+ auth: "user",
9999
+ responseKind: "json",
10000
+ errors: [],
10001
+ demoMutation: DEMO_MUTATION_BLOCKED_HIDDEN
10002
+ }
10003
+ });
10004
+ }));
10005
+ //#endregion
9760
10006
  //#region ../api/src/publicNewsletterEndpointDefinitions.ts
9761
10007
  var PUBLIC_NEWSLETTER_ENDPOINT_DEFINITIONS;
9762
10008
  var init_publicNewsletterEndpointDefinitions = __esmMin((() => {
@@ -9821,29 +10067,6 @@ var init_publicNewsletterEndpointDefinitions = __esmMin((() => {
9821
10067
  });
9822
10068
  }));
9823
10069
  //#endregion
9824
- //#region ../api/src/apiEndpointTypes.ts
9825
- function allowedDemoMutationPolicy() {
9826
- return {
9827
- classification: "allowed",
9828
- publicMessage: ""
9829
- };
9830
- }
9831
- function blockedDemoMutationPolicy(classification, publicMessage) {
9832
- if (publicMessage.trim() === "") throw new Error(`Demo mutation policy ${classification} requires publicMessage.`);
9833
- return {
9834
- classification,
9835
- publicMessage
9836
- };
9837
- }
9838
- var init_apiEndpointTypes = __esmMin((() => {})), DEMO_MUTATION_BLOCKED_HIDDEN, DEMO_MUTATION_BLOCKED_DISABLED, DEMO_MUTATION_ALLOWED;
9839
- var init_demoMutationPolicies = __esmMin((() => {
9840
- init_apiEndpointTypes();
9841
- DEMO_MUTATION_BLOCKED_HIDDEN = blockedDemoMutationPolicy("blocked-hidden", "This action is not available in demo sites.");
9842
- DEMO_MUTATION_BLOCKED_DISABLED = blockedDemoMutationPolicy("blocked-disabled", "This setting is disabled in demo sites.");
9843
- blockedDemoMutationPolicy("internal-only", "This internal operation is not available in demo sites.");
9844
- DEMO_MUTATION_ALLOWED = allowedDemoMutationPolicy();
9845
- }));
9846
- //#endregion
9847
10070
  //#region ../api/src/cache-tags.ts
9848
10071
  var TAG_TEMPLATES;
9849
10072
  var init_cache_tags = __esmMin((() => {
@@ -10899,6 +11122,20 @@ var init_newsletterEndpointDefinitions = __esmMin((() => {
10899
11122
  responseKind: "json",
10900
11123
  errors: ["auth:forbidden", "server:internal_error"]
10901
11124
  },
11125
+ setMailingListBookingOptIn: {
11126
+ path: "/sites/{siteId}/mailing-list/setup/booking-opt-in",
11127
+ method: "PUT",
11128
+ tags: [TAG_TEMPLATES.site, TAG_TEMPLATES.siteNewsletter],
11129
+ auth: "user",
11130
+ responseKind: "json",
11131
+ demoMutation: DEMO_MUTATION_BLOCKED_DISABLED,
11132
+ errors: [
11133
+ "auth:forbidden",
11134
+ "validation:invalid_input",
11135
+ "resource:conflict",
11136
+ "server:internal_error"
11137
+ ]
11138
+ },
10902
11139
  getMailingListAuthoringContext: {
10903
11140
  path: "/sites/{siteId}/mailing-list/authoring-context",
10904
11141
  method: "GET",
@@ -12237,6 +12474,54 @@ var init_billingEndpointDefinitions = __esmMin((() => {
12237
12474
  responseKind: "json"
12238
12475
  }
12239
12476
  });
12477
+ }));
12478
+ //#endregion
12479
+ //#region ../api/src/bookingPeopleEndpointDefinitions.ts
12480
+ var BOOKING_PEOPLE_ENDPOINT_DEFINITIONS;
12481
+ var init_bookingPeopleEndpointDefinitions = __esmMin((() => {
12482
+ init_defineEndpointDefinitions();
12483
+ BOOKING_PEOPLE_ENDPOINT_DEFINITIONS = defineEndpointDefinitions({
12484
+ listPeople: {
12485
+ path: "/sites/{siteId}/bookings/people",
12486
+ method: "GET",
12487
+ tags: ["site-{siteId}", "customers-{siteId}"],
12488
+ auth: "user",
12489
+ responseKind: "json",
12490
+ errors: ["server:internal_error"]
12491
+ },
12492
+ exportPeopleCsv: {
12493
+ path: "/sites/{siteId}/bookings/people/export.csv",
12494
+ method: "GET",
12495
+ tags: ["site-{siteId}", "customers-{siteId}"],
12496
+ auth: "user",
12497
+ errors: [],
12498
+ responseKind: "blob"
12499
+ },
12500
+ checkPersonDeletion: {
12501
+ path: "/sites/{siteId}/bookings/people/{personId}/deletion-check",
12502
+ method: "GET",
12503
+ tags: ["site-{siteId}", "customers-{siteId}"],
12504
+ auth: "user",
12505
+ responseKind: "json",
12506
+ errors: [
12507
+ "auth:forbidden",
12508
+ "resource:not_found",
12509
+ "server:internal_error"
12510
+ ]
12511
+ },
12512
+ deletePerson: {
12513
+ path: "/sites/{siteId}/bookings/people/{personId}",
12514
+ method: "DELETE",
12515
+ tags: ["site-{siteId}", "customers-{siteId}"],
12516
+ auth: "user",
12517
+ responseKind: "json",
12518
+ errors: [
12519
+ "auth:forbidden",
12520
+ "resource:not_found",
12521
+ "server:internal_error"
12522
+ ]
12523
+ }
12524
+ });
12240
12525
  })), CLIENT_ERROR_REPORT_ENDPOINT_DEFINITIONS, CLIENT_ERROR_REPORT_LIMITS, clientErrorEventSchema;
12241
12526
  var init_clientErrorReporting = __esmMin((() => {
12242
12527
  init_defineEndpointDefinitions();
@@ -12275,6 +12560,7 @@ var init_clientErrorReporting = __esmMin((() => {
12275
12560
  }).strict();
12276
12561
  }));
12277
12562
  var init_endpoints = __esmMin((() => {
12563
+ init_siteLifecycleEndpoints();
12278
12564
  init_publicNewsletterEndpointDefinitions();
12279
12565
  init_demoMutationPolicies();
12280
12566
  init_cache_tags();
@@ -12297,8 +12583,10 @@ var init_endpoints = __esmMin((() => {
12297
12583
  init_publicReadEndpointDefinitions();
12298
12584
  init_publicOnboardingAttemptEndpointDefinitions();
12299
12585
  init_billingEndpointDefinitions();
12586
+ init_bookingPeopleEndpointDefinitions();
12300
12587
  init_clientErrorReporting();
12301
12588
  ({
12589
+ ...SITE_LIFECYCLE_ENDPOINT_DEFINITIONS,
12302
12590
  ...CLIENT_ERROR_REPORT_ENDPOINT_DEFINITIONS,
12303
12591
  ...PUBLIC_NEWSLETTER_ENDPOINT_DEFINITIONS,
12304
12592
  ...ACCOUNT_ENDPOINT_DEFINITIONS,
@@ -12312,7 +12600,7 @@ var init_endpoints = __esmMin((() => {
12312
12600
  ...NEWSLETTER_ENDPOINT_DEFINITIONS,
12313
12601
  ...APPOINTMENT_ENDPOINT_DEFINITIONS,
12314
12602
  ...EVENT_SERIES_REGISTRATION_ENDPOINT_DEFINITIONS
12315
- }, 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 };
12603
+ }, 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 }, { ...BOOKING_PEOPLE_ENDPOINT_DEFINITIONS }, { ...SDK_MEDIA_ENDPOINT_DEFINITIONS }, { ...SDK_ENDPOINT_DEFINITIONS }, { ...SDK_PAGE_DESIGN_ENDPOINT_DEFINITIONS }, { ...SDK_EVENT_ENDPOINT_DEFINITIONS }, { ...SDK_ENTRY_READ_ENDPOINTS };
12316
12604
  }));
12317
12605
  var init_preview_auth = __esmMin((() => {
12318
12606
  z.object({ refreshToken: z.string().min(1).max(4096) }).strict();
@@ -12603,7 +12891,11 @@ var init_contracts$1 = __esmMin((() => {
12603
12891
  /** Pair a published version with the content it authorises at the render boundary. */
12604
12892
  function readPublishedBlockPlacement(id, content) {
12605
12893
  if (id == null && content == null) return null;
12606
- if (id == null || content == null) throw new Error("Published block placement requires both an ID and content");
12894
+ if (id == null || content == null) return {
12895
+ kind: "incomplete",
12896
+ id: id ?? null,
12897
+ content: content ?? null
12898
+ };
12607
12899
  return {
12608
12900
  id,
12609
12901
  content
@@ -20020,6 +20312,15 @@ var init_resolver$1 = __esmMin((() => {
20020
20312
  blockDesignFallback.sectionSurface, blockDesignFallback.contentFrame, blockDesignFallback.sectionHeight, blockDesignFallback.heroLegibility, blockDesignFallback.imageSurfaceTreatment, blockDesignFallback.imageSurfaceMotion, blockDesignFallback.tileTreatment, blockDesignFallback.eventListTreatment, blockDesignFallback.eyebrowTreatment, blockDesignFallback.accordionIconTreatment, blockDesignFallback.composition;
20021
20313
  }));
20022
20314
  //#endregion
20315
+ //#region ../theme-core/src/header/rootPaint.ts
20316
+ /** The nav container takes precedence when a floating header also has one. */
20317
+ function headerRootPaint(header) {
20318
+ const navContainerType = header?.navContainer?.type ?? "none";
20319
+ if (navContainerType === "glass" || navContainerType === "pill") return "contained-nav";
20320
+ return header?.variant === "floating" ? "overlay" : "own-surface";
20321
+ }
20322
+ var init_rootPaint = __esmMin((() => {}));
20323
+ //#endregion
20023
20324
  //#region ../theme-core/src/site-styles/siteChromeBackgrounds.ts
20024
20325
  function parseSiteChromeBackgroundColorToken(value) {
20025
20326
  const token = parseBackgroundAppearanceColorToken(value);
@@ -20296,10 +20597,276 @@ var init_headerPreferencesPersistence = __esmMin((() => {
20296
20597
  }).strict();
20297
20598
  }));
20298
20599
  //#endregion
20600
+ //#region ../theme-core/src/navigation/presets.ts
20601
+ /**
20602
+ * Get a nav link style preset by ID
20603
+ */
20604
+ function getNavLinkPreset(presetId) {
20605
+ return NAV_LINK_PRESETS[presetId];
20606
+ }
20607
+ var NAV_LINK_PRESETS;
20608
+ var init_presets$1 = __esmMin((() => {
20609
+ NAV_LINK_PRESETS = {
20610
+ /**
20611
+ * Minimal - subtle color change on hover
20612
+ */
20613
+ minimal: {
20614
+ name: "Minimal",
20615
+ typography: "body",
20616
+ fontWeight: "medium",
20617
+ textTransform: "none",
20618
+ italic: false,
20619
+ colorToken: "text",
20620
+ hoverColorToken: "primary",
20621
+ padding: "none",
20622
+ borderRadius: "none",
20623
+ effects: { hover: [{
20624
+ effectId: "text-color-change",
20625
+ options: { hoverColorToken: "primary" }
20626
+ }] }
20627
+ },
20628
+ /**
20629
+ * Underline - static underline appears on hover
20630
+ */
20631
+ underline: {
20632
+ name: "Underline",
20633
+ typography: "body",
20634
+ fontWeight: "medium",
20635
+ textTransform: "none",
20636
+ italic: false,
20637
+ colorToken: "text",
20638
+ padding: "none",
20639
+ borderRadius: "none",
20640
+ effects: { hover: [{
20641
+ effectId: "nav-underline",
20642
+ options: { style: "static" }
20643
+ }] }
20644
+ },
20645
+ /**
20646
+ * Underline Grow - animated underline grows from center on hover
20647
+ */
20648
+ "underline-grow": {
20649
+ name: "Underline Grow",
20650
+ typography: "body",
20651
+ fontWeight: "medium",
20652
+ textTransform: "none",
20653
+ italic: false,
20654
+ colorToken: "text",
20655
+ padding: "none",
20656
+ borderRadius: "none",
20657
+ effects: { hover: [{
20658
+ effectId: "nav-underline",
20659
+ options: { style: "grow" }
20660
+ }] }
20661
+ },
20662
+ /**
20663
+ * Capsule - pill-shaped background on hover
20664
+ */
20665
+ capsule: {
20666
+ name: "Capsule",
20667
+ typography: "body",
20668
+ fontWeight: "medium",
20669
+ textTransform: "none",
20670
+ italic: false,
20671
+ colorToken: "text",
20672
+ padding: "compact",
20673
+ borderRadius: "full",
20674
+ effects: {
20675
+ hover: [{
20676
+ effectId: "background-on-hover-alpha",
20677
+ options: {
20678
+ colorToken: "primary",
20679
+ opacity: 10
20680
+ }
20681
+ }],
20682
+ active: [{
20683
+ effectId: "background-on-hover-alpha",
20684
+ options: {
20685
+ colorToken: "primary",
20686
+ opacity: 15
20687
+ }
20688
+ }]
20689
+ }
20690
+ },
20691
+ /**
20692
+ * Solid - solid background color on hover
20693
+ */
20694
+ solid: {
20695
+ name: "Solid",
20696
+ typography: "body",
20697
+ fontWeight: "medium",
20698
+ textTransform: "none",
20699
+ italic: false,
20700
+ colorToken: "text",
20701
+ padding: "compact",
20702
+ borderRadius: "none",
20703
+ effects: {
20704
+ hover: [{
20705
+ effectId: "background-on-hover",
20706
+ options: {
20707
+ colorToken: "primary",
20708
+ textColorToken: "primaryForeground"
20709
+ }
20710
+ }],
20711
+ active: [{
20712
+ effectId: "background-on-hover",
20713
+ options: {
20714
+ colorToken: "primary",
20715
+ textColorToken: "primaryForeground"
20716
+ }
20717
+ }]
20718
+ }
20719
+ },
20720
+ /**
20721
+ * Scale - gentle scale-up on hover
20722
+ */
20723
+ scale: {
20724
+ name: "Scale",
20725
+ typography: "body",
20726
+ fontWeight: "medium",
20727
+ textTransform: "none",
20728
+ italic: false,
20729
+ colorToken: "text",
20730
+ padding: "none",
20731
+ borderRadius: "none",
20732
+ effects: { hover: [{
20733
+ effectId: "scale-up",
20734
+ options: { scale: 1.05 }
20735
+ }] }
20736
+ },
20737
+ /**
20738
+ * Frosted - semi-transparent glass-like background
20739
+ */
20740
+ frosted: {
20741
+ name: "Frosted",
20742
+ typography: "body",
20743
+ fontWeight: "medium",
20744
+ textTransform: "none",
20745
+ italic: false,
20746
+ colorToken: "text",
20747
+ padding: "compact",
20748
+ borderRadius: "md",
20749
+ effects: {
20750
+ base: [{ effectId: "nav-frosted-base" }],
20751
+ hover: [{ effectId: "nav-frosted-hover" }],
20752
+ active: [{ effectId: "nav-frosted-active" }]
20753
+ }
20754
+ }
20755
+ };
20756
+ Object.keys(NAV_LINK_PRESETS);
20757
+ }));
20758
+ //#endregion
20759
+ //#region ../theme-core/src/header/legacyNavLinkStyle.ts
20760
+ function buildLegacyHeaderNavLinkStyle(header, contrastTreatment, navTextSize) {
20761
+ const navStyle = header.navStyle ?? "minimal";
20762
+ const basePreset = getNavLinkPreset(navStyle);
20763
+ if (!basePreset) return null;
20764
+ const style = {
20765
+ ...basePreset,
20766
+ fontWeight: header.navWeight ?? basePreset.fontWeight,
20767
+ colorToken: (header.navColor ?? header.textColor)?.trim() || basePreset.colorToken,
20768
+ ...contrastTreatment ? { contrastTreatment } : {},
20769
+ ...navTextSize ? { textSize: navTextSize } : {}
20770
+ };
20771
+ if (header.navWeight === "bold" && navStyle === "solid") style.textTransform = "uppercase";
20772
+ applyLegacyGlassTreatment(style, header, navStyle);
20773
+ return style;
20774
+ }
20775
+ function applyLegacyGlassTreatment(style, header, navStyle) {
20776
+ if (header.navContainer?.type !== "glass" || navStyle !== "minimal") return;
20777
+ style.borderRadius = "full";
20778
+ style.effects = {
20779
+ ...style.effects,
20780
+ hover: glassStateEffects(10),
20781
+ active: glassStateEffects(18)
20782
+ };
20783
+ }
20784
+ function glassStateEffects(opacity) {
20785
+ return [{
20786
+ effectId: "background-on-hover-alpha",
20787
+ options: {
20788
+ colorToken: "neutral-50",
20789
+ opacity
20790
+ }
20791
+ }, {
20792
+ effectId: "text-color-change",
20793
+ options: { hoverColorToken: "neutral-50" }
20794
+ }];
20795
+ }
20796
+ var init_legacyNavLinkStyle = __esmMin((() => {
20797
+ init_presets$1();
20798
+ }));
20799
+ //#endregion
20800
+ //#region ../theme-core/src/header/openingForegroundProjection.ts
20801
+ function readOpeningForegroundProjection(header) {
20802
+ return header?.__runtimeOpeningForeground ?? null;
20803
+ }
20804
+ var init_openingForegroundProjection = __esmMin((() => {}));
20805
+ //#endregion
20806
+ //#region ../theme-core/src/header/effectiveNavLinkStyle.ts
20807
+ function effectiveHeaderNavLinkStyle(header, contrastTreatment = null, navTextSize = null) {
20808
+ if (!header) return null;
20809
+ if (!header.navLinkStyle) return buildLegacyHeaderNavLinkStyle(header, contrastTreatment, navTextSize);
20810
+ return {
20811
+ ...header.navLinkStyle,
20812
+ ...contrastTreatment ? { contrastTreatment } : {},
20813
+ ...navTextSize ? { textSize: navTextSize } : {}
20814
+ };
20815
+ }
20816
+ function headerForegroundCandidates(header) {
20817
+ if (!header) return {};
20818
+ const style = effectiveHeaderNavLinkStyle(header);
20819
+ return {
20820
+ text: header.textColor ?? header.background?.textColor,
20821
+ link: style?.colorToken ?? header.navColor ?? header.textColor,
20822
+ linkHover: navLinkHoverColorCandidate(style)
20823
+ };
20824
+ }
20825
+ function headerLeafTextColor(header) {
20826
+ if (!header) return "text";
20827
+ return header.textColor ?? header.navColor ?? header.background?.textColor ?? header.navLinkStyle?.colorToken ?? "text";
20828
+ }
20829
+ /** Transparent chrome must reset the whole contract on its own root. */
20830
+ function transparentHeaderForegroundInput(header, palette) {
20831
+ const projection = readOpeningForegroundProjection(header);
20832
+ if (projection?.kind === "known") return surfaceForegroundInputFromResolved(projection, rgbColorValue);
20833
+ return authoredTransparentHeaderForegroundInput(header, palette);
20834
+ }
20835
+ function authoredTransparentHeaderForegroundInput(header, palette) {
20836
+ const text = headerLeafTextColor(header);
20837
+ const style = effectiveHeaderNavLinkStyle(header);
20838
+ const link = style?.colorToken ?? text;
20839
+ const restingToken = parseThemeColorToken(link) ?? parseThemeColorToken("text");
20840
+ if (!restingToken) throw new Error("Built-in text colour token is invalid");
20841
+ const hover = planForegroundHover({
20842
+ restingToken,
20843
+ candidate: navLinkOwnsHoverForeground(style) ? null : navLinkHoverColorCandidate(style),
20844
+ palette,
20845
+ backdrops: null
20846
+ });
20847
+ return {
20848
+ text: rgbColorValue(text),
20849
+ link: rgbColorValue(link),
20850
+ linkHover: rgbColorValue(hover.token),
20851
+ hoverDecoration: navLinkOwnsUnderline(style) ? "initial" : hover.decoration
20852
+ };
20853
+ }
20854
+ var init_effectiveNavLinkStyle$1 = __esmMin((() => {
20855
+ init_types$8();
20856
+ init_legacyNavLinkStyle();
20857
+ init_openingForegroundProjection();
20858
+ init_surfaces();
20859
+ init_foregroundInteraction();
20860
+ init_tokens();
20861
+ init_colorStyles();
20862
+ }));
20863
+ //#endregion
20299
20864
  //#region ../theme-core/src/site-styles/headerOpeningForeground.ts
20300
20865
  var init_headerOpeningForeground = __esmMin((() => {
20301
20866
  init_foregroundInteraction();
20302
20867
  init_tokens();
20868
+ init_types$8();
20869
+ init_effectiveNavLinkStyle$1();
20303
20870
  }));
20304
20871
  //#endregion
20305
20872
  //#region ../theme-core/src/site-styles/effectivePageDesign.ts
@@ -20586,192 +21153,84 @@ var init_navDropdownSizing = __esmMin((() => {
20586
21153
  var init_surfaceRules = __esmMin((() => {
20587
21154
  init_shared$4();
20588
21155
  init_colorStyles();
20589
- })), NAV_LINK_PRESETS;
20590
- var init_presets$1 = __esmMin((() => {
20591
- NAV_LINK_PRESETS = {
20592
- /**
20593
- * Minimal - subtle color change on hover
20594
- */
20595
- minimal: {
20596
- name: "Minimal",
20597
- typography: "body",
20598
- fontWeight: "medium",
20599
- textTransform: "none",
20600
- italic: false,
20601
- colorToken: "text",
20602
- hoverColorToken: "primary",
20603
- padding: "none",
20604
- borderRadius: "none",
20605
- effects: { hover: [{
20606
- effectId: "text-color-change",
20607
- options: { hoverColorToken: "primary" }
20608
- }] }
20609
- },
20610
- /**
20611
- * Underline - static underline appears on hover
20612
- */
20613
- underline: {
20614
- name: "Underline",
20615
- typography: "body",
20616
- fontWeight: "medium",
20617
- textTransform: "none",
20618
- italic: false,
20619
- colorToken: "text",
20620
- padding: "none",
20621
- borderRadius: "none",
20622
- effects: { hover: [{
20623
- effectId: "nav-underline",
20624
- options: { style: "static" }
20625
- }] }
20626
- },
20627
- /**
20628
- * Underline Grow - animated underline grows from center on hover
20629
- */
20630
- "underline-grow": {
20631
- name: "Underline Grow",
20632
- typography: "body",
20633
- fontWeight: "medium",
20634
- textTransform: "none",
20635
- italic: false,
20636
- colorToken: "text",
20637
- padding: "none",
20638
- borderRadius: "none",
20639
- effects: { hover: [{
20640
- effectId: "nav-underline",
20641
- options: { style: "grow" }
20642
- }] }
20643
- },
20644
- /**
20645
- * Capsule - pill-shaped background on hover
20646
- */
20647
- capsule: {
20648
- name: "Capsule",
20649
- typography: "body",
20650
- fontWeight: "medium",
20651
- textTransform: "none",
20652
- italic: false,
20653
- colorToken: "text",
20654
- padding: "compact",
20655
- borderRadius: "full",
20656
- effects: {
20657
- hover: [{
20658
- effectId: "background-on-hover-alpha",
20659
- options: {
20660
- colorToken: "primary",
20661
- opacity: 10
20662
- }
20663
- }],
20664
- active: [{
20665
- effectId: "background-on-hover-alpha",
20666
- options: {
20667
- colorToken: "primary",
20668
- opacity: 15
20669
- }
20670
- }]
20671
- }
20672
- },
20673
- /**
20674
- * Solid - solid background color on hover
20675
- */
20676
- solid: {
20677
- name: "Solid",
20678
- typography: "body",
20679
- fontWeight: "medium",
20680
- textTransform: "none",
20681
- italic: false,
20682
- colorToken: "text",
20683
- padding: "compact",
20684
- borderRadius: "none",
20685
- effects: {
20686
- hover: [{
20687
- effectId: "background-on-hover",
20688
- options: {
20689
- colorToken: "primary",
20690
- textColorToken: "primaryForeground"
20691
- }
20692
- }],
20693
- active: [{
20694
- effectId: "background-on-hover",
20695
- options: {
20696
- colorToken: "primary",
20697
- textColorToken: "primaryForeground"
20698
- }
20699
- }]
20700
- }
20701
- },
20702
- /**
20703
- * Scale - gentle scale-up on hover
20704
- */
20705
- scale: {
20706
- name: "Scale",
20707
- typography: "body",
20708
- fontWeight: "medium",
20709
- textTransform: "none",
20710
- italic: false,
20711
- colorToken: "text",
20712
- padding: "none",
20713
- borderRadius: "none",
20714
- effects: { hover: [{
20715
- effectId: "scale-up",
20716
- options: { scale: 1.05 }
20717
- }] }
20718
- },
20719
- /**
20720
- * Frosted - semi-transparent glass-like background
20721
- */
20722
- frosted: {
20723
- name: "Frosted",
20724
- typography: "body",
20725
- fontWeight: "medium",
20726
- textTransform: "none",
20727
- italic: false,
20728
- colorToken: "text",
20729
- padding: "compact",
20730
- borderRadius: "md",
20731
- effects: {
20732
- base: [{ effectId: "nav-frosted-base" }],
20733
- hover: [{ effectId: "nav-frosted-hover" }],
20734
- active: [{ effectId: "nav-frosted-active" }]
20735
- }
20736
- }
20737
- };
20738
- Object.keys(NAV_LINK_PRESETS);
20739
21156
  }));
20740
21157
  //#endregion
20741
- //#region ../theme-core/src/header/legacyNavLinkStyle.ts
20742
- var init_legacyNavLinkStyle = __esmMin((() => {
20743
- init_presets$1();
21158
+ //#region ../theme-core/src/header/generateHeaderNavLinkStyles.ts
21159
+ var init_generateHeaderNavLinkStyles = __esmMin((() => {
21160
+ init_generateNavLinkCSS();
21161
+ init_siteChromeNavPreferences();
21162
+ init_effectiveNavLinkStyle$1();
21163
+ init_rawStyleFields();
21164
+ }));
21165
+ //#endregion
21166
+ //#region ../theme-core/src/header/generateHeaderLogoStyles.ts
21167
+ var init_generateHeaderLogoStyles = __esmMin((() => {
21168
+ init_generateNavLinkCSS();
21169
+ init_surfaces();
20744
21170
  }));
20745
21171
  //#endregion
20746
21172
  //#region ../theme-core/src/header/generateHeaderCss.ts
20747
21173
  var init_generateHeaderCss = __esmMin((() => {
20748
21174
  init_resolver$2();
20749
21175
  init_generateNavLinkCSS();
20750
- init_siteChromeNavPreferences();
20751
21176
  init_shared$4();
20752
21177
  init_breakpoints();
20753
21178
  init_navDropdownSizing();
20754
21179
  init_scrollTreatment();
20755
21180
  init_paintTargets();
20756
21181
  init_surfaceRules();
20757
- init_legacyNavLinkStyle();
21182
+ init_generateHeaderNavLinkStyles();
21183
+ init_rawStyleFields();
21184
+ init_generateHeaderLogoStyles();
21185
+ init_surfaces();
20758
21186
  }));
20759
21187
  //#endregion
20760
21188
  //#region ../theme-core/src/header/index.ts
20761
21189
  var init_header = __esmMin((() => {
20762
21190
  init_generateHeaderCss();
21191
+ init_rootPaint();
21192
+ init_effectiveNavLinkStyle$1();
21193
+ init_openingForegroundProjection();
21194
+ }));
21195
+ //#endregion
21196
+ //#region ../theme-core/src/footer/effectiveNavLinkStyle.ts
21197
+ function effectiveFooterNavLinkStyle(footer) {
21198
+ if (!footer) return null;
21199
+ if (footer.navLinkStyle) return footer.navLinkStyle;
21200
+ const basePreset = getNavLinkPreset(footer.navStyle ?? "minimal");
21201
+ if (!basePreset) return null;
21202
+ return {
21203
+ ...basePreset,
21204
+ fontWeight: footer.navWeight ?? basePreset.fontWeight,
21205
+ colorToken: footer.navColor?.trim() || basePreset.colorToken
21206
+ };
21207
+ }
21208
+ function footerForegroundCandidates(footer, proseHoverCandidate) {
21209
+ if (!footer) return {};
21210
+ const style = effectiveFooterNavLinkStyle(footer);
21211
+ return {
21212
+ text: footer.background?.textColor,
21213
+ link: style?.colorToken ?? footer.navColor ?? footer.background?.textColor,
21214
+ linkHover: navLinkOwnsHoverForeground(style) ? proseHoverCandidate : navLinkHoverColorCandidate(style)
21215
+ };
21216
+ }
21217
+ var init_effectiveNavLinkStyle = __esmMin((() => {
21218
+ init_presets$1();
21219
+ init_types$8();
20763
21220
  }));
20764
21221
  //#endregion
20765
21222
  //#region ../theme-core/src/footer/generateFooterCss.ts
20766
21223
  var init_generateFooterCss = __esmMin((() => {
20767
21224
  init_resolver$2();
20768
21225
  init_generateNavLinkCSS();
20769
- init_presets$1();
21226
+ init_effectiveNavLinkStyle();
21227
+ init_rawStyleFields();
20770
21228
  }));
20771
21229
  //#endregion
20772
21230
  //#region ../theme-core/src/footer/index.ts
20773
21231
  var init_footer = __esmMin((() => {
20774
21232
  init_generateFooterCss();
21233
+ init_effectiveNavLinkStyle();
20775
21234
  }));
20776
21235
  //#endregion
20777
21236
  //#region ../theme-core/src/layout/boundaryCss.ts
@@ -26636,33 +27095,28 @@ var init_themeColorResolution = __esmMin((() => {
26636
27095
  }));
26637
27096
  //#endregion
26638
27097
  //#region ../blocks/src/system/transforms/registry/_utils/surfaceForegroundStyles.ts
26639
- function resolveHeaderLeafTextColor(header) {
26640
- return header?.textColor ?? header?.navColor ?? header?.background?.textColor ?? header?.navLinkStyle?.colorToken ?? "text";
26641
- }
26642
27098
  function resolveHeaderRootForeground(header, palette, isTransparent) {
26643
- if (isTransparent) return { kind: "unknown" };
27099
+ if (isTransparent) return readOpeningForegroundProjection(header) ?? { kind: "unknown" };
26644
27100
  const background = header?.background;
26645
27101
  return resolveSurfaceForeground(background ?? {
26646
27102
  type: "color",
26647
27103
  color: "surface"
26648
- }, palette, {
26649
- text: header?.textColor ?? background?.textColor,
26650
- link: header?.navLinkStyle?.colorToken ?? header?.navColor ?? header?.textColor
26651
- });
27104
+ }, palette, headerForegroundCandidates(header));
27105
+ }
27106
+ function resolveFooterRootForeground(footer, palette, proseHoverCandidate) {
27107
+ return resolveSurfaceForeground(footer?.background ?? {
27108
+ type: "color",
27109
+ color: "surface"
27110
+ }, palette, footerForegroundCandidates(footer, proseHoverCandidate), { compositeBase: "background" });
26652
27111
  }
26653
27112
  function resolveSurfaceForegroundStyles(value, context, options) {
26654
27113
  const input = parseBackgroundContent(value);
26655
- const foreground = input ? resolveSurfaceForeground(input, context.theme.palette, {}, { compositeBase: options?.fallbackToken }) : { kind: "unknown" };
27114
+ const foreground = input ? resolveSurfaceForeground(input, context.theme.palette, { linkHover: context.proseHoverCandidate }, { compositeBase: options?.fallbackToken }) : { kind: "unknown" };
26656
27115
  const buttonStyles = resolveContextualButtonStyles(input, foreground, context, options);
26657
27116
  if (foreground.kind === "unknown") return buttonStyles;
26658
27117
  return {
26659
27118
  ...buttonStyles,
26660
- ...surfaceForegroundStyle({
26661
- text: resolveBackgroundColorValue(foreground.roles.text, context),
26662
- heading: resolveBackgroundColorValue(foreground.roles.heading, context),
26663
- link: resolveBackgroundColorValue(foreground.roles.link, context),
26664
- supporting: resolveBackgroundColorValue(foreground.roles.supporting, context)
26665
- })
27119
+ ...surfaceForegroundStyle(surfaceForegroundInputFromResolved(foreground, (token) => resolveBackgroundColorValue(token, context)))
26666
27120
  };
26667
27121
  }
26668
27122
  function resolveContextualButtonStyles(background, foreground, context, options) {
@@ -26712,6 +27166,8 @@ function deriveButtonSurfaceInput(background, foreground) {
26712
27166
  var contextualButtonStylesCache;
26713
27167
  var init_surfaceForegroundStyles = __esmMin((() => {
26714
27168
  init_surfaces();
27169
+ init_header();
27170
+ init_footer();
26715
27171
  init_buttons();
26716
27172
  init_backgroundContent();
26717
27173
  init_themeColorResolution();
@@ -32778,10 +33234,7 @@ function resolveBackgroundVisualStyles(backgroundColor, defaultToken = "surface"
32778
33234
  };
32779
33235
  }
32780
33236
  function resolveHeaderVisualStyles(header) {
32781
- const navContainerType = header?.navContainer?.type ?? "none";
32782
- const hasContainedNav = navContainerType === "glass" || navContainerType === "pill";
32783
- const hasOverlayVariant = header?.variant === "floating";
32784
- if (hasContainedNav || hasOverlayVariant) return {
33237
+ if (headerRootPaint(header) !== "own-surface") return {
32785
33238
  backgroundToken: "transparent",
32786
33239
  isTransparent: true
32787
33240
  };
@@ -32792,29 +33245,32 @@ function resolveHeaderVisualStyles(header) {
32792
33245
  }
32793
33246
  function resolvedForegroundStyle(foreground) {
32794
33247
  if (foreground.kind === "unknown") return void 0;
32795
- const { roles } = foreground;
32796
- return surfaceForegroundStyle({
32797
- text: rgbColorValue(roles.text),
32798
- heading: rgbColorValue(roles.heading),
32799
- link: rgbColorValue(roles.link),
32800
- supporting: rgbColorValue(roles.supporting)
32801
- });
32802
- }
32803
- function resolveFooterRootForeground(footer, palette) {
32804
- const background = footer?.background;
32805
- return resolveSurfaceForeground(background ?? {
32806
- type: "color",
32807
- color: "surface"
32808
- }, palette, {
32809
- text: background?.textColor,
32810
- link: footer?.navLinkStyle?.colorToken ?? footer?.navColor ?? background?.textColor
32811
- });
33248
+ return surfaceForegroundStyle(surfaceForegroundInputFromResolved(foreground, rgbColorValue));
32812
33249
  }
32813
33250
  function footerBottomBarBorderWidthStyle(width) {
32814
33251
  if (!width) return void 0;
32815
33252
  if (width === "none") return { borderTopWidth: "0px" };
32816
33253
  return { borderTopWidth: width === "thin" ? "1px" : width === "medium" ? "2px" : "3px" };
32817
33254
  }
33255
+ function footerBottomBarForegroundStyle(footer, palette) {
33256
+ if (!footer?.bottomBar) return void 0;
33257
+ const bar = footer.bottomBar;
33258
+ if (bar.background?.type !== "color") return backgroundlessBottomBarForegroundStyle(footer);
33259
+ return resolvedForegroundStyle(resolveSurfaceForeground(bar.background, palette, {
33260
+ text: bar.textColor,
33261
+ link: footer.bottomTextLinkStyle?.colorToken ?? bar.textColor,
33262
+ linkHover: footer.bottomTextLinkStyle?.hoverColorToken
33263
+ }, { compositeBase: measuredFooterBackdrop(footer, palette) }));
33264
+ }
33265
+ function backgroundlessBottomBarForegroundStyle(footer) {
33266
+ if (footer.background?.contentOwner === "site-chrome-editor") return;
33267
+ const textColor = footer.bottomBar?.textColor;
33268
+ return textColor ? textColorStyle(textColor) : void 0;
33269
+ }
33270
+ function measuredFooterBackdrop(footer, palette) {
33271
+ const foreground = resolveFooterRootForeground(footer, palette);
33272
+ return foreground.kind === "known" && foreground.provenance.kind === "measured" ? foreground.provenance.backdropHex : null;
33273
+ }
32818
33274
  function shouldShowFooterLogoText(footer) {
32819
33275
  if (!footer) return false;
32820
33276
  const explicit = footer.logo?.showLogoText;
@@ -32835,6 +33291,8 @@ var init_layout$2 = __esmMin((() => {
32835
33291
  init_surfaces();
32836
33292
  init_siteChromePlacement();
32837
33293
  init_runtimeContract();
33294
+ init_header();
33295
+ init_site_styles();
32838
33296
  init_surfaceForegroundStyles();
32839
33297
  joinClasses = (parts) => parts.filter((part) => typeof part === "string" && part.trim().length > 0).join(" ").replace(/\s+/g, " ").trim();
32840
33298
  headerLogoClassSchema = z.object({ base: z.string().optional() });
@@ -32920,8 +33378,7 @@ var init_layout$2 = __esmMin((() => {
32920
33378
  const placement = planSiteChromePlacement(parseHeaderPositioning(content.positioning));
32921
33379
  const header = asPartialObject(value);
32922
33380
  const visuals = resolveHeaderVisualStyles(header);
32923
- const navContainerType = header?.navContainer?.type ?? "none";
32924
- const hasContainedNav = navContainerType === "glass" || navContainerType === "pill";
33381
+ const hasContainedNav = headerRootPaint(header) === "contained-nav";
32925
33382
  const backgroundClass = visuals.isTransparent || hasContainedNav ? "rb-bg-transparent" : null;
32926
33383
  const classes = [config.base, backgroundClass];
32927
33384
  if (!hasContainedNav) {
@@ -32965,7 +33422,7 @@ var init_layout$2 = __esmMin((() => {
32965
33422
  run: (value, _options, context) => {
32966
33423
  const header = asPartialObject(value);
32967
33424
  const visuals = resolveHeaderVisualStyles(header);
32968
- return mergeStyles(resolvedForegroundStyle(resolveHeaderRootForeground(header, context.theme.palette, visuals.isTransparent)) ?? { color: rgbColorValue(resolveHeaderLeafTextColor(header)) }, borderColorStyle(header?.border?.colorToken ?? "border"));
33425
+ 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"));
32969
33426
  }
32970
33427
  };
32971
33428
  headerSectionBackgroundTransform = {
@@ -32973,9 +33430,7 @@ var init_layout$2 = __esmMin((() => {
32973
33430
  kind: "string",
32974
33431
  summary: "Resolve the inner site-header section background token",
32975
33432
  run: (value) => {
32976
- const header = asPartialObject(value);
32977
- const navContainerType = header?.navContainer?.type ?? "none";
32978
- return header?.variant === "floating" || navContainerType === "glass" || navContainerType === "pill" ? "raw:transparent" : "background";
33433
+ return headerRootPaint(asPartialObject(value)) !== "own-surface" ? "raw:transparent" : "background";
32979
33434
  }
32980
33435
  };
32981
33436
  footerRootStyleTransform = {
@@ -32993,7 +33448,7 @@ var init_layout$2 = __esmMin((() => {
32993
33448
  styleParts.push(backgroundColorStyle(token));
32994
33449
  }
32995
33450
  }
32996
- styleParts.push(resolvedForegroundStyle(resolveFooterRootForeground(footer, context.theme.palette)));
33451
+ styleParts.push(resolvedForegroundStyle(resolveFooterRootForeground(footer, context.theme.palette, context.proseHoverCandidate)));
32997
33452
  styleParts.push(borderColorStyle("border"));
32998
33453
  return mergeStyles(...styleParts);
32999
33454
  }
@@ -33057,20 +33512,7 @@ var init_layout$2 = __esmMin((() => {
33057
33512
  run: (value, _options, context) => {
33058
33513
  const footer = asPartialObject(value);
33059
33514
  const bottomBar = footer?.bottomBar;
33060
- const styleParts = [];
33061
- const background = bottomBar?.background;
33062
- if (background?.type === "color") styleParts.push(backgroundColorStyle(background.color ?? "surface"));
33063
- styleParts.push(borderColorStyle(bottomBar?.borderTop?.colorToken ?? "border"), footerBottomBarBorderWidthStyle(bottomBar?.borderTop?.width));
33064
- const foreground = resolveSurfaceForeground(background?.type === "color" ? background : {
33065
- type: "color",
33066
- color: "transparent"
33067
- }, context.theme.palette, {
33068
- text: bottomBar?.textColor,
33069
- link: footer?.bottomTextLinkStyle?.colorToken ?? bottomBar?.textColor
33070
- });
33071
- if (background?.type === "color") styleParts.push(resolvedForegroundStyle(foreground));
33072
- else if (bottomBar?.textColor) styleParts.push(textColorStyle(bottomBar.textColor));
33073
- return mergeStyles(...styleParts);
33515
+ 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));
33074
33516
  }
33075
33517
  };
33076
33518
  footerSplitMainClassSchema = z.object({
@@ -33155,7 +33597,7 @@ function chromeSurfaceTextToken(surface, theme, palette) {
33155
33597
  case "header-root": {
33156
33598
  const header = theme.header;
33157
33599
  const foreground = resolveHeaderRootForeground(header, palette, resolveHeaderVisualStyles(header).isTransparent);
33158
- return foreground.kind === "known" ? foreground.roles.text : resolveHeaderLeafTextColor(header);
33600
+ return foreground.kind === "known" ? foreground.roles.text : headerLeafTextColor(header);
33159
33601
  }
33160
33602
  case "header-mobile-panel": return theme.header?.dropdownStyle?.textColor ?? "text";
33161
33603
  case "footer-root": {
@@ -33176,6 +33618,7 @@ var init_chromeLogo = __esmMin((() => {
33176
33618
  init_core();
33177
33619
  init_layout$2();
33178
33620
  init_surfaceForegroundStyles();
33621
+ init_header();
33179
33622
  chromeLogoSchema = z.object({ surface: z.enum([
33180
33623
  "header-root",
33181
33624
  "header-mobile-panel",
@@ -35369,7 +35812,9 @@ var init_appointment_booking = __esmMin((() => {
35369
35812
  } },
35370
35813
  formId: { $bind: { from: "content.formId" } },
35371
35814
  form: { $bind: { from: "data.form" } },
35372
- services: { $bind: { from: "data.services" } }
35815
+ services: { $bind: { from: "data.services" } },
35816
+ mailingList: { $bind: { from: "$root.mailingList" } },
35817
+ siteName: { $bind: { from: "$root.siteName" } }
35373
35818
  }));
35374
35819
  stackedLayout$1 = bookingSection([
35375
35820
  bookingHeading,
@@ -36440,6 +36885,7 @@ function isRecord$6(value) {
36440
36885
  }
36441
36886
  var EVENT_REGISTRATION_GENERIC_SHELL_STEP_LABELS, EVENT_REGISTRATION_SHELL_STEP_LABELS, eventRegistrationPublicEventSchema, eventRegistrationHydrationSchemaShape, eventRegistrationEventSourceSchema, eventRegistrationSourceSchema, eventRegistrationDisplaySchema, eventRegistrationHydrationSchema, eventRegistrationRenderSchema, eventRegistrationBlockRuntime;
36442
36887
  var init_event_registration_interactive = __esmMin((() => {
36888
+ init_src$4();
36443
36889
  init_readAuthority();
36444
36890
  init_schemas();
36445
36891
  init_runGrouping();
@@ -36479,7 +36925,13 @@ var init_event_registration_interactive = __esmMin((() => {
36479
36925
  spamProtectionEnabled: z.boolean().optional(),
36480
36926
  supportEmail: z.string().optional(),
36481
36927
  sitePasses: publicPassProductCollectionSchema.nullable().optional(),
36482
- siteMemberships: publicMembershipProductCollectionSchema.nullable().optional()
36928
+ siteMemberships: publicMembershipProductCollectionSchema.nullable().optional(),
36929
+ mailingList: z.unknown().transform((value) => {
36930
+ if (value === void 0) return void 0;
36931
+ const parsed = parseMailingListRuntimeContext(value);
36932
+ return parsed.ok ? parsed.value : void 0;
36933
+ }),
36934
+ siteName: z.string().optional()
36483
36935
  };
36484
36936
  eventRegistrationEventSourceSchema = z.discriminatedUnion("kind", [z.object({
36485
36937
  kind: z.literal("loaded"),
@@ -36565,7 +37017,9 @@ var init_event_registration_interactive = __esmMin((() => {
36565
37017
  spamProtectionEnabled: source.spamProtectionEnabled,
36566
37018
  supportEmail: source.supportEmail,
36567
37019
  sitePasses: source.sitePasses ?? null,
36568
- siteMemberships: source.siteMemberships ?? null
37020
+ siteMemberships: source.siteMemberships ?? null,
37021
+ mailingList: source.mailingList,
37022
+ siteName: source.siteName
36569
37023
  }
36570
37024
  };
36571
37025
  }
@@ -36737,6 +37191,8 @@ var init_event_registration = __esmMin((() => {
36737
37191
  events: { $bind: { from: "data.events" } },
36738
37192
  wholeSeriesRunEvents: { $bind: { from: "data.wholeSeriesRunEvents" } },
36739
37193
  loaderFailures: { $bind: { from: "$root.loaderFailures" } },
37194
+ mailingList: { $bind: { from: "$root.mailingList" } },
37195
+ siteName: { $bind: { from: "$root.siteName" } },
36740
37196
  sitePasses: { $bind: { from: "data.sitePasses" } },
36741
37197
  siteMemberships: { $bind: { from: "data.siteMemberships" } },
36742
37198
  stage: { $bind: {
@@ -44029,17 +44485,9 @@ var init_newsletter_form_interactive = __esmMin((() => {
44029
44485
  function sanitizeNewsletterSignupPublicContent(content) {
44030
44486
  if (typeof content !== "object" || content === null || Array.isArray(content)) return content;
44031
44487
  const value = content;
44032
- return {
44033
- title: value.title,
44034
- subtitle: value.subtitle,
44035
- targeting: value.targeting,
44036
- buttonVariant: value.buttonVariant,
44037
- mailingListSource: value.mailingListSource,
44038
- mailingListSourceToken: value.mailingListSourceToken,
44039
- _sectionStyles: value._sectionStyles
44040
- };
44488
+ return Object.fromEntries(newsletterPublicFieldIds.map((id) => [id, value[id]]));
44041
44489
  }
44042
- var stackedComposition, stackedLayout, inlineLayout, editorialSplitLayout, newsletterSignupManifest, newsletterSignupBlockDefinition;
44490
+ var stackedComposition, stackedLayout, inlineLayout, editorialSplitLayout, newsletterSignupManifest, newsletterPublicFieldIds, newsletterSignupBlockDefinition;
44043
44491
  var init_newsletter_signup = __esmMin((() => {
44044
44492
  init_fragments$1();
44045
44493
  init_builder$1();
@@ -44133,6 +44581,7 @@ var init_newsletter_signup = __esmMin((() => {
44133
44581
  ],
44134
44582
  icon: "Mail"
44135
44583
  });
44584
+ newsletterPublicFieldIds = [...(newsletterSignupManifest.fields ?? []).map((field) => field.id), "_containerStyles"];
44136
44585
  newsletterSignupBlockDefinition = {
44137
44586
  manifest: newsletterSignupManifest,
44138
44587
  runtime: newsletterFormBlockRuntime
@@ -47961,11 +48410,15 @@ var init_bookingRecords = __esmMin((() => {
47961
48410
  BOOKING_QUESTION_ANSWER_EXPORT_SCOPES.site, BOOKING_QUESTION_ANSWER_EXPORT_SCOPES.appointments, BOOKING_QUESTION_ANSWER_EXPORT_SCOPES.eventSeries;
47962
48411
  }));
47963
48412
  //#endregion
48413
+ //#region ../api/src/bookingPeople.ts
48414
+ var init_bookingPeople = __esmMin((() => {}));
48415
+ //#endregion
47964
48416
  //#region ../api/src/bookings.ts
47965
48417
  var init_bookings = __esmMin((() => {
47966
48418
  init_envelope();
47967
48419
  init_error_propagation();
47968
48420
  init_bookingRecords();
48421
+ init_bookingPeople();
47969
48422
  }));
47970
48423
  //#endregion
47971
48424
  //#region ../api/src/siteMembers.ts
@@ -48571,6 +49024,7 @@ var init_src = __esmMin((() => {
48571
49024
  init_event_visibility();
48572
49025
  init_bookingPaymentTermSchemas();
48573
49026
  init_bookingRecords();
49027
+ init_bookingPeople();
48574
49028
  init_emailSettings();
48575
49029
  init_eventEmailTemplates();
48576
49030
  init_resources();
@@ -49263,15 +49717,14 @@ async function loadPageWithDeps(deps, params) {
49263
49717
  const { client, siteId, path, pageId, preview = false, dataLoaderOverrides, searchParams, forceSite } = params;
49264
49718
  const [site, pageResponse] = await Promise.all([client.getSite({
49265
49719
  id: siteId,
49720
+ currentPath: path,
49266
49721
  ...forceSite ? { force: true } : {}
49267
49722
  }), client.getPage({
49268
49723
  siteId,
49269
49724
  path,
49270
49725
  preview
49271
49726
  })]);
49272
- if ("entry" in pageResponse) throw new Error("This path resolves to a content entry, not a page. Use loadContent() instead, which handles both pages and entries. For entries, loadContent() returns the raw entry data for custom rendering.");
49273
- if ("pageSurface" in pageResponse) throw new Error("This path resolves to a page surface, not a page. Use loadContent() instead, which handles pages, entries, and page surfaces.");
49274
- const { page: pageData } = pageResponse;
49727
+ const pageData = requirePageRecord(pageResponse);
49275
49728
  const support = buildSiteRenderSupport(site, collectMediaAssetSidecar(pageResponse.mediaAssets));
49276
49729
  const previewStage = preview ? "preview" : "published";
49277
49730
  const pageOutline = buildRenderablePageOutline({
@@ -49301,8 +49754,11 @@ async function loadPageWithDeps(deps, params) {
49301
49754
  theme: requireSdkTheme(support.theme, siteId),
49302
49755
  sdkConfig: support.sdkConfig,
49303
49756
  siteId,
49757
+ dataContext: {
49758
+ siteName: support.site.title,
49759
+ previewStage
49760
+ },
49304
49761
  resolvedData,
49305
- dataContext: { previewStage },
49306
49762
  bookingOfferingPresets: support.bookingOfferingPresets,
49307
49763
  mailingList: support.mailingList,
49308
49764
  bookingTimeZone: support.bookingTimeZone,
@@ -49314,6 +49770,11 @@ async function loadPageWithDeps(deps, params) {
49314
49770
  entriesByIdentifier: support.entriesByIdentifier
49315
49771
  };
49316
49772
  }
49773
+ function requirePageRecord(response) {
49774
+ if ("entry" in response) throw new Error("This path resolves to a content entry, not a page. Use loadContent() instead, which handles both pages and entries. For entries, loadContent() returns the raw entry data for custom rendering.");
49775
+ if ("pageSurface" in response) throw new Error("This path resolves to a page surface, not a page. Use loadContent() instead, which handles pages, entries, and page surfaces.");
49776
+ return response.page;
49777
+ }
49317
49778
  var init_loadPage = __esmMin((() => {
49318
49779
  init_dataLoaderContext();
49319
49780
  init_resolveBlockData();