@riverbankcms/sdk 0.153.0 → 0.154.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 (216) hide show
  1. package/dist/{EventEmbeddedCheckoutStep-veN-QiAE.mjs → EventEmbeddedCheckoutStep-ba9npQtb.mjs} +1 -1
  2. package/dist/{PreviewEditorSidebar-jI_4DTZY.mjs → PreviewEditorSidebar-C7FiaxlF.mjs} +194 -22
  3. package/dist/{PreviewEditorUI-ORkVZhfu.mjs → PreviewEditorUI-DFst50q1.mjs} +20 -44
  4. package/dist/{SdkPreviewModeRuntime-DaNqevI1.mjs → SdkPreviewModeRuntime-BUNV_YHZ.mjs} +49 -32
  5. package/dist/{SiteChromeCustomizeContext-CgNuBHC0.mjs → SiteChromeCustomizeContext-DEj7qppF.mjs} +3558 -2321
  6. package/dist/{ThemedButton-X2UxhW6F.mjs → ThemedButton-C8kzu0hY.mjs} +400 -81
  7. package/dist/_dts/ai/src/contracts/proposals.d.ts +364 -130
  8. package/dist/_dts/ai/src/contracts/siteStyleProposalSchemas.d.ts +1035 -477
  9. package/dist/_dts/api/src/billing.d.ts +2 -0
  10. package/dist/_dts/api/src/billingEndpointDefinitions.d.ts +78 -0
  11. package/dist/_dts/api/src/bookingAdjustments.d.ts +3 -2
  12. package/dist/_dts/api/src/bookingOperations.d.ts +7 -2
  13. package/dist/_dts/api/src/bookingPeople.d.ts +19 -0
  14. package/dist/_dts/api/src/bookingPeopleEndpointDefinitions.d.ts +8 -0
  15. package/dist/_dts/api/src/bookingRecords.d.ts +4 -106
  16. package/dist/_dts/api/src/bookings.d.ts +2 -3
  17. package/dist/_dts/api/src/contentRuntime.d.ts +1 -0
  18. package/dist/_dts/api/src/endpoints.d.ts +88 -43
  19. package/dist/_dts/api/src/index.d.ts +4 -2
  20. package/dist/_dts/api/src/indexCoreTypes.d.ts +1 -0
  21. package/dist/_dts/api/src/moneyPayments.d.ts +116 -0
  22. package/dist/_dts/api/src/onboarding/surfaceData.d.ts +2 -0
  23. package/dist/_dts/api/src/sdk-event-upsert.d.ts +2 -2
  24. package/dist/_dts/api/src/sdkThemeWire.d.ts +162 -103
  25. package/dist/_dts/api/src/sitePlatformEndpoints.d.ts +18 -0
  26. package/dist/_dts/api/src/siteRuntimeEndpoints.d.ts +17 -16
  27. package/dist/_dts/api/src/siteSettings.d.ts +1 -0
  28. package/dist/_dts/api/src/stripeConnectSetup.d.ts +90 -0
  29. package/dist/_dts/api/src/types.d.ts +11 -31
  30. package/dist/_dts/api/src/wholeSeriesRuns.d.ts +2 -4
  31. package/dist/_dts/blocks/src/client/site-chrome.d.ts +1 -1
  32. package/dist/_dts/blocks/src/contracts/proof-block-islands.d.ts +8 -96
  33. package/dist/_dts/blocks/src/primitives/content/components/RichText.d.ts +1 -1
  34. package/dist/_dts/blocks/src/primitives/content/primitives.d.ts +4 -1
  35. package/dist/_dts/blocks/src/primitives/layout/Section.d.ts +1 -0
  36. package/dist/_dts/blocks/src/system/blocks/events/event-calendar.d.ts +1 -1
  37. package/dist/_dts/blocks/src/system/blocks/events/eventSelectionFields.d.ts +1 -1
  38. package/dist/_dts/blocks/src/system/blocks/events/shared/fields.d.ts +0 -4
  39. package/dist/_dts/blocks/src/system/blocks/events/shared/index.d.ts +0 -1
  40. package/dist/_dts/blocks/src/system/blocks/events/shared/schemas.d.ts +4 -4
  41. package/dist/_dts/blocks/src/system/blocks/form.d.ts +10 -0
  42. package/dist/_dts/blocks/src/system/blocks/image-gallery/fields.d.ts +1 -0
  43. package/dist/_dts/blocks/src/system/blocks/image-gallery.d.ts +6 -1
  44. package/dist/_dts/blocks/src/system/blocks/location-map.d.ts +1 -1
  45. package/dist/_dts/blocks/src/system/blocks/media-text.d.ts +47 -45
  46. package/dist/_dts/blocks/src/system/blocks/newsletter-signup.d.ts +12 -0
  47. package/dist/_dts/blocks/src/system/blocks/site-footer-runtime-layout.d.ts +23 -0
  48. package/dist/_dts/blocks/src/system/blocks/site-footer-runtime-profile.d.ts +20 -0
  49. package/dist/_dts/blocks/src/system/blocks/site-footer-runtime.d.ts +17 -16
  50. package/dist/_dts/blocks/src/system/blocks/site-footer.d.ts +1 -1
  51. package/dist/_dts/blocks/src/system/customize/facets.d.ts +75 -9
  52. package/dist/_dts/blocks/src/system/manifest/schema.d.ts +24 -24
  53. package/dist/_dts/blocks/src/system/node/fragments/index.d.ts +1 -0
  54. package/dist/_dts/blocks/src/system/node/fragments/lookSlot.d.ts +1 -1
  55. package/dist/_dts/blocks/src/system/node/fragments/responsiveTwoColumn.d.ts +3 -1
  56. package/dist/_dts/blocks/src/system/node/fragments/sectionHead.d.ts +15 -0
  57. package/dist/_dts/blocks/src/system/runtime/components/registry.client.d.ts +18 -198
  58. package/dist/_dts/blocks/src/system/runtime/components/runtime-backed-blocks.d.ts +9 -99
  59. package/dist/_dts/blocks/src/system/runtime/lookSurfaces.d.ts +16 -4
  60. package/dist/_dts/blocks/src/system/runtime/nodes/basic.d.ts +2 -1
  61. package/dist/_dts/blocks/src/system/runtime/nodes/event-details/lookPresentation.d.ts +10 -4
  62. package/dist/_dts/blocks/src/system/runtime/nodes/event-details/presentation.d.ts +1 -1
  63. package/dist/_dts/blocks/src/system/runtime/nodes/events/domain/dates.d.ts +1 -1
  64. package/dist/_dts/blocks/src/system/runtime/nodes/events/shared/eventCollectionContract.d.ts +29 -17
  65. package/dist/_dts/blocks/src/system/runtime/nodes/form.fields.d.ts +5 -2
  66. package/dist/_dts/blocks/src/system/runtime/nodes/form.interactive.d.ts +11 -79
  67. package/dist/_dts/blocks/src/system/runtime/nodes/form.parts.d.ts +7 -0
  68. package/dist/_dts/blocks/src/system/runtime/nodes/form.server.d.ts +2 -13
  69. package/dist/_dts/blocks/src/system/runtime/nodes/newsletter-form.interactive.d.ts +8 -72
  70. package/dist/_dts/blocks/src/system/runtime/nodes/newsletter-form.parts.d.ts +6 -6
  71. package/dist/_dts/blocks/src/system/runtime/nodes/newsletter-form.types.d.ts +3 -2
  72. package/dist/_dts/blocks/src/system/runtime/nodes/shared/contract-schemas.d.ts +2 -2
  73. package/dist/_dts/blocks/src/system/transforms/registry/_utils/surfaceForegroundStyles.d.ts +3 -0
  74. package/dist/_dts/blocks/src/system/transforms/registry/footerArrangement.d.ts +6 -0
  75. package/dist/_dts/blocks/src/system/transforms/registry/layout.d.ts +0 -11
  76. package/dist/_dts/blocks/src/system/transforms/typed.d.ts +1 -10
  77. package/dist/_dts/commerce/src/purchase/orderConfirmationPlanning.d.ts +1 -0
  78. package/dist/_dts/content-editor/src/FooterComposerOverview.d.ts +5 -2
  79. package/dist/_dts/content-editor/src/FooterComposerPanel.d.ts +1 -1
  80. package/dist/_dts/content-editor/src/FooterNavigationLayoutControl.d.ts +6 -3
  81. package/dist/_dts/content-editor/src/controller/editorLeaseParticipation.d.ts +1 -1
  82. package/dist/_dts/content-editor/src/footerComposer.d.ts +2 -1
  83. package/dist/_dts/content-editor/src/footerComposerPanelTypes.d.ts +3 -1
  84. package/dist/_dts/content-editor/src/footerNavigationLayoutState.d.ts +56 -0
  85. package/dist/_dts/content-editor/src/footerPreviewRuntime.d.ts +2 -1
  86. package/dist/_dts/content-editor/src/useFooterComposerState.d.ts +3 -4
  87. package/dist/_dts/content-editor/src/useFooterNavigationLayout.d.ts +11 -8
  88. package/dist/_dts/core/src/booking-refunds.d.ts +2 -0
  89. package/dist/_dts/core/src/date-display.d.ts +85 -0
  90. package/dist/_dts/core/src/date-time-formatter.d.ts +2 -0
  91. package/dist/_dts/core/src/footer-arrangement.d.ts +8 -1
  92. package/dist/_dts/core/src/footer-composition-types.d.ts +6 -1
  93. package/dist/_dts/core/src/footer-composition.d.ts +1 -1
  94. package/dist/_dts/core/src/footer-navigation-layout.d.ts +3 -0
  95. package/dist/_dts/core/src/index.d.ts +2 -0
  96. package/dist/_dts/core/src/mailing-list-setup.d.ts +3 -0
  97. package/dist/_dts/core/src/mailing-list-submission.d.ts +6 -1
  98. package/dist/_dts/core/src/public-profile.d.ts +3 -1
  99. package/dist/_dts/core/src/scheduled-date-time.d.ts +69 -0
  100. package/dist/_dts/db/src/generated/supabase/database.types.d.ts +50 -9
  101. package/dist/_dts/db/src/schemas/forms.d.ts +16 -16
  102. package/dist/_dts/preview-next/src/client/blocks/ArrangementBlockToolbar.d.ts +2 -1
  103. package/dist/_dts/preview-next/src/client/preview/PreviewShell.d.ts +1 -0
  104. package/dist/_dts/preview-next/src/client/preview/PreviewShellLayout.d.ts +1 -0
  105. package/dist/_dts/preview-next/src/client/preview/SiteChromeCustomizeContext.d.ts +4 -1
  106. package/dist/_dts/preview-next/src/client/preview/siteChromeSavePlan.d.ts +27 -5
  107. package/dist/_dts/preview-next/src/client/preview/siteStylePreviewPlanner.d.ts +2 -0
  108. package/dist/_dts/preview-next/src/client/preview/useConfirmedPreferenceRecord.d.ts +12 -0
  109. package/dist/_dts/preview-next/src/client/preview/usePersistedFooterPreferences.d.ts +26 -0
  110. package/dist/_dts/preview-next/src/client/preview/usePersistedHeaderPreferences.d.ts +40 -2
  111. package/dist/_dts/sdk/src/config/validation.d.ts +3 -3
  112. package/dist/_dts/sdk/src/contracts/system-block-content.d.ts +4 -46
  113. package/dist/_dts/sdk/src/date-time/index.d.ts +2 -68
  114. package/dist/_dts/sdk/src/public-api/contracts.d.ts +1 -0
  115. package/dist/_dts/sdk/src/rendering/islands/types.d.ts +1 -1
  116. package/dist/_dts/sdk/src/version.d.ts +1 -1
  117. package/dist/_dts/theme-core/src/buttons/buttonColourContract.d.ts +2 -0
  118. package/dist/_dts/theme-core/src/buttons/resolveButtonColourStates.d.ts +2 -0
  119. package/dist/_dts/theme-core/src/buttons/styles/recipes/lanternRecipes.d.ts +60 -0
  120. package/dist/_dts/theme-core/src/buttons/styles/registry.d.ts +57 -0
  121. package/dist/_dts/theme-core/src/buttons/styles/selection.d.ts +10 -1
  122. package/dist/_dts/theme-core/src/buttons/types.d.ts +358 -46
  123. package/dist/_dts/theme-core/src/buttons/typography.d.ts +24 -0
  124. package/dist/_dts/theme-core/src/cards/types.d.ts +8 -8
  125. package/dist/_dts/theme-core/src/footer/effectiveNavLinkStyle.d.ts +1 -1
  126. package/dist/_dts/theme-core/src/footer/generateFooterCss.d.ts +4 -1
  127. package/dist/_dts/theme-core/src/footer/mode.d.ts +2 -11
  128. package/dist/_dts/theme-core/src/generated/containerResponsiveThemeCss.d.ts +1 -1
  129. package/dist/_dts/theme-core/src/mock-themes/all.d.ts +234 -147
  130. package/dist/_dts/theme-core/src/navigation/types.d.ts +4 -4
  131. package/dist/_dts/theme-core/src/schema.d.ts +300 -192
  132. package/dist/_dts/theme-core/src/site-styles/appearancePresetTypes.d.ts +23 -7
  133. package/dist/_dts/theme-core/src/site-styles/backgroundAppearance.d.ts +2 -2
  134. package/dist/_dts/theme-core/src/site-styles/compilationPlan.d.ts +4 -6
  135. package/dist/_dts/theme-core/src/site-styles/compileFooterAgainstRow.d.ts +121 -0
  136. package/dist/_dts/theme-core/src/site-styles/curatedSiteStyles.d.ts +25 -0
  137. package/dist/_dts/theme-core/src/site-styles/footerLookDefaults.d.ts +45 -0
  138. package/dist/_dts/theme-core/src/site-styles/footerLookRecipe.d.ts +50 -0
  139. package/dist/_dts/theme-core/src/site-styles/footerLooks.d.ts +9 -35
  140. package/dist/_dts/theme-core/src/site-styles/footerPreferences.d.ts +29 -0
  141. package/dist/_dts/theme-core/src/site-styles/headerPreferencesPersistence.d.ts +2 -3
  142. package/dist/_dts/theme-core/src/site-styles/index.d.ts +4 -0
  143. package/dist/_dts/theme-core/src/site-styles/lookResolution.d.ts +2 -2
  144. package/dist/_dts/theme-core/src/site-styles/previewCompiler.d.ts +1 -1
  145. package/dist/_dts/theme-core/src/site-styles/siteChromeBackgrounds.d.ts +8 -0
  146. package/dist/_dts/theme-core/src/site-styles/themeParity.d.ts +1 -1
  147. package/dist/_dts/theme-core/src/site-styles/tokenRecipes.d.ts +1 -1
  148. package/dist/_dts/ui/src/card.d.ts +1 -1
  149. package/dist/client/{BookingMailingListNote-DrchYW1m.mjs → BookingMailingListNote-CNoSqFtf.mjs} +2 -2
  150. package/dist/client/{CardListItem-CC_GVmF6.mjs → CardListItem-BkTkqBkh.mjs} +3 -3
  151. package/dist/client/{CheckboxChoice-Dq30m3DO.mjs → CheckboxChoice-CHJpsty4.mjs} +1 -1
  152. package/dist/client/{DemoBookingPortalAccess-ojwbVUmx.mjs → DemoBookingPortalAccess-C7KQKFNt.mjs} +2 -2
  153. package/dist/client/{EventCombined.client-DyN0v0Xk.mjs → EventCombined.client-BgeYMjHJ.mjs} +5 -5
  154. package/dist/client/{EventEmbeddedCheckoutStep-CgfpKc3n.mjs → EventEmbeddedCheckoutStep-BTc_lTkM.mjs} +2 -2
  155. package/dist/client/{EventListing.client-CuOuvYMz.mjs → EventListing.client-ChRs9Hl2.mjs} +2 -2
  156. package/dist/client/{LeafletStaticMap-B0WhRr3j.mjs → LeafletStaticMap-C_dNQgd0.mjs} +1 -1
  157. package/dist/client/{RichText-C1fIXBzA.mjs → RichText-BI9bzbjo.mjs} +75 -42
  158. package/dist/client/{ThemedButton-B7HFqFBg.mjs → ThemedButton-wl3Z3wkH.mjs} +1 -1
  159. package/dist/client/{accordion-DCDVWSye.mjs → accordion-6Yz8Wd83.mjs} +1 -1
  160. package/dist/client/{bookingForm-BJ3C4GlM.mjs → bookingForm-i_pKIGiY.mjs} +8 -8
  161. package/dist/client/bookings.mjs +12565 -11839
  162. package/dist/client/{carousel-BSCBhfHY.mjs → carousel-DNqd_PjC.mjs} +2 -2
  163. package/dist/client/{carousel.client-GEtOGsxo.mjs → carousel.client-BUgjPbb6.mjs} +1 -1
  164. package/dist/client/{cart-Yv-aAtck.mjs → cart-D8OBHuF4.mjs} +3 -3
  165. package/dist/client/{checkout-B9xDkl30.mjs → checkout-F3-9IGLU.mjs} +3 -3
  166. package/dist/client/client.mjs +6109 -4778
  167. package/dist/client/{context-BOGe3rIA.mjs → context-Dg4ZrxDD.mjs} +1 -1
  168. package/dist/client/{eventCalendar-D6M0T9hs.mjs → eventCalendar-BUc7YIBM.mjs} +8 -8
  169. package/dist/client/{eventCombined-NM4UFBq8.mjs → eventCombined-BwfShk2a.mjs} +4 -4
  170. package/dist/client/{eventDetails-f_FhV4O8.mjs → eventDetails-BMOVC3go.mjs} +3 -3
  171. package/dist/client/{eventListing-WLkfAROh.mjs → eventListing-BwE9PM-t.mjs} +4 -4
  172. package/dist/client/{eventRegistration-D3ejfLvW.mjs → eventRegistration-CCWPYDc7.mjs} +9 -9
  173. package/dist/client/{form-D5Or2Jyu.mjs → form-CXFr0Gd5.mjs} +115 -51
  174. package/dist/client/{headerSection-hWgnv27V.mjs → headerSection-BX8qw8kH.mjs} +3 -3
  175. package/dist/client/hooks.mjs +2041 -1193
  176. package/dist/client/{locationMap-Di1K0O2S.mjs → locationMap-B3La71m0.mjs} +3 -3
  177. package/dist/client/{media-D29-F1u_.mjs → media-B1Cbv721.mjs} +1 -1
  178. package/dist/client/{newsletterForm-CwxcwTNO.mjs → newsletterForm-DnGyR0x7.mjs} +50 -14
  179. package/dist/client/{productDetail-BLSnhPdA.mjs → productDetail-BVgTqvkb.mjs} +3 -3
  180. package/dist/client/{productList-oGytONOX.mjs → productList-CcO7kUQw.mjs} +3 -3
  181. package/dist/client/{propsDecoder-lf_dTeZS.mjs → propsDecoder-B1OeWavE.mjs} +706 -229
  182. package/dist/client/rendering/client.mjs +11868 -11098
  183. package/dist/client/rendering/islands.mjs +17 -17
  184. package/dist/client/rendering.mjs +6058 -4676
  185. package/dist/client/{routeIslandApiConfig-Bc_WVPS8.mjs → routeIslandApiConfig-Dl4vglJm.mjs} +1 -1
  186. package/dist/client/{shop-BQ3bR7fA.mjs → shop-P72nX5Fs.mjs} +7 -7
  187. package/dist/client/{shop-commerce-DDPll6ZC.mjs → shop-commerce-Bt7uraDx.mjs} +8 -8
  188. package/dist/client/{shop-commerce-store-DO-e1pTe.mjs → shop-commerce-store-C1-mxSye.mjs} +1 -1
  189. package/dist/client/{shopShared-BylM9jh1.mjs → shopShared-Db-cRGu3.mjs} +4 -4
  190. package/dist/client/{useDiscountCodeUi-B1Puub2v.mjs → useDiscountCodeUi-jvAiUoUX.mjs} +1 -1
  191. package/dist/client/{useEventPagination-BBhkmQaT.mjs → useEventPagination-BdWpCniq.mjs} +6 -6
  192. package/dist/preview-next/before-render.mjs +133 -51
  193. package/dist/preview-next/client/runtime.mjs +3 -3
  194. package/dist/preview-next/editor-chrome.css +5 -2
  195. package/dist/preview-next/keepAlive.mjs +133 -51
  196. package/dist/preview-next/middleware.mjs +133 -51
  197. package/dist/{sdk-runtime-DWCvhJGu.mjs → sdk-runtime-DLhjF2Nw.mjs} +1 -1
  198. package/dist/server/components.mjs +11284 -10014
  199. package/dist/server/config-validation.mjs +2016 -1188
  200. package/dist/server/config.mjs +2016 -1188
  201. package/dist/server/data.mjs +2041 -1193
  202. package/dist/server/date-time.mjs +258 -116
  203. package/dist/server/index.mjs +134 -52
  204. package/dist/server/next.mjs +10571 -9350
  205. package/dist/server/page-converter.mjs +1629 -941
  206. package/dist/server/prebuild.mjs +1 -1
  207. package/dist/server/rendering/server.mjs +11156 -9872
  208. package/dist/server/rendering.mjs +11284 -10014
  209. package/dist/server/routing.mjs +2204 -1283
  210. package/dist/server/server.mjs +2369 -1570
  211. package/dist/server/theme-bridge.mjs +838 -124
  212. package/dist/server/theme.mjs +348 -64
  213. package/dist/{spinner-BYM-Y81w.mjs → spinner-MTooKfck.mjs} +1 -1
  214. package/dist/styles/index.css +254 -1
  215. package/package.json +1 -1
  216. package/dist/_dts/blocks/src/system/blocks/events/shared/layout.d.ts +0 -12
@@ -495,6 +495,25 @@ function validateBookingPaymentOptionKinds(kinds) {
495
495
  return ok$1(void 0);
496
496
  }
497
497
  //#endregion
498
+ //#region ../core/src/date-time-formatter.ts
499
+ /** Shared Intl engine, internal to core's date presentation owners. */
500
+ const FORMATTER_CACHE_LIMIT = 100;
501
+ const dateTimeFormatterCache = /* @__PURE__ */ new Map();
502
+ function getDateTimeFormatter(locale, timeZone, format) {
503
+ const key = `${locale}\u0000${timeZone}\u0000${JSON.stringify(Object.entries(format).sort(([left], [right]) => left.localeCompare(right)))}`;
504
+ const cached = dateTimeFormatterCache.get(key);
505
+ if (cached !== void 0) return cached;
506
+ if (typeof locale !== "string" || Intl.DateTimeFormat.supportedLocalesOf([locale]).length === 0) throw new RangeError("An explicit supported locale is required");
507
+ if (typeof timeZone !== "string" || timeZone.length === 0) throw new RangeError("An explicit time zone is required");
508
+ const formatter = new Intl.DateTimeFormat(locale, {
509
+ ...format,
510
+ timeZone
511
+ });
512
+ if (dateTimeFormatterCache.size >= FORMATTER_CACHE_LIMIT) dateTimeFormatterCache.clear();
513
+ dateTimeFormatterCache.set(key, formatter);
514
+ return formatter;
515
+ }
516
+ //#endregion
498
517
  //#region ../core/src/booking-time-zone.ts
499
518
  const TIME_ZONE_VALIDITY_CACHE_LIMIT = 100;
500
519
  const timeZoneValidityCache = /* @__PURE__ */ new Map();
@@ -531,8 +550,6 @@ const START_OF_DAY = {
531
550
  second: 0
532
551
  };
533
552
  const LOCAL_DATE_PATTERN = /^(?<year>\d{4})-(?<month>\d{2})-(?<day>\d{2})$/u;
534
- const DATE_TIME_FORMATTER_CACHE_LIMIT = 100;
535
- const dateTimeFormatterCache = /* @__PURE__ */ new Map();
536
553
  function getSafeTimeZone(timeZone) {
537
554
  const normalized = typeof timeZone === "string" ? timeZone.trim() : "";
538
555
  return normalized.length > 0 && isValidBookingTimeZone(normalized) ? normalized : FALLBACK_TIMEZONE;
@@ -549,19 +566,7 @@ function formatParseError(error) {
549
566
  }
550
567
  }
551
568
  function formatToPartsLookup(date, locale, timeZone, format) {
552
- return new Map(getCachedDateTimeFormatter(locale, timeZone, format).formatToParts(date).map((part) => [part.type, part.value]));
553
- }
554
- function getCachedDateTimeFormatter(locale, timeZone, format) {
555
- const key = `${locale}\u0000${timeZone}\u0000${JSON.stringify(Object.entries(format).sort(([left], [right]) => left.localeCompare(right)))}`;
556
- const cached = dateTimeFormatterCache.get(key);
557
- if (cached !== void 0) return cached;
558
- const formatter = new Intl.DateTimeFormat(locale, {
559
- ...format,
560
- timeZone
561
- });
562
- if (dateTimeFormatterCache.size >= DATE_TIME_FORMATTER_CACHE_LIMIT) dateTimeFormatterCache.clear();
563
- dateTimeFormatterCache.set(key, formatter);
564
- return formatter;
569
+ return new Map(getDateTimeFormatter(locale, timeZone, format).formatToParts(date).map((part) => [part.type, part.value]));
565
570
  }
566
571
  function getZonedDateTimeParts(date, timeZone) {
567
572
  const parts = formatToPartsLookup(date, "en-GB", timeZone, {
@@ -678,7 +683,7 @@ function toScheduledBookingDateRange(input) {
678
683
  function formatBookingInstant(isoString, options) {
679
684
  const date = new Date(isoString);
680
685
  if (Number.isNaN(date.getTime())) return isoString;
681
- return getCachedDateTimeFormatter(options.locale ?? DEFAULT_LOCALE, getSafeTimeZone(options.timeZone), options.format).format(date);
686
+ return getDateTimeFormatter(options.locale ?? DEFAULT_LOCALE, getSafeTimeZone(options.timeZone), options.format).format(date);
682
687
  }
683
688
  function formatBookingDate(input, format = {
684
689
  weekday: "long",
@@ -821,6 +826,17 @@ function localScheduleDateTimeToUtcDate(localDate, localTime, timeZone) {
821
826
  return new Date(guess);
822
827
  }
823
828
  //#endregion
829
+ //#region ../core/src/date-display.ts
830
+ /** Site-language policy, shared by customer emails and public event adapters. */
831
+ function inferSiteDateLocale(siteTimeZone) {
832
+ if (siteTimeZone === null || siteTimeZone === void 0 || siteTimeZone === "") return "en-US";
833
+ if (siteTimeZone === "Europe/Dublin") return "en-IE";
834
+ if (siteTimeZone.startsWith("Europe/")) return "en-GB";
835
+ if (siteTimeZone.startsWith("Australia/")) return "en-AU";
836
+ if (siteTimeZone === "Pacific/Auckland" || siteTimeZone === "Pacific/Chatham") return "en-NZ";
837
+ return "en-US";
838
+ }
839
+ //#endregion
824
840
  //#region ../core/src/mailing-list-identifiers.ts
825
841
  const UUID_PATTERN = /^[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/iu;
826
842
  const OPAQUE_ID_PATTERN = /^[A-Za-z0-9_-]{1,100}$/u;
@@ -893,6 +909,10 @@ function parseGlobalFields(value) {
893
909
  preset: "emailName",
894
910
  name: value.name
895
911
  } : null;
912
+ case "emailFirstName": return isRequirement(value.firstName) ? {
913
+ preset: "emailFirstName",
914
+ firstName: value.firstName
915
+ } : null;
896
916
  case "emailFirstLast": return isRequirement(value.firstName) && isRequirement(value.lastName) ? {
897
917
  preset: "emailFirstLast",
898
918
  firstName: value.firstName,
@@ -2244,6 +2264,29 @@ function clsx() {
2244
2264
  return n;
2245
2265
  }
2246
2266
  //#endregion
2267
+ //#region ../theme-core/src/buttons/typography.ts
2268
+ const textTransformSchema = z.enum([
2269
+ "none",
2270
+ "uppercase",
2271
+ "lowercase",
2272
+ "capitalize"
2273
+ ]);
2274
+ const fontWeightSchema = z.union([
2275
+ z.literal(400),
2276
+ z.literal(500),
2277
+ z.literal(600),
2278
+ z.literal(700),
2279
+ z.literal(800)
2280
+ ]);
2281
+ const buttonTypographySchema = z.enum(["body", "heading"]);
2282
+ const letterSpacingSchema = z.enum([
2283
+ "tight",
2284
+ "normal",
2285
+ "slight",
2286
+ "loose",
2287
+ "wide"
2288
+ ]);
2289
+ //#endregion
2247
2290
  //#region ../theme-core/src/tokens/colorTokenParts.ts
2248
2291
  function parseOpacityPercent(source) {
2249
2292
  const trimmed = source.trim();
@@ -2498,6 +2541,7 @@ const buttonEffectApplicationSchema = z.discriminatedUnion("effectId", [
2498
2541
  z.strictObject({
2499
2542
  effectId: z.literal("lift"),
2500
2543
  options: z.strictObject({ amount: z.enum([
2544
+ "0.125",
2501
2545
  "0.25",
2502
2546
  "0.5",
2503
2547
  "1"
@@ -2544,24 +2588,6 @@ const shadowSizeSchema = z.enum([
2544
2588
  "medium",
2545
2589
  "high"
2546
2590
  ]);
2547
- const textTransformSchema = z.enum([
2548
- "none",
2549
- "uppercase",
2550
- "lowercase",
2551
- "capitalize"
2552
- ]);
2553
- const fontWeightSchema = z.union([
2554
- z.literal(500),
2555
- z.literal(600),
2556
- z.literal(700),
2557
- z.literal(800)
2558
- ]);
2559
- const buttonTypographySchema = z.enum(["body", "heading"]);
2560
- const letterSpacingSchema = z.enum([
2561
- "tight",
2562
- "normal",
2563
- "loose"
2564
- ]);
2565
2591
  const hoverTransformSchema = z.enum([
2566
2592
  "none",
2567
2593
  "lift",
@@ -2633,7 +2659,8 @@ const paddingShorthandSchema = z.string().refine((value) => {
2633
2659
  }, { message: "Padding must be two space-separated CSS length tokens (e.g. \"0.5rem 1rem\"). Use `0` for zero." });
2634
2660
  const buttonSizeConfigSchema = z.object({
2635
2661
  padding: paddingShorthandSchema,
2636
- fontSize: z.string().optional()
2662
+ fontSize: z.string().optional(),
2663
+ borderRadius: z.string().optional()
2637
2664
  });
2638
2665
  /**
2639
2666
  * `xl` is optional on the wire so themes persisted before the `xl` size was
@@ -2756,12 +2783,20 @@ const buttonVisualAppearanceSchema = z.strictObject({
2756
2783
  textTransform: textTransformSchema
2757
2784
  }),
2758
2785
  effects: z.array(buttonEffectApplicationSchema),
2786
+ transform: z.literal("none").optional(),
2759
2787
  contextualHover: contextualButtonHoverSchema.optional()
2760
2788
  });
2761
2789
  const buttonVisualStatesSchema = z.strictObject({
2762
2790
  base: buttonVisualAppearanceSchema.extend({ shadow: variantShadowSchema }),
2763
2791
  hover: buttonVisualAppearanceSchema.extend({ shadow: variantShadowSchema }),
2764
- focus: buttonVisualAppearanceSchema.extend({ shadow: z.literal("focus-indicator") }),
2792
+ focus: buttonVisualAppearanceSchema.extend({
2793
+ shadow: z.literal("focus-indicator"),
2794
+ indicator: z.strictObject({
2795
+ kind: z.literal("surface-ink"),
2796
+ width: z.union([z.literal(2), z.literal(3)]),
2797
+ offset: z.union([z.literal(3), z.literal(4)])
2798
+ }).optional()
2799
+ }),
2765
2800
  active: buttonVisualAppearanceSchema.extend({ shadow: variantShadowSchema }),
2766
2801
  disabled: buttonVisualAppearanceSchema.extend({ shadow: variantShadowSchema })
2767
2802
  });
@@ -3212,14 +3247,6 @@ const themeLookMetadataSchema = z.object({
3212
3247
  skinMarks: skinMarksSchema.optional()
3213
3248
  });
3214
3249
  //#endregion
3215
- //#region ../theme-core/src/footer/mode.ts
3216
- const footerModeSchema = z.enum([
3217
- "default",
3218
- "blocks",
3219
- "default+blocks",
3220
- "none"
3221
- ]);
3222
- //#endregion
3223
3250
  //#region ../theme-core/src/palette/colors.ts
3224
3251
  const HEX_COLOR_REGEX = /^#[0-9a-f]{6}$/;
3225
3252
  const NORMALIZABLE_HEX_REGEX = /^#(?:[0-9a-f]{3}|[0-9a-f]{6})$/i;
@@ -5485,20 +5512,15 @@ const headerSchema = z.object({
5485
5512
  const footerVariant = z.enum([
5486
5513
  "simple",
5487
5514
  "columns",
5488
- "split"
5489
- ]);
5515
+ "split",
5516
+ "centred"
5517
+ ]).transform((value) => value === "columns" ? "simple" : value);
5490
5518
  const footerMaxWidth = z.enum(["container", "full"]);
5491
5519
  const footerNavLayoutMode = z.enum([
5492
5520
  "stack",
5493
5521
  "inline",
5494
5522
  "inline-wrap"
5495
5523
  ]);
5496
- const footerNavLayoutAlign = z.enum([
5497
- "start",
5498
- "center",
5499
- "end",
5500
- "space-between"
5501
- ]);
5502
5524
  const footerSpacing = z.enum([
5503
5525
  "none",
5504
5526
  "tight",
@@ -5507,12 +5529,6 @@ const footerSpacing = z.enum([
5507
5529
  "relaxed",
5508
5530
  "spacious"
5509
5531
  ]);
5510
- const footerLogoPlacement = z.enum([
5511
- "left",
5512
- "right",
5513
- "above",
5514
- "below"
5515
- ]);
5516
5532
  const footerLogoSize = z.enum([
5517
5533
  "sm",
5518
5534
  "md",
@@ -5553,17 +5569,8 @@ const footerBottomBarSchema = z.object({
5553
5569
  ]).optional()
5554
5570
  }).optional()
5555
5571
  });
5556
- const footerNavLayoutSchema = z.object({
5557
- layout: footerNavLayoutMode.optional(),
5558
- align: footerNavLayoutAlign.optional(),
5559
- gapX: footerSpacing.optional(),
5560
- gapY: footerSpacing.optional(),
5561
- columns: z.number().int().min(1).max(6).optional()
5562
- });
5572
+ const footerNavLayoutSchema = z.object({ layout: footerNavLayoutMode.optional() });
5563
5573
  const footerLogoSchema = z.object({
5564
- showLogo: z.boolean().default(true),
5565
- showLogoText: z.boolean().optional(),
5566
- placement: footerLogoPlacement.optional(),
5567
5574
  size: footerLogoSize.optional(),
5568
5575
  maxHeight: footerLogoMaxHeight.optional(),
5569
5576
  align: z.enum([
@@ -5573,15 +5580,8 @@ const footerLogoSchema = z.object({
5573
5580
  ]).optional()
5574
5581
  });
5575
5582
  const footerSchema = z.object({
5576
- /**
5577
- * SDK-only footer rendering mode.
5578
- *
5579
- * Historical persisted field; SDK rendering mode now lives in layout.footerMode.
5580
- */
5581
- mode: footerModeSchema.optional(),
5582
5583
  variant: footerVariant,
5583
5584
  maxWidth: footerMaxWidth,
5584
- showLogoText: z.boolean().optional(),
5585
5585
  background: headerBackgroundSchema.default({
5586
5586
  type: "color",
5587
5587
  color: "surface"
@@ -5822,6 +5822,287 @@ function normalizeAppearance(appearance) {
5822
5822
  };
5823
5823
  }
5824
5824
  //#endregion
5825
+ //#region ../theme-core/src/buttons/styles/recipes/lanternRecipes.ts
5826
+ const flatShadow = {
5827
+ elevation: "none",
5828
+ softness: null,
5829
+ position: "bottom"
5830
+ };
5831
+ const lift$1 = {
5832
+ effectId: "lift",
5833
+ options: { amount: "0.125" }
5834
+ };
5835
+ const tags = {
5836
+ tone: "classic",
5837
+ energy: "calm",
5838
+ motion: "subtle",
5839
+ era: "editorial"
5840
+ };
5841
+ /** Each role supplies complete states, including a flat surface-ink focus ring. */
5842
+ function states(base, hover, offset = 4, width = 2) {
5843
+ return {
5844
+ base,
5845
+ hover,
5846
+ focus: {
5847
+ ...base,
5848
+ shadow: "focus-indicator",
5849
+ indicator: {
5850
+ kind: "surface-ink",
5851
+ width,
5852
+ offset
5853
+ }
5854
+ },
5855
+ active: {
5856
+ ...base,
5857
+ transform: "none"
5858
+ },
5859
+ disabled: {
5860
+ ...base,
5861
+ effects: []
5862
+ }
5863
+ };
5864
+ }
5865
+ const gilt = {
5866
+ text: "treatment",
5867
+ border: "none",
5868
+ borderRadius: "rounded-10px",
5869
+ shadow: flatShadow,
5870
+ sizes: {
5871
+ sm: {
5872
+ padding: "10px 20px",
5873
+ fontSize: "text-base",
5874
+ borderRadius: "rounded-lg"
5875
+ },
5876
+ md: {
5877
+ padding: "18px 36px",
5878
+ fontSize: "text-19px"
5879
+ },
5880
+ lg: {
5881
+ padding: "18px 36px",
5882
+ fontSize: "text-19px"
5883
+ },
5884
+ xl: {
5885
+ padding: "18px 36px",
5886
+ fontSize: "text-19px"
5887
+ }
5888
+ },
5889
+ typography: {
5890
+ fontWeight: 400,
5891
+ typography: "heading",
5892
+ fontSize: "text-19px",
5893
+ letterSpacing: "slight",
5894
+ italic: false,
5895
+ textTransform: "none"
5896
+ },
5897
+ effects: []
5898
+ };
5899
+ const giltPrimary = {
5900
+ ...gilt,
5901
+ background: {
5902
+ type: "gradient",
5903
+ stops: ["accent", "primary"],
5904
+ direction: "to-br",
5905
+ foregroundToken: "onAccent"
5906
+ }
5907
+ };
5908
+ const giltPrimaryHover = {
5909
+ ...giltPrimary,
5910
+ background: {
5911
+ ...giltPrimary.background,
5912
+ stops: ["accent-400", "primary-400"],
5913
+ foregroundToken: "secondary-950"
5914
+ },
5915
+ effects: [lift$1]
5916
+ };
5917
+ const giltSecondary = {
5918
+ ...gilt,
5919
+ background: {
5920
+ type: "solid",
5921
+ colorToken: "text"
5922
+ }
5923
+ };
5924
+ const giltSecondaryHover = {
5925
+ ...giltSecondary,
5926
+ effects: [lift$1],
5927
+ contextualHover: {
5928
+ kind: "shade-shift",
5929
+ seedToken: unsafeAsOpaqueButtonColourToken("text"),
5930
+ fallbackDirection: "lighter"
5931
+ }
5932
+ };
5933
+ const giltPrimaryStates = states(giltPrimary, giltPrimaryHover);
5934
+ const giltSecondaryStates = states(giltSecondary, giltSecondaryHover);
5935
+ const giltSlabRecipe = defineStaticButtonStyleRecipe({
5936
+ id: "gilt-slab",
5937
+ accessibilityLabel: "Gilt slab",
5938
+ tags,
5939
+ system: { roles: {
5940
+ primary: { states: giltPrimaryStates },
5941
+ secondary: { states: giltSecondaryStates },
5942
+ outline: { states: giltSecondaryStates },
5943
+ ghost: { states: giltSecondaryStates },
5944
+ accent: { states: giltPrimaryStates }
5945
+ } }
5946
+ });
5947
+ const hairline = {
5948
+ text: "treatment",
5949
+ borderRadius: "rounded-3px",
5950
+ shadow: flatShadow,
5951
+ sizes: {
5952
+ sm: {
5953
+ padding: "9px 16px",
5954
+ fontSize: "text-xs"
5955
+ },
5956
+ md: {
5957
+ padding: "15px 28px",
5958
+ fontSize: "text-13px"
5959
+ },
5960
+ lg: {
5961
+ padding: "15px 28px",
5962
+ fontSize: "text-13px"
5963
+ },
5964
+ xl: {
5965
+ padding: "15px 28px",
5966
+ fontSize: "text-13px"
5967
+ }
5968
+ },
5969
+ typography: {
5970
+ fontWeight: 700,
5971
+ typography: "body",
5972
+ fontSize: "text-13px",
5973
+ letterSpacing: "wide",
5974
+ italic: false,
5975
+ textTransform: "uppercase"
5976
+ },
5977
+ effects: []
5978
+ };
5979
+ const hairlinePrimary = {
5980
+ ...hairline,
5981
+ background: {
5982
+ type: "solid",
5983
+ colorToken: "primary"
5984
+ },
5985
+ border: {
5986
+ widthClass: "border",
5987
+ boundaryInk: unsafeAsOpaqueButtonColourToken("primary")
5988
+ }
5989
+ };
5990
+ const hairlineOutline = {
5991
+ ...hairline,
5992
+ background: {
5993
+ type: "surface",
5994
+ role: "link"
5995
+ },
5996
+ border: {
5997
+ widthClass: "border",
5998
+ boundaryInk: unsafeAsOpaqueButtonColourToken("primary")
5999
+ }
6000
+ };
6001
+ const hairlineSecondary = {
6002
+ ...hairlineOutline,
6003
+ border: {
6004
+ widthClass: "border",
6005
+ boundaryInk: unsafeAsOpaqueButtonColourToken("accent")
6006
+ }
6007
+ };
6008
+ const hairlineFilled = {
6009
+ ...hairlineSecondary,
6010
+ background: {
6011
+ type: "solid",
6012
+ colorToken: "accent"
6013
+ }
6014
+ };
6015
+ const hairlinePrimaryStates = states(hairlinePrimary, hairlineOutline, 3);
6016
+ const hairlineSecondaryStates = states(hairlineSecondary, hairlineFilled, 3);
6017
+ const hairlineTabRecipe = defineStaticButtonStyleRecipe({
6018
+ id: "hairline-tab",
6019
+ accessibilityLabel: "Hairline tab",
6020
+ tags,
6021
+ system: { roles: {
6022
+ primary: { states: hairlinePrimaryStates },
6023
+ secondary: { states: hairlineSecondaryStates },
6024
+ outline: { states: hairlineSecondaryStates },
6025
+ ghost: { states: hairlineSecondaryStates },
6026
+ accent: { states: states(hairlineFilled, hairlineSecondary, 3) }
6027
+ } }
6028
+ });
6029
+ const marqueeAccent = {
6030
+ text: "treatment",
6031
+ borderRadius: "rounded-none",
6032
+ shadow: flatShadow,
6033
+ sizes: {
6034
+ sm: {
6035
+ padding: "8px 17px",
6036
+ fontSize: "text-15px"
6037
+ },
6038
+ md: {
6039
+ padding: "14px 25px",
6040
+ fontSize: "text-17px"
6041
+ },
6042
+ lg: {
6043
+ padding: "14px 25px",
6044
+ fontSize: "text-17px"
6045
+ },
6046
+ xl: {
6047
+ padding: "14px 25px",
6048
+ fontSize: "text-17px"
6049
+ }
6050
+ },
6051
+ typography: {
6052
+ fontWeight: 800,
6053
+ typography: "body",
6054
+ fontSize: "text-17px",
6055
+ letterSpacing: "loose",
6056
+ italic: false,
6057
+ textTransform: "uppercase"
6058
+ },
6059
+ effects: [],
6060
+ background: {
6061
+ type: "solid",
6062
+ colorToken: "accent"
6063
+ },
6064
+ border: {
6065
+ widthClass: "border-2",
6066
+ boundaryInk: unsafeAsOpaqueButtonColourToken("accent")
6067
+ }
6068
+ };
6069
+ const marqueePrimary = {
6070
+ ...marqueeAccent,
6071
+ background: {
6072
+ type: "solid",
6073
+ colorToken: "primary"
6074
+ },
6075
+ border: {
6076
+ widthClass: "border-2",
6077
+ boundaryInk: unsafeAsOpaqueButtonColourToken("primary")
6078
+ }
6079
+ };
6080
+ const marqueeSecondary = {
6081
+ ...marqueeAccent,
6082
+ background: {
6083
+ type: "solid",
6084
+ colorToken: "text"
6085
+ },
6086
+ border: {
6087
+ widthClass: "border-2",
6088
+ boundaryInk: unsafeAsOpaqueButtonColourToken("text")
6089
+ }
6090
+ };
6091
+ const marqueePrimaryStates = states(marqueeAccent, marqueePrimary, 4, 3);
6092
+ const marqueeSecondaryStates = states(marqueeSecondary, marqueeAccent, 4, 3);
6093
+ const marqueeRecipe = defineStaticButtonStyleRecipe({
6094
+ id: "marquee",
6095
+ accessibilityLabel: "Marquee",
6096
+ tags,
6097
+ system: { roles: {
6098
+ primary: { states: marqueePrimaryStates },
6099
+ secondary: { states: marqueeSecondaryStates },
6100
+ outline: { states: marqueeSecondaryStates },
6101
+ ghost: { states: marqueeSecondaryStates },
6102
+ accent: { states: marqueePrimaryStates }
6103
+ } }
6104
+ });
6105
+ //#endregion
5825
6106
  //#region ../theme-core/src/buttons/styles/recipes/fulcrumRecipe.ts
5826
6107
  const fulcrumSizes = {
5827
6108
  sm: {
@@ -6563,7 +6844,10 @@ const BUTTON_STYLE_IDS = [
6563
6844
  "offset-block",
6564
6845
  "ringed-pill",
6565
6846
  "square-outline",
6566
- "fulcrum"
6847
+ "fulcrum",
6848
+ "gilt-slab",
6849
+ "hairline-tab",
6850
+ "marquee"
6567
6851
  ];
6568
6852
  const quietArrowParametersSchema = z.object({ secondaryTreatment: z.enum(["outlined", "solid-accent"]) }).strict();
6569
6853
  const flatInkHoverTreatmentSchema = z.enum([
@@ -6600,7 +6884,10 @@ const buttonStyleSelectionSchema = z.discriminatedUnion("styleId", [
6600
6884
  selectionBranch("offset-block", emptyParametersSchema),
6601
6885
  selectionBranch("ringed-pill", emptyParametersSchema),
6602
6886
  selectionBranch("square-outline", emptyParametersSchema),
6603
- selectionBranch("fulcrum", emptyParametersSchema)
6887
+ selectionBranch("fulcrum", emptyParametersSchema),
6888
+ selectionBranch("gilt-slab", emptyParametersSchema),
6889
+ selectionBranch("hairline-tab", emptyParametersSchema),
6890
+ selectionBranch("marquee", emptyParametersSchema)
6604
6891
  ]);
6605
6892
  //#endregion
6606
6893
  //#region ../theme-core/src/buttons/styles/recipes/quietArrow.ts
@@ -10116,7 +10403,10 @@ const buttonStyleRecipes = [
10116
10403
  offsetBlockRecipe,
10117
10404
  ringedPillRecipe,
10118
10405
  squareOutlineRecipe,
10119
- fulcrumRecipe
10406
+ fulcrumRecipe,
10407
+ giltSlabRecipe,
10408
+ hairlineTabRecipe,
10409
+ marqueeRecipe
10120
10410
  ];
10121
10411
  const recipesById = new Map(buttonStyleRecipes.map((recipe) => [recipe.id, recipe]));
10122
10412
  function findButtonStyleRecipe(id) {
@@ -10132,6 +10422,9 @@ function resolveButtonStyleSelection(selection) {
10132
10422
  case "editorial-link": return resolveButtonStyleRecipe(editorialLinkRecipe, selection.parameters);
10133
10423
  case "pebble": return resolveButtonStyleRecipe(pebbleRecipe, selection.parameters);
10134
10424
  case "ink-stamp": return resolveButtonStyleRecipe(inkStampRecipe, selection.parameters);
10425
+ case "gilt-slab": return resolveButtonStyleRecipe(giltSlabRecipe, selection.parameters);
10426
+ case "hairline-tab": return resolveButtonStyleRecipe(hairlineTabRecipe, selection.parameters);
10427
+ case "marquee": return resolveButtonStyleRecipe(marqueeRecipe, selection.parameters);
10135
10428
  case "fulcrum": return resolveButtonStyleRecipe(fulcrumRecipe, selection.parameters);
10136
10429
  case "flat-ink": return resolveButtonStyleRecipe(flatInkRecipe, selection.parameters);
10137
10430
  case "brushed-wash": return resolveButtonStyleRecipe(brushedWashRecipe, selection.parameters);
@@ -11473,7 +11766,9 @@ const cardListKnobBlocks = [...cardListFamilyBlocks, "block.event-calendar"];
11473
11766
  const lookKnobBlocks = {
11474
11767
  actionStyle: cardListKnobBlocks,
11475
11768
  titleSize: "block.hero",
11476
- imagePosition: "block.hero",
11769
+ imagePosition: ["block.hero", "block.media-text"],
11770
+ imageShape: "block.media-text",
11771
+ aspectRatio: "block.media-text",
11477
11772
  stickerLine: "block.hero",
11478
11773
  smallCaption: "block.hero",
11479
11774
  candleGlow: "block.hero",
@@ -11483,7 +11778,11 @@ const lookKnobBlocks = {
11483
11778
  dates: "block.offerings-preview",
11484
11779
  showCapacity: "block.event-calendar",
11485
11780
  quoteCount: "block.testimonials",
11486
- archFrame: "block.testimonials",
11781
+ archFrame: [
11782
+ "block.testimonials",
11783
+ "block.newsletter-signup",
11784
+ "block.form"
11785
+ ],
11487
11786
  tilt: "block.testimonials"
11488
11787
  };
11489
11788
  function isArrangementAppearancePreset(preset) {
@@ -11510,13 +11809,25 @@ function cardListKnobDefaults(block, arrangement, knobs, defaults) {
11510
11809
  }
11511
11810
  };
11512
11811
  }
11812
+ const arrangementLookTargets = {
11813
+ hero: "hero",
11814
+ "feature-cards": "feature-cards",
11815
+ "event-calendar": "events",
11816
+ testimonials: "testimonials",
11817
+ "event-details": "events",
11818
+ "media-text": "media-text",
11819
+ "image-gallery": "image-gallery",
11820
+ "newsletter-signup": "newsletter",
11821
+ form: "contact-form",
11822
+ "body-text": "body-text"
11823
+ };
11513
11824
  function defineArrangementLook(id, block, name, arrangement, knobs, input = {}) {
11514
11825
  const mode = block === "event-calendar" ? "list" : null;
11515
11826
  return {
11516
11827
  id: asAppearancePresetId(id),
11517
11828
  blockKinds: [`block.${block}`],
11518
11829
  label: name,
11519
- target: block === "event-calendar" || block === "event-details" ? "events" : block === "hero" ? "hero" : block === "testimonials" ? "testimonials" : "feature-cards",
11830
+ target: arrangementLookTargets[block],
11520
11831
  structure: {
11521
11832
  kind: "arrangement",
11522
11833
  byMode: { [mode ?? "default"]: arrangement },
@@ -12336,6 +12647,15 @@ const appearancePresets = [
12336
12647
  eyebrowTreatment: "accent"
12337
12648
  }
12338
12649
  }),
12650
+ defineArrangementLook("body-text-reading-column", "body-text", "Reading column", "prose", []),
12651
+ defineArrangementLook("form-beside-introduction-arched-panel", "form", "Introduction beside an arched form", "two-column", [], { slotRoles: { panel: "card" } }),
12652
+ defineArrangementLook("newsletter-signup-in-arch", "newsletter-signup", "Signup in an arch", "arch", []),
12653
+ defineArrangementLook("image-gallery-square-tiles", "image-gallery", "Square tiles", "tiles", []),
12654
+ defineArrangementLook("image-gallery-arched-captions", "image-gallery", "Arched photos with captions", "tiles", [], { styleFallback: [id$1("image-gallery-square-tiles")] }),
12655
+ defineArrangementLook("media-text-circle-beside-text", "media-text", "Circle beside the text", "circle-beside", ["imagePosition"], { forcedKnobs: {
12656
+ imageShape: "circle",
12657
+ aspectRatio: "1/1"
12658
+ } }),
12339
12659
  defineArrangementLook("hero-photo-beside-text", "hero", "Photo beside the text", "split", heroKnobs, { slotRoles: { sticker: "highlight" } }),
12340
12660
  defineArrangementLook("hero-headline-row", "hero", "Big headline, then text and photo", "headline-row", heroKnobs, {
12341
12661
  slotRoles: { sticker: "highlight" },
@@ -12899,6 +13219,41 @@ function requireThemeColorToken$1(value) {
12899
13219
  return token;
12900
13220
  }
12901
13221
  //#endregion
13222
+ //#region ../theme-core/src/site-styles/siteChromeBackgrounds.ts
13223
+ const siteChromeBackgroundColorTokens = toSiteChromeBackgroundColorTokens(backgroundAppearanceColorTokenNames);
13224
+ const quickSiteChromeBackgroundColorTokens = toSiteChromeBackgroundColorTokens(backgroundAppearanceQuickColorTokenNames);
13225
+ siteChromeBackgroundColorTokens.filter((token) => !quickSiteChromeBackgroundColorTokens.includes(token));
13226
+ function parseSiteChromeBackgroundColorToken(value) {
13227
+ const token = parseBackgroundAppearanceColorToken(value);
13228
+ return token ? token : null;
13229
+ }
13230
+ function toSiteChromeBackgroundColorTokens(tokenNames) {
13231
+ return tokenNames.flatMap((name) => {
13232
+ const token = parseSiteChromeBackgroundColorToken(name);
13233
+ return token ? [token] : [];
13234
+ });
13235
+ }
13236
+ const backgroundColorTokenSchema = z.unknown().transform((value, ctx) => {
13237
+ const token = parseSiteChromeBackgroundColorToken(value);
13238
+ if (token === null) {
13239
+ ctx.addIssue({
13240
+ code: "custom",
13241
+ message: "Unknown site chrome background colour token"
13242
+ });
13243
+ return z.NEVER;
13244
+ }
13245
+ return token;
13246
+ });
13247
+ const siteChromeBackgroundOverrideSchema = z.discriminatedUnion("kind", [z.object({ kind: z.literal("default") }).strict(), z.object({
13248
+ kind: z.literal("color"),
13249
+ token: backgroundColorTokenSchema
13250
+ }).strict()]);
13251
+ z.object({
13252
+ background: siteChromeBackgroundOverrideSchema,
13253
+ navigationLayout: z.enum(["inline-wrap", "stack"])
13254
+ }).strict();
13255
+ z.object({ background: siteChromeBackgroundOverrideSchema }).strict();
13256
+ //#endregion
12902
13257
  //#region ../theme-core/src/site-styles/compilationPlan.ts
12903
13258
  const defaultHeaderBrandPreferences = {
12904
13259
  brandDisplay: "auto",
@@ -13059,6 +13414,9 @@ function fallbackEndsAtOffer(entry, mode, style, catalogue, visited) {
13059
13414
  appearancePresets.filter(isArrangementAppearancePreset);
13060
13415
  /** Closed structural hooks shared by block arrangements and bounded skins. */
13061
13416
  const arrangementSlotNames = [
13417
+ "contact",
13418
+ "social",
13419
+ "base",
13062
13420
  "section",
13063
13421
  "stack",
13064
13422
  "inline",
@@ -13145,6 +13503,55 @@ function validateOfferKnobs(style, catalogue) {
13145
13503
  });
13146
13504
  }
13147
13505
  //#endregion
13506
+ //#region ../theme-core/src/site-styles/footerLookDefaults.ts
13507
+ const defaultFooterLookRecipes = {
13508
+ "footer-centred-name": {
13509
+ arrangement: "centred",
13510
+ ground: {
13511
+ kind: "token",
13512
+ token: "surface"
13513
+ },
13514
+ nav: {
13515
+ weight: "regular",
13516
+ colorToken: "text",
13517
+ hoverColorToken: "primary",
13518
+ typography: "body"
13519
+ },
13520
+ legal: {
13521
+ kind: "separate",
13522
+ bar: null
13523
+ },
13524
+ brandAlign: "center"
13525
+ },
13526
+ "footer-links-row": {
13527
+ arrangement: "simple",
13528
+ ground: {
13529
+ kind: "token",
13530
+ token: "surface"
13531
+ },
13532
+ nav: {
13533
+ weight: "regular",
13534
+ colorToken: "text",
13535
+ hoverColorToken: "primary",
13536
+ typography: "body"
13537
+ },
13538
+ legal: { kind: "integrated" },
13539
+ brandAlign: "start"
13540
+ }
13541
+ };
13542
+ /** A whole authored recipe replaces the default; facets are never deep-merged. */
13543
+ function resolveFooterLookRecipe(style, id) {
13544
+ return style?.footerLookRecipes?.[id] ?? defaultFooterLookRecipes[id];
13545
+ }
13546
+ //#endregion
13547
+ //#region ../theme-core/src/site-styles/footerLookRecipe.ts
13548
+ /** Reject undeclared references when the curated catalogue is loaded, before rendering. */
13549
+ function validateFooterRecipeSurfaces(style, recipe) {
13550
+ [recipe.ground, ...recipe.legal.kind === "separate" && recipe.legal.bar ? [recipe.legal.bar.background] : []].forEach((ground) => {
13551
+ if (ground.kind === "style-surface" && (style.looks.kind !== "offers" || !style.looks.surfaces[ground.surface])) throw new Error(`Undeclared footer surface: ${ground.surface}`);
13552
+ });
13553
+ }
13554
+ //#endregion
13148
13555
  //#region ../theme-core/src/site-styles/styleTags.ts
13149
13556
  /**
13150
13557
  * Descriptive style-axis metadata for button personalities and palette
@@ -16051,52 +16458,14 @@ defineLookOptionGroup({
16051
16458
  function asFooterLookId(value) {
16052
16459
  return value;
16053
16460
  }
16054
- function quietFooterLinks(theme) {
16055
- return {
16056
- ...theme.footer,
16057
- navStyle: "minimal",
16058
- navWeight: "regular",
16059
- navColor: "text",
16060
- navLinkStyle: {
16061
- typography: "body",
16062
- fontWeight: "regular",
16063
- textTransform: "none",
16064
- italic: false,
16065
- colorToken: "text",
16066
- hoverColorToken: "primary",
16067
- padding: "none",
16068
- borderRadius: "none"
16069
- }
16070
- };
16071
- }
16072
- function emphasizedFooterLinks(theme) {
16073
- return {
16074
- ...theme.footer,
16075
- navStyle: "minimal",
16076
- navWeight: "medium",
16077
- navColor: "text",
16078
- navLinkStyle: {
16079
- typography: "body",
16080
- fontWeight: "medium",
16081
- textTransform: "none",
16082
- italic: false,
16083
- colorToken: "text",
16084
- hoverColorToken: "primary",
16085
- padding: "none",
16086
- borderRadius: "none"
16087
- }
16088
- };
16089
- }
16090
16461
  const footerLookCatalog = defineExactCatalog()([{
16091
- id: asFooterLookId("footer-links-quiet"),
16092
- label: "Quiet links",
16093
- description: "Regular-weight footer navigation with a restrained hover.",
16094
- compile: quietFooterLinks
16462
+ id: asFooterLookId("footer-links-row"),
16463
+ label: "Links in a row",
16464
+ description: "Your links in a row, with the other footer sections in columns beside them."
16095
16465
  }, {
16096
- id: asFooterLookId("footer-links-emphasized"),
16097
- label: "Emphasized links",
16098
- description: "Medium-weight footer navigation with a clearer emphasis.",
16099
- compile: emphasizedFooterLinks
16466
+ id: asFooterLookId("footer-centred-name"),
16467
+ label: "Centred name, links beneath",
16468
+ description: "Your site name centred, with your links, contact details and social links beneath it."
16100
16469
  }]);
16101
16470
  new Map(footerLookCatalog.map((look) => [look.id, look]));
16102
16471
  //#endregion
@@ -17480,6 +17849,7 @@ function defineCuratedSiteStyle(input) {
17480
17849
  recommendedAppearancePresetIds
17481
17850
  },
17482
17851
  headerCuration: headerCurationBySiteStyle[input.id],
17852
+ footerLookRecipes: input.footerLookRecipes,
17483
17853
  recommendedFooterLookIds: (input.recommendedFooterLookIds ?? []).map(asFooterLookId),
17484
17854
  buttonStyleChoices: input.buttonStyleChoices,
17485
17855
  paletteRecommendations: input.paletteRecommendations,
@@ -17965,7 +18335,11 @@ const lanternLooks = {
17965
18335
  margin: "40px"
17966
18336
  },
17967
18337
  fontLoading: {
17968
- extraBodyFontWeights: [500, 700],
18338
+ extraBodyFontWeights: [
18339
+ 500,
18340
+ 700,
18341
+ 800
18342
+ ],
17969
18343
  italicBodyFontWeights: [400]
17970
18344
  },
17971
18345
  surfaces: {
@@ -18015,6 +18389,38 @@ const lanternLooks = {
18015
18389
  ]
18016
18390
  },
18017
18391
  offers: [
18392
+ {
18393
+ id: id("body-text-reading-column"),
18394
+ treatment: "reading-column",
18395
+ roleMap: lanternRoles
18396
+ },
18397
+ {
18398
+ id: id("form-beside-introduction-arched-panel"),
18399
+ treatment: "arched-panel",
18400
+ addKnobs: ["archFrame"],
18401
+ roleMap: lanternRoles
18402
+ },
18403
+ {
18404
+ id: id("newsletter-signup-in-arch"),
18405
+ treatment: "signup-arch",
18406
+ addKnobs: ["archFrame"],
18407
+ roleMap: lanternRoles
18408
+ },
18409
+ {
18410
+ id: id("image-gallery-square-tiles"),
18411
+ treatment: "square-tiles",
18412
+ roleMap: lanternRoles
18413
+ },
18414
+ {
18415
+ id: id("image-gallery-arched-captions"),
18416
+ treatment: "arched-captions",
18417
+ roleMap: lanternRoles
18418
+ },
18419
+ {
18420
+ id: id("media-text-circle-beside-text"),
18421
+ treatment: "circle-beside",
18422
+ roleMap: lanternRoles
18423
+ },
18018
18424
  {
18019
18425
  id: id("event-details-panel"),
18020
18426
  treatment: "quiet",
@@ -18453,7 +18859,7 @@ const curatedSiteStyles = [
18453
18859
  "faq-contained-help",
18454
18860
  "contact-form-panel"
18455
18861
  ],
18456
- recommendedFooterLookIds: ["footer-links-quiet"],
18862
+ recommendedFooterLookIds: ["footer-links-row"],
18457
18863
  buttonStyleChoices: [
18458
18864
  buttonChoice("soft-pill"),
18459
18865
  buttonChoice("pebble"),
@@ -18572,7 +18978,7 @@ const curatedSiteStyles = [
18572
18978
  "testimonials-non-carded",
18573
18979
  "contact-form-panel"
18574
18980
  ],
18575
- recommendedFooterLookIds: ["footer-links-quiet", "footer-links-emphasized"],
18981
+ recommendedFooterLookIds: ["footer-links-row"],
18576
18982
  buttonStyleChoices: [
18577
18983
  buttonChoice("earth-pill"),
18578
18984
  buttonChoice("soft-pill"),
@@ -18627,7 +19033,41 @@ const curatedSiteStyles = [
18627
19033
  "testimonials-brand-statement-cards",
18628
19034
  "contact-form-panel"
18629
19035
  ],
18630
- recommendedFooterLookIds: ["footer-links-emphasized", "footer-links-quiet"],
19036
+ footerLookRecipes: { "footer-links-row": {
19037
+ arrangement: "split",
19038
+ ground: {
19039
+ kind: "token",
19040
+ token: "primary-800"
19041
+ },
19042
+ nav: {
19043
+ weight: "medium",
19044
+ colorToken: "primaryForeground",
19045
+ hoverColorToken: "secondary",
19046
+ typography: "body"
19047
+ },
19048
+ legal: {
19049
+ kind: "separate",
19050
+ bar: {
19051
+ fullBleed: true,
19052
+ background: {
19053
+ kind: "token",
19054
+ token: "primary-900"
19055
+ },
19056
+ textColor: "primaryForeground",
19057
+ textAlign: "center",
19058
+ paddingY: "compact",
19059
+ paddingX: "default",
19060
+ borderTop: { width: "none" }
19061
+ },
19062
+ linkStyle: {
19063
+ colorToken: "secondary",
19064
+ decorationColorToken: "secondary"
19065
+ }
19066
+ },
19067
+ brandAlign: "start",
19068
+ brandLogoSize: "sm"
19069
+ } },
19070
+ recommendedFooterLookIds: ["footer-links-row"],
18631
19071
  buttonStyleChoices: [
18632
19072
  buttonChoice("showtime-pill"),
18633
19073
  buttonChoice("confident-chip"),
@@ -18698,7 +19138,7 @@ const curatedSiteStyles = [
18698
19138
  "testimonials-statement-cards",
18699
19139
  "contact-form-panel"
18700
19140
  ],
18701
- recommendedFooterLookIds: ["footer-links-emphasized", "footer-links-quiet"],
19141
+ recommendedFooterLookIds: ["footer-links-row"],
18702
19142
  buttonStyleChoices: [
18703
19143
  buttonChoice("ornate-ritual"),
18704
19144
  buttonChoice("joy-stamp"),
@@ -18745,7 +19185,22 @@ const curatedSiteStyles = [
18745
19185
  } }
18746
19186
  },
18747
19187
  recommendedAppearancePresetIds: ["feature-cards-bold-colors", "testimonials-statement-cards"],
18748
- recommendedFooterLookIds: ["footer-links-emphasized", "footer-links-quiet"],
19188
+ footerLookRecipes: { "footer-links-row": {
19189
+ arrangement: "simple",
19190
+ ground: {
19191
+ kind: "token",
19192
+ token: "surface"
19193
+ },
19194
+ nav: {
19195
+ weight: "medium",
19196
+ colorToken: "text",
19197
+ hoverColorToken: "primary",
19198
+ typography: "body"
19199
+ },
19200
+ legal: { kind: "integrated" },
19201
+ brandAlign: "start"
19202
+ } },
19203
+ recommendedFooterLookIds: ["footer-links-row"],
18749
19204
  buttonStyleChoices: [
18750
19205
  buttonChoice("joy-stamp"),
18751
19206
  buttonChoice("ink-stamp"),
@@ -18797,7 +19252,7 @@ const curatedSiteStyles = [
18797
19252
  },
18798
19253
  testimonialQuote: serifDisplayQuote
18799
19254
  },
18800
- recommendedFooterLookIds: ["footer-links-quiet"],
19255
+ recommendedFooterLookIds: ["footer-links-row"],
18801
19256
  buttonStyleChoices: [
18802
19257
  buttonChoice("fulcrum"),
18803
19258
  buttonChoice("editorial-link"),
@@ -18874,7 +19329,7 @@ const curatedSiteStyles = [
18874
19329
  "faq-base-accordion",
18875
19330
  "booking-brand-band"
18876
19331
  ],
18877
- recommendedFooterLookIds: ["footer-links-quiet"],
19332
+ recommendedFooterLookIds: ["footer-links-row"],
18878
19333
  buttonStyleChoices: [
18879
19334
  buttonChoice("quiet-arrow", void 0, { secondaryTreatment: "solid-accent" }),
18880
19335
  buttonChoice("flat-ink"),
@@ -18912,7 +19367,22 @@ const curatedSiteStyles = [
18912
19367
  accordions: boldBorderedAccordionSystem,
18913
19368
  testimonialQuote: accentGlyphQuote
18914
19369
  },
18915
- recommendedFooterLookIds: ["footer-links-emphasized"],
19370
+ footerLookRecipes: { "footer-links-row": {
19371
+ arrangement: "simple",
19372
+ ground: {
19373
+ kind: "token",
19374
+ token: "surface"
19375
+ },
19376
+ nav: {
19377
+ weight: "medium",
19378
+ colorToken: "text",
19379
+ hoverColorToken: "primary",
19380
+ typography: "body"
19381
+ },
19382
+ legal: { kind: "integrated" },
19383
+ brandAlign: "start"
19384
+ } },
19385
+ recommendedFooterLookIds: ["footer-links-row"],
18916
19386
  buttonStyleChoices: [
18917
19387
  buttonChoice("offset-block"),
18918
19388
  buttonChoice("ink-stamp"),
@@ -18951,8 +19421,29 @@ const curatedSiteStyles = [
18951
19421
  accordions: warmInsetAccordionSystem,
18952
19422
  testimonialQuote: serifDisplayQuote
18953
19423
  },
18954
- recommendedFooterLookIds: ["footer-links-quiet"],
19424
+ footerLookRecipes: { "footer-centred-name": {
19425
+ arrangement: "centred",
19426
+ ground: {
19427
+ kind: "style-surface",
19428
+ surface: "deep"
19429
+ },
19430
+ nav: {
19431
+ weight: "regular",
19432
+ colorToken: "text",
19433
+ hoverColorToken: "primary",
19434
+ typography: "heading"
19435
+ },
19436
+ legal: {
19437
+ kind: "separate",
19438
+ bar: null
19439
+ },
19440
+ brandAlign: "center"
19441
+ } },
19442
+ recommendedFooterLookIds: ["footer-centred-name", "footer-links-row"],
18955
19443
  buttonStyleChoices: [
19444
+ buttonChoice("gilt-slab"),
19445
+ buttonChoice("hairline-tab"),
19446
+ buttonChoice("marquee"),
18956
19447
  buttonChoice("ringed-pill"),
18957
19448
  buttonChoice("earth-pill"),
18958
19449
  buttonChoice("editorial-link")
@@ -18987,7 +19478,7 @@ const curatedSiteStyles = [
18987
19478
  accordions: editorialDividedAccordionSystem,
18988
19479
  testimonialQuote: serifDisplayQuote
18989
19480
  },
18990
- recommendedFooterLookIds: ["footer-links-quiet"],
19481
+ recommendedFooterLookIds: ["footer-links-row"],
18991
19482
  buttonStyleChoices: [
18992
19483
  buttonChoice("flat-ink", void 0, { corners: "square" }),
18993
19484
  buttonChoice("editorial-link"),
@@ -19015,6 +19506,7 @@ function curatedStyleTemplate(input) {
19015
19506
  }
19016
19507
  curatedSiteStyles.forEach((style) => {
19017
19508
  if (style.looks.kind === "offers") validateLookFallbacks(style.looks);
19509
+ (/* @__PURE__ */ new Set([...Object.values(style.footerLookRecipes ?? {}), ...style.recommendedFooterLookIds.map((id) => resolveFooterLookRecipe(style, id))])).forEach((recipe) => validateFooterRecipeSurfaces(style, recipe));
19018
19510
  });
19019
19511
  //#endregion
19020
19512
  //#region ../theme-core/src/site-styles/effectiveArrangement.ts
@@ -19090,21 +19582,6 @@ const blockDesignFallback = {
19090
19582
  };
19091
19583
  blockDesignFallback.sectionSurface, blockDesignFallback.contentFrame, blockDesignFallback.sectionHeight, blockDesignFallback.heroLegibility, blockDesignFallback.imageSurfaceTreatment, blockDesignFallback.imageSurfaceMotion, blockDesignFallback.tileTreatment, blockDesignFallback.eventListTreatment, blockDesignFallback.eyebrowTreatment, blockDesignFallback.accordionIconTreatment, blockDesignFallback.composition;
19092
19584
  //#endregion
19093
- //#region ../theme-core/src/site-styles/siteChromeBackgrounds.ts
19094
- const siteChromeBackgroundColorTokens = toSiteChromeBackgroundColorTokens(backgroundAppearanceColorTokenNames);
19095
- const quickSiteChromeBackgroundColorTokens = toSiteChromeBackgroundColorTokens(backgroundAppearanceQuickColorTokenNames);
19096
- siteChromeBackgroundColorTokens.filter((token) => !quickSiteChromeBackgroundColorTokens.includes(token));
19097
- function parseSiteChromeBackgroundColorToken(value) {
19098
- const token = parseBackgroundAppearanceColorToken(value);
19099
- return token ? token : null;
19100
- }
19101
- function toSiteChromeBackgroundColorTokens(tokenNames) {
19102
- return tokenNames.flatMap((name) => {
19103
- const token = parseSiteChromeBackgroundColorToken(name);
19104
- return token ? [token] : [];
19105
- });
19106
- }
19107
- //#endregion
19108
19585
  //#region ../theme-core/src/site-styles/siteChromeNavPreferences.ts
19109
19586
  const headerNavTypographyPreferenceValues = [
19110
19587
  "inherit",
@@ -19220,21 +19697,6 @@ z.object({
19220
19697
  }).strict();
19221
19698
  //#endregion
19222
19699
  //#region ../theme-core/src/site-styles/headerPreferencesPersistence.ts
19223
- const backgroundColorTokenSchema = z.unknown().transform((value, ctx) => {
19224
- const token = parseSiteChromeBackgroundColorToken(value);
19225
- if (token === null) {
19226
- ctx.addIssue({
19227
- code: "custom",
19228
- message: "Unknown site chrome background colour token"
19229
- });
19230
- return z.NEVER;
19231
- }
19232
- return token;
19233
- });
19234
- const backgroundOverrideSchema = z.discriminatedUnion("kind", [z.object({ kind: z.literal("default") }).strict(), z.object({
19235
- kind: z.literal("color"),
19236
- token: backgroundColorTokenSchema
19237
- }).strict()]);
19238
19700
  const logoTextIntentSchema = z.object({
19239
19701
  mobileMaxWidth: z.enum([
19240
19702
  "xs",
@@ -19260,7 +19722,7 @@ const headerPreferencesShape = {
19260
19722
  navFontRole: z.enum(headerNavTypographyPreferenceValues),
19261
19723
  navTextSize: z.enum(headerNavFontSizePreferenceValues),
19262
19724
  interactionPalette: z.union([z.literal("recommended"), z.enum(headerInteractionPaletteValues)]),
19263
- background: backgroundOverrideSchema,
19725
+ background: siteChromeBackgroundOverrideSchema,
19264
19726
  structure: structureSchema
19265
19727
  };
19266
19728
  z.object(headerPreferencesShape).strict();
@@ -19491,6 +19953,10 @@ function listLookSlot(presentation, slot) {
19491
19953
  ...surface === void 0 ? { "data-surface": "section" } : resolvedItemSurfaceProps(surface, slot)
19492
19954
  };
19493
19955
  }
19956
+ /** Control kind is semantic; legacy markup receives no extra attributes. */
19957
+ function listLookControl(presentation, kind) {
19958
+ return presentation.lookSlots === void 0 ? {} : { "data-control": kind };
19959
+ }
19494
19960
  function resolvedSurfaceBackground(surface, token) {
19495
19961
  const color = token.startsWith("#") ? token : `rgb(var(--tb-${token}))`;
19496
19962
  const base = surface.kind === "owned" ? surface.tintBase : void 0;
@@ -20514,19 +20980,14 @@ function groupItemsByDate(items, accessors) {
20514
20980
  *
20515
20981
  * Sites don't store a locale, and every public word around a date is English,
20516
20982
  * so the only open question is which English conventions to follow: day or
20517
- * month first, and a 24 or 12-hour clock. The site's time zone is the one
20983
+ * month first. The site's time zone is the one
20518
20984
  * fact every site carries about where it is. It is the site's, never an
20519
20985
  * event's: a venue left at UTC must not turn a UK site's dates American.
20520
20986
  * Anywhere this can't place (UTC, the Americas, Asia) keeps US English, which
20521
20987
  * is what these helpers wrote before sites were placed at all.
20522
20988
  */
20523
20989
  function eventDateLocale(siteTimeZone) {
20524
- if (!siteTimeZone) return "en-US";
20525
- if (siteTimeZone === "Europe/Dublin") return "en-IE";
20526
- if (siteTimeZone.startsWith("Europe/")) return "en-GB";
20527
- if (siteTimeZone.startsWith("Australia/")) return "en-AU";
20528
- if (siteTimeZone === "Pacific/Auckland" || siteTimeZone === "Pacific/Chatham") return "en-NZ";
20529
- return "en-US";
20990
+ return inferSiteDateLocale(siteTimeZone);
20530
20991
  }
20531
20992
  /**
20532
20993
  * Formatting options for an event's dates: the times in the event's own zone,
@@ -27298,6 +27759,7 @@ const formFieldGroupSchema = z.discriminatedUnion("type", [z.object({
27298
27759
  fields: z.tuple([formFieldSchema, formFieldSchema])
27299
27760
  })]);
27300
27761
  const formSourceSchema = z.object({
27762
+ lookSlots: lookListPresentationSchemaShape.lookSlots,
27301
27763
  value: formRecordSchema.optional(),
27302
27764
  siteId: z.string().optional(),
27303
27765
  apiBaseUrl: z.string().optional(),
@@ -27307,6 +27769,7 @@ const formSourceSchema = z.object({
27307
27769
  spamProtectionEnabled: z.boolean().optional()
27308
27770
  });
27309
27771
  const formDisplaySchema = z.object({
27772
+ lookSlots: lookListPresentationSchemaShape.lookSlots,
27310
27773
  kind: z.literal("form"),
27311
27774
  state: z.enum(["missing", "ready"]),
27312
27775
  className: z.string().nullable(),
@@ -27328,17 +27791,30 @@ const formIslandMetaCodec = createZodCodec(z.object({
27328
27791
  const formIslandMetaKeys = defineInteractiveIslandMetaKeys("siteId", "apiBaseUrl");
27329
27792
  function buildFormDisplay(source) {
27330
27793
  const form = source.value ?? null;
27331
- const fields = form?.schemaJson?.fields;
27332
- const groups = Array.isArray(fields) ? groupFormFields(fields) : [];
27794
+ const fields = formDisplayFields(form);
27333
27795
  return {
27334
27796
  kind: "form",
27335
- state: form ? "ready" : "missing",
27797
+ ...source.lookSlots ? { lookSlots: source.lookSlots } : {},
27798
+ state: fields.state,
27336
27799
  className: source.className ?? null,
27337
- formId: form?.id ?? null,
27800
+ formId: fields.formId,
27338
27801
  submitLabel: source.submitLabel?.trim() || "Submit",
27339
27802
  successMessage: source.successMessage ?? null,
27340
27803
  form,
27341
- groups
27804
+ groups: fields.groups
27805
+ };
27806
+ }
27807
+ function formDisplayFields(form) {
27808
+ if (!form) return {
27809
+ state: "missing",
27810
+ formId: null,
27811
+ groups: []
27812
+ };
27813
+ const fields = form.schemaJson?.fields;
27814
+ return {
27815
+ state: "ready",
27816
+ formId: form.id,
27817
+ groups: Array.isArray(fields) ? groupFormFields(fields) : []
27342
27818
  };
27343
27819
  }
27344
27820
  const formInteractiveIslandPropsCodec = createInteractiveIslandCodec({
@@ -27469,76 +27945,74 @@ const giftingInteractiveIslandPropsCodec = createInteractiveIslandCodec({
27469
27945
  /**
27470
27946
  * Get form fields based on preset configuration.
27471
27947
  */
27472
- function getGlobalFormFields(form) {
27473
- const includePhone = form.includeOptionalPhone;
27474
- switch (form.fields.preset) {
27475
- case "emailOnly": return withOptionalPhone([{
27476
- id: "email",
27477
- type: "email",
27478
- label: "Email",
27479
- required: true,
27480
- placeholder: "your@email.com"
27481
- }], includePhone);
27482
- case "emailName": return withOptionalPhone([{
27483
- id: "email",
27484
- type: "email",
27485
- label: "Email",
27486
- required: true,
27487
- placeholder: "your@email.com"
27488
- }, {
27948
+ function getGlobalFormFields(form, presentation = {}) {
27949
+ const fields = withOptionalPhone(newsletterPresetFields(form.fields), form.includeOptionalPhone);
27950
+ return presentation.lookSlots ? fields.map((field) => ({
27951
+ ...field,
27952
+ label: lookFieldLabel(field)
27953
+ })) : fields;
27954
+ }
27955
+ function lookFieldLabel(field) {
27956
+ switch (field.id) {
27957
+ case "firstName": return "First name";
27958
+ case "lastName": return "Last name";
27959
+ default: return field.label;
27960
+ }
27961
+ }
27962
+ const emailField = {
27963
+ id: "email",
27964
+ type: "email",
27965
+ label: "Email",
27966
+ required: true,
27967
+ placeholder: "your@email.com"
27968
+ };
27969
+ const firstNameField = (required) => ({
27970
+ id: "firstName",
27971
+ type: "text",
27972
+ label: "First Name",
27973
+ required,
27974
+ placeholder: "First name"
27975
+ });
27976
+ function newsletterPresetFields(fields) {
27977
+ switch (fields.preset) {
27978
+ case "emailOnly": return [emailField];
27979
+ case "emailName": return [emailField, {
27489
27980
  id: "name",
27490
27981
  type: "text",
27491
27982
  label: "Name",
27492
- required: form.fields.name === "required",
27983
+ required: fields.name === "required",
27493
27984
  placeholder: "Your name"
27494
- }], includePhone);
27495
- case "emailFirstLast": return withOptionalPhone([
27496
- {
27497
- id: "email",
27498
- type: "email",
27499
- label: "Email",
27500
- required: true,
27501
- placeholder: "your@email.com"
27502
- },
27503
- {
27504
- id: "firstName",
27505
- type: "text",
27506
- label: "First Name",
27507
- required: form.fields.firstName === "required",
27508
- placeholder: "First name"
27509
- },
27985
+ }];
27986
+ case "emailFirstName": return [emailField, firstNameField(fields.firstName === "required")];
27987
+ case "emailFirstLast": return [
27988
+ emailField,
27989
+ firstNameField(fields.firstName === "required"),
27510
27990
  {
27511
27991
  id: "lastName",
27512
27992
  type: "text",
27513
27993
  label: "Last Name",
27514
- required: form.fields.lastName === "required",
27994
+ required: fields.lastName === "required",
27515
27995
  placeholder: "Last name"
27516
27996
  }
27517
- ], includePhone);
27518
- case "emailNameCompany": return withOptionalPhone([
27519
- {
27520
- id: "email",
27521
- type: "email",
27522
- label: "Email",
27523
- required: true,
27524
- placeholder: "your@email.com"
27525
- },
27997
+ ];
27998
+ case "emailNameCompany": return [
27999
+ emailField,
27526
28000
  {
27527
28001
  id: "name",
27528
28002
  type: "text",
27529
28003
  label: "Name",
27530
- required: form.fields.name === "required",
28004
+ required: fields.name === "required",
27531
28005
  placeholder: "Your name"
27532
28006
  },
27533
28007
  {
27534
28008
  id: "company",
27535
28009
  type: "text",
27536
28010
  label: "Company",
27537
- required: form.fields.company === "required",
28011
+ required: fields.company === "required",
27538
28012
  placeholder: "Company name"
27539
28013
  }
27540
- ], includePhone);
27541
- default: throw new Error("Unknown newsletter preset");
28014
+ ];
28015
+ default: return assertNever$6(fields);
27542
28016
  }
27543
28017
  }
27544
28018
  function withOptionalPhone(fields, includePhone) {
@@ -27606,6 +28080,7 @@ const mailingListSignupBlockSourceRefSchema = z.object({
27606
28080
  });
27607
28081
  const signedMailingListSourceTokenSchema = z.string().trim().min(1).transform(parseRequiredMailingListSignedSourceToken);
27608
28082
  const newsletterSourceCommonSchema = z.object({
28083
+ lookSlots: lookListPresentationSchemaShape.lookSlots,
27609
28084
  siteId: z.string().optional(),
27610
28085
  apiBaseUrl: z.string().optional(),
27611
28086
  mailingList: mailingListContextSchema.optional(),
@@ -27638,6 +28113,7 @@ const newsletterSourceSchema = z.discriminatedUnion("source", [
27638
28113
  newsletterSourceCommonSchema.extend({ source: z.literal("preview") })
27639
28114
  ]);
27640
28115
  const newsletterDisplaySchema = z.object({
28116
+ lookSlots: lookListPresentationSchemaShape.lookSlots,
27641
28117
  kind: z.literal("newsletter-form"),
27642
28118
  availability: z.enum(["ready", "unavailable"]),
27643
28119
  className: z.string().nullable(),
@@ -27705,13 +28181,14 @@ function buildNewsletterDisplay(source) {
27705
28181
  const choices = resolveRuntimeChoices(assessment);
27706
28182
  return {
27707
28183
  kind: "newsletter-form",
28184
+ ...source.lookSlots ? { lookSlots: source.lookSlots } : {},
27708
28185
  availability: assessment.tag === "available" ? "ready" : "unavailable",
27709
28186
  className: source.className ?? null,
27710
28187
  buttonLabel: form.buttonLabel,
27711
28188
  successMessage: form.successMessage,
27712
28189
  buttonVariant: source.buttonVariant ?? "primary",
27713
28190
  privacyNote: form.privacyNote,
27714
- fields: getGlobalFormFields(form),
28191
+ fields: getGlobalFormFields(form, source),
27715
28192
  choices
27716
28193
  };
27717
28194
  }
@@ -28715,4 +29192,4 @@ function defineIslandPropsDecoder(kind) {
28715
29192
  };
28716
29193
  }
28717
29194
  //#endregion
28718
- export { formatRegistrationSchedule as $, resolveRuntimeEventDestination as $n, relativeLuminance as $r, placesLeftLabel as $t, getEventSelectionMode as A, formatCurrencyAmount as Ai, eventDateOptions as An, toSelectedCollectionOptionKind as Ar, buildBookingPaymentSelectionViewModel as At, getDeclinedPass as B, getLocalDateKey as Bn, ok as Br, resolveRouteRequiresPayment as Bt, offeringNounForEvent as C, toScheduledBookingDateTime as Ci, normalizeCsvString as Cn, parseBookingCurrencyInputToCents as Cr, resolveRegistrationTicketContinuation as Ct, bookingEntry as D, publicEventPricingDisplay as Di, formatEventPriceAmount as Dn, resolveBookingSiteId as Dr, normalizeEventRegistrationMaxTickets as Dt, bookingCardEntry as E, publicEventPricingCurrency as Ei, formatEventPrice as En, resolveBookingPaymentStep as Er, isEventRegistrationAvailable as Et, registrationStepLabel as F, formatEventNextDateFact as Fn, RichTextDocSchema as Fr, OFFLINE_BOOKING_PAYMENT_INSTRUCTIONS as Ft, shouldPromptForLogin as G, buildCalendarViewport as Gn, themeButtonVariantClassNames as Gr, formatCentsAsCurrencyInput as Gt, registrationFlowReducer as H, MONTH_NAMES as Hn, reportWorkflowError as Hr, beginWaitlistInvitation as Ht, registrationStepLabelContext as I, formatEventTimeRange as In, isRecord$4 as Ir, findPreSelectedEvent as It, findSelectedTicketType as J, getOrderedDayNames as Jn, mergeStyles as Jr, getSlidingScaleForEvent as Jt, ENTITLEMENT_SINGLE_TICKET_TOOLTIP as K, formatDateKey as Kn, boxBackgroundSchema as Kr, getEligibilityFlowFlags as Kt, areEventRegistrationPaymentSelectionsEqual as L, formatTime$1 as Ln, assertNever$1 as Lr, resolveDiscountContext as Lt, registrationPaymentRoute as M, formatDate$1 as Mn, resolveSelectedAppointmentConsent as Mr, paymentChoiceDetails as Mt, registrationPresentation as N, formatEventCompactDateRail as Nn, BOOKING_FORM_DATA_RESERVED_KEYS as Nr, paymentChoicePrice as Nt, bookingEntryProgress as O, publicEventPricingStrategy as Oi, formatEventPriceDisplay as On, resolveDefaultBookingServiceId as Or, resolveEventRegistrationSubmitPlan as Ot, registrationRoute as P, formatEventDateParts as Pn, isBookingRequirementConsentFieldId as Pr, formatPrice as Pt, formatPassCreditUsageLabel as Q, shiftCalendarAnchorDate as Qn, resolveTokenOrCssColorValue as Qr, validateFormData as Qt, createInitialRegistrationFlowState as R, groupEventsByDate as Rn, clearWorkflowFeedback as Rr, resolveEventRequiresPayment as Rt, toWholeSeriesRegistrationEvents as S, toBookingTimeZone as Si, normalizeCsvIds as Sn, isBookingServiceSlidingAmountInRange as Sr, resolveRegistrationAvailabilityBlocker as St, bookingBarPlacement as T, isPublicEventPricingOptionDisplayable as Ti, buildEventListWeek as Tn, resolveAppointmentCheckoutVerificationState as Tr, visitorHoldsOwnPlace as Tt, buildEventRegistrationPaymentOptionsViewModel as U, addDays as Un, reportWorkflowSuccess as Ur, createRegistrationDraftData as Ut, isRegistrationLocked as V, getLocalMinuteOfDay as Vn, okWith as Vr, toRegistrationRequestSubject as Vt, decideEventRegistrationPayment as W, addMonths as Wn, themeButtonSizeClassName as Wr, invitationSubmission as Wt, formatDate as X, isSameCalendarDay as Xn, isCssColorLiteral as Xr, parseCurrencyInputToCents as Xt, formatBookingWhen as Y, getWeekCalendarDays as Yn, textColorStyle as Yr, getSlidingScaleSelectionMessage as Yt, formatEventDateTime as Z, isToday as Zn, resolveOnColorForThemeToken as Zr, shouldLoadRegistrationOptions as Zt, buildEventRegistrationDisplayFromScopedEvents as _, formatLocalScheduleDate as _i, resolveCalendarReadProfile as _n, getBookingRedirectStateFromLocation as _r, placeCountCeiling as _t, buildProductDetailDisplay as a, parseEventRegistrationErrorReason as ai, isSemanticSpacing as an, getEventAvailabilityStatus as ar, occurrenceTitleOverride as at, getRegistrationStartAt as b, parseBookingLocalDate as bi, buildEventRuntimeFilters as bn, getRegistrationSuccessCopy as br, resolveGuestNextStepCheck as bt, EMPTY_COMMERCE_CART_STATE as c, parseAspectRatioValue as ci, eventListingBlockRuntime as cn, selectEventCapacitySource as cr, canRequestTicketOption as ct, deriveCommerceCheckoutState as d, orderedLiveRunSessions as di, calendarPageResponseError as dn, listItemPresentation as dr, getTicketSelectionTotal as dt, hexToRgb as ei, shownVenue as en, canJoinEventWaitlist as er, formatTime as et, parseStoredCommerceCartState as f, resolveWholeSeriesBookingPhase as fi, calendarQueryKey as fn, listLookSlot as fr, getTicketTypeLineMax as ft, newsletterBlockSubmissionMessage as g, formatBookingInstant as gi, planCalendarMonthRanges as gn, formatBookingSubmissionPreparationError as gr, fullyBookedLabel as gt, NEWSLETTER_SIGNUPS_PAUSED_MESSAGE as h, addLocalScheduleDays as hi, calendarWindowPageSchema as hn, formatBookingCentsAsCurrencyInput as hr, setTicketLineQuantity as ht, buildProductCardDisplay as i, eventRegistrationErrors as ii, SEMANTIC_SPACING_VALUES as in, getEventAvailability as ir, getVisibleTicketTypes as it, panelShouldOpen as j, assertNever$6 as ji, eventLocalDateKey as jn, projectSelectedAppointmentConsentIntoForm as jr, buildReviewedBookingPaymentViewModel as jt, bookingPanelHeading as k, publicEventPricingType as ki, eventDateLocale as kn, selectedBookingCollectionOptionKind as kr, calculateEventRegistrationPreviewTotal as kt, buildPassCartItem as l, resolveMediaTransformForAspect as li, calendarMonthDate as ln, selectMostOpenCapacitySource as lr, getSingleSelectedPricingOptionId as lt, reduceCommerceCart as m, resolveBookingSignupOffer as mi, calendarWindowMonths as mn, deriveBookingFormViewState as mr, normalizeTicketSelectionLines as mt, getShopDisplayForItems as n, clsx as ni, staticHeaderChromeRuntime as nn, formatEventRemainingPlaces as nr, getPortalSubjectEmail as nt, formatCommercePrice as o, confirmationPaymentSchema as oi, resolveSpacing as on, getRemainingPlaces as or, transformRegistrationOptionsResponse as ot, productItemKey as p, parseMailingListVisitorSelection as pi, calendarWindowBounds as pn, logger as pr, hasValidPricingOptionSelection as pt, areEntitlementsDisabledForTicketCount as q, getDayOfWeek as qn, backgroundColorStyle as qr, getRegistrationOccurrenceId as qt, buildCartDisplay as r, checkBrowserStripeKey as ri, resolveEventRegistrationScopedEvents as rn, formatTotalCapacity as rr, getTicketTypeAvailabilityLabel as rt, formatInterval as s, isExplicitRectCrop as si, asPartialObject as sn, isEventFull as sr, withOccurrenceTitle as st, defineIslandPropsDecoder as t, normalizeCardRole as ti, buildEventCalendarListingRender as tn, canJoinEventWaitlistOnAnyMode as tr, getImplicitSingleTicketType as tt, buildProductCartItem as u, CANCELLED_SESSION_STATUS as ui, calendarMonthKey as un, groupPublicEventsByRun as ur, getTicketLineQuantity as ut, displayButtonText as v, getBookingLocalDateKey as vi, createHostedBlockApiConfig as vn, getBookingServiceSlidingScale as vr, planRegistrationDetailsCheck as vt, DEFAULT_BOOKING_BUTTON_TEXT as w, formatBookingPriceDisplay as wi, normalizeOptionalId as wn, prepareBookingSubmission as wr, settledRemainingPlaces as wt, toRegistrationEvents as x, resolveBookingTimeZoneId as xi, getEventRuntimeFiltersKey as xn, getShopSuccessCopy as xr, resolveRegistrationAdmission as xt, findBookedEvent as y, getLocalScheduleDate as yi, getBlockApiReadStage as yn, getBookingSuccessCopy as yr, planRegistrationDetailsContinuation as yt, decideEventChoice as z, resolveEventTimeZone as zn, err as zr, resolveRegistrationTarget as zt };
29195
+ export { formatRegistrationSchedule as $, resolveRuntimeEventDestination as $n, resolveTokenOrCssColorValue as $r, placesLeftLabel as $t, getEventSelectionMode as A, publicEventPricingType as Ai, eventDateOptions as An, selectedBookingCollectionOptionKind as Ar, buildBookingPaymentSelectionViewModel as At, getDeclinedPass as B, getLocalDateKey as Bn, err as Br, resolveRouteRequiresPayment as Bt, offeringNounForEvent as C, toBookingTimeZone as Ci, normalizeCsvString as Cn, isBookingServiceSlidingAmountInRange as Cr, resolveRegistrationTicketContinuation as Ct, bookingEntry as D, publicEventPricingCurrency as Di, formatEventPriceAmount as Dn, resolveBookingPaymentStep as Dr, normalizeEventRegistrationMaxTickets as Dt, bookingCardEntry as E, isPublicEventPricingOptionDisplayable as Ei, formatEventPrice as En, resolveAppointmentCheckoutVerificationState as Er, isEventRegistrationAvailable as Et, registrationStepLabel as F, formatEventNextDateFact as Fn, isBookingRequirementConsentFieldId as Fr, OFFLINE_BOOKING_PAYMENT_INSTRUCTIONS as Ft, shouldPromptForLogin as G, buildCalendarViewport as Gn, themeButtonSizeClassName as Gr, formatCentsAsCurrencyInput as Gt, registrationFlowReducer as H, MONTH_NAMES as Hn, okWith as Hr, beginWaitlistInvitation as Ht, registrationStepLabelContext as I, formatEventTimeRange as In, RichTextDocSchema as Ir, findPreSelectedEvent as It, findSelectedTicketType as J, getOrderedDayNames as Jn, backgroundColorStyle as Jr, getSlidingScaleForEvent as Jt, ENTITLEMENT_SINGLE_TICKET_TOOLTIP as K, formatDateKey as Kn, themeButtonVariantClassNames as Kr, getEligibilityFlowFlags as Kt, areEventRegistrationPaymentSelectionsEqual as L, formatTime$1 as Ln, isRecord$4 as Lr, resolveDiscountContext as Lt, registrationPaymentRoute as M, assertNever$6 as Mi, formatDate$1 as Mn, projectSelectedAppointmentConsentIntoForm as Mr, paymentChoiceDetails as Mt, registrationPresentation as N, formatEventCompactDateRail as Nn, resolveSelectedAppointmentConsent as Nr, paymentChoicePrice as Nt, bookingEntryProgress as O, publicEventPricingDisplay as Oi, formatEventPriceDisplay as On, resolveBookingSiteId as Or, resolveEventRegistrationSubmitPlan as Ot, registrationRoute as P, formatEventDateParts as Pn, BOOKING_FORM_DATA_RESERVED_KEYS as Pr, formatPrice as Pt, formatPassCreditUsageLabel as Q, shiftCalendarAnchorDate as Qn, resolveOnColorForThemeToken as Qr, validateFormData as Qt, createInitialRegistrationFlowState as R, groupEventsByDate as Rn, assertNever$1 as Rr, resolveEventRequiresPayment as Rt, toWholeSeriesRegistrationEvents as S, resolveBookingTimeZoneId as Si, normalizeCsvIds as Sn, getShopSuccessCopy as Sr, resolveRegistrationAvailabilityBlocker as St, bookingBarPlacement as T, formatBookingPriceDisplay as Ti, buildEventListWeek as Tn, prepareBookingSubmission as Tr, visitorHoldsOwnPlace as Tt, buildEventRegistrationPaymentOptionsViewModel as U, addDays as Un, reportWorkflowError as Ur, createRegistrationDraftData as Ut, isRegistrationLocked as V, getLocalMinuteOfDay as Vn, ok as Vr, toRegistrationRequestSubject as Vt, decideEventRegistrationPayment as W, addMonths as Wn, reportWorkflowSuccess as Wr, invitationSubmission as Wt, formatDate as X, isSameCalendarDay as Xn, textColorStyle as Xr, parseCurrencyInputToCents as Xt, formatBookingWhen as Y, getWeekCalendarDays as Yn, mergeStyles as Yr, getSlidingScaleSelectionMessage as Yt, formatEventDateTime as Z, isToday as Zn, isCssColorLiteral as Zr, shouldLoadRegistrationOptions as Zt, buildEventRegistrationDisplayFromScopedEvents as _, formatBookingInstant as _i, resolveCalendarReadProfile as _n, formatBookingSubmissionPreparationError as _r, placeCountCeiling as _t, buildProductDetailDisplay as a, eventRegistrationErrors as ai, isSemanticSpacing as an, getEventAvailabilityStatus as ar, occurrenceTitleOverride as at, getRegistrationStartAt as b, getLocalScheduleDate as bi, buildEventRuntimeFilters as bn, getBookingSuccessCopy as br, resolveGuestNextStepCheck as bt, EMPTY_COMMERCE_CART_STATE as c, isExplicitRectCrop as ci, eventListingBlockRuntime as cn, selectEventCapacitySource as cr, canRequestTicketOption as ct, deriveCommerceCheckoutState as d, CANCELLED_SESSION_STATUS as di, calendarPageResponseError as dn, listItemPresentation as dr, getTicketSelectionTotal as dt, relativeLuminance as ei, shownVenue as en, canJoinEventWaitlist as er, formatTime as et, parseStoredCommerceCartState as f, orderedLiveRunSessions as fi, calendarQueryKey as fn, listLookControl as fr, getTicketTypeLineMax as ft, newsletterBlockSubmissionMessage as g, addLocalScheduleDays as gi, planCalendarMonthRanges as gn, formatBookingCentsAsCurrencyInput as gr, fullyBookedLabel as gt, NEWSLETTER_SIGNUPS_PAUSED_MESSAGE as h, resolveBookingSignupOffer as hi, calendarWindowPageSchema as hn, deriveBookingFormViewState as hr, setTicketLineQuantity as ht, buildProductCardDisplay as i, checkBrowserStripeKey as ii, SEMANTIC_SPACING_VALUES as in, getEventAvailability as ir, getVisibleTicketTypes as it, panelShouldOpen as j, formatCurrencyAmount as ji, eventLocalDateKey as jn, toSelectedCollectionOptionKind as jr, buildReviewedBookingPaymentViewModel as jt, bookingPanelHeading as k, publicEventPricingStrategy as ki, eventDateLocale as kn, resolveDefaultBookingServiceId as kr, calculateEventRegistrationPreviewTotal as kt, buildPassCartItem as l, parseAspectRatioValue as li, calendarMonthDate as ln, selectMostOpenCapacitySource as lr, getSingleSelectedPricingOptionId as lt, reduceCommerceCart as m, parseMailingListVisitorSelection as mi, calendarWindowMonths as mn, logger as mr, normalizeTicketSelectionLines as mt, getShopDisplayForItems as n, normalizeCardRole as ni, staticHeaderChromeRuntime as nn, formatEventRemainingPlaces as nr, getPortalSubjectEmail as nt, formatCommercePrice as o, parseEventRegistrationErrorReason as oi, resolveSpacing as on, getRemainingPlaces as or, transformRegistrationOptionsResponse as ot, productItemKey as p, resolveWholeSeriesBookingPhase as pi, calendarWindowBounds as pn, listLookSlot as pr, hasValidPricingOptionSelection as pt, areEntitlementsDisabledForTicketCount as q, getDayOfWeek as qn, boxBackgroundSchema as qr, getRegistrationOccurrenceId as qt, buildCartDisplay as r, clsx as ri, resolveEventRegistrationScopedEvents as rn, formatTotalCapacity as rr, getTicketTypeAvailabilityLabel as rt, formatInterval as s, confirmationPaymentSchema as si, asPartialObject as sn, isEventFull as sr, withOccurrenceTitle as st, defineIslandPropsDecoder as t, hexToRgb as ti, buildEventCalendarListingRender as tn, canJoinEventWaitlistOnAnyMode as tr, getImplicitSingleTicketType as tt, buildProductCartItem as u, resolveMediaTransformForAspect as ui, calendarMonthKey as un, groupPublicEventsByRun as ur, getTicketLineQuantity as ut, displayButtonText as v, formatLocalScheduleDate as vi, createHostedBlockApiConfig as vn, getBookingRedirectStateFromLocation as vr, planRegistrationDetailsCheck as vt, DEFAULT_BOOKING_BUTTON_TEXT as w, toScheduledBookingDateTime as wi, normalizeOptionalId as wn, parseBookingCurrencyInputToCents as wr, settledRemainingPlaces as wt, toRegistrationEvents as x, parseBookingLocalDate as xi, getEventRuntimeFiltersKey as xn, getRegistrationSuccessCopy as xr, resolveRegistrationAdmission as xt, findBookedEvent as y, getBookingLocalDateKey as yi, getBlockApiReadStage as yn, getBookingServiceSlidingScale as yr, planRegistrationDetailsContinuation as yt, decideEventChoice as z, resolveEventTimeZone as zn, clearWorkflowFeedback as zr, resolveRegistrationTarget as zt };