@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
@@ -1099,6 +1099,27 @@ var init_booking_payment_options = __esmMin((() => {
1099
1099
  //#region ../core/src/appointment-booking-terms.ts
1100
1100
  var init_appointment_booking_terms = __esmMin((() => {}));
1101
1101
  //#endregion
1102
+ //#region ../core/src/date-time-formatter.ts
1103
+ function getDateTimeFormatter(locale, timeZone, format) {
1104
+ const key = `${locale}\u0000${timeZone}\u0000${JSON.stringify(Object.entries(format).sort(([left], [right]) => left.localeCompare(right)))}`;
1105
+ const cached = dateTimeFormatterCache.get(key);
1106
+ if (cached !== void 0) return cached;
1107
+ if (typeof locale !== "string" || Intl.DateTimeFormat.supportedLocalesOf([locale]).length === 0) throw new RangeError("An explicit supported locale is required");
1108
+ if (typeof timeZone !== "string" || timeZone.length === 0) throw new RangeError("An explicit time zone is required");
1109
+ const formatter = new Intl.DateTimeFormat(locale, {
1110
+ ...format,
1111
+ timeZone
1112
+ });
1113
+ if (dateTimeFormatterCache.size >= FORMATTER_CACHE_LIMIT) dateTimeFormatterCache.clear();
1114
+ dateTimeFormatterCache.set(key, formatter);
1115
+ return formatter;
1116
+ }
1117
+ var FORMATTER_CACHE_LIMIT, dateTimeFormatterCache;
1118
+ var init_date_time_formatter = __esmMin((() => {
1119
+ FORMATTER_CACHE_LIMIT = 100;
1120
+ dateTimeFormatterCache = /* @__PURE__ */ new Map();
1121
+ }));
1122
+ //#endregion
1102
1123
  //#region ../core/src/booking-time-zone.ts
1103
1124
  function isValidBookingTimeZone(timeZone) {
1104
1125
  const normalized = timeZone.trim();
@@ -1147,19 +1168,7 @@ function formatParseError(error) {
1147
1168
  }
1148
1169
  }
1149
1170
  function formatToPartsLookup(date, locale, timeZone, format) {
1150
- return new Map(getCachedDateTimeFormatter(locale, timeZone, format).formatToParts(date).map((part) => [part.type, part.value]));
1151
- }
1152
- function getCachedDateTimeFormatter(locale, timeZone, format) {
1153
- const key = `${locale}\u0000${timeZone}\u0000${JSON.stringify(Object.entries(format).sort(([left], [right]) => left.localeCompare(right)))}`;
1154
- const cached = dateTimeFormatterCache.get(key);
1155
- if (cached !== void 0) return cached;
1156
- const formatter = new Intl.DateTimeFormat(locale, {
1157
- ...format,
1158
- timeZone
1159
- });
1160
- if (dateTimeFormatterCache.size >= DATE_TIME_FORMATTER_CACHE_LIMIT) dateTimeFormatterCache.clear();
1161
- dateTimeFormatterCache.set(key, formatter);
1162
- return formatter;
1171
+ return new Map(getDateTimeFormatter(locale, timeZone, format).formatToParts(date).map((part) => [part.type, part.value]));
1163
1172
  }
1164
1173
  function getZonedDateTimeParts(date, timeZone) {
1165
1174
  const parts = formatToPartsLookup(date, "en-GB", timeZone, {
@@ -1247,7 +1256,7 @@ function toScheduledBookingDateTime(input) {
1247
1256
  function formatBookingInstant(isoString, options) {
1248
1257
  const date = new Date(isoString);
1249
1258
  if (Number.isNaN(date.getTime())) return isoString;
1250
- return getCachedDateTimeFormatter(options.locale ?? DEFAULT_LOCALE, getSafeTimeZone(options.timeZone), options.format).format(date);
1259
+ return getDateTimeFormatter(options.locale ?? DEFAULT_LOCALE, getSafeTimeZone(options.timeZone), options.format).format(date);
1251
1260
  }
1252
1261
  function formatBookingDate(input, format = {
1253
1262
  weekday: "long",
@@ -1371,8 +1380,9 @@ function localScheduleDateTimeToUtcDate(localDate, localTime, timeZone) {
1371
1380
  }
1372
1381
  return new Date(guess);
1373
1382
  }
1374
- var DEFAULT_LOCALE, FALLBACK_TIMEZONE, START_OF_DAY, LOCAL_DATE_PATTERN, DATE_TIME_FORMATTER_CACHE_LIMIT, dateTimeFormatterCache;
1383
+ var DEFAULT_LOCALE, FALLBACK_TIMEZONE, START_OF_DAY, LOCAL_DATE_PATTERN;
1375
1384
  var init_booking_date_time = __esmMin((() => {
1385
+ init_date_time_formatter();
1376
1386
  init_result();
1377
1387
  init_booking_time_zone();
1378
1388
  DEFAULT_LOCALE = "en-US";
@@ -1383,10 +1393,23 @@ var init_booking_date_time = __esmMin((() => {
1383
1393
  second: 0
1384
1394
  };
1385
1395
  LOCAL_DATE_PATTERN = /^(?<year>\d{4})-(?<month>\d{2})-(?<day>\d{2})$/u;
1386
- DATE_TIME_FORMATTER_CACHE_LIMIT = 100;
1387
- dateTimeFormatterCache = /* @__PURE__ */ new Map();
1388
1396
  }));
1389
1397
  //#endregion
1398
+ //#region ../core/src/date-display.ts
1399
+ /** Site-language policy, shared by customer emails and public event adapters. */
1400
+ function inferSiteDateLocale(siteTimeZone) {
1401
+ if (siteTimeZone === null || siteTimeZone === void 0 || siteTimeZone === "") return "en-US";
1402
+ if (siteTimeZone === "Europe/Dublin") return "en-IE";
1403
+ if (siteTimeZone.startsWith("Europe/")) return "en-GB";
1404
+ if (siteTimeZone.startsWith("Australia/")) return "en-AU";
1405
+ if (siteTimeZone === "Pacific/Auckland" || siteTimeZone === "Pacific/Chatham") return "en-NZ";
1406
+ return "en-US";
1407
+ }
1408
+ var init_date_display = __esmMin((() => {}));
1409
+ //#endregion
1410
+ //#region ../core/src/scheduled-date-time.ts
1411
+ var init_scheduled_date_time = __esmMin((() => {}));
1412
+ //#endregion
1390
1413
  //#region ../core/src/booking-consent.ts
1391
1414
  var init_booking_consent = __esmMin((() => {}));
1392
1415
  //#endregion
@@ -1486,20 +1509,21 @@ var init_rich_text = __esmMin((() => {}));
1486
1509
  var init_footer_composition = __esmMin((() => {}));
1487
1510
  //#endregion
1488
1511
  //#region ../core/src/footer-navigation-layout.ts
1489
- var init_footer_navigation_layout = __esmMin((() => {}));
1512
+ var init_footer_navigation_layout = __esmMin((() => {})), rowSectionGroups;
1490
1513
  var init_footer_arrangement = __esmMin((() => {
1491
- new Map([
1492
- "brand",
1493
- "supporting-text",
1494
- "social-links",
1495
- "navigation",
1496
- "business-address",
1497
- "contact",
1498
- "opening-hours",
1499
- "engagement",
1500
- "legal-navigation",
1501
- "legal"
1502
- ].map((kind, index) => [kind, index]));
1514
+ rowSectionGroups = {
1515
+ brand: "identity",
1516
+ "supporting-text": "identity",
1517
+ "social-links": "identity",
1518
+ navigation: "main-navigation",
1519
+ "business-address": "visit",
1520
+ contact: "visit",
1521
+ "opening-hours": "visit",
1522
+ engagement: "engagement",
1523
+ "legal-navigation": "legal-ending",
1524
+ legal: "legal-ending"
1525
+ };
1526
+ ({ ...rowSectionGroups });
1503
1527
  }));
1504
1528
  //#endregion
1505
1529
  //#region ../core/src/footer-composition-types.ts
@@ -1609,6 +1633,10 @@ function parseGlobalFields(value) {
1609
1633
  preset: "emailName",
1610
1634
  name: value.name
1611
1635
  } : null;
1636
+ case "emailFirstName": return isRequirement(value.firstName) ? {
1637
+ preset: "emailFirstName",
1638
+ firstName: value.firstName
1639
+ } : null;
1612
1640
  case "emailFirstLast": return isRequirement(value.firstName) && isRequirement(value.lastName) ? {
1613
1641
  preset: "emailFirstLast",
1614
1642
  firstName: value.firstName,
@@ -2632,6 +2660,8 @@ var init_src$4 = __esmMin((() => {
2632
2660
  init_booking_payment_options();
2633
2661
  init_appointment_booking_terms();
2634
2662
  init_booking_date_time();
2663
+ init_date_display();
2664
+ init_scheduled_date_time();
2635
2665
  init_booking_consent();
2636
2666
  init_appointment_service_categories();
2637
2667
  init_dated_offering_settlement();
@@ -6652,6 +6682,129 @@ var init_billingEndpointDefinitions = __esmMin((() => {
6652
6682
  tags: ["billing"],
6653
6683
  auth: "user",
6654
6684
  responseKind: "json"
6685
+ },
6686
+ stripeConnectSetupStart: {
6687
+ path: "/sites/{siteId}/billing/connect/setup",
6688
+ method: "POST",
6689
+ tags: ["site-{siteId}", "stripe-connect"],
6690
+ auth: "user",
6691
+ responseKind: "json",
6692
+ errors: [
6693
+ "validation:invalid_input",
6694
+ "auth:forbidden",
6695
+ "resource:conflict",
6696
+ "server:internal_error"
6697
+ ]
6698
+ },
6699
+ stripeConnectSetupDiscard: {
6700
+ path: "/sites/{siteId}/billing/connect/setup",
6701
+ method: "DELETE",
6702
+ tags: ["site-{siteId}", "stripe-connect"],
6703
+ auth: "user",
6704
+ responseKind: "json",
6705
+ errors: [
6706
+ "validation:invalid_input",
6707
+ "auth:forbidden",
6708
+ "resource:conflict",
6709
+ "server:internal_error"
6710
+ ]
6711
+ },
6712
+ stripeConnectSetupSave: {
6713
+ path: "/sites/{siteId}/billing/connect/setup/save",
6714
+ method: "POST",
6715
+ tags: ["site-{siteId}", "stripe-connect"],
6716
+ auth: "user",
6717
+ responseKind: "json",
6718
+ errors: [
6719
+ "validation:invalid_input",
6720
+ "auth:forbidden",
6721
+ "resource:conflict",
6722
+ "server:internal_error"
6723
+ ]
6724
+ },
6725
+ stripeConnectAccountSession: {
6726
+ path: "/sites/{siteId}/billing/connect/session",
6727
+ method: "POST",
6728
+ tags: ["site-{siteId}", "stripe-connect"],
6729
+ auth: "user",
6730
+ responseKind: "json",
6731
+ errors: [
6732
+ "validation:invalid_input",
6733
+ "auth:forbidden",
6734
+ "resource:conflict",
6735
+ "server:internal_error"
6736
+ ]
6737
+ },
6738
+ stripeConnectStart: {
6739
+ path: "/sites/{siteId}/billing/connect/start",
6740
+ method: "POST",
6741
+ tags: ["site-{siteId}", "stripe-connect"],
6742
+ auth: "user",
6743
+ responseKind: "json",
6744
+ errors: [
6745
+ "validation:invalid_input",
6746
+ "auth:forbidden",
6747
+ "resource:conflict",
6748
+ "server:internal_error"
6749
+ ]
6750
+ },
6751
+ stripeConnectStatus: {
6752
+ path: "/sites/{siteId}/billing/connect/status",
6753
+ method: "GET",
6754
+ tags: ["site-{siteId}", "stripe-connect"],
6755
+ auth: "user",
6756
+ responseKind: "json",
6757
+ errors: [
6758
+ "validation:invalid_input",
6759
+ "auth:forbidden",
6760
+ "resource:conflict",
6761
+ "server:internal_error"
6762
+ ]
6763
+ },
6764
+ stripeAutomaticTaxUpdate: {
6765
+ path: "/sites/{siteId}/billing/automatic-tax",
6766
+ method: "POST",
6767
+ tags: [
6768
+ "site-{siteId}",
6769
+ "billing",
6770
+ "stripe-tax"
6771
+ ],
6772
+ auth: "user",
6773
+ responseKind: "json",
6774
+ errors: [
6775
+ "validation:invalid_input",
6776
+ "auth:forbidden",
6777
+ "resource:not_found",
6778
+ "server:unavailable",
6779
+ "server:internal_error"
6780
+ ]
6781
+ },
6782
+ stripeConnectDisconnect: {
6783
+ path: "/sites/{siteId}/billing/connect/disconnect",
6784
+ method: "DELETE",
6785
+ tags: ["site-{siteId}", "stripe-connect"],
6786
+ auth: "user",
6787
+ responseKind: "json",
6788
+ errors: [
6789
+ "validation:invalid_input",
6790
+ "auth:forbidden",
6791
+ "resource:conflict",
6792
+ "server:internal_error"
6793
+ ]
6794
+ },
6795
+ billingConnectReturn: {
6796
+ path: "/billing/connect/return",
6797
+ method: "GET",
6798
+ auth: "user",
6799
+ responseKind: "void",
6800
+ errors: []
6801
+ },
6802
+ billingConnectRefresh: {
6803
+ path: "/billing/connect/refresh",
6804
+ method: "GET",
6805
+ auth: "user",
6806
+ responseKind: "void",
6807
+ errors: []
6655
6808
  }
6656
6809
  });
6657
6810
  }));
@@ -6823,6 +6976,14 @@ var BOOKING_PEOPLE_ENDPOINT_DEFINITIONS;
6823
6976
  var init_bookingPeopleEndpointDefinitions = __esmMin((() => {
6824
6977
  init_defineEndpointDefinitions();
6825
6978
  BOOKING_PEOPLE_ENDPOINT_DEFINITIONS = defineEndpointDefinitions({
6979
+ getBookingPerson: {
6980
+ path: "/sites/{siteId}/bookings/people/{personId}",
6981
+ method: "GET",
6982
+ tags: ["site-{siteId}", "customers-{siteId}"],
6983
+ auth: "user",
6984
+ responseKind: "json",
6985
+ errors: ["resource:not_found", "server:internal_error"]
6986
+ },
6826
6987
  listPeople: {
6827
6988
  path: "/sites/{siteId}/bookings/people",
6828
6989
  method: "GET",
@@ -7247,10 +7408,7 @@ var init_contracts$1 = __esmMin((() => {
7247
7408
  cartLinkPayloadSchema
7248
7409
  ];
7249
7410
  z.discriminatedUnion("kind", navigationLinkInputSchemaOptions);
7250
- }));
7251
- //#endregion
7252
- //#region ../theme-core/src/footer/mode.ts
7253
- var footerModeSchema;
7411
+ })), footerModeSchema;
7254
7412
  var init_mode = __esmMin((() => {
7255
7413
  footerModeSchema = z.enum([
7256
7414
  "default",
@@ -7258,6 +7416,19 @@ var init_mode = __esmMin((() => {
7258
7416
  "default+blocks",
7259
7417
  "none"
7260
7418
  ]);
7419
+ z.object({
7420
+ variant: z.enum([
7421
+ "simple",
7422
+ "columns",
7423
+ "split",
7424
+ "centred"
7425
+ ]),
7426
+ showLogoText: z.boolean().optional(),
7427
+ logo: z.object({
7428
+ showLogo: z.boolean().optional(),
7429
+ showLogoText: z.boolean().optional()
7430
+ }).optional()
7431
+ });
7261
7432
  }));
7262
7433
  //#endregion
7263
7434
  //#region ../blocks/src/pageRenderAdmission.ts
@@ -11804,6 +11975,32 @@ var init_schema$3 = __esmMin((() => {
11804
11975
  });
11805
11976
  }));
11806
11977
  //#endregion
11978
+ //#region ../theme-core/src/buttons/typography.ts
11979
+ var textTransformSchema, fontWeightSchema, buttonTypographySchema, letterSpacingSchema;
11980
+ var init_typography$2 = __esmMin((() => {
11981
+ textTransformSchema = z.enum([
11982
+ "none",
11983
+ "uppercase",
11984
+ "lowercase",
11985
+ "capitalize"
11986
+ ]);
11987
+ fontWeightSchema = z.union([
11988
+ z.literal(400),
11989
+ z.literal(500),
11990
+ z.literal(600),
11991
+ z.literal(700),
11992
+ z.literal(800)
11993
+ ]);
11994
+ buttonTypographySchema = z.enum(["body", "heading"]);
11995
+ letterSpacingSchema = z.enum([
11996
+ "tight",
11997
+ "normal",
11998
+ "slight",
11999
+ "loose",
12000
+ "wide"
12001
+ ]);
12002
+ }));
12003
+ //#endregion
11807
12004
  //#region ../theme-core/src/buttons/types.ts
11808
12005
  function parseOpaqueButtonColourToken(value) {
11809
12006
  const token = parseThemeColorToken(value);
@@ -11817,8 +12014,9 @@ function unsafeAsOpaqueButtonColourToken(value) {
11817
12014
  function createStandardButtonSurfacePolicy() {
11818
12015
  return Object.fromEntries(VARIANT_ROLES.map((role) => [role, [...STANDARD_BUTTON_SURFACE_POLICY[role]]]));
11819
12016
  }
11820
- var VARIANT_ROLES, buttonVariantIdSchema, opaqueButtonColourTokenSchema, contextualButtonHoverSchema, buttonShadeAmountSchema, buttonShadowIntensitySchema, buttonPressOffsetSchema, buttonEffectApplicationSchema, cornerStyleSchema, shadowSizeSchema, textTransformSchema, fontWeightSchema, buttonTypographySchema, letterSpacingSchema, hoverTransformSchema, buttonPaddingPresetSchema, gradientStyleSchema, gradientSharpnessSchema, prioritySchema, variantRoleSchema, buttonSurfaceFallbackSchema, standardButtonSurfacePolicy, STANDARD_BUTTON_SURFACE_POLICY, buttonSurfacePolicyShape, buttonSurfacePolicySchema, buttonSizeNameSchema, PADDING_TOKEN_PATTERN, paddingShorthandSchema, buttonSizeConfigSchema, buttonSizesSchema, buttonGlobalSettingsBaseSchema, buttonGlobalSettingsSchema, gradientDirectionSchema$1, buttonColourTreatmentSchema, buttonBackgroundSchema, buttonBorderSchema, buttonVariantAffordanceSchema, variantShadowSchema, buttonVisualAppearanceSchema, buttonVisualStatesSchema, variantEffectsSchema, variantSizeOverridesSchema, buttonVariantSchema, buttonSystemSchema;
12017
+ var VARIANT_ROLES, buttonVariantIdSchema, opaqueButtonColourTokenSchema, contextualButtonHoverSchema, buttonShadeAmountSchema, buttonShadowIntensitySchema, buttonPressOffsetSchema, buttonEffectApplicationSchema, cornerStyleSchema, shadowSizeSchema, hoverTransformSchema, buttonPaddingPresetSchema, gradientStyleSchema, gradientSharpnessSchema, prioritySchema, variantRoleSchema, buttonSurfaceFallbackSchema, standardButtonSurfacePolicy, STANDARD_BUTTON_SURFACE_POLICY, buttonSurfacePolicyShape, buttonSurfacePolicySchema, buttonSizeNameSchema, PADDING_TOKEN_PATTERN, paddingShorthandSchema, buttonSizeConfigSchema, buttonSizesSchema, buttonGlobalSettingsBaseSchema, buttonGlobalSettingsSchema, gradientDirectionSchema$1, buttonColourTreatmentSchema, buttonBackgroundSchema, buttonBorderSchema, buttonVariantAffordanceSchema, variantShadowSchema, buttonVisualAppearanceSchema, buttonVisualStatesSchema, variantEffectsSchema, variantSizeOverridesSchema, buttonVariantSchema, buttonSystemSchema;
11821
12018
  var init_types$10 = __esmMin((() => {
12019
+ init_typography$2();
11822
12020
  init_themeColorTokens();
11823
12021
  init_colorTokenParts();
11824
12022
  VARIANT_ROLES = [
@@ -11907,6 +12105,7 @@ var init_types$10 = __esmMin((() => {
11907
12105
  z.strictObject({
11908
12106
  effectId: z.literal("lift"),
11909
12107
  options: z.strictObject({ amount: z.enum([
12108
+ "0.125",
11910
12109
  "0.25",
11911
12110
  "0.5",
11912
12111
  "1"
@@ -11953,24 +12152,6 @@ var init_types$10 = __esmMin((() => {
11953
12152
  "medium",
11954
12153
  "high"
11955
12154
  ]);
11956
- textTransformSchema = z.enum([
11957
- "none",
11958
- "uppercase",
11959
- "lowercase",
11960
- "capitalize"
11961
- ]);
11962
- fontWeightSchema = z.union([
11963
- z.literal(500),
11964
- z.literal(600),
11965
- z.literal(700),
11966
- z.literal(800)
11967
- ]);
11968
- buttonTypographySchema = z.enum(["body", "heading"]);
11969
- letterSpacingSchema = z.enum([
11970
- "tight",
11971
- "normal",
11972
- "loose"
11973
- ]);
11974
12155
  hoverTransformSchema = z.enum([
11975
12156
  "none",
11976
12157
  "lift",
@@ -12032,7 +12213,8 @@ var init_types$10 = __esmMin((() => {
12032
12213
  }, { message: "Padding must be two space-separated CSS length tokens (e.g. \"0.5rem 1rem\"). Use `0` for zero." });
12033
12214
  buttonSizeConfigSchema = z.object({
12034
12215
  padding: paddingShorthandSchema,
12035
- fontSize: z.string().optional()
12216
+ fontSize: z.string().optional(),
12217
+ borderRadius: z.string().optional()
12036
12218
  });
12037
12219
  buttonSizesSchema = z.object({
12038
12220
  sm: buttonSizeConfigSchema,
@@ -12148,12 +12330,20 @@ var init_types$10 = __esmMin((() => {
12148
12330
  textTransform: textTransformSchema
12149
12331
  }),
12150
12332
  effects: z.array(buttonEffectApplicationSchema),
12333
+ transform: z.literal("none").optional(),
12151
12334
  contextualHover: contextualButtonHoverSchema.optional()
12152
12335
  });
12153
12336
  buttonVisualStatesSchema = z.strictObject({
12154
12337
  base: buttonVisualAppearanceSchema.extend({ shadow: variantShadowSchema }),
12155
12338
  hover: buttonVisualAppearanceSchema.extend({ shadow: variantShadowSchema }),
12156
- focus: buttonVisualAppearanceSchema.extend({ shadow: z.literal("focus-indicator") }),
12339
+ focus: buttonVisualAppearanceSchema.extend({
12340
+ shadow: z.literal("focus-indicator"),
12341
+ indicator: z.strictObject({
12342
+ kind: z.literal("surface-ink"),
12343
+ width: z.union([z.literal(2), z.literal(3)]),
12344
+ offset: z.union([z.literal(3), z.literal(4)])
12345
+ }).optional()
12346
+ }),
12157
12347
  active: buttonVisualAppearanceSchema.extend({ shadow: variantShadowSchema }),
12158
12348
  disabled: buttonVisualAppearanceSchema.extend({ shadow: variantShadowSchema })
12159
12349
  });
@@ -12590,8 +12780,13 @@ function validateButtonTextContrast(input) {
12590
12780
  }
12591
12781
  };
12592
12782
  }
12783
+ /** A text-token slab inverts the palette's text/background pair, including text shades. */
12784
+ function solidForegroundToken(backgroundToken) {
12785
+ return /^text(?:-\d+)?$/.test(backgroundToken) ? "background" : onColorTokenName(backgroundToken);
12786
+ }
12593
12787
  var BUTTON_VISUAL_STATES, BUTTON_CONTRAST_POLICY;
12594
12788
  var init_buttonColourContract = __esmMin((() => {
12789
+ init_onColor();
12595
12790
  init_contrast();
12596
12791
  BUTTON_VISUAL_STATES = [
12597
12792
  "base",
@@ -12705,7 +12900,7 @@ function candidate(family, shade, currentShade, direction, seedHex, palette) {
12705
12900
  }
12706
12901
  function hasSafeTextContrast(token, palette) {
12707
12902
  const background = palette[token];
12708
- const foreground = palette[onColorTokenName(token)];
12903
+ const foreground = palette[solidForegroundToken(token)];
12709
12904
  return typeof background === "string" && typeof foreground === "string" && contrastRatio(background, foreground) >= BUTTON_CONTRAST_POLICY.textMinimumRatio;
12710
12905
  }
12711
12906
  function isSafeCandidate(token, palette, surface) {
@@ -12717,7 +12912,6 @@ function escapeRegExp$1(value) {
12717
12912
  }
12718
12913
  var init_contextualHover = __esmMin((() => {
12719
12914
  init_contrast();
12720
- init_onColor();
12721
12915
  init_buttonColourContract();
12722
12916
  init_types$10();
12723
12917
  }));
@@ -12809,6 +13003,13 @@ function compileDeclaredVisualStates(input, states) {
12809
13003
  const colours = collectStateColours(mapVisualStates((state) => compileDeclaredVisualState(input, states, state, state === "hover" ? hover.treatment : states[state].background)));
12810
13004
  return colours.ok ? {
12811
13005
  ...colours,
13006
+ focusIndicator: states.focus.indicator ? {
13007
+ kind: "surface-role",
13008
+ colorCss: input.surface?.foregroundCss ?? surfaceForegroundValue("text"),
13009
+ width: states.focus.indicator.width,
13010
+ offset: states.focus.indicator.offset,
13011
+ minimumSurfaceContrast: BUTTON_CONTRAST_POLICY.nonTextMinimumRatio
13012
+ } : colours.focusIndicator,
12812
13013
  contextualHoverRepair: hover.repair
12813
13014
  } : colours;
12814
13015
  }
@@ -12946,7 +13147,7 @@ function resolveFocusIndicator(colour) {
12946
13147
  function resolveSolid(input, backgroundToken, edge) {
12947
13148
  const backgroundHex = paletteHex(input, backgroundToken);
12948
13149
  if (!backgroundHex.ok) return backgroundHex;
12949
- const foregroundToken = unsafeAsOpaqueButtonColourToken(onColorTokenName(backgroundToken));
13150
+ const foregroundToken = unsafeAsOpaqueButtonColourToken(solidForegroundToken(backgroundToken));
12950
13151
  const foregroundHex = input.palette[foregroundToken];
12951
13152
  if (typeof foregroundHex !== "string") return {
12952
13153
  ok: false,
@@ -13074,7 +13275,6 @@ function interpolateHex(startHex, endHex, position) {
13074
13275
  var init_resolveButtonColourStates = __esmMin((() => {
13075
13276
  init_buttonColourTransitions();
13076
13277
  init_colorConversion();
13077
- init_onColor();
13078
13278
  init_foregroundContract();
13079
13279
  init_types$10();
13080
13280
  init_constants$1();
@@ -14379,6 +14579,292 @@ var init_defineStaticButtonStyleRecipe = __esmMin((() => {
14379
14579
  emptyParametersSchema$1 = z.object({}).strict();
14380
14580
  }));
14381
14581
  //#endregion
14582
+ //#region ../theme-core/src/buttons/styles/recipes/lanternRecipes.ts
14583
+ /** Each role supplies complete states, including a flat surface-ink focus ring. */
14584
+ function states(base, hover, offset = 4, width = 2) {
14585
+ return {
14586
+ base,
14587
+ hover,
14588
+ focus: {
14589
+ ...base,
14590
+ shadow: "focus-indicator",
14591
+ indicator: {
14592
+ kind: "surface-ink",
14593
+ width,
14594
+ offset
14595
+ }
14596
+ },
14597
+ active: {
14598
+ ...base,
14599
+ transform: "none"
14600
+ },
14601
+ disabled: {
14602
+ ...base,
14603
+ effects: []
14604
+ }
14605
+ };
14606
+ }
14607
+ var flatShadow, lift$1, tags, gilt, giltPrimary, giltPrimaryHover, giltSecondary, giltSecondaryHover, giltPrimaryStates, giltSecondaryStates, giltSlabRecipe, hairline, hairlinePrimary, hairlineOutline, hairlineSecondary, hairlineFilled, hairlinePrimaryStates, hairlineSecondaryStates, hairlineTabRecipe, marqueeAccent, marqueePrimary, marqueeSecondary, marqueePrimaryStates, marqueeSecondaryStates, marqueeRecipe;
14608
+ var init_lanternRecipes = __esmMin((() => {
14609
+ init_types$10();
14610
+ init_defineStaticButtonStyleRecipe();
14611
+ flatShadow = {
14612
+ elevation: "none",
14613
+ softness: null,
14614
+ position: "bottom"
14615
+ };
14616
+ lift$1 = {
14617
+ effectId: "lift",
14618
+ options: { amount: "0.125" }
14619
+ };
14620
+ tags = {
14621
+ tone: "classic",
14622
+ energy: "calm",
14623
+ motion: "subtle",
14624
+ era: "editorial"
14625
+ };
14626
+ gilt = {
14627
+ text: "treatment",
14628
+ border: "none",
14629
+ borderRadius: "rounded-10px",
14630
+ shadow: flatShadow,
14631
+ sizes: {
14632
+ sm: {
14633
+ padding: "10px 20px",
14634
+ fontSize: "text-base",
14635
+ borderRadius: "rounded-lg"
14636
+ },
14637
+ md: {
14638
+ padding: "18px 36px",
14639
+ fontSize: "text-19px"
14640
+ },
14641
+ lg: {
14642
+ padding: "18px 36px",
14643
+ fontSize: "text-19px"
14644
+ },
14645
+ xl: {
14646
+ padding: "18px 36px",
14647
+ fontSize: "text-19px"
14648
+ }
14649
+ },
14650
+ typography: {
14651
+ fontWeight: 400,
14652
+ typography: "heading",
14653
+ fontSize: "text-19px",
14654
+ letterSpacing: "slight",
14655
+ italic: false,
14656
+ textTransform: "none"
14657
+ },
14658
+ effects: []
14659
+ };
14660
+ giltPrimary = {
14661
+ ...gilt,
14662
+ background: {
14663
+ type: "gradient",
14664
+ stops: ["accent", "primary"],
14665
+ direction: "to-br",
14666
+ foregroundToken: "onAccent"
14667
+ }
14668
+ };
14669
+ giltPrimaryHover = {
14670
+ ...giltPrimary,
14671
+ background: {
14672
+ ...giltPrimary.background,
14673
+ stops: ["accent-400", "primary-400"],
14674
+ foregroundToken: "secondary-950"
14675
+ },
14676
+ effects: [lift$1]
14677
+ };
14678
+ giltSecondary = {
14679
+ ...gilt,
14680
+ background: {
14681
+ type: "solid",
14682
+ colorToken: "text"
14683
+ }
14684
+ };
14685
+ giltSecondaryHover = {
14686
+ ...giltSecondary,
14687
+ effects: [lift$1],
14688
+ contextualHover: {
14689
+ kind: "shade-shift",
14690
+ seedToken: unsafeAsOpaqueButtonColourToken("text"),
14691
+ fallbackDirection: "lighter"
14692
+ }
14693
+ };
14694
+ giltPrimaryStates = states(giltPrimary, giltPrimaryHover);
14695
+ giltSecondaryStates = states(giltSecondary, giltSecondaryHover);
14696
+ giltSlabRecipe = defineStaticButtonStyleRecipe({
14697
+ id: "gilt-slab",
14698
+ accessibilityLabel: "Gilt slab",
14699
+ tags,
14700
+ system: { roles: {
14701
+ primary: { states: giltPrimaryStates },
14702
+ secondary: { states: giltSecondaryStates },
14703
+ outline: { states: giltSecondaryStates },
14704
+ ghost: { states: giltSecondaryStates },
14705
+ accent: { states: giltPrimaryStates }
14706
+ } }
14707
+ });
14708
+ hairline = {
14709
+ text: "treatment",
14710
+ borderRadius: "rounded-3px",
14711
+ shadow: flatShadow,
14712
+ sizes: {
14713
+ sm: {
14714
+ padding: "9px 16px",
14715
+ fontSize: "text-xs"
14716
+ },
14717
+ md: {
14718
+ padding: "15px 28px",
14719
+ fontSize: "text-13px"
14720
+ },
14721
+ lg: {
14722
+ padding: "15px 28px",
14723
+ fontSize: "text-13px"
14724
+ },
14725
+ xl: {
14726
+ padding: "15px 28px",
14727
+ fontSize: "text-13px"
14728
+ }
14729
+ },
14730
+ typography: {
14731
+ fontWeight: 700,
14732
+ typography: "body",
14733
+ fontSize: "text-13px",
14734
+ letterSpacing: "wide",
14735
+ italic: false,
14736
+ textTransform: "uppercase"
14737
+ },
14738
+ effects: []
14739
+ };
14740
+ hairlinePrimary = {
14741
+ ...hairline,
14742
+ background: {
14743
+ type: "solid",
14744
+ colorToken: "primary"
14745
+ },
14746
+ border: {
14747
+ widthClass: "border",
14748
+ boundaryInk: unsafeAsOpaqueButtonColourToken("primary")
14749
+ }
14750
+ };
14751
+ hairlineOutline = {
14752
+ ...hairline,
14753
+ background: {
14754
+ type: "surface",
14755
+ role: "link"
14756
+ },
14757
+ border: {
14758
+ widthClass: "border",
14759
+ boundaryInk: unsafeAsOpaqueButtonColourToken("primary")
14760
+ }
14761
+ };
14762
+ hairlineSecondary = {
14763
+ ...hairlineOutline,
14764
+ border: {
14765
+ widthClass: "border",
14766
+ boundaryInk: unsafeAsOpaqueButtonColourToken("accent")
14767
+ }
14768
+ };
14769
+ hairlineFilled = {
14770
+ ...hairlineSecondary,
14771
+ background: {
14772
+ type: "solid",
14773
+ colorToken: "accent"
14774
+ }
14775
+ };
14776
+ hairlinePrimaryStates = states(hairlinePrimary, hairlineOutline, 3);
14777
+ hairlineSecondaryStates = states(hairlineSecondary, hairlineFilled, 3);
14778
+ hairlineTabRecipe = defineStaticButtonStyleRecipe({
14779
+ id: "hairline-tab",
14780
+ accessibilityLabel: "Hairline tab",
14781
+ tags,
14782
+ system: { roles: {
14783
+ primary: { states: hairlinePrimaryStates },
14784
+ secondary: { states: hairlineSecondaryStates },
14785
+ outline: { states: hairlineSecondaryStates },
14786
+ ghost: { states: hairlineSecondaryStates },
14787
+ accent: { states: states(hairlineFilled, hairlineSecondary, 3) }
14788
+ } }
14789
+ });
14790
+ marqueeAccent = {
14791
+ text: "treatment",
14792
+ borderRadius: "rounded-none",
14793
+ shadow: flatShadow,
14794
+ sizes: {
14795
+ sm: {
14796
+ padding: "8px 17px",
14797
+ fontSize: "text-15px"
14798
+ },
14799
+ md: {
14800
+ padding: "14px 25px",
14801
+ fontSize: "text-17px"
14802
+ },
14803
+ lg: {
14804
+ padding: "14px 25px",
14805
+ fontSize: "text-17px"
14806
+ },
14807
+ xl: {
14808
+ padding: "14px 25px",
14809
+ fontSize: "text-17px"
14810
+ }
14811
+ },
14812
+ typography: {
14813
+ fontWeight: 800,
14814
+ typography: "body",
14815
+ fontSize: "text-17px",
14816
+ letterSpacing: "loose",
14817
+ italic: false,
14818
+ textTransform: "uppercase"
14819
+ },
14820
+ effects: [],
14821
+ background: {
14822
+ type: "solid",
14823
+ colorToken: "accent"
14824
+ },
14825
+ border: {
14826
+ widthClass: "border-2",
14827
+ boundaryInk: unsafeAsOpaqueButtonColourToken("accent")
14828
+ }
14829
+ };
14830
+ marqueePrimary = {
14831
+ ...marqueeAccent,
14832
+ background: {
14833
+ type: "solid",
14834
+ colorToken: "primary"
14835
+ },
14836
+ border: {
14837
+ widthClass: "border-2",
14838
+ boundaryInk: unsafeAsOpaqueButtonColourToken("primary")
14839
+ }
14840
+ };
14841
+ marqueeSecondary = {
14842
+ ...marqueeAccent,
14843
+ background: {
14844
+ type: "solid",
14845
+ colorToken: "text"
14846
+ },
14847
+ border: {
14848
+ widthClass: "border-2",
14849
+ boundaryInk: unsafeAsOpaqueButtonColourToken("text")
14850
+ }
14851
+ };
14852
+ marqueePrimaryStates = states(marqueeAccent, marqueePrimary, 4, 3);
14853
+ marqueeSecondaryStates = states(marqueeSecondary, marqueeAccent, 4, 3);
14854
+ marqueeRecipe = defineStaticButtonStyleRecipe({
14855
+ id: "marquee",
14856
+ accessibilityLabel: "Marquee",
14857
+ tags,
14858
+ system: { roles: {
14859
+ primary: { states: marqueePrimaryStates },
14860
+ secondary: { states: marqueeSecondaryStates },
14861
+ outline: { states: marqueeSecondaryStates },
14862
+ ghost: { states: marqueeSecondaryStates },
14863
+ accent: { states: marqueePrimaryStates }
14864
+ } }
14865
+ });
14866
+ }));
14867
+ //#endregion
14382
14868
  //#region ../theme-core/src/buttons/styles/recipes/fulcrumRecipe.ts
14383
14869
  var fulcrumSizes, fulcrumTypography$1, fulcrumVisual, fulcrumVisual1, fulcrumVisual2, fulcrumStates0State0, fulcrumStates0, fulcrumState0, fulcrumState1, fulcrumRecipe;
14384
14870
  var init_fulcrumRecipe = __esmMin((() => {
@@ -15139,7 +15625,10 @@ var init_selection = __esmMin((() => {
15139
15625
  "offset-block",
15140
15626
  "ringed-pill",
15141
15627
  "square-outline",
15142
- "fulcrum"
15628
+ "fulcrum",
15629
+ "gilt-slab",
15630
+ "hairline-tab",
15631
+ "marquee"
15143
15632
  ];
15144
15633
  quietArrowParametersSchema = z.object({ secondaryTreatment: z.enum(["outlined", "solid-accent"]) }).strict();
15145
15634
  FLAT_INK_HOVER_TREATMENT_VALUES = [
@@ -15171,7 +15660,10 @@ var init_selection = __esmMin((() => {
15171
15660
  selectionBranch("offset-block", emptyParametersSchema),
15172
15661
  selectionBranch("ringed-pill", emptyParametersSchema),
15173
15662
  selectionBranch("square-outline", emptyParametersSchema),
15174
- selectionBranch("fulcrum", emptyParametersSchema)
15663
+ selectionBranch("fulcrum", emptyParametersSchema),
15664
+ selectionBranch("gilt-slab", emptyParametersSchema),
15665
+ selectionBranch("hairline-tab", emptyParametersSchema),
15666
+ selectionBranch("marquee", emptyParametersSchema)
15175
15667
  ]);
15176
15668
  buttonStyleSelectionSchema = buttonStyleSelectionWireSchema;
15177
15669
  }));
@@ -18761,6 +19253,9 @@ function resolveButtonStyleSelection(selection) {
18761
19253
  case "editorial-link": return resolveButtonStyleRecipe(editorialLinkRecipe, selection.parameters);
18762
19254
  case "pebble": return resolveButtonStyleRecipe(pebbleRecipe, selection.parameters);
18763
19255
  case "ink-stamp": return resolveButtonStyleRecipe(inkStampRecipe, selection.parameters);
19256
+ case "gilt-slab": return resolveButtonStyleRecipe(giltSlabRecipe, selection.parameters);
19257
+ case "hairline-tab": return resolveButtonStyleRecipe(hairlineTabRecipe, selection.parameters);
19258
+ case "marquee": return resolveButtonStyleRecipe(marqueeRecipe, selection.parameters);
18764
19259
  case "fulcrum": return resolveButtonStyleRecipe(fulcrumRecipe, selection.parameters);
18765
19260
  case "flat-ink": return resolveButtonStyleRecipe(flatInkRecipe, selection.parameters);
18766
19261
  case "brushed-wash": return resolveButtonStyleRecipe(brushedWashRecipe, selection.parameters);
@@ -18781,6 +19276,7 @@ function defaultButtonStyleSelectionFor(styleId) {
18781
19276
  }
18782
19277
  var buttonStyleRecipes, recipesById;
18783
19278
  var init_registry$7 = __esmMin((() => {
19279
+ init_lanternRecipes();
18784
19280
  init_fulcrumRecipe();
18785
19281
  init_squareOutlineRecipe();
18786
19282
  init_ringedPillRecipe();
@@ -18806,7 +19302,10 @@ var init_registry$7 = __esmMin((() => {
18806
19302
  offsetBlockRecipe,
18807
19303
  ringedPillRecipe,
18808
19304
  squareOutlineRecipe,
18809
- fulcrumRecipe
19305
+ fulcrumRecipe,
19306
+ giltSlabRecipe,
19307
+ hairlineTabRecipe,
19308
+ marqueeRecipe
18810
19309
  ];
18811
19310
  recipesById = new Map(buttonStyleRecipes.map((recipe) => [recipe.id, recipe]));
18812
19311
  if (buttonStyleRecipes.map((recipe) => recipe.id).length !== BUTTON_STYLE_IDS.length || BUTTON_STYLE_IDS.some((id) => !recipesById.has(id))) throw new Error("Button style registry and ButtonStyleId catalog are out of sync");
@@ -20609,11 +21108,10 @@ var init_boxBackgroundSchema = __esmMin((() => {
20609
21108
  assetMediaSchema.extend({ type: z.literal("video") })
20610
21109
  ]).nullable().optional() })
20611
21110
  ]);
20612
- })), axesSchema, semanticSpacingSchema, boxRoundedSchema, noHeadingDecorationSchema, visibleHeadingDecorationSchema, headingDecorationSchema, headingDecorationOverrideSchema, accordionIconTreatmentSchema, sectionStylesOverrideSchema, containerStylesOverrideSchema, cardBorderOverrideSchema, cardStylesOverrideSchema, blockStyleOverridesSchema, blockThemeOverrideSchema, spaceSchema, corners, shadow, border, motion, inputStyle, headerPositioningValues, headerPositioning, headerNavStyle, navFontWeight, headerMaxWidth, headerBorderSchema, logoStyleSchema, headerLogoTextSchema, dropdownStyleSchema, headerCtaGapSchema, headerCtaTreatmentSchema, navContainerSchema, headerBackgroundSchema, headerSchema, footerVariant, footerMaxWidth, footerNavLayoutMode, footerNavLayoutAlign, footerSpacing, footerLogoPlacement, footerLogoSize, footerLogoMaxHeight, footerBottomTextLinkStyleSchema, footerBottomBarSchema, footerNavLayoutSchema, footerLogoSchema, footerSchema, containerPaddingPresetSchema, layoutSchema, heroTypographySizeSchema, heroTypographyLineHeightSchema, heroResponsiveTypographySchema, heroTypographySchema, heroSchema, bodyTextIntroTypographySizeSchema, bodyTextSchema, testimonialQuoteTreatmentSchema, themeSchema;
21111
+ })), axesSchema, semanticSpacingSchema, boxRoundedSchema, noHeadingDecorationSchema, visibleHeadingDecorationSchema, headingDecorationSchema, headingDecorationOverrideSchema, accordionIconTreatmentSchema, sectionStylesOverrideSchema, containerStylesOverrideSchema, cardBorderOverrideSchema, cardStylesOverrideSchema, blockStyleOverridesSchema, blockThemeOverrideSchema, spaceSchema, corners, shadow, border, motion, inputStyle, headerPositioningValues, headerPositioning, headerNavStyle, navFontWeight, headerMaxWidth, headerBorderSchema, logoStyleSchema, headerLogoTextSchema, dropdownStyleSchema, headerCtaGapSchema, headerCtaTreatmentSchema, navContainerSchema, headerBackgroundSchema, headerSchema, footerVariant, footerMaxWidth, footerNavLayoutMode, footerSpacing, footerLogoSize, footerLogoMaxHeight, footerBottomTextLinkStyleSchema, footerBottomBarSchema, footerNavLayoutSchema, footerLogoSchema, footerSchema, containerPaddingPresetSchema, layoutSchema, heroTypographySizeSchema, heroTypographyLineHeightSchema, heroResponsiveTypographySchema, heroTypographySchema, heroSchema, bodyTextIntroTypographySizeSchema, bodyTextSchema, testimonialQuoteTreatmentSchema, themeSchema;
20613
21112
  var init_schema$2 = __esmMin((() => {
20614
21113
  init_schema$4();
20615
21114
  init_skinTokens();
20616
- init_mode();
20617
21115
  init_media$3();
20618
21116
  init_schema$3();
20619
21117
  init_buttons();
@@ -20970,20 +21468,15 @@ var init_schema$2 = __esmMin((() => {
20970
21468
  footerVariant = z.enum([
20971
21469
  "simple",
20972
21470
  "columns",
20973
- "split"
20974
- ]);
21471
+ "split",
21472
+ "centred"
21473
+ ]).transform((value) => value === "columns" ? "simple" : value);
20975
21474
  footerMaxWidth = z.enum(["container", "full"]);
20976
21475
  footerNavLayoutMode = z.enum([
20977
21476
  "stack",
20978
21477
  "inline",
20979
21478
  "inline-wrap"
20980
21479
  ]);
20981
- footerNavLayoutAlign = z.enum([
20982
- "start",
20983
- "center",
20984
- "end",
20985
- "space-between"
20986
- ]);
20987
21480
  footerSpacing = z.enum([
20988
21481
  "none",
20989
21482
  "tight",
@@ -20992,12 +21485,6 @@ var init_schema$2 = __esmMin((() => {
20992
21485
  "relaxed",
20993
21486
  "spacious"
20994
21487
  ]);
20995
- footerLogoPlacement = z.enum([
20996
- "left",
20997
- "right",
20998
- "above",
20999
- "below"
21000
- ]);
21001
21488
  footerLogoSize = z.enum([
21002
21489
  "sm",
21003
21490
  "md",
@@ -21038,17 +21525,8 @@ var init_schema$2 = __esmMin((() => {
21038
21525
  ]).optional()
21039
21526
  }).optional()
21040
21527
  });
21041
- footerNavLayoutSchema = z.object({
21042
- layout: footerNavLayoutMode.optional(),
21043
- align: footerNavLayoutAlign.optional(),
21044
- gapX: footerSpacing.optional(),
21045
- gapY: footerSpacing.optional(),
21046
- columns: z.number().int().min(1).max(6).optional()
21047
- });
21528
+ footerNavLayoutSchema = z.object({ layout: footerNavLayoutMode.optional() });
21048
21529
  footerLogoSchema = z.object({
21049
- showLogo: z.boolean().default(true),
21050
- showLogoText: z.boolean().optional(),
21051
- placement: footerLogoPlacement.optional(),
21052
21530
  size: footerLogoSize.optional(),
21053
21531
  maxHeight: footerLogoMaxHeight.optional(),
21054
21532
  align: z.enum([
@@ -21058,15 +21536,8 @@ var init_schema$2 = __esmMin((() => {
21058
21536
  ]).optional()
21059
21537
  });
21060
21538
  footerSchema = z.object({
21061
- /**
21062
- * SDK-only footer rendering mode.
21063
- *
21064
- * Historical persisted field; SDK rendering mode now lives in layout.footerMode.
21065
- */
21066
- mode: footerModeSchema.optional(),
21067
21539
  variant: footerVariant,
21068
21540
  maxWidth: footerMaxWidth,
21069
- showLogoText: z.boolean().optional(),
21070
21541
  background: headerBackgroundSchema.default({
21071
21542
  type: "color",
21072
21543
  color: "surface"
@@ -21243,7 +21714,7 @@ function defineArrangementLook(id, block, name, arrangement, knobs, input = {})
21243
21714
  id: asAppearancePresetId(id),
21244
21715
  blockKinds: [`block.${block}`],
21245
21716
  label: name,
21246
- target: block === "event-calendar" || block === "event-details" ? "events" : block === "hero" ? "hero" : block === "testimonials" ? "testimonials" : "feature-cards",
21717
+ target: arrangementLookTargets[block],
21247
21718
  structure: {
21248
21719
  kind: "arrangement",
21249
21720
  byMode: { [mode ?? "default"]: arrangement },
@@ -21275,7 +21746,7 @@ function defineCardListLook(id, name, arrangement, requires, knobs, input = {})
21275
21746
  }
21276
21747
  };
21277
21748
  }
21278
- var cardListItemParts, cardListBlockParts, cardListFamilyBlocks, cardListKnobBlocks, lookKnobBlocks;
21749
+ var cardListItemParts, cardListBlockParts, cardListFamilyBlocks, cardListKnobBlocks, lookKnobBlocks, arrangementLookTargets;
21279
21750
  var init_appearancePresetTypes = __esmMin((() => {
21280
21751
  init_types$11();
21281
21752
  cardListItemParts = [
@@ -21311,7 +21782,9 @@ var init_appearancePresetTypes = __esmMin((() => {
21311
21782
  lookKnobBlocks = {
21312
21783
  actionStyle: cardListKnobBlocks,
21313
21784
  titleSize: "block.hero",
21314
- imagePosition: "block.hero",
21785
+ imagePosition: ["block.hero", "block.media-text"],
21786
+ imageShape: "block.media-text",
21787
+ aspectRatio: "block.media-text",
21315
21788
  stickerLine: "block.hero",
21316
21789
  smallCaption: "block.hero",
21317
21790
  candleGlow: "block.hero",
@@ -21321,9 +21794,25 @@ var init_appearancePresetTypes = __esmMin((() => {
21321
21794
  dates: "block.offerings-preview",
21322
21795
  showCapacity: "block.event-calendar",
21323
21796
  quoteCount: "block.testimonials",
21324
- archFrame: "block.testimonials",
21797
+ archFrame: [
21798
+ "block.testimonials",
21799
+ "block.newsletter-signup",
21800
+ "block.form"
21801
+ ],
21325
21802
  tilt: "block.testimonials"
21326
21803
  };
21804
+ arrangementLookTargets = {
21805
+ hero: "hero",
21806
+ "feature-cards": "feature-cards",
21807
+ "event-calendar": "events",
21808
+ testimonials: "testimonials",
21809
+ "event-details": "events",
21810
+ "media-text": "media-text",
21811
+ "image-gallery": "image-gallery",
21812
+ "newsletter-signup": "newsletter",
21813
+ form: "contact-form",
21814
+ "body-text": "body-text"
21815
+ };
21327
21816
  }));
21328
21817
  //#endregion
21329
21818
  //#region ../theme-core/src/site-styles/lookOptionGroups.ts
@@ -22184,6 +22673,15 @@ var init_blockAppearancePresets = __esmMin((() => {
22184
22673
  eyebrowTreatment: "accent"
22185
22674
  }
22186
22675
  }),
22676
+ defineArrangementLook("body-text-reading-column", "body-text", "Reading column", "prose", []),
22677
+ defineArrangementLook("form-beside-introduction-arched-panel", "form", "Introduction beside an arched form", "two-column", [], { slotRoles: { panel: "card" } }),
22678
+ defineArrangementLook("newsletter-signup-in-arch", "newsletter-signup", "Signup in an arch", "arch", []),
22679
+ defineArrangementLook("image-gallery-square-tiles", "image-gallery", "Square tiles", "tiles", []),
22680
+ defineArrangementLook("image-gallery-arched-captions", "image-gallery", "Arched photos with captions", "tiles", [], { styleFallback: [id$1("image-gallery-square-tiles")] }),
22681
+ defineArrangementLook("media-text-circle-beside-text", "media-text", "Circle beside the text", "circle-beside", ["imagePosition"], { forcedKnobs: {
22682
+ imageShape: "circle",
22683
+ aspectRatio: "1/1"
22684
+ } }),
22187
22685
  defineArrangementLook("hero-photo-beside-text", "hero", "Photo beside the text", "split", heroKnobs, { slotRoles: { sticker: "highlight" } }),
22188
22686
  defineArrangementLook("hero-headline-row", "hero", "Big headline, then text and photo", "headline-row", heroKnobs, {
22189
22687
  slotRoles: { sticker: "highlight" },
@@ -22793,9 +23291,67 @@ var init_compositionBudget = __esmMin((() => {
22793
23291
  init_sectionBoundaryComposition();
22794
23292
  }));
22795
23293
  //#endregion
23294
+ //#region ../theme-core/src/site-styles/records.ts
23295
+ var init_records = __esmMin((() => {}));
23296
+ //#endregion
23297
+ //#region ../theme-core/src/header/rootPaint.ts
23298
+ /** The nav container takes precedence when a floating header also has one. */
23299
+ function headerRootPaint(header) {
23300
+ const navContainerType = header?.navContainer?.type ?? "none";
23301
+ if (navContainerType === "glass" || navContainerType === "pill") return "contained-nav";
23302
+ return header?.variant === "floating" ? "overlay" : "own-surface";
23303
+ }
23304
+ var init_rootPaint = __esmMin((() => {}));
23305
+ //#endregion
23306
+ //#region ../theme-core/src/site-styles/siteChromeBackgrounds.ts
23307
+ function parseSiteChromeBackgroundColorToken(value) {
23308
+ const token = parseBackgroundAppearanceColorToken(value);
23309
+ return token ? token : null;
23310
+ }
23311
+ function toSiteChromeBackgroundColorTokens(tokenNames) {
23312
+ return tokenNames.flatMap((name) => {
23313
+ const token = parseSiteChromeBackgroundColorToken(name);
23314
+ return token ? [token] : [];
23315
+ });
23316
+ }
23317
+ var siteChromeBackgroundColorTokens, quickSiteChromeBackgroundColorTokens, backgroundColorTokenSchema, siteChromeBackgroundOverrideSchema;
23318
+ var init_siteChromeBackgrounds = __esmMin((() => {
23319
+ init_surfaces();
23320
+ init_backgroundAppearance();
23321
+ init_rawStyleFields();
23322
+ siteChromeBackgroundColorTokens = toSiteChromeBackgroundColorTokens(backgroundAppearanceColorTokenNames);
23323
+ quickSiteChromeBackgroundColorTokens = toSiteChromeBackgroundColorTokens(backgroundAppearanceQuickColorTokenNames);
23324
+ siteChromeBackgroundColorTokens.filter((token) => !quickSiteChromeBackgroundColorTokens.includes(token));
23325
+ backgroundColorTokenSchema = z.unknown().transform((value, ctx) => {
23326
+ const token = parseSiteChromeBackgroundColorToken(value);
23327
+ if (token === null) {
23328
+ ctx.addIssue({
23329
+ code: "custom",
23330
+ message: "Unknown site chrome background colour token"
23331
+ });
23332
+ return z.NEVER;
23333
+ }
23334
+ return token;
23335
+ });
23336
+ siteChromeBackgroundOverrideSchema = z.discriminatedUnion("kind", [z.object({ kind: z.literal("default") }).strict(), z.object({
23337
+ kind: z.literal("color"),
23338
+ token: backgroundColorTokenSchema
23339
+ }).strict()]);
23340
+ }));
23341
+ var init_footerPreferences = __esmMin((() => {
23342
+ init_rawStyleFields();
23343
+ init_siteChromeBackgrounds();
23344
+ z.object({
23345
+ background: siteChromeBackgroundOverrideSchema,
23346
+ navigationLayout: z.enum(["inline-wrap", "stack"])
23347
+ }).strict();
23348
+ z.object({ background: siteChromeBackgroundOverrideSchema }).strict();
23349
+ }));
23350
+ //#endregion
22796
23351
  //#region ../theme-core/src/site-styles/compilationPlan.ts
22797
23352
  var defaultHeaderBrandPreferences;
22798
23353
  var init_compilationPlan = __esmMin((() => {
23354
+ init_footerPreferences();
22799
23355
  defaultHeaderBrandPreferences = {
22800
23356
  brandDisplay: "auto",
22801
23357
  logoSize: "auto"
@@ -22984,6 +23540,9 @@ var init_lookResolution = __esmMin((() => {
22984
23540
  init_roles();
22985
23541
  appearancePresets.filter(isArrangementAppearancePreset);
22986
23542
  arrangementSlotNames = [
23543
+ "contact",
23544
+ "social",
23545
+ "base",
22987
23546
  "section",
22988
23547
  "stack",
22989
23548
  "inline",
@@ -23061,6 +23620,262 @@ var init_lookResolution = __esmMin((() => {
23061
23620
  ];
23062
23621
  }));
23063
23622
  //#endregion
23623
+ //#region ../theme-core/src/site-styles/footerLookDefaults.ts
23624
+ /** A whole authored recipe replaces the default; facets are never deep-merged. */
23625
+ function resolveFooterLookRecipe(style, id) {
23626
+ return style?.footerLookRecipes?.[id] ?? defaultFooterLookRecipes[id];
23627
+ }
23628
+ var defaultFooterLookRecipes;
23629
+ var init_footerLookDefaults = __esmMin((() => {
23630
+ defaultFooterLookRecipes = {
23631
+ "footer-centred-name": {
23632
+ arrangement: "centred",
23633
+ ground: {
23634
+ kind: "token",
23635
+ token: "surface"
23636
+ },
23637
+ nav: {
23638
+ weight: "regular",
23639
+ colorToken: "text",
23640
+ hoverColorToken: "primary",
23641
+ typography: "body"
23642
+ },
23643
+ legal: {
23644
+ kind: "separate",
23645
+ bar: null
23646
+ },
23647
+ brandAlign: "center"
23648
+ },
23649
+ "footer-links-row": {
23650
+ arrangement: "simple",
23651
+ ground: {
23652
+ kind: "token",
23653
+ token: "surface"
23654
+ },
23655
+ nav: {
23656
+ weight: "regular",
23657
+ colorToken: "text",
23658
+ hoverColorToken: "primary",
23659
+ typography: "body"
23660
+ },
23661
+ legal: { kind: "integrated" },
23662
+ brandAlign: "start"
23663
+ }
23664
+ };
23665
+ }));
23666
+ //#endregion
23667
+ //#region ../theme-core/src/navigation/generateNavLinkCSS.ts
23668
+ var init_generateNavLinkCSS = __esmMin((() => {
23669
+ init_types$5();
23670
+ init_generateEffectsCSS();
23671
+ }));
23672
+ //#endregion
23673
+ //#region ../theme-core/src/navigation/presets.ts
23674
+ /**
23675
+ * Get a nav link style preset by ID
23676
+ */
23677
+ function getNavLinkPreset(presetId) {
23678
+ return NAV_LINK_PRESETS[presetId];
23679
+ }
23680
+ var NAV_LINK_PRESETS;
23681
+ var init_presets$2 = __esmMin((() => {
23682
+ NAV_LINK_PRESETS = {
23683
+ /**
23684
+ * Minimal - subtle color change on hover
23685
+ */
23686
+ minimal: {
23687
+ name: "Minimal",
23688
+ typography: "body",
23689
+ fontWeight: "medium",
23690
+ textTransform: "none",
23691
+ italic: false,
23692
+ colorToken: "text",
23693
+ hoverColorToken: "primary",
23694
+ padding: "none",
23695
+ borderRadius: "none",
23696
+ effects: { hover: [{
23697
+ effectId: "text-color-change",
23698
+ options: { hoverColorToken: "primary" }
23699
+ }] }
23700
+ },
23701
+ /**
23702
+ * Underline - static underline appears on hover
23703
+ */
23704
+ underline: {
23705
+ name: "Underline",
23706
+ typography: "body",
23707
+ fontWeight: "medium",
23708
+ textTransform: "none",
23709
+ italic: false,
23710
+ colorToken: "text",
23711
+ padding: "none",
23712
+ borderRadius: "none",
23713
+ effects: { hover: [{
23714
+ effectId: "nav-underline",
23715
+ options: { style: "static" }
23716
+ }] }
23717
+ },
23718
+ /**
23719
+ * Underline Grow - animated underline grows from center on hover
23720
+ */
23721
+ "underline-grow": {
23722
+ name: "Underline Grow",
23723
+ typography: "body",
23724
+ fontWeight: "medium",
23725
+ textTransform: "none",
23726
+ italic: false,
23727
+ colorToken: "text",
23728
+ padding: "none",
23729
+ borderRadius: "none",
23730
+ effects: { hover: [{
23731
+ effectId: "nav-underline",
23732
+ options: { style: "grow" }
23733
+ }] }
23734
+ },
23735
+ /**
23736
+ * Capsule - pill-shaped background on hover
23737
+ */
23738
+ capsule: {
23739
+ name: "Capsule",
23740
+ typography: "body",
23741
+ fontWeight: "medium",
23742
+ textTransform: "none",
23743
+ italic: false,
23744
+ colorToken: "text",
23745
+ padding: "compact",
23746
+ borderRadius: "full",
23747
+ effects: {
23748
+ hover: [{
23749
+ effectId: "background-on-hover-alpha",
23750
+ options: {
23751
+ colorToken: "primary",
23752
+ opacity: 10
23753
+ }
23754
+ }],
23755
+ active: [{
23756
+ effectId: "background-on-hover-alpha",
23757
+ options: {
23758
+ colorToken: "primary",
23759
+ opacity: 15
23760
+ }
23761
+ }]
23762
+ }
23763
+ },
23764
+ /**
23765
+ * Solid - solid background color on hover
23766
+ */
23767
+ solid: {
23768
+ name: "Solid",
23769
+ typography: "body",
23770
+ fontWeight: "medium",
23771
+ textTransform: "none",
23772
+ italic: false,
23773
+ colorToken: "text",
23774
+ padding: "compact",
23775
+ borderRadius: "none",
23776
+ effects: {
23777
+ hover: [{
23778
+ effectId: "background-on-hover",
23779
+ options: {
23780
+ colorToken: "primary",
23781
+ textColorToken: "primaryForeground"
23782
+ }
23783
+ }],
23784
+ active: [{
23785
+ effectId: "background-on-hover",
23786
+ options: {
23787
+ colorToken: "primary",
23788
+ textColorToken: "primaryForeground"
23789
+ }
23790
+ }]
23791
+ }
23792
+ },
23793
+ /**
23794
+ * Scale - gentle scale-up on hover
23795
+ */
23796
+ scale: {
23797
+ name: "Scale",
23798
+ typography: "body",
23799
+ fontWeight: "medium",
23800
+ textTransform: "none",
23801
+ italic: false,
23802
+ colorToken: "text",
23803
+ padding: "none",
23804
+ borderRadius: "none",
23805
+ effects: { hover: [{
23806
+ effectId: "scale-up",
23807
+ options: { scale: 1.05 }
23808
+ }] }
23809
+ },
23810
+ /**
23811
+ * Frosted - semi-transparent glass-like background
23812
+ */
23813
+ frosted: {
23814
+ name: "Frosted",
23815
+ typography: "body",
23816
+ fontWeight: "medium",
23817
+ textTransform: "none",
23818
+ italic: false,
23819
+ colorToken: "text",
23820
+ padding: "compact",
23821
+ borderRadius: "md",
23822
+ effects: {
23823
+ base: [{ effectId: "nav-frosted-base" }],
23824
+ hover: [{ effectId: "nav-frosted-hover" }],
23825
+ active: [{ effectId: "nav-frosted-active" }]
23826
+ }
23827
+ }
23828
+ };
23829
+ Object.keys(NAV_LINK_PRESETS);
23830
+ }));
23831
+ //#endregion
23832
+ //#region ../theme-core/src/footer/effectiveNavLinkStyle.ts
23833
+ function effectiveFooterNavLinkStyle(footer) {
23834
+ if (!footer) return null;
23835
+ if (footer.navLinkStyle) return footer.navLinkStyle;
23836
+ const basePreset = getNavLinkPreset(footer.navStyle ?? "minimal");
23837
+ if (!basePreset) return null;
23838
+ return {
23839
+ ...basePreset,
23840
+ fontWeight: footer.navWeight ?? basePreset.fontWeight,
23841
+ colorToken: footer.navColor?.trim() || basePreset.colorToken
23842
+ };
23843
+ }
23844
+ function footerForegroundCandidates(footer, proseHoverCandidate) {
23845
+ if (!footer) return {};
23846
+ const style = effectiveFooterNavLinkStyle(footer);
23847
+ return {
23848
+ text: footer.background?.textColor ?? (footer.variant === "centred" ? "text" : void 0),
23849
+ link: style?.colorToken ?? footer.navColor ?? footer.background?.textColor,
23850
+ linkHover: navLinkOwnsHoverForeground(style) ? proseHoverCandidate : navLinkHoverColorCandidate(style)
23851
+ };
23852
+ }
23853
+ var init_effectiveNavLinkStyle$1 = __esmMin((() => {
23854
+ init_presets$2();
23855
+ init_types$5();
23856
+ }));
23857
+ //#endregion
23858
+ //#region ../theme-core/src/footer/generateFooterCss.ts
23859
+ var init_generateFooterCss = __esmMin((() => {
23860
+ init_resolver$2();
23861
+ init_generateNavLinkCSS();
23862
+ init_effectiveNavLinkStyle$1();
23863
+ init_rawStyleFields();
23864
+ }));
23865
+ //#endregion
23866
+ //#region ../theme-core/src/site-styles/footerLookRecipe.ts
23867
+ /** Reject undeclared references when the curated catalogue is loaded, before rendering. */
23868
+ function validateFooterRecipeSurfaces(style, recipe) {
23869
+ [recipe.ground, ...recipe.legal.kind === "separate" && recipe.legal.bar ? [recipe.legal.bar.background] : []].forEach((ground) => {
23870
+ if (ground.kind === "style-surface" && (style.looks.kind !== "offers" || !style.looks.surfaces[ground.surface])) throw new Error(`Undeclared footer surface: ${ground.surface}`);
23871
+ });
23872
+ }
23873
+ var init_footerLookRecipe = __esmMin((() => {
23874
+ init_generateFooterCss();
23875
+ init_accessibleSurfaces();
23876
+ init_opaqueSurface();
23877
+ }));
23878
+ //#endregion
23064
23879
  //#region ../theme-core/src/accordions/siteStyleDefaults.ts
23065
23880
  var editorialDividedAccordionSystem, boldBorderedAccordionSystem, warmInsetAccordionSystem, softEarthAccordionSystem;
23066
23881
  var init_siteStyleDefaults$1 = __esmMin((() => {
@@ -23730,55 +24545,17 @@ var init_headerLayoutStyles = __esmMin((() => {
23730
24545
  function asFooterLookId(value) {
23731
24546
  return value;
23732
24547
  }
23733
- function quietFooterLinks(theme) {
23734
- return {
23735
- ...theme.footer,
23736
- navStyle: "minimal",
23737
- navWeight: "regular",
23738
- navColor: "text",
23739
- navLinkStyle: {
23740
- typography: "body",
23741
- fontWeight: "regular",
23742
- textTransform: "none",
23743
- italic: false,
23744
- colorToken: "text",
23745
- hoverColorToken: "primary",
23746
- padding: "none",
23747
- borderRadius: "none"
23748
- }
23749
- };
23750
- }
23751
- function emphasizedFooterLinks(theme) {
23752
- return {
23753
- ...theme.footer,
23754
- navStyle: "minimal",
23755
- navWeight: "medium",
23756
- navColor: "text",
23757
- navLinkStyle: {
23758
- typography: "body",
23759
- fontWeight: "medium",
23760
- textTransform: "none",
23761
- italic: false,
23762
- colorToken: "text",
23763
- hoverColorToken: "primary",
23764
- padding: "none",
23765
- borderRadius: "none"
23766
- }
23767
- };
23768
- }
23769
24548
  var footerLookCatalog;
23770
24549
  var init_footerLooks = __esmMin((() => {
23771
24550
  init_types$11();
23772
24551
  footerLookCatalog = defineExactCatalog()([{
23773
- id: asFooterLookId("footer-links-quiet"),
23774
- label: "Quiet links",
23775
- description: "Regular-weight footer navigation with a restrained hover.",
23776
- compile: quietFooterLinks
24552
+ id: asFooterLookId("footer-links-row"),
24553
+ label: "Links in a row",
24554
+ description: "Your links in a row, with the other footer sections in columns beside them."
23777
24555
  }, {
23778
- id: asFooterLookId("footer-links-emphasized"),
23779
- label: "Emphasized links",
23780
- description: "Medium-weight footer navigation with a clearer emphasis.",
23781
- compile: emphasizedFooterLinks
24556
+ id: asFooterLookId("footer-centred-name"),
24557
+ label: "Centred name, links beneath",
24558
+ description: "Your site name centred, with your links, contact details and social links beneath it."
23782
24559
  }]);
23783
24560
  new Map(footerLookCatalog.map((look) => [look.id, look]));
23784
24561
  }));
@@ -24514,7 +25291,7 @@ function getGradientPreset(id) {
24514
25291
  return gradientPresetById[id];
24515
25292
  }
24516
25293
  var rawGradientPresets, GRADIENT_PRESETS, GRADIENT_PRESET_IDS, gradientPresetIdSet, gradientPresetById;
24517
- var init_presets$2 = __esmMin((() => {
25294
+ var init_presets$1 = __esmMin((() => {
24518
25295
  rawGradientPresets = [
24519
25296
  {
24520
25297
  id: "primary-secondary",
@@ -24744,7 +25521,7 @@ var init_utils$2 = __esmMin((() => {}));
24744
25521
  //#region ../theme-core/src/gradients/index.ts
24745
25522
  var init_gradients = __esmMin((() => {
24746
25523
  init_types$6();
24747
- init_presets$2();
25524
+ init_presets$1();
24748
25525
  init_utils$2();
24749
25526
  }));
24750
25527
  //#endregion
@@ -24938,6 +25715,7 @@ function defineCuratedSiteStyle(input) {
24938
25715
  recommendedAppearancePresetIds
24939
25716
  },
24940
25717
  headerCuration: headerCurationBySiteStyle[input.id],
25718
+ footerLookRecipes: input.footerLookRecipes,
24941
25719
  recommendedFooterLookIds: (input.recommendedFooterLookIds ?? []).map(asFooterLookId),
24942
25720
  buttonStyleChoices: input.buttonStyleChoices,
24943
25721
  paletteRecommendations: input.paletteRecommendations,
@@ -24976,6 +25754,8 @@ function curatedStyleTemplate(input) {
24976
25754
  }
24977
25755
  var SOFT_EARTH_SITE_STYLE_ID_VALUE, curatedSiteStyleIdValues, quietBudget, accentLedQuietBudget, balancedBudget, expressiveBudget, kirtanOrnateDesignRuntimeRules, expressiveUnderlineInputs, ornateDarkInputs, generatedContentFrameKinds, headerCurationBySiteStyle, id, quieterOrStandard, fulcrumRoles, fulcrumLooks, posterRoles, posterOffers, posterLooks, lanternRoles, lanternVeilRoles, lanternLooks, measureRoles, measureRuledPanelRoles, measureNoMarkers, measureLooks, curatedSiteStyles;
24978
25756
  var init_curatedSiteStyles = __esmMin((() => {
25757
+ init_footerLookDefaults();
25758
+ init_footerLookRecipe();
24979
25759
  init_types$10();
24980
25760
  init_lookResolution();
24981
25761
  init_styles();
@@ -25740,7 +26520,11 @@ var init_curatedSiteStyles = __esmMin((() => {
25740
26520
  margin: "40px"
25741
26521
  },
25742
26522
  fontLoading: {
25743
- extraBodyFontWeights: [500, 700],
26523
+ extraBodyFontWeights: [
26524
+ 500,
26525
+ 700,
26526
+ 800
26527
+ ],
25744
26528
  italicBodyFontWeights: [400]
25745
26529
  },
25746
26530
  surfaces: {
@@ -25790,6 +26574,38 @@ var init_curatedSiteStyles = __esmMin((() => {
25790
26574
  ]
25791
26575
  },
25792
26576
  offers: [
26577
+ {
26578
+ id: id("body-text-reading-column"),
26579
+ treatment: "reading-column",
26580
+ roleMap: lanternRoles
26581
+ },
26582
+ {
26583
+ id: id("form-beside-introduction-arched-panel"),
26584
+ treatment: "arched-panel",
26585
+ addKnobs: ["archFrame"],
26586
+ roleMap: lanternRoles
26587
+ },
26588
+ {
26589
+ id: id("newsletter-signup-in-arch"),
26590
+ treatment: "signup-arch",
26591
+ addKnobs: ["archFrame"],
26592
+ roleMap: lanternRoles
26593
+ },
26594
+ {
26595
+ id: id("image-gallery-square-tiles"),
26596
+ treatment: "square-tiles",
26597
+ roleMap: lanternRoles
26598
+ },
26599
+ {
26600
+ id: id("image-gallery-arched-captions"),
26601
+ treatment: "arched-captions",
26602
+ roleMap: lanternRoles
26603
+ },
26604
+ {
26605
+ id: id("media-text-circle-beside-text"),
26606
+ treatment: "circle-beside",
26607
+ roleMap: lanternRoles
26608
+ },
25793
26609
  {
25794
26610
  id: id("event-details-panel"),
25795
26611
  treatment: "quiet",
@@ -26225,7 +27041,7 @@ var init_curatedSiteStyles = __esmMin((() => {
26225
27041
  "faq-contained-help",
26226
27042
  "contact-form-panel"
26227
27043
  ],
26228
- recommendedFooterLookIds: ["footer-links-quiet"],
27044
+ recommendedFooterLookIds: ["footer-links-row"],
26229
27045
  buttonStyleChoices: [
26230
27046
  buttonChoice("soft-pill"),
26231
27047
  buttonChoice("pebble"),
@@ -26344,7 +27160,7 @@ var init_curatedSiteStyles = __esmMin((() => {
26344
27160
  "testimonials-non-carded",
26345
27161
  "contact-form-panel"
26346
27162
  ],
26347
- recommendedFooterLookIds: ["footer-links-quiet", "footer-links-emphasized"],
27163
+ recommendedFooterLookIds: ["footer-links-row"],
26348
27164
  buttonStyleChoices: [
26349
27165
  buttonChoice("earth-pill"),
26350
27166
  buttonChoice("soft-pill"),
@@ -26399,7 +27215,41 @@ var init_curatedSiteStyles = __esmMin((() => {
26399
27215
  "testimonials-brand-statement-cards",
26400
27216
  "contact-form-panel"
26401
27217
  ],
26402
- recommendedFooterLookIds: ["footer-links-emphasized", "footer-links-quiet"],
27218
+ footerLookRecipes: { "footer-links-row": {
27219
+ arrangement: "split",
27220
+ ground: {
27221
+ kind: "token",
27222
+ token: "primary-800"
27223
+ },
27224
+ nav: {
27225
+ weight: "medium",
27226
+ colorToken: "primaryForeground",
27227
+ hoverColorToken: "secondary",
27228
+ typography: "body"
27229
+ },
27230
+ legal: {
27231
+ kind: "separate",
27232
+ bar: {
27233
+ fullBleed: true,
27234
+ background: {
27235
+ kind: "token",
27236
+ token: "primary-900"
27237
+ },
27238
+ textColor: "primaryForeground",
27239
+ textAlign: "center",
27240
+ paddingY: "compact",
27241
+ paddingX: "default",
27242
+ borderTop: { width: "none" }
27243
+ },
27244
+ linkStyle: {
27245
+ colorToken: "secondary",
27246
+ decorationColorToken: "secondary"
27247
+ }
27248
+ },
27249
+ brandAlign: "start",
27250
+ brandLogoSize: "sm"
27251
+ } },
27252
+ recommendedFooterLookIds: ["footer-links-row"],
26403
27253
  buttonStyleChoices: [
26404
27254
  buttonChoice("showtime-pill"),
26405
27255
  buttonChoice("confident-chip"),
@@ -26470,7 +27320,7 @@ var init_curatedSiteStyles = __esmMin((() => {
26470
27320
  "testimonials-statement-cards",
26471
27321
  "contact-form-panel"
26472
27322
  ],
26473
- recommendedFooterLookIds: ["footer-links-emphasized", "footer-links-quiet"],
27323
+ recommendedFooterLookIds: ["footer-links-row"],
26474
27324
  buttonStyleChoices: [
26475
27325
  buttonChoice("ornate-ritual"),
26476
27326
  buttonChoice("joy-stamp"),
@@ -26517,7 +27367,22 @@ var init_curatedSiteStyles = __esmMin((() => {
26517
27367
  } }
26518
27368
  },
26519
27369
  recommendedAppearancePresetIds: ["feature-cards-bold-colors", "testimonials-statement-cards"],
26520
- recommendedFooterLookIds: ["footer-links-emphasized", "footer-links-quiet"],
27370
+ footerLookRecipes: { "footer-links-row": {
27371
+ arrangement: "simple",
27372
+ ground: {
27373
+ kind: "token",
27374
+ token: "surface"
27375
+ },
27376
+ nav: {
27377
+ weight: "medium",
27378
+ colorToken: "text",
27379
+ hoverColorToken: "primary",
27380
+ typography: "body"
27381
+ },
27382
+ legal: { kind: "integrated" },
27383
+ brandAlign: "start"
27384
+ } },
27385
+ recommendedFooterLookIds: ["footer-links-row"],
26521
27386
  buttonStyleChoices: [
26522
27387
  buttonChoice("joy-stamp"),
26523
27388
  buttonChoice("ink-stamp"),
@@ -26569,7 +27434,7 @@ var init_curatedSiteStyles = __esmMin((() => {
26569
27434
  },
26570
27435
  testimonialQuote: serifDisplayQuote
26571
27436
  },
26572
- recommendedFooterLookIds: ["footer-links-quiet"],
27437
+ recommendedFooterLookIds: ["footer-links-row"],
26573
27438
  buttonStyleChoices: [
26574
27439
  buttonChoice("fulcrum"),
26575
27440
  buttonChoice("editorial-link"),
@@ -26646,7 +27511,7 @@ var init_curatedSiteStyles = __esmMin((() => {
26646
27511
  "faq-base-accordion",
26647
27512
  "booking-brand-band"
26648
27513
  ],
26649
- recommendedFooterLookIds: ["footer-links-quiet"],
27514
+ recommendedFooterLookIds: ["footer-links-row"],
26650
27515
  buttonStyleChoices: [
26651
27516
  buttonChoice("quiet-arrow", void 0, { secondaryTreatment: "solid-accent" }),
26652
27517
  buttonChoice("flat-ink"),
@@ -26684,7 +27549,22 @@ var init_curatedSiteStyles = __esmMin((() => {
26684
27549
  accordions: boldBorderedAccordionSystem,
26685
27550
  testimonialQuote: accentGlyphQuote
26686
27551
  },
26687
- recommendedFooterLookIds: ["footer-links-emphasized"],
27552
+ footerLookRecipes: { "footer-links-row": {
27553
+ arrangement: "simple",
27554
+ ground: {
27555
+ kind: "token",
27556
+ token: "surface"
27557
+ },
27558
+ nav: {
27559
+ weight: "medium",
27560
+ colorToken: "text",
27561
+ hoverColorToken: "primary",
27562
+ typography: "body"
27563
+ },
27564
+ legal: { kind: "integrated" },
27565
+ brandAlign: "start"
27566
+ } },
27567
+ recommendedFooterLookIds: ["footer-links-row"],
26688
27568
  buttonStyleChoices: [
26689
27569
  buttonChoice("offset-block"),
26690
27570
  buttonChoice("ink-stamp"),
@@ -26723,8 +27603,29 @@ var init_curatedSiteStyles = __esmMin((() => {
26723
27603
  accordions: warmInsetAccordionSystem,
26724
27604
  testimonialQuote: serifDisplayQuote
26725
27605
  },
26726
- recommendedFooterLookIds: ["footer-links-quiet"],
27606
+ footerLookRecipes: { "footer-centred-name": {
27607
+ arrangement: "centred",
27608
+ ground: {
27609
+ kind: "style-surface",
27610
+ surface: "deep"
27611
+ },
27612
+ nav: {
27613
+ weight: "regular",
27614
+ colorToken: "text",
27615
+ hoverColorToken: "primary",
27616
+ typography: "heading"
27617
+ },
27618
+ legal: {
27619
+ kind: "separate",
27620
+ bar: null
27621
+ },
27622
+ brandAlign: "center"
27623
+ } },
27624
+ recommendedFooterLookIds: ["footer-centred-name", "footer-links-row"],
26727
27625
  buttonStyleChoices: [
27626
+ buttonChoice("gilt-slab"),
27627
+ buttonChoice("hairline-tab"),
27628
+ buttonChoice("marquee"),
26728
27629
  buttonChoice("ringed-pill"),
26729
27630
  buttonChoice("earth-pill"),
26730
27631
  buttonChoice("editorial-link")
@@ -26759,7 +27660,7 @@ var init_curatedSiteStyles = __esmMin((() => {
26759
27660
  accordions: editorialDividedAccordionSystem,
26760
27661
  testimonialQuote: serifDisplayQuote
26761
27662
  },
26762
- recommendedFooterLookIds: ["footer-links-quiet"],
27663
+ recommendedFooterLookIds: ["footer-links-row"],
26763
27664
  buttonStyleChoices: [
26764
27665
  buttonChoice("flat-ink", void 0, { corners: "square" }),
26765
27666
  buttonChoice("editorial-link"),
@@ -26775,6 +27676,7 @@ var init_curatedSiteStyles = __esmMin((() => {
26775
27676
  new Map(curatedSiteStyles.map((style) => [style.id, style]));
26776
27677
  curatedSiteStyles.forEach((style) => {
26777
27678
  if (style.looks.kind === "offers") validateLookFallbacks(style.looks);
27679
+ (/* @__PURE__ */ new Set([...Object.values(style.footerLookRecipes ?? {}), ...style.recommendedFooterLookIds.map((id) => resolveFooterLookRecipe(style, id))])).forEach((recipe) => validateFooterRecipeSurfaces(style, recipe));
26778
27680
  });
26779
27681
  }));
26780
27682
  //#endregion
@@ -26888,6 +27790,13 @@ var init_pageDesignEditorModel = __esmMin((() => {
26888
27790
  init_pageFlowPresets();
26889
27791
  init_pageDesignEditorBoundaries();
26890
27792
  init_sectionTransitions();
27793
+ }));
27794
+ //#endregion
27795
+ //#region ../theme-core/src/site-styles/compileFooterAgainstRow.ts
27796
+ var init_compileFooterAgainstRow = __esmMin((() => {
27797
+ init_footerLookRecipe();
27798
+ init_footerPreferences();
27799
+ init_footerLooks();
26891
27800
  })), blockDesignFallback;
26892
27801
  var init_resolver$1 = __esmMin((() => {
26893
27802
  init_types$11();
@@ -26907,36 +27816,6 @@ var init_resolver$1 = __esmMin((() => {
26907
27816
  blockDesignFallback.sectionSurface, blockDesignFallback.contentFrame, blockDesignFallback.sectionHeight, blockDesignFallback.heroLegibility, blockDesignFallback.imageSurfaceTreatment, blockDesignFallback.imageSurfaceMotion, blockDesignFallback.tileTreatment, blockDesignFallback.eventListTreatment, blockDesignFallback.eyebrowTreatment, blockDesignFallback.accordionIconTreatment, blockDesignFallback.composition;
26908
27817
  }));
26909
27818
  //#endregion
26910
- //#region ../theme-core/src/header/rootPaint.ts
26911
- /** The nav container takes precedence when a floating header also has one. */
26912
- function headerRootPaint(header) {
26913
- const navContainerType = header?.navContainer?.type ?? "none";
26914
- if (navContainerType === "glass" || navContainerType === "pill") return "contained-nav";
26915
- return header?.variant === "floating" ? "overlay" : "own-surface";
26916
- }
26917
- var init_rootPaint = __esmMin((() => {}));
26918
- //#endregion
26919
- //#region ../theme-core/src/site-styles/siteChromeBackgrounds.ts
26920
- function parseSiteChromeBackgroundColorToken(value) {
26921
- const token = parseBackgroundAppearanceColorToken(value);
26922
- return token ? token : null;
26923
- }
26924
- function toSiteChromeBackgroundColorTokens(tokenNames) {
26925
- return tokenNames.flatMap((name) => {
26926
- const token = parseSiteChromeBackgroundColorToken(name);
26927
- return token ? [token] : [];
26928
- });
26929
- }
26930
- var siteChromeBackgroundColorTokens, quickSiteChromeBackgroundColorTokens;
26931
- var init_siteChromeBackgrounds = __esmMin((() => {
26932
- init_surfaces();
26933
- init_backgroundAppearance();
26934
- init_rawStyleFields();
26935
- siteChromeBackgroundColorTokens = toSiteChromeBackgroundColorTokens(backgroundAppearanceColorTokenNames);
26936
- quickSiteChromeBackgroundColorTokens = toSiteChromeBackgroundColorTokens(backgroundAppearanceQuickColorTokenNames);
26937
- siteChromeBackgroundColorTokens.filter((token) => !quickSiteChromeBackgroundColorTokens.includes(token));
26938
- }));
26939
- //#endregion
26940
27819
  //#region ../theme-core/src/site-styles/siteChromeNavPreferences.ts
26941
27820
  var headerNavTypographyPreferenceValues, headerNavFontSizePreferenceValues, defaultHeaderNavPreferences;
26942
27821
  var init_siteChromeNavPreferences = __esmMin((() => {
@@ -27003,6 +27882,7 @@ var init_previewCustomization = __esmMin((() => {}));
27003
27882
  //#endregion
27004
27883
  //#region ../theme-core/src/site-styles/previewCompiler.ts
27005
27884
  var init_previewCompiler = __esmMin((() => {
27885
+ init_compileFooterAgainstRow();
27006
27886
  init_lookResolution();
27007
27887
  init_sectionTransitions();
27008
27888
  init_schema$2();
@@ -27010,7 +27890,7 @@ var init_previewCompiler = __esmMin((() => {
27010
27890
  init_concretePalette();
27011
27891
  init_curatedSiteStyles();
27012
27892
  init_resolver$1();
27013
- init_footerLooks();
27893
+ init_compilationPlan();
27014
27894
  init_headerRecompile();
27015
27895
  init_siteChromeNavPreferences();
27016
27896
  init_runtimeCompiler();
@@ -27110,9 +27990,6 @@ var init_generatedSchemas = __esmMin((() => {
27110
27990
  }).strict();
27111
27991
  }));
27112
27992
  //#endregion
27113
- //#region ../theme-core/src/site-styles/records.ts
27114
- var init_records = __esmMin((() => {}));
27115
- //#endregion
27116
27993
  //#region ../theme-core/src/site-styles/headerOpeningSection.ts
27117
27994
  var init_headerOpeningSection = __esmMin((() => {
27118
27995
  init_headerLayoutStyles();
@@ -27135,7 +28012,7 @@ var init_generatedDesignPipeline = __esmMin((() => {
27135
28012
  init_resolver$1();
27136
28013
  init_runtimeCompiler();
27137
28014
  init_generatedDesignPipelineHelpers();
27138
- })), backgroundColorTokenSchema, backgroundOverrideSchema, logoTextIntentSchema, structureSchema, headerPreferencesShape;
28015
+ })), logoTextIntentSchema, structureSchema, headerPreferencesShape;
27139
28016
  var init_headerPreferencesPersistence = __esmMin((() => {
27140
28017
  init_schema$2();
27141
28018
  init_interactionPalette();
@@ -27143,21 +28020,6 @@ var init_headerPreferencesPersistence = __esmMin((() => {
27143
28020
  init_siteChromeBackgrounds();
27144
28021
  init_logoBranding();
27145
28022
  init_headerBrandPresentation();
27146
- backgroundColorTokenSchema = z.unknown().transform((value, ctx) => {
27147
- const token = parseSiteChromeBackgroundColorToken(value);
27148
- if (token === null) {
27149
- ctx.addIssue({
27150
- code: "custom",
27151
- message: "Unknown site chrome background colour token"
27152
- });
27153
- return z.NEVER;
27154
- }
27155
- return token;
27156
- });
27157
- backgroundOverrideSchema = z.discriminatedUnion("kind", [z.object({ kind: z.literal("default") }).strict(), z.object({
27158
- kind: z.literal("color"),
27159
- token: backgroundColorTokenSchema
27160
- }).strict()]);
27161
28023
  logoTextIntentSchema = z.object({
27162
28024
  mobileMaxWidth: z.enum([
27163
28025
  "xs",
@@ -27183,7 +28045,7 @@ var init_headerPreferencesPersistence = __esmMin((() => {
27183
28045
  navFontRole: z.enum(headerNavTypographyPreferenceValues),
27184
28046
  navTextSize: z.enum(headerNavFontSizePreferenceValues),
27185
28047
  interactionPalette: z.union([z.literal("recommended"), z.enum(headerInteractionPaletteValues)]),
27186
- background: backgroundOverrideSchema,
28048
+ background: siteChromeBackgroundOverrideSchema,
27187
28049
  structure: structureSchema
27188
28050
  };
27189
28051
  z.object(headerPreferencesShape).strict();
@@ -27193,165 +28055,6 @@ var init_headerPreferencesPersistence = __esmMin((() => {
27193
28055
  }).strict();
27194
28056
  }));
27195
28057
  //#endregion
27196
- //#region ../theme-core/src/navigation/presets.ts
27197
- /**
27198
- * Get a nav link style preset by ID
27199
- */
27200
- function getNavLinkPreset(presetId) {
27201
- return NAV_LINK_PRESETS[presetId];
27202
- }
27203
- var NAV_LINK_PRESETS;
27204
- var init_presets$1 = __esmMin((() => {
27205
- NAV_LINK_PRESETS = {
27206
- /**
27207
- * Minimal - subtle color change on hover
27208
- */
27209
- minimal: {
27210
- name: "Minimal",
27211
- typography: "body",
27212
- fontWeight: "medium",
27213
- textTransform: "none",
27214
- italic: false,
27215
- colorToken: "text",
27216
- hoverColorToken: "primary",
27217
- padding: "none",
27218
- borderRadius: "none",
27219
- effects: { hover: [{
27220
- effectId: "text-color-change",
27221
- options: { hoverColorToken: "primary" }
27222
- }] }
27223
- },
27224
- /**
27225
- * Underline - static underline appears on hover
27226
- */
27227
- underline: {
27228
- name: "Underline",
27229
- typography: "body",
27230
- fontWeight: "medium",
27231
- textTransform: "none",
27232
- italic: false,
27233
- colorToken: "text",
27234
- padding: "none",
27235
- borderRadius: "none",
27236
- effects: { hover: [{
27237
- effectId: "nav-underline",
27238
- options: { style: "static" }
27239
- }] }
27240
- },
27241
- /**
27242
- * Underline Grow - animated underline grows from center on hover
27243
- */
27244
- "underline-grow": {
27245
- name: "Underline Grow",
27246
- typography: "body",
27247
- fontWeight: "medium",
27248
- textTransform: "none",
27249
- italic: false,
27250
- colorToken: "text",
27251
- padding: "none",
27252
- borderRadius: "none",
27253
- effects: { hover: [{
27254
- effectId: "nav-underline",
27255
- options: { style: "grow" }
27256
- }] }
27257
- },
27258
- /**
27259
- * Capsule - pill-shaped background on hover
27260
- */
27261
- capsule: {
27262
- name: "Capsule",
27263
- typography: "body",
27264
- fontWeight: "medium",
27265
- textTransform: "none",
27266
- italic: false,
27267
- colorToken: "text",
27268
- padding: "compact",
27269
- borderRadius: "full",
27270
- effects: {
27271
- hover: [{
27272
- effectId: "background-on-hover-alpha",
27273
- options: {
27274
- colorToken: "primary",
27275
- opacity: 10
27276
- }
27277
- }],
27278
- active: [{
27279
- effectId: "background-on-hover-alpha",
27280
- options: {
27281
- colorToken: "primary",
27282
- opacity: 15
27283
- }
27284
- }]
27285
- }
27286
- },
27287
- /**
27288
- * Solid - solid background color on hover
27289
- */
27290
- solid: {
27291
- name: "Solid",
27292
- typography: "body",
27293
- fontWeight: "medium",
27294
- textTransform: "none",
27295
- italic: false,
27296
- colorToken: "text",
27297
- padding: "compact",
27298
- borderRadius: "none",
27299
- effects: {
27300
- hover: [{
27301
- effectId: "background-on-hover",
27302
- options: {
27303
- colorToken: "primary",
27304
- textColorToken: "primaryForeground"
27305
- }
27306
- }],
27307
- active: [{
27308
- effectId: "background-on-hover",
27309
- options: {
27310
- colorToken: "primary",
27311
- textColorToken: "primaryForeground"
27312
- }
27313
- }]
27314
- }
27315
- },
27316
- /**
27317
- * Scale - gentle scale-up on hover
27318
- */
27319
- scale: {
27320
- name: "Scale",
27321
- typography: "body",
27322
- fontWeight: "medium",
27323
- textTransform: "none",
27324
- italic: false,
27325
- colorToken: "text",
27326
- padding: "none",
27327
- borderRadius: "none",
27328
- effects: { hover: [{
27329
- effectId: "scale-up",
27330
- options: { scale: 1.05 }
27331
- }] }
27332
- },
27333
- /**
27334
- * Frosted - semi-transparent glass-like background
27335
- */
27336
- frosted: {
27337
- name: "Frosted",
27338
- typography: "body",
27339
- fontWeight: "medium",
27340
- textTransform: "none",
27341
- italic: false,
27342
- colorToken: "text",
27343
- padding: "compact",
27344
- borderRadius: "md",
27345
- effects: {
27346
- base: [{ effectId: "nav-frosted-base" }],
27347
- hover: [{ effectId: "nav-frosted-hover" }],
27348
- active: [{ effectId: "nav-frosted-active" }]
27349
- }
27350
- }
27351
- };
27352
- Object.keys(NAV_LINK_PRESETS);
27353
- }));
27354
- //#endregion
27355
28058
  //#region ../theme-core/src/header/legacyNavLinkStyle.ts
27356
28059
  function buildLegacyHeaderNavLinkStyle(header, contrastTreatment, navTextSize) {
27357
28060
  const navStyle = header.navStyle ?? "minimal";
@@ -27390,7 +28093,7 @@ function glassStateEffects(opacity) {
27390
28093
  }];
27391
28094
  }
27392
28095
  var init_legacyNavLinkStyle = __esmMin((() => {
27393
- init_presets$1();
28096
+ init_presets$2();
27394
28097
  }));
27395
28098
  //#endregion
27396
28099
  //#region ../theme-core/src/header/openingForegroundProjection.ts
@@ -27447,7 +28150,7 @@ function authoredTransparentHeaderForegroundInput(header, palette) {
27447
28150
  hoverDecoration: navLinkOwnsUnderline(style) ? "initial" : hover.decoration
27448
28151
  };
27449
28152
  }
27450
- var init_effectiveNavLinkStyle$1 = __esmMin((() => {
28153
+ var init_effectiveNavLinkStyle = __esmMin((() => {
27451
28154
  init_types$5();
27452
28155
  init_legacyNavLinkStyle();
27453
28156
  init_openingForegroundProjection();
@@ -27462,7 +28165,7 @@ var init_headerOpeningForeground = __esmMin((() => {
27462
28165
  init_foregroundInteraction();
27463
28166
  init_tokens();
27464
28167
  init_types$5();
27465
- init_effectiveNavLinkStyle$1();
28168
+ init_effectiveNavLinkStyle();
27466
28169
  }));
27467
28170
  //#endregion
27468
28171
  //#region ../theme-core/src/site-styles/effectivePageDesign.ts
@@ -27661,6 +28364,8 @@ var init_site_styles = __esmMin((() => {
27661
28364
  init_customizableSurfaces();
27662
28365
  init_designState();
27663
28366
  init_footerLooks();
28367
+ init_footerLookRecipe();
28368
+ init_footerLookDefaults();
27664
28369
  init_generatedSchemas();
27665
28370
  init_generatedDesignPipeline();
27666
28371
  init_headerLayoutStyles();
@@ -27706,6 +28411,8 @@ var init_site_styles = __esmMin((() => {
27706
28411
  init_effectiveArrangement();
27707
28412
  init_lookResolution();
27708
28413
  init_appearancePresetTypes();
28414
+ init_footerPreferences();
28415
+ init_compileFooterAgainstRow();
27709
28416
  }));
27710
28417
  //#endregion
27711
28418
  //#region ../theme-core/src/styles/shadow.ts
@@ -27741,12 +28448,6 @@ var init_generateInputCss = __esmMin((() => {
27741
28448
  init_types$7();
27742
28449
  init_colorStyles();
27743
28450
  init_checkable();
27744
- }));
27745
- //#endregion
27746
- //#region ../theme-core/src/navigation/generateNavLinkCSS.ts
27747
- var init_generateNavLinkCSS = __esmMin((() => {
27748
- init_types$5();
27749
- init_generateEffectsCSS();
27750
28451
  })), NAV_DROPDOWN_SHIFT_PROPERTY, NAV_DROPDOWN_MAX_WIDTH_CSS;
27751
28452
  var init_navDropdownSizing = __esmMin((() => {
27752
28453
  NAV_DROPDOWN_SHIFT_PROPERTY = "--nav-dropdown-shift-x";
@@ -27764,7 +28465,7 @@ var init_surfaceRules = __esmMin((() => {
27764
28465
  var init_generateHeaderNavLinkStyles = __esmMin((() => {
27765
28466
  init_generateNavLinkCSS();
27766
28467
  init_siteChromeNavPreferences();
27767
- init_effectiveNavLinkStyle$1();
28468
+ init_effectiveNavLinkStyle();
27768
28469
  init_rawStyleFields();
27769
28470
  }));
27770
28471
  //#endregion
@@ -27794,48 +28495,14 @@ var init_generateHeaderCss = __esmMin((() => {
27794
28495
  var init_header = __esmMin((() => {
27795
28496
  init_generateHeaderCss();
27796
28497
  init_rootPaint();
27797
- init_effectiveNavLinkStyle$1();
27798
- init_openingForegroundProjection();
27799
- }));
27800
- //#endregion
27801
- //#region ../theme-core/src/footer/effectiveNavLinkStyle.ts
27802
- function effectiveFooterNavLinkStyle(footer) {
27803
- if (!footer) return null;
27804
- if (footer.navLinkStyle) return footer.navLinkStyle;
27805
- const basePreset = getNavLinkPreset(footer.navStyle ?? "minimal");
27806
- if (!basePreset) return null;
27807
- return {
27808
- ...basePreset,
27809
- fontWeight: footer.navWeight ?? basePreset.fontWeight,
27810
- colorToken: footer.navColor?.trim() || basePreset.colorToken
27811
- };
27812
- }
27813
- function footerForegroundCandidates(footer, proseHoverCandidate) {
27814
- if (!footer) return {};
27815
- const style = effectiveFooterNavLinkStyle(footer);
27816
- return {
27817
- text: footer.background?.textColor,
27818
- link: style?.colorToken ?? footer.navColor ?? footer.background?.textColor,
27819
- linkHover: navLinkOwnsHoverForeground(style) ? proseHoverCandidate : navLinkHoverColorCandidate(style)
27820
- };
27821
- }
27822
- var init_effectiveNavLinkStyle = __esmMin((() => {
27823
- init_presets$1();
27824
- init_types$5();
27825
- }));
27826
- //#endregion
27827
- //#region ../theme-core/src/footer/generateFooterCss.ts
27828
- var init_generateFooterCss = __esmMin((() => {
27829
- init_resolver$2();
27830
- init_generateNavLinkCSS();
27831
28498
  init_effectiveNavLinkStyle();
27832
- init_rawStyleFields();
28499
+ init_openingForegroundProjection();
27833
28500
  }));
27834
28501
  //#endregion
27835
28502
  //#region ../theme-core/src/footer/index.ts
27836
28503
  var init_footer = __esmMin((() => {
27837
28504
  init_generateFooterCss();
27838
- init_effectiveNavLinkStyle();
28505
+ init_effectiveNavLinkStyle$1();
27839
28506
  }));
27840
28507
  //#endregion
27841
28508
  //#region ../theme-core/src/layout/boundaryCss.ts
@@ -27851,7 +28518,7 @@ var init_generateLayoutCss = __esmMin((() => {
27851
28518
  }));
27852
28519
  //#endregion
27853
28520
  //#region ../theme-core/src/layout/index.ts
27854
- var init_layout$3 = __esmMin((() => {
28521
+ var init_layout$2 = __esmMin((() => {
27855
28522
  init_generateLayoutCss();
27856
28523
  }));
27857
28524
  //#endregion
@@ -28483,7 +29150,7 @@ var init_buildThemeRuntime = __esmMin((() => {
28483
29150
  init_generateInputCss();
28484
29151
  init_header();
28485
29152
  init_footer();
28486
- init_layout$3();
29153
+ init_layout$2();
28487
29154
  init_status();
28488
29155
  init_typography$1();
28489
29156
  init_tokens();
@@ -33950,7 +34617,12 @@ function resolveRuntimeSectionSurface(value, context, options) {
33950
34617
  }
33951
34618
  function arrangementSurfaceInk(foreground, context) {
33952
34619
  if (context.data?._lookSlots === void 0) return {};
33953
- const decorations = surfaceDecorationColors(foreground, context.theme.palette);
34620
+ return surfaceInkStyles(foreground, context.theme.palette);
34621
+ }
34622
+ /** Decoration roles already resolved by the surface owner, shared with footer arrangements. */
34623
+ function surfaceInkStyles(foreground, palette) {
34624
+ if (foreground.kind === "unknown") return {};
34625
+ const decorations = surfaceDecorationColors(foreground, palette);
33954
34626
  return {
33955
34627
  "--rb-surface-muted-color": foreground.roles.muted ?? foreground.roles.text,
33956
34628
  ...decorations ? {
@@ -34468,51 +35140,54 @@ var init_boxStyles = __esmMin((() => {
34468
35140
  }));
34469
35141
  //#endregion
34470
35142
  //#region ../blocks/src/system/node/fragments/responsiveTwoColumn.ts
34471
- function responsiveTwoColumn({ image, text, ratioFrom, imagePositionFrom, gapClassName = "rb-gap-6", gapFrom, gapFallback = "comfortable", containerClassName = "rb-flex rb-flex-col rb-md-flex-row", imageWrapperClassName = "rb-w-full rb-shrink-0", textWrapperClassName = "rb-w-full rb-min-w-0 rb-flex-1" }) {
34472
- const baseClass = !gapFrom ? `${containerClassName} ${gapClassName}`.trim() : containerClassName;
34473
- const props = { className: { $bind: {
34474
- from: imagePositionFrom,
34475
- transforms: [{
34476
- id: "ui.twoColumnContainerClass",
34477
- options: {
34478
- base: baseClass,
34479
- reverseClass: "rb-md-flex-row-reverse"
34480
- }
34481
- }],
34482
- fallback: baseClass
34483
- } } };
34484
- if (gapFrom) props.style = { gap: { $bind: {
34485
- from: gapFrom,
34486
- transforms: [{
34487
- id: "boxStyles.semanticGapValue",
34488
- options: { fallback: gapFallback }
34489
- }],
34490
- fallback: GAP_VALUE_MAP[gapFallback]
34491
- } } };
34492
- return el$1("div", props, [el$1("div", {
34493
- className: imageWrapperClassName,
34494
- style: { flexBasis: { $bind: {
34495
- from: ratioFrom,
35143
+ /** The shared two-column shell keeps Look hooks opt-in and absent for legacy content. */
35144
+ function responsiveTwoColumn(config) {
35145
+ return el$1("div", twoColumnProps(config), [twoColumnWrapper(config, "image", config.image), twoColumnWrapper(config, "text", config.text)]);
35146
+ }
35147
+ function twoColumnProps(config) {
35148
+ const base = `${config.containerClassName ?? "rb-flex rb-flex-col rb-md-flex-row"} ${config.gapFrom ? "" : config.gapClassName ?? "rb-gap-6"}`.trim();
35149
+ const fallback = config.gapFallback ?? "comfortable";
35150
+ return {
35151
+ ...config.lookSlots ? lookSlot("frame") : {},
35152
+ className: { $bind: {
35153
+ from: config.imagePositionFrom,
34496
35154
  transforms: [{
34497
- id: "ui.twoColumnFlexBasis",
34498
- options: { side: "image" }
35155
+ id: "ui.twoColumnContainerClass",
35156
+ options: {
35157
+ base,
35158
+ reverseClass: "rb-md-flex-row-reverse"
35159
+ }
34499
35160
  }],
34500
- fallback: "50%"
34501
- } } }
34502
- }, [image]), el$1("div", {
34503
- className: textWrapperClassName,
35161
+ fallback: base
35162
+ } },
35163
+ ...config.gapFrom ? { style: { gap: { $bind: {
35164
+ from: config.gapFrom,
35165
+ transforms: [{
35166
+ id: "boxStyles.semanticGapValue",
35167
+ options: { fallback }
35168
+ }],
35169
+ fallback: GAP_VALUE_MAP[fallback]
35170
+ } } } } : {}
35171
+ };
35172
+ }
35173
+ function twoColumnWrapper(config, side, child) {
35174
+ const className = side === "image" ? config.imageWrapperClassName ?? "rb-w-full rb-shrink-0" : config.textWrapperClassName ?? "rb-w-full rb-min-w-0 rb-flex-1";
35175
+ return el$1("div", {
35176
+ ...config.lookSlots ? lookSlot(side === "image" ? "media" : "copy") : {},
35177
+ className,
34504
35178
  style: { flexBasis: { $bind: {
34505
- from: ratioFrom,
35179
+ from: config.ratioFrom,
34506
35180
  transforms: [{
34507
35181
  id: "ui.twoColumnFlexBasis",
34508
- options: { side: "text" }
35182
+ options: { side }
34509
35183
  }],
34510
35184
  fallback: "50%"
34511
35185
  } } }
34512
- }, [text])]);
35186
+ }, [child]);
34513
35187
  }
34514
35188
  var init_responsiveTwoColumn = __esmMin((() => {
34515
35189
  init_builder$1();
35190
+ init_lookSlot();
34516
35191
  init_boxStyles();
34517
35192
  }));
34518
35193
  //#endregion
@@ -34723,6 +35398,51 @@ var init_sectionState$1 = __esmMin((() => {
34723
35398
  //#region ../blocks/src/system/node/fragments/headingDecoration.ts
34724
35399
  var init_headingDecoration = __esmMin((() => {}));
34725
35400
  //#endregion
35401
+ //#region ../blocks/src/system/node/fragments/sectionHead.ts
35402
+ function sectionHeaderLayoutNodes(options = {}) {
35403
+ const headingNode = text({
35404
+ as: "h2",
35405
+ ...lookSlot("heading")
35406
+ }, bind$1("content.heading"), when("content.heading", { authoringPresence: recoverEmptyHeadingWhenActive }));
35407
+ const descriptionNode = richText({
35408
+ className: "rb-prose rb-max-w-none",
35409
+ ...lookSlot("intro")
35410
+ }, bind$1("content.description"), when("content.description", { authoringPresence: recoverEmptyDescriptionWhenActive }));
35411
+ if (options.splitClassName) return [el$1("div", {
35412
+ className: options.splitClassName,
35413
+ ...lookSlot("head")
35414
+ }, [headingNode, descriptionNode])];
35415
+ return [headingNode, descriptionNode];
35416
+ }
35417
+ var recoverEmptyHeadingWhenActive, recoverEmptyDescriptionWhenActive, sectionHeaderFields;
35418
+ var init_sectionHead = __esmMin((() => {
35419
+ init_lookSlot();
35420
+ init_builder$1();
35421
+ recoverEmptyHeadingWhenActive = {
35422
+ kind: "recover-empty-when-active",
35423
+ placeholder: "Add heading"
35424
+ };
35425
+ recoverEmptyDescriptionWhenActive = {
35426
+ kind: "recover-empty-when-active",
35427
+ placeholder: "Add description"
35428
+ };
35429
+ sectionHeaderFields = (defaultHeading, introLabel = "Description") => [{
35430
+ id: "heading",
35431
+ type: "text",
35432
+ label: "Heading",
35433
+ description: "Main heading for the section",
35434
+ required: false,
35435
+ multiline: false,
35436
+ ...defaultHeading === void 0 ? {} : { defaultValue: defaultHeading }
35437
+ }, {
35438
+ id: "description",
35439
+ type: "richText",
35440
+ label: introLabel,
35441
+ description: "Optional introductory text",
35442
+ required: false
35443
+ }];
35444
+ }));
35445
+ //#endregion
34726
35446
  //#region ../blocks/src/system/node/fragments/index.ts
34727
35447
  var init_fragments$1 = __esmMin((() => {
34728
35448
  init_backgroundLayer();
@@ -34744,6 +35464,7 @@ var init_fragments$1 = __esmMin((() => {
34744
35464
  init_classNameBinding();
34745
35465
  init_eyebrow();
34746
35466
  init_headingDecoration();
35467
+ init_sectionHead();
34747
35468
  }));
34748
35469
  //#endregion
34749
35470
  //#region ../blocks/src/system/fragments/types.ts
@@ -35057,6 +35778,7 @@ var init_toRepeaterSchema = __esmMin((() => {}));
35057
35778
  //#region ../blocks/src/system/fragments/library/bodyCopy.ts
35058
35779
  var bodyCopyFragment;
35059
35780
  var init_bodyCopy = __esmMin((() => {
35781
+ init_lookSlot();
35060
35782
  init_types$3();
35061
35783
  init_builder$1();
35062
35784
  bodyCopyFragment = defineFragment$2({
@@ -35095,6 +35817,7 @@ var init_bodyCopy = __esmMin((() => {
35095
35817
  ],
35096
35818
  layout: stack({
35097
35819
  gap: "md",
35820
+ ...lookSlot("copy"),
35098
35821
  className: "body-copy-container",
35099
35822
  align: { $bind: {
35100
35823
  from: "content.alignment",
@@ -35103,6 +35826,7 @@ var init_bodyCopy = __esmMin((() => {
35103
35826
  } }
35104
35827
  }, [text({
35105
35828
  as: "h2",
35829
+ ...lookSlot("heading"),
35106
35830
  className: { $bind: {
35107
35831
  from: "content.alignment",
35108
35832
  transforms: [{
@@ -35111,14 +35835,22 @@ var init_bodyCopy = __esmMin((() => {
35111
35835
  }],
35112
35836
  fallback: "body-copy-heading"
35113
35837
  } }
35114
- }, when("content.heading"), bind$1("content.heading")), richText({ className: { $bind: {
35115
- from: "content.alignment",
35116
- transforms: [{
35117
- id: "ui.bodyClassFromAlignment",
35118
- options: { base: "body-copy-body rb-prose rb-max-w-none" }
35119
- }],
35120
- fallback: "body-copy-body rb-prose rb-max-w-none"
35121
- } } }, bind$1("content.body"))])
35838
+ }, when("content.heading", { authoringPresence: {
35839
+ kind: "recover-empty-when-active",
35840
+ placeholder: "Add heading"
35841
+ } }), bind$1("content.heading")), richText({
35842
+ ...lookSlot("item-body"),
35843
+ leadParagraphSlot: { $bind: { from: "content._lookSlots.lede" } },
35844
+ lookSlots: { $bind: { from: "content._lookSlots" } },
35845
+ className: { $bind: {
35846
+ from: "content.alignment",
35847
+ transforms: [{
35848
+ id: "ui.bodyClassFromAlignment",
35849
+ options: { base: "body-copy-body rb-prose rb-max-w-none" }
35850
+ }],
35851
+ fallback: "body-copy-body rb-prose rb-max-w-none"
35852
+ } }
35853
+ }, bind$1("content.body"))])
35122
35854
  });
35123
35855
  }));
35124
35856
  //#endregion
@@ -36151,6 +36883,7 @@ var init_testimonialsCarousel = __esmMin((() => {
36151
36883
  //#region ../blocks/src/system/fragments/library/formCopy.ts
36152
36884
  var formCopyFragment;
36153
36885
  var init_formCopy = __esmMin((() => {
36886
+ init_lookSlot();
36154
36887
  init_types$3();
36155
36888
  init_builder$1();
36156
36889
  formCopyFragment = defineFragment$2({
@@ -36170,8 +36903,19 @@ var init_formCopy = __esmMin((() => {
36170
36903
  }],
36171
36904
  layout: [text({
36172
36905
  as: "h2",
36906
+ ...lookSlot("heading"),
36173
36907
  className: "form-copy-title"
36174
- }, when("content.title"), bind$1("content.title")), richText({ className: "form-copy-intro rb-prose rb-max-w-none" }, when("content.intro"), bind$1("content.intro"))]
36908
+ }, when("content.title", { authoringPresence: {
36909
+ kind: "recover-empty-when-active",
36910
+ placeholder: "Add heading"
36911
+ } }), bind$1("content.title")), richText({
36912
+ className: "form-copy-intro rb-prose rb-max-w-none",
36913
+ ...lookSlot("intro"),
36914
+ leadParagraphSlot: { $bind: { from: "content._lookSlots.lede" } }
36915
+ }, when("content.intro", { authoringPresence: {
36916
+ kind: "recover-empty-when-active",
36917
+ placeholder: "Add introduction"
36918
+ } }), bind$1("content.intro"))]
36175
36919
  });
36176
36920
  }));
36177
36921
  //#endregion
@@ -36226,6 +36970,7 @@ var init_formEmbed = __esmMin((() => {
36226
36970
  }
36227
36971
  ],
36228
36972
  layout: [form(withApiBindings$1({
36973
+ lookSlots: { $bind: { from: "content._lookSlots" } },
36229
36974
  spamProtectionEnabled: { $bind: { from: "$root.spamProtectionEnabled" } },
36230
36975
  submitLabel: { $bind: { from: "submitLabel" } },
36231
36976
  successMessage: { $bind: { from: "successMessage" } }
@@ -36591,6 +37336,7 @@ var init_faqAccordion = __esmMin((() => {
36591
37336
  //#region ../blocks/src/system/fragments/library/newsletterCopy.ts
36592
37337
  var newsletterCopyFragment;
36593
37338
  var init_newsletterCopy = __esmMin((() => {
37339
+ init_lookSlot();
36594
37340
  init_types$3();
36595
37341
  init_builder$1();
36596
37342
  newsletterCopyFragment = defineFragment$2({
@@ -36611,8 +37357,18 @@ var init_newsletterCopy = __esmMin((() => {
36611
37357
  }],
36612
37358
  layout: [text({
36613
37359
  as: "h2",
36614
- className: "newsletter-copy-title"
36615
- }, when("content.title"), bind$1("content.title")), richText({ className: "newsletter-copy-subtitle rb-prose rb-max-w-none" }, when("content.subtitle"), bind$1("content.subtitle"))]
37360
+ className: "newsletter-copy-title",
37361
+ ...lookSlot("heading")
37362
+ }, when("content.title", { authoringPresence: {
37363
+ kind: "recover-empty-when-active",
37364
+ placeholder: "Add heading"
37365
+ } }), bind$1("content.title")), richText({
37366
+ className: "newsletter-copy-subtitle rb-prose rb-max-w-none",
37367
+ ...lookSlot("intro")
37368
+ }, when("content.subtitle", { authoringPresence: {
37369
+ kind: "recover-empty-when-active",
37370
+ placeholder: "Add introduction"
37371
+ } }), bind$1("content.subtitle"))]
36616
37372
  });
36617
37373
  }));
36618
37374
  //#endregion
@@ -36681,6 +37437,7 @@ var init_newsletterForm = __esmMin((() => {
36681
37437
  }
36682
37438
  ],
36683
37439
  layout: [el$1("newsletter-form", withApiBindings$1({
37440
+ lookSlots: { $bind: { from: "content._lookSlots" } },
36684
37441
  source: { $bind: {
36685
37442
  from: "mailingListSource",
36686
37443
  fallback: "block"
@@ -38285,25 +39042,19 @@ var init_intro = __esmMin((() => {
38285
39042
  }));
38286
39043
  //#endregion
38287
39044
  //#region ../blocks/src/system/blocks/body-text.ts
38288
- var bodyCopyComposition, proseLayout, introLayout, narrowLayout, bodyTextManifest, bodyTextBlockDefinition;
39045
+ var bodyCopyComposition, bodyTextLayout, bodyTextManifest, bodyTextBlockDefinition;
38289
39046
  var init_body_text = __esmMin((() => {
38290
39047
  init_styledSection();
38291
39048
  init_defineBlock();
38292
39049
  init_fragments();
39050
+ init_lookSlot();
38293
39051
  init_builder$1();
38294
39052
  bodyCopyComposition = composeFragments([{ fragment: bodyCopyFragment }]);
38295
- proseLayout = styledSection({
38296
- children: stack({ className: "rb-container" }, bodyCopyComposition.layout),
38297
- spacing: "medium",
38298
- baseClass: ""
38299
- });
38300
- introLayout = styledSection({
38301
- children: stack({ className: "rb-container" }, bodyCopyComposition.layout),
38302
- spacing: "medium",
38303
- baseClass: ""
38304
- });
38305
- narrowLayout = styledSection({
38306
- children: stack({ className: "rb-container" }, bodyCopyComposition.layout),
39053
+ bodyTextLayout = styledSection({
39054
+ children: stack({
39055
+ className: "rb-container",
39056
+ ...lookSlot("frame")
39057
+ }, bodyCopyComposition.layout),
38307
39058
  spacing: "medium",
38308
39059
  baseClass: ""
38309
39060
  });
@@ -38317,11 +39068,11 @@ var init_body_text = __esmMin((() => {
38317
39068
  fragment: bodyCopyFragment,
38318
39069
  fieldPriority: 0
38319
39070
  }],
38320
- layout: proseLayout,
39071
+ layout: bodyTextLayout,
38321
39072
  variants: {
38322
- prose: proseLayout,
38323
- intro: introLayout,
38324
- narrow: narrowLayout
39073
+ prose: bodyTextLayout,
39074
+ intro: bodyTextLayout,
39075
+ narrow: bodyTextLayout
38325
39076
  },
38326
39077
  variantMeaning: { kind: "arrangement" },
38327
39078
  defaultVariant: "prose",
@@ -38807,6 +39558,57 @@ var init_single_button = __esmMin((() => {
38807
39558
  singleButtonBlockDefinition = { manifest: singleButtonManifest };
38808
39559
  }));
38809
39560
  //#endregion
39561
+ //#region ../blocks/src/system/runtime/lookSurfaces.ts
39562
+ var isPlainObject$2, lookListPresentationSchemaShape;
39563
+ var init_lookSurfaces = __esmMin((() => {
39564
+ init_surfaces();
39565
+ init_site_styles();
39566
+ isPlainObject$2 = (value) => typeof value === "object" && value !== null && !Array.isArray(value);
39567
+ lookListPresentationSchemaShape = {
39568
+ sectionAction: z.object({
39569
+ label: z.string(),
39570
+ href: z.string()
39571
+ }).optional(),
39572
+ actionSize: z.enum([
39573
+ "sm",
39574
+ "md",
39575
+ "lg"
39576
+ ]).optional(),
39577
+ itemActionStyle: z.enum(["button", "link"]).optional(),
39578
+ itemRoles: z.object({
39579
+ container: z.enum([
39580
+ "card",
39581
+ "statement",
39582
+ "highlight"
39583
+ ]).optional(),
39584
+ items: z.enum([
39585
+ "card",
39586
+ "statement",
39587
+ "highlight"
39588
+ ]).optional(),
39589
+ at: z.partialRecord(z.enum([
39590
+ "first",
39591
+ "last",
39592
+ "middle",
39593
+ "odd",
39594
+ "even"
39595
+ ]), z.enum([
39596
+ "card",
39597
+ "statement",
39598
+ "highlight"
39599
+ ])).optional()
39600
+ }).optional(),
39601
+ roleSurfaces: z.record(z.enum([
39602
+ "card",
39603
+ "statement",
39604
+ "highlight"
39605
+ ]), z.custom((value) => isPlainObject$2(value) && (value.kind === "inherit" || value.kind === "owned"))).optional(),
39606
+ panelHeading: z.string().optional(),
39607
+ lookSlots: z.partialRecord(z.enum(arrangementSlotNames), z.enum(arrangementSlotNames)).optional(),
39608
+ itemSurfaces: z.record(z.string(), z.custom((value) => isPlainObject$2(value) && (value.kind === "inherit" || value.kind === "owned"))).optional()
39609
+ };
39610
+ }));
39611
+ //#endregion
38810
39612
  //#region ../blocks/src/contracts/runtime.ts
38811
39613
  function decodeSuccess(value) {
38812
39614
  return {
@@ -38886,21 +39688,35 @@ var init_form_layout = __esmMin((() => {}));
38886
39688
  //#region ../blocks/src/system/runtime/nodes/form.interactive.ts
38887
39689
  function buildFormDisplay(source) {
38888
39690
  const form = source.value ?? null;
38889
- const fields = form?.schemaJson?.fields;
38890
- const groups = Array.isArray(fields) ? groupFormFields(fields) : [];
39691
+ const fields = formDisplayFields(form);
38891
39692
  return {
38892
39693
  kind: "form",
38893
- state: form ? "ready" : "missing",
39694
+ ...source.lookSlots ? { lookSlots: source.lookSlots } : {},
39695
+ state: fields.state,
38894
39696
  className: source.className ?? null,
38895
- formId: form?.id ?? null,
39697
+ formId: fields.formId,
38896
39698
  submitLabel: source.submitLabel?.trim() || "Submit",
38897
39699
  successMessage: source.successMessage ?? null,
38898
39700
  form,
38899
- groups
39701
+ groups: fields.groups
39702
+ };
39703
+ }
39704
+ function formDisplayFields(form) {
39705
+ if (!form) return {
39706
+ state: "missing",
39707
+ formId: null,
39708
+ groups: []
39709
+ };
39710
+ const fields = form.schemaJson?.fields;
39711
+ return {
39712
+ state: "ready",
39713
+ formId: form.id,
39714
+ groups: Array.isArray(fields) ? groupFormFields(fields) : []
38900
39715
  };
38901
39716
  }
38902
39717
  var formFieldSchema, formRecordSchema, formFieldGroupSchema, formSourceSchema, formDisplaySchema, formHydrationSchema, formRenderSchema, formBlockRuntime;
38903
39718
  var init_form_interactive = __esmMin((() => {
39719
+ init_lookSurfaces();
38904
39720
  init_islands();
38905
39721
  init_runtime$1();
38906
39722
  init_form_layout();
@@ -38938,6 +39754,7 @@ var init_form_interactive = __esmMin((() => {
38938
39754
  fields: z.tuple([formFieldSchema, formFieldSchema])
38939
39755
  })]);
38940
39756
  formSourceSchema = z.object({
39757
+ lookSlots: lookListPresentationSchemaShape.lookSlots,
38941
39758
  value: formRecordSchema.optional(),
38942
39759
  siteId: z.string().optional(),
38943
39760
  apiBaseUrl: z.string().optional(),
@@ -38947,6 +39764,7 @@ var init_form_interactive = __esmMin((() => {
38947
39764
  spamProtectionEnabled: z.boolean().optional()
38948
39765
  });
38949
39766
  formDisplaySchema = z.object({
39767
+ lookSlots: lookListPresentationSchemaShape.lookSlots,
38950
39768
  kind: z.literal("form"),
38951
39769
  state: z.enum(["missing", "ready"]),
38952
39770
  className: z.string().nullable(),
@@ -38987,9 +39805,16 @@ function isNodeDefinitionArray$1(layout) {
38987
39805
  }
38988
39806
  function createFormLayout(variant) {
38989
39807
  if (variant === "two-column") return styledSection({
38990
- children: el$1("div", { className: "rb-container" }, [el$1("div", { className: "rb-form-two-column rb-grid rb-grid-cols-1 rb-gap-8 rb-lg-grid-cols-2 rb-lg-items-start" }, [stack({
39808
+ children: el$1("div", {
39809
+ className: "rb-container",
39810
+ ...lookSlot("layout")
39811
+ }, [el$1("div", {
39812
+ className: "rb-form-two-column rb-grid rb-grid-cols-1 rb-gap-8 rb-lg-grid-cols-2 rb-lg-items-start",
39813
+ ...lookSlot("frame")
39814
+ }, [stack({
38991
39815
  gap: "md",
38992
- className: "rb-form-copy-column"
39816
+ className: "rb-form-copy-column",
39817
+ ...lookSlot("copy")
38993
39818
  }, [copyLayout]), formSurface])]),
38994
39819
  baseClass: "",
38995
39820
  spacing: "medium",
@@ -39006,21 +39831,24 @@ function createFormLayout(variant) {
39006
39831
  background: "surface"
39007
39832
  });
39008
39833
  }
39009
- var formComposition, copyLayout, formSurface, formLayout, twoColumnFormLayout, dataLoaders$1, formManifest, formDataSchema, formBlockDefinition;
39834
+ var formComposition, copyLayout, embedLayout$1, formSurface, formLayout, twoColumnFormLayout, dataLoaders$1, formManifest, formDataSchema, formBlockDefinition;
39010
39835
  var init_form = __esmMin((() => {
39011
39836
  init_fragments$1();
39012
39837
  init_styledSection();
39013
39838
  init_defineBlock();
39014
39839
  init_fragments();
39015
39840
  init_form_interactive();
39841
+ init_lookSlot();
39016
39842
  init_builder$1();
39017
39843
  formComposition = composeFragments([{ fragment: formCopyFragment }, { fragment: formEmbedFragment }]);
39018
- copyLayout = fragmentLayoutNode$1(formCopyFragment.layout);
39844
+ copyLayout = props(lookSlot("head"))(fragmentLayoutNode$1(formCopyFragment.layout));
39845
+ embedLayout$1 = fragmentLayoutNode$1(formEmbedFragment.layout);
39019
39846
  formSurface = styledContainer({
39847
+ rootProps: lookSlot("panel"),
39020
39848
  bindFrom: "_containerStyles",
39021
39849
  constrainWidth: false,
39022
39850
  baseClassName: "rb-form-surface rb-relative rb-isolate rb-overflow-visible",
39023
- children: fragmentLayoutNode$1(formEmbedFragment.layout)
39851
+ children: embedLayout$1
39024
39852
  });
39025
39853
  formLayout = createFormLayout("default");
39026
39854
  twoColumnFormLayout = createFormLayout("two-column");
@@ -39033,6 +39861,15 @@ var init_form = __esmMin((() => {
39033
39861
  description: "Renders a saved form definition with server-side submit.",
39034
39862
  includeContainerStyles: true,
39035
39863
  fragments: [{ fragment: formCopyFragment }, { fragment: formEmbedFragment }],
39864
+ additionalFields: [{
39865
+ id: "archFrame",
39866
+ type: "boolean",
39867
+ label: "Arch frame",
39868
+ ui: {
39869
+ intent: "display",
39870
+ hidden: true
39871
+ }
39872
+ }],
39036
39873
  layout: formLayout,
39037
39874
  variants: {
39038
39875
  default: formLayout,
@@ -39579,7 +40416,7 @@ function getNavStyleClasses(navStyle) {
39579
40416
  default: return baseClasses;
39580
40417
  }
39581
40418
  }
39582
- function isPlainObject$2(value) {
40419
+ function isPlainObject$1(value) {
39583
40420
  return Boolean(value) && typeof value === "object" && !Array.isArray(value);
39584
40421
  }
39585
40422
  function readString(obj, key) {
@@ -39588,7 +40425,7 @@ function readString(obj, key) {
39588
40425
  }
39589
40426
  function resolveGeneratedHeroLayoutStyles(content) {
39590
40427
  const raw = content._heroLayoutStyles;
39591
- return isPlainObject$2(raw) ? raw : null;
40428
+ return isPlainObject$1(raw) ? raw : null;
39592
40429
  }
39593
40430
  function readHeroLayoutString(content, generatedKey, fallbackKey = generatedKey) {
39594
40431
  const explicitValue = readString(content, fallbackKey);
@@ -39762,7 +40599,7 @@ var init_ui = __esmMin((() => {
39762
40599
  summary: "Resolve hero content wrapper className from alignment + max width controls",
39763
40600
  schema: heroContentWrapperClassSchema,
39764
40601
  run: (value, options, context) => {
39765
- const content = isPlainObject$2(value) ? value : isPlainObject$2(context.data) ? context.data : {};
40602
+ const content = isPlainObject$1(value) ? value : isPlainObject$1(context.data) ? context.data : {};
39766
40603
  const alignment = resolveHeroContentAlignment(content);
39767
40604
  const maxWidth = resolveHeroContentMaxWidth(content);
39768
40605
  const typographyScale = resolveHeroTypographyScale(content);
@@ -39784,7 +40621,7 @@ var init_ui = __esmMin((() => {
39784
40621
  kind: "string",
39785
40622
  summary: "Map hero contentAlignment to CTA row justify value",
39786
40623
  run: (value, _options, context) => {
39787
- const alignment = resolveHeroContentAlignment(isPlainObject$2(value) ? value : isPlainObject$2(context.data) ? context.data : {});
40624
+ const alignment = resolveHeroContentAlignment(isPlainObject$1(value) ? value : isPlainObject$1(context.data) ? context.data : {});
39788
40625
  return alignment === "left" ? "start" : alignment === "right" ? "end" : "center";
39789
40626
  }
39790
40627
  };
@@ -39793,7 +40630,7 @@ var init_ui = __esmMin((() => {
39793
40630
  kind: "string",
39794
40631
  summary: "Map hero verticalAlignment to stack justify value",
39795
40632
  run: (value, _options, context) => {
39796
- const vertical = resolveHeroVerticalAlignment(isPlainObject$2(value) ? value : isPlainObject$2(context.data) ? context.data : {});
40633
+ const vertical = resolveHeroVerticalAlignment(isPlainObject$1(value) ? value : isPlainObject$1(context.data) ? context.data : {});
39797
40634
  return vertical === "top" ? "start" : vertical === "bottom" ? "end" : "center";
39798
40635
  }
39799
40636
  };
@@ -39804,7 +40641,7 @@ var init_ui = __esmMin((() => {
39804
40641
  summary: "Append align-items class for hero split layouts based on verticalAlignment",
39805
40642
  schema: heroGridClassFromVerticalAlignmentSchema,
39806
40643
  run: (value, options, context) => {
39807
- const vertical = resolveHeroVerticalAlignment(isPlainObject$2(value) ? value : isPlainObject$2(context.data) ? context.data : {});
40644
+ const vertical = resolveHeroVerticalAlignment(isPlainObject$1(value) ? value : isPlainObject$1(context.data) ? context.data : {});
39808
40645
  const itemsClass = vertical === "top" ? "rb-items-start" : vertical === "bottom" ? "rb-items-end" : "rb-items-center";
39809
40646
  return joinClasses$1([options.base, itemsClass]);
39810
40647
  }
@@ -40093,6 +40930,30 @@ var init_ui = __esmMin((() => {
40093
40930
  ];
40094
40931
  }));
40095
40932
  //#endregion
40933
+ //#region ../blocks/src/system/transforms/registry/footerArrangement.ts
40934
+ /** A centred base without authored bar paint inherits its measured surface line. */
40935
+ function footerBottomBarBorderColorStyle(footer) {
40936
+ return footer?.variant === "centred" && !footer.bottomBar ? { borderColor: "var(--rb-surface-line-color)" } : borderColorStyle(footer?.bottomBar?.borderTop?.colorToken ?? "border");
40937
+ }
40938
+ var footerBrandArrangementTransform, footerModuleInkStyleTransform;
40939
+ var init_footerArrangement = __esmMin((() => {
40940
+ init_colorStyles();
40941
+ init_core();
40942
+ footerBrandArrangementTransform = {
40943
+ id: "layout.footerBrandArrangement",
40944
+ kind: "string",
40945
+ run: (value) => {
40946
+ const module = asPartialObject(value);
40947
+ return module?.kind === "brand" ? module.slots ? "centred" : "row" : void 0;
40948
+ }
40949
+ };
40950
+ footerModuleInkStyleTransform = {
40951
+ id: "layout.footerModuleInkStyle",
40952
+ kind: "formatter",
40953
+ run: (value, options) => value === "centred" ? void 0 : textColorStyle(asPartialObject(options)?.opacity === 70 ? "text/70" : "text/80")
40954
+ };
40955
+ }));
40956
+ //#endregion
40096
40957
  //#region ../blocks/src/system/runtime/header/runtimeContract.ts
40097
40958
  function isHeaderScrollRuntimeEnabled(header) {
40098
40959
  const parsed = headerScrollThemeInputSchema.safeParse(header);
@@ -40194,20 +41055,15 @@ function measuredFooterBackdrop(footer, palette) {
40194
41055
  const foreground = resolveFooterRootForeground(footer, palette);
40195
41056
  return foreground.kind === "known" && foreground.provenance.kind === "measured" ? foreground.provenance.backdropHex : null;
40196
41057
  }
40197
- function shouldShowFooterLogoText(footer) {
40198
- if (!footer) return false;
40199
- const explicit = footer.logo?.showLogoText;
40200
- const legacy = footer.showLogoText === true;
40201
- return explicit === true || explicit === void 0 && legacy;
40202
- }
40203
41058
  function extractBackgroundColorToken(background, fallback) {
40204
41059
  if (!background || background.type === "color") return background?.color ?? fallback;
40205
41060
  if (background.type === "gradient" && background.gradient) return background.gradient.stops[0]?.color ?? fallback;
40206
41061
  if (background.type === "image") return "neutral-900";
40207
41062
  return fallback;
40208
41063
  }
40209
- var joinClasses, headerLogoClassSchema, headerLogoClassTransform, headerLogoMediaClassTransform, headerLogoTextVisibleTransform, maxWidthClassSchema, maxWidthClassTransform, headerRootClassSchema, headerRootClassTransform, footerRootClassSchema, footerRootClassTransform, headerRootStyleTransform, headerSectionBackgroundTransform, footerRootStyleTransform, footerSpacingClassXMap, footerSpacingClassYMap, footerBottomBarClassSchema, footerBottomBarClassTransform, footerBottomBarContainerClassSchema, footerBottomBarContainerClassTransform, footerBottomBarStyleTransform, footerSplitMainClassSchema, footerSplitMainClassTransform, footerLogoClassSchema, footerLogoClassTransform, footerLogoMediaClassSchema, footerLogoMediaClassTransform, footerLogoTextVisibleTransform, layoutTransforms;
40210
- var init_layout$2 = __esmMin((() => {
41064
+ var joinClasses, headerLogoClassSchema, headerLogoClassTransform, headerLogoMediaClassTransform, headerLogoTextVisibleTransform, maxWidthClassSchema, maxWidthClassTransform, headerRootClassSchema, headerRootClassTransform, footerRootClassSchema, footerRootClassTransform, headerRootStyleTransform, headerSectionBackgroundTransform, footerRootStyleTransform, footerSpacingClassXMap, footerSpacingClassYMap, footerBottomBarClassSchema, footerBottomBarClassTransform, footerBottomBarContainerClassSchema, footerBottomBarContainerClassTransform, footerBottomBarStyleTransform, footerLogoClassSchema, footerLogoClassTransform, layoutTransforms;
41065
+ var init_layout$1 = __esmMin((() => {
41066
+ init_footerArrangement();
40211
41067
  init_schema$2();
40212
41068
  init_core();
40213
41069
  init_colorStyles();
@@ -40372,6 +41228,7 @@ var init_layout$2 = __esmMin((() => {
40372
41228
  }
40373
41229
  }
40374
41230
  styleParts.push(resolvedForegroundStyle(resolveFooterRootForeground(footer, context.theme.palette, context.proseHoverCandidate)));
41231
+ if (footer?.variant === "centred") styleParts.push(surfaceInkStyles(resolveFooterRootForeground(footer, context.theme.palette, context.proseHoverCandidate), context.theme.palette));
40375
41232
  styleParts.push(borderColorStyle("border"));
40376
41233
  return mergeStyles(...styleParts);
40377
41234
  }
@@ -40435,62 +41292,19 @@ var init_layout$2 = __esmMin((() => {
40435
41292
  run: (value, _options, context) => {
40436
41293
  const footer = asPartialObject(value);
40437
41294
  const bottomBar = footer?.bottomBar;
40438
- 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));
40439
- }
40440
- };
40441
- footerSplitMainClassSchema = z.object({
40442
- base: z.string().optional(),
40443
- reverseClass: z.string().optional()
40444
- });
40445
- footerSplitMainClassTransform = {
40446
- id: "layout.footerSplitMainClass",
40447
- kind: "string",
40448
- summary: "Compose split-footer main row classes from footer logo placement",
40449
- schema: footerSplitMainClassSchema,
40450
- run: (value, options) => {
40451
- const placement = asPartialObject(value)?.placement ?? "right";
40452
- const shouldPlaceLogoFirst = placement === "left" || placement === "above";
40453
- const baseClass = shouldPlaceLogoFirst ? "rb-flex rb-w-full rb-flex-col rb-items-start rb-justify-end rb-gap-8 rb-md-flex-row rb-md-items-end" : "rb-flex rb-w-full rb-flex-col rb-items-start rb-justify-between rb-gap-8 rb-md-flex-row rb-md-items-end";
40454
- return joinClasses([options.base ?? baseClass, shouldPlaceLogoFirst ? options.reverseClass ?? "rb-md-flex-row-reverse" : null]);
41295
+ return mergeStyles(bottomBar?.background?.type === "color" ? backgroundColorStyle(bottomBar.background.color ?? "surface") : void 0, footerBottomBarBorderColorStyle(footer), footerBottomBarBorderWidthStyle(bottomBar?.borderTop?.width), footerBottomBarForegroundStyle(footer, context.theme.palette));
40455
41296
  }
40456
41297
  };
40457
- footerLogoClassSchema = z.object({
40458
- base: z.string().optional(),
40459
- requireExplicitShow: z.boolean().optional()
40460
- });
41298
+ footerLogoClassSchema = z.object({ base: z.string().optional() });
40461
41299
  footerLogoClassTransform = {
40462
41300
  id: "layout.footerLogoClass",
40463
41301
  kind: "string",
40464
41302
  summary: "Compose split-footer logo wrapper classes from footer.logo controls",
40465
41303
  schema: footerLogoClassSchema,
40466
41304
  run: (value, options) => {
40467
- const logo = asPartialObject(value);
40468
- const align = logo?.align ?? "end";
40469
- const hiddenClass = options.requireExplicitShow ? logo?.showLogo === true ? null : "rb-hidden" : logo?.showLogo === false ? "rb-hidden" : null;
41305
+ const align = asPartialObject(value)?.align ?? "end";
40470
41306
  const selfAlignClass = align === "start" ? "rb-self-start rb-text-left" : align === "center" ? "rb-self-center rb-text-center" : "rb-self-end rb-text-right";
40471
- return joinClasses([
40472
- options.base ?? "footer-logo rb-inline-flex rb-items-center rb-justify-end rb-gap-3 rb-no-underline rb-transition-opacity rb-hover-opacity-80",
40473
- selfAlignClass,
40474
- hiddenClass
40475
- ]);
40476
- }
40477
- };
40478
- footerLogoMediaClassSchema = z.object({ base: z.string().optional() });
40479
- footerLogoMediaClassTransform = {
40480
- id: "layout.footerLogoMediaClass",
40481
- kind: "string",
40482
- summary: "Compose footer logo image classes from size controls",
40483
- schema: footerLogoMediaClassSchema,
40484
- run: (_value, options) => {
40485
- return joinClasses([options.base ?? "rb-w-auto"]);
40486
- }
40487
- };
40488
- footerLogoTextVisibleTransform = {
40489
- id: "layout.footerLogoTextVisible",
40490
- kind: "formatter",
40491
- summary: "Return whether footer logo text should render",
40492
- run: (value) => {
40493
- return shouldShowFooterLogoText(asPartialObject(value));
41307
+ return joinClasses([options.base ?? "footer-logo rb-inline-flex rb-items-center rb-justify-end rb-gap-3 rb-no-underline rb-transition-opacity rb-hover-opacity-80", selfAlignClass]);
40494
41308
  }
40495
41309
  };
40496
41310
  layoutTransforms = [
@@ -40503,13 +41317,12 @@ var init_layout$2 = __esmMin((() => {
40503
41317
  headerRootStyleTransform,
40504
41318
  headerSectionBackgroundTransform,
40505
41319
  footerRootStyleTransform,
41320
+ footerModuleInkStyleTransform,
41321
+ footerBrandArrangementTransform,
40506
41322
  footerBottomBarClassTransform,
40507
41323
  footerBottomBarContainerClassTransform,
40508
41324
  footerBottomBarStyleTransform,
40509
- footerSplitMainClassTransform,
40510
- footerLogoClassTransform,
40511
- footerLogoMediaClassTransform,
40512
- footerLogoTextVisibleTransform
41325
+ footerLogoClassTransform
40513
41326
  ];
40514
41327
  }));
40515
41328
  //#endregion
@@ -40539,7 +41352,7 @@ var chromeLogoSchema, chromeLogoTransform, chromeLogoTransforms;
40539
41352
  var init_chromeLogo = __esmMin((() => {
40540
41353
  init_surfaces();
40541
41354
  init_core();
40542
- init_layout$2();
41355
+ init_layout$1();
40543
41356
  init_surfaceForegroundStyles();
40544
41357
  init_header();
40545
41358
  chromeLogoSchema = z.object({ surface: z.enum([
@@ -41052,7 +41865,14 @@ var init_site_footer_nav_groups_layout = __esmMin((() => {
41052
41865
  }, [text({
41053
41866
  as: "h3",
41054
41867
  className: "rb-label",
41055
- style: textColorStyle("text/70")
41868
+ "data-slot": { $bind: { from: "content.footerRuntime.slots.group-label" } },
41869
+ style: { $bind: {
41870
+ from: "content.footerRuntime.arrangement",
41871
+ transforms: [{
41872
+ id: "layout.footerModuleInkStyle",
41873
+ options: { opacity: 70 }
41874
+ }]
41875
+ } }
41056
41876
  }, when("group.label"), bind$1("group.label")), stack({
41057
41877
  gap: "sm",
41058
41878
  align: "start",
@@ -41071,7 +41891,7 @@ var init_site_footer_nav_groups_layout = __esmMin((() => {
41071
41891
  }));
41072
41892
  //#endregion
41073
41893
  //#region ../blocks/src/system/blocks/site-footer.ts
41074
- var footerStandardContactBindings, footerMailingListBindings, footerSpamProtectionBinding, brandLogo, navigation, legalNavigation, address, contact, hours, socials, authoredCopy, footerEngagement, platformAttribution, footerGroup, footerMainRegion, footerEngagementRegion, footerBottomRegion, footerLayout, siteFooterManifest, siteFooterBlockDefinition;
41894
+ var footerStandardContactBindings, footerMailingListBindings, footerSpamProtectionBinding, brandMedia, brandTitle, brandLogo, centredBrand, navigation, legalNavigation, address, contact, hours, socials, authoredCopy, footerEngagement, platformAttribution, footerGroup, footerMainRegion, footerEngagementRegion, footerBottomRegion, footerLayout, siteFooterManifest, siteFooterBlockDefinition;
41075
41895
  var init_site_footer = __esmMin((() => {
41076
41896
  init_fragments$1();
41077
41897
  init_builder$1();
@@ -41092,6 +41912,14 @@ var init_site_footer = __esmMin((() => {
41092
41912
  targeting: { $bind: { from: "module.engagement.runtime.targeting" } }
41093
41913
  };
41094
41914
  footerSpamProtectionBinding = { spamProtectionEnabled: { $bind: { from: "$root.spamProtectionEnabled" } } };
41915
+ brandMedia = media({ className: "rb-h-10 rb-w-auto" }, when("module.showLogo", { equals: true }), when("content.logo"), bind$1("content", { transforms: [{
41916
+ id: "layout.chromeLogo",
41917
+ options: { surface: "footer-root" }
41918
+ }] }));
41919
+ brandTitle = text({
41920
+ as: "strong",
41921
+ className: "footer-logo-text rb-nav-text"
41922
+ }, when("module.showTitle", { equals: true }), bind$1("site.title", { fallback: "Your Site" }));
41095
41923
  brandLogo = link({
41096
41924
  href: "/",
41097
41925
  className: { $bind: {
@@ -41102,20 +41930,39 @@ var init_site_footer = __esmMin((() => {
41102
41930
  }],
41103
41931
  fallback: "footer-logo rb-inline-flex rb-items-center rb-gap-3 rb-no-underline"
41104
41932
  } }
41105
- }, [media({ className: { $bind: {
41106
- from: "$root.theme.footer.logo",
41107
- transforms: [{
41108
- id: "layout.footerLogoMediaClass",
41109
- options: { base: "rb-h-10 rb-w-auto" }
41110
- }],
41111
- fallback: "rb-h-10 rb-w-auto"
41112
- } } }, when("module.showLogo", { equals: true }), when("content.logo"), bind$1("content", { transforms: [{
41113
- id: "layout.chromeLogo",
41114
- options: { surface: "footer-root" }
41115
- }] })), text({
41116
- as: "strong",
41117
- className: "footer-logo-text rb-nav-text"
41118
- }, when("module.showTitle", { equals: true }), bind$1("site.title", { fallback: "Your Site" }))], when("module.kind", { equals: "brand" }));
41933
+ }, [brandMedia, brandTitle], (node) => ({
41934
+ ...node,
41935
+ $when: {
41936
+ when: {
41937
+ from: "module",
41938
+ transforms: [{ id: "layout.footerBrandArrangement" }]
41939
+ },
41940
+ equals: "row"
41941
+ }
41942
+ }));
41943
+ centredBrand = stack({
41944
+ gap: "md",
41945
+ align: "center"
41946
+ }, [link({
41947
+ href: "/",
41948
+ "data-slot": { $bind: { from: "module.slots.media" } },
41949
+ className: "footer-logo rb-inline-flex rb-items-center rb-no-underline"
41950
+ }, [brandMedia], when("module.slots.media")), {
41951
+ ...brandTitle,
41952
+ props: {
41953
+ ...brandTitle.props,
41954
+ "data-slot": { $bind: { from: "module.slots.heading" } }
41955
+ }
41956
+ }], (node) => ({
41957
+ ...node,
41958
+ $when: {
41959
+ when: {
41960
+ from: "module",
41961
+ transforms: [{ id: "layout.footerBrandArrangement" }]
41962
+ },
41963
+ equals: "centred"
41964
+ }
41965
+ }));
41119
41966
  navigation = stack({
41120
41967
  gap: "md",
41121
41968
  className: "rb-w-full"
@@ -41140,14 +41987,18 @@ var init_site_footer = __esmMin((() => {
41140
41987
  }, when("module.kind", { equals: "business-address" }), bind$1("module.address"));
41141
41988
  contact = stack({
41142
41989
  gap: "sm",
41143
- className: "rb-items-start"
41990
+ className: { $bind: {
41991
+ from: "module.contactClassName",
41992
+ fallback: "rb-items-start"
41993
+ } }
41144
41994
  }, [link({
41145
41995
  href: { $bind: { from: "contactLink.href" } },
41146
41996
  className: "rb-nav-text rb-break-words transition-theme-standard"
41147
41997
  }, [text({ as: "span" }, bind$1("contactLink.label"))], repeat("module.contactLinks", "contactLink"))], when("module.kind", { equals: "contact" }));
41148
41998
  hours = stack({
41149
41999
  gap: "sm",
41150
- className: "rb-w-full"
42000
+ className: "rb-w-full",
42001
+ "data-slot": { $bind: { from: "module.slots.schedule" } }
41151
42002
  }, [inline({ className: "rb-flex rb-w-full rb-justify-between rb-gap-4" }, [text({
41152
42003
  as: "span",
41153
42004
  className: "rb-label"
@@ -41158,7 +42009,10 @@ var init_site_footer = __esmMin((() => {
41158
42009
  as: "p",
41159
42010
  className: "rb-caption rb-opacity-70"
41160
42011
  }, bind$1("module.timeZone"), when("module.timeZone"))], when("module.kind", { equals: "opening-hours" }));
41161
- socials = inline({ className: "rb-footer-socials" }, [link({
42012
+ socials = inline({
42013
+ className: "rb-footer-socials",
42014
+ "data-slot": { $bind: { from: "module.slots.social" } }
42015
+ }, [link({
41162
42016
  href: { $bind: { from: "social.href" } },
41163
42017
  target: "_blank",
41164
42018
  rel: "noreferrer noopener",
@@ -41167,7 +42021,14 @@ var init_site_footer = __esmMin((() => {
41167
42021
  }, [icon({ className: "rb-footer-social-icon" }, bind$1("social.icon"), when("social.icon")), text({ as: "span" }, bind$1("social.label"), when("social.icon", { equals: null }))], repeat("module.socialLinks", "social"))], when("module.kind", { equals: "social-links" }));
41168
42022
  authoredCopy = richText({
41169
42023
  className: "rb-prose rb-prose-sm rb-max-w-none",
41170
- style: textColorStyle("text/80")
42024
+ "data-slot": { $bind: { from: "module.slots.copy" } },
42025
+ style: { $bind: {
42026
+ from: "content.footerRuntime.arrangement",
42027
+ transforms: [{
42028
+ id: "layout.footerModuleInkStyle",
42029
+ options: { opacity: 80 }
42030
+ }]
42031
+ } }
41171
42032
  }, when("module.content"), bind$1("module.content", { transforms: [{
41172
42033
  id: "content.interpolateRichTextTokens",
41173
42034
  options: { tokens: ["year", "site_name"] }
@@ -41205,27 +42066,44 @@ var init_site_footer = __esmMin((() => {
41205
42066
  ], when("module.kind", { equals: "attribution" }));
41206
42067
  footerGroup = stack({
41207
42068
  gap: "md",
41208
- align: "stretch",
42069
+ align: { $bind: {
42070
+ from: "group.align",
42071
+ fallback: "stretch"
42072
+ } },
41209
42073
  className: { $bind: {
41210
42074
  from: "group.className",
41211
42075
  fallback: "rb-min-w-0"
41212
42076
  } },
42077
+ "data-slot": { $bind: { from: "group.slot" } },
41213
42078
  "data-footer-group": { $bind: { from: "group.kind" } }
41214
42079
  }, [stack({
41215
42080
  gap: "md",
41216
- align: "start",
42081
+ align: { $bind: {
42082
+ from: "module.align",
42083
+ fallback: "start"
42084
+ } },
42085
+ className: { $bind: { from: "module.className" } },
41217
42086
  "data-preview-footer-module-id": { $bind: { from: "module.id" } }
41218
42087
  }, [
41219
42088
  text({
41220
42089
  as: "h2",
41221
42090
  className: "rb-label",
41222
- style: textColorStyle("text/70")
42091
+ "data-slot": { $bind: { from: "module.slots.group-label" } },
42092
+ style: { $bind: {
42093
+ from: "content.footerRuntime.arrangement",
42094
+ transforms: [{
42095
+ id: "layout.footerModuleInkStyle",
42096
+ options: { opacity: 70 }
42097
+ }]
42098
+ } }
41223
42099
  }, bind$1("module.heading"), when("module.heading")),
41224
42100
  brandLogo,
42101
+ centredBrand,
41225
42102
  navigation,
41226
42103
  stack({
41227
42104
  gap: "sm",
41228
- className: "rb-w-full"
42105
+ className: "rb-w-full",
42106
+ "data-slot": { $bind: { from: "module.slots.navigation" } }
41229
42107
  }, [legalNavigation], when("module.kind", { equals: "legal-navigation" })),
41230
42108
  address,
41231
42109
  contact,
@@ -41238,10 +42116,12 @@ var init_site_footer = __esmMin((() => {
41238
42116
  ], repeat("group.modules", "module"))], repeat("region.groups", "group"));
41239
42117
  footerMainRegion = stack({
41240
42118
  className: { $bind: { from: "region.className" } },
42119
+ "data-slot": { $bind: { from: "region.slot" } },
41241
42120
  "data-footer-region": { $bind: { from: "region.kind" } }
41242
42121
  }, [footerGroup], when("region.kind", { equals: "main" }), repeat("content.footerRuntime.regions", "region"));
41243
42122
  footerEngagementRegion = stack({
41244
42123
  className: { $bind: { from: "region.className" } },
42124
+ "data-slot": { $bind: { from: "region.slot" } },
41245
42125
  "data-footer-region": "engagement-row"
41246
42126
  }, [footerGroup], when("region.kind", { equals: "engagement-row" }), repeat("content.footerRuntime.regions", "region"));
41247
42127
  footerBottomRegion = stack({ className: { $bind: {
@@ -41258,6 +42138,7 @@ var init_site_footer = __esmMin((() => {
41258
42138
  from: "$root.theme.footer",
41259
42139
  transforms: [{ id: "layout.footerBottomBarStyle" }]
41260
42140
  } },
42141
+ "data-slot": { $bind: { from: "region.slot" } },
41261
42142
  "data-footer-region": "bottom"
41262
42143
  }, [footerGroup])], when("region.kind", { equals: "bottom" }), repeat("content.footerRuntime.regions", "region"));
41263
42144
  footerLayout = section({
@@ -41272,6 +42153,7 @@ var init_site_footer = __esmMin((() => {
41272
42153
  transforms: [{ id: "layout.footerRootStyle" }],
41273
42154
  fallback: mergeStyles(backgroundColorStyle("surface"), surfaceForegroundStyle({ text: "rgb(var(--tb-text))" }), borderColorStyle("border"))
41274
42155
  } },
42156
+ "data-arrangement": { $bind: { from: "content.footerRuntime.arrangementHook" } },
41275
42157
  "data-footer-membership": { $bind: { from: "content.footerRuntime.membershipKey" } }
41276
42158
  }, [
41277
42159
  footerEngagementRegion,
@@ -42738,6 +43620,7 @@ var init_carousel = __esmMin((() => {
42738
43620
  ];
42739
43621
  })), mediaTextCardOptions, textCardStylesField, mediaTextManifest, mediaTextBlockDefinition;
42740
43622
  var init_media_text = __esmMin((() => {
43623
+ init_lookSlot();
42741
43624
  init_gridLayout();
42742
43625
  init_defineBlock();
42743
43626
  init_frameStyles();
@@ -42953,17 +43836,30 @@ var init_media_text = __esmMin((() => {
42953
43836
  }],
42954
43837
  fallback: ""
42955
43838
  } };
42956
- const copyHeading = el$1("div", { className: titleClassNameFromAlignment }, [text({
43839
+ const copyHeading = el$1("div", {
43840
+ className: titleClassNameFromAlignment,
43841
+ ...lookSlot("head")
43842
+ }, [text({
42957
43843
  as: "p",
42958
- className: eyebrowClassName("rb-eyebrow heading-eyebrow")
42959
- }, when("content.eyebrow"), bind$1("content.eyebrow")), text({ as: "h2" }, bind$1("content.title"))], when("content.title"));
42960
- const defaultTextColumn = el$1("div", {}, [styledCard([richText({ className: "rb-prose rb-max-w-none" }, bind$1("content.text"))], mediaTextCardOptions, when("content.wrapTextInCard")), richText({ className: "rb-prose rb-max-w-none" }, when("content.wrapTextInCard", { not: true }), bind$1("content.text"))]);
42961
- const bioTextColumn = el$1("div", { className: "rb-flex rb-h-full rb-w-full rb-max-w-prose rb-flex-col rb-justify-center rb-gap-5" }, [
42962
- copyHeading,
42963
- styledCard([richText({ className: bodyClassNameFromAlignment }, bind$1("content.text"))], mediaTextCardOptions, when("content.wrapTextInCard")),
42964
- richText({ className: bodyClassNameFromAlignment }, when("content.wrapTextInCard", { not: true }), bind$1("content.text"))
42965
- ]);
43844
+ className: eyebrowClassName("rb-eyebrow heading-eyebrow"),
43845
+ ...lookSlot("eyebrow")
43846
+ }, when("content.eyebrow"), bind$1("content.eyebrow")), text({
43847
+ as: "h2",
43848
+ ...lookSlot("heading")
43849
+ }, bind$1("content.title"))], when("content.title"));
43850
+ const textContentNodes = (className) => {
43851
+ const props = {
43852
+ className,
43853
+ ...lookSlot("intro"),
43854
+ leadParagraphSlot: { $bind: { from: "content._lookSlots.lede" } },
43855
+ lookSlots: { $bind: { from: "content._lookSlots" } }
43856
+ };
43857
+ return [styledCard([richText(props, bind$1("content.text"))], mediaTextCardOptions, when("content.wrapTextInCard")), richText(props, when("content.wrapTextInCard", { not: true }), bind$1("content.text"))];
43858
+ };
43859
+ const defaultTextColumn = el$1("div", {}, textContentNodes("rb-prose rb-max-w-none"));
43860
+ const bioTextColumn = el$1("div", { className: "rb-flex rb-h-full rb-w-full rb-max-w-prose rb-flex-col rb-justify-center rb-gap-5" }, [copyHeading, ...textContentNodes(bodyClassNameFromAlignment)]);
42966
43861
  const defaultImageCommonProps = {
43862
+ ...lookSlot("photo"),
42967
43863
  className: { $bind: {
42968
43864
  from: "content.imageShape",
42969
43865
  transforms: [{
@@ -43003,6 +43899,7 @@ var init_media_text = __esmMin((() => {
43003
43899
  slidesToShow: 1
43004
43900
  }, [media(defaultImageCommonProps, bind$1("item.image"), repeat("content.images", "item"))]);
43005
43901
  const defaultImagesLayout = el$1("div", {}, [responsiveTwoColumn({
43902
+ lookSlots: true,
43006
43903
  image: el$1("div", {}, [el$1("div", {}, [defaultSingleImage], whenImagesLength(1)), el$1("div", {}, [defaultCarouselImages], whenImagesLength(1, { not: true }))]),
43007
43904
  text: defaultTextColumn,
43008
43905
  ratioFrom: "content.ratio",
@@ -43014,6 +43911,7 @@ var init_media_text = __esmMin((() => {
43014
43911
  textWrapperClassName: "rb-w-full rb-min-w-0 rb-flex-1"
43015
43912
  })], whenImagesLength(0, { not: true }));
43016
43913
  const bioImagesLayout = el$1("div", {}, [responsiveTwoColumn({
43914
+ lookSlots: true,
43017
43915
  image: el$1("div", {}, [el$1("div", {}, [defaultSingleImage], whenImagesLength(1)), el$1("div", {}, [defaultCarouselImages], whenImagesLength(1, { not: true }))]),
43018
43916
  text: bioTextColumn,
43019
43917
  ratioFrom: "content.ratio",
@@ -43024,15 +43922,15 @@ var init_media_text = __esmMin((() => {
43024
43922
  imageWrapperClassName: "rb-w-full rb-shrink-0",
43025
43923
  textWrapperClassName: "rb-w-full rb-min-w-0 rb-flex-1 rb-self-stretch"
43026
43924
  })], whenImagesLength(0, { not: true }));
43027
- const defaultTextOnlyLayout = el$1("div", {}, [styledCard([richText({ className: "rb-prose rb-max-w-none" }, bind$1("content.text"))], mediaTextCardOptions, when("content.wrapTextInCard")), richText({ className: "rb-prose rb-max-w-none" }, when("content.wrapTextInCard", { not: true }), bind$1("content.text"))], whenImagesLength(0));
43028
- const bioTextOnlyLayout = el$1("div", { className: "rb-flex rb-w-full rb-max-w-prose rb-flex-col rb-gap-5" }, [
43029
- text({
43030
- as: "h2",
43031
- className: titleClassNameFromAlignment
43032
- }, when("content.title"), bind$1("content.title")),
43033
- styledCard([richText({ className: bodyClassNameFromAlignment }, bind$1("content.text"))], mediaTextCardOptions, when("content.wrapTextInCard")),
43034
- richText({ className: bodyClassNameFromAlignment }, when("content.wrapTextInCard", { not: true }), bind$1("content.text"))
43035
- ], whenImagesLength(0));
43925
+ const defaultTextOnlyLayout = el$1("div", lookSlot("copy"), textContentNodes("rb-prose rb-max-w-none"), whenImagesLength(0));
43926
+ const bioTextOnlyLayout = el$1("div", {
43927
+ className: "rb-flex rb-w-full rb-max-w-prose rb-flex-col rb-gap-5",
43928
+ ...lookSlot("copy")
43929
+ }, [text({
43930
+ as: "h2",
43931
+ className: titleClassNameFromAlignment,
43932
+ ...lookSlot("heading")
43933
+ }, when("content.title"), bind$1("content.title")), ...textContentNodes(bodyClassNameFromAlignment)], whenImagesLength(0));
43036
43934
  const defaultInner = el$1("div", {}, [defaultImagesLayout, defaultTextOnlyLayout]);
43037
43935
  const bioInner = el$1("div", {}, [bioImagesLayout, bioTextOnlyLayout]);
43038
43936
  const defaultLayout = styledSection({
@@ -43056,9 +43954,31 @@ var init_media_text = __esmMin((() => {
43056
43954
  }),
43057
43955
  baseClass: "",
43058
43956
  spacing: "medium"
43957
+ }),
43958
+ "circle-beside": styledSection({
43959
+ baseClass: "",
43960
+ spacing: "medium",
43961
+ children: styledContainer({ children: el$1("div", lookSlot("frame"), [el$1("div", lookSlot("media"), [
43962
+ el$1("div", {}, [when("content.images[0].image")(defaultSingleImage)], whenImagesLength(1)),
43963
+ el$1("div", {}, [el$1("div", {}, [defaultCarouselImages], whenImagesLength(1, { not: true }))], whenImagesLength(0, { not: true })),
43964
+ el$1("div", {}, [when("content.images[0].image")(defaultSingleImage)], whenImagesLength(0))
43965
+ ]), el$1("div", lookSlot("copy"), [el$1("div", lookSlot("head"), [text({
43966
+ as: "p",
43967
+ className: eyebrowClassName("rb-eyebrow heading-eyebrow"),
43968
+ ...lookSlot("eyebrow")
43969
+ }, when("content.eyebrow"), bind$1("content.eyebrow")), text({
43970
+ as: "h2",
43971
+ ...lookSlot("heading")
43972
+ }, bind$1("content.title"), when("content.title", { authoringPresence: {
43973
+ kind: "recover-empty-when-active",
43974
+ placeholder: "Add heading"
43975
+ } }))]), defaultTextColumn])]) })
43059
43976
  })
43060
43977
  },
43061
- variantMeaning: { kind: "arrangement" },
43978
+ variantMeaning: {
43979
+ kind: "arrangement",
43980
+ lookOnlyKeys: ["circle-beside"]
43981
+ },
43062
43982
  defaultVariant: "default",
43063
43983
  variantOptions: {
43064
43984
  default: { label: "Default" },
@@ -43612,8 +44532,8 @@ function groupPublicEventsByRun(events) {
43612
44532
  var init_runGrouping = __esmMin((() => {}));
43613
44533
  //#endregion
43614
44534
  //#region ../blocks/src/system/blocks/events/shared/fields.ts
43615
- var cardStylingFields, eventDisplayFields, emptyStateField, sectionHeaderFields, layoutField, columnsField;
43616
- var init_fields$1 = __esmMin((() => {
44535
+ var cardStylingFields, eventDisplayFields, emptyStateField, layoutField, columnsField;
44536
+ var init_fields$2 = __esmMin((() => {
43617
44537
  init_button();
43618
44538
  init_boxStyles$1();
43619
44539
  cardStylingFields = [
@@ -43676,21 +44596,6 @@ var init_fields$1 = __esmMin((() => {
43676
44596
  maxLength: 200,
43677
44597
  ui: { intent: "display" }
43678
44598
  };
43679
- sectionHeaderFields = (defaultHeading) => [{
43680
- id: "heading",
43681
- type: "text",
43682
- label: "Heading",
43683
- description: "Main heading for the events section",
43684
- required: false,
43685
- multiline: false,
43686
- defaultValue: defaultHeading
43687
- }, {
43688
- id: "description",
43689
- type: "richText",
43690
- label: "Description",
43691
- description: "Optional introductory text",
43692
- required: false
43693
- }];
43694
44599
  layoutField = {
43695
44600
  id: "layout",
43696
44601
  type: "select",
@@ -43734,44 +44639,13 @@ var init_fields$1 = __esmMin((() => {
43734
44639
  });
43735
44640
  }));
43736
44641
  //#endregion
43737
- //#region ../blocks/src/system/blocks/events/shared/layout.ts
43738
- function eventSectionHeaderLayoutNodes(options = {}) {
43739
- const headingNode = text({
43740
- as: "h2",
43741
- ...lookSlot("heading")
43742
- }, bind$1("content.heading"), when("content.heading", { authoringPresence: recoverEmptyHeadingWhenActive }));
43743
- const descriptionNode = richText({
43744
- className: "rb-prose rb-max-w-none",
43745
- ...lookSlot("intro")
43746
- }, bind$1("content.description"), when("content.description", { authoringPresence: recoverEmptyDescriptionWhenActive }));
43747
- if (options.splitClassName) return [el$1("div", {
43748
- className: options.splitClassName,
43749
- ...lookSlot("head")
43750
- }, [headingNode, descriptionNode])];
43751
- return [headingNode, descriptionNode];
43752
- }
43753
- var recoverEmptyHeadingWhenActive, recoverEmptyDescriptionWhenActive;
43754
- var init_layout$1 = __esmMin((() => {
43755
- init_lookSlot();
43756
- init_builder$1();
43757
- recoverEmptyHeadingWhenActive = {
43758
- kind: "recover-empty-when-active",
43759
- placeholder: "Add heading"
43760
- };
43761
- recoverEmptyDescriptionWhenActive = {
43762
- kind: "recover-empty-when-active",
43763
- placeholder: "Add description"
43764
- };
43765
- }));
43766
- //#endregion
43767
44642
  //#region ../blocks/src/system/blocks/events/shared/index.ts
43768
44643
  var init_shared$2 = __esmMin((() => {
43769
44644
  init_types$2();
43770
44645
  init_schemas();
43771
44646
  init_runGrouping();
43772
- init_fields$1();
44647
+ init_fields$2();
43773
44648
  init_filtering();
43774
- init_layout$1();
43775
44649
  }));
43776
44650
  //#endregion
43777
44651
  //#region ../blocks/src/system/blocks/shop.shared.ts
@@ -44120,19 +44994,14 @@ var init_cta$1 = __esmMin((() => {}));
44120
44994
  *
44121
44995
  * Sites don't store a locale, and every public word around a date is English,
44122
44996
  * so the only open question is which English conventions to follow: day or
44123
- * month first, and a 24 or 12-hour clock. The site's time zone is the one
44997
+ * month first. The site's time zone is the one
44124
44998
  * fact every site carries about where it is. It is the site's, never an
44125
44999
  * event's: a venue left at UTC must not turn a UK site's dates American.
44126
45000
  * Anywhere this can't place (UTC, the Americas, Asia) keeps US English, which
44127
45001
  * is what these helpers wrote before sites were placed at all.
44128
45002
  */
44129
45003
  function eventDateLocale(siteTimeZone) {
44130
- if (!siteTimeZone) return "en-US";
44131
- if (siteTimeZone === "Europe/Dublin") return "en-IE";
44132
- if (siteTimeZone.startsWith("Europe/")) return "en-GB";
44133
- if (siteTimeZone.startsWith("Australia/")) return "en-AU";
44134
- if (siteTimeZone === "Pacific/Auckland" || siteTimeZone === "Pacific/Chatham") return "en-NZ";
44135
- return "en-US";
45004
+ return inferSiteDateLocale(siteTimeZone);
44136
45005
  }
44137
45006
  function formatEventCompactDateRail(isoTimestamp, options, letterCase = "capitals") {
44138
45007
  const locale = options?.locale ?? "en-US";
@@ -45785,6 +46654,7 @@ var init_event_details = __esmMin((() => {
45785
46654
  //#region ../blocks/src/system/blocks/events/event-spotlight.ts
45786
46655
  var eventSpotlightConfig, eventSpotlightManifest, eventSpotlightBlockDefinition;
45787
46656
  var init_event_spotlight = __esmMin((() => {
46657
+ init_sectionHead();
45788
46658
  init_builder$1();
45789
46659
  init_styledSection();
45790
46660
  init_fragments$1();
@@ -45886,7 +46756,7 @@ var init_event_spotlight = __esmMin((() => {
45886
46756
  ],
45887
46757
  icon: "Star",
45888
46758
  layout: [styledSection({
45889
- children: sectionContainer([...eventSectionHeaderLayoutNodes(), el$1("event-spotlight", {
46759
+ children: sectionContainer([...sectionHeaderLayoutNodes(), el$1("event-spotlight", {
45890
46760
  events: { $bind: { from: "data.events" } },
45891
46761
  layout: { $bind: {
45892
46762
  from: "content.layout",
@@ -45946,57 +46816,6 @@ var init_event_spotlight = __esmMin((() => {
45946
46816
  };
45947
46817
  }));
45948
46818
  //#endregion
45949
- //#region ../blocks/src/system/runtime/lookSurfaces.ts
45950
- var isPlainObject$1, lookListPresentationSchemaShape;
45951
- var init_lookSurfaces = __esmMin((() => {
45952
- init_surfaces();
45953
- init_site_styles();
45954
- isPlainObject$1 = (value) => typeof value === "object" && value !== null && !Array.isArray(value);
45955
- lookListPresentationSchemaShape = {
45956
- sectionAction: z.object({
45957
- label: z.string(),
45958
- href: z.string()
45959
- }).optional(),
45960
- actionSize: z.enum([
45961
- "sm",
45962
- "md",
45963
- "lg"
45964
- ]).optional(),
45965
- itemActionStyle: z.enum(["button", "link"]).optional(),
45966
- itemRoles: z.object({
45967
- container: z.enum([
45968
- "card",
45969
- "statement",
45970
- "highlight"
45971
- ]).optional(),
45972
- items: z.enum([
45973
- "card",
45974
- "statement",
45975
- "highlight"
45976
- ]).optional(),
45977
- at: z.partialRecord(z.enum([
45978
- "first",
45979
- "last",
45980
- "middle",
45981
- "odd",
45982
- "even"
45983
- ]), z.enum([
45984
- "card",
45985
- "statement",
45986
- "highlight"
45987
- ])).optional()
45988
- }).optional(),
45989
- roleSurfaces: z.record(z.enum([
45990
- "card",
45991
- "statement",
45992
- "highlight"
45993
- ]), z.custom((value) => isPlainObject$1(value) && (value.kind === "inherit" || value.kind === "owned"))).optional(),
45994
- panelHeading: z.string().optional(),
45995
- lookSlots: z.partialRecord(z.enum(arrangementSlotNames), z.enum(arrangementSlotNames)).optional(),
45996
- itemSurfaces: z.record(z.string(), z.custom((value) => isPlainObject$1(value) && (value.kind === "inherit" || value.kind === "owned"))).optional()
45997
- };
45998
- }));
45999
- //#endregion
46000
46819
  //#region ../blocks/src/system/blocks/events/shared/eventSelection.ts
46001
46820
  /** Invalid saved selections fail closed rather than widening discovery. */
46002
46821
  function resolveEventSelection(mode, value) {
@@ -46459,6 +47278,7 @@ var init_EventListing_interactive = __esmMin((() => {
46459
47278
  //#region ../blocks/src/system/blocks/events/event-listing.ts
46460
47279
  var eventListingAdditionalFields, eventListingLayout, eventListingContentShape, eventListingConfig, eventListingManifest, eventListingBlockDefinition;
46461
47280
  var init_event_listing = __esmMin((() => {
47281
+ init_sectionHead();
46462
47282
  init_builder$1();
46463
47283
  init_styledSection();
46464
47284
  init_fragments$1();
@@ -46690,7 +47510,7 @@ var init_event_listing = __esmMin((() => {
46690
47510
  children: styledContainer({
46691
47511
  rootType: "stack",
46692
47512
  rootProps: { gap: "lg" },
46693
- children: [...eventSectionHeaderLayoutNodes(), el$1("event-listing", withApiBindings$1({
47513
+ children: [...sectionHeaderLayoutNodes(), el$1("event-listing", withApiBindings$1({
46694
47514
  readAuthority: { $bind: { from: "$root.readAuthority" } },
46695
47515
  events: { $bind: { from: "data.events" } },
46696
47516
  stage: { $bind: {
@@ -47167,6 +47987,7 @@ function normalizeEventCalendarDefaultView(value) {
47167
47987
  }
47168
47988
  var eventCalendarLayout, eventCalendarAdditionalFields, eventCalendarVariants, eventCalendarContentShape, eventCalendarConfig, eventCalendarManifest, eventCalendarBlockDefinition;
47169
47989
  var init_event_calendar = __esmMin((() => {
47990
+ init_sectionHead();
47170
47991
  init_cardList();
47171
47992
  init_lookSlot();
47172
47993
  init_events$1();
@@ -47189,7 +48010,7 @@ var init_event_calendar = __esmMin((() => {
47189
48010
  gap: "lg",
47190
48011
  ...lookSlot("layout")
47191
48012
  },
47192
- children: [...eventSectionHeaderLayoutNodes({ splitClassName: "event-section-head event-section-head--split" }), el$1("event-calendar", withApiBindings$1({
48013
+ children: [...sectionHeaderLayoutNodes({ splitClassName: "event-section-head event-section-head--split" }), el$1("event-calendar", withApiBindings$1({
47193
48014
  readAuthority: { $bind: { from: "$root.readAuthority" } },
47194
48015
  events: { $bind: { from: "data.events" } },
47195
48016
  effectiveListArrangementKey: { $bind: { from: "$root.effectiveListArrangementKey" } },
@@ -48611,8 +49432,8 @@ function labelForOfferingPreviewSourceKey(sourceKey) {
48611
49432
  return "Courses";
48612
49433
  }
48613
49434
  var groupOverrideFields, offeringsPreviewFields;
48614
- var init_fields = __esmMin((() => {
48615
- init_shared$2();
49435
+ var init_fields$1 = __esmMin((() => {
49436
+ init_sectionHead();
48616
49437
  init_boxStyles$1();
48617
49438
  init_button();
48618
49439
  init_model();
@@ -48949,7 +49770,7 @@ var init_offerings_preview = __esmMin((() => {
48949
49770
  init_cardList();
48950
49771
  init_cardListSectionAction();
48951
49772
  init_lookSlot();
48952
- init_fields();
49773
+ init_fields$1();
48953
49774
  init_src$4();
48954
49775
  init_link();
48955
49776
  init_builder$1();
@@ -49428,10 +50249,522 @@ var init_embed = __esmMin((() => {
49428
50249
  };
49429
50250
  }));
49430
50251
  //#endregion
50252
+ //#region ../blocks/src/system/blocks/image-gallery/fields.ts
50253
+ var imageGalleryFields;
50254
+ var init_fields = __esmMin((() => {
50255
+ init_schema();
50256
+ init_sectionHead();
50257
+ imageGalleryFields = parseFieldDefinitions([
50258
+ ...sectionHeaderFields(void 0, "Intro"),
50259
+ {
50260
+ id: "images",
50261
+ type: "repeater",
50262
+ label: "Images",
50263
+ itemLabel: "Image",
50264
+ minItems: 0,
50265
+ maxItems: 24,
50266
+ ui: {
50267
+ repeaterPreset: "thumbnailGrid",
50268
+ thumbnailField: "image",
50269
+ thumbnailAltField: "caption",
50270
+ thumbnailLabelField: "caption",
50271
+ thumbnailCardDensity: "compact"
50272
+ },
50273
+ schema: { fields: [{
50274
+ id: "image",
50275
+ type: "media",
50276
+ label: "Image",
50277
+ required: true,
50278
+ mediaKinds: ["image"]
50279
+ }, {
50280
+ id: "caption",
50281
+ type: "text",
50282
+ label: "Caption",
50283
+ description: "Optional caption displayed below the image and used as the editor card label",
50284
+ maxLength: 200
50285
+ }] }
50286
+ },
50287
+ {
50288
+ id: "fullBleed",
50289
+ type: "boolean",
50290
+ label: "Full bleed",
50291
+ description: "Extend the gallery edge-to-edge by removing section side padding and container max-width.",
50292
+ defaultValue: false,
50293
+ ui: {
50294
+ intent: "display",
50295
+ visibleWhen: {
50296
+ field: "variant",
50297
+ notIn: ["marquee"]
50298
+ }
50299
+ }
50300
+ },
50301
+ {
50302
+ id: "aspectRatio",
50303
+ type: "select",
50304
+ label: "Aspect ratio",
50305
+ description: "Crop images to a consistent aspect ratio.",
50306
+ defaultValue: "1/1",
50307
+ options: [
50308
+ {
50309
+ value: "auto",
50310
+ label: "Original"
50311
+ },
50312
+ {
50313
+ value: "1/1",
50314
+ label: "1:1 (Square)"
50315
+ },
50316
+ {
50317
+ value: "4/3",
50318
+ label: "4:3 (Standard)"
50319
+ },
50320
+ {
50321
+ value: "16/9",
50322
+ label: "16:9 (Widescreen)"
50323
+ },
50324
+ {
50325
+ value: "3/2",
50326
+ label: "3:2 (Classic)"
50327
+ },
50328
+ {
50329
+ value: "3/4",
50330
+ label: "3:4 (Portrait)"
50331
+ }
50332
+ ],
50333
+ ui: {
50334
+ intent: "display",
50335
+ visibleWhen: {
50336
+ field: "variant",
50337
+ notIn: ["masonry", "marquee"]
50338
+ }
50339
+ }
50340
+ },
50341
+ {
50342
+ id: "slidesToShow",
50343
+ type: "select",
50344
+ label: "Images per view (mobile)",
50345
+ description: "Number of images visible at once on small screens.",
50346
+ defaultValue: "1",
50347
+ options: [
50348
+ {
50349
+ value: "1",
50350
+ label: "One at a time"
50351
+ },
50352
+ {
50353
+ value: "2",
50354
+ label: "Two at a time"
50355
+ },
50356
+ {
50357
+ value: "3",
50358
+ label: "Three at a time"
50359
+ }
50360
+ ],
50361
+ ui: {
50362
+ intent: "display",
50363
+ visibleWhen: {
50364
+ field: "variant",
50365
+ equals: "carousel"
50366
+ }
50367
+ }
50368
+ },
50369
+ {
50370
+ id: "slidesToShowTablet",
50371
+ type: "select",
50372
+ label: "Images per view (tablet)",
50373
+ description: "Number of images visible on medium screens.",
50374
+ options: [
50375
+ {
50376
+ value: "",
50377
+ label: "Same as mobile"
50378
+ },
50379
+ {
50380
+ value: "1",
50381
+ label: "One at a time"
50382
+ },
50383
+ {
50384
+ value: "2",
50385
+ label: "Two at a time"
50386
+ },
50387
+ {
50388
+ value: "3",
50389
+ label: "Three at a time"
50390
+ }
50391
+ ],
50392
+ ui: {
50393
+ intent: "display",
50394
+ visibleWhen: {
50395
+ field: "variant",
50396
+ equals: "carousel"
50397
+ }
50398
+ }
50399
+ },
50400
+ {
50401
+ id: "slidesToShowDesktop",
50402
+ type: "select",
50403
+ label: "Images per view (desktop)",
50404
+ description: "Number of images visible on large screens.",
50405
+ options: [
50406
+ {
50407
+ value: "",
50408
+ label: "Same as tablet"
50409
+ },
50410
+ {
50411
+ value: "1",
50412
+ label: "One at a time"
50413
+ },
50414
+ {
50415
+ value: "2",
50416
+ label: "Two at a time"
50417
+ },
50418
+ {
50419
+ value: "3",
50420
+ label: "Three at a time"
50421
+ }
50422
+ ],
50423
+ ui: {
50424
+ intent: "display",
50425
+ visibleWhen: {
50426
+ field: "variant",
50427
+ equals: "carousel"
50428
+ }
50429
+ }
50430
+ },
50431
+ {
50432
+ id: "transition",
50433
+ type: "select",
50434
+ label: "Transition",
50435
+ description: "Animation style between slides.",
50436
+ defaultValue: "slide",
50437
+ options: [{
50438
+ value: "slide",
50439
+ label: "Slide"
50440
+ }, {
50441
+ value: "fade",
50442
+ label: "Fade"
50443
+ }],
50444
+ ui: {
50445
+ intent: "display",
50446
+ visibleWhen: {
50447
+ field: "variant",
50448
+ equals: "carousel"
50449
+ }
50450
+ }
50451
+ },
50452
+ {
50453
+ id: "showControls",
50454
+ type: "boolean",
50455
+ label: "Show arrows",
50456
+ defaultValue: true,
50457
+ ui: {
50458
+ intent: "behavior",
50459
+ visibleWhen: {
50460
+ field: "variant",
50461
+ equals: "carousel"
50462
+ }
50463
+ }
50464
+ },
50465
+ {
50466
+ id: "showDots",
50467
+ type: "boolean",
50468
+ label: "Show dots",
50469
+ defaultValue: false,
50470
+ ui: {
50471
+ intent: "behavior",
50472
+ visibleWhen: {
50473
+ field: "variant",
50474
+ equals: "carousel"
50475
+ }
50476
+ }
50477
+ },
50478
+ {
50479
+ id: "autoplay",
50480
+ type: "boolean",
50481
+ label: "Autoplay",
50482
+ defaultValue: false,
50483
+ ui: {
50484
+ intent: "behavior",
50485
+ visibleWhen: {
50486
+ field: "variant",
50487
+ equals: "carousel"
50488
+ }
50489
+ }
50490
+ },
50491
+ {
50492
+ id: "autoplayDelay",
50493
+ type: "select",
50494
+ label: "Autoplay delay",
50495
+ defaultValue: "5000",
50496
+ options: [
50497
+ {
50498
+ value: "3000",
50499
+ label: "3 seconds"
50500
+ },
50501
+ {
50502
+ value: "5000",
50503
+ label: "5 seconds"
50504
+ },
50505
+ {
50506
+ value: "7000",
50507
+ label: "7 seconds"
50508
+ },
50509
+ {
50510
+ value: "10000",
50511
+ label: "10 seconds"
50512
+ }
50513
+ ],
50514
+ ui: {
50515
+ intent: "behavior",
50516
+ visibleWhen: {
50517
+ field: "variant",
50518
+ equals: "carousel"
50519
+ }
50520
+ }
50521
+ },
50522
+ {
50523
+ id: "arrowVisibility",
50524
+ type: "select",
50525
+ label: "Arrow visibility",
50526
+ defaultValue: "always",
50527
+ options: [{
50528
+ value: "always",
50529
+ label: "Always visible"
50530
+ }, {
50531
+ value: "hover",
50532
+ label: "Show on hover"
50533
+ }],
50534
+ ui: {
50535
+ intent: "behavior",
50536
+ visibleWhen: {
50537
+ field: "variant",
50538
+ equals: "carousel"
50539
+ }
50540
+ }
50541
+ },
50542
+ {
50543
+ id: "loop",
50544
+ type: "boolean",
50545
+ label: "Loop slides",
50546
+ defaultValue: true,
50547
+ ui: {
50548
+ intent: "behavior",
50549
+ visibleWhen: {
50550
+ field: "variant",
50551
+ equals: "carousel"
50552
+ }
50553
+ }
50554
+ },
50555
+ {
50556
+ id: "marqueeDirection",
50557
+ type: "select",
50558
+ label: "Scroll direction",
50559
+ options: [{
50560
+ value: "left",
50561
+ label: "Left"
50562
+ }, {
50563
+ value: "right",
50564
+ label: "Right"
50565
+ }],
50566
+ defaultValue: "left",
50567
+ ui: {
50568
+ intent: "display",
50569
+ visibleWhen: {
50570
+ field: "variant",
50571
+ equals: "marquee"
50572
+ }
50573
+ }
50574
+ },
50575
+ {
50576
+ id: "marqueeSpeed",
50577
+ type: "select",
50578
+ label: "Scroll speed",
50579
+ options: [
50580
+ {
50581
+ value: "slow",
50582
+ label: "Slow (60s)"
50583
+ },
50584
+ {
50585
+ value: "medium",
50586
+ label: "Medium (40s)"
50587
+ },
50588
+ {
50589
+ value: "fast",
50590
+ label: "Fast (20s)"
50591
+ }
50592
+ ],
50593
+ defaultValue: "medium",
50594
+ ui: {
50595
+ intent: "display",
50596
+ visibleWhen: {
50597
+ field: "variant",
50598
+ equals: "marquee"
50599
+ }
50600
+ }
50601
+ },
50602
+ {
50603
+ id: "marqueePauseOnHover",
50604
+ type: "boolean",
50605
+ label: "Pause on hover",
50606
+ defaultValue: true,
50607
+ ui: {
50608
+ intent: "behavior",
50609
+ visibleWhen: {
50610
+ field: "variant",
50611
+ equals: "marquee"
50612
+ }
50613
+ }
50614
+ },
50615
+ {
50616
+ id: "marqueeImageSize",
50617
+ type: "select",
50618
+ label: "Image size",
50619
+ options: [
50620
+ {
50621
+ value: "sm",
50622
+ label: "Small (200px)"
50623
+ },
50624
+ {
50625
+ value: "md",
50626
+ label: "Medium (256px)"
50627
+ },
50628
+ {
50629
+ value: "lg",
50630
+ label: "Large (320px)"
50631
+ },
50632
+ {
50633
+ value: "xl",
50634
+ label: "Extra large (400px)"
50635
+ }
50636
+ ],
50637
+ defaultValue: "md",
50638
+ ui: {
50639
+ intent: "display",
50640
+ visibleWhen: {
50641
+ field: "variant",
50642
+ equals: "marquee"
50643
+ }
50644
+ }
50645
+ },
50646
+ {
50647
+ id: "imageFilter",
50648
+ type: "select",
50649
+ label: "Image filter",
50650
+ options: [
50651
+ {
50652
+ value: "none",
50653
+ label: "None"
50654
+ },
50655
+ {
50656
+ value: "grayscale",
50657
+ label: "Grayscale"
50658
+ },
50659
+ {
50660
+ value: "grayscale-hover-reveal",
50661
+ label: "Grayscale (color on hover)"
50662
+ },
50663
+ {
50664
+ value: "sepia",
50665
+ label: "Sepia"
50666
+ }
50667
+ ],
50668
+ defaultValue: "grayscale-hover-reveal",
50669
+ ui: { intent: "style" }
50670
+ },
50671
+ {
50672
+ id: "imageBorder",
50673
+ type: "group",
50674
+ label: "Image border",
50675
+ schema: { fields: [
50676
+ {
50677
+ id: "enabled",
50678
+ type: "boolean",
50679
+ label: "Show border",
50680
+ defaultValue: true
50681
+ },
50682
+ {
50683
+ id: "colorToken",
50684
+ type: "text",
50685
+ label: "Border color",
50686
+ defaultValue: "accent",
50687
+ ui: { widget: "backgroundColor" }
50688
+ },
50689
+ {
50690
+ id: "opacity",
50691
+ type: "number",
50692
+ label: "Border opacity",
50693
+ defaultValue: 30,
50694
+ ui: {
50695
+ min: 0,
50696
+ max: 100
50697
+ }
50698
+ },
50699
+ {
50700
+ id: "width",
50701
+ type: "select",
50702
+ label: "Border width",
50703
+ options: [
50704
+ {
50705
+ value: "1",
50706
+ label: "Thin (1px)"
50707
+ },
50708
+ {
50709
+ value: "2",
50710
+ label: "Medium (2px)"
50711
+ },
50712
+ {
50713
+ value: "3",
50714
+ label: "Thick (3px)"
50715
+ }
50716
+ ],
50717
+ defaultValue: "2"
50718
+ }
50719
+ ] },
50720
+ ui: { intent: "style" }
50721
+ },
50722
+ {
50723
+ id: "imageCorners",
50724
+ type: "select",
50725
+ label: "Image corners",
50726
+ options: [
50727
+ {
50728
+ value: "none",
50729
+ label: "Square"
50730
+ },
50731
+ {
50732
+ value: "sm",
50733
+ label: "Slightly rounded"
50734
+ },
50735
+ {
50736
+ value: "md",
50737
+ label: "Rounded"
50738
+ },
50739
+ {
50740
+ value: "lg",
50741
+ label: "More rounded"
50742
+ },
50743
+ {
50744
+ value: "xl",
50745
+ label: "Very rounded"
50746
+ },
50747
+ {
50748
+ value: "2xl",
50749
+ label: "Extra rounded"
50750
+ },
50751
+ {
50752
+ value: "3xl",
50753
+ label: "Maximum rounded"
50754
+ }
50755
+ ],
50756
+ defaultValue: "3xl",
50757
+ ui: { intent: "style" }
50758
+ }
50759
+ ]);
50760
+ }));
50761
+ //#endregion
49431
50762
  //#region ../blocks/src/system/blocks/image-gallery.ts
49432
- var grid$1, galleryContainer, galleryItem, gridLayout, carouselLayout, masonryLayout, marqueeLayout, emptyState$1, wrapVariant$1, baseImageGalleryManifest, imageGalleryManifest, imageGalleryBlockDefinition;
50763
+ var grid$1, galleryContainer, galleryItem, gridLayout, carouselLayout, masonryLayout, marqueeLayout, emptyState$1, wrapVariant$1, lookGalleryTile, tilesLayout, baseImageGalleryManifest, imageGalleryManifest, imageGalleryBlockDefinition;
49433
50764
  var init_image_gallery = __esmMin((() => {
49434
- init_schema();
50765
+ init_fields();
50766
+ init_lookSlot();
50767
+ init_sectionHead();
49435
50768
  init_builder$1();
49436
50769
  init_colorStyles();
49437
50770
  init_defineBlock();
@@ -49649,7 +50982,11 @@ var init_image_gallery = __esmMin((() => {
49649
50982
  }
49650
50983
  };
49651
50984
  wrapVariant$1 = (layout, opts) => styledSection({
49652
- children: galleryContainer([layout, emptyState$1], {
50985
+ children: galleryContainer([
50986
+ ...sectionHeaderLayoutNodes(),
50987
+ layout,
50988
+ emptyState$1
50989
+ ], {
49653
50990
  gap: "md",
49654
50991
  fullWidth: opts?.fullWidth,
49655
50992
  className: opts?.className
@@ -49658,6 +50995,28 @@ var init_image_gallery = __esmMin((() => {
49658
50995
  spacing: "medium",
49659
50996
  background: "background"
49660
50997
  });
50998
+ lookGalleryTile = (imageFrom, captionFrom, ...mods) => el$1("li", lookSlot("item"), [el$1("figure", lookSlot("figure"), [el$1("div", lookSlot("media"), [media(lookSlot("photo"), bind$1(imageFrom), when(imageFrom))]), text({
50999
+ as: "figcaption",
51000
+ ...lookSlot("caption")
51001
+ }, bind$1(captionFrom), when(captionFrom))])], ...mods);
51002
+ tilesLayout = styledSection({
51003
+ children: el$1("div", {
51004
+ className: "rb-container",
51005
+ ...lookSlot("layout")
51006
+ }, [...sectionHeaderLayoutNodes({ splitClassName: "rb-grid" }), el$1("ol", lookSlot("items"), [lookGalleryTile("item.image", "item.caption", repeat("content.images", "item")), lookGalleryTile("content.images.0.image", "content.images.0.caption", (node) => ({
51007
+ ...node,
51008
+ $when: {
51009
+ when: {
51010
+ from: "content.images",
51011
+ transforms: [{ id: "array.length" }]
51012
+ },
51013
+ equals: 0
51014
+ }
51015
+ }))])]),
51016
+ baseClass: "",
51017
+ spacing: "medium",
51018
+ background: "background"
51019
+ });
49661
51020
  baseImageGalleryManifest = createBlockManifest({
49662
51021
  id: "block.image-gallery",
49663
51022
  title: "Image Gallery",
@@ -49670,510 +51029,10 @@ var init_image_gallery = __esmMin((() => {
49670
51029
  "marqueeSpeed",
49671
51030
  "marqueePauseOnHover"
49672
51031
  ] },
49673
- additionalFields: parseFieldDefinitions([
49674
- {
49675
- id: "images",
49676
- type: "repeater",
49677
- label: "Images",
49678
- itemLabel: "Image",
49679
- minItems: 0,
49680
- maxItems: 24,
49681
- ui: {
49682
- repeaterPreset: "thumbnailGrid",
49683
- thumbnailField: "image",
49684
- thumbnailAltField: "caption",
49685
- thumbnailLabelField: "caption",
49686
- thumbnailCardDensity: "compact"
49687
- },
49688
- schema: { fields: [{
49689
- id: "image",
49690
- type: "media",
49691
- label: "Image",
49692
- required: true,
49693
- mediaKinds: ["image"]
49694
- }, {
49695
- id: "caption",
49696
- type: "text",
49697
- label: "Caption",
49698
- description: "Optional caption displayed below the image and used as the editor card label",
49699
- maxLength: 200
49700
- }] }
49701
- },
49702
- {
49703
- id: "fullBleed",
49704
- type: "boolean",
49705
- label: "Full bleed",
49706
- description: "Extend the gallery edge-to-edge by removing section side padding and container max-width.",
49707
- defaultValue: false,
49708
- ui: {
49709
- intent: "display",
49710
- visibleWhen: {
49711
- field: "variant",
49712
- notIn: ["marquee"]
49713
- }
49714
- }
49715
- },
49716
- {
49717
- id: "aspectRatio",
49718
- type: "select",
49719
- label: "Aspect ratio",
49720
- description: "Crop images to a consistent aspect ratio.",
49721
- defaultValue: "1/1",
49722
- options: [
49723
- {
49724
- value: "auto",
49725
- label: "Original"
49726
- },
49727
- {
49728
- value: "1/1",
49729
- label: "1:1 (Square)"
49730
- },
49731
- {
49732
- value: "4/3",
49733
- label: "4:3 (Standard)"
49734
- },
49735
- {
49736
- value: "16/9",
49737
- label: "16:9 (Widescreen)"
49738
- },
49739
- {
49740
- value: "3/2",
49741
- label: "3:2 (Classic)"
49742
- },
49743
- {
49744
- value: "3/4",
49745
- label: "3:4 (Portrait)"
49746
- }
49747
- ],
49748
- ui: {
49749
- intent: "display",
49750
- visibleWhen: {
49751
- field: "variant",
49752
- notIn: ["masonry", "marquee"]
49753
- }
49754
- }
49755
- },
49756
- {
49757
- id: "slidesToShow",
49758
- type: "select",
49759
- label: "Images per view (mobile)",
49760
- description: "Number of images visible at once on small screens.",
49761
- defaultValue: "1",
49762
- options: [
49763
- {
49764
- value: "1",
49765
- label: "One at a time"
49766
- },
49767
- {
49768
- value: "2",
49769
- label: "Two at a time"
49770
- },
49771
- {
49772
- value: "3",
49773
- label: "Three at a time"
49774
- }
49775
- ],
49776
- ui: {
49777
- intent: "display",
49778
- visibleWhen: {
49779
- field: "variant",
49780
- equals: "carousel"
49781
- }
49782
- }
49783
- },
49784
- {
49785
- id: "slidesToShowTablet",
49786
- type: "select",
49787
- label: "Images per view (tablet)",
49788
- description: "Number of images visible on medium screens.",
49789
- options: [
49790
- {
49791
- value: "",
49792
- label: "Same as mobile"
49793
- },
49794
- {
49795
- value: "1",
49796
- label: "One at a time"
49797
- },
49798
- {
49799
- value: "2",
49800
- label: "Two at a time"
49801
- },
49802
- {
49803
- value: "3",
49804
- label: "Three at a time"
49805
- }
49806
- ],
49807
- ui: {
49808
- intent: "display",
49809
- visibleWhen: {
49810
- field: "variant",
49811
- equals: "carousel"
49812
- }
49813
- }
49814
- },
49815
- {
49816
- id: "slidesToShowDesktop",
49817
- type: "select",
49818
- label: "Images per view (desktop)",
49819
- description: "Number of images visible on large screens.",
49820
- options: [
49821
- {
49822
- value: "",
49823
- label: "Same as tablet"
49824
- },
49825
- {
49826
- value: "1",
49827
- label: "One at a time"
49828
- },
49829
- {
49830
- value: "2",
49831
- label: "Two at a time"
49832
- },
49833
- {
49834
- value: "3",
49835
- label: "Three at a time"
49836
- }
49837
- ],
49838
- ui: {
49839
- intent: "display",
49840
- visibleWhen: {
49841
- field: "variant",
49842
- equals: "carousel"
49843
- }
49844
- }
49845
- },
49846
- {
49847
- id: "transition",
49848
- type: "select",
49849
- label: "Transition",
49850
- description: "Animation style between slides.",
49851
- defaultValue: "slide",
49852
- options: [{
49853
- value: "slide",
49854
- label: "Slide"
49855
- }, {
49856
- value: "fade",
49857
- label: "Fade"
49858
- }],
49859
- ui: {
49860
- intent: "display",
49861
- visibleWhen: {
49862
- field: "variant",
49863
- equals: "carousel"
49864
- }
49865
- }
49866
- },
49867
- {
49868
- id: "showControls",
49869
- type: "boolean",
49870
- label: "Show arrows",
49871
- defaultValue: true,
49872
- ui: {
49873
- intent: "behavior",
49874
- visibleWhen: {
49875
- field: "variant",
49876
- equals: "carousel"
49877
- }
49878
- }
49879
- },
49880
- {
49881
- id: "showDots",
49882
- type: "boolean",
49883
- label: "Show dots",
49884
- defaultValue: false,
49885
- ui: {
49886
- intent: "behavior",
49887
- visibleWhen: {
49888
- field: "variant",
49889
- equals: "carousel"
49890
- }
49891
- }
49892
- },
49893
- {
49894
- id: "autoplay",
49895
- type: "boolean",
49896
- label: "Autoplay",
49897
- defaultValue: false,
49898
- ui: {
49899
- intent: "behavior",
49900
- visibleWhen: {
49901
- field: "variant",
49902
- equals: "carousel"
49903
- }
49904
- }
49905
- },
49906
- {
49907
- id: "autoplayDelay",
49908
- type: "select",
49909
- label: "Autoplay delay",
49910
- defaultValue: "5000",
49911
- options: [
49912
- {
49913
- value: "3000",
49914
- label: "3 seconds"
49915
- },
49916
- {
49917
- value: "5000",
49918
- label: "5 seconds"
49919
- },
49920
- {
49921
- value: "7000",
49922
- label: "7 seconds"
49923
- },
49924
- {
49925
- value: "10000",
49926
- label: "10 seconds"
49927
- }
49928
- ],
49929
- ui: {
49930
- intent: "behavior",
49931
- visibleWhen: {
49932
- field: "variant",
49933
- equals: "carousel"
49934
- }
49935
- }
49936
- },
49937
- {
49938
- id: "arrowVisibility",
49939
- type: "select",
49940
- label: "Arrow visibility",
49941
- defaultValue: "always",
49942
- options: [{
49943
- value: "always",
49944
- label: "Always visible"
49945
- }, {
49946
- value: "hover",
49947
- label: "Show on hover"
49948
- }],
49949
- ui: {
49950
- intent: "behavior",
49951
- visibleWhen: {
49952
- field: "variant",
49953
- equals: "carousel"
49954
- }
49955
- }
49956
- },
49957
- {
49958
- id: "loop",
49959
- type: "boolean",
49960
- label: "Loop slides",
49961
- defaultValue: true,
49962
- ui: {
49963
- intent: "behavior",
49964
- visibleWhen: {
49965
- field: "variant",
49966
- equals: "carousel"
49967
- }
49968
- }
49969
- },
49970
- {
49971
- id: "marqueeDirection",
49972
- type: "select",
49973
- label: "Scroll direction",
49974
- options: [{
49975
- value: "left",
49976
- label: "Left"
49977
- }, {
49978
- value: "right",
49979
- label: "Right"
49980
- }],
49981
- defaultValue: "left",
49982
- ui: {
49983
- intent: "display",
49984
- visibleWhen: {
49985
- field: "variant",
49986
- equals: "marquee"
49987
- }
49988
- }
49989
- },
49990
- {
49991
- id: "marqueeSpeed",
49992
- type: "select",
49993
- label: "Scroll speed",
49994
- options: [
49995
- {
49996
- value: "slow",
49997
- label: "Slow (60s)"
49998
- },
49999
- {
50000
- value: "medium",
50001
- label: "Medium (40s)"
50002
- },
50003
- {
50004
- value: "fast",
50005
- label: "Fast (20s)"
50006
- }
50007
- ],
50008
- defaultValue: "medium",
50009
- ui: {
50010
- intent: "display",
50011
- visibleWhen: {
50012
- field: "variant",
50013
- equals: "marquee"
50014
- }
50015
- }
50016
- },
50017
- {
50018
- id: "marqueePauseOnHover",
50019
- type: "boolean",
50020
- label: "Pause on hover",
50021
- defaultValue: true,
50022
- ui: {
50023
- intent: "behavior",
50024
- visibleWhen: {
50025
- field: "variant",
50026
- equals: "marquee"
50027
- }
50028
- }
50029
- },
50030
- {
50031
- id: "marqueeImageSize",
50032
- type: "select",
50033
- label: "Image size",
50034
- options: [
50035
- {
50036
- value: "sm",
50037
- label: "Small (200px)"
50038
- },
50039
- {
50040
- value: "md",
50041
- label: "Medium (256px)"
50042
- },
50043
- {
50044
- value: "lg",
50045
- label: "Large (320px)"
50046
- },
50047
- {
50048
- value: "xl",
50049
- label: "Extra large (400px)"
50050
- }
50051
- ],
50052
- defaultValue: "md",
50053
- ui: {
50054
- intent: "display",
50055
- visibleWhen: {
50056
- field: "variant",
50057
- equals: "marquee"
50058
- }
50059
- }
50060
- },
50061
- {
50062
- id: "imageFilter",
50063
- type: "select",
50064
- label: "Image filter",
50065
- options: [
50066
- {
50067
- value: "none",
50068
- label: "None"
50069
- },
50070
- {
50071
- value: "grayscale",
50072
- label: "Grayscale"
50073
- },
50074
- {
50075
- value: "grayscale-hover-reveal",
50076
- label: "Grayscale (color on hover)"
50077
- },
50078
- {
50079
- value: "sepia",
50080
- label: "Sepia"
50081
- }
50082
- ],
50083
- defaultValue: "grayscale-hover-reveal",
50084
- ui: { intent: "style" }
50085
- },
50086
- {
50087
- id: "imageBorder",
50088
- type: "group",
50089
- label: "Image border",
50090
- schema: { fields: [
50091
- {
50092
- id: "enabled",
50093
- type: "boolean",
50094
- label: "Show border",
50095
- defaultValue: true
50096
- },
50097
- {
50098
- id: "colorToken",
50099
- type: "text",
50100
- label: "Border color",
50101
- defaultValue: "accent",
50102
- ui: { widget: "backgroundColor" }
50103
- },
50104
- {
50105
- id: "opacity",
50106
- type: "number",
50107
- label: "Border opacity",
50108
- defaultValue: 30,
50109
- ui: {
50110
- min: 0,
50111
- max: 100
50112
- }
50113
- },
50114
- {
50115
- id: "width",
50116
- type: "select",
50117
- label: "Border width",
50118
- options: [
50119
- {
50120
- value: "1",
50121
- label: "Thin (1px)"
50122
- },
50123
- {
50124
- value: "2",
50125
- label: "Medium (2px)"
50126
- },
50127
- {
50128
- value: "3",
50129
- label: "Thick (3px)"
50130
- }
50131
- ],
50132
- defaultValue: "2"
50133
- }
50134
- ] },
50135
- ui: { intent: "style" }
50136
- },
50137
- {
50138
- id: "imageCorners",
50139
- type: "select",
50140
- label: "Image corners",
50141
- options: [
50142
- {
50143
- value: "none",
50144
- label: "Square"
50145
- },
50146
- {
50147
- value: "sm",
50148
- label: "Slightly rounded"
50149
- },
50150
- {
50151
- value: "md",
50152
- label: "Rounded"
50153
- },
50154
- {
50155
- value: "lg",
50156
- label: "More rounded"
50157
- },
50158
- {
50159
- value: "xl",
50160
- label: "Very rounded"
50161
- },
50162
- {
50163
- value: "2xl",
50164
- label: "Extra rounded"
50165
- },
50166
- {
50167
- value: "3xl",
50168
- label: "Maximum rounded"
50169
- }
50170
- ],
50171
- defaultValue: "3xl",
50172
- ui: { intent: "style" }
50173
- }
50174
- ]),
51032
+ additionalFields: imageGalleryFields,
50175
51033
  layout: wrapVariant$1(gridLayout),
50176
51034
  variants: {
51035
+ tiles: tilesLayout,
50177
51036
  grid: wrapVariant$1(gridLayout),
50178
51037
  carousel: wrapVariant$1(carouselLayout),
50179
51038
  masonry: wrapVariant$1(masonryLayout),
@@ -50182,7 +51041,10 @@ var init_image_gallery = __esmMin((() => {
50182
51041
  className: "rb-image-gallery-marquee-container"
50183
51042
  })
50184
51043
  },
50185
- variantMeaning: { kind: "arrangement" },
51044
+ variantMeaning: {
51045
+ kind: "arrangement",
51046
+ lookOnlyKeys: ["tiles"]
51047
+ },
50186
51048
  defaultVariant: "grid",
50187
51049
  variantOptions: {
50188
51050
  grid: {
@@ -52543,76 +53405,60 @@ var init_gifting = __esmMin((() => {
52543
53405
  /**
52544
53406
  * Get form fields based on preset configuration.
52545
53407
  */
52546
- function getGlobalFormFields(form) {
52547
- const includePhone = form.includeOptionalPhone;
52548
- switch (form.fields.preset) {
52549
- case "emailOnly": return withOptionalPhone([{
52550
- id: "email",
52551
- type: "email",
52552
- label: "Email",
52553
- required: true,
52554
- placeholder: "your@email.com"
52555
- }], includePhone);
52556
- case "emailName": return withOptionalPhone([{
52557
- id: "email",
52558
- type: "email",
52559
- label: "Email",
52560
- required: true,
52561
- placeholder: "your@email.com"
52562
- }, {
53408
+ function getGlobalFormFields(form, presentation = {}) {
53409
+ const fields = withOptionalPhone(newsletterPresetFields(form.fields), form.includeOptionalPhone);
53410
+ return presentation.lookSlots ? fields.map((field) => ({
53411
+ ...field,
53412
+ label: lookFieldLabel(field)
53413
+ })) : fields;
53414
+ }
53415
+ function lookFieldLabel(field) {
53416
+ switch (field.id) {
53417
+ case "firstName": return "First name";
53418
+ case "lastName": return "Last name";
53419
+ default: return field.label;
53420
+ }
53421
+ }
53422
+ function newsletterPresetFields(fields) {
53423
+ switch (fields.preset) {
53424
+ case "emailOnly": return [emailField];
53425
+ case "emailName": return [emailField, {
52563
53426
  id: "name",
52564
53427
  type: "text",
52565
53428
  label: "Name",
52566
- required: form.fields.name === "required",
53429
+ required: fields.name === "required",
52567
53430
  placeholder: "Your name"
52568
- }], includePhone);
52569
- case "emailFirstLast": return withOptionalPhone([
52570
- {
52571
- id: "email",
52572
- type: "email",
52573
- label: "Email",
52574
- required: true,
52575
- placeholder: "your@email.com"
52576
- },
52577
- {
52578
- id: "firstName",
52579
- type: "text",
52580
- label: "First Name",
52581
- required: form.fields.firstName === "required",
52582
- placeholder: "First name"
52583
- },
53431
+ }];
53432
+ case "emailFirstName": return [emailField, firstNameField(fields.firstName === "required")];
53433
+ case "emailFirstLast": return [
53434
+ emailField,
53435
+ firstNameField(fields.firstName === "required"),
52584
53436
  {
52585
53437
  id: "lastName",
52586
53438
  type: "text",
52587
53439
  label: "Last Name",
52588
- required: form.fields.lastName === "required",
53440
+ required: fields.lastName === "required",
52589
53441
  placeholder: "Last name"
52590
53442
  }
52591
- ], includePhone);
52592
- case "emailNameCompany": return withOptionalPhone([
52593
- {
52594
- id: "email",
52595
- type: "email",
52596
- label: "Email",
52597
- required: true,
52598
- placeholder: "your@email.com"
52599
- },
53443
+ ];
53444
+ case "emailNameCompany": return [
53445
+ emailField,
52600
53446
  {
52601
53447
  id: "name",
52602
53448
  type: "text",
52603
53449
  label: "Name",
52604
- required: form.fields.name === "required",
53450
+ required: fields.name === "required",
52605
53451
  placeholder: "Your name"
52606
53452
  },
52607
53453
  {
52608
53454
  id: "company",
52609
53455
  type: "text",
52610
53456
  label: "Company",
52611
- required: form.fields.company === "required",
53457
+ required: fields.company === "required",
52612
53458
  placeholder: "Company name"
52613
53459
  }
52614
- ], includePhone);
52615
- default: throw new Error("Unknown newsletter preset");
53460
+ ];
53461
+ default: return assertNever$4(fields);
52616
53462
  }
52617
53463
  }
52618
53464
  function withOptionalPhone(fields, includePhone) {
@@ -52625,7 +53471,24 @@ function withOptionalPhone(fields, includePhone) {
52625
53471
  placeholder: "Phone (optional)"
52626
53472
  }];
52627
53473
  }
52628
- var init_newsletter_form_types = __esmMin((() => {}));
53474
+ var emailField, firstNameField;
53475
+ var init_newsletter_form_types = __esmMin((() => {
53476
+ init_src$4();
53477
+ emailField = {
53478
+ id: "email",
53479
+ type: "email",
53480
+ label: "Email",
53481
+ required: true,
53482
+ placeholder: "your@email.com"
53483
+ };
53484
+ firstNameField = (required) => ({
53485
+ id: "firstName",
53486
+ type: "text",
53487
+ label: "First Name",
53488
+ required,
53489
+ placeholder: "First name"
53490
+ });
53491
+ }));
52629
53492
  //#endregion
52630
53493
  //#region ../blocks/src/system/runtime/nodes/newsletter-form.interactive.ts
52631
53494
  function buildNewsletterDisplay(source) {
@@ -52641,13 +53504,14 @@ function buildNewsletterDisplay(source) {
52641
53504
  const choices = resolveRuntimeChoices(assessment);
52642
53505
  return {
52643
53506
  kind: "newsletter-form",
53507
+ ...source.lookSlots ? { lookSlots: source.lookSlots } : {},
52644
53508
  availability: assessment.tag === "available" ? "ready" : "unavailable",
52645
53509
  className: source.className ?? null,
52646
53510
  buttonLabel: form.buttonLabel,
52647
53511
  successMessage: form.successMessage,
52648
53512
  buttonVariant: source.buttonVariant ?? "primary",
52649
53513
  privacyNote: form.privacyNote,
52650
- fields: getGlobalFormFields(form),
53514
+ fields: getGlobalFormFields(form, source),
52651
53515
  choices
52652
53516
  };
52653
53517
  }
@@ -52696,6 +53560,7 @@ function parseRequiredMailingListSignedSourceToken(value) {
52696
53560
  }
52697
53561
  var newsletterButtonVariantSchema, mailingListContextSchema, mailingListTargetingSchema, newsletterFieldSchema, mailingListSignupBlockIdSchema, mailingListContentVersionIdSchema, mailingListSignupBlockSourceRefSchema, signedMailingListSourceTokenSchema, newsletterSourceCommonSchema, newsletterSourceSchema, newsletterDisplaySchema, newsletterHydrationSchema, newsletterRenderSchema, newsletterFormBlockRuntime;
52698
53562
  var init_newsletter_form_interactive = __esmMin((() => {
53563
+ init_lookSurfaces();
52699
53564
  init_src$4();
52700
53565
  init_islands();
52701
53566
  init_runtime$1();
@@ -52748,6 +53613,7 @@ var init_newsletter_form_interactive = __esmMin((() => {
52748
53613
  });
52749
53614
  signedMailingListSourceTokenSchema = z.string().trim().min(1).transform(parseRequiredMailingListSignedSourceToken);
52750
53615
  newsletterSourceCommonSchema = z.object({
53616
+ lookSlots: lookListPresentationSchemaShape.lookSlots,
52751
53617
  siteId: z.string().optional(),
52752
53618
  apiBaseUrl: z.string().optional(),
52753
53619
  mailingList: mailingListContextSchema.optional(),
@@ -52780,6 +53646,7 @@ var init_newsletter_form_interactive = __esmMin((() => {
52780
53646
  newsletterSourceCommonSchema.extend({ source: z.literal("preview") })
52781
53647
  ]);
52782
53648
  newsletterDisplaySchema = z.object({
53649
+ lookSlots: lookListPresentationSchemaShape.lookSlots,
52783
53650
  kind: z.literal("newsletter-form"),
52784
53651
  availability: z.enum(["ready", "unavailable"]),
52785
53652
  className: z.string().nullable(),
@@ -52862,9 +53729,10 @@ function sanitizeNewsletterSignupPublicContent(content) {
52862
53729
  const value = content;
52863
53730
  return Object.fromEntries(newsletterPublicFieldIds.map((id) => [id, value[id]]));
52864
53731
  }
52865
- var stackedComposition, stackedLayout, inlineLayout, editorialSplitLayout, newsletterSignupManifest, newsletterPublicFieldIds, newsletterSignupBlockDefinition;
53732
+ var stackedComposition, stackedLayout, inlineLayout, editorialSplitLayout, archLayout, newsletterSignupManifest, newsletterPublicFieldIds, newsletterSignupBlockDefinition;
52866
53733
  var init_newsletter_signup = __esmMin((() => {
52867
53734
  init_fragments$1();
53735
+ init_lookSlot();
52868
53736
  init_builder$1();
52869
53737
  init_styledSection();
52870
53738
  init_defineBlock();
@@ -52873,32 +53741,50 @@ var init_newsletter_signup = __esmMin((() => {
52873
53741
  init_normalizeMailingListBlockContent();
52874
53742
  stackedComposition = composeFragments([{ fragment: newsletterCopyFragment }, { fragment: newsletterFormFragment }]);
52875
53743
  stackedLayout = styledSection({
52876
- children: sectionContainer(stackedComposition.layout, {
53744
+ children: props(lookSlot("layout"))(sectionContainer(stackedComposition.layout, {
52877
53745
  gap: "md",
52878
53746
  className: "rb-text-center newsletter-stacked"
52879
- }),
53747
+ })),
52880
53748
  baseClass: "",
52881
53749
  spacing: "medium",
52882
53750
  background: "surface"
52883
53751
  });
52884
53752
  inlineLayout = styledSection({
52885
- children: sectionContainer(stackedComposition.layout, {
53753
+ children: props(lookSlot("layout"))(sectionContainer(stackedComposition.layout, {
52886
53754
  gap: "md",
52887
53755
  className: "newsletter-inline"
52888
- }),
53756
+ })),
52889
53757
  baseClass: "",
52890
53758
  spacing: "medium",
52891
53759
  background: "surface"
52892
53760
  });
52893
53761
  editorialSplitLayout = styledSection({
52894
- children: sectionContainer([el$1("div", { className: "newsletter-editorial-split-copy" }, newsletterCopyFragment.layout), el$1("div", { className: "newsletter-editorial-split-form" }, newsletterFormFragment.layout)], {
53762
+ children: props(lookSlot("layout"))(sectionContainer([el$1("div", {
53763
+ className: "newsletter-editorial-split-copy",
53764
+ ...lookSlot("head")
53765
+ }, newsletterCopyFragment.layout), el$1("div", {
53766
+ className: "newsletter-editorial-split-form",
53767
+ ...lookSlot("panel")
53768
+ }, newsletterFormFragment.layout)], {
52895
53769
  gap: "lg",
52896
53770
  className: "newsletter-editorial-split"
52897
- }),
53771
+ })),
52898
53772
  baseClass: "",
52899
53773
  spacing: "comfortable",
52900
53774
  background: "surface"
52901
53775
  });
53776
+ archLayout = styledSection({
53777
+ children: el$1("div", {
53778
+ className: "rb-container",
53779
+ ...lookSlot("layout")
53780
+ }, [el$1("div", lookSlot("frame"), [el$1("div", {
53781
+ className: "rb-grid",
53782
+ ...lookSlot("head")
53783
+ }, newsletterCopyFragment.layout), ...newsletterFormFragment.layout])]),
53784
+ baseClass: "",
53785
+ spacing: "medium",
53786
+ background: "surface"
53787
+ });
52902
53788
  newsletterSignupManifest = createBlockManifest({
52903
53789
  id: "block.newsletter-signup",
52904
53790
  title: "Newsletter Signup",
@@ -52913,13 +53799,26 @@ var init_newsletter_signup = __esmMin((() => {
52913
53799
  fragment: newsletterFormFragment,
52914
53800
  fieldPriority: 1
52915
53801
  }],
53802
+ additionalFields: [{
53803
+ id: "archFrame",
53804
+ type: "boolean",
53805
+ label: "Arch frame",
53806
+ ui: {
53807
+ intent: "display",
53808
+ hidden: true
53809
+ }
53810
+ }],
52916
53811
  layout: stackedLayout,
52917
53812
  variants: {
53813
+ arch: archLayout,
52918
53814
  stacked: stackedLayout,
52919
53815
  inline: inlineLayout,
52920
53816
  "editorial-split": editorialSplitLayout
52921
53817
  },
52922
- variantMeaning: { kind: "arrangement" },
53818
+ variantMeaning: {
53819
+ kind: "arrangement",
53820
+ lookOnlyKeys: ["arch"]
53821
+ },
52923
53822
  defaultVariant: "stacked",
52924
53823
  variantOptions: {
52925
53824
  stacked: {
@@ -54115,7 +55014,7 @@ var init_blocks$1 = __esmMin((() => {
54115
55014
  })
54116
55015
  ]
54117
55016
  })),
54118
- withDesignCapability("block.body-text", bodyTextBlockDefinition, sectionOnly(), defineBlockDesignMetadata({
55017
+ withDesignCapability("block.body-text", bodyTextBlockDefinition, withLookCapability(sectionOnly()), defineBlockDesignMetadata({
54119
55018
  flow: bodyFlow,
54120
55019
  layoutProfiles: [
54121
55020
  layoutProfile({
@@ -54490,7 +55389,7 @@ var init_blocks$1 = __esmMin((() => {
54490
55389
  weight: "quiet"
54491
55390
  })]
54492
55391
  })),
54493
- withDesignCapability("block.image-gallery", imageGalleryBlockDefinition, sectionOnly(), defineBlockDesignMetadata({
55392
+ withDesignCapability("block.image-gallery", imageGalleryBlockDefinition, withLookCapability(sectionOnly()), defineBlockDesignMetadata({
54494
55393
  flow: mediaFlow,
54495
55394
  layoutProfiles: [
54496
55395
  layoutProfile({
@@ -54579,7 +55478,7 @@ var init_blocks$1 = __esmMin((() => {
54579
55478
  weight: "standard"
54580
55479
  })]
54581
55480
  })),
54582
- withDesignCapability("block.newsletter-signup", newsletterSignupBlockDefinition, sectionOnly(), defineBlockDesignMetadata({
55481
+ withDesignCapability("block.newsletter-signup", newsletterSignupBlockDefinition, withLookCapability(sectionOnly()), defineBlockDesignMetadata({
54583
55482
  flow: conversionFlow,
54584
55483
  layoutProfiles: [
54585
55484
  layoutProfile({
@@ -55298,7 +56197,7 @@ var init_registry$2 = __esmMin((() => {
55298
56197
  init_lookSlot();
55299
56198
  init_core();
55300
56199
  init_formatting();
55301
- init_layout$2();
56200
+ init_layout$1();
55302
56201
  init_chromeLogo();
55303
56202
  init_ui();
55304
56203
  init_media$1();
@@ -55338,7 +56237,7 @@ var init_transforms = __esmMin((() => {
55338
56237
  init_core();
55339
56238
  init_registry$2();
55340
56239
  init_formatting();
55341
- init_layout$2();
56240
+ init_layout$1();
55342
56241
  init_media$1();
55343
56242
  init_ui();
55344
56243
  init_links();
@@ -55491,6 +56390,8 @@ function systemCustomizeFacetDefinitionsForBlock(blockKind) {
55491
56390
  var eventCalendarListLayoutFacet, fixedKnob, textKnob, onOff, systemCustomizeFacetDefinitions;
55492
56391
  var init_facets = __esmMin((() => {
55493
56392
  init_site_styles();
56393
+ init_imageShape();
56394
+ init_aspectRatio();
55494
56395
  init_events$1();
55495
56396
  eventCalendarListLayoutFacet = defineCustomizeFacet({
55496
56397
  blockKind: "block.event-calendar",
@@ -55581,7 +56482,14 @@ var init_facets = __esmMin((() => {
55581
56482
  }
55582
56483
  ], "3", true),
55583
56484
  fixedKnob("block.testimonials", "tilt", "Tilt the small cards", onOff, "true", false, true),
55584
- fixedKnob("block.testimonials", "archFrame", "Arch frame", onOff, "true", false, true),
56485
+ {
56486
+ ...fixedKnob("block.testimonials", "archFrame", "Arch frame", onOff, "true", false, true),
56487
+ blockKinds: [
56488
+ "block.testimonials",
56489
+ "block.newsletter-signup",
56490
+ "block.form"
56491
+ ]
56492
+ },
55585
56493
  fixedKnob("block.hero", "candleGlow", "Candle glow", onOff, "true", false, true),
55586
56494
  fixedKnob("block.hero", "columnGuides", "Column guides", onOff, "true", false, true),
55587
56495
  fixedKnob("block.hero", "titleSize", "Headline size", [
@@ -55605,6 +56513,15 @@ var init_facets = __esmMin((() => {
55605
56513
  value: "right",
55606
56514
  label: "Right"
55607
56515
  }], "right"),
56516
+ fixedKnob("block.media-text", "imagePosition", "Photo side", [{
56517
+ value: "left",
56518
+ label: "Left"
56519
+ }, {
56520
+ value: "right",
56521
+ label: "Right"
56522
+ }], "left"),
56523
+ fixedKnob("block.media-text", "imageShape", "Media shape", standardImageShapeOptions, "default"),
56524
+ fixedKnob("block.media-text", "aspectRatio", "Media aspect ratio", standardAspectRatioOptions, "auto"),
55608
56525
  textKnob("stickerLine", "Sticker line", 32),
55609
56526
  textKnob("smallCaption", "Small caption", 24),
55610
56527
  {
@@ -55796,10 +56713,7 @@ function arrangementPhotoContent(content, knobs) {
55796
56713
  }) };
55797
56714
  }
55798
56715
  function arrangementContentFacts(content) {
55799
- const section = isObjectRecord$1(content._sectionStyles) ? content._sectionStyles : {};
55800
- const background = isObjectRecord$1(section.background) ? section.background : {};
55801
- const itemPhotos = Array.isArray(content.cards) ? content.cards.filter((card) => isObjectRecord$1(card) && isObjectRecord$1(card.media)).length : 0;
55802
- const photoCount = Array.isArray(content.cards) ? itemPhotos : isObjectRecord$1(background.image) ? 1 : 0;
56716
+ const photoCount = arrangementPhotoCount(content);
55803
56717
  return {
55804
56718
  photoCount,
55805
56719
  facts: {
@@ -55810,6 +56724,13 @@ function arrangementContentFacts(content) {
55810
56724
  }
55811
56725
  };
55812
56726
  }
56727
+ /** The content stage owns media presence for every arrangement consumer. */
56728
+ function arrangementPhotoCount(content) {
56729
+ if (Array.isArray(content.cards)) return content.cards.filter((card) => isObjectRecord$1(card) && isObjectRecord$1(card.media)).length;
56730
+ if (Array.isArray(content.images)) return content.images.filter((item) => isObjectRecord$1(item) && isObjectRecord$1(item.image)).length;
56731
+ const section = isObjectRecord$1(content._sectionStyles) ? content._sectionStyles : {};
56732
+ return isObjectRecord$1((isObjectRecord$1(section.background) ? section.background : {}).image) ? 1 : 0;
56733
+ }
55813
56734
  function effectiveContentKnobValue(blockKind, key, value) {
55814
56735
  const facet = systemCustomizeFacetDefinitionsForBlock(blockKind).find((entry) => entry.target.kind === "content-field" && entry.target.field === key);
55815
56736
  return facet?.target.kind === "content-field" && facet.target.boolean ? value === "true" : value;